Компилятор Ада83 на FPC

Обсуждаются как существующие проекты (перевод документации, информационная система и т.п.), так и создание новых.

Модератор: Модераторы

Компилятор Ада83 на FPC

Сообщение STAKANOV » 10.08.2006 19:23:20

Вот затеял авнтюру. Пишу компилятор Ада, стандарта 83 на FreePascal. Это даже не совсем компилятор - на выходе будет программа на ассемблере для FASM. Компилятор планируется OpenSource, но такой чтоб любой желпющий мог на нем компелить свои проги и распространять их как ему захочется. Правда на fpc будет только первая версия компилятора реализующая Ада83. Затем код будет переписан возможно с целью реализации более нового стандарта 2005 (а может хватит и 95?). Компилятор планируется кроссплатформенный - Windows, FreeBSD, Linux. Как только будет что-то более менее рабочее сразу сделаю маленькую страничку у себя на сайте и выложу все в инет.
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение bw » 11.08.2006 04:22:55

А зачем? Я очень плохо знаком с Ada и область её применения мне не известна, но все же - зачем?

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Сообщение STAKANOV » 11.08.2006 08:22:25

[bw] писал(а):А зачем? Я очень плохо знаком с Ada и область её применения мне не известна, но все же - зачем?

..bw

В настоящий момент существует лишь два живых компилятора Ada - ObjectAda и GNAT. ObjectAda - разработка Aonix, закрытый код, версию для коммерчекого использования (Special Edition) можно получить по запросу(я скачал где-то и так), коммерческая по неофициальным данным от 80$ до 600$ в завивисимости от варианта поставки. GNAT, разработка АдаCore, есть в двух вариантах GPL или коммерческий, соответсвенно на первом можно писать только GPL-софт, а второй стоит 14000евро за 5 рабочих мест в год (это минимальная поставка).

Соответсвенно цель - заполнить пустое место. :D
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение bw » 11.08.2006 13:30:55

В принципе, идея хорошая и намерения твои благородные, но объем работы, мне почемуто кажется, очень большой и было бы значительно проще, если бы ты транслировал Ada в Pascal, а не Assembler.
(А зачем Ada вообще нужен?, Что на нем делают?)

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Сообщение STAKANOV » 11.08.2006 14:10:09

[bw] писал(а):В принципе, идея хорошая и намерения твои благородные, но объем работы, мне почемуто кажется, очень большой и было бы значительно проще, если бы ты транслировал Ada в Pascal, а не Assembler.
(А зачем Ada вообще нужен?, Что на нем делают?)

..bw


На самом деле с Ада проще - он четко стандартизирован. К тому же я выбрал для начала самый простой стандарт Ада83, точнее самый первый. Ада95 это уже Ада83+ООП, а про новый Ада2005 я вообще ничего не знаю. Сложность трансляции на Паскаль, по-моему такая же как и на ассемблер. А компилятор сейчас писать не сложно - есть такие инструменты как "TP Lex и Yacc".

Ада разработан по заказу МО США для управления реальными объектами (ракетами, танками ... :wink: ). Применяется и в мирных целях в авиации, например. Точнее в Европе для систем управления воздушным движением. Я так понимаю речь идет о диспетчерских службах.

В принципе обычный паскале-подобный язык, такой же как и сам Паскаль, как и Модула или Оберон. Правда к Ада предъявляются повышенные требования по надежности и переносимости, что приятно. Можно сказать Ада это продвинутый Паскаль. Раз в десят лет выходит новый стандарт, каждый компилятор обязан ему соответсвовать, в противном случае это не Ада. (Компилятор Оберона-2 было бы проще сделать :lol: :lol: :lol: )

А делать на нем можно все тоже самое, что и на других языках. (Поправка - имеется ввиду прикладное программирование, низкоуровневые вещи на нем не пишут)

Более подробно можно почитать на http://www.ada-ru.org

Лично у меня при достижении программ определнного размера возникают трудности. Например с поиманием того к чему относится тот или иной end. Чтобы с этим справиться я начал писать что-то вроде end{case} или end {SomeProc}. Потом случайно посмотрел на Ада - там все это уже есть. Считается, что на Ада писать программы легче и проще. По-моему так и есть. Единственное что смущает - плотформо-независимость. Т.е. программиста не должна волновать архитектура железа.

Миф о грамоздкости Ады - полный бред. Считается, что на изучение языка достаточно 2х недель.
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение bw » 11.08.2006 14:41:34

Спасибо за исчерпывающую информацию :-).
Для ассемблера бя я писать не стал, потому что он везде разный, а Pascal (FreePascal), почти везде одинаковый (имуются ввиду платформы). Но, если для процесса создания есть порядочные инструменты, то конечно, приоритеты задачи можно изменить.
Что касается end - пиши на Python (блоки определяются отступами :-). А, если серьезно, то ненужно писать такие здоровые методы и пр. Я например дроблю их на субфункции, классы, модули и библиотеки, когда понимаю что перестаю понимать написанное. Для большей доступности можно прибегнуть к метаклассам и интерфейсам, можно ввести понятие контекста (с соответствующей реализацией) и пр.

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Сообщение STAKANOV » 11.08.2006 15:05:02

Для ассемблера бя я писать не стал, потому что он везде разный, а Pascal (FreePascal), почти везде одинаковый (имуются ввиду платформы).

Целевая платформа i386, ОС я перечислил. (Хотя у меня тут еще старенький сановский сервер завалялся, но у меня к нему клавиатуры нет и переходника для монитора). Не хочу за собой fpc тащить - у него своих багов хватает. Потом не разберемся где чей глюк. :D

А, если серьезно, то ненужно писать такие здоровые методы и пр. Я например дроблю их на субфункции, классы, модули и библиотеки, когда понимаю что перестаю понимать написанное.
Мне религиозные убеждение не позволяют выделять в процедуру блок, который есть только в одном месте. Хотя это считается приемлемым решением. Но, имхо, это показатель несовершенства языка - приходится жертвовать производительностью ради читаемости программы.

Да и сам паскаль устарел морально, это по-моему сам Вирт уже признает. Синтаксис Ады ближе к Модуле или Оберону, чем к Паскалю. Все используют паскаль по привычке. А на самом деле это уже позавчерашний день.

А Python это какое-то доморощенное изобретение, кажется. За ним ничего не стоит по-моему. :roll:
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение STAKANOV » 11.08.2006 16:24:54

Во я торомоз. :lol: :lol: :lol:

Самое главное - я создал эту тему с целью поиска людей разделяющих мои идеи и желающих поучаствовать в этом проекте. :D
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение shade » 11.08.2006 19:37:28

Мне религиозные убеждение не позволяют выделять в процедуру блок, который есть только в одном месте

Блок который используется в одном месте, со временем может быть и использован и в другом месте. У меня другое религиозное убеждение: если процедуру можно разбить, то это обязательно нужно сделать.

Да и сам паскаль устарел морально, это по-моему сам Вирт уже признает. Синтаксис Ады ближе к Модуле или Оберону, чем к Паскалю. Все используют паскаль по привычке. А на самом деле это уже позавчерашний день.

Паскаль не идеален, но по-моему лутший (Turbo|Object|Free pascal). И мне больно смотреть как его извратили в Oberon(1|2), Component Pascal. (в частности не понимаю, что за страсть писать ключевые слова заглавными буквами, замучаешься CapsLock переключать)

С Ada не знаком...
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение STAKANOV » 11.08.2006 19:40:50

Закончил лексический анализатор, с помощью TP Lex это заняло три дня. В LexBase.pas пришлось изменить значение константы, иначе plex не переваривал входной файл. Кстати в svn fpc уже внесли такие же изменения по моей просьбе. :D
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение STAKANOV » 11.08.2006 19:42:55

в частности не понимаю, что за страсть писать ключевые слова заглавными буквами, замучаешься CapsLock переключать


возможно это повышает читаемость программы, вроде это изобретение Вирта
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение unC0Rr » 12.08.2006 00:48:37

STAKANOV писал(а):
Для ассемблера бя я писать не стал, потому что он везде разный, а Pascal (FreePascal), почти везде одинаковый (имуются ввиду платформы).

