Ada_Ru форум

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

[ada_ru] Забегая наперёд - Ada 202x

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

Сообщения

Maxim Reznik
[ada_ru] Забегая наперёд - Ada 202x
2018-08-09 14:51:37

Привет всем,

 

Почитал какие предложения уже приняты в грядущий стандарт языка Ада и написал краткий обзор.

 

https://www.ada-ru.org/ada-202x

Обновил статью по нововведениям Ады 202х.

 

http://www.ada-ru.org/ada-202x

 

Добавил следующее:

 

== Числовые и строковые литералы для пользоветальских типов ==

AI12-0249-1 AI12-0295-1

 

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

 

type Big_Integer is private

with Integer_Literal => Big_Integer_Value;

 

function Big_Integer_Value (S : String)

return Big_Integer;

 

...

 

Y : Big_Integer := -3;

-- Что эквивалентно записи:

-- Y : Big_Integer := - Big_Integer_Value ("3");

 

Аналогично аспект Real_Literal используется для дробных литералов, а String_Literal для строковых.

 

== Агрегаты контейнеров ==

AI12-0212-1

 

Появилась возможность инициализировать контейнеры с помощью агрегатов специального вида.

Поддерживаются почти все стандартные контейнеры (кроме Multiway_Trees) и определенные

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

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

 

X : My_Set := [1, 2, 3];

 

Что равнозначно:

 

X : My_Set := Empty_Set;

Include (X, 1);

Include (X, 2);

Include (X, 3);

 

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

операциями его инициализировать:

 

type Set_Type is private

with Aggregate => (Empty => Empty_Set,

Add_Unnamed => Include);

 

function Empty_Set return Set_Type;

 

procedure Include (S : in out Set_Type; N : Element);

 

 

Для контейнеров типа ключ-значение используется агрегат с именованным сопоставлением:

 

M := [12 => "house", 14 => "beige"];

 

Внутри контейнеров можно использовать итераторы. Есть также сокращенная форма, когда не

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

 

