LINUX.ORG.RU
ФорумTalks

Типовой ад в Аде.

 , ,


0

2

Неужели этим всем кто то пользуется? Не совсем понятно как это спасает от выстрелов в ноги. По мне так вызывает только рвотный рефлекс при попытке въехать в работу с типами в Аде. Тут еще нет тех типов которые тащит за собой GNAT. Потом при попытке выводить это в stdio или передавать в производные типы код начинает обрастать имиджами, компилятор кряхтит и глохнет. Я понимаю что это поднимает требования к проектированию проекта и заставляет делать отдельное продуманное ТЗ для типов, но как то все это чрезмерно для простого шлепания на мк и хелловордов.И, вероятно, это может делать код платформозависимым.

   Max_Width: constant := 10_000; -- Константа имеет универсальный тип Universal_Integer совместимый с другими типами.
   
   -- Производные типы:
   type X2 is new Integer range 0 .. 100; -- X производный от типа Integer, с допустимым диапазоном от 0 до 100
   type Y1 is range 0 .. 100; -- Тип Y описывается как тип с допустимым диапазоном от 0 до 100,
                              -- при его описании не указан тип-предок. В этом случае он производен от
                              -- типа Root_Integer(базовый тип для всех целочисленных типов).
                              
   -- Описания целочисленных статических переменных:
   Count       : Integer;
   Amount      : Integer := 0;                      

   -- описания целочисленных констант(именованных):
   Unity    : constant Integer := 1;
   Speed_of_Ligth : constant := 300_000; -- тип Universal_Integer
   A_Month  : Integer range 1 .. 12;
   
   -- описания целочисленных типов и подтипов
   subtype Months is Integer range 1 ..12; -- Ограниченный тип Integer, подтипы совместимы с базовыми типом и могут быть с ними "смешаны"
   type File_Id is new Integer; -- Новый целочисленный тип
   type Result_Range is new Integer range 1 .. 20_000; -- Новый целочисленный тип с объявленным ограничением
   type Other_result_Range is range 1 .. 100_000; -- производный от Root_Integer, при этом компилятор будет выбирать подходящий размер целочисленного размера для удловлетворения задаваемого диапазона.
   
   --Модульные типы (беззнаковые):
   type Byte is mod 2 ** 8;
   CountB : Byte := 255;
   -- CountB := CountB +1; результат не вызовет исключения, CountB будет равен 0.

   --Вещественные типы
   type Float is digits 6 range -16#0.FFFF_FF#E+32 .. 16#0.FFFF_FF#E+32; -- -3.40282E+38 .. 3.40282E+38
   type Velocity is new Float;
   type Height is new Float; --нельзя случайно смешивать Velocity и Height без явного преобразования типов.
   -- Вещественные типы с фиксированной точкой, тип Duration:
   -- Представление чисел с фикс. точкой имеет более ограниченный диапазон значений и указанную абсолютную погрешность, которая задается как "delta" этого типа.
   type Volt is delta 0.125 range 0.0 .. 255.0;
   type Fraction is delta System.Fine_Delta range -1.0 .. 1.0; --четкое определение насколько тип должен быть точным, например позволяет контроллировать ошибки при округлении.
   

★★★★★

Поплачься ещё на систему типов в брейнфаке.

slovazap ★★★★★ ()

Типовой ад в Аде.

«Невиноватая Ада», «ад перечислимый» и в других языках имеет место быть ©.
Недаром мудрый Вирт удалил их их Оберона ©.

quickquest ★★★★★ ()

Неужели этим всем кто то пользуется?

Пользуются, особенно те, кто много умнее тебя.

но как то все это чрезмерно для простого шлепания на мк и хелловордов

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

Вот когда от твоего кода будут зависеть жизни людей/судьба девайса с ценой в 8-9 нулей - тогда оценишь.

timdorohin ★★★ ()

а чё тут уж такого? я бы, конечно, убрал умолчательные типы Universal_Integer и Root_Integer, но и сними всё достаточно логично.

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

платформозависимо, негибко.
Вот описываешь ты к примеру структуру армии и сегодня у тебя в отделении 8 человек, создал ты под это тип, а завтра вышел приказ МО о том что теперь в отделении 5 человек, простым переопределением типа уже не обойдешься.

splinter ★★★★★ ()
Последнее исправление: splinter (всего исправлений: 1 )
Ответ на: комментарий от splinter

Когда у нас последний раз штатка отделения менялась?

al-kasch ()
Ответ на: комментарий от splinter

То есть вы будете латать на лету софт, от которого зависят жизни? Примерно как делает сбербанк или мы делаем в своём софте для минздрава? Гореть вам за такое в аду! Это каноническое нищебродство и ошибки проектирования.

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

Жёсткие рамки гарантируют стабильную работу, они для этого.

ixrws ★★★ ()

Эээ... а что не так? Это же Ада, а не сишечка. Язык высокого уровня. Тут всё по уму (c).

Тебе надо это сращивать с кодом на сишечке? Тады ой.

Deleted ()
Ответ на: комментарий от al-kasch

По сравнению с указателепердолингом в С это вообще цветочки.

Или когда внезапно uint32_t становится мало. Но никто об этом еще не знает.

