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

> Внимание!

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

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Компиляторы AdaMagic и GNAT CCG, Ada -> C, C++
сообщение
Сообщение #1


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

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

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


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

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

Замечание от 13 июня 2018: нет, всё же IDE полезно иметь, см. тему дальше.

Таким образом, это компилятор 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


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

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

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


Сейчас, когда начинают появляться деньги, возник вопрос, а по карману ли AdaMagic (aka AdaChanger)? Delphi по карману, GNAT Developer по карману, даже, может быть, с iOS всякими, если действительно захотеть.

Ответ от производителя получил

Цитата
I am sorry but we are not selling this product into Russia at this time. I will let you know if that changes.


Даже при желании мы на их финансовое состояние не повлияем никак. Можно не париться.

Тем временем обнаружил, что в adacgen.exe всё это время была довольно исчерпывающая информация, но IDA её не подхватывала, потому что плагин для чтения информации требует очень редкую msvcp100d.dll, с буквой d на конце, что значит debug, а debug версии этих библиотек не входят в состав перераспространяемых пакетов визуалки, вот и нет этого файла. После того, как скачал и подложил этот файлик, наступило прозрение. Там есть типы данных с именами полей, локальные переменные, и в IDA видно, что в таком-то регистре такая-то локальная переменная. Смысл всех ключей стал более менее понятен. В частности, загадочный -cppa банально значит включить всё, что связано с C++ (то же, что все остальные три ключа).

Опции adacgen (Показать/Скрыть)


Что касается собственно использования транслятора, удалось научиться делать некоторые трюки. Например, если просто делать объявленной процедуре pragma Import, то она и в Си выводе импортируется при помощи extern, но, возможно, под другим именем, ведь в Си нельзя одно от другого отвязать. А если написать Import с соглашением Intrinsic, то в Си не выводится extern, а транслятор начинает верить, что такая фунция всё же существует и генерирует код, ссылающийся на неё. Но если это всё же не настоящий intrinsic, то к тому, чтобы он появился, надо предпринять усилия. Написав pragma Import с оглашением Intrinsic для типа, можно дополнительным параметром указать строку "#include", которая будет вставляться в сишный вывод каждого модуля, зависящего от того, где такой хитрый тип объявлен. Сам тип использовать не обязательно, он может в private быть спрятан. Что-то другое, кроме #include, не работает, но и этого достаточно. Через эту щель удалось, например, подцепиться к atomic intrinsic для счётчиков ссылок. С ними возникла проблема, что AdaMagic указатели приводит к void*, а у этих atomic instrinsic поведение определяется именно тем, какой указатель передаётся. То есть, перегрузка по типу аргумента, не смотря на то, что в Си такого нет. Решилось тем, что я завернул atomic intrinsic в макрос, приводящий обратно к нужному типу. И написал для сишного макроса адское строго типизированное объявление. Строго типизированное объявление для того, что по сути является сишным макросом. Это ли не чудо. Используя этот трюк, я реализовал System.Atomic_Counters с тем же API, как в GNAT. Работает. Посмотрел все промежуточные файлы. Через AdaMagic, через сишный препроцессор всё проходит до уровня ассемблера, вся эта луковица разбирается до кочерыжки, и остаются машинные инструкции, делающие только то, что нужно.

Посмотреть можно здесь:

https://osdn.net/projects/referencing/scm/h…ments/tree/tip/

Кажется, самый сложный непортируемый трюк позади. Остаётся обычная Ada 95, на которой надо просто писать.


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

Сообщений в этой теме


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

 





- Текстовая версия 30.09.2020 4:30
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name