Что делает язык Ada предпочтительным для критически важных для безопасности систем МКС?

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

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

Ада была языком министерства обороны. Разработав его, стыдно им не воспользоваться. Он имеет сильные элементы реального времени, оставаясь при этом на высоком уровне. Я могу быть предвзятым, это мой любимый язык. (хотя это может быть потому, что я ничего не писал в ней более двух десятков лет)
@JCRM: Тогда вы могли бы написать ответ с подробным описанием некоторых аспектов Ады, которые делают ее подходящей для критически важных систем, в отличие, скажем, от C или Java, нет? :-) Как разработчик программного обеспечения, мне очень интересно услышать мнение кого-то, у кого есть опыт работы с этим языком (в отличие от чтения статьи в Википедии…).
Я недостаточно знаю о системных требованиях ISS, и у меня остались только старые воспоминания об Аде, поэтому мой вклад ограничивается (надеюсь) полезными комментариями. Я сильно подозреваю, что это было из-за того, что Министерство обороны «вы должны писать на языке Ада» получило это в ISS; переключение языков - это не то, что делают без ОЧЕНЬ веской причины в системах, критически важных для безопасности.
Интересно, почему ada тоже, разве java не быстрее?
@repluser: Ада на несколько лет быстрее, чем Java, в том смысле, что когда была разработана ISS, Ада существовала, а Java — нет. Альтернативами в то время, вероятно, были бы Modula-3 или Mesa, или, может быть, Eiffel (но Eiffel тогда не был международным стандартом).
@repluser: ... и даже когда Java существовала, она не была так строго определена, как сейчас. Зафиксировать точную спецификацию языка программирования сложно . И чем больше язык, тем он полезнее, но и сложнее его точно указать. Библиотека потоков Java особенно сложна.
@JörgWMittag Мало того, Java все еще находилась в зачаточном состоянии - у нее даже не было спецификации реального времени до 2001 года с RTSJ 1.0, и при этом она все еще не подходит для приложений, критически важных с точки зрения безопасности, спецификация для которых (JSR-302) используется с 2006 года и в настоящее время находится на стадии четвертого проекта.
Чем вас удивляет Ада?
Интересный. Хотя история говорит, что она была разработана в конце 70-х, я готов поклясться, что впервые услышал упоминание об Аде, когда работал с лабораториями RCA Camden над аппаратным обеспечением для Skylab, примерно в 1974 году. Затем, работая с IBM в Рочестере, штат Миннесота, в конце 70-х, Я «позаимствовал» некоторые концепции структурирования программы Ады (в частности, обработку исключений) для использования в IBM System/38. Я предполагал, что язык исчерпал себя в 1980-х годах.

Ответы (6)

Эта ссылка на Викиучебник перечисляет его сильные стороны, некоторые из которых:

  • Чрезвычайно надежная, статическая и безопасная система типов, которая позволяет программисту создавать мощные абстракции, отражающие реальный мир, и позволяет компилятору обнаруживать многие логические ошибки до того, как они станут ошибками.
  • Модульность, при которой компилятор напрямую управляет созданием очень больших программных систем из исходных кодов.
  • Сокрытие информации; язык отделяет интерфейсы от реализации и обеспечивает детальный контроль над видимостью.
  • Удобочитаемость, которая помогает программистам просматривать и проверять код. Ада отдает предпочтение читателю программы, а не писателю, потому что программа пишется один раз, но читается много раз. Например, синтаксис запрещает все двусмысленные конструкции, чтобы не было сюрпризов, в соответствии с законом наименьшего удивления Дао программирования. (Некоторые программисты на Аде неохотно говорят об исходном коде, который часто бывает загадочным; они предпочитают текст программы, близкий к английской прозе.)
  • Переносимость: определение языка позволяет компиляторам различаться только несколькими контролируемыми способами, а в остальном очень точно определяет семантику программ; в результате исходный текст Ады легко переносим между компиляторами и целевыми аппаратными платформами. Чаще всего программу можно перекомпилировать без каких-либо изменений.
  • Стандартизация: стандарты были целью и отличительной чертой с момента разработки языка в конце 1970-х годов. Первый стандарт был опубликован в 1980 году, всего через 3 года после начала проектирования. Все компиляторы Ады поддерживают один и тот же язык; единственный диалект, SPARK, представляет собой просто аннотированное подмножество и может быть скомпилировано с помощью компилятора Ada.

Важным моментом является читабельность, поскольку жизнь программного продукта не заканчивается, когда вы заканчиваете его кодирование/тестирование. Самые большие расходы (время и деньги) связаны с обслуживанием этого продукта. Таким образом, для такого длительного проекта, как ISS, использование языка, созданного для помощи в решении этой задачи, за счет сведения к минимуму ошибок и общей двусмысленности кажется уместным.

Этот ответ сравнивает его с C и C++:

Язык Ada имеет ряд встроенных функций безопасности. (Сравните с C, где стандарт состоит из двенадцати страниц, на которых обобщаются неопределенные поведения, встроенные в язык. Сравните с C++, где неопределенные поведения настолько многочисленны, что их даже не перечисляют.) Эти функции безопасности Ады могут иметь существенное значение. стоимость производительности, и из-за этого Ада также предоставляет возможность выборочного отключения этих функций безопасности.

Обратите внимание, что можно достичь того же уровня безопасности с помощью C или C++, если вы используете подмножество языков C или C++ и придерживаетесь руководства по стилю, но в Ada это идет вместе с языком.

РЕДАКТИРОВАТЬ (спасибо JCRM): первая ссылка также говорит о поддержке низкоуровневого программирования:

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

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

Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат .
Я не согласен с предположением, что «можно достичь того же уровня безопасности с C или C++, если вы используете подмножество языков C или C++». Использование подмножества позволяет избежать некоторых вопиющих ловушек и неуверенности, встроенных в C/C++, и, таким образом, повышает их до минимальной степени здравомыслия. Для сравнения, Ада разработана с учетом безопасности как основной цели дизайна. Для серьезных вещей. Вы знаете, самолеты, бомбы и прочее. В отличие от еще одного компилятора компилятора и прочего. Я не могу вспомнить, как часто ошибка компилятора в Ada выявляла ошибку, которая была бы дампом ядра в C.
@uhoh Эти ответы на stackoverflow полны чепухи. Я работал над несколькими космическими кораблями, программное обеспечение которых использует шаблоны C++. Чего не стоит делать, так это использовать функции, которые динамически выделяют память из кучи после времени инициализации, выбрасывают/перехватывают исключения, вызывают системные функции или используют рекурсию/зацикливание без ограничений. Большая часть стандартной библиотеки C++ не имеет таких алгоритмических ограничений. Это не имеет ничего общего с шаблонами в целом.

Сроки. Ада была разработана в 1970-х и 80-х годах с целью заменить множество языков, используемых в системах реального времени Министерства обороны США. НАСА (а также организации из Европы) были активными участниками. В 1991 году Министерство обороны поручило Аде все основные разработки. НАСА сделало то же самое. До того времени Международная космическая станция была бумажной концепцией. Это начало становиться реальным именно тогда, когда мандат Ады вступил в силу.

В 1997 году Минобороны отказалось от своего мандата на Ада. Примерно то же самое сделало и НАСА. Если бы МКС была построена сегодня, ее полетное программное обеспечение, скорее всего, было бы не на Аде.


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

Есть много причин, по которым Ада стала нишевым языком. Во-первых, излишняя строгость и многословие языка мешают ему быть языком общего назначения. Еще одна проблема заключалась в том, что сообщество Ады упустило момент при переходе от мэйнфреймов к миникомпьютерам и настольным компьютерам. Языки, находящиеся в авангарде этих переходов (C и C++), по-прежнему широко используются. Сообщество Ады также пропустило движение за свободное программное обеспечение. Первый бесплатный компилятор Ады вышел только в 1995 году, и этот выпуск не был завершен. К тому времени было уже слишком поздно.

Хотя я проголосовал за этот ответ, потому что я думаю, что он определяет основную причину, я думаю, что его можно было бы улучшить, упомянув причины, по которым НАСА предпочло Аду другим альтернативам, доступным в то время. Это было не совсем произвольно.
Как и в случае с другими ответами, это отвечает на то, что сделало его подходящим, но не на вторую часть квеста о том, почему он все еще используется.
@JackAidley: Были ли альтернативы? Может Модуль-3 или Меса?
Причина довольно проста: программное обеспечение для полетов не похоже на другое программное обеспечение. Вы ничего не меняете, если в этом нет крайней необходимости. Меня бы сбросили с крыши Здания 1, если бы я серьезно попросил полный порт полетного программного обеспечения на другой язык.
@Tristan - У меня есть идея для первоапрельской шутки в следующем году...
".Если бы МКС была построена сегодня, ее полетное программное обеспечение, скорее всего, было бы не на Аде". Это было бы на Java или Python, как и все остальное.
@QuoraFeans, как бы я ни любил python, пока еще не совсем на уровне критически важных приложений в реальном времени/безопасности. Java с ее тяжеловесной средой выполнения практически исключена из приложений со встроенными элементами управления. Крайне вероятно, что код окажется на C (возможно, на C++) с использованием чего-то вроде стандартов MISRA, используемых в автомобильной промышленности (или одного из миллиона подобных стандартов) . Эти языки по-прежнему лидируют во встраиваемых системах по многим очень веским причинам.
@Тристан, точно. просто нет в ответе (ах)
@JCRM - другой способ выразить это так: «парадигмы приходят и уходят, но устаревший код остается навсегда». Это не просто программное обеспечение для полетов — я знаю по крайней мере одну корпоративную систему управления заказами, которая до сих пор работает на языке COBOL 70-х годов, потому что риск ее переноса на более современный язык просто слишком высок.
Сообщество Ады упустило момент при переходе от мэйнфреймов к настольным компьютерам? Ну, есть лодки, которые пропустили, и лодки, которые некоторые люди не хотят ловить! По своей природе Ада всегда должна была стать нишевым рыночным языком, а не мейнстримом — большинству приложений не нужна его строгость. В любом случае, обслуживание основного рынка требует затрат на высокотехнологичную поддержку, поскольку компании-клиенты будут обладать только универсальными навыками кодирования (например, C/C++/Java). В этом нет денег. Лучше представить Ada критически важным отраслям — все с собственным опытом — так что накладные расходы на техническую поддержку будут минимальными. $
@Trunk. Проблема с этой точкой зрения заключается в том, что она предполагает, что Ада необходима для создания систем, критичных ко времени / безопасности, и что других языков недостаточно. Это совсем не так.
@ Дэвид Хаммен - я пытался представить бизнес-модель индустрии Ады, когда читал ее. Я надеюсь, что это не означало, что я с ней согласен или, тем более, с предполагаемыми узкими социально-экономическими горизонтами.

Я помню, как посещал курсы информатики в конце 90-х. Профессор CS объяснил нашей скудной группе CS-специалистов, что собирается учить нас C, а не COBOL или Ada, потому что в целом это будет полезнее. В то время они были основными языками программирования, которые преподавали в колледжах (каждый крупный университет в этом районе со степенью CS преподавал один из этих двух). Зачем им учить старые языки? Потому что вы все еще можете получить работу по написанию кода в них. Это было примерно в то время, когда строилась МКС.

Причина появления Ada заключалась в том, что им нужно было надежное программное обеспечение для критически важных задач, и Ada была буквально создана, чтобы отвечать всем требованиям. НАСА до сих пор имеет одну из самых дорогостоящих программных ошибок в истории (еще в темные века перфокарт )

Ошибка, внесенная перфокартой, оказалась одной из самых дорогих программных ошибок в истории, когда она привела к разрушению космического корабля «Маринер-1» в 1962 году (стоимость в долларах 1962 года: 18,5 млн; стоимость в сегодняшних долларах: 135 млн долларов). ), прежде чем он смог завершить свою миссию полета к Венере.

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

Основная черта Ады - стабильность

Акцентируя внимание на надежных принципах разработки программного обеспечения, Ada поддерживает разработку приложений с высокой степенью интеграции, в том числе тех, которые должны быть сертифицированы в соответствии со стандартами безопасности, такими как DO-178B, и стандартами безопасности, такими как Common Criteria. Например, строгая типизация означает, что данные, предназначенные для одной цели, не будут доступны через неподходящие операции; предотвращаются такие ошибки, как обработка указателей как целых чисел (или наоборот). А проверка границ массива в Ada предотвращает уязвимости переполнения буфера, распространенные в C и C++.

НАСА пыталось создать свой собственный язык в стиле Ада под названием (я не придумываю) HAL/S , который использовался космическим челноком и... не более того. К тому времени все наземное оборудование будет использовать Аду ( стандарты! )

