Компилятор Oberon-07

High-level languages programming questions
  • akron1 wrote:в x86, x86-64, возможно ARM, AVR32
    Думаю, у проекта есть большие перспективы.

    Решил адаптировать к Oberon-7 некоторые из вон тех примеров(сейчас их 6) http://board.kolibrios.org/viewtopic.ph ... 280#p52371
    Пока это работает только под Windows, так как процедуры для KolibriOS In.Open и Out.Open ничего не делают, нужно самостоятельно вызывать ConsoleLib.open иначе не будет работать как надо.
    Пример "postfix" сейчас работает неправильно. Я чего-то не учёл? Но вообще там используется дважды вложенная процедура :)

    Интересует где можно взять обновления Editor-а? Если они есть, конечно.
    Да и вообще было бы удобно иметь возможность скачать последнюю версию компилятора, работающую под нужной ОС(Windows, Linux, KolibriOS) или даже подо все поддерживаемые сразу.
    На сайте https://sites.google.com/site/oberon07compiler/versii сейчас только версия от 2013 года.

    Кстати, насколько сложно может быть портирование Editor-а под KolibriOS? Там WinApi, я знаю, но ведь можно реализовать аналоги для KolibriOS?
    Attachments
    Projects.7z (2.94 KiB)
    Downloaded 293 times
  • Пример "postfix" не работает, потому что процедура In.Char выполняет ввод символа по нажатию enter. Т. е. вместо "a+b" ENTER, надо набрать:
    "a" ENTER "+" ENTER "b" ENTER ENTER
    вывод: ab+
    Да, и модуль RTL импортировать не надо, он автоматически добавляется к любой программе.
    Глубина вложения процедур не ограничена, но доступ к промежуточным переменным будет запрещен.

    Портировать Editor очень сложно, если бы было просто -- я бы давно уже сделал. Там ведь через WinApi сделано всё (и сделано далеко не лучшим образом, а лишь бы работало): меню (главное и всплывающее), вкладки, скроллбары, диалоговые окна; в общем, проще написать новый. Когда я его писал, я дальше Windows ничего не видел и возможность портирования на другую ОС меня не интересовала.
    Обновления редактора есть, просто я его больше не публикую, потому что антивирусы ругаются на GUI-приложения, но я всё же добавил его в архив, при этом скомпилировал как консольное приложение (к таким приложениям антивирусы относятся лучше). Также в архиве бинарники компилятора для всех трех ОС и библиотеки. Впрочем, как таковой библиотеки для Linux нет, потому что для этой ОС я ничего не пишу. В модуле /Lib/Linux32/API.ob07 есть привязки к некоторым системным функциям Linux.

    Code: Select all

      dlopen*         : PROCEDURE [cdecl] (filename, flag: INTEGER): INTEGER;
      dlsym*          : PROCEDURE [cdecl] (handle, symbol: INTEGER): INTEGER;
      _malloc*        : PROCEDURE [cdecl] (size: INTEGER): INTEGER;
      free*           : PROCEDURE [cdecl] (ptr: INTEGER);
      fopen*          : PROCEDURE [cdecl] (fname, fmode: INTEGER): INTEGER;
      fclose*, ftell* : PROCEDURE [cdecl] (file: INTEGER): INTEGER;
      fwrite*, fread* : PROCEDURE [cdecl] (buffer, bytes, blocks, file: INTEGER): INTEGER;
      fseek*          : PROCEDURE [cdecl] (file, offset, origin: INTEGER): INTEGER;
      exit*           : PROCEDURE [cdecl] (code: INTEGER);
      strncmp*        : PROCEDURE [cdecl] (str1, str2, n: INTEGER): INTEGER;
      strlen*         : PROCEDURE [cdecl] (str: INTEGER): INTEGER;
      clock_gettime*  : PROCEDURE [cdecl] (clock_id: INTEGER; VAR tp: TP): INTEGER;
    
    Используя dlopen и dlsym можно получить доступ и к другим функциям.
    Attachments
    oberon07.rar (274.84 KiB)
    Downloaded 324 times
  • > меню (главное и всплывающее), вкладки, скроллбары, диалоговые окна; в общем, проще написать новый.
    Для меня GUI всегда самое простое :) а вот логика куда сложнее.

    Вкладки можно выкинуть на первое время. Для меню есть kmenu и в принципе самописное меню - это просто. Вообще можно без меню - кнопками на тулбаре - короче вариантов много. Диалоговые окна - тут проблемы вообще не вижу...
    Из хаоса в космос
  • Я давно подумываю вынести свои элементы в библиотеку...
    У меня тоже есть меню, чекбокс, ноу-хау MoreLessBox и жемчужина коллекции Список :)
    Attachments
    c--lib.png
    c--lib.png (49.67 KiB)
    Viewed 10171 times
    Из хаоса в космос
  • kmenu нет по факту отсутствия исходников.

    переписывать все для каждого языка тоже нонсенс.
    нужно для Оберона какую то интеграцию.
  • Leency wrote:Для меня GUI всегда самое простое :) а вот логика куда сложнее.
    Вот если бы я тогда догадался четко разделить логику и GUI... Это в своих последних проектах я сразу выделяю все зависимости в отдельный модуль, а в то время у меня всё переплеталось.
    Leency wrote:Я давно подумываю вынести свои элементы в библиотеку...
    Ну, это было бы хорошо, конечно. А то иногда даже не хочется писать программу, если там надо GUI делать вручную.
  • В новой версии компилятора размер выходного приложения получается меньше, чем раньше.
    Я поправил пример "postfix", убрал импорт RTL изо всех примеров, также добавил ещё 3 примера(из Zonnon online collection и CRITICAL MASS MODULA-3 examples).
    Хотелось бы, чтобы примеры работали без переделки на всех поддерживаемых платформах. Они ведь кроссплатформенные.
    akron1 wrote:антивирусы ругаются на GUI-приложения, но я всё же добавил его в архив, при этом скомпилировал как консольное приложение (к таким приложениям антивирусы относятся лучше)
    Теперь окно консоли запускается вместе с GUI.

    А будущий компилятор будет понимать прежние исходники?
    Вообще хотелось бы иметь возможность подключать при компиляции сторонние модули. Планируется ли поддержка EXTERN?

    Заметил, что в EditorCtrl+U не работает, если выделять справа налево. А так можно пользоваться(подсветка, компиляция и запуск по хоткею). Ещё бы undo доработать.
    Projects.7z (4.41 KiB)
    если положить папку Projects в папку с компилятором, можно использовать bat-файлы build.all.bat и run.all.bat
    Downloaded 297 times
  • 0CodErr wrote: Хотелось бы, чтобы примеры работали без переделки на всех поддерживаемых платформах. Они ведь кроссплатформенные.
    Для этого надо делать кроссплатформенную библиотеку. Это у меня пока не приоритет.
    0CodErr wrote: Теперь окно консоли запускается вместе с GUI.
    Ну да, редактор только для моего личного пользования и я не обращаю внимания на окно консоли.
    0CodErr wrote: Заметил, что в EditorCtrl+U не работает, если выделять справа налево.
    Ctrl-U и Ctrl-L нужны для исправления ошибочного преобразования регистра. Выделять текст не надо, надо только поставить курсор после слова, в котором требуется изменить регистр.
    Логику работы редактора я списал со среды разработки Oberon-07 Astrobe для МК.
    0CodErr wrote: А будущий компилятор будет понимать прежние исходники?
    Новый компилятор сделан по ревизии 2016. Полной совместимости конечно нет, но отличия не такие уж большие. Программ написано мало и переделать их под новый компилятор будет несложно:

    - только один вещественный тип (REAL (double)), а не два (REAL (single), LONGREAL (double)). Одинарная точность всё равно применяется редко. Если будет надо, то можно написать процедуру преобразования single <=> double.

    - нет операций "<=" и ">=" для множеств, но они редко применяются и можно заменить: вместо "a<=b" написать "a*b=a", по смыслу это одно и то же.

    - если строка присваивается символьному массиву, то ее длина должна быть строго меньше длины массива (будет добавлен символ 0X), текущий компилятор допускает равенство длин.

    - так как вещественный тип только один, то не нужны и процедуры преобразования типов LONG и SHORT

    - исключена процедура ASSERT с двумя параметрами, осталась только с одним. Я этим вторым параметром не пользуюсь, но в принципе это несложно реализовать, здесь я еще подумаю.

    - исключена процедура COPY, она теперь не очень нужна, т. к. правила присваивания массивов изменились (но на старый код это не влияет).

    - промежуточные переменные больше недоступны. Это сложно, неэффективно и главное чревато ошибками: можно забыть объявить локальную переменную и случайно обратиться к одноименной и однотипной промежуточной. Конечно, можно точно так же случайно обратиться и к глобальной переменной, но при наличии промежуточных риск ошибки увеличивается. Польза от вложенных процедур при этом снижается, но всё равно частично сохраняется: глобальная область видимости не засоряется "лишними" именами; и т. к. опережающих описаний нет, вложение -- один из способов организации взаимной рекурсии.

    - несколько изменен цикл FOR
    FOR i := a TO b DO
    теперь выражение b вычисляется в каждой итерации, а не только перед первой.

    - изменился порядок размещения переменных и параметров в памяти, а также выравнивание данных.

    Остальные изменения на старый код не влияют.


    По поводу остальных вопросов -- пока трудно сказать, как оно будет.