Page 3 of 9

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

Posted: Sun Jan 05, 2014 6:14 pm
by Wildwest
Ссылка в первом сообщении http://www.inf.ethz.ch/personal/wirth/A ... Report.pdf не работает, но архив.орг снова выручает http://web.archive.org/web/201311031146 ... Report.pdf

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

Posted: Mon Jan 06, 2014 6:46 am
by akron1
Это самая свежая ревизия языка - 01.10.2013, и она, возможно, будет еще уточняться. Моя поделка реализует ревизию 22.9.2011.
http://web.archive.org/web/201110250952 ... Report.pdf

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

Posted: Thu Jul 30, 2015 10:29 pm
by ddarias
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

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

Posted: Fri Jan 29, 2016 5:51 pm
by akron1
Я скоро открою исходный код FB2 Reader'а, а пока выкладываю компилятор, которым его можно будет собрать.

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

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

Posted: Fri Jan 29, 2016 7:02 pm
by Wildwest

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

Posted: Sat Oct 15, 2016 11:25 pm
by akron1
Обновления.

Компилятор:

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

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

Библиотека:

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

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

Добавлены примеры использования RasterWorks, libimg, kfonts.

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

Posted: Sun Oct 16, 2016 1:46 am
by Siemargl
Отлично, выстраивается иерархия базовых языков, живых в данный момент
asm c-- c oberon c++

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

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

Posted: Fri Dec 23, 2016 3:39 am
by Leency
Привет,

У тебя в файле 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;

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

Posted: Fri Dec 23, 2016 4:34 am
by akron1
Эта процедура выполняется только после загрузки файла шрифта для подготовки глифов. При выводе текста она не используется и ее производительность не критична. Вывод глифов в графический буфер выполняется попиксельно с проверкой границ буфера для каждого пикселя, т. е. производится отсечение текста. И всё-таки, несмотря на тот код, который выдает компилятор и многочисленные проверки границ, производительность этой библиотеки можно признать удовлетворительной для большинства задач. Сейчас я постепенно переделываю кодогенератор компилятора, это позволит поднять скорость программ не менее чем в 2 раза, но возни там много...

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

Posted: Fri Dec 23, 2016 7:08 pm
by Leency
> Эта процедура выполняется только после загрузки файла шрифта для подготовки глифов. При выводе текста она не используется и ее производительность не критична.
Ах вот оно как, я-то думаю почему у тебя работает быстрее моего.
Хорошо придумано.

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

Posted: Sat Dec 24, 2016 1:21 am
by Siemargl
akron1 wrote:.. Сейчас я постепенно переделываю кодогенератор компилятора, это позволит поднять скорость программ не менее чем в 2 раза, но возни там много...
Пиши подробности. Интересно.

Кстати, готовую статью бы на Хабр...

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

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

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

Posted: Mon Feb 19, 2018 8:49 pm
by kogemyaka
Stopwatch - консольный таймер.

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

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

Ещё странно - имена переменных регистрозависимы. Так и было задумано?

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

Posted: Mon Feb 19, 2018 10:41 pm
by akron1
1) Нет, опускать параметры нельзя -- язык почти игрушечный, синтаксис предельно упрощен.
2) Так и должно быть, язык регистрозависимый.

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

Posted: Mon Apr 02, 2018 6:15 pm
by 0CodErr
Существует ли возможность получать на выходе простой объектник(COFF или OMF — не важно)?
В справке написано только
"obj" - KolibriOS DLL
А чистый RAW(plain binary)?
Было бы полезно, мне кажется.

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