Ada_Ru форум

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

Ada 2012

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

Сообщения

ksiby
Ada 2012
2010-06-02 12:51:25

 

Здравствуйте, All Ada-ru!

В связи с появлением информации о Ada 2012 встает вопрос о сроках появления её реализации в GPL версии или доступности оной для участников GAP. Если кто в курсе и может поделиться этой информацией, пожалуйста поделитесь.

 

 

With best regards.

Sergey Kirkorov Email: ksiby@...

www.mediascan.by

В связи с появлением информации о Ada 2012 встает вопрос о сроках появления её реализации в GPL версии или доступности оной для участников GAP. Если кто в курсе и может поделиться этой информацией, пожалуйста поделитесь.

 

В GPL 2010 режим компиляции для Ады 2012 уже должен быть. В качестве наиболее яркого примера новых поддерживаемых конструкций можно

привести (печально?) знаменитые выражения с множественным выбором.

Я так думаю, до появления этого в релизах еще не менее года

 

В релизах для клиентов - это появится действительно только в версии 6.4. Но в GPL уже вот-вот.

 

ВФ

В GPL 2010 режим компиляции для Ады 2012 уже должен быть. В качестве

наиболее яркого примера новых поддерживаемых конструкций можно

привести (печально?) знаменитые выражения с множественным выбором.

 

А где можно почитать подробней про нововведения?

On 06/07/2010 07:12 PM, Alexey Veselovsky wrote:

В GPL 2010 режим компиляции для Ады 2012 уже должен быть. В качестве наиболее яркого примера новых поддерживаемых конструкций можно

привести (печально?) знаменитые выражения с множественным выбором.

 

А где можно почитать подробней про нововведения?

 

Нововведения языка:

 

http://www.ada-auth.org/AI05-SUMMARY.HTML

 

Нововведения компилятора будут в дистрибутиве.

Vadim Godunko wrote:

 

А где можно почитать подробней про нововведения?

 

Нововведения языка:

 

http://www.ada-auth.org/AI05-SUMMARY.HTML

 

Там исправлений существующего больше, чем нововведений...

 

Из нововведений с ходу могу назвать условные и case-выражения,

Pre- and Postconditions и ... нет, с ходу - это все.

 

Наверняка полно доработок напильником в ОО, главе 9 и

модульности.

http://www.ada-auth.org/AI05-SUMMARY.HTML

Там исправлений существующего больше, чем нововведений...

 

Из нововведений с ходу могу назвать условные и case-выражения,

Pre- and Postconditions и ... нет, с ходу - это все.

 

Наверняка полно доработок напильником в ОО, главе 9 и

модульности.

 

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

 

Делает ли это язык дженериков тьюринг-полным языком, аля плюсатые шаблоны?

 

Вообще в первую очередь интересуют изменения в системе типов.

 

PS. Кстати, а зачем для функций ввели in-out параметры? Собственно чем функции после этого от процедур отличаться будут? Вроде изначально функция была хороша тем, что не имела побочных эффектов. Потом ввели (в аде 95 вроде) возможность передавать туда ссылку, что пробило дырочку в защите, а теперь вообще in-out...

Alexey Veselovsky wrote:

 

Краем глаза увидел в этом списочке вроде как рекурсивные типы это раз.

 

Это ж вроде и раньше было можно, через неполное объявление типа.

Или что-то более хитрое теперь появилось?

 

И в

табличке сравнении на адакоровском сайте увидел что поддерживается теперь

частичная специализация дженериков.

 

И это уже есть в 2005-й Аде.

 

Делает ли это язык дженериков тьюринг-полным языком, аля плюсатые шаблоны?

 

Это делает язык дженериков абсолютно мозголомным и непригодным

к сопровождению, "аля плюсатые шаблон"

 

Вообще в первую очередь интересуют изменения в системе типов.

 

Их будет (и уже есть) изрядно, подробности не скажу, но, по-моему,

ничего революционного.

 

PS. Кстати, а зачем для функций ввели in-out параметры? Собственно чем

функции после этого от процедур отличаться будут? Вроде изначально функция

была хороша тем, что не имела побочных эффектов. Потом ввели (в аде 95

вроде) возможность передавать туда ссылку, что пробило дырочку в защите, а