Было предложено стандартную наземную версию HAL НАСА, названную HAL/G для «земли», но грядущее появление языка программирования, который вскоре будет называться Ада, способствовало отсутствию интереса Intermetrics к продолжению этой работы.

О, у HAL/S есть еще одна небольшая проблема

Слабость Hal/S заключается в том, что он легко доступен только при размещении на мейнфреймах серии IBM 360/370. Intermetrics также разместила Hal/S на миникомпьютерах Modcomp IV и Classic, а также на миникомпьютерах Data General Eclipse. Но реализация Modcomp используется только JPL, а разработка Eclipse больше не используется, поскольку ограничения адресного пространства снижают скорость компиляции примерно до 30 строк в минуту.

Таким образом, неудивительно, что в начале 90-х (когда ПК были на подъеме) было намного дешевле производить больше стандартных вычислительных устройств (держу пари, что IBM смогла заставить Ada работать на более стандартном оборудовании, поскольку они уже поставляли астронавтов с Thinkpads в то время ). Забавный факт: Thinkpads под управлением Linux используются для взаимодействия со станционным компьютером.

«Это были просто прикладные потребности», — сказал он, описывая, как программное обеспечение ноутбука, которое взаимодействовало с системами управления станцией в те первые дни, было разработано для работы в ОС на базе Linux.

Напротив, марсоход (начало 2000-х) работал на C

Он выполняет 2,5 миллиона строк C на процессоре RAD750 производства BAE.

Это далеко не самая дорогая ошибка. В 1998 году марсианский климатический орбитальный аппарат стоил 327,6 миллиона долларов. Он разбился из-за того, что имперские и метрические единицы измерения были перепутаны. Хотя технически это не было ошибкой программного обеспечения в конце концов - проблема была отмечена до сбоя, просто инженеры «не следовали правилам заполнения [формы] для документирования своих опасений». Так что на самом деле это была ошибка бюрократии, как и в случае с «Челленджером», где инженеры также заранее предупредили бюрократию.
Перечеркнутая черта была не ошибкой в ​​языке программирования, это была ошибка в спецификации. (источник: Скотт Мэнли, я думаю), фактическая проблема заключалась в том, что в спецификации должно было быть указано, что это значение должно быть усреднено, отсюда и верхняя черта, но проверка спецификации и проверка кода не уловили, что это должно было быть средним значением. ценить. Так вот, язык с более низкой когнитивной нагрузкой может позволить программисту легче заметить, но этот конкретный инцидент не был вызван языком.
"Профессор CS был веселым парнем" - речь о языке с 1000 диалектами, каждый из которых требует своего компилятора! Вот почему Ада была разработана: чтобы заменить сотни диалектов Юпитера. Неудивительно, что он научил вас С: Плохие чувства, что Ада заменила его любимый язык!
@davidbak rimshot Пока есть такой язык...
@Machavity: О да! JOVIAL несколько известен тем, что программное обеспечение авионики B2 Spirit было написано на JOVIAL. Позже ВВС заключили контракт с компанией Semantic Designs (чей главный инженер на самом деле очень активно занимается разработкой программного обеспечения и переполнением стека ) для создания переводчика с JOVIAL на C , что они смогли сделать, даже не имея доступа к исходному коду .
HAL/S намного опередил Аду. Один из трех проигравших претендентов на участие в конкурсе DoD, который в конечном итоге привел к Ada, был из Intermetrics. Их предложение было по существу производным от HAL/S. То, что Intermetrics разработала и внедрила HAL/S, сильно повлияло на их предложение.
Интересно, что Curiosity работает на коде, написанном на C. — хотя следует отметить, что ошибка ПО может быть либо исправлена ​​(обновление ПО), либо, в крайнем случае, приведет к потере миссии, но не гибели людей . Интересно, на чем работала Ракета-носитель?
Я не верю, что наземное оборудование программы "Шаттл" использовало Аду. Ни в Центре управления полетами, ни в симуляторе миссий шаттла этого не было. Система обработки запуска использовала язык под названием GOAL. Ада стала использоваться НАСА в программе МКС, а не Шаттла.

С веб-сайта :

Инструменты AdaCore можно использовать для достижения целей проверки, включая соответствие стандарту кодирования , точность кода ( предотвращение ошибок, таких как переполнение буфера, целочисленное переполнение и ссылки на неинициализированные переменные), а также структурный анализ покрытия вплоть до MC/DC . Специализированные высоконадежные библиотеки времени выполнения, в том числе та, которая реализует профиль задач Ravenscar, достаточно просты, чтобы их можно было включать в квалифицированные системы, но достаточно выразительны, чтобы поддерживать необходимую функциональность для жесткого космического программного обеспечения в реальном времени . Квалификационные материалы для библиотек времени выполнения могут быть разработаны для стандарта ECSS и адаптированы к новым контекстам проекта.

C и C++ не предотвращают эти ошибки (за исключением дорогостоящих надстроек ), а Java не требует жесткого режима реального времени (за исключением нестандартных виртуальных машин ).

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

with Ada.Text_IO; use Ada.Text_IO;

procedure Learn is

   subtype Alphabet is Character range 'A' .. 'Z';

begin

   Put_Line ("Learning Ada from " & Alphabet'First & " to " & Alphabet'Last);

end Learn;

Здесь Alphabet не может содержать никакого значения, кроме A до Z. Эта довольно уникальная языковая особенность, среди прочих , помогла команде студентов выполнить миссию CubeSat 2013-2015 :

В качестве одного из примеров языка Ada в студенческой среде студенты Вермонтского технического колледжа в США использовали язык SPARK (формально поддающееся анализу подмножество языка Ada) для разработки программного обеспечения для спутника CubeSat, недавно завершившего успешную двухлетнюю орбитальную миссию. SPARK был выбран из-за преимуществ надежности. У студентов не было предыдущего опыта работы с Ada, SPARK или формальными методами, но они смогли быстро освоиться.

Из двенадцати CubeSat от академических учреждений, которые были включены в запуск, один из Vermont Tech был единственным, который завершил свою миссию. Многие другие погибли из-за программных ошибок. Группа Vermont Tech приписывает свой успех подходу SPARK, который, например, позволил им формально продемонстрировать отсутствие ошибок во время выполнения.

Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат .

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

  • Ада — это язык, разработанный именно для таких ситуаций , т. е. отказоустойчивых, работающих в реальном времени и (часто) встроенных систем, используемых для управления важным оборудованием или процессами.

  • Эволюция Ады с самого начала была гораздо более целенаправленной и жестко управляемой. И его создатели, и его оценщики были отобранными экспертами в области языкового развития с сильным чувством долга как перед своей профессией, так и перед проектом Ада. Подобно тому, как ценности Западного побережья пронизывают Яву, бескорыстная скромность Ичбиа, Дьюара и Тафта задает тон для Ады, который до сих пор преобладает и который должен понравиться такой организации, как НАСА.

  • В Ada есть формально определенный язык подмножеств под названием SPARK, который позволяет легко отображать формально проверенный дизайн системы в его код.

  • Ада — один из самых быстрых языков , к тому же с параллельными процессорами.

  • Индустрия Ada (такие компании, как AdaCore, Altran, Green Hills, Wind River и т. д.) разработала множество инструментов поддержки для разработки критически важных систем в Ada/SPARK.

  • Есть несколько подходящих альтернативных языков для Ады

  • Альтернативные языки, такие как формально определенный C, не имеют такой же глубины опыта или поддержки, как Ada/SPARK.

Я понятия не имею, каковы были подробные системные требования и насколько жесткими были правила проведения тендеров в отношении взвешивания наследия и внутренней пригодности. Но мне кажется рациональным, что Ada/SPARK получит высокие оценки в обеих категориях. Унаследованные факторы должны включать такие вещи, как

  • НАСА было первоначальным спонсором проекта Ада и с самого начала использовало его в предыдущих системах.

  • Компания, занимающаяся сборкой систем, скорее всего, лучше знакома с Ada/SPARK, ноу-хау в эффективном развертывании своих конструкций для требований новой критической системы.

  • Вероятное существующее использование Ada/SPARK субподрядчиками, например, встроенные системы для вспомогательного оборудования, такого как радар, рентгеновские прицелы и т. д., для проекта и обмена данными между основной и подсистемами.

Ада — это SGMLязыков программирования (а Java/C# — это XML). Оба построены на новой базе для комплексного решения. И оба не стали популярными из-за своей сложности и странности. (Меньшинство знает SGML, но все понимают HTML: простота — это сила.) Мы изучили Аду в 91-м, и она нам понравилась, даже если мы пришли из Модулы-3, а не из дрянного Паскаля или С. (Не говоря уже о ассемблере.) Ада выглядела идеально встроенной. в целом и в деталях. Но никто из нас им не пользовался, потому что единственная среда Ады была для IBM 360 (или ее российского клона), а компилятора Ады для ПК не появлялось уже много лет. И он стал «сияющим бриллиантом в стеклянном шкафу», теоретически совершенным, но неприкосновенным. Мы написали код для Sieve of Eratosthenes, но не было ресурсов для его запуска с задачами log(log(10e9)) . (В тот день они считали оперативную память сотнями КБ. ) Тем временем появились хорошие среды C++ (с пригодными для использования библиотеками классов!), и большинство программистов использовали его в качестве основной платформы, пока десять лет спустя не появилась Java. И даже не было хороших инструментов разработки для Java, но были пригодные для использования, и их можно было запускать на дешевых ПК.

Я компилировал ADA на рабочих станциях Sun в 1989 году. К 1991 году было много версий для многих платформ.
Я писал Аду для Motorola 68000/68020 в 1988 году, кросс-компилировал на VAX. Пару лет спустя я писал Ada для DSP TI с плавающей запятой, снова выполняя кросс-компиляцию на VAX. @JCRM абсолютно прав: к 1991 году было много вариантов для многих платформ.
Ада намного проще, чем C++. Даже ранний С++. Мало того, что любое заявление о том, почему оно «не стало популярным», является личным предположением, которое не должно быть представлено как фактическая информация, но и это конкретное утверждение оказывается доказуемо неверным.
Грубо говоря, мой старый зеленый Ada83 LRM содержит около 250 страниц. Этот рабочий проект стандарта ISO C++ составляет 1440 страниц.
AdaCore может сказать, что сегодняшняя Ada становится все более похожей на HTML 5 мира систем с высокой степенью интеграции — ее можно (кросс) компилировать в многочисленные операционные системы (включая iOS и Android), у нее так много блестящих инструментов для исчерпывающей проверки кода. , взаимодействие с системами на других основных языках, API-интерфейсы для графических интерфейсов, обработчики XML и сценариев для проверочных тестовых сред, безопасный веб-сервер и т. д. Единственным недостатком HTML 5 является непривлекательный внешний вид (но не функциональность) его IDE, GPS . . .
К 1985 году Alsys поставляла на рынок полностью проверенный (прошедший официальные тесты) компилятор Ada для IBM PC/AT под DOS. Полный язык, включая параллелизм. Я не уверен, что вы имели в виду под задачами log(log(10e9)) , так как это не слишком много задач, но обычная демонстрация для Alsys Ada заключалась в том, чтобы запустить симуляцию нагрева в трубе посредством релаксации с каждой позицией символа. на экране (80x25) при поддержке задачи Ada рандеву с четырьмя соседями.
@TED ​​неправда, что Ada 83 была менее сложной, чем C + qa, у нее был безопасный тип и проверенный диапазон, помеченные размеченные записи, которые могли иметь массивы переменного размера в качестве полей (более одного, меняющегося отдельно), задачи, которые также могут быть полями в этих записях. , или в массивах - и, конечно же, мощные, оптимизируемые и полностью типобезопасные дженерики с настоящей отдельной компиляцией, которой компиляторы C++ не имеют до сих пор!! И многое другое, включая ножи ginsu! Но да, зеленая книга была короче сегодняшнего стандарта C++!
@davidbak - шаблоны C ++ намного сложнее для реализации, описания и взаимодействия с пользователями, чем дженерики Ады. В основном это происходит из-за решения использовать утиную типизацию (которое, ИМХО, в свою очередь, возникло из-за решения попытаться решить слишком много проблем с помощью этой одной функции). Конечно, они гораздо более мощные (они даже полны по Тьюрингу!), всегда имеет свою цену. В частности, романы об ошибках и код наземной мины, который прекрасно компилируется, пока какой-нибудь бедняга не попытается создать его экземпляр, — это две особые проблемы, которые не случаются с дженериками Ады.
@JCRM: Мы жили не по ту сторону стены, любое оборудование, произведенное не в СССР, было очень далеко от современного. Программное обеспечение тоже. Компилятор Ады был сделан двумя энтузиастами (и, конечно же, талантливыми) университетскими преподавателями.