Ada_Ru форум

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

Ada-2012 + Linux

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

Сообщения

Артём Н.
Ada-2012 + Linux
2013-05-12 18:55:23

Здравствуйте.

 

Я не являюсь специалистом по разработке ПО, тем более практически не знаком с Ada, поэтому некоторые вопросы покажутся глупыми. Тем не менее, буду рад, получив ответ хоть на что-то (в т.ч., в виде отсылок к тому, что прочитать), поскольку объём информации по теме большой, пока ещё я не разбирался, решил начать сразу отсюда.

 

1. Хочу использовать Ada, как основной язык для создания пользовательского ПО (в

основном, интерфейс, несложная "бизнес-логика", выполнение на PC). 2. Для разработки предпочитаю использовать ОС Linux.

3. Приложения, преимущественно должны быть либо кроссплатформенными (крайне желательно), либо выполняться под ОС Windows.

4. Ada мне нравится за возможность строгой формализации. Предполагаю, что вероятность появления ошибок в строгом коде - ниже.

 

 

Вопросы:

1. Что есть бесплатное, кроме GNAT?

2. GNAT обеспечивает кросскомпиляцию? Тут я замечал в осуждениях, что x86_64 не поддерживается...

3. Насколько я знаю, Ada 2012 поддерживает разработку с использованием контрактов и прочее... А есть ли поддержка стандарта в компиляторе? 4. Есть ли биндинги к популярным библиотекам (эээ, например, тот же Qt)? 5. Как сопрягается с IDE? В частности, кто-нибудь использует Vim для написания кода (я нашёл некий плагин только с 2008-года, пока не смотрел)? Для Eclipse что-нибудь есть?

6. Что есть своё для создания интерфейсов? Есть ли какая-то своя IDE (типа Lazarus для Object Pascal)?

7. Системы сборки, типа CMake, нормально сопрягаются (что-то мутное на Wiki написано: "Ada: not yet in cvs, but support exists (in PlPlot):

http://plplot.cvs.sourceforge.net/plplot/plplot/cmake/modules/")? 8. Что насчёт Windows? Могу ли я собрать проект? Чем?

9. Какие средства для проверки кода? Есть ли нечто подобное Valgrind? 10. Есть ли нечто, генерирующее Ada-классы из UML диаграмм?

11. Вообще, имеет смысл или лучше дальше C, ну или C++, не ходить?

Ещё раз извиняюсь за сумбурные вопросы.

И, вообще, хотелось бы узнать, какими средствами пользуются люди.

On 05/12/2013 10:55 PM, "Артём Н." wrote:

1. Что есть бесплатное, кроме GNAT?

Ничего.

 

2. GNAT обеспечивает кросскомпиляцию? Тут я замечал в осуждениях, что x86_64 не

поддерживается...

 

Коммерческая версия GNAT поддерживает (почти) всё. Здесь речь шла о бесплатной, и её нет для Windows 64bit, но она есть для Linux.

 

3. Насколько я знаю, Ada 2012 поддерживает разработку с использованием контрактов и прочее... А есть ли поддержка стандарта в компиляторе?

 

Да.

 

4. Есть ли биндинги к популярным библиотекам (эээ, например, тот же Qt)?

 

http://www.qtada.com/

 

5. Как сопрягается с IDE? В частности, кто-нибудь использует Vim для написания

кода (я нашёл некий плагин только с 2008-года, пока не смотрел)? Для Eclipse что-нибудь есть?

6. Что есть своё для создания интерфейсов? Есть ли какая-то своя IDE (типа Lazarus для Object Pascal)?

 

Я использую vim, для простых задач его вполне достаточно. Если хочется большего - автодополнение, умный поиск и т.д. - для этого есть GPS, поставляется вместе с компилятором.

 

7. Системы сборки, типа CMake, нормально сопрягаются (что-то мутное на Wiki написано: "Ada: not yet in cvs, but support exists (in PlPlot):

http://plplot.cvs.sourceforge.net/plplot/plplot/cmake/modules/")?

 

GNAT имеет собственную систему сборки, основанную на файлах проектов. Использовать другие в большинстве случаев нет смысла.

 

8. Что насчёт Windows? Могу ли я собрать проект? Чем?

 

Для сборки можно использовать ровно те же средства, что и для других платформ.

 

9. Какие средства для проверки кода? Есть ли нечто подобное Valgrind?

 

Что-то наподобие valgrind... Знаю, valgrind! ;-)

 

10. Есть ли нечто, генерирующее Ada-классы из UML диаграмм?

 

О! Это тема отдельного разговора. В общем и целом таких средств не то что нет, скорее нет смысла в их существовании - невозможно сделать универсальный генератор кода для универсального отображения. Мы для себя делали свой собственный используя Матрёшку для доступа к UML модели.

11. Вообще, имеет смысл или лучше дальше C, ну или C++, не ходить?

 

Спрашивать у поклонников Ada стоит ли использовать Ada? Ну ответ

очевиден. ;-) Попробуйте, поглядите, а там решайте.

13.05.2013 09:22, Vadim Godunko пишет:

2. GNAT обеспечивает кросскомпиляцию? Тут я замечал в осуждениях, что x86_64 не

поддерживается...

Коммерческая версия GNAT поддерживает (почти) всё. Здесь речь шла о бесплатной, и её нет для Windows 64bit, но она есть для Linux.

Насколько я понял: нет возможности собрать 64-х битное Windows приложение вообще?

Или есть возможность собрать но только под Linux (тогда, в принципе, не проблема)?

 

4. Есть ли биндинги к популярным библиотекам (эээ, например, тот же Qt)?

http://www.qtada.com/

Отлично. :-) Жаль, в репозитории нет. :-(

Хотя: "QtAda is an Ada2005 language bindings".

Стандарт 2012 полностью обратно совместим с 2005?

 

5. Как сопрягается с IDE? В частности, кто-нибудь использует Vim для написания

кода (я нашёл некий плагин только с 2008-года, пока не смотрел)? Для Eclipse что-нибудь есть?

6. Что есть своё для создания интерфейсов? Есть ли какая-то своя IDE (типа Lazarus для Object Pascal)?

Я использую vim, для простых задач его вполне достаточно.

Не соглашусь с вами. Я тут начал разбираться с Eclipse и пока не вижу каких-то уж очень заметных улучшений функциональности, по сравнению с Vim. К тому же:

http://eclim.org/

Пока не пользовался, только разбираюсь.

Так что, предположу, что Vim вполне подходит и для серьёзных задач.

Ещё по теме:

http://habrahabr.ru/post/53435/

 

Также, где-то на сайте Vim-а была статья, которая так и называлась: IDE. Со списком плагинов (хотя, там маловато).

 

Если хочется

большего - автодополнение, умный поиск

Есть в Vim, как класс. Вопрос лишь в применимости к Ada...

 

и т.д. - для этого есть GPS,

поставляется вместе с компилятором.

Посмотрел. Жаль, что интерфейс в ней сразу нельзя рисовать... С биндингами, конечно, это не важно, но было бы интересно.

 

7. Системы сборки, типа CMake, нормально сопрягаются (что-то мутное на Wiki написано: "Ada: not yet in cvs, but support exists (in PlPlot):

http://plplot.cvs.sourceforge.net/plplot/plplot/cmake/modules/")?

GNAT имеет собственную систему сборки, основанную на файлах проектов. Использовать другие в большинстве случаев нет смысла.

Хм... Это хорошая новость.

Я, кстати, думал, что GNAT - это просто один из фронтендов к gcc. Система удобна?

 

8. Что насчёт Windows? Могу ли я собрать проект? Чем?

Для сборки можно использовать ровно те же средства, что и для других платформ.

Т.е., с кроссплатформенностью относительно сборки и библиотек нет проблем?

9. Какие средства для проверки кода? Есть ли нечто подобное Valgrind?

Что-то наподобие valgrind... Знаю, valgrind! ;-)

Понятно. Посмотрел. Отлично.

 

А такое, как lint (в вариациях), ncc, rats имеет ли смысл?

И имеется ли?

 

10. Есть ли нечто, генерирующее Ada-классы из UML диаграмм?

О! Это тема отдельного разговора. В общем и целом таких средств не то что нет, скорее нет смысла в их существовании - невозможно сделать универсальный генератор кода для универсального отображения.

Так это возможно почти про любой целевой язык сказать... Или нет?

Мы для себя

делали свой собственный используя Матрёшку для доступа к UML модели.

А что за "Матрёшка"? Где-то проскакивало, но как-то не очень понятно... IDE или фреймворк?

 

11. Вообще, имеет смысл или лучше дальше C, ну или C++, не ходить?

Спрашивать у поклонников Ada стоит ли использовать Ada? Ну ответ очевиден. ;-) Попробуйте, поглядите, а там решайте.

Ответ далеко не так очевиден.

Если спросить, например, у сторонников ZX-Спектрум (да, сравнение некорректное во многих отношениях), стоит ли его использовать, они ответят - "нет". C - язык универсальный и широко распространённый. В этом его плюсы. Но имеет массу известных проблем, ограничений, которые не решает даже Object C и

подобное (о C++ я не говорю - это сплошная проблема).

У всего есть свои границы применимости.

Возможно, про Ada здесь скажут, что она для специальных областей и применений подходит, но универсальным языком не является (в плане того, что, как инструмент

для решения большинства общих задач малопригодна) в силу каких-то особенностей, которые видны далеко не сразу.

 

Мне бы, в принципе, для большинства задач (кроме специфических, где намного лучше подходят другие языки) хватило бы и C (с классами) (и ещё Ruby, пожалуй, выучу, посмотрев на пример работы с zlib в C).

 

Хочу я простого:

1. Чтобы программа делала то, что я хочу (в плане семантики).

2. Не вылетала с ошибками (всё бы было ясно видно в период компиляции). 3. Не жрала много памяти и CPU, если это не предусмотрено алгоритмом. 4. Просто читалась, понималась и воспринималась.

5. Быстро и непринуждённо была написана после установки требований.

На C это возможно, но для этого на него надо навесить целую кучу дополнительных инструментов.

В Ada, насколько я понимаю, большая часть всего этого встроена в язык, что сильно упрощает.

 

Отсюда конкретный вопрос звучит так: используете ли вы данный язык для написания

пользовательского ПО, которым, затем пользуются (например, системы для бухгалтеров)?

 

P.S.:

Программы для бортовых систем самолёта или система обнаружения и ведения цели для радара установки ПВО в пользовательское ПО не входят. :-)

On 05/13/2013 09:46 PM, "Артём Н." wrote:

Насколько я понял: нет возможности собрать 64-х битное Windows

приложение вообще?

Или есть возможность собрать но только под Linux (тогда, в принципе, не проблема)?

 

Невозможно собрать Windows 64bit приложение публично доступными

средствами. Можно конечно выучить Высшую Магию и собрать компилятор самостоятельно... но под Windows это весьма специфическая задача.

Стандарт 2012 полностью обратно совместим с 2005?

 

Ada 2012 это расширение Ada 2005. Обратная совместимость является чуть ли не самым важным критерием при доработке стандарта языка.

 

Система удобна?

 

Завоевала признание общественности :-) И отнюдь не из-за безысходности.

Т.е., с кроссплатформенностью относительно сборки и библиотек нет проблем?

При отсутствии использования специфических возможностей конкретной платформы - никаких.

 

А такое, как lint (в вариациях), ncc, rats имеет ли смысл?

И имеется ли?

 

Смысл всегда есть. Нет, не в том контексте что для C и иже с ним, но всё же... Для начала можно набрать gnatmake и поглядеть на список

диагностируемых компилятором стилистических проверок и предупреждений (семейства -gnatyxx и -gnatwxx). Если этого недостаточно, то можно натравить на исходники gnatcheck... Ну а если Вы разрабатываете что-то с совершенно безумно-специфическими требованиями - можно обучить

компилятор воспринимать только необходимое подмножество языка.

 

А что за "Матрёшка"? Где-то проскакивало, но как-то не очень понятно... IDE или фреймворк?

 

http://forge.ada-ru.org/matreshka

 

Возможно, про Ada здесь скажут, что она для специальных областей и применений

подходит, но универсальным языком не является (в плане того, что, как инструмент

для решения большинства общих задач малопригодна) в силу каких-то особенностей,

которые видны далеко не сразу.

 

Ada конечно специфический язык. Сделать в ней так же как и во многих других не всегда возможно; исключительно потому, что чужие костыли на ней закодировать непросто. Классический пример для C-онистов: пройтись по элементам массива используя указатель на элемент будет ОЧЕНЬ

непросто. В остальном в нём присутствуют все необходимые современному языку средства. Ну разве что сборка мусора отсутствует.

 

Отсюда конкретный вопрос звучит так: используете ли вы данный язык для написания

пользовательского ПО, которым, затем пользуются (например, системы для бухгалтеров)?

 

Ну для бухгалтеров - я не слышал. Но для торговли на рынке Forex - да. Для учёта в больницах - да.

13.05.2013 22:19, Vadim Godunko пишет:

On 05/13/2013 09:46 PM, "Артём Н." wrote:

Насколько я понял: нет возможности собрать 64-х битное Windows

приложение вообще?

Или есть возможность собрать но только под Linux (тогда, в принципе, не проблема)?

Невозможно собрать Windows 64bit приложение публично доступными

средствами. Можно конечно выучить Высшую Магию и собрать компилятор самостоятельно... но под Windows это весьма специфическая задача.

Т.е., всё-таки, в случае использования бесплатного GNAT - невозможно вообще?

Т.е., с кроссплатформенностью относительно сборки и библиотек нет проблем?

При отсутствии использования специфических возможностей конкретной платформы - никаких.

А если надо будет использовать нечто специфическое?

Например, вызов некоего API или ассемблерные вставки.

Могу ли я сделать это, не прибегая к другому языку, и могу ли я их ограничить чем-то наподобие директив препроцессора (без использования внешнего препроцессора)?

 

Ну а если Вы разрабатываете что-то с

совершенно безумно-специфическими требованиями - можно обучить

компилятор воспринимать только необходимое подмножество языка.

Т.е. имеется штатная возможность создания проблемно-ориентированных языков?

А что за "Матрёшка"? Где-то проскакивало, но как-то не очень понятно... IDE или фреймворк?

http://forge.ada-ru.org/matreshka

Deb-пакета нет. >:-| А так - неплохо.

 

Ada конечно специфический язык. Сделать в ней так же как и во многих других не всегда возможно; исключительно потому, что чужие костыли на ней закодировать непросто. Классический пример для C-онистов

Ну вы уж это, особо-то не ругайтесь.

 

пройтись

по элементам массива используя указатель на элемент будет ОЧЕНЬ

непросто. В остальном в нём присутствуют все необходимые современному языку средства. Ну разве что сборка мусора отсутствует.

1. Проход только по индексному элементу или наличествует foreach? 2. Вот насчёт сборки мусора... Насколько я понимаю, управление памятью организует компилятор. И как без сборки: что-то всё-таки придётся делать вручную?

 

P.S.:

Как я понял, использовать вполне возможно и продуктивно?

On Mon, 13 May 2013 22:19:07 +0400, you wrote:

 

Т.е., с кроссплатформенностью относительно сборки и библиотек нет проблем?

При отсутствии использования специфических возможностей конкретной платформы - никаких.

 

Как, например, для разделяемых библиотеки. Под Linux проблем не будет. Под Windows - очень непросто, т.к. у GNAT с этим большие проблемы (Ada RTL не в DLL). Под VxWorks их просто нет, вообще.

 

А как, да, объектные библиотеки - в-лёт и никаких make.

Возможно, про Ada здесь скажут, что она для специальных областей и применений подходит, но универсальным языком не является (в плане того, что, как инструмент

для решения большинства общих задач малопригодна) в силу каких-то особенностей,

которые видны далеко не сразу.

 

Ada конечно специфический язык. Сделать в ней так же как и во многих других не всегда возможно; исключительно потому, что чужие костыли на ней закодировать непросто. Классический пример для C-онистов: пройтись по элементам массива используя указатель на элемент будет ОЧЕНЬ

непросто.

 

Зачем же людей пугать? (:-))

 

Для любителей (и ценителей) по-кувыркаться есть:

 

http://www.ada-auth.org/standards/12rm/html/RM-B-3-2.html

 

Просто программисты Ады такого никогда не делают. Разве, что с перепою.

В остальном в нём присутствуют все необходимые современному

языку средства. Ну разве что сборка мусора отсутствует.

 

Т.к. она к таковым не разумеется принадлежит. Хотя, опять, для любителей где-то валялся сборщик Бёмера для GNAT-a. Ссылку не сохранил, по-гуглите, найдете.

 

Отсюда конкретный вопрос звучит так: используете ли вы данный язык для написания

пользовательского ПО, которым, затем пользуются (например, системы для бухгалтеров)?

 

P.S.:

Программы для бортовых систем самолёта или система обнаружения и ведения цели для радара установки ПВО в пользовательское ПО не входят. :-)

 

А ПО автоматизации пойдет? Там есть HMI (GUI), базы данных измерений, ну и конечно управление.

 

--

Regards,

Dmitry A. Kazakov

http://www.dmitry-kazakov.de

On 05/13/2013 11:23 PM, Dmitry A. Kazakov wrote:

 

Как, например, для разделяемых библиотеки. Под Linux проблем не будет. Под Windows - очень непросто, т.к. у GNAT с этим большие проблемы (Ada RTL не в DLL). Под VxWorks их просто нет, вообще.

 

Про DLL под Windows - неправда! Она существует достаточно долго (ну минимум с версии GNAT GPL 2007) и нормально работает. Её автоматически использует gprbuild при сборке проекта разделяемой библиотеки.

 

PS. Без нормальной RTL в виде DLL не работали бы приложения QtAda. :-)

On Mon, 13 May 2013 23:05:18 +0400, you wrote:

 

13.05.2013 22:19, Vadim Godunko пишет:

On 05/13/2013 09:46 PM, "Артём Н." wrote:

Насколько я понял: нет возможности собрать 64-х битное Windows

приложение вообще?

Или есть возможность собрать но только под Linux (тогда, в принципе, не проблема)?

Невозможно собрать Windows 64bit приложение публично доступными

средствами. Можно конечно выучить Высшую Магию и собрать компилятор самостоятельно... но под Windows это весьма специфическая задача.

Т.е., всё-таки, в случае использования бесплатного GNAT - невозможно вообще?

 

Зачем? Вы что видео файлы топырить собираетесь?

 

Т.е., с кроссплатформенностью относительно сборки и библиотек нет проблем?

При отсутствии использования специфических возможностей конкретной платформы - никаких.

А если надо будет использовать нечто специфическое?

 

Не надо. Мы работаем с железом (специфические измерительные инструменты, протоколы, сенсоры и т.п.) и еще ни разу этого не понадобилось.

 

Например, вызов некоего API

 

Да. Есть вызов импортированного модуля через конвенции stdcal, cdecl и.т.д.

http://www.ada-auth.org/standards/12rm/html/RM-J-15-5.html#I8486

 

или ассемблерные вставки.

 

Да. Но не нужно. Я помню один раз применил, для вызова инструкции outp из Ады.

 

http://www.ada-auth.org/standards/12rm/html/RM-C-1.html#I7561

 

--

Regards,

Dmitry A. Kazakov

http://www.dmitry-kazakov.de

On Mon, 13 May 2013 23:33:38 +0400, you wrote:

 

On 05/13/2013 11:23 PM, Dmitry A. Kazakov wrote:

 

Как, например, для разделяемых библиотеки. Под Linux проблем не будет. Под Windows - очень непросто, т.к. у GNAT с этим большие проблемы (Ada RTL не в DLL). Под VxWorks их просто нет, вообще.

 

Про DLL под Windows - неправда! Она существует достаточно долго (ну минимум с версии GNAT GPL 2007) и нормально работает. Её автоматически использует gprbuild при сборке проекта разделяемой библиотеки.

 

Это интересно, т.к. у меня Pro и там ее нет. И AdaInit он, зараза, не создает.

 

PS. Без нормальной RTL в виде DLL не работали бы приложения QtAda. :-)

 

Почему? Чужую DLL прилинковать нет проблем. Весь GTK в виде DLL.

 

Проблема ведь с Ада DLL, особенно если пакеты там нуждаются в инициализации или объекты живут на библиотечном уровне. Последний раз, кода я пытался, все заканчивалось вываливанием по Accessibility Check.

 

Не просветите?

 

--

Regards,

Dmitry A. Kazakov

http://www.dmitry-kazakov.de

On 05/13/2013 11:05 PM, "Артём Н." wrote:

А если надо будет использовать нечто специфическое?

Например, вызов некоего API или ассемблерные вставки.

Могу ли я сделать это, не прибегая к другому языку, и могу ли я их ограничить

чем-то наподобие директив препроцессора (без использования внешнего препроцессора)?

 

Конечно же такое возможно; но нужно быть готовым к некоторым танцам с бубном. Как вариант можно делать вариации пакетов для той или иной системы и указать какой вариант когда использовать. Делается это с помощью файлов проектов относительно несложно, например

 

http://forge.ada-ru.org/matreshka/browser/trunk/matreshka/gnat/matreshka_league.gpr#L246

 

Т.е. имеется штатная возможность создания проблемно-ориентированных языков?

Нет, имеется в виду обратное - создание подмножеств языка (профилей).

Deb-пакета нет. >:-| А так - неплохо.

 

Я бы рекомендовал обходить стороной Debian, особенно начинающим; ибо их компилятор устарел, и придётся немного пошаманить что бы заставить работать GNAT GPL. Попробуйте Fedora или OpenSUSE.

 

1. Проход только по индексному элементу или наличествует foreach?

foreach... типа есть в Ada 2012

 

2. Вот насчёт сборки мусора... Насколько я понимаю, управление памятью организует компилятор. И как без сборки: что-то всё-таки придётся делать вручную?

 

Да, распределение/освобождение памяти - забота программиста.

 

Как я понял, использовать вполне возможно и продуктивно?

 

А почему нет? ;-)

On 05/13/2013 11:44 PM, Dmitry A. Kazakov wrote:

 

Это интересно, т.к. у меня Pro и там ее нет. И AdaInit он, зараза, не создает.

 

Не может такого быть! Даёшь bug-report!

 

 

Почему? Чужую DLL прилинковать нет проблем. Весь GTK в виде DLL.

Тут проблема в количестве копий GNAT RTL в конечном образе процесса. Если по одной статической версии RTL влинковать в каждую DLL, да ещё одну - в приложение, то конечный результат будет печален. В старых версиях была свистопляска с этим, приходилось что-то делать в

настройках, но проблема уже несколько лет как решена.

 

Проблема ведь с Ада DLL, особенно если пакеты там нуждаются в инициализации или объекты живут на библиотечном уровне. Последний раз, кода я пытался, все заканчивалось вываливанием по Accessibility Check.

 

Это уже немного другая сторона медали - использование DLL, реализованной на Ada, в другом приложении, об Ada не ведающем. Ключевое слово здесь - standalone library, для неё генерируется код инициализации и этот код регистрируется надлежащим образом. Но одна беда оставалась - такую библиотеку почти невозможно выгрузить из памяти. Были попытки исправить выгрузку, но я не помню доделали ли полностью.

Dmitry A. Kazakov wrote:

On Mon, 13 May 2013 23:33:38 +0400, you wrote:

 

Не просветите?

 

Так если у вас Pro - жалуйтесь официально, и тогда точно

просветят, да еще и починят, если что не так.

