-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Дополнительные модули для компилятора #14
Comments
Спасибо! Лишним не будет. Я посмотрел, чуть позже добавлю. Возможно, там есть что исправить и оптимизировать. И у меня есть одно замечание: если Вы используете юникод, то сохраняйте файлы в UTF8 c BOM. P. S. Надо будет, когда найду время, переписать модуль Math для быстрого вычисления трансцендентных функций. Сейчас они вычисляются через сумму ряда, это неэффективно, но есть специальные быстрые алгоритмы. Код я нашел, но надо переписать на Оберон-07. |
Согласен, наверняка в коде есть что оптимизировать. Я просто сделал перевод кода из FreePascal. Состряпал небольшую программку-переводчик синтаксиса из Pascal в Oberon. Практически всё переводит за раз, но там пока есть одна нерешённая проблема. |
BOM в файлы добавил. |
Если сохранять юникод без BOM, то компилятор будет считать, что один символ равен одному байту и, соостветственно, неправильно вычислять позицию синтаксической ошибки, если перед ошибочным кодом в той же строке есть символы юникода: (* комментарий *) i := i DIV 10.0; Также, будут неправильно транслироваться операции с типом WCHAR (напр. присваивание для ARRAY n OF WCHAR): wstr := "Привет, мир!"; BOM нужно, чтобы компилятор отличал UTF8 от какой-либо однобайтовой кодировки. Поддержка однобайтовой кодировки сейчас нужна только по историческим причинам для работы в KolibriOS (там имеющиеся текствовые редакторы не умеют UTF8). Иначе я бы оставил только UTF8 с BOM или без. быстрые алгоритмы здесь: |
Здравствуйте! |
Спасибо, но я уже переделал SinCos, exp, ln и arctan2, остальное можно выразить через эти четыре функции. Значительно увеличилась скорость exp и обратных тригонометрических функций. Прямые тригонометрические и логарифм ускорились не так сильно. Кстати, в моей библиотеке еще были ошибки, связанные неправильным выбором знака квадратного корня. |
Радуете, коллеги!)) Давайте больше либ разных и быстрых)) |
Ок. |
Супер! Среднее время вычисления 10 000 000 синусов стало 68 тиков. :-) |
Да, теперь работает быстрее и, главное, правильно. |
Если кому интересно, для своей книжки по истории языка Pascal проводил сравнение всех бесплатных паскалеподобных компиляторов на скорость решения СЛАУ (матрица 3000х3000). Там есть и тест этого компилятора. :-) |
Ага. Полезно!)) |
Удивительно высокий результат у XDS. Но, к сожалению, он только для x86. |
XDS делали новосибирцы специально для нашего предприятия ИСС и во времена оны, когда финансирование устремилось к нулю, его разработку полностью забросили. А так - это превосходный оптимизирующий компилятор, слегка сложноватый, но по скорости он чуть ли не ассемблер уделывет. Его исходники доступны на Гитхабе, если бы кто взялся продолжить разработку... |
Здравствуйте, Вадим! |
Вот ссылка на книгу: |
В закладки)) |
Спасибо. |
Предупреждаю - это не научный труд. :-) Писал её для наших студентов, специально, чтобы их не клонило ко сну от программирования. :-) |
Шеф дал команду отдыхать двое суток (рабочий конфликт по мержу кода). Так что почитаю с интересом. |
Думаю, надо завести обсуждение. Есть сразу мысли по тексту. |
Там во введении написано - "... не только факты, но так же многочисленные слухи и сплетни...". ;-) Так что споры приветствуются. Вот только где именно спорить? |
Разумеется на соответствующей страничке проекта на github)) |
Всем доброго времени суток! |
Во! Это разговор!)) |
Доброе время суток! Очередное небольшое добавление для Вашего суперкомпилятора. :-) Список процедур: Length() - длина строки в символах. *Примечание: обе процедуры выше работают с большинством парных европейских символов с диакритами. Плюс греческие символы и кирилица. Для азиатских языков пока не сделано. IntToHex() - представление целого числа в шестнадцатеричном строковом виде. Ссылка на модуль: |
Отлично! На днях попробую. |
Похоже, стандартная библиотека пошла в наработку?)) Все подобные конвертации, безусловно пригодятся. |
Бэк-энд STM32 сейчас подходит не для всех устройств, так как могут различаться адреса начала ROM/RAM памяти. PROCEDURE CortexM3; Вещественная арифметика эмулируется и довольно неэффективно. Надо будет переписать в машинных кодах, но пока до этого не доходит. |
Можно взять все константы из компилятора |
OK, закрою, откровенно говоря, ничего интересного там не вижу. Можно, конечно, взять из aix, не проблема. Вопрос в том, как это лучше передать в командной строке. Да, еще: некоторые устройства требуют запись контрольной суммы в вектор прерываний, это тоже надо как-то учитывать. |
Уууу.... Ну, это какие-то детали -- я не в курсе)) Просто накомпилил, залил и работает. |
Но ведь каким-то образом, характеристики, модель устройства передаются в компилятор. Если указывать модель, то их очень много, а если только характеристики, то получается много параметров в командной строке. |
Ну так зачем делать параметры командной строки? Тупо взять файл описаний. Они же все уже описаны. Их там оооочень много. Считай, только расширение поменять, да файл переименовать. |
В начале года пробовал реализовать интерфейсные компоненты из GTK (окна, кнопки и т.п. бантики и рюшечки... :-) ) с помощью ихних прямых функций. На окнах дело встало. Так и не удалось его создать, хотя с первого взгляда вроде всё верно. Возможно дело в большом зоопарке излишне "дробанутых" типах данных в Си - 8, 16, 32, 64-битные, плюсминусовые, беззнаковые... , которые Oberon-07 просто-напросто не воспроизводит. Возможно отсюда и проблемы в посылке правильных данных. Не разобрался, плюнул... |
Ну так SYSTEM же позволяет вообще конём ходить)) |
Надо будет подробнее изучить aixp/O7, но на первый взгляд, в компилятор зашит список возможных таргетов (LPC4088, STM32F100, STM32F101, ...) (их очень много) и, линкер получает имя таргета из командной строки. Вот, как-то так:
|
Ну, ты же можешь оформить вызовом процедуры, а не командной строкой ;) Я тут немного поработал над примером анимации для lin64)) Можешь вставить в README.md ссылку на мою репу)) И пора бы уже добавить полноценный README.md |
Ладно, сделаю какой-нибудь формальный README.md и тогда добавлю ссылку. Нужна передача параметров в командной строке. Как иначе указать компилятору, для какого устройства компилировать? |
Вовсе не обязательно. Определяешь модуль stmopt.ob07 и там определяешь переменные для компилятора. При написании программы его надо обязательно импортировать. Как только ты перехватил импорт этого модуля -- значит там лежат параметры. При компиляции подтягиваешь оттуда переменные и упрощаешь себе задачу кратно. Точно также вместо опций командной строки для всего компилятора -- ты можешь определять импорт соответствующих контрольных модулей. Даже если такого импорта нет -- определяешь тип операционной системы и по дефолту генеришь бинарник для этой платформы. Надо другая платформа? Велком в параметры командной строки или ещё лучше -- переменные окружения. Чем каждый раз в параметры набивать -- один раз переменную окружения задал и доволен (* особенно когда надо серию бинарников собирать, или сложный сценарий *). |
Сложновато в использовании. Ладно, для STM* это всё не так уж важно, надо только правильно указать размер RAM и ROM при компиляции. Адреса вроде бы одни и те же, контрольная сумма не нужна. Проблемы будут для других ARMv7 контроллеров: LPC*, Arduino Due (AT91SAM3X8E)... |
Ну вот и пригодилась процедура Trim из StrUtils). |
Здорово! :-) Я сейчас пытаюсь сетевой модуль допилить. Возможно что-то получится... Там будет самый минимум - создание сокета, для сервера: привязка к интерфейсу, слушание порта, приём связи. Для клиента: передача\приём данных. Закрытие сокета. Пока только для IPv4. Плюс универсальная процедура преобразования строкового адрема и порта в структуру с сетевым расположением байтов. |
Я пробовал работать с сетью по протоколу HTTPS (TLS 1.0, 1.1). Получалось запросить html-страницу и сохранить её на диске. Но до ума не довел... |
Ок, проверю, исправлю. |
Исправил. |
OK. |
А, нет. |
Спасибо, напомнили. :-) Забыл проинициализировать второй параметр нулём. |
Здравствуйте!
Могу ли я предложить Вам дополнительные модули для Вашего превосходного компилятора?
https://github.com/VadimAnIsaev/Oberon-07-additional-modules
- алгоритм 133б из Comm ACM 5,10 (Oct 1962) 553;
- алгоритм mrg32k3a;
- алгоритм MT19937 (Мерсена-Твистера).
The text was updated successfully, but these errors were encountered: