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

High-level languages programming questions
  • Это самая свежая ревизия языка - 01.10.2013, и она, возможно, будет еще уточняться. Моя поделка реализует ревизию 22.9.2011.
    http://web.archive.org/web/201110250952 ... Report.pdf
  • I want to shared two little games. I made these game to learn kolibrios api and Oberon07 programming lenguage. They are a TicTacToe clone, and a maze game. They are here: viewtopic.php?f=41&t=3096
  • Я скоро открою исходный код FB2 Reader'а, а пока выкладываю компилятор, которым его можно будет собрать.

    - Небольшие изменения в SYSTEM.
    - Разрешен экспорт структурных переменных (только для чтения).
    - Сделано удаление "мертвых" процедур.
    - Небольшие изменения в генерации *.obj (MS/COFF).
    - Расширены и исправлены библиотеки для KolibriOS: добавлены модули для работы с доской отладки и диалогами ("Open" и "Color"), усовершенствованы процедуры загрузки динамических библиотек, сделан единый модуль для работы с файловой системой.
    - Документация приведена в текстовый формат (CP866) и fb2.
    - Удален текстовый редактор для Windows.
    - Удалены библиотеки (кроме ран-тайма) и примеры для Windows и Linux, но сохраняется как возможность сборки программ для этих ОС, так и работоспособность компилятора в этих ОС.
    Attachments
    oberon07.zip (134.41 KiB)
    Downloaded 453 times
  • Обновления.

    Компилятор:

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

    На этот раз более тщательно протестировал создаваемые obj-библиотеки, ошибок не обнаружил. Вопрос закрыт.

    Библиотека:

    Новые модули:
    -RasterWorks -- обертка для RasterWorks.obj
    -libimg -- обертка для libimg.obj
    -kfonts -- работа с kf-шрифтами

    Модуль Utils переименован в Args, всё равно там ничего не было, кроме разбора параметров. Интерфейс модуля Args сделан как в реализации Oxford Oberon-2.

    Добавлены примеры использования RasterWorks, libimg, kfonts.
    Attachments
    oberon07.zip (167.42 KiB)
    Downloaded 400 times
  • Отлично, выстраивается иерархия базовых языков, живых в данный момент
    asm c-- c oberon c++

    как менее поддерживаемые еще получаются forth, pascal, basic, lua, py
  • Привет,

    У тебя в файле kfonts.ob07 есть функция:

    Code: Select all

    PROCEDURE smooth(VAR Font: TFont_desc; n, xsize, ysize: INTEGER);
    VAR x, y: INTEGER;
    BEGIN
      FOR y := 1 TO ysize - 1 DO
        FOR x := 1 TO xsize - 1 DO
          IF (getpix(Font, n, x, y, xsize) = 1X) & (getpix(Font, n, x - 1, y - 1, xsize) = 1X) &
    	 (getpix(Font, n, x - 1, y, xsize) = 0X) & (getpix(Font, n, x, y - 1, xsize) = 0X) THEN
    	setpix(Font, n, x - 1, y, xsize, 2X);
    	setpix(Font, n, x, y - 1, xsize, 2X)
          END;
          IF (getpix(Font, n, x, y, xsize) = 0X) & (getpix(Font, n, x - 1, y - 1, xsize) = 0X) &
    	 (getpix(Font, n, x - 1, y, xsize) = 1X) & (getpix(Font, n, x, y - 1, xsize) = 1X) THEN
    	setpix(Font, n, x, y, xsize, 2X);
    	setpix(Font, n, x - 1, y - 1, xsize, 2X)
          END
        END
      END
    END smooth;
    Я у себя в тестах существенно на 30-35% увеличил скорость обработки внеся изменение вроде такого, Оберон не знаю, код немного приблезительный...

    Code: Select all

    PROCEDURE smooth(VAR Font: TFont_desc; n, xsize, ysize: INTEGER);
    VAR x, y: INTEGER;
    BEGIN
      FOR y := 1 TO ysize - 1 DO
        FOR x := 1 TO xsize - 1 DO
          IF (getpix(Font, n, x, y, xsize) = 1X) 
                IF (getpix(Font, n, x - 1, y - 1, xsize) = 1X) &
                (getpix(Font, n, x - 1, y, xsize) = 0X) & (getpix(Font, n, x, y - 1, xsize) = 0X) THEN
                setpix(Font, n, x - 1, y, xsize, 2X);
                setpix(Font, n, x, y - 1, xsize, 2X)
                END;
          END;
          ELSE IF (getpix(Font, n, x - 1, y - 1, xsize) = 0X) &
    	 (getpix(Font, n, x - 1, y, xsize) = 1X) & (getpix(Font, n, x, y - 1, xsize) = 1X) THEN
    	setpix(Font, n, x, y, xsize, 2X);
    	setpix(Font, n, x - 1, y - 1, xsize, 2X)
          END
        END
      END
    END smooth;
    Из хаоса в космос
  • Эта процедура выполняется только после загрузки файла шрифта для подготовки глифов. При выводе текста она не используется и ее производительность не критична. Вывод глифов в графический буфер выполняется попиксельно с проверкой границ буфера для каждого пикселя, т. е. производится отсечение текста. И всё-таки, несмотря на тот код, который выдает компилятор и многочисленные проверки границ, производительность этой библиотеки можно признать удовлетворительной для большинства задач. Сейчас я постепенно переделываю кодогенератор компилятора, это позволит поднять скорость программ не менее чем в 2 раза, но возни там много...
  • > Эта процедура выполняется только после загрузки файла шрифта для подготовки глифов. При выводе текста она не используется и ее производительность не критична.
    Ах вот оно как, я-то думаю почему у тебя работает быстрее моего.
    Хорошо придумано.
    Из хаоса в космос
  • akron1 wrote:.. Сейчас я постепенно переделываю кодогенератор компилятора, это позволит поднять скорость программ не менее чем в 2 раза, но возни там много...
    Пиши подробности. Интересно.

    Кстати, готовую статью бы на Хабр...
  • Leency wrote:Ах вот оно как, я-то думаю почему у тебя работает быстрее моего. Хорошо придумано.
    А мне по-другому нельзя, постоянно приходится заботиться о сокращении вычислений.
    Siemargl wrote:Пиши подробности. Интересно.
    Там пока мало интересного. Основная идея в том, что компиляция разделяется на два этапа. Сначала исходный код транслируется в условный байт-код виртуальной машины (промежуточное представление), а потом байт-код можно транслировать в машинный. Это позволит для сохранения промежуточных значений выражений, по возможности, задействовать регистры вместо стэка; константы не загружать ни в стэк, ни в регистры, а встраивать непосредственно в машинные команды. И хотя это не имеет отношения к Колибри, но такой подход позволит сравнительно просто получить машинный код не только для x86, но и, например, для AMD64. Сейчас промежуточное представление сделано на ~50%, работы еще много, а свободного времени мало, поэтому работающий новый кодогенератор появится в лучшем случае весной, а то и летом.
  • Stopwatch - консольный таймер.

    Вопрос: при вызове функций, можно как-то опускать ненужные параметры чтобы не заводить лишние переменные или нужно писать функцию заново?

    На примере: DateTime.Now(Year, Month, Day, hour, min, sec);

    Ещё странно - имена переменных регистрозависимы. Так и было задумано?
    Attachments
    stopwatch.zip (6.35 KiB)
    Downloaded 315 times
  • 1) Нет, опускать параметры нельзя -- язык почти игрушечный, синтаксис предельно упрощен.
    2) Так и должно быть, язык регистрозависимый.
  • Существует ли возможность получать на выходе простой объектник(COFF или OMF — не важно)?
    В справке написано только
    "obj" - KolibriOS DLL
    А чистый RAW(plain binary)?
    Было бы полезно, мне кажется.

    Есть вот ещё какой-то Oberon-07 http://exaprog.com/eng/index.html http://exaprog.com/rus/index.html но он вроде другой, да?
  • Who is online

    Users browsing this forum: No registered users and 2 guests