В общем я тут сделал первую оконную программу на Аде.
wintest.rar ( 24.2 килобайт )
Кол-во скачиваний: 635 Ну и куча вопросов накопилась.
1. Зачем помимо INT ввели тип LONG, который от -2**31 до 2**31-1? В чём прикол?
2. У меня, например, есть функция. Принимает массив, который может быть ооочень длинным. Массив может быть передан в функцию либо сразу, как переменная, либо как результат вычисления выражения, либо как агрегат, то есть нужен именно in-параметр. Внутри функции над массивом производятся какие-то операции. Над самим параметром операции запрещены, поэтому первой строчкой функции стоит копирование
copy_a: arr := a;
Понятно, что если массив передаётся из переменной, то тут явно происходит то, что в Паскале делалось неявно. Но если массив передаётся как результат вычислений, то он изначально сидит на стеке, и если внутри функции все операции делаются с copy_a (а изначальное a даже не упоминается), то делать копирование из стека в стек просто бессмысленно. Умеет ли компилятор убирать копирование в таких случаях?
3. Агрегат при передаче в функцию не работает, если внутри только 1 параметр. f((a)) - это вызов функции от числа (a) или от массива (a)? Вот компилятор и запрещает так передавать 1-элементные массивы.
Но если у разработчиков языка явно была клавиатура только с одним типом скобочек, то сейчас у всех есть [ и ], которые можно разрешить применять для агрегатов. f(a) - передача числа, f([a]) - передача 1-элементного массива, f((a)) - неопределённость, запретить, не нужна.
4. Подобно очень опасной описке в С между == и =, в Аде есть очень опасная возмжность написать and вместо and then, "благодаря" которой будет выполняться то, что выполняться не должно. Это серьёзный изъян языка. Зачем для операции, которая нафиг не нужна в большей части случаев (вычисление выражения по полной схеме), оставили привычную запись, а для реально нужной операции сделали непривычную и длиную запись? Почему бы не оставили and и or для неполного вычисления, а для полного сделали бы, например, and necessarily и or necessarily?
5. Тот код из архива занимает 100 кб, но компилируется в мегабайт. В этом мегабайте последние 2/3 - это чистый текст. Как его скомпилировать в более приемлемый размер?