On Tue, 14 May 2013 00:01:31 +0400, you wrote:

 

On 05/13/2013 11:44 PM, Dmitry A. Kazakov wrote:

 

Это интересно, т.к. у меня Pro и там ее нет. И AdaInit он, зараза, не создает.

 

Не может такого быть! Даёшь bug-report!

 

Мне надо сначала нашу лицензию продлить. Это сложно, т.к. мы хотим в пакете купить Windows/VxWorks/Linux, да еще, ARM Linux, которого все еще нет... Надо менеджеров уламывать.

 

Почему? Чужую DLL прилинковать нет проблем. Весь GTK в виде DLL.

Тут проблема в количестве копий GNAT RTL в конечном образе процесса. Если по одной статической версии RTL влинковать в каждую DLL, да ещё одну - в приложение, то конечный результат будет печален. В старых версиях была свистопляска с этим, приходилось что-то делать в

настройках, но проблема уже несколько лет как решена.

 

Точно? Нужен именно gprbuild или gnatmake сойдет?

 

Проблема ведь с Ада DLL, особенно если пакеты там нуждаются в инициализации или объекты живут на библиотечном уровне. Последний раз, кода я пытался, все заканчивалось вываливанием по Accessibility Check.

 

Это уже немного другая сторона медали - использование DLL, реализованной на Ada, в другом приложении, об Ada не ведающем.

 

Нет, все Ада. Но сути это не меняет. Если Ада main грузит DLL, от пакетов которой он зависит, то эти пакеты должны инициироваться ДО того, как инициируется сам main. Как я понимаю, GNAT этого не делает. Ясно, что такая библиотека не может грузиться совсем динамически, а только через Import библиотеку. Ее я тоже не вижу.

 

Ключевое слово здесь -

standalone library, для неё генерируется код инициализации и этот код регистрируется надлежащим образом. Но одна беда оставалась - такую библиотеку почти невозможно выгрузить из памяти. Были попытки исправить выгрузку, но я не помню доделали ли полностью.

 

Так ее и нельзя выгрузить, по Ада-жизни. Я, кстати, пытался применить

for Library_Standalone use "что-нибудь"

 

но gnatmake меня выслал. Он вообще этого атрибута не знает.

 

--

Regards,

Dmitry A. Kazakov

http://www.dmitry-kazakov.de

On 05/14/2013 11:18 AM, Dmitry A. Kazakov wrote:

 

Почему? Чужую DLL прилинковать нет проблем. Весь GTK в виде DLL.

Тут проблема в количестве копий GNAT RTL в конечном образе процесса. Если по одной статической версии RTL влинковать в каждую DLL, да ещё одну - в приложение, то конечный результат будет печален. В старых версиях была свистопляска с этим, приходилось что-то делать в

настройках, но проблема уже несколько лет как решена.

 

Точно? Нужен именно gprbuild или gnatmake сойдет?

 

Да по идее должен и gnatmake работать.

 

Нет, все Ада. Но сути это не меняет. Если Ада main грузит DLL, от пакетов которой он зависит, то эти пакеты должны инициироваться ДО того, как инициируется сам main. Как я понимаю, GNAT этого не делает. Ясно, что такая библиотека не может грузиться совсем динамически, а только через Import библиотеку. Ее я тоже не вижу.

 

Ada main грузит DLL с которой слинкован или по принципу plugin-а?

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

 

Во втором случае библиотека должна сама позаботиться об инициализации. Тут как раз standalone library и нужна.

 

Так ее и нельзя выгрузить, по Ада-жизни. Я, кстати, пытался применить

for Library_Standalone use "что-нибудь"

 

но gnatmake меня выслал. Он вообще этого атрибута не знает.

 

http://gcc.gnu.org/onlinedocs/gnat_ugn_unw/Building-a-Stand_002dalone-Library.html

 

standalone library "включается" через перечисление модулей для

инициализации в Library_Interface. А вот баловаться с Library_Standalone можно только если Ada DLL одна и загружается в не Ada приложение.

Dmitry A. Kazakov wrote:

 

Так ее и нельзя выгрузить, по Ада-жизни. Я, кстати, пытался применить

 

for Library_Standalone use "что-нибудь"

 

но gnatmake меня выслал. Он вообще этого атрибута не знает.

 

попробуйте скормить это gprbuild'y. gnatmake в какой-то момент

был заморожен в своем развитии, сейчас основной инструмент

анализа проектных файлов и осуществления соответствующих

действий - gprbuild.

Есть же gnat/2012/share/examples/gnat/plugins

Там небольшие примерчики как делать свои длл-плагины.

У меня в свое время все отлично получилось, прога подгружала и

выгружала(!!!) плагины в рантайм.

14 мая 2013 г., 10:18 пользователь Dmitry A. Kazakov

<[email protected]>написал:

да, забыл, все это шаманство работает только с gprbuild

