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

> Портирование реализации сильных ссылок на Ada 95
сообщение
Сообщение #1


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

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

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


Требуется склонировать основное хранилище

https://osdn.net/projects/referencing/scm/hg/Referencing/

Поменять в gpr ключ -gnat12 на -gnat95 и добиться, чтоб тестовый пример собирался. Я делал на GNAT GPL 2017. Если собранный другой GNAT поддерживает -gnat95, сойдёт.

Я думал сам это сделать, чтоб начало положить, но не вывожу никак, рубит после китайского намертво, так и не довёл до конца.


Должен собираться и запускаться проект Referencing_Tester.gpr

Пока я пытался портировать, я столкнулся со следующим:

Limited_Reference — всё, что так называется, делается просто Reference. «subtype Limited_Reference is Reference;»

Limited_Reference принуждает не делать лишние копирования. В Delphi Result для больших объектов сразу по месту назначения выделяется, а в языке Ада, даже если написать return-do-end-return, компилятор временную переменную заводит, и только limited даёт возможность вкрутить ему мозги. В другом проекте, где контейнеры портируются, я делаю Ada 2012-подобый Ada 95-совместимый аналог, но в данном случае смысла в этой затее не увидел.

Limited_Reference в проекте используется в паре с Move. Move требует доступ на запись ко второму параметру. Все функции написаны так, что возвращают Limited_Reference. Возвращаемый Limited_Reference доступен только на чтение, но механизмы Ada 2012 приводят его к доступному на запись Reference, и Move работает. Чем-то это похоже на «&&» и семантику копирования в C++. Если же для Ada 95 объявлено «subtype Limited_Reference is Reference;», то Move такое не может пережевать. Надо заменять Move на Assign, где ругается. Ещё в Referencing.Tester.Main.adb есть строчки с объявлениями «… renames …», и компилятор в режиме Ada 95 на них жалуется. Там надо renames заменить на «… := …».

В версии Ada 95 нет записи методов через точку, поэтому X.Move (Y) и X.Assign (Y) надо переписывать на Move (X, Y) и Assign (X, Y), а поскольку Move меньше, где работает, то часть Move становится Assign.

Аспекты Pure и Preelaborate переделываются в pragma. Аналогично Inline_Always. overriding убирается. В одном месте процедуры стали dispatching, там Inline_Always надо заменить на Inline. Функция Release берёт параметр in out, что в Ada 95 не допускается. Надо переделать в процедуру с out параметром.

private with заменяется простым with.

Это всё, что я успел увидеть, пока занимался этим вопросом.

Перед фиксацией в https://osdn.net/projects/referencing/scm/hg/Referencing/ установить новую именованную ветку ada-95

В default там пусть остаётся Ada 2012 версия. Я, может, потом сведу ветки вместе, но в разных директориях, и когда видно будет, что насколько разъезжается.


Как получится на GNAT, можно переносить на AdaMagic.


Но, наверное, лучше файлы в хранилище Experiments скопировать и коммитить в Experiments, а не в Referencing.

Там система сборки, правда, нетривиальная. В Referencing для GNAT тестовый пример добавляет крючки на события копирования и освобождения, а в просто Referencing.gpr (как библиотека) этих крючков нет. Хоть как-нибудь для начала нужно запустить эту штуку.

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


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

Сообщений в этой теме
OCTAGRAM   Портирование реализации сильных ссылок на Ada 95   26.08.2019 17:58
Sergey Dukov   ------------------------------ -- Crea…   3.09.2019 14:54
OCTAGRAM   Mutable_Result : Mutable_Limited_Reference перекры…   4.09.2019 18:16
Sergey Dukov   Я с этим разобрался. Я портировал проект "Ref…   4.09.2019 19:34
OCTAGRAM   Да, только портировав Tester, можно понять, что вс…   4.09.2019 20:13
Sergey Dukov   Я закончил портирование пакета "Referencing…   5.09.2019 4:11
OCTAGRAM   Я закончил портирование пакета "Referencing…   5.09.2019 15:25
Sergey Dukov   Закончил портирование и влил результат на сервер в…   9.09.2019 3:45
OCTAGRAM   Наблюдается прогресс. Что я вижу. https://osdn.n…   9.09.2019 16:44
Sergey Dukov   А как узнать текущий номер задачи? И ещё, как дел…   9.09.2019 21:56
OCTAGRAM   А как узнать текущий номер задачи? В адресе нап…   9.09.2019 22:53
Sergey Dukov   Вы мне показывали как делать "commit" дл…   10.09.2019 3:05
Sergey Dukov   В последнем предложении я ошибся. операторы …   10.09.2019 16:24
OCTAGRAM   Вы мне показывали как делать "commit" дл…   10.09.2019 16:51
Sergey Dukov   А как расшифровать шаблон "\#(\d+)…   10.09.2019 18:28
OCTAGRAM   \d = любая цифра. + = жадно 1 или более раз с…   10.09.2019 19:15


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

 



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