IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

 
 Ответить  Открыть новую тему 
> Компилятор AdaMagic, Ada -> C, C++
сообщение
Сообщение #1


Большевик–концептуал
**

Группа: Пользователи
Сообщений: 120
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: octagram@jabber.ru
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

Репутация: -  0  +


Был давно такой интересный компилятор у производителя SofCheck. 5 лет назад SofCheck и AdaCore слились, а компилятор куда-то потерялся. У AdaCore его даже не купить. Он, конечно, поддерживает более старый стандарт Ada 95 с подмножеством Ada 2005, но иногда даже и такой компилятор может пригодиться.

Этот компилятор неожиданно был найден у другого производителя, который у адаистов вообще не на слуху: MapuSoft. У них можно запросить демку и скачать, потом они впаривают какой-то AppCOE на базе Eclipse, а если оно не нужно, то приходится распаковывать архив из архива из архива. Я постарался вытащить из AppCOE собственно AdaMagic и отбросить шелуху. Не имея представления о том, как он должен был выглядеть, возможно, не во всём корректно. И некоторых файлов вроде adabgen.inf и adacgen.inf просто нет.

Таким образом, это компилятор Ada -> C, C++, запускается он на Windows и Linux, а через эмуляторы — и на других платформах. Сценарий использования из коробки — это Ada -> C, C++ -> GCC, но в GCC есть GNAT, который лучше, а AdaMagic интерес, как я понимаю, представляет, когда нужно собирать под платформы, не поддерживаемые GNAT, вроде Asm.js и Эльбрус, соответственно, научиться им пользоваться нетривиально и зависит от потребностей. Может понадобиться писать свой рантайм или не использовать те возможности языка, под которые рантайм не написан.

Для скачивания требуется регистрация на форуме.

AdaMagic.2016-07-22.7z (191 Мб)


--------------------
If you want to get to the top, you have to start at the bottom
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Большевик–концептуал
**

Группа: Пользователи
Сообщений: 120
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: octagram@jabber.ru
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

Репутация: -  0  +


Немного о том, как установить:
Распаковать куда-нибудь, далее обозначено многоточием.
Добавить в PATH …\AdaMagic\windows\bin
Установить переменную среды ADA_MAGIC=…\AdaMagic\windows
Подредактировать …\AdaMagic\windows\SITE\rts_path и …\AdaMagic\windows\SITE\config

Дальше тяжело без документации. В PDF мало. Решал эту проблему. Вот, что удалось выяснить:

AdaMagic умел работать в 3х режимах, промежуточное представление, которое нужно компилировать дальше в машинный код собственными усилиями, либо в C/C++, либо в Java. И всё это — AdaMagic. Один поставщик (Intermetrics, AverStar, SofCheck) раздавал лицензии разным компаниям под разные условия, и когда мы берём чей-то компилятор, это адаптация AdaMagic.

Вот у MapuSoft именно второй сценарий, а у ObjectAda — первый и третий, но нет второго. ObjectAda однажды устроил раздачу бесплатных версий своего компилятора (ObjectAda 7.2 Special Edition), я себе такой сохранил, впрочем, в Интернете ещё можно найти, архив называется oa71sped.zip , и вот он пригодился. Свет проливается на то, как всё устроено. В частности, обнаруживается, что adacgen.exe — это переименованный adacomp.exe, а adabgen.exe — это переименованный adabuild.exe. А ещё в ObjectAda можно найти adacomp.inf и adabuild.inf, и если их переименовать и положить в …\AdaMagic\windows , то утилиты командной строки перестают ругаться. Правда, справка не вполне подходит. Так, в ObjectAda есть ключ -asm, что имеет смысл для компилятора для Windows, но не имеет смысла для конвертера в C/C++. Более правильная «документация» нашлась здесь: http://www.ada-auth.org/cpl/reports/ACATR048.txt Это отчёт на проверку соответствия стандарту языка Ада 95, а заодно он включает искомую документацию, хоть и старую, но сойдёт. Кстати, там всплывают ещё одни возможные имена: adacsrc и adacbuild, соответственно. Также частично удалось восстановить смысл новых ключей, глядя в код AppCOE.

Итого ключи adacgen (как представляющей наибольший интерес утилиты) получаются:

Сильно не понятные ключи (Показать/Скрыть)


Относительно понятные ключи (Показать/Скрыть)


Также оказалось полезно, что компилятор запоминает, с какими ключами собирались файлы, и пишет в файлы info. Например, Ada RTL для Windows собрана так:

COMPSW: adacomp SRC -m a -config ./config -config ./config -ke -xr -gc -O none -trace -eo +mr e -translate -pB -IXIL



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

А вот ключи для компиляции демки судоку, собранной средствами AppCOE:

COMPSW: adacomp SRC -m a -config ./config -config ./config -ke -xr -gc -O none -trace -eo +mr e -translate -pB -IXIL



Поскольку AppCOE ставить не хочется, вот так вот и достаётся оттуда информация.

Экспериментировал с emscripten. Собралось 287 из 325 файлов Ada RTL. Остальное нужно портировать вручную. Там всякие функции получения системного времени, аргументов командной строки и т. п.

Так как заморачиваться этим на первых порах не хочется, хотелось предоставить какую-нибудь заглушку, чтоб компилятор сам не вызывался, и чтоб можно было с неполным рантаймом собирать. Оттранслировать в C++ и не дать автоматически транслировать дальше. Посмотреть в исходник, что там вызывается и написать заглушки.

Нашёл, как это делать:
Сначала каждый исходник нужно обработать adareg:
adareg Hello_World_2.ads


Звёздочки (adareg *.ads *.adb) тоже понимаются.

Потом конвертировать:

adacgen -c -cppn -cppe -ke -ki Hello_World_2.ads



Это сконвертирует исходник Ada в C++. Так нужно и для тел, и для спецификаций сделать. Чтобы в C, надо убрать "-cppn -cppe". Чтобы убрать проверки, можно добавить -s. Это уже становится не Ada, но всё ещё хотя бы язык с нормальной системой типов и модулей. Всё это нужно, чтобы хоть что-то запустить на момент, пока рантайм ещё не портирован и даже заглушек ещё нет.


--------------------
If you want to get to the top, you have to start at the bottom
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Большевик–концептуал
**

Группа: Пользователи
Сообщений: 120
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: octagram@jabber.ru
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

Репутация: -  0  +


Такер Тефт, основоположник этого компилятора, любезно поделился файлами .inf. Там не все ключи, но судя по дате (2012й год), лучше уже ничего не будет. А внутри там дата из системы контроля версий 2008й год, так что, может быть, есть и поновее, а может быть, интересных мне ключей вроде «-cppa» и «-cppc» там никогда не было. Но это явно получше, чем брать файлы из ObjectAda Special Edition, где компилятор в машинные коды, а не в C.

Файлы распаковываются в ADA_MAGIC, то есть, в …\AdaMagic\windows


Прикрепленные файлы
Прикрепленный файл  adamagic_info.zip ( 5.53 килобайт ) Кол-во скачиваний: 78


--------------------
If you want to get to the top, you have to start at the bottom
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 25.09.2017 3:58
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"