14 мая 2013 г., 10:34 пользователь Andry Ogorodnik <

[email protected]> написал:

13.05.2013 21:19, Vadim Godunko пишет:

 

Невозможно собрать Windows 64bit приложение публично доступными

средствами. Можно конечно выучить Высшую Магию и собрать компилятор самостоятельно... но под Windows это весьма специфическая задача.

 

А вот это разве не работает?

http://mingw-w64.sourceforge.net/

The languages enabled are C, Ada, C++, Fortran, Object C and Objective C++.

On Tue, 14 May 2013 11:32:13 +0400, you wrote:

 

On 05/14/2013 11:18 AM, Dmitry A. Kazakov wrote:

 

Почему? Чужую DLL прилинковать нет проблем. Весь GTK в виде DLL.

Тут проблема в количестве копий GNAT RTL в конечном образе процесса. Если по одной статической версии RTL влинковать в каждую DLL, да ещё одну - в приложение, то конечный результат будет печален. В старых версиях была свистопляска с этим, приходилось что-то делать в

настройках, но проблема уже несколько лет как решена.

 

Точно? Нужен именно gprbuild или gnatmake сойдет?

 

Да по идее должен и gnatmake работать.

 

Нет, все Ада. Но сути это не меняет. Если Ада main грузит DLL, от пакетов которой он зависит, то эти пакеты должны инициироваться ДО того, как инициируется сам main. Как я понимаю, GNAT этого не делает. Ясно, что такая библиотека не может грузиться совсем динамически, а только через Import библиотеку. Ее я тоже не вижу.

 

Ada main грузит DLL с которой слинкован или по принципу plugin-а?

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

 

Ежели код инициализации в приложении, то он должен разбираться если DLL уже была проинициализирована ДРУГИМ приложением. А это может только DLLMain. Нестыковка. В C++ тоже помнится была беда с DLL, что конструкторы разделяемых объектов вызывались каждый раз как DLL присоединялась кем-нибудь. В итоге, я вызывал их вручную из DLLMain на голую память разделяемой секции.

 

Во втором случае библиотека должна сама позаботиться об инициализации. Тут как раз standalone library и нужна.

 

Не может она быть "плохином", т.к. экспортирует ""грязные" пакеты библиотечного уровня.

 

Так ее и нельзя выгрузить, по Ада-жизни. Я, кстати, пытался применить

for Library_Standalone use "что-нибудь"

 

но gnatmake меня выслал. Он вообще этого атрибута не знает.

 

http://gcc.gnu.org/onlinedocs/gnat_ugn_unw/Building-a-Stand_002dalone-Library.html

 

standalone library "включается" через перечисление модулей для

инициализации в Library_Interface.

 

Т.е. перечислить практически все, что в библиотеке есть? Это мало реально и грандиозный геморрой. В чем заключается "поддержка" не очень понятно.

--

Regards,

Dmitry A. Kazakov

http://www.dmitry-kazakov.de

On Tue, 14 May 2013 10:35:36 +0300, you wrote:

 

да, забыл, все это шаманство работает только с gprbuild

 

Я верю, что можно слепить DLL с голыми функциями в экспорте. Только это совсем не Ада, а С, даже не ++. Фокус - положить в DLL инициализированный объект и использовать его в приложении. А еще круче, если он будет Limited_Controlled.

 

[ pragma Import и т.п., не предлагать.]

 

--

Regards,

Dmitry A. Kazakov

http://www.dmitry-kazakov.de

Попробуй ADASTUDIO 2013.

VAD - простой visual ada developer

QT4ADA и QT5ADA позволяют использовать возможности QT plugin

то есть загружать DLL или SO

VTKADA поддерживаеи работу с 2D/3D объектами.

http:/users1.jabry.com/adastudio/index/html

Леонид

 

 

 

________________________________

From: Артём Н. <artiom14@...>

To: [email protected]

Sent: Monday, May 13, 2013 8:46:44 PM

Subject: Re: [ada_ru] Ada-2012 + Linux

 

 

 

13.05.2013 09:22, Vadim Godunko пишет:

2. GNAT обеспечивает кросскомпиляцию? Тут я замечал в осуждениях, что x86_64 не

поддерживается...

Коммерческая версия GNAT поддерживает (почти) всё. Здесь речь шла о бесплатной, и её нет для Windows 64bit, но она есть для Linux.

Насколько я понял: нет возможности собрать 64-х битное Windows приложение вообще?

Или есть возможность собрать но только под Linux (тогда, в принципе, не проблема)?

 

4. Есть ли биндинги к популярным библиотекам (эээ, например, тот же Qt)?

http://www.qtada.com/

