LINUX.ORG.RU

Вышел GNAT GPL 2009

 , , , , , ,


0

0

Вышел релиз GNAT GPL 2009 — сборка компилятора GCC от AdaCore.

Новшества:

Добавлена поддержка автоматического импорта определений из C и C++ заголовочных файлов. Теперь не надо дожидаться, пока кто–нибудь сделает привязки. (link link)

Стандартная утилита сборки пакетов gprbuild облегчает задачу сборки смешанных проектов (Ada&C++). Это упрощает внедрение Ады в проекты, уже начатые на C или C++. (link)

Появился порт для JVM, а также набор утилит AJIS, с помощью которых можно на высоком уровне из Java кода вызывать нативный Ada код и наоборот. (link)

Почти одновременно вышел SPARK GPL 2009. SPARK — это набор утилит, проверяющих утверждения касательно кода программы. С точки зрения компилятора, все утверждения находятся в специального вида комментариях, поэтому после успешной верификации исходники компилируются обычным компилятором Ады. Это первый раз, когда SPARK сделан доступным публично. (link)

После долгого перерыва снова есть порт на Mac OS X (x86_64). Предыдущий порт на Mac OS X был в 2006м году для PowerPC.

Полный список платформ в релизе, таким образом:

  • dotnet-windows
  • jvm-windows
  • x86-windows
  • x86-linux
  • x86_64-linux
  • x86_64-darwin

>>> Подробности



Проверено: Shaman007 ()
Ответ на: комментарий от Ingwar

> «Введение в язык программирования Ада» Перминова (1991)

Древность необычайная. Ada-95, а уж тем-более Ada-2005 далеко ушли от стандарта там описанного.

Darkman ★★★
()
Ответ на: комментарий от Darkman

>Древность необычайная. Ada-95, а уж тем-более Ada-2005 далеко ушли от стандарта там описанного.

что было под рукой

Ingwar ★★★★★
()
Ответ на: комментарий от vnovouhov

>> Проверено: Shaman007

>УРА!!! Шаман проверил сорцы GNAT-а!!!


(: После этого в них появились ошибки и полсотни багов)

Dimanc ★★
()
Ответ на: комментарий от fat_angel

> Многоуважаемый all может привести хоть одну более-менее значимую программу написанную на Ada, или он только в embedded используется?

На Ada написана программа управления ракетоносителем Ariane 5. Я думаю есть еще много подобных проектов.

Нужна ли Ada на desktop? Cкорей всего не нужна, хотя пусть будет.

sign
()
Ответ на: комментарий от sign

> На Ada написана программа управления ракетоносителем Ariane 5. Я думаю есть еще много подобных проектов.

Не уверен, что оно до сих пор живо. Если интересны свежие проекты:

http://www.adacore.com/home/company/press-center/

> Нужна ли Ada на desktop? Cкорей всего не нужна, хотя пусть будет.

Везде, где есть место для C++ и Pascal, будет место и для Ады.

Nihilist
() автор топика
Ответ на: комментарий от www_linux_org_ru

>> Добавлена поддержка автоматического импорта
>> определений из C и C++ заголовочных файлов.

> А шаблоны понимает?

Шаблоны C++ недостаточно типизированы, чтобы их можно
было автоматически переложить на Аду.

Вот, например, типичный шаблонный min

template <typename Type>
 Type min(Type a, Type b) {
 return a < b ? a : b;
}

Про Type шаблону известно только то, что
он typename, и, тем не менее, телo min использует
непонятно, откуда взявшийся operator<. А если
мне не нравится тот operator<, который
используется по умолчанию? В Аде я могу использовать
вместо "<" другую функцию, чтобы, например,
сортировать символы в массиве не по номеру
символа, а по встречаемости в тексте. В C++
такие проблемы обычно решаются
вспомогательным trait классом.

Все эти особенности автоматически переложить
на Аду проблематично. Обычно привязываются
конкретные инстанциации шаблона. Например:

