Ada_Ru форум

Обсуждение языка Ада

Ada & plugins

Оставить новое сообщение

Сообщения

Alexey Veselovsky
Ada & plugins
2008-06-26 10:09:19

Прочитал статью "On Dynamic Plug-in Loading with Ada 95 and Ada 2005".

Возник такой вопрос -- при статической сборке gnat вроде бы проверяет объектники на предмет согласованности. Т.е. на предмет того что все используют одни и те же версии спецификаций пакетов. Т.о. если где-то имеется рассогласование, то программа просто не соберется.

 

В so/dll же, вроде бы не содержится информации позволявшей бы выяснить согласованность спецификаций. Вроде бы в этих so/dll вообще ничего кроме имен функций и не содержится (т.е. ни типов возвращаемых

значений, ни числа и типов принимаемых значений). Правильно ли я

понимаю, что никоим образом удостовериться в том что загружаемая

библиотека (даже если она написана на Аде) использует правильную

спецификацию, нельзя? И что в этом случае у нас безопасность и

надежность получается где-то на уровне С.

 

Быть может есть какой-то инструментарий для "более правильного" и надежного построения систем плагинов?

On Thu, Jun 26, 2008 at 02:09:19PM +0400, Alexey Veselovsky wrote:

Прочитал статью "On Dynamic Plug-in Loading with Ada 95 and Ada 2005".

Думаю метод, описаный в статье, не проверяет согласовонность версий. Он также не переносим, поскольку от компилятора зависит, как

строить дерево классов (например, компилятор может "пересчетать"

классы чтобы быстро делать операции вида Object in Type'Class).

 

Быть может есть какой-то инструментарий для "более правильного" и надежного построения систем плагинов?

 

Думаю можно использовать Annex E как систему плагинов, там 100%

гарантируется согласовонность разделов программы. Может CORBA -

тоже вариант.

 

Кстати, иногда хочется обратного, чтобы работал старый главный модуль и новые плагины.

--

Maxim Reznik

On Thu, Jun 26, 2008 at 02:09:19PM +0400, Alexey Veselovsky wrote:

Прочитал статью "On Dynamic Plug-in Loading with Ada 95 and Ada 2005".

Думаю метод, описаный в статье, не проверяет согласовонность версий. Он также не переносим, поскольку от компилятора зависит, как

строить дерево классов (например, компилятор может "пересчетать" классы чтобы быстро делать операции вида Object in Type'Class).

 

Да. Не проверяет. Кроме того, интересно, что будет если в коде

расположеном в so/dll

возникнет исключение. Можно ли будет его поймать в основной программе? Будет ли (а если будет то всегда ли) работать RTTI?

 

Быть может есть какой-то инструментарий для "более правильного" и надежного построения систем плагинов?

 

Думаю можно использовать Annex E как систему плагинов, там 100%

гарантируется согласовонность разделов программы.

А Annex E требует чтобы разные разделы программы собраные разными ада-компиляторами могли работать совместно? Т.е. насколько это

переносимо будет.

 

Может CORBA - тоже вариант.

Корба вариант. Но уж больно тяжеловесный. В принципе, под виндами COM тоже вариант. Но тоже очень тяжеловесный.

 

Кстати, иногда хочется обратного, чтобы работал старый главный модуль и новые плагины.

 

Ну, тут следует определить что значит новые плагины -- собраные новым компилятором? Собраные для нового главного модуля?

Alexey Veselovsky wrote:

Прочитал статью "On Dynamic Plug-in Loading with Ada 95 and Ada 2005".

 

Возник такой вопрос -- при статической сборке gnat вроде бы проверяет

объектники на предмет согласованности. Т.е. на предмет того что все

используют одни и те же версии спецификаций пакетов. Т.о. если где-то

имеется рассогласование, то программа просто не соберется.

 

В so/dll же, вроде бы не содержится информации позволявшей бы выяснить

согласованность спецификаций. Вроде бы в этих so/dll вообще ничего

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

значений, ни числа и типов принимаемых значений). Правильно ли я

понимаю, что никоим образом удостовериться в том что загружаемая

библиотека (даже если она написана на Аде) использует правильную

спецификацию, нельзя? И что в этом случае у нас безопасность и

надежность получается где-то на уровне С.

 

Быть может есть какой-то инструментарий для "более правильного" и

надежного построения систем плагинов?

 

Нужно смотреть как gnatbind рулить. Не исключено, что есть в нём возможность генерировать соответствующие проверки.

 

А ещё есть в GNAT такая штука - automatic library initialization. Это когда при загрузке so/dll происходит автоматическое выполнение кода предысполнения. Последник генерируется gnatbind ;-)

Maxim Reznik пишет:

 

Кстати, иногда хочется обратного, чтобы работал старый главный модуль

и новые плагины.

 

Для этого можно попробовать в GNAT вынести gnatbind в библиотеку, подключаемую к программе, и вместо gnatbind использовать заглушку, которая бы всю инфу (все .ali) тащила бы в исполняемый файл или библиотеку.

 

-- If you want to get to the top, you have to start at the bottom

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти