Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 28 мар 2024, 14:41

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 63 ]  На страницу 1, 2, 3, 4, 5 ... 7  След.
Автор Сообщение
 Заголовок сообщения: Oberon-07/16
СообщениеДобавлено: 17 окт 2018, 12:51 
Не в сети

Сообщения: 35
Я написал новый компилятор Оберона-07 по ревизии 2016 г. Компилятор использует промежуточное представление в виде кода стэковой виртуальной машины. Такой промежуточный код плохо подходит для оптимизации и распределения регистров (фактически для вычислений выражений используются только три регистра), зато он сравнительно просто транслируется для разных типов процессоров. Пока есть бэк-энд только для x86_32, но планирую (когда-нибудь) сделать еще как минимум для x86_64. Также предполагаю усовершенствовать промежуточный код, чтобы можно было рациональнее использовать регистры и инлайнить процедуры. Скорость исполнения программ, конечно, так себе, но гораздо лучше, чем было -- сейчас она составляет 70-80% от скорости BlackBox. Да, пока он производит только ассемблерный листинг (fasm), на машинный код переделаю позднее. Я понимаю, что для мультитаргетности и высокого качества машинного кода, надо делать трансляцию в C или LLVM, но я делаю не то что лучше, а то, что мне интереснее. Поддерживаются ОС Windows и KolibriOS, для Linux пока не сделал.

Репозиторий на гитхабе https://github.com/AntKrotov/oberon-07-compiler


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 17 окт 2018, 15:19 
Не в сети

Сообщения: 146
Поздравляю с достигнутыми улучшениями.
1. Попробовал. С пользовательской точки зрения им пока не очень удобно пользоваться. Из описания, например, даже неясно как собрать многомодульное приложение. Планируются ли улучшения в этой области? Хотя бы в описании и примерах?
2. Чего не хватает для работы в GNU/Linux? Для этого семейства ОС формат ассемблерного кода сильно отличается или мешают другие детали?
3. Вам интересно работать над проектом только целиком или более интересна генерация низкоуровневого кода?

Экспериментально выяснилось, что многомодульное приложение собирается, если запускать компилятор из каталога с файлами с исходным кодом.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 18 окт 2018, 07:17 
Не в сети

Сообщения: 35
Comdiv писал(а):
Поздравляю с достигнутыми улучшениями.

Спасибо.

1. Вроде всё понятно -- надо просто указать главный модуль (полный путь, относительные пути пока не поддерживаются). Раздельной компиляции нет, любое приложение многомодульное: RTL и API всегда включаются в выходной файл. Все используемые модули должны находиться в одной папке с главным, либо в папке lib/Windows32 (lib/KolibriOS).
2. Не скажу, что я хорошо знаю Windows, но я её понимаю, в общих чертах. KolibriOS устроена очень наивно и поддержку
этой ОС сделать совсем просто. А с Linux я никогда вплотную не работал. Когда-то я читал (но сейчас уже смутно помню), что там в библиотеках используется позиционно-независимый код (PIC), это может усложнить задачу, поэтому пока я отложил поддержку Linux до лучших времен. Можно, конечно, сделать без поддержки генерации библиотек, но в любом случае на всё нужно время, нельзя всё сделать сразу. Сначала делаю то, что могу сделать быстрее.
3. Вообще, мне более интересна генерация низкоуровневого кода, хотя высококачественная кодогенерация -- это крайне сложная задача, но я не гонюсь за этим. Если хоть как-то работает -- уже хорошо.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 18 окт 2018, 11:31 
Не в сети

Сообщения: 146
akron1 писал(а):
1. Вроде всё понятно -- надо просто указать главный модуль (полный путь, относительные пути пока не поддерживаются)
Необходимость указания полного пути как раз и не является понятной из описания.
Цитата:
3. Вообще, мне более интересна генерация низкоуровневого кода, хотя высококачественная кодогенерация -- это крайне сложная задача, но я не гонюсь за этим. Если хоть как-то работает -- уже хорошо.
Я это спрашивал, чтобы понять, может ли Вам быть интересна кооперация или Вы нацелены на полный контроль всего транслятора, как это происходит со многими разрозненными группами. Раз Вам интересна именно низкоуровневая генерация в машинный код, то, возможно, сотрудничество могло бы позволить сосредоточиться на этой задаче. Такую возможность Вы не рассматриваете?


Мой опыт запуска Вашего транслятора таков:
Я его запускал в GNU/Linux из WINE - работает исправно. Если в .ini файле прописать _fasm_win "/usr/bin/fasm", то транслятор собирает и конечный исполняемый файл - забавный симбиоз. Также, мне удалось собрать транслятор проекта Восток, правда, нерабочий в полной мере, потому что псевдо-библиотечные модули - это просто интерфейсные заглушки. Но это уже особенности транслятора Восток. Это, наверно, говорит о достаточно хорошем качестве Вашего компилятора. К примеру, транслятор byte-code https://github.com/lboasso/oberonc ломается при попытке собрать этот же код.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 18 окт 2018, 13:01 
Не в сети

Сообщения: 203
akron1 писал(а):
Пока есть бэк-энд только для x86_32, ... Да, пока он производит только ассемблерный листинг (fasm), на машинный код переделаю позднее.

А fasm для него какой именно версии требуется? Я попробовал скомпилировать hello-world каким-то fasmw, который нашёл у себя где-то на компе, так при запуске экзешника выдаётся сообщение об ошибке в модуле In (вроде как выход за пределы массива)...