http://www.qtada.com/documentation/qtada-3.0.0/qtada_ugr/supported-features.html

Здесь есть QList<int>, QList<QObject>,
QList<QGraphicsItem>, QList<QKeySequence>,
а в виде generic нет.

Так же поступает и SWIG.

Nihilist
() автор топика
Ответ на: комментарий от Nihilist

> Не уверен, что оно до сих пор живо. Если интересны свежие проекты: > > http://www.adacore.com/home/company/press-center/

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

Вот, что мне не нравится в Ada, так это отсутствие квалификатора private в том смысле, в котором он понимается в Java, C# и C++. То есть, когда объект виден только в пределах класса и только (плюс для friend-классов и функций в C++). Тот же private, что есть в Ada - это по сути квалификатор protected с точки зрения других вышеперечисленных языков. Не удобно. Не безопасно и т.п.

dave ★★★★★
()
Ответ на: комментарий от sign

> На Ada написана программа управления ракетоносителем Ariane 5. Я думаю есть еще много подобных проектов.

Та самая, ошибка в которой привела к взрыву ракеты на 37 секунде :-)

http://en.wikipedia.org/wiki/Ariane_5_Flight_501

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от Darkman

> 1) Параметризация модуля типом асинхронной задачи с жёстко заданными входами взаимодействия. Модулей в классическом понимании в плюсах, кстати, тоже нет.

> 2) Параметризация модуля для двух разных целочисленных типов - у одного диапазон 1..100, у другого -100..-1, без необходимости вводить классы, и, соответственно, городить реализацию кучи мат-операций.

> Модулей в классическом понимании в плюсах, кстати, тоже нет.

Обрадованный этим ты запихал слово "модуль" в обе задачи :-)

1) Давай разберемся, а нужны ли модули (и зачем).

Я честно говоря вообще не знаю случая (за исключением синглтона), когда нужны именно модули. А вот классы нужны всегда. Более того, при изменениях проекта модуль может превратится в класс, тогда то, что он изначально был классом, будет +, а не -.

Теперь о преимуществах модулей. Они вообще есть?

Я бы согласился, если бы был один из примеров вида:

А. Что-то нельзя сделать внутри класса-как-модуля, но можно сделать внутри настоящего модуля (т.к. возможность инстанциирования накладывает ограничения). Мне такое неизвестно.

Б. С классом-модулем можно что-то сделать, а с настоящим модулем это делать нельзя. Т.е. компилятор плюсов здесь не может отловить логическую ошибку, а компилятор ады может.

Очевидный кандидат на Б -- это инстанциирование. Однако, мы можем полностью запретить инстанциирование, сделав все конструкторы приватными.

В. Класс-как-модуль ведет к сильно избыточному синтаксису. Опять, мне такое неизвестно.

Отсюда я делаю вывод, что модули -- не нужны.

2) Тут надо прояснить критерии сравнения. Если ада получается из плюсов путем включения ряда __фиксированных__ заголовочных файлов, то это не может считаться преимущестовом ады. Если же эти заголовочные файлы должны содержать каждый раз новый (boilerplate!) код, это будет преимуществом.

Конкретно: можно один раз и на всю жизнь написать template<typename T, T min, T max> class bounded {... }; и юзать bounded<int, 1, 100>.

Преимущество ады было бы, если бы гипотетеческая ада разрешала определять границы не только для скалярных типов, но и для любых T, у которых определен оператор <. И при этом ЛЮБАЯ функция от типа-носителя T автоматически становилась бы функцией от ограниченного типа Bounded_T, причем компилятор автоматически вставлял бы эпилог в виде проверки диапазона. (Я уверен, что такое на плюсах не написать. Хотя может я недостаточно грамотный?)

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

Если есть время разобраться с некоторыми отличиями Ada от C/C++, то можно глянуть вот сюда: https://www2.adacore.com/home/ada_answers/ada_2005/safe_secure/

(Disclaimer: сам в Ada ни бум-бум, но пролистал тамошние PDF-ки с интересом. Хотя впечатления, что Ada на порядок лучше C++, не возникло).

eao197 ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

>> На Ada написана программа управления ракетоносителем Ariane 5. Я думаю есть еще много подобных проектов.

> Та самая, ошибка в которой привела к взрыву ракеты на 37 секунде :-)

96ой год.

Поновее-то вспомнить нечего? :-)

Nihilist
() автор топика
Ответ на: комментарий от www_linux_org_ru

> 1) Давай разберемся, а нужны ли модули (и зачем).

Как минимум для того чтобы не компилять адское количество хидеров как в любом сишном проекте. Precompiled headers - костыль.

> Я честно говоря вообще не знаю случая (за исключением синглтона), когда нужны именно модули. А вот классы нужны всегда.

Классы ? Всегда ? 8-О И как народ без них ухитрялся жить ? Hint: в Аде до 95-го стандарта классов небыло, при этом была перегрузка операторов и генерики.

> А. Что-то нельзя сделать внутри класса-как-модуля, но можно сделать внутри настоящего модуля (т.к. возможность инстанциирования накладывает ограничения). Мне такое неизвестно.

Мне пожайлуста на плюсах сделайте _автоматический_ вызов произвольного кода в момент импорта модуля. Ах да, у нас же нет модулей, тогда пусть будет в момент инклюда хидера.

> В. Класс-как-модуль ведет к сильно избыточному синтаксису. Опять, мне такое неизвестно.

А ничего что в модуле может быть десяток классов, типов и асинхронных задач ? И вся эта байбала может автоматом инстанциироваться и запускаться ?

> Отсюда я делаю вывод, что модули -- не нужны.

Буа-га-га. "Сегодня в колбасе потребности нет !"

> Преимущество ады было бы, если бы гипотетеческая ада разрешала определять границы не только для скалярных типов, но и для любых T, у которых определен оператор <. И при этом ЛЮБАЯ функция от типа-носителя T автоматически становилась бы функцией от ограниченного типа Bounded_T, причем компилятор автоматически вставлял бы эпилог в виде проверки диапазона.

Про систему типов Ады я бы посоветовал бы таки прочитать.

Darkman ★★★
()
Ответ на: комментарий от www_linux_org_ru

> Может, устроим обсуждение Ada vs. C++ ?
> Какие фичи Ады в плюсах реализуются криво?


* многозадачность, система рандеву, защищенные типы;
* строгая типизация со встроенной проверкой;
* уточнение типов (элементарный пример: создание и работа с массивом целочисленных элементов с размером элемента в 13-битов или предписание хранения в LSB/MSB-формате);

gour
()
Ответ на: комментарий от Darkman

> Мне пожайлуста на плюсах сделайте _автоматический_ вызов
 произвольного кода в момент импорта модуля. Ах да, у нас же нет
 модулей, тогда пусть будет в момент инклюда хидера. 

И в чем проблемы? Может я вопрос не понял?

$ cat test2.hxx

#ifndef MyModule_hxx
#define MyModule_hxx

#include <iostream>

class MyModule {
  public:
    MyModule() { std::cout<< "hello from module\n"; }
};
#endif

MyModule my_module;


$ cat test2.cxx


#include <iostream>

int main()
{
  std::cout << "main\n";
  #include "test2.hxx"
  {
    std::cout << "inner\n";
    #include "test2.hxx"
  }
  return 0;
}


$ ./a.out 
main
hello from module
inner
hello from module

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от Darkman

> А ничего что в модуле может быть десяток классов, типов и асинхронных задач ? И вся эта байбала может автоматом инстанциироваться и запускаться ?

Ничего.

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

> Буа-га-га. "Сегодня в колбасе потребности нет !"

Таки нет. Ведь есть персональный колбасный заводик :-)

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от Darkman

> Про систему типов Ады я бы посоветовал бы таки прочитать.

Почитаю. Но я правильно понимаю, что range применим только к скалярным типам?

www_linux_org_ru ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.