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

> Внимание!

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

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

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


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

Группа: Пользователи
Сообщений: 194
Пол: Мужской
Реальное имя: Иван Левашев
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


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

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

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


Немного о том, как установить:
Распаковать куда-нибудь, далее обозначено многоточием.
Добавить в 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


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

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

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


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

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


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


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


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

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

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


В блоге AdaCore с прошлого года появляются уже разные посты про новую технологию SPARK-To-C, она же GNAT CCG, Common Code Generator, тоже транслятор в C. Коммерческим клиентам AdaCore эта технология уже доступна, можно ожидать, что в ближайшие пару месяцев выложат в открытый доступ одновременно с обычными компиляторами, как это делается каждый год.

Код
gprbuild --target=c


Технология на данный момент сильно ограничена, но это адекватно целям её применения — экзотические платформы, а это всякий embedded, под который, если портировать GNAT, то это как минимум GCC. На embedded платформах большую роль играет минимальный размер. Также требуется потратить некоторое время на портирование рантайма. CCG решает эту проблему радикально: ни одна из возможностей Ada, требующая runtime, не доступна. Нет рантайма — нет проблемы. Можно сразу писать на Аде, наслаждаясь вменяемой модульностью, но на выходе — только то, что может быть портируемым образом перенесено в C. Например, записи с массивами с длиной, заданной дискриминантом, могут иметь в своём составе только один такой массив, и он должен быть в конце записи. Нельзя возвращать строки переменной длины из функций, так как нет вторичного стека. Некоторые автоматически навешиваемые проверки, впрочем, могут присутствовать, не совсем всё урезано.


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


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

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

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


AdaMagic продолжает развиваться, только по второму кругу (и потом каждый раз) повторять все действия не было желания, поэтому на этот раз совершенно другой подход. Ну а ещё раньше видеомонтажом диск был забит под завязку, а сейчас всё черновое удалено, так что поставил, посмотрел в действии IDE. Раньше IDE вырезалась, а теперь — наоборот, это способ по умолчанию.

Получить рабочее IDE для AdaMagic — тоже не плохо. Почему бы и нет.

Скачать IDE нужно самостоятельно, сейчас появилась 64-битная, но качать нужно 32-битную версию. И дальше по инструкциям в README.txt. IDE в комплект не входит, соответственно, обновлять на каждый выпуск теперь не нужно. Изменения не столь значительные, комплексные числа добавились в библиотеку, а в компиляторе — целочисленные константы, которые на Аде были записаны в двоичном виде, в C переделываются в шестнадцатеричный вид для совместимости с каким-то компилятором C. Пока это не сильно отличается от прошлой версии, но как знать, вдруг что-то действительно полезное появится в будущем, по новому способу обновляться заметно проще.

Кстати, напишите, кто знает, Remote Update Sites URL для AppCOE. По умолчанию никаких Update Site не настроено. В документации ни на одном скриншоте URL не показан. Тот URL, что указан в features, не работает (404). Может быть, с evaluation их дают? Это чтоб ну совсем легко обновляться.


GNAT CCG, к сожалению, не настолько хорош, как мог бы быть. RAII и многие другие возможности Ады там отсутствуют. И он до сих пор не выпущен. Наверное, к ежегодному Make with Ada, регистрация на который начинается 16 октября 2018 г., а не летом, как было раньше, должны выпустить в общий доступ. Учитывая, сколько AdaCore пиарят эту разработку в блогах и учитывая их стремление пробиться в сегмент embedded (и конкурс, и CCG лежат в этом русле), этого логично ожидать.


Прикрепленные файлы
Прикрепленный файл  AdaMagic.install.IDE.7z ( 15.13 килобайт ) Кол-во скачиваний: 587


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


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

Группа: Пользователи
Сообщений: 194
Пол: Мужской
Реальное имя: Иван Левашев
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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


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

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

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


Пытался на Эльбрусе запустить. Пока что помешала педантичность l++. Оказывается, есть кое-что, критичное для AdaMagic, что часть стандарта ISO C, но против стандарта ISO C++. void* по стандарту ISO C++ не приводится неявно к указателю на что-либо другое, а AdaMagic такой код генерит постоянно. Во всех других известных трансляторах это приведение порождает предупреждение, и это ещё если знать, как включить. В l++ это неотключаемая ошибка. Ждём как починят.


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





Группа: Пользователи
Сообщений: 6
Пол: Мужской

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


Кстати, исходники CCG (Common Code Generator), есть на github. Это компилятор Ады в Си на основе LLVM. Вот официальная документация

Я не пробовал собирать, но слышал, что он проходит у же почти все тесты.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






давно хотел посматреть
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






123
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






123
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






123
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Есть большой выбор верифицированных свежих аккаунтов, как оффшоной, так и легальной(в РФ) БК. Заявки оставляйте на почте: sportbk(СОБАЧКА)webprogrammers(ТОЧКА)top
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Есть большой выбор верифицированных свежих аккаунтов, как оффшоной, так и легальной(в РФ) БК. Заявки оставляйте на почте: sportbk(СОБАЧКА)webprogrammers(ТОЧКА)top
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Есть большой выбор верифицированных свежих аккаунтов, как оффшоной, так и легальной(в РФ) БК. Заявки оставляйте на почте: sportbk(СОБАЧКА)webprogrammers(ТОЧКА)top
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






Есть большой выбор верифицированных свежих аккаунтов, как оффшоной, так и легальной(в РФ) БК. Заявки оставляйте на почте: sportbk(СОБАЧКА)webprogrammers(ТОЧКА)top
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гость






Есть большой выбор верифицированных свежих аккаунтов, как оффшоной, так и легальной(в РФ) БК. Заявки оставляйте на почте: sportbk(СОБАЧКА)webprogrammers(ТОЧКА)top
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Гость






Есть большой выбор верифицированных свежих аккаунтов, как оффшоной, так и легальной(в РФ) БК. Заявки оставляйте на почте: sportbk(СОБАЧКА)webprogrammers(ТОЧКА)top
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Гость






Есть большой выбор верифицированных свежих аккаунтов, как оффшоной, так и легальной(в РФ) БК. Заявки оставляйте на почте: sportbk(СОБАЧКА)webprogrammers(ТОЧКА)top
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Гость






Есть большой выбор верифицированных свежих аккаунтов, как оффшоной, так и легальной(в РФ) БК. Заявки оставляйте на почте: sportbk(СОБАЧКА)webprogrammers(ТОЧКА)top
 К началу страницы 
+ Ответить 

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

 





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