UPD. Скачал последнюю версию fasmw17304, прописал его в инишнике компилятора -- вроде скомпилировалось и выполнилось без ошибок...


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 18 окт 2018, 13:18 
Не в сети

Сообщения: 203
Кстати, я там посмотрел получающийся asm-файл, слишком много разных ассемблерных команд. Ведь любую программу, любой алгоритм можно записать одной единственной командой mov (она полна по Тьюрингу).
Не хочешь переделать кодогенератор, что бы он выдавал только команды mov? :lol:

Цитата:
https://www.cl.cam.ac.uk/~sd601/papers/mov.pdf - доказательство её тюринг полноты

https://github.com/xoreaxeaxeax/movfuscator - Собственно, реализация обфускатора, который заменяет обычный код на код, в котором есть ТОЛЬКО инструкции mov

https://bolknote.ru/all/4656/


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 18 окт 2018, 16:42 
Не в сети

Сообщения: 35
Comdiv писал(а):
Необходимость указания полного пути как раз и не является понятной из описания.

Да, это просто временная недоделка.

Comdiv писал(а):
Я это спрашивал, чтобы понять, может ли Вам быть интересна кооперация или Вы нацелены на полный контроль всего транслятора, как это происходит со многими разрозненными группами. Раз Вам интересна именно низкоуровневая генерация в машинный код, то, возможно, сотрудничество могло бы позволить сосредоточиться на этой задаче. Такую возможность Вы не рассматриваете?

Я не против сотрудничества. Просто компилятор это сложная и сильно связная программа. Там непросто сделать разделение труда.

Comdiv писал(а):
Также, мне удалось собрать транслятор проекта Восток, правда, нерабочий в полной мере, потому что псевдо-библиотечные модули - это просто интерфейсные заглушки.

Может нам, по-возможности, максимально сблизить наши реализации, т. е. сделать их как можно более совместимыми? А то реализаций O7 много, но каждая создает свой собственный диалект.

geniepro писал(а):
Скачал последнюю версию fasmw17304, прописал его в инишнике компилятора -- вроде скомпилировалось и выполнилось без ошибок...

Про версию fasm я забыл написать. Версия 1.72 тоже годится.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 18 окт 2018, 17:20 
Не в сети

Сообщения: 146
akron1 писал(а):
Я не против сотрудничества. Просто компилятор это сложная и сильно связная программа. Там непросто сделать разделение труда.
Но есть вполне разделяемые части. Разбор высокоуровневого языка - это одно, генерация кода - другое, взаимодействие с пользователем - третье. Главная проблема, как я это вижу, это договороспособность людей. Оберон привлекает одиночек, так как по силам почти любому желающему без жёсткой необходимости взаимодействия с другими людьми.

akron1 писал(а):
Может нам, по-возможности, максимально сблизить наши реализации, т. е. сделать их как можно более совместимыми? А то реализаций O7 много, но каждая создает свой собственный диалект.
Да, это было бы хорошо, я готов двигаться в этом направлении. Конкретно Восток не вводит диалектных отличий, кроме тех, которые вызваны неопределённостью в описании. Благодаря этому его можно собрать почти любым корректным транслятором Оберона. Но есть ещё и библиотеки.

akron1 писал(а):
Про версию fasm я забыл написать. Версия 1.72 тоже годится.
В GNU/Linux работает и с 1.71


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 20 дек 2018, 06:54 
Не в сети

Сообщения: 35
Есть бэк-энд для AMD64 (Windows)!
Еще очень сырой, но уже в состоянии компилировать сам себя. Пока есть некоторые недоработки:

- не поддерживаются длинные константы (те, которые не помещаются в диапазон [-2147483648..2147483647]): AMD64 не позволяет обрабатывать такие константы за одну инструкцию

- не поддерживается стандартное для Win64 соглашение вызовов -- оно довольно сложное и я пока сделал вызовы системных функций через обертки

- для плавающей точки используется x87 вместо xmm

- пока, по традиции, компилятор производит ассемблерный код fasm


Провел сравнение по скорости с компилятором Patchouli:

рекурсивное вычисление чисел Фибоначчи: одинаково
сортировка "пузырьком" целочисленного массива: Patchouli быстрее на 13%
задача о ферзях: Patchouli быстрее на 20%

Думаю, для начала, неплохо. Кодогенератор Patchouli немного лучше, но он изначально разрабатывался для AMD64.

Также, 64-битный компилятор без ограничений может производить и 32-битный код (обратное, конечно, неверно).
Хотя в AMD64 на 8 регистров больше, чем в x86, компилятор активно использует только 3 регистра (такое вот промежуточное представление). Нерационально, да. Возможно, в дальнейшем, я подумаю над этой проблемой.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 20 дек 2018, 12:04 
Не в сети
Аватара пользователя

Сообщения: 67
Откуда: Equestria
akron1 писал(а):
Хотя в AMD64 на 8 регистров больше, чем в x86, компилятор активно использует только 3 регистра (такое вот промежуточное представление). Нерационально, да. Возможно, в дальнейшем, я подумаю над этой проблемой.

Почему не "стек на регистрах"? Я такое распределение использую в своём arm-компиляторе. В оригинальном компиляторе oberon-07 тоже такой ход используется.


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 63 ]  На страницу 1, 2, 3, 4, 5 ... 7  След.

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club