M := [for Key of Keys use Key => Integer'Image (Key)];

-- сокращенная форма:

M := [for Key of Keys => Integer'Image (Key)];

 

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

массивы без элементов и с одним элементом, т.к. нет необходимости указывать индекс:

 

Keys : constant array (Positive range <>) of Integer := [2, 3, 5, 7, 11]; K1 : constant array (Positive range <>) of Integer := [2];

K0 : constant array (Positive range <>) of Integer := [];

-- Для Ады 2012:

K1 : constant array (Positive range <>) of Integer := (1 => 2); K0 : constant array (Positive range <>) of Integer := (1 .. 0 => <>);

== Анонимные функции ==

AI12-0190-1

 

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

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

они понятны компилятору из контекста.

 

-- Замена управляющих символов на '?'

Ada.Strings.Fixed.Translate

(Str, (function (C) return (if C < ' ' then '?' else C)));

 

 

== Отрезки в параллельных циклах ==

 

Для параллельного цикла можно задать количество параллельно исполняемых отрезков

указав его как выражение либо как спецификацию индекса:

 

parallel (Num_CPUs) for I in Arr'Range loop

A(I) := B(I) + C(I);

end loop;

 

declare

Partial_Sum : array (1 .. Num_CPUs) of Integer := (others => 0); begin

parallel (Chunk in Partial_Sum'Range) for I in Arr'Range loop

-- Какие-то сложные манипуляции

Partial_Sum (Chunk) := @ + some_complicated_computation;

end loop;

 

Sum := Partial_Sum'Reduce ("+", 0);

end;

 

== Прочее ==

 

AI12-0020-1 T'Image для всех типов с возможностью переопределения. AI12-0021-1 Wide_String при именах файлов, директорий, командной строке и пр. AI12-0079-1 Аспекты описания побочный эффектов подпрограмм.

AI12-0111-1 Неизменяемый вид для контейнеров позволяет выполнять чтение из разных потоков и ускоряет итерацию.

AI12-0112-1 Для описания контейнеров использовали контракты. Добавили возможность отключить их проверку.

AI12-0230-1 Deadline Floor Protocol - замена Stack Resource Protocol. AI12-0235-1 Пакет System.Storage_Pools теперь "чистый"

AI12-0267-1 Новая прагма Conflict_Check_Policy для контроля за параллельным исполнением.

AI12-0276-1 Новая прагма Admission_Policy для спинлоков

AI12-0279-1 Новый аспект Yield для невытесняющей диспетчеризации

AI12-0286-1 Добавили аспект Allows_Exit в стандрантные пакеты

AI12-0287-1 О использовении not null в переименовании

AI12-0289-1 О неявном not null в анонимных типах

AI12-0290-1 Новое ограничение Pure_Barriers

AI12-0291-1 Новый профиль Jorvik, не такой жесткий, как Ravenscar AI12-0292-1 Редакционные правки

AI12-0293-1 Новый пакет FIFO_Streams

AI12-0294-1 Редакционные правки

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

А развитие бывает разным. Бывает дерево растет и развивается, а, бывает, на нем развиваются грибы. Настало время развитых грибов.

Максим Резник ada_ru@forge.ada-ru.org [ada_ru] wrote:

 

 

Обновил статью по нововведениям Ады 202х.

 

Спасибо!

 

Познавательно... И (очень !!!) грустно...

 

А ведь как хорошо все начиналось!

Да уж, выглядит это безобразно. А как еще должны выглядеть заплатки? И что, собственно, так хорошо начиналось? После Ады 1995 все идет не туда широким строевым шагом.

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

Ада - небольшой язык. Сравните:

 

* Стандарт Ада 2012 - 951 страница.

* C++17 - 1622 страницы

* SQL 1999 - 1147 ТОЛЬКО "Часть 2: Основы", а там еще 8 частей

On 25/12/2018 03.15, 'Sergey I. Rybin' rybin@adacore.com [ada_ru] wrote:

Максим Резник ada_ru@forge.ada-ru.org [ada_ru] wrote:

Обновил статью по нововведениям Ады 202х.

Познавательно... И (очень !!!) грустно...

 

Не вижу ничего противоестественного в данных функциональностях.

Может у меня дурной вкус ?

У нас какие-то разные с++ видимо.

 

Ну брал, что нашел:

http://www.open-std.org/JTC1/SC22/WG21/docs/standards

"A draft for the 2017 edition is available in N4659."

 

А где можно pdf со стандартом (или драфтом стандарта) Ады глянуть?

 

http://www.ada-auth.org/arm.html

Dmitriy Anisimkov anisimkov@ada-ru.org [ada_ru] wrote:

 

Не вижу ничего противоестественного в данных функциональностях.

Может у меня дурной вкус ?

 

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

alt@dmitry-kazakov.de [ada_ru] wrote:

А, вообще, ничего и не начиналось. Все изменения - латание дыр,

пристроечки, надстроечки, сарайчики, душ на лестнице, туалет на

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

 

Согласен. Все нынешние беды заложены в исходном проекте. Но кто ж о том знал в середине 70-х годов прошлого века...

On 12/25/18 10:20 AM, 'Sergey I. Rybin' rybin@adacore.com [ada_ru] wrote:

Dmitriy Anisimkov anisimkov@ada-ru.org [ada_ru] wrote:

 

Не вижу ничего противоестественного в данных функциональностях.

Может у меня дурной вкус ?

 

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

 

К великому сожалению, соглашусь. Язык потерял свою природную красоту, зато активно украшается ленточками, колокольчиками и свисточками. Добавим гирлянду светодиодов, шарики, дождик, звезду на верхушку и получим новогоднюю ёлку.

 

С Наступающим!

 

PS. Кто пробовал залезть на ёлку - сам понял. Остальным намекаю ;)

А я не соглашусь! Язык ADA с самого начала не имел природной красоты и целостности! Он разрабатывался на системах IBM 360/370, американские варианты дисплейных которых не имели квадратных скобок (Не дай Боже кто-то засунет в систему вражеский АЛГОЛО-подобный компилятор!)..

За основу языка был принят язык MODULA Хельмута Вирта. Но язык MODULA имел различимые индексные и агрегатные скобки. Так что, красота и понятность языка были принесены в жертву совместимости с системами IBM.

Язык ADA, пожалуй единственный язык программирования, который как-то развивается. Естественные языки всегда развиваются, если на них говорит много народу, в отличии от мёртвых языков типа ЛАТЫНИ и ЭСПЕРАНТО, которые остаются неизменными и являются уделом узких специалистов, снобов и религиозных схоластов. Развитие естественных воспринимается естественно людьми, которые на них говорят. Я очень рад

тому, что язык ADA развивается и, думаю, он имеет на это право!

С уважением и наилучшими пожеланиями,

Сергей Дюков,

Волжский.

From: ada_ru@yahoogroups.com <ada_ru@yahoogroups.com>

Sent: Tuesday, December 25, 2018 11:36 AM

To: ada_ru@yahoogroups.com

Subject: Re: [ada_ru] Забегая наперёд - Ada 202x

К великому сожалению, соглашусь. Язык потерял свою природную красоту, зато активно украшается ленточками, колокольчиками и свисточками. Добавим гирлянду светодиодов, шарики, дождик, звезду на верхушку и получим новогоднюю ёлку.

С Наступающим!

PS. Кто пробовал залезть на ёлку - сам понял. Остальным намекаю ;)

 

 

[Non-text portions of this message have been removed]

Dukov Sergey dukov54@live.ru [ada_ru] wrote:

За основу языка был принят язык MODULA Хельмута Вирта. Но язык MODULA

 

Во-первых, не Модула, а Паскаль, во-вторых, не Хельмут, а Никлаус. Просто погуглите...

Повышение уровня абстракции не является преимуществом. Чем выше уровень абстракции у объекта, тем меньше у него возможности конструктивного описания и понимания. Список в круглых скобках – что это? Список аргументов функции или процедуры? Список индексов массива? Список объектов агрегатного выражения? Отсюда и трудности в современных стандартах языка ADA описаний и реализаций объектов итераторов и агрегатов. В C++ это просто: квадратные скобки – итератор, фигурные скобки – агрегатное выражение. Тоже самое и в языке MODULA.

Язык ADA задумывался как, язык систем реального времени. Одним из важных требований для языков систем реального времени является наглядность исходных текстов. Именно это было принесено в жертву совместимости с аппаратными средствами ЭВМ. Хорошо что не было привнесено избыточной лаконичности как в языках ALGOL68 или C.

С уважением и наилучшими пожеланиями,

Сергей Дюков,

Волжский.

From: ada_ru@yahoogroups.com <ada_ru@yahoogroups.com>

Sent: Tuesday, December 25, 2018 1:22 PM

To: ada_ru@yahoogroups.com

Subject: RE: [ada_ru] Забегая наперёд - Ada 202x

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

А развитие бывает разным. Бывает дерево растет и развивается, а, бывает, на нем развиваются грибы. Настало время развитых грибов.

 

 

[Non-text portions of this message have been removed]

Dukov Sergey dukov54@live.ru [ada_ru] wrote:

Повышение уровня абстракции не является преимуществом. Чем выше

уровень абстракции у объекта, тем меньше у него возможности

конструктивного описания и понимания.

 

А никто и не говорит, что повышение уровня абстракции - всегда преимущество. Преимуществом является возможность создавать и использовать абстракции уровня, АДЕКВАТНОГО решаемой задаче. Но чем выше уровень абстракций, которые позволяет создавать язык - тем шире у языка возможности. Ада до сих пор, несмотря на все свисточки и звоночки, что на нее навешали - лучший язык в этом отношении

Список в круглых скобках – что это? Список аргументов функции или процедуры? Список индексов массива? Список объектов агрегатного

выражения?

 

А это важно? Вы по виду скобок определяете, или по контектсту использования?

Отсюда и трудности в современных стандартах языка ADA описаний и реализаций объектов итераторов и агрегатов.

 

СОгласен, в Аде итераторы выглядят... странно. Ибо вкорячены в готовый язык как получилось.

 

В C++ это просто: квадратные скобки – итератор, фигурные скобки – агрегатное выражение. Тоже самое и в языке MODULA.

 

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

 

Язык ADA задумывался как, язык систем реального времени. Одним из важных требований для языков систем реального времени является

наглядность исходных текстов.

 

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

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

 

Именно это было принесено в жертву

совместимости с аппаратными средствами ЭВМ. Хорошо что не было

привнесено избыточной лаконичности как в языках ALGOL68 или C.

 

Этого я вообще не понял. Какая совместимость? Какие аппаратные средства?

Список в круглых скобках – что это? Список аргументов функции или процедуры? Список индексов массива? Список объектов агрегатного выражения?

>А это важно? Вы по виду скобок определяете, или по контектсту использования?

В исходных текстах контекст, в большинстве случаев, не виден.

С уважением и наилучшими пожеланиями,

Сергей Дюков,

Волжский.

From: ada_ru@yahoogroups.com <ada_ru@yahoogroups.com>

Sent: Tuesday, December 25, 2018 3:01 PM

To: ada_ru@yahoogroups.com

Subject: Re: [ada_ru] Забегая наперёд - Ada 202x

 

 

[Non-text portions of this message have been removed]

On 2018-12-25 11:43, Dukov Sergey dukov54@live.ru [ada_ru] wrote:

Повышение уровня абстракции не является преимуществом. Чем выше уровень абстракции у объекта, тем меньше у него возможности конструктивного описания и понимания.

 

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

 

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

 

Список в круглых скобках – что это? Список аргументов функции или процедуры? Список индексов массива? Список объектов агрегатного выражения?

 

Какая разница? Зачем пользователю абстракции это знать? Чтобы писать код зависимый от реализации? Ада задумывалась, чтобы всего этого избежать. Именно поэтому код 30-летней давности может быть использован сейчас совместно с новым кодом. Покажите мне язык с квадратными скобками, код которого не протухает в пять лет! Пробовали компилиронать что-нибудь из Borland C++ в gcc?

 

Отсюда и трудности в современных стандартах языка ADA описаний и реализаций объектов итераторов и агрегатов.

 

Трудности эти из-за того, что все это - заплатки позднего времени ломающие абстракцию типа данных с операциями. Реализация лезет из всех щелей и требует описаний. Попробуйте описать пружинные весы в терминах кванотовой физики...

 

Язык ADA задумывался как, язык систем реального времени. Одним из важных требований для языков систем реального времени является наглядность исходных текстов.

 

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

Проблемы с итераторами, аспектами и прочими поздними наслоениями в том,

что они ломают абстрацию типа с операциями,

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

процедур для реализации самых утилитарных нужд.

А разве с дженериками в принципе изначально это не так? Поскольку у Ады "всё явно", то дженерик в Аде не умеет сам вывести промежуточные типы, поэтому всё приходится явным образом прописывать руками. Это изначальная концепция языка вроде бы. Не новодел какой.

Вообще, можно примеров, типа -- вот так было хорошо и правильно. А вот новодел, и тут плохо, и тут плохо. Концепции языка нарушены тут и тут. Прямо на конкретном коде.

>

 

 

[Non-text portions of this message have been removed]

А никто и не говорит, что повышение уровня абстракции - всегда

преимущество.

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

уровня,

АДЕКВАТНОГО решаемой задаче. Но чем выше уровень абстракций, которые

позволяет

создавать язык - тем шире у языка возможности. Ада до сих пор, несмотря

на все

свисточки и звоночки, что на нее навешали - лучший язык в этом отношении

Это если сравнивать с какими языками? Чтобы оценить и сравнить два языка, нужно знать оба на профессиональном уровне. Я не уверен, что среди участников обсуждения много людей знающих одновременно на проф. уровне и современную Аду например и современный С++ (c++17 .. 20). То есть даже тут сравнить языки не получится. А утверждение что "ада до сих пор лучшая в этом отношении" слишком сильное. Чтобы его сделать, нужно как минимум на проф. уровне владеть всеми языками, то есть иметь практический коммерческий опыт работы с ними. Ну, или хотя бы несколькими основными, например вот этими всеми: Haskell, Ocaml, Rust, c++17, Swift.

 

 

[Non-text portions of this message have been removed]

Alexey Veselovsky alexey.veselovsky@gmail.com [ada_ru] wrote:

 

А разве с дженериками в принципе изначально это не так? Поскольку у Ады "всё явно", то дженерик в Аде не умеет сам вывести промежуточные типы, поэтому всё приходится явным образом прописывать руками. Это изначальная концепция языка вроде бы. Не новодел какой.

 

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

Вообще, можно примеров, типа -- вот так было хорошо и правильно. А вот новодел, и тут плохо, и тут плохо. Концепции языка нарушены тут и тут. Прямо на конкретном коде.

 

Беда не столько в нарушении концепций, сколько в неуправляемом росте объема и сложности языка. А нарушение концепций и заплатки лишь усугубляют непознаваемость этого монстра.

Вы правы! Хорошо бы было – это не конструктивно. Всё это в прошлом и ничего уже не изменишь. Так что дискуссия у нас получилась не очень. Я прошу извинения у сообщества.

С уважением и наилучшими пожеланиями,

Сергей Дюков,

Волжский.

From: ada_ru@yahoogroups.com <ada_ru@yahoogroups.com>

Sent: Tuesday, December 25, 2018 3:37 PM

To: ada_ru@yahoogroups.com

Subject: Re: [ada_ru] Забегая наперёд - Ada 202x

Проблемы с итераторами, аспектами и прочими поздними наслоениями в том,

что они ломают абстрацию типа с операциями,

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

процедур для реализации самых утилитарных нужд.

А разве с дженериками в принципе изначально это не так? Поскольку у Ады "всё явно", то дженерик в Аде не умеет сам вывести промежуточные типы, поэтому всё приходится явным образом прописывать руками. Это изначальная концепция языка вроде бы. Не новодел какой.

Вообще, можно примеров, типа -- вот так было хорошо и правильно. А вот новодел, и тут плохо, и тут плохо. Концепции языка нарушены тут и тут. Прямо на конкретном коде.

>

>

[Non-text portions of this message have been removed]

 

 

[Non-text portions of this message have been removed]

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

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