Компилятор Oberon-07
-
Ссылка в первом сообщении http://www.inf.ethz.ch/personal/wirth/A ... Report.pdf не работает, но архив.орг снова выручает http://web.archive.org/web/201311031146 ... Report.pdf
Это самая свежая ревизия языка - 01.10.2013, и она, возможно, будет еще уточняться. Моя поделка реализует ревизию 22.9.2011.
http://web.archive.org/web/201110250952 ... Report.pdf
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, но сохраняется как возможность сборки программ для этих ОС, так и работоспособность компилятора в этих ОС.
- Небольшие изменения в SYSTEM.
- Разрешен экспорт структурных переменных (только для чтения).
- Сделано удаление "мертвых" процедур.
- Небольшие изменения в генерации *.obj (MS/COFF).
- Расширены и исправлены библиотеки для KolibriOS: добавлены модули для работы с доской отладки и диалогами ("Open" и "Color"), усовершенствованы процедуры загрузки динамических библиотек, сделан единый модуль для работы с файловой системой.
- Документация приведена в текстовый формат (CP866) и fb2.
- Удален текстовый редактор для Windows.
- Удалены библиотеки (кроме ран-тайма) и примеры для Windows и Linux, но сохраняется как возможность сборки программ для этих ОС, так и работоспособность компилятора в этих ОС.
- Attachments
-
-
oberon07.zip (134.41 KiB)Downloaded 471 times
-
Обновления.
Компилятор:
-вывод сообщений на консоль, вместо доски отладки
-текстовые сообщения об ошибках, вместо номеров ошибок (в дальнейшем их можно будет перевести на английский и сделать более информативными)
-шаблон elf встроен в компилятор
На этот раз более тщательно протестировал создаваемые obj-библиотеки, ошибок не обнаружил. Вопрос закрыт.
Библиотека:
Новые модули:
-RasterWorks -- обертка для RasterWorks.obj
-libimg -- обертка для libimg.obj
-kfonts -- работа с kf-шрифтами
Модуль Utils переименован в Args, всё равно там ничего не было, кроме разбора параметров. Интерфейс модуля Args сделан как в реализации Oxford Oberon-2.
Добавлены примеры использования RasterWorks, libimg, kfonts.
Компилятор:
-вывод сообщений на консоль, вместо доски отладки
-текстовые сообщения об ошибках, вместо номеров ошибок (в дальнейшем их можно будет перевести на английский и сделать более информативными)
-шаблон 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 410 times
-
Отлично, выстраивается иерархия базовых языков, живых в данный момент
asm c-- c oberon c++
как менее поддерживаемые еще получаются forth, pascal, basic, lua, py
asm c-- c oberon c++
как менее поддерживаемые еще получаются forth, pascal, basic, lua, py
Привет,
У тебя в файле kfonts.ob07 есть функция:
Я у себя в тестах существенно на 30-35% увеличил скорость обработки внеся изменение вроде такого, Оберон не знаю, код немного приблезительный...
У тебя в файле 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;
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:Ах вот оно как, я-то думаю почему у тебя работает быстрее моего. Хорошо придумано.
Там пока мало интересного. Основная идея в том, что компиляция разделяется на два этапа. Сначала исходный код транслируется в условный байт-код виртуальной машины (промежуточное представление), а потом байт-код можно транслировать в машинный. Это позволит для сохранения промежуточных значений выражений, по возможности, задействовать регистры вместо стэка; константы не загружать ни в стэк, ни в регистры, а встраивать непосредственно в машинные команды. И хотя это не имеет отношения к Колибри, но такой подход позволит сравнительно просто получить машинный код не только для x86, но и, например, для AMD64. Сейчас промежуточное представление сделано на ~50%, работы еще много, а свободного времени мало, поэтому работающий новый кодогенератор появится в лучшем случае весной, а то и летом.Siemargl wrote:Пиши подробности. Интересно.
Stopwatch - консольный таймер.
Вопрос: при вызове функций, можно как-то опускать ненужные параметры чтобы не заводить лишние переменные или нужно писать функцию заново?
На примере: DateTime.Now(Year, Month, Day, hour, min, sec);
Ещё странно - имена переменных регистрозависимы. Так и было задумано?
Вопрос: при вызове функций, можно как-то опускать ненужные параметры чтобы не заводить лишние переменные или нужно писать функцию заново?
На примере: DateTime.Now(Year, Month, Day, hour, min, sec);
Ещё странно - имена переменных регистрозависимы. Так и было задумано?
- Attachments
-
-
stopwatch.zip (6.35 KiB)Downloaded 328 times
-
1) Нет, опускать параметры нельзя -- язык почти игрушечный, синтаксис предельно упрощен.
2) Так и должно быть, язык регистрозависимый.
2) Так и должно быть, язык регистрозависимый.
Существует ли возможность получать на выходе простой объектник(COFF или OMF — не важно)?
В справке написано только
Было бы полезно, мне кажется.
Есть вот ещё какой-то Oberon-07 http://exaprog.com/eng/index.html http://exaprog.com/rus/index.html но он вроде другой, да?
В справке написано только
А чистый RAW(plain binary)?"obj" - KolibriOS DLL
Было бы полезно, мне кажется.
Есть вот ещё какой-то 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