теперь вообще in-out...

 

Функции всегда могли иметь побочный эффект - через изменение глобальных

переменных. Теперь это просто решили упорядочить как-то...

 

Я совсем не рад тому, как и куда развивается язык, но большие дяди в

ARG уверяют, что все изменения - результат явных требований

индустрии. Ну, не знаю.....

On Tue, 8 Jun 2010 16:10:39 +0400, you wrote:

 

http://www.ada-auth.org/AI05-SUMMARY.HTML

Там исправлений существующего больше, чем нововведений...

 

Из нововведений с ходу могу назвать условные и case-выражения,

Pre- and Postconditions и ... нет, с ходу - это все.

 

Наверняка полно доработок напильником в ОО, главе 9 и

модульности.

 

Краем глаза увидел в этом списочке вроде как рекурсивные типы это раз.

 

Это не то, IMO.

 

И в

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

 

Не видел.

 

Делает ли это язык дженериков тьюринг-полным языком, аля плюсатые шаблоны?

 

А они нет? Лень проверять.

 

Пес с ними, хотя, специализация пригодилась бы. Кстати декларации "абстрактного" пакета были бы очень полезны. Вроде, что-то типа того хотели. Но я как-то не вижу. Вообще, с Ады 95 ARG ерундой занимается. Язык только хуже становится.

 

Вообще в первую очередь интересуют изменения в системе типов.

 

По-видимому ничего не сделали, но и ничего особенно не сломали. Условные выражения конечно дрянь, но не критично. Pre/post conditions - чисто безобразие, но, опять-таки, есть SPARK, - проехали.

 

PS. Кстати, а зачем для функций ввели in-out параметры?

 

Убрать грандиозный геморрой.

 

Собственно чем

функции после этого от процедур отличаться будут?

 

Наличием результата на стеке неизвестного заранее размера.

 

Вроде изначально функция

была хороша тем, что не имела побочных эффектов.

 

Не было этого. И побочным эффектом называется оный мимо аргументов. Эффект на аргумент - чист как майский цветок.

 

Потом ввели (в аде 95

вроде) возможность передавать туда ссылку, что пробило дырочку в защите, а теперь вообще in-out...

 

Анонимные access типы была ошибка, между прочим, мотивацией служило как раз нежелание вводить in-out аргументы. В результате изуродовали язык.

--

Regards,

Dmitry A. Kazakov

http://www.dmitry-kazakov.de

On 06/08/2010 04:10 PM, Alexey Veselovsky wrote:

 

Краем глаза увидел в этом списочке вроде как рекурсивные типы это раз.

 

Ага, латаем дыры привнесённые нежеланием иметь синтаксическую структуру для объявления класса как такового. Ну да это ладно, решение Ada 95 уже никуда не деть, но оперативность понимания сути проблемы просто

поражает! Сначала отказываемся от limited generic instantiation в Ada 2005, потом - набив шишки на всех местках - пытаемся залатать... Иногда мне начинает казаться, что вместо красивого и аккуратного языка (Ada83 таковой и являлась на фоне тогдашнего развития языкотворчества) язык превращают в перелатанное одеяло... :-( Причём походу только ARG

"знает", что нужно индустрии, а вот индустрию как-то не спрашивают или затыкают :-(

Делает ли это язык дженериков тьюринг-полным языком, аля плюсатые шаблоны?

А они нет? Лень проверять.

Нет. Ну, например как на этом "языке" подсчитать факториал? В компайл-тайме естественно.

На мерзких плюсатых шаблонах это делается просто:

 

#include <iostream>

 

template <int N> struct Fac { static const int res = N*Fac<N-1>::res;};

template <> struct Fac<0> {static const int res = 1;};

 

int main() {

std::cout << Fac<10>::res;

return 0;

}

 

хотели. Но я как-то не вижу. Вообще, с Ады 95 ARG ерундой занимается. Язык

только хуже становится.

Гм. Всем троим высказавшимся адовцам не нравится куда движется язык. Никто "за" не высказался. Это наводит на некоторые мысли.

 

выражения конечно дрянь, но не критично. Pre/post conditions - чисто

безобразие, но, опять-таки, есть SPARK, - проехали.

А что с ними не так? И чем в SPARK'e лучше?

 

PS. Кстати, а зачем для функций ввели in-out параметры?

Убрать грандиозный геморрой.

ОК. А почему их небыло в Аде-83?

 

Не было этого. И побочным эффектом называется оный мимо аргументов. Эффект

на аргумент - чист как майский цветок.

Ну-у.. как сказать. Вот вижу я в коде foo(b); -- тут как бы ничто не предвещает, что b будет изменена. Спецификация функции foo где-то далеко. И вызываю этот foo тут не я. Код чужой. Хорошо когда видно явно что меняется а что нет прямо по месту использования.

Краем глаза увидел в этом списочке вроде как рекурсивные типы это раз.

 

Ага, латаем дыры привнесённые нежеланием иметь синтаксическую структуру

для объявления класса как такового. Ну да это ладно, решение Ada 95 уже

Гм. А как одно с другим связано? Откровенно не вижу принципиальной разницы между

структурой, пардон, записью, и классом :-) Отдельная синтаксическая фигнюшка тут не поможет.

IMHO.

 

2005, потом - набив шишки на всех местках - пытаемся залатать... Иногда

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

таковой и являлась на фоне тогдашнего развития языкотворчества) язык