Отлично. :-) Жаль, в репозитории нет. :-(

Хотя: "QtAda is an Ada2005 language bindings".

Стандарт 2012 полностью обратно совместим с 2005?

 

5. Как сопрягается с IDE? В частности, кто-нибудь использует Vim для написания

кода (я нашёл некий плагин только с 2008-года, пока не смотрел)? Для Eclipse что-нибудь есть?

6. Что есть своё для создания интерфейсов? Есть ли какая-то своя IDE (типа Lazarus для Object Pascal)?

Я использую vim, для простых задач его вполне достаточно.

Не соглашусь с вами. Я тут начал разбираться с Eclipse и пока не вижу каких-то уж очень заметных улучшений функциональности, по сравнению с Vim. К тому же:

http://eclim.org/

Пока не пользовался, только разбираюсь.

Так что, предположу, что Vim вполне подходит и для серьёзных задач.

Ещё по теме:

http://habrahabr.ru/post/53435/

 

Также, где-то на сайте Vim-а была статья, которая так и называлась: IDE. Со списком плагинов (хотя, там маловато).

 

Если хочется

большего - автодополнение, умный поиск

Есть в Vim, как класс. Вопрос лишь в применимости к Ada...

 

и т.д. - для этого есть GPS,

поставляется вместе с компилятором.

Посмотрел. Жаль, что интерфейс в ней сразу нельзя рисовать... С биндингами, конечно, это не важно, но было бы интересно.

 

7. Системы сборки, типа CMake, нормально сопрягаются (что-то мутное на Wiki написано: "Ada: not yet in cvs, but support exists (in PlPlot):

http://plplot.cvs.sourceforge.net/plplot/plplot/cmake/modules/")?

GNAT имеет собственную систему сборки, основанную на файлах проектов. Использовать другие в большинстве случаев нет смысла.

Хм... Это хорошая новость.

Я, кстати, думал, что GNAT - это просто один из фронтендов к gcc. Система удобна?

 

8. Что насчёт Windows? Могу ли я собрать проект? Чем?

Для сборки можно использовать ровно те же средства, что и для других платформ.

Т.е., с кроссплатформенностью относительно сборки и библиотек нет проблем?

9. Какие средства для проверки кода? Есть ли нечто подобное Valgrind?

Что-то наподобие valgrind... Знаю, valgrind! ;-)

Понятно. Посмотрел. Отлично.

 

А такое, как lint (в вариациях), ncc, rats имеет ли смысл?

И имеется ли?

 

10. Есть ли нечто, генерирующее Ada-классы из UML диаграмм?

О! Это тема отдельного разговора. В общем и целом таких средств не то что нет, скорее нет смысла в их существовании - невозможно сделать универсальный генератор кода для универсального отображения.

Так это возможно почти про любой целевой язык сказать... Или нет?

Мы для себя

делали свой собственный используя Матрёшку для доступа к UML модели.

А что за "Матрёшка"? Где-то проскакивало, но как-то не очень понятно... IDE или фреймворк?

 

11. Вообще, имеет смысл или лучше дальше C, ну или C++, не ходить?

Спрашивать у поклонников Ada стоит ли использовать Ada? Ну ответ очевиден. ;-) Попробуйте, поглядите, а там решайте.

Ответ далеко не так очевиден.

Если спросить, например, у сторонников ZX-Спектрум (да, сравнение некорректное во многих отношениях), стоит ли его использовать, они ответят - "нет". C - язык универсальный и широко распространённый. В этом его плюсы. Но имеет массу известных проблем, ограничений, которые не решает даже Object C и

подобное (о C++ я не говорю - это сплошная проблема).

У всего есть свои границы применимости.

Возможно, про Ada здесь скажут, что она для специальных областей и применений подходит, но универсальным языком не является (в плане того, что, как инструмент

для решения большинства общих задач малопригодна) в силу каких-то особенностей, которые видны далеко не сразу.

 

Мне бы, в принципе, для большинства задач (кроме специфических, где намного лучше подходят другие языки) хватило бы и C (с классами) (и ещё Ruby, пожалуй, выучу, посмотрев на пример работы с zlib в C).

 

Хочу я простого:

1. Чтобы программа делала то, что я хочу (в плане семантики).

2. Не вылетала с ошибками (всё бы было ясно видно в период компиляции). 3. Не жрала много памяти и CPU, если это не предусмотрено алгоритмом. 4. Просто читалась, понималась и воспринималась.

5. Быстро и непринуждённо была написана после установки требований.

На C это возможно, но для этого на него надо навесить целую кучу дополнительных инструментов.

В Ada, насколько я понимаю, большая часть всего этого встроена в язык, что сильно упрощает.

 

Отсюда конкретный вопрос звучит так: используете ли вы данный язык для написания

пользовательского ПО, которым, затем пользуются (например, системы для бухгалтеров)?

 

P.S.:

Программы для бортовых систем самолёта или система обнаружения и ведения цели для радара установки ПВО в пользовательское ПО не входят. :-)

 

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

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