Deleted ()
Ответ на: комментарий от al-kasch

Скажи, Элвис реально умер или еще есть шанс что живой?

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

Посмотрите мультик, отдохните, возьмите в руки JavaScript и больше не трогайте взрослых языков.

А вот еще вопрос в тему. Ничего не имею против Ады или там лиспа со сноболом каким-нибудь, языки такие «взрослые» и все такое.

Но чего же на них мало софта пишут? Отчего они в мейнстрим не входят?

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

Но чего же на них мало софта пишут?

Потому что они «взрослые» и всё такое, очевидно же.

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

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

Это язык общего назначения так-то.

Вот когда от твоего кода будут зависеть жизни людей/судьба девайса с ценой в 8-9 нулей - тогда оценишь.

Уровень пафоса: более 9000.

i-rinat ★★★★★ ()

Брось каку. Оглянись: вокруг полно прекрасных типобезопасных языков, начиная с Modula-3 и заканчивая, прости господи, Rust.

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

вокруг полно прекрасных типобезопасных языков, начиная с Modula-3

Нет больше Модулы-3. Не на что смотреть.

tailgunner ★★★★★ ()

И, вероятно, это может делать код платформозависимым.

Зачем делать платформонезависимый код для программы, которая будет использоваться на одной платформе?

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

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

A,B : Integer;
Result : Bolean;
Result := (B \= 0) and (A / B);

Если B = 0, то будет возникать ошибка деления на ноль. Предлагается костылить так:
Result := ( B\=0 ) and then (A/B > 0);

Нормально так из коробки.

splinter ★★★★★ ()
Ответ на: комментарий от al-kasch

А зачем СКПшнику знать С?

СКПшнику не надо знать С.

Даже Джаву СКПшнику знать не надо.

Вот пруф -

Программисты — наиболее опасные специалисты-ремонтники. Получив корки пейсателя программ руками, перезрелое школие сразу чувствует себя компьютерным гуру, при этом его ЧСВ заботливо подогревается старшим поколением, по привычке считающим синонимами слова «программист» и «техник». А тут ещё и дипломированный…

(C) С уютненького

Если бы Вы хорошо учились, то работали бы в АО НПП «Исток» им.Шокина.

А так

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

(C) Тоже с уютненького

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

Ада вычисляет булевые значения всегда, даже если значение слева ложь:

Предлагается костылить так:

Result := ( B\=0 ) and then (A/B > 0);

Костылить? O_O

Это формы, специально для этого предназначенные.

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

Илик примеру, мне необходимо вернуть результат деления если число положительное, в Си я это сделаю одним макросом:

#define isFALSE -1
#define retDivPositive(a,b,ret) (a > 0) & (b > 0)  ? (ret = (a/b)) : (ret = isFALSE);
    retDivPositive(4,2,a);
    retDivPositive(0.888, 2.001, b);
    retDivPositive(3, 0.3, c);
    printf("a = %d, b = %f c = %e",a,b,c);

a = 2, b = 0.443778 c = 1.000000e+01  


В Ada я бы запарился приводить к типам.

splinter ★★★★★ ()
Последнее исправление: splinter (всего исправлений: 1 )

А можно мне в C++ всё то же самое? И чтоб зерокост, ну вы поняли.

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

Макрос школоло-стайл с ошибкой. Да, на Аде ты так не напишеь.

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

это dependent types, которые нужны чтобы ты случайно не умножил амперы на день недели.

есть куда более изысканные языки, которые ещё termination checking делают.

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

Ты просто не понимаешь, для чего это нужно. Это ты ещё не сталкивался с языками, где у типов есть размерность: где можно делить метры на секунды, но только если результат присвоить типу «скорость».

baka-kun ★★★★★ ()
Ответ на: комментарий от splinter
Result := (B \= 0) and (A / B);

Хорошо что в современных языках запрещают автоприведение типов. Это же херня, которая даже хуже nullable указателей.

Nexmean ()
Ответ на: комментарий от baka-kun

а примерчики есть желательно с открытыми компиляторами.

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

фреймворк для построения Спейс-шаттла

фальконы летают и садятся на сишечке, и в основном успешно, например

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

Я когда-то сильно грезил разными там распараллеливаниями. В ту же примерно эпоху буквально болел микроядерщиной. На фоне этого Ада показалась божественной песней, которую горланит Трубадур под окнами Турандот.
Ну, или Петрарка нашёптывает своей Лауре...
Короче, не важно.

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

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

Мануал долго пролежал на полочке и отправился в макулатуру.

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

сейчас не намного лучше, хоть и пишут о более чем 200 компиляторов, на деле только GNAT, нормальных IDE тоже не найти, GPS под слаку собрать не получилось пришлось оффтопик поставить и он далек от идеала, из граф-х библиотек только лохматый GTK, из брокеров только CORBA.

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

Я думаю, что если что годное и существует под Аду, то в недрах, мать его, Пентагона.

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

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

Я вспомню название и напишу сюда. Сейчас не помню, а самой книжки уже нет, в макулатуру сдал.

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

Фальконы на JOVIAL летали всю дорогу (аж до 50 блока :)) Сишечка, если и протекла куда с обретением MISRA-огораживаний, — это веяния эффективного менеджмента.

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