Целевая платформа i386, ОС я перечислил. (Хотя у меня тут еще старенький сановский сервер завалялся, но у меня к нему клавиатуры нет и переходника для монитора). Не хочу за собой fpc тащить - у него своих багов хватает. Потом не разберемся где чей глюк. :D


Всё же предпочтительнее не в ассемблер, а в что-то более высокоуровневое... Я сам раньше думал, что напишу прогу для i386 и всем этого хватит, сейчас переделываю все асмовые вставки для поддержки amd64... Скоро у всех будут 64битные процессоры, стоит задуматься о кроссплатформенности. Не повторяй чужих ошибок! :)
unC0Rr
новенький
 
Сообщения: 59
Зарегистрирован: 02.02.2006 03:44:44

Сообщение shade » 12.08.2006 10:52:30

STAKANOV писал(а):возможно это повышает читаемость программы, вроде это изобретение Вирта
Я так не думаю, скорее наоборот читаемость падает. Но, впрочем, это субъективно...

Где можно скачать такие инструменты как "TP Lex и Yacc"? Хотелось бы покавыряться. Как-то я тоже хотел написать компилятор, но лексер я писал ручками, простым рекурсивным разбором..
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение STAKANOV » 12.08.2006 18:11:20

Всё же предпочтительнее не в ассемблер, а в что-то более высокоуровневое... Я сам раньше думал, что напишу прогу для i386 и всем этого хватит, сейчас переделываю все асмовые вставки для поддержки amd64... Скоро у всех будут 64битные процессоры, стоит задуматься о кроссплатформенности. Не повторяй чужих ошибок!

Это уже как раз и есть задача которую должен решать разработчик компилятора. Я думаю сначала сделать генерацию кода для i386, а затем расширять, чтоб можно было указать под какой процессор собирать

Так вроде код для i386 работает на amd64?

Где можно скачать такие инструменты как "TP Lex и Yacc"? Хотелось бы покавыряться. Как-то я тоже хотел написать компилятор, но лексер я писал ручками, простым рекурсивным разбором..

Все по-умолчанию входит в состав FPC.

Сайт http://www.musikwissenschaft.uni-mainz.de/~ag/tply/
Я от туда документацию скачал. Документация довольно краткая и местами я смотрел как это делается в обычном Lex и Yacc:
http://www.opennet.ru/docs/RUS/linux_parallel/node261.html
http://www.opennet.ru/docs/RUS/linux_parallel/node278.html

Дополнительные ссылки:
http://www.intuit.ru/department/sa/compilersdev/
http://epaperpress.com/lexandyacc/index.html
http://yacc.solotony.com/index.html
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Сообщение unC0Rr » 12.08.2006 21:53:35

STAKANOV писал(а):
Всё же предпочтительнее не в ассемблер, а в что-то более высокоуровневое... Я сам раньше думал, что напишу прогу для i386 и всем этого хватит, сейчас переделываю все асмовые вставки для поддержки amd64... Скоро у всех будут 64битные процессоры, стоит задуматься о кроссплатформенности. Не повторяй чужих ошибок!

Это уже как раз и есть задача которую должен решать разработчик компилятора. Я думаю сначала сделать генерацию кода для i386, а затем расширять, чтоб можно было указать под какой процессор собирать


Имхо всё же нет смысла заморачиваться над каждым процессором... проще генерировать код на си, который кто под какой хочет процессор скомпилирует. Копание в ассемблерах не лучшее времяпрепровождение на всю оставшуюся жизнь :)

Так вроде код для i386 работает на amd64?


Работает. Эмулируется. Но факт что люди не только i386 пользуются :)

Как вариант могу предложить идею для начала сделать генерацию на си (получая сразу и мультиплатформенность, и оптимизацию ассемблерного кода), потом уже генерацию на ассемблеры всех процессоров с оптимизациями.
unC0Rr
новенький
 
Сообщения: 59
Зарегистрирован: 02.02.2006 03:44:44

След.

Вернуться в Разное

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

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

Рейтинг@Mail.ru