превращают в перелатанное одеяло... :-(

Да. Тоже так кажется. Со стороны. Такое ощущение, что Ада пытается угнаться за Явой и C#

(а что, в C# уже есть пред и пост условия, можно писать 10_000_000 яве, можно задавать переменные не позиционно, а по имени и т.п.), при этом стремясь сохранить полную обратную совместимость со всеми предыдущими "версиями" Ады.

 

За двумя зайцами погонишься...

On 06/09/2010 08:59 PM, Alexey Veselovsky wrote:

Краем глаза увидел в этом списочке вроде как рекурсивные типы это раз.

 

Ага, латаем дыры привнесённые нежеланием иметь синтаксическую структуру для объявления класса как такового. Ну да это ладно, решение Ada 95 уже

Гм. А как одно с другим связано? Откровенно не вижу принципиальной разницы между

структурой, пардон, записью, и классом :-) Отдельная синтаксическая фигнюшка тут не поможет.

IMHO.

 

Если Вам не доводилось сталкиваться с мистикой freezing rules, то Вам повезло! И тут как раз дело в том, что написать вот так (с этого примера и начинается AI):

 

type T is tagged private;

 

package T_Vectors is Ada.Containers.Vectors (T);

 

function F (Self : T) return T_Vectors.Vector;

 

конечно можно, но работать оно будет "не так". И совсем не очевидно для людей не ходивших по этим граблям в чём собственно загвоздка. Дело в том, что настройка пакета "замораживает" тип, а посему F не есть

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

On Wed, 9 Jun 2010 20:50:36 +0400, you wrote:

 

Делает ли это язык дженериков тьюринг-полным языком, аля плюсатые шаблоны?

А они нет? Лень проверять.

Нет. Ну, например как на этом "языке" подсчитать факториал? В компайл-тайме естественно.

На мерзких плюсатых шаблонах это делается просто:

 

#include <iostream>

 

template <int N> struct Fac { static const int res = N*Fac<N-1>::res;}; template <> struct Fac<0> {static const int res = 1;};

 

int main() {

std::cout << Fac<10>::res;

return 0;

}

 

В Аде нет моторчика для запуска итерации (рекурсии). Но если его запустить руками то:

 

generic

N0 : Positive;

F0 : Positive;

package P is

N1 : constant Positive := Positive'Max (N0 - 1, 1);

F1 : constant Integer := F0 * N0;

end P;

 

package P1 is new P (10, 1);

package P2 is new P (P1.N1, P1.F1);

package P3 is new P (P2.N1, P2.F1);

... -- Пока рука не устанет

 

P№.F1 есть факториал.

 

хотели. Но я как-то не вижу. Вообще, с Ады 95 ARG ерундой занимается. Язык только хуже становится.

Гм. Всем троим высказавшимся адовцам не нравится куда движется язык. Никто "за" не высказался. Это наводит на некоторые мысли.

 

Бесконечно далеки они от народа...

 

выражения конечно дрянь, но не критично. Pre/post conditions - чисто безобразие, но, опять-таки, есть SPARK, - проехали.

А что с ними не так? И чем в SPARK'e лучше?

 

SPARK описывает семантику программы для проверки ее корректности (см. Дийкстра, Грис).. В Аде 2012 это будет просто исполняемый код криво прилепленный к основной программе и выбрасывающий дурацкие исключения для развлечения отлаживающей публики. С формальной/технической точки зрения это просто бред (заимствованный, по всей видимости, из Eifel).

 

PS. Кстати, а зачем для функций ввели in-out параметры?

Убрать грандиозный геморрой.

ОК. А почему их небыло в Аде-83?

 

Ошиблись тогда, а потом прилипло.

 

Не было этого. И побочным эффектом называется оный мимо аргументов. Эффект на аргумент - чист как майский цветок.

Ну-у.. как сказать. Вот вижу я в коде foo(b); -- тут как бы ничто не предвещает, что b будет изменена.

 

Еще как предвещает - константу передать нельзя.

 

Спецификация функции foo где-то далеко.

 

Зачем пользовать не зная?

 

И

вызываю этот foo тут не я. Код чужой. Хорошо когда видно явно что меняется а что нет прямо по месту использования.

 

Text : String := Read (Stream); -- Что тут не понятно?

 

Кстати, основной аргумент против был порядок эффектов а не они сами. Т.е.

Big_Endian : Integer := Read_Octet (Stream) * 256 + Read_Octet (Stream); -- Пристегнуть ремни!!!

 

Но лечить это надо не запретом, а более тонкими методами. К сожалению, ARG не до этого...

 

--

Regards,

Dmitry A. Kazakov

http://www.dmitry-kazakov.de

Dmitry A. Kazakov wrote:

 

Бесконечно далеки они от народа...

...

Ошиблись тогда, а потом прилипло.

...

Но лечить это надо не запретом, а более тонкими методами. К сожалению, ARG

не до этого...

 

Не стреляйте в пианиста - он играет, как умеет ((С))

 

Точнее, не как умеет, а в рамках имеющихся ресурсов. На Аду 83 грохнули

кучу денег - получился приличный язык. На Аду 95 тоже потратили немало -

и тоже получилось неплохо. Сейчас ARG работает практически на

общественных началах. Народу в процесс вовлечено на два порядка меньше.

 

Я немножко посоучаствовал в деятельности, подобной тому, которой

занимается ARG - вплотную занимался в рамках ASIS WG разработкой

стандарта на ASIS. Поэтому представляю, сколько на подобную работу

уходит сил, средств и времени. У ARG сейчас просто нет ни того, ни

другого, не третьего :(

On 06/10/2010 12:08 PM, Sergey I. Rybin wrote:

 

Точнее, не как умеет, а в рамках имеющихся ресурсов. На Аду 83 грохнули кучу денег - получился приличный язык. На Аду 95 тоже потратили немало - и тоже получилось неплохо. Сейчас ARG работает практически на

общественных началах. Народу в процесс вовлечено на два порядка меньше.

Я немножко посоучаствовал в деятельности, подобной тому, которой занимается ARG - вплотную занимался в рамках ASIS WG разработкой стандарта на ASIS. Поэтому представляю, сколько на подобную работу уходит сил, средств и времени. У ARG сейчас просто нет ни того, ни другого, не третьего :(

 

Значит просчитались... Не пережили "конверсию"... И т.д. ...

Значит просчитались... Не пережили "конверсию"... И т.д. ...

 

На самом деле, меня радует развитие ровно двух ЯП: С++ и erlang.

По моему, они движутся в правильном направлении, при этом не ломая особо обратной совместимости.

Не слишком быстро и не слишком медленно.

On Thu, 10 Jun 2010 12:08:15 +0400, you wrote:

 

Dmitry A. Kazakov wrote:

 

Бесконечно далеки они от народа...

...

Ошиблись тогда, а потом прилипло.

...

Но лечить это надо не запретом, а более тонкими методами. К сожалению, ARG не до этого...

 

Не стреляйте в пианиста - он играет, как умеет ((С))

 

Точнее, не как умеет, а в рамках имеющихся ресурсов. На Аду 83 грохнули кучу денег - получился приличный язык. На Аду 95 тоже потратили немало - и тоже получилось неплохо. Сейчас ARG работает практически на

общественных началах. Народу в процесс вовлечено на два порядка меньше.

 

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

 

Я немножко посоучаствовал в деятельности, подобной тому, которой занимается ARG - вплотную занимался в рамках ASIS WG разработкой стандарта на ASIS. Поэтому представляю, сколько на подобную работу уходит сил, средств и времени. У ARG сейчас просто нет ни того, ни другого, не третьего :(

 

Верю. Понимаю. Но простить не могу! (:-))

 

--

Regards,

Dmitry A. Kazakov

http://www.dmitry-kazakov.de

В Аде нет моторчика для запуска итерации (рекурсии). Но если его запустить

руками то:

...

package P1 is new P (10, 1);

package P2 is new P (P1.N1, P1.F1);

package P3 is new P (P2.N1, P2.F1);

... -- Пока рука не устанет

P№.F1 есть факториал.

 

Ну, это и есть как бы отсутствие тьюринг-полноты. Вроде как. Та же ситуация в сишных макросах например. Поэтому проблем с задачей останова тут нет. А вот в С++ шаблонах задача о останове в полный рост. Т.е. теоретически, поскольку шаблоны раскрываются (исполняются) на этапе компиляции, процесс компиляции может не закончиться никогда. На практике же просто в компиляторе ограничивают максимальную глубину вложенности шаблонов (по умолчанию 500, ключиком можно изменить). Поэтому компиляторы не виснут если шаблон зациклится.

 

выражения конечно дрянь, но не критично. Pre/post conditions - чисто

безобразие, но, опять-таки, есть SPARK, - проехали.

А что с ними не так? И чем в SPARK'e лучше?

 

SPARK описывает семантику программы для проверки ее корректности (см.

Дийкстра, Грис).. В Аде 2012 это будет просто исполняемый код криво

прилепленный к основной программе и выбрасывающий дурацкие исключения для

развлечения отлаживающей публики. С формальной/технической точки зрения это

просто бред (заимствованный, по всей видимости, из Eifel).

Т.е. это (в эйфеле и аде 2012), грубо говоря, просто синтаксический сахар являющийся по сути просто ASSERT'ами?

 

Не было этого. И побочным эффектом называется оный мимо аргументов. Эффект

на аргумент - чист как майский цветок.

Ну-у.. как сказать. Вот вижу я в коде foo(b); -- тут как бы ничто не

предвещает, что b будет изменена.

Еще как предвещает - константу передать нельзя.

Гм. А где видно, что b константа?

 

Спецификация функции foo где-то далеко.

Зачем пользовать не зная?

Пользующий может и знает. Но я то читающий этот код, я его не писал.

 

И вызываю этот foo тут не я. Код чужой. Хорошо когда видно явно что меняется а

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

Text : String := Read (Stream); -- Что тут не понятно?

Мне не понятно будет ли изменена Stream.

 

Кстати, основной аргумент против был порядок эффектов а не они сами. Т.е.

Big_Endian : Integer := Read_Octet (Stream) * 256 + Read_Octet (Stream);

-- Пристегнуть ремни!!!

О, да!

 

Но лечить это надо не запретом, а более тонкими методами. К сожалению, ARG

не до этого...

Очень жаль.

 

Вообще, такое ощущение, что возможно имело бы смысл откатиться до Ады-83, и править уже её под современные нужды. Но да, совместимость поломается.

Если Вам не доводилось сталкиваться с мистикой freezing rules, то Вам

повезло! И тут как раз дело в том, что написать вот так (с этого примера

и начинается AI):

 

Введение границ -- костыль. Сделали бы как в Обероне-2 и проблем бы небыло. И границы не понадобились бы. Почему так не сделали -- загадка.

Я не рассматривал это с такой точки зрения. Но да, - интересная мысль.

Хотя, с другой стороны, вон сколько грохнули в Жабу и шарпа, а весь пар в

свисток ушел.

Ну, в шарп запихнули уже и контрактное программирование, и функциональное программирование (лямбды!) и ещё фиг знает что. Замечу что лямбды существенно приятней при наличии сборщика мусора, с чем в Аде бяда. Включили бы в стандарт сборщик мусора, не некотых типов... Вон, как в Modula-3 и D. Цены бы небыло.

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

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