Язык ada был разработан для написания программ для компьютеров apple
Как известно компьютер воспринимает команды в двоичном коде, но программы на нем писали в основном до середины прошлого века. Намного упрощало создание программ использование языков программирования, именно о них и пойдет речь в данной статье.
Ada(Ада)
Язык Ada был разработан при поддержке Минобороны США в 1978 году в результате конкурса на котором выиграла группа программистов компании Honeywell. Назван по имени первой женщины программистки Ады Лавлейс. Конечная спецификация разработана к 1983 году. Вне военных проектов язык широкого распространения не получил.
Язык возник в результате международного конкурса языковых проектов. Он должен был удовлетворять всем требованиям министерства обороны США. Интересно, что все языки, дошедшие до последних туров этого конкурса, были основаны на Паскале. В этой связи Аду можно предварительно охарактеризовать как развитый Паскаль. Конечная спецификация разработана к 1983 году. Вне военных проектов язык широкого распространения не получил.
Assembler (Ассемблер)
Язык ассемблера люди начали использовать с 1950 года. Этот язык первым позволил отображать двоичный код в более удобной для человека форме: в виде букв или укороченных слов, которые примерно обозначали сущность команды. Умея разбираться в распечатке ассемблера, можно находить ошибки в программах созданных даже при помощи других языков. В данный момент у каждого из нас дома стоят много «интерпретаторов ассемблера» — менюшки в телевизорах, программы стиралок разработаны зачастую именно на нем. (хотя программисты-лентяи пишут программы для микроконтроллеров и на C). Кроме того, на ассемблере написаны драйверы устройств, библиотеки и функции программ, написанных даже на других языках.
Кроме того, на ассемблере создаются целые операционные системы, примером может стать Menuet OS.
Algol (Алгол)
Basic (Бейсик) и VBScript
Включений версии Quick Basic в состав Ms-Dos проложило для него неплохую дорогу развития и сейчас его версии (Visual Basic, VBA…) являются одними из популярнейших сред для написания программ.
Основными проблемами программистов использующих VB является отсутствие нормальной справки (популярная, укороченная версия идет без MSDN) и необходимость «носить» за программой библиотеки, т.к. объекты, используемые в программах (кнопки, скроллы, метки…) требуют библиотек, которые есть не на всех компьютерах.
Именно Basic сделал программирования более доступным для большинства людей.
На бейсике часто пишут…вирусы, вирусы для Microsoft Office. Включение VBA (Visual Basic for Application) в офисный пакет предопределило написание на нем не только макросов, но и вирусняков.
Идея появления языка VBScript заключалась в представлении разработчикам Web- страниц возможности использования привычных команд VB наряду с тегами HTML, что позволило разрабатывать мощные и богатые страницы. VBScript загружается в виде ASCII-текста и не имеет прав работы с файловой системой клиента, таким образов полностью обезопасив пользователя.
Наверное не один язык не получил столько критики, сколько Basic.
Эдсгер Дейкстра, даже заявил что студентов изучивших бейсик, невозможно обучить хорошему программированию. Безусловно это является полнейшим бредом. Т.к. язык по сути является лишь средством, а качество программирования зависит от опыта создания программ и способа мышления.
Язык программирования Си был разработан в 1972 году Деннисом Ритчи, в компании Bell Laboratories. Название происходит от номера проекта лаборатории (“A”,”B”,C”…). Изначально этот язык задумывался как промежуточный между языками высокого и низкого уровней, но продуктивность и компактность кода + преимущества структурного языка, несмотря на сложность обучения сделали Си самым популярным языком.
В 1980 году компания выпускает новый язык построенный на основе С — С++. По словам разработчика, Бьярна Страуструпа он должен «укорить написание хороших программ и сделать этот процесс наиболее приятным для каждого отдельно взятого программиста». Название С++ было придумано вместо начального «C с классами».
В наше время этот язык наиболее популярен и универсален, что доказывает создание именно на ней всемирной ОСи — Windows.
Сейчас Си считается основой для разработки современных больших и сложных проектов. Конечно, как и у всего существующего в природе, у него имеются и слабые стороны, вытекающие из требований эффективности.
Помимо «Окон» на Си написаны такие известные программы как Outlook, Opera, 1C.
Cobol (Кобол)
«Общепринятый язык, ориентированный на бизнес», именно так расшифровывается название кобола (Common Business Oriented Language). Здесь появились способы обработки предвестников современных баз данных используемых на предприятиях и фирмах. Несмотря на свой довольно сложный синтаксис кобол довольно долго использовался в экономике и бизнесе, лишь недавно уступив место таким системам программирования БД как SQL и FoxPro.
Fortran (Фортран)
Фортран — самый первый компилированный язык программирования, базовые принципы и понятия которого легли в основу многих современных языков программирования высокого уровня. Разработанный в 1954-1958 гг Джимом Бекусом, он предназначенный для сложных научно-технических исследований, довольно быстро стал популярным среди инженеров и ученых и до сих пор используется, хотя уже и не в таких широких кругах. Название происходит от словосочетания «ТРАНслятор ФОРмул». Стандарты языка четко определенны, их всего четыре: fortran 66, fortran 77, fortran 90 и fortran 95
Фортран имеет множество математических функций, поддерживает работу с длинными числами. Благодаря использованию четких стандартов фортран иногда используют для переноса программы между платформами.
Фортран имеет достаточно большой набор встроенных математических функций, поддерживет работу с целыми, вещественными и комплексными числами высокой точности. Выразительные средства языка изначально были весьма бедны, поскольку Фортран был одним из первых языков высокого уровня. В дальнейшем в Фортран добавляли многие лексические конструкции, характерные для структурного, функционального и даже объектно-ориентированного программирования, однако они не были в достаточной мере востребованы, поскольку сейчас Фортран нужен в основном для переноса давно написанных программ с одной платформы на другую, а не для написания новых.
Java и JavaScript
Созданная компанией Sun Microsystems система разработки Java безопасна и высокопроизводительна. Java — объектно-ориентированный язык, удобный и надёжный в эксплуатации благодаря таким своим достоинствам, как многозадачность, поддержка протоколов Internet и многоплатформенность. Java — это интерпретируемый язык, и каждая Java-программа компилируется для гипотетической машины, называемой Виртуальная Машина Java. Результатом такой компиляции является байт-код Java, который в свою очередь может выполняться на любой операционной системе при условии наличия там системы времени выполнения Java, которая интерпретирует байт-код в реальный машинный код конкретной системы.
Язык Java является объектно-ориентированным и поставляется с достаточно объемной библиотекой классов. Библиотеки классов Java значительно упрощают разработку приложений, предоставляя в распоряжение программиста мощные средства решения распространенных задач.
На Java написан движок известного эмулятора «Ил-2: Штурмовик».
Для создания компилируемых апплетов компания Netscape разработала язык JavaScript, который был внедрен в всемирно известный браузер компании.Первоначальное название — LiveScript, которое позже изменилоь получив разрешение у компание Sun. Microsoft на создание ответило своим языком JScript, после чего многие создатели браузеров начали выпускать свои спецификации, что сделало задачу написания вездеработающего скрипта довольно сложной.
Pascal (Паскаль) и Delphi
Разработанный Никлаусом Виртом (а не французским математиком Блезом Паскалем, как абсолютно уверены половина людей J) в 1967-1971 годах компилированный язык программирования, изначально стал популярным в основном благодаря относительно простому синтаксису. Выпуск компанией Borland удобного и простого компилятора Turbo Pascal позволил ему занять лидирующие позиции и до сих пор изучаться в школах и институтах, хотя и как основы программирования, а не идеального языка для создания программ. Borland Pascal и используемый в Delphi язык Object Pascal основываются на Turbo Pascal и развивают его идеи. По сути, Delphi является компилятором языка Pascal. Самая первая версия Delphi объединила в себе надежный компилятор, визуальную среду для программиста и очень мощные возможности языка по работе с базами данных, и уже через год вышла Dephi 2 для 32-битной системы.
Из известных программ на Delphi написан “Total Commander” и “The Bat”
Рефал
«Зверский» язык, разработанный в 1966 году в ИМП АН СССР. Рефал широко применялся при разработке трансляторов с алгоритмических языков, в теоретической физике и прикладной математике, в проектировании информационных систем.
Язык программирования Ада родился в середине 1970-х, когда министерство обороны США и министерство обороны Британии решили заменить сотни специализированных языков программирования для встроенных вычислительных систем, всё чаще использовавшихся в военных проектах. Язык Ада разрабатывали так, чтобы это был единственный язык, способный работать на всех этих встроенных системах, и при этом обеспечивавший надёжность и быстродействие уровнем не хуже специализированных.
После обновления от 1995 года язык приспособили для систем общего назначения, добавив объектно-ориентированное программирование, не теряя из вида ключевые ценности – надёжность, простоту поддержки и эффективность. Сегодня написанное на Ада ПО формирует основу не только военного оборудования, но и коммерческих проектов в сфере авионики и систем управления воздушным трафиком. Код на Ада управляет такими ракетами, как Ариан-4 и 5, многими спутниками, и бесчисленным количеством других систем, в которых небольшие сбои могут иметь серьёзные последствия.
Возможно, Ада подойдёт и для использования в вашем следующем встроенном проекте.
Планирование военного качества
Чтобы выбрать новый язык программирования, минобороны собрала «рабочую группу языков высшего порядка» [High Order Language Working Group (HOLWG)], состоявшую из военных и учёных экспертов, в задачи которой входило составление списка запросов и выбор языков-кандидатов. В итоге были составлены т.н. "запросы Стилмана":
Главными пунктами запросов были:
- Гибкая схема работы общего назначения, адаптирующаяся к нуждам встроенных вычислительных приложений.
- Надёжность. Язык должен способствовать проектированию и разработке надёжных программ.
- Лёгкость поддержки. Код должен быть читаемым, а программные решения — ясными.
- Лёгкость производства эффективного кода. Должна быть возможность легко определять неэффективные конструкции.
- Отсутствие ненужной сложности. Семантическая структура должна быть последовательной, и минимизировать количество концепций.
- Независимость от машины. Язык не должен быть привязан к каким-то деталям ОС или оборудования.
- Полное определение. Все части языка должны быть полностью и недвусмысленно определены.
Группа заключила, что хотя среди существовавших на тот момент языков ни один не подходил для нужд минобороны, было вполне реально создать новый язык, подходящий под все указанные вопросы. Четырём проектировщикам получили это сделать. Промежуточный процесс выбора подобрал два наиболее подходящих метода работы, и в итоге лишь один язык победил в конкурсе и получил название "Ада".
Встроенная по умолчанию защита
Система типов в Аде не просто строгая – её иногда называют сверхстрогой, поскольку она не позволяет никакого неявного приведения типов. Возьмём, к примеру, этот отрывок кода на С:
Это допустимый код; он откомпилируется, запустится и выдаст очевидный результат, обозначающий ответ на главный вопрос жизни, вселенной и всего такого. В Аде так не получится:
Компилятор выдаст ошибку, поскольку Integer и MyInt – это не одно и то же. Главное преимущество такого подхода в том, что если программист потом изменит определение типа, тысячи неявных приведений типа по всей базе кода не взорвут программу. Вместо этого нужно явно приводить типы – это пропагандирует хороший код, предотвращая смешение типов, которые «достаточно схожи».
Любой программист, вязнувший в болоте из смеси стандартных определений типов C, Linux и Win32, может оценить по достоинству отсутствие необходимости рыться в бесчисленных страницах документации и плохо отформатированного кода, чтобы понять в каком из typedef или макросе содержится реальное определение чего-то, что только что помешало компиляции или вылезло при отладке.
Ада добавляет дополнительные слои защиты в проверках на этапах компиляции и запуска. В Аде программист должен явно указывать закрывающие операторы для блоков и границы, в которые должно укладываться значение переменной. Ада не определяет стандартные типы вроде int или float, а требует, чтобы программист с самого начала создал типы с определённым диапазоном. Это верно и для строк – за исключением неограниченных строк, у всех строк длина фиксирована.
На этапе работы можно проверить ошибки типа неверного доступа к памяти, переполнения буфера, выхода за установленные пределы, ошибки ±1, доступа к массиву. Затем их можно безопасно обработать, вместо того, чтобы ронять всё приложение.
Ада реализует модель ссылочных типов вместо низкоуровневых указателей. Каждый ссылочный тип обрабатывается пулом памяти, либо заданным по умолчанию, либо определённым программистом при необходимости работы с более экзотическими реализациями памяти типа NUMA. Программисту никогда не приходится обращаться к памяти напрямую, он должен использовать обработчик пула памяти.
Наконец, компилятор или программа во время исполнения решает, как передавать данные в функцию или из неё. И хотя направление передачи каждого параметра указывать нужно (‘in‘, ‘out‘, или ‘in out‘), но итоговое решение о том, передаются ли данные через регистры, кучу или по ссылке, принимает компилятор или программа во время выполнения, но не программист. Это предотвращает проблемы с переполнением стека.
Ravenscar profile и диалект SPARK являются подмножествами Ады, причём последний концентрируется на контрактах. Со временем особенности этих подмножеств перенесли в спецификацию основного языка.
Программирование на языке Ада сегодня
ANSI установила спецификацию Ada 83 в 1983. Тогда только-только вышел Intel 80286, а процессору Motorola 68000 было всего четыре года. Это была заря домашних компьютеров, а также неуклюжий переход из 1970-х в 80-е, когда популярность микроконтроллеров начала расти. Представьте себе микроконтроллер Intel 8051 и его потрясающие 4 кБ EPROM и 128 Б оперативной памяти.
Популярные сегодня микроконтроллеры во много раз более мощные по сравнению с теми, что были в 1983. Можно взять любой ARM, AVR, RISC-V, и т.п. (или Lego Mindstorms NXT kit) и начать под него разработку при помощи одинаковых инструментальных средств на базе С. Неудивительно, что популярный компилятор GNAT Ada основан на GCC. Также в разработке в рамках проекта DragonEgg находятся инструментальные средства на базе LLVM.
Существуют две версии инструментальных средств Ады на основе GCC. Вариант AdaCore поддерживается коммерчески, однако имеет свои особенности. Вариант от Free Software Foundation, естественно, свободен, и по функциональности сравним с AdaCore.
Для лёгкого старта используйте либо GNAT Programming Studio IDE (GPS), идущее в комплекте с AdaCore (копия на Github), или пишите код в текстовом редакторе и компилируйте его вручную, или при помощи Makefiles. Инструментарий тут немного посложнее, чем у С или С++, однако разработку облегчает утилита gnatmake, включающая в себя все инструменты, и работающая примерно как GCC.
Пример небольшого, но нетривиального проекта на Аде, написанного вашей покорной слугой в виде парсера аргументов командной строки. Там вы найдёте Makefile, находящийся в папке проекта ada/, где определяются папки, в которых можно найти файлы спецификации пакетов (.ads) и сами пакеты (.adb).
Эти файлы примерно соответствуют файлам с заголовками и кодом от С и С++, однако имеют и важные отличия. В отличие от С, у Ады нет препроцессора, и она не объединяет код и заголовки для создания компилируемых файлов. Вместо этого идёт ссылка на название пакета, указанное в спецификации. Название файла .ads тоже не обязано совпадать с названием пакета. Это даёт большую гибкость и предотвращает распространённые в С проблемы с циклической зависимостью или необходимостью линковки заголовков в определённом порядке.
Куда двигаться далее
Скачав инструментарий GNAT, запустив GPS или Vim/Emacs, и некоторое время посмотрев на мигающий курсор на пустой странице, вы можете задуматься над тем, с чего начать. К счастью, мы недавно освещали проект на основе Ады с использованием ядра PicoRV32 RISC-V. Он использует распространённый ICE40LP8K CPLD, который поддерживают инструментарии FPGA с открытым кодом, например, Yosys.
В плане документации есть вводные статьи для начинающих, рассчитанные на разработчиков Java и С++, справочник по AdaCore, справочник на WikiBooks, и, конечно же, документация Programming in Ada 2012. Это, возможно, наиболее полные справочники, за исключением документации Ada 2012 Language Reference Manual (LRM) на 945 страниц.
Язык Ада, пусть и довольно редкий для любителей программирования, является полностью открытым языком с надёжными средствами разработки с коммерческой поддержкой, и используется для создания ПО для всего, от межконтинентальных баллистических ракет и F-15 до прошивок медицинских устройств. Хотя это довольно сложный язык, если выходить за базовые пределы, он должен определённо входить в список языков, которые вы когда-либо использовали в своих проектах – пусть даже и для того, чтобы ваше резюме выглядело покруче.
Ада получил свое название в честь той самой Ады Лавлейс, великого математика и первого в мире программиста (кстати, она единственный законнорожденный ребёнок знаменитого английского поэта Джорджа Гордона Байрона и его жены Анны Изабеллы Байрон). Этот язык был создан в конце семидесятых годов для бортовых систем военных объектов Пентагона.
Тем удивительней, что в 1989 году в СССР материализовался ГОСТ (он же государственный стандарт) по работе с данным языком программирования. Если покопаться в документе, то там можно найти массу интересных вещей. Вообще хочется снять шляпу перед предшественниками, сделавшими эту по-настоящему впечатляющую работу. Честно говоря, в 80-е в СССР, как ни странно, вообще с книгами по программированию судя по всему было неплохо. Вот тут краткая Ада-библиография.
Эксперты сходятся во мнении, что настоящих служителей Ада на постсоветском пространстве не так уж и много. Это и понятно. Все-таки, в основном данный язык применяется для программной разработки в авионике, атомной энергетике и в других промышленных отраслях, к которым на Java, ну никак, не подъедешь.
Стоит отметить, что язык изначально разрабатывался для встраиваемых систем. Отсюда — неразвитость Ады по части GUI и СУБД. А раз с этим у неё туго, то и шансов развиться не было. Зачем она массовому разработчику, ведь ~99% пользовательских приложений нуждаются в GUI и СУБД.
Синтаксис
У Ada – простой, понятный, легко читаемый синтаксис, который существенно снижает риск ситуаций, когда случайная опечатка приводит к тому, что код не становится формально неправильным, но существенно меняется его семантика.
Изначально, Ада — модульный язык программирования со строгой типизацией, унаследовавший синтаксис от Паскаль и Алгол. Если вы учили первый в школе или институте, то глядя на «Hello, World!» должны испытать ностальгию:
Одним из главных требований к языку была надёжность его использования. Соответственно, это повлекло за собой строгие ограничения по структуре, типам, написанию и многому другому. Кроме того, почти все ошибки здесь улавливаются на этапе компиляции. Другим требованием была максимальная читаемость кода в распечатанном виде, что повлекло за собой тяжеловесность полученного языка и невысокую гибкость.
Более поздние стандарты частично решали эти проблемы, но по понятным причинам, они не сделали из Ада второй Python. (с)
Где больше Ада?
Покопавшись в «этих-ваших» интернетах оказалось, что Boeing, Airbus и даже российские Ил-96 и Бе-200 летают благодаря программным разработкам из Ада. Вся авиация плотно сидит там же. ПО для атомных станций и даже банковская система, включая сети банкоматов от Ада тоже не далеко ушли. Аналогичное можно сказать про автопром.
Если вас заинтересовал данный язык и вы вдруг решили узнать, где сегодня в мире грызут гранит Ада, заходите по ссылке. Но, если вы спец по С++, то в Parallels для вас есть местечко. Велкам!
Язык Ада более-менее всегда был на слуху. На школьной скамье мы посмеивались над его названием, в университетской программе он сухо упоминался в качестве языка, разработанным по требованию Министерства Обороны США, но непосредственно до изучения синтаксиса или применения дошли лишь редкие программисты. Отсюда сложилось ошибочное мнение, что язык Ада функционирует лишь на прошловековом оборудовании, и потребность в нем пропадет вместе с естественной модернизацией.
И это очень далеко от правды.
Появление
В 70-х годах 20 века, в разгар холодной войны, Министерство Обороны США устроило международный конкурс, по результатам которого необходимо было выбрать язык программирования для использования в военных целях. Однако ни один из существующих языков не устроил членов комиссии, поэтому путём долгого выбора и нескольких доработок на свет появился язык Ада, названный так в честь Ады Лавлейс. Далее началась многолетняя волокита со стандартизацией, регистрация торговой марки, запреты на кастомные трансляторы и прочие действия, отбившие желание массовой аудитории работать с Ада.
На выходе же получился достаточно нишевый язык, предназначенный для сложных вычислительных систем с повышенными требованиями по безопасности. Опять-таки из-за требований Пентагона и строгих стандартов взаимодействие с другими языками программирования крайне затруднено, поэтому до недавнего времени перейти на массовый рынок у Ада практически не было шансов. Но с удешевлением техники и усложнением используемых технологий такой шанс появляется.
Синтаксис
Изначально, Ада — модульный язык программирования со строгой типизацией, унаследовавший синтаксис от Паскаль и Алгол. Если вы учили первый в школе или институте, то глядя на «Hello, World!» должны испытать ностальгию:
procedure Hello is
use Ada.Text_IO;
begin
Put_Line("Hello, world!");
end Hello;
Одним из главных требований к языку была надёжность его использования. Соответственно, это повлекло за собой строгие ограничения по структуре, типам, написанию и многому другому. Кроме того, почти все ошибки здесь улавливаются на этапе компиляции.
Другим требованием была максимальная читаемость кода в распечатанном виде, что повлекло за собой тяжеловесность полученного языка и невысокую гибкость.
Более поздние стандарты частично решали эти проблемы, но по понятным причинам, они не сделали из Ада второй Python.
Ада сегодня
Вопреки мнению широкой аудитории, язык Ада до сих пор активно используется, не только в США и не только в военной индустрии. Так, например, часть ПО самолёта-амфибии Бериев Бе-200 написана как раз на Ада. Поезда метрополитена без машиниста, которые курсируют во многих крупных городах (Париже, Лондоне, Нью-Йорке и др.), также используют оборудование с американским военным языком.
И да, конечно, среди «клиентов» была военная и гражданская авиация (в частности, Боинг-777), ракеты, шаттлы, спутники — в общем, практически весь перечень бесконечно дорогой американской продукции, предполагающей высшую степень безопасности.
Перспективы
Язык Ада критиковался и в момент появления, и когда стало понятно, что грандиозные планы Пентагона не вполне стыкуются с реальностью, и тем более сейчас. Причиной тому является неудобный язык, сложность стандартов, написанных в 1983 и 1995 году, а также недальновидность разработчиков, лишивших язык Ада массовой аудитории.
Впрочем, почти 40 лет активного использования подтверждают, что пожалуй со своей главной задачей язык Ада справился — с его помощью всё ещё можно создавать надёжный код для систем с повышенными требованиями к безопасности. При этом, если вы посмотрите на современные тенденции, количество таких изделий неуклонно растёт: автомобили с автопилотом и гибридными двигателями, частные космические аппараты и малые летательные средства, скоростные поезда, а также огромное количество встраиваемых систем. Всё это потенциальное поле для деятельности языка Ада. Добавьте сюда тот факт, что стандарт был серьёзно переработан и модернизирован в 2012 году, инструменты для работы тоже выходят и обновляются.
Таким образом, язык Ада — это и фрагмент из не самого приятного прошлого, и один из инструментов для строительства яркого будущего. И он точно не собирается на пенсию.
Язык, разработанный по заказу Министерства обороны США и названный в честь первой в мире программистки Ады Лавлейс, окружают много мифов и непонимания. Ты наверняка о нем слышал, но, скорее всего, это были мифы об устаревшем, сложном и медленном языке. Однако ада активно используется для управления самолетами, поездами, космическими аппаратами и прочими интересными штуками. Давай посмотрим на язык без призмы мифов и разберемся, какую пользу мы можем из него извлечь, даже если пока не собираемся в космос.
Несмотря на свое американское происхождение, в разгар холодной войны ада использовалась и в СССР. На нее даже существует ГОСТ, который стоит почитать ради одной только терминологии: например, исключения там «возбуждаются».
Мифы об аде
Миф об устаревшем языке опровергается одним запросом к поисковику: последняя редакция вышла в 2012 году. Если судить о сложности языка по внешним признакам, то все тоже не так страшно: спецификация ады содержит чуть менее тысячи страниц, тогда как спецификация C++ — около 1400 страниц.
Миф о низкой производительности пошел со времен первой редакции 1983 года, когда массовому пользователю были доступны разве что ZX Spectrum и IBM PC с i8086, на которых любой современный язык был бы медленным. Ада компилируется в машинный код, и любители успешно пишут на ней для Arduino с ATmega328 и прочих микроконтроллеров.
Распространенный миф о том, что по вине ады упала ракета Ariane 5 в 1996 году, нужно рассмотреть отдельно. Ракета действительно упала из-за ошибки, но проблема была в другом: компьютер, который управлял траекторией полета, был взят из Ariane 4 без изменений, несмотря на то что Ariane 5 поддерживала более широкий диапазон траекторий. Хуже того, проверка на выход значений за возможный диапазон была намеренно отключена, поэтому, когда навигационный компьютер выдал недопустимую с точки зрения Ariane 4 команду, закончилось все предсказуемо. От этой проблемы, увы, не смог бы защитить ни один язык или какое-либо программное решение вообще. Сама Ariane 4 совершила 113 успешных полетов из 116 за свою историю, а Ariane 5 уже 96 успешных из 101.
Языки и надежность программ
Ракеты — это предельный случай требований к надежности программ, но и в куда более приземленном коде ошибки могут обойтись пользователям очень дорого. В уязвимостях вроде Heartbleed можно винить разработчиков, но разве смысл компьютеров не в том, чтобы автоматизировать нудную работу и позволить людям сосредоточиться на творческих задачах?
Ада разрабатывалась именно для написания надежных и безопасных программ. Когда говорят о безопасности, прежде всего думают, какие ограничения язык или другой инструмент накладывает на пользователя. На мой взгляд, в первую очередь нужно говорить о том, какие выразительные средства инструмент дает разработчику, чтобы точно отразить объекты реального мира в коде и определить законы их взаимодействия. Наблюдение за выполнением этих законов лучше поручить компилятору — он не устает к концу рабочего дня.
В первую очередь, конечно, инструмент не должен делать работу человека сложнее, чем она и так есть. Когда Министерство обороны США разрабатывало требования к новому языку для конкурса, в котором победила ада, они в первую очередь упомянули об этом. Документ с требованиями известен как Steelman и содержит, например, такую фразу: «Одни и те же символы и ключевые слова не должны иметь разные значения в разном контексте». Почти вся первая часть рассказывает о необходимости однозначности синтаксиса, удобочитаемости кода, определенности семантики и поведения (вспомним i++ + ++i ).
Но и требования к выразительным средствам для своего времени там передовые. Любопытно, что обработка исключений и средства обобщенного программирования были еще в первой редакции, задолго до С++.
Давай напишем первую несложную программу, а потом рассмотрим, какие средства ада предоставляет, чтобы точнее выразить в коде свои намерения.
Реализации
Далеко идти за реализацией не придется: компилятор ады включен в GCC под названием GNAT (GNU New [York University] Ada Translator) и доступен на всех системах, где есть GCC.
Если у тебя Linux или FreeBSD, можешь ставить из стандартных репозиториев. В Debian/Ubuntu пиши apt-get install gnat , в Fedora — dnf install gnat .
Компания AdaCore предоставляет коммерческую поддержку для GNAT и занимается другими связанными проектами. Например, там работают над графической средой разработки GNAT Programming Studio (GPS). AdaCore является, по сути, основным разработчиком GNAT и распространяет две версии компилятора: сертифицированный GNAT Pro за деньги и GNAT Libre бесплатно, но с рантайм-библиотекой под лицензией GPLv3.
Использование GPLv3 не позволяет разрабатывать программы с любыми лицензиями, кроме GPL. Однако в дистрибутивы свободных ОС включена версия FSF GNAT, лицензия которой делает исключение для библиотек. Так что ее можно использовать для разработки программ с любой лицензией.
Есть еще проприетарные реализации ады вроде Irvine и Green Hills, но для пользователей вне аэрокосмической отрасли и ВПК они малодоступны и особого интереса не представляют.
Первая программа
Традиционный Hello world дает очень мало представления о языке, поэтому для первой программы мы возьмем что-нибудь более реалистичное, например алгоритм Пардо — Кнута. Дональд Кнут и Луис Трабб Пардо предложили его как раз для этой цели.
С помощью такой программы уже можно показать, как определить и заполнить массив, как написать и вызвать функцию, как использовать циклы и условия и как использовать ввод-вывод. Опять же, если Hello world у любого программиста выглядит почти одинаково, то тут уже есть возможность применить разные способы и показать разные возможности языка.
Мы немного усложним задачу и будем заодно проверять правильность ввода значения и запрашивать их заново, если ввод был некорректным. Вернее, на уровне системы типов ограничим диапазон допустимых значений и обработаем возникшие исключения.
Вот наша программа. Ее нужно будет сохранить в файл с названием pardo_knuth.adb . Несовпадение имени файла с именем основной процедуры, которая служит точкой входа, вызовет предупреждение компилятора.
Продолжение доступно только участникам
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Читайте также: