История языков программирования

О детстве, отрочестве и немного о личном

10 декабря 1815 года в Лондоне, в семье известного английского поэта Джорджа Гордона Байрона и Анны Изабеллы, баронессы Уэнворт, родилась девочка. Надо сказать, что лорд Байрон очень ждал «славного мальчика» и был весьма разочарован, когда ему сообщили о рождении дочери. При рождении девочке дали имя Августа, в честь сестры Байрона, однако, позже, когда её родители разойдутся, девочку будут называть Адой.

Родители Ады разошлись, когда ей было всего-то пять недель. Ада должна была остаться с отцом — по правилам того времени в случае развода мужчина получал полную опеку над своими детьми, но в случае с семейством Байронов всё сложилось иначе. Лорд Байрон не особо рвался оставить дочь у себя, и когда жена увезла девочку к своим родителям в Киркби Мэллори, не предпринял никаких попыток отстоять свои родительские права. По итогу, отношения Ады с отцом так и не сложились, а может и не успели сложиться — поэт умер в 1824 году, когда Аде было всего восемь лет. Не получилось у нее и близких отношений с матерью. Леди Байрон часто оставляла дочь на попечении своей бабушки, миссис Джудит Хон. Информация в источниках сильно разнится, одни говорят, что несмотря ни на что, мать всё же была у Ады на первом месте, и что леди Байрон принимала участие в воспитании своей дочери; другие говорят, что их встречи была весьма редкими. Но факт, миссис Байрон пригласила для своей дочери хороших учителей:

  • Шотландский математик Огастес де Морган. Очень отличился в своих работах по математической логике и теории рядов, а также дал первую развитую систему алгебры отношений;
  • Мэри Сомервилль. Специалист в области астрономии и математики, шотландский популяризатор науки;
  • Пьер-Симон Лаплас. Математик, физик, механик и астроном — один из создателей теории вероятностей.

Чем старше становилась Ада, тем теснее становилась её дружба с Мэри Сомервилль. Именно она в 1833 году познакомила Аду Лавлейс с Чарльзом Бэббиджем — английским математиком, который изобрёл первую аналитическую вычислительную машину. Среди других знакомых Ады были писатель Чарльз Диккенс, учёный-любитель Эндрю Кросс, шотландский физик Дейвид Брюстер, физик Чарльз Уитстон. В возрасте семнадцати лет Ада Лавлейс была представлена при дворе и получила титул «popular bell of the season» (красавица сезона). Отчасти это звание было дано из-за блестящего ума Ады. К 1843 году девушка стала завсегдатаем королевских мероприятий.

Особенности языка

В исходном варианте, стандартизованном в 1983 году, Ада — это структурный, модульный язык программирования, содержащий высокоуровневые средства программирования параллельных процессов. Синтаксис Ады унаследован от языков типа Algol или Паскаль, но расширен, а также сделан более строгим и логичным. Ада — язык со строгой типизацией, в нём исключена работа с объектами, не имеющими типов, а автоматические преобразования типов сведены к абсолютному минимуму. В стандарте 1995 года в язык были добавлены базовые средства объектно-ориентированного программирования, в стандарте 2007 эти средства были дополнены, поэтому современная Ада — объектно-ориентированный язык программирования.

Из особенностей синтаксиса можно отметить:

Здесь для применения функции Put_Line содержащий её пакет Ada.Text_IO импортируется с помощью конструкции use, что даёт возможность вызывать функцию по имени без квалификации — указания в вызове имени пакета, содержащего функцию.

Fortran — первый язык с компилятором

В 1957 году в компании IBM группа программистов, возглавляемая Джоном Бэкусом, представила первый работающий высокоуровневый язык Fortran. В его основе лежит принцип анализа всей строки.

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

Сегодня Фортрану 61 год, но он до сих пор востребован и популярен в Data Science. За это время вышло множество версий, язык эволюционировал и обрел четкие стандарты. Благодаря огромному наследию кода он используется для различных вычислений в научных разработках, геологических изысканиях и астрофизике.

Если вам интересна история, взгляните на потрясающую схему развития языков программирования, начиная с Фортрана.

Как видите, однозначного ответа на вопрос, какой язык программирования придумали первым, не существует. Первую абстрактную программу написала Ада Лавлейс, первым высокоуровневым языком был Plankalkül, но эру высоких информационных технологий начал Fortran. Все они первые в личном зачете, и каждый важен для того или иного этапа развития информационных систем.

Модули и обобщенное программирование

Обобщенное программирование

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

with Ada.Text_IO;useAda.Text_IO;

procedure Simple_Generic is

generic

typeTisprivate;

functionDo_Nothing(XT)returnT;

functionDo_Nothing(XT)returnTis

begin

returnX;

endDo_Nothing;

functionDo_Nothing_To_Integer isnewDo_Nothing(Integer);

begin

Put_Line(Integer’Image(Do_Nothing_To_Integer(65535)));

endSimple_Generic;

Как видно, обобщенные конструкции создаются с помощью ключевой конструкции
generic, у которой есть раздел объявлений типов. Тип
T в данном случае — это тип-параметр, для которого наша процедура может быть специализирована. Затем мы описываем нашу функцию с использованием типа
T. В
functionDo_Nothing_To_Integer isnewDo_Nothing(Integer) она специализируется для типа
Integer. Мы уже видели это ранее, когда подключали обобщенные пакеты из стандартной библиотеки.

Ключевое слово
new, в отличие от многих других языков, здесь не имеет никакого отношения к объектам — объектов в традиционном понимании в аде нет, хотя инкапсуляция, наследование и полиморфизм есть, просто они в значительной степени отделены друг от друга и реализуются другими способами.

Модули

Модули, или пакеты, — встроенная и очень важная часть языка. Модули разделены на интерфейс и реализацию на уровне языка. Интерфейсы модулей хранятся в файлах с расширением
.ads, а реализации — в файлах с расширением
.adb.

Для демонстрации мы напишем модуль для работы с условной базой данных пользователей. У каждой учетной записи будут идентификатор, имя пользователя (строка до 255 символов) и флаг блокировки. Мы сделаем модуль обобщенным, чтобы в качестве идентификатора можно было использовать значения разных типов.

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

Рассмотрим интерфейс нашего модуля, файл
accounts.ads.

1
2
3
4
5
6
7
8
9
10
11
12
13

generic

type Identifier_T isprivate;

packageAccounts is

type User_Record isprivate;

functionCreate(IdentifierIdentifier_T;NameString)returnUser_Record;

procedure Disable(Userinout User_Record);

private

type User_Record isrecord

IdentifierIdentifier_T;

NameString(1..255);

DisabledBoolean;

endrecord;

endAccounts;

С помощью слова
generic мы делаем его обобщенным, с типом-параметром
Identifier_T. После слов
packageAccounts is идут описания публичных полей модуля, которые будут доступны при его импорте, а после ключевого слова
private — описания закрытых полей.

Можно заметить, что тип
User_Record описан дважды: первый раз в публичной части модуля как
type User_Record isprivate и второй раз в его закрытой части как настоящий тип-запись. И вот почему: первое описание говорит, что тип
User_Record — абстрактный и за пределами модуля будет известно только его имя, но не детали реализации. Это сделает невозможным прямой доступ к полям нашей записи для любых функций, которые не принадлежат модулю.

Более того, даже если мы знаем, как на самом деле устроен тип, создать значения типа
Accounts.User_Record можно будет только с помощью функции
Accounts.Create. Любые другие значения будут несовместимы с остальными функциями из него. Так реализуется инкапсуляция. Если бы мы включили описание типа в секцию
private, но не включили
type User_Record isprivate в публичную часть, этот тип был бы вовсе не виден за пределами модуля и воспользоваться им было бы невозможно.

Реализацию мы сделаем тривиальной, вот файл
accounts.adb:

1
2
3
4
5
6
7
8
9
10
11
12
13

packagebody Accounts is

functionCreate(IdentifierIdentifier_T;NameString)returnUser_Record is

begin

return(Identifier,Name,False);

endCreate;

procedure Disable(Userinout User_Record)is

begin

User.Disabled=True;

end;

endAccounts;

В завершение приведем простейшую программу с использованием нашего модуля, файл
user_test.adb. Для сборки проекта достаточно положить все три файла в один каталог и выполнить команду
gnatmake user_test.adb.

1
2
3
4
5
6
7
8
9

with Accounts;

procedure User_Test is

packageMy_Accounts isnewAccounts(Integer);

UserMy_Accounts.User_Record;

begin

User=My_Accounts.Create(,»root»);

endUser_Test;

Первый высокоуровневый язык Планкалкюль

Часто можно услышать, что первым языком высокого уровня был Fortran (1957). Но еще в разгар Второй мировой войны немецкий ученый Конрад Цузе создал Plankalkül — первый высокоуровневый язык. Он написал на нём 49 листов программ для оценки шахматных позиций и документацию в отдельной брошюре. Работы Цузе увидели свет только после войны, в 1972 году.

Планкалкюль — электромеханический язык, так как разрабатывался для компьютера Z4. Автор не создал для него аппаратной реализации. Первый компилятор для Планкалкюля написали в Германии в 2000 году: он называется Plankalkül-2000. Его разработали в Свободном университете Берлина спустя пять лет после смерти Цузе. Это интерпретатор диалекта Планкалкюля — он чуть проще самой первой версии языка. Если вам захочется почувствовать дух истории, на нем даже можно написать простенькую программку.


Конрад Цузе за работой

Plankalkül не нашел практического применения, но вполне соответствует современным стандартам высокоуровневых языков. В нем есть четыре вида переменных, массивы, циклы, кортежи, подпрограммы и условные конструкции. С помощью языка можно выполнять простые арифметические операции и сортировку чисел.

Языки и надежность программ

Ракеты — это предельный случай требований к надежности программ, но и в куда более приземленном коде ошибки могут обойтись пользователям очень дорого. В уязвимостях вроде Heartbleed можно винить разработчиков, но разве смысл компьютеров не в том, чтобы автоматизировать нудную работу и позволить людям сосредоточиться на творческих задачах?

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

В первую очередь, конечно, инструмент не должен делать работу человека сложнее, чем она и так есть. Когда Министерство обороны США разрабатывало требования к новому языку для конкурса, в котором победила ада, они в первую очередь упомянули об этом. Документ с требованиями известен как Steelman и содержит, например, такую фразу: «Одни и те же символы и ключевые слова не должны иметь разные значения в разном контексте». Почти вся первая часть рассказывает о необходимости однозначности синтаксиса, удобочитаемости кода, определенности семантики и поведения (вспомним
i+++++i).

Но и требования к выразительным средствам для своего времени там передовые. Любопытно, что обработка исключений и средства обобщенного программирования были еще в первой редакции, задолго до С++.

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

Машинный код и языки ассемблера

Масштаб работы Бэббиджа и Лавлейс оценили только в ХХ веке, когда научно-технический прогресс шагнул вперед и математики нового поколения увидели, что все это уже было до них.

В 1940-х годах инженеры начали конструировать первые электронно-вычислительные машины — громоздкие, неудобные и с перфокартами. Вот такие:


Компьютер 1940–1950-х годов.

Для передачи команд использовали цепочки нулей и единиц — машинный код. Мягко говоря, не самый удобный вариант для программистов: приходилось «разговаривать» с компьютером на его языке, хорошо знать составляющие ЭВМ. А еще легко было допустить ошибку при записи кода.

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

Первый программист Ада Лавлейс

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


Когда вы произносите «loop», то отдаете дань памяти Аде Лавлейс. Она ввела в оборот этот термин наряду с «cell». Источник

Аду Лавлейс часто упоминают вместе с Чарльзом Бэббиджем. Он изобрел первый прототип современного компьютера — логарифмическую машину. Но реализовать ее не удалось: проект разрастался на бумаге, а финансирование от английской короны заканчивалось. Ада познакомилась с ученым при дворе, и с этой встречи началось ее глубокое увлечение его работами.

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

Она не только перевела принцип работы, но и сопроводила его обширным комментарием. В нем она описала алгоритм для вычисления последовательности Бернулли с помощью машины. Кстати, его используют до сих пор, поэтому программа опередила себя на несколько десятков лет. Аду Лавлейс по праву считают первым программистом в истории человечества. В 1980 году в США новый язык назвали в ее честь.

В то же время Ада занялась переводом статьи на английский язык, параллельно переписываясь с Бэббиджем. Она не только перевела принцип работы, но и сопроводила его обширным комментарием. В нем она описала алгоритм для вычисления последовательности Бернулли с помощью машины. Кстати, его используют до сих пор, поэтому программа опередила себя на несколько десятков лет. Аду Лавлейс по праву считают первым программистом в истории человечества. В 1980 году в США новый язык назвали в ее честь.

Последние заданные вопросы в категории Информатика

Информатика 22.10.2023 05:12 10 Мукомолов Тимофей

Сделать скретч 2 проект для 6 класса небольшой

Ответов: 1

Информатика 22.10.2023 05:12 2 Пономаренко Макс

Укажіть мову розмітки гіпертексту. a. HTTP b. CSS c. HTML d. WWW

Ответов: 1

Информатика 22.10.2023 05:11 7 Гайниева Жасика

ПРОЕКТ НА ТЕМУ ПИШАЄМОСЯ ЩО УКРАЇНСЬКІ МЕТА: ДОСЛІДИТИ ІСТОРІЮ РОЗВИТКУ КОМПЮТЕРНОЇ ТЕХНІКИ В уКРА

Ответов: 1

Информатика 22.10.2023 05:09 13 Кибанов Денис

Нужно сейчас, помогите пожалуйста!!

Ответов: 1

Информатика 22.10.2023 05:08 7 Свиридов Александр

Найдите ошибку исправьте ее и напишите как правильно кодом import random answer = «yes» while answ

Ответов: 1

Информатика 22.10.2023 05:07 3 Сычев Иван

На основе заготовленного кода напишите функцию print_friends_count() для вывода количества друзей. П

Ответов: 1

Информатика 22.10.2023 05:07 21 Максимов Денис

JAVASCRIPT Реалізуй функцію combineArrays, яка приймає 2 масиви чисел однакового розміру (first та

Ответов: 1

Информатика 22.10.2023 04:58 16 Кочеткова Катя

ДАЮ 50 БАЛІВ Відновити послідовність команд у програмі побудови квітки, що складається із шестикутни

Ответов: 1

Информатика 22.10.2023 04:50 10 Харин Егор

СРОЧНО!!!! Допоможіть скласти задачу в пайтоні!!!! ДАЮ 70 БАЛІВ!!!!!! Людина задумала число х. Якщ

Ответов: 1

Информатика 22.10.2023 04:49 3 Дроздюк Анастасия

Допоможіть будь ласка потрібно зробити на пайтон до п’ятниці 7 клас

Ответов: 1

Распространение, перспективы

На практике оказалось, что Ада, заняв предназначенную ей нишу в военных и родственных им разработках встроенных систем, за пределы данной ниши так и не вышла ни на Западе, ни в СССР, ни на постсоветском пространстве. Причин этому называется много. Противники языка упирают на его сложность и недостатки, сторонники говорят, прежде всего, об объективных обстоятельствах появления языка и негативных сторонах процесса его внедрения. Интересно мнение С. И. Рыбина, старшего научного сотрудника НИВЦ МГУ, консультанта компании AdaCore EU, эксперта по языку Ада рабочей группы ISO по стандарту языка. Он считает , что своими неудачами Ада обязана двум основным причинам:

Тем не менее, по некоторым осторожным прогнозам, с удешевлением аппаратуры и распространением встроенных систем со сложным ПО рынок для программ на Аде может заметно вырасти:

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

Кроме того, Ада имеет, пусть и весьма ограниченное, применение в сфере высшего образования. В МГУ и Харьковском университете читаются спецкурсы по Аде. Однако, по словам того же С. И. Рыбина ,

Критика

С момента появления Ада подверглась критике некоторых признанных авторитетов в области разработки языков программирования, в первую очередь — за сложность синтаксиса и большой объём. В частности, язык критиковали Чарльз Хоар и Никлаус Вирт (участвовавшие со своим проектом в данном конкурсе, но выбывшие после первого этапа), а также Эдсгер Дейкстра.

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

Если Ada собирается выдать стандарт, желательно, чтобы он был недвусмысленно документирован. По меньшей мере две группы попытались сделать это; в результате обе выдали около 600 страниц формального текста. Это гораздо больше, чем необходимо, чтобы удостовериться в невозможности хотя бы твердо установить, что оба документа определяют один и тот же язык. Ошибка очевидной неуправляемости этих двух документов кроется не в двух группах, составивших их, не в принятом ими формализме, а лишь в самом языке: сами не обеспечив формального определения, могут ли его разработчики скрыть, что они предлагают неуправляемого монстра. То, что Ada уменьшит проблемы программирования и увеличит надёжность наших разработок до приемлемых границ, — это лишь одна из тех сказок, в которые могут поверить только люди с военным образованием.

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

Сторонники Ады утверждают, что единственная альтернатива большому и сложному языку в больших проектах — это применение нескольких компактных языков, неизбежно порождающее проблемы с совместимостью, для избавления от которых и была придумана Ада. Они замечают также, что представление о сложности разработки на Аде верно лишь отчасти: написание простой программы на Аде действительно требует больше времени, чем на других, менее формальных языках, типа Си, но отладка и сопровождение программ, особенно крупных и сложных, значительно упрощается. По утверждению Стефена Цейгера из Rational Software Corporation , разработка программного обеспечения на Аде в целом обходится на 60 % дешевле, а разработанная программа имеет в 9 раз меньше дефектов, чем при использовании языка Си.

Реализации Ады

Далеко идти за реализацией не придется: компилятор ады включен в GCC под названием GNAT (GNU New 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.

Есть еще проприетарные реализации ады вроде Irvine и Green Hills, но для пользователей вне аэрокосмической отрасли и ВПК они малодоступны и особого интереса не представляют.

История

После завершения формирования требований был проведён анализ, который показал, что ни один из имеющихся языков программирования не удовлетворяет требованиям в достаточной мере, так что было принято решение разработать новый язык. Конкурс на его создание был объявлен в 1977 году, разработчикам было предложено базироваться на одном из трёх языков: Паскаль, Алгол-68 или PL/1.

В 1987 году язык Ада был официально стандартизован ISO. С этого момента МО США предоставило язык в публичное распоряжение.

К 1990 году в мире существовало уже около 200 компиляторов, соответствовавших стандарту языка Ада.

В 1995 году был принят новый стандарт Ады, известный как Ada95. В язык были введены средства объектного программирования. Кроме того, язык был дополнен более развитыми средствами для взаимодействия с программами, написанными на других языках.

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

Топ вопросов за вчера в категории Информатика

Информатика 25.09.2023 02:01 483 Рубчинская Аполлинария

Сдать решение задачи B-Сумма двух чисел в одной строке Ограничение времени: 1 с Ограничение памяти

Ответов: 2

Информатика 02.07.2023 08:05 398 Максютова Элина

Ограничение времени: 1c Ограничение памяти: 64mb Ввод: finance.in Вывод: finance.out В этом году в

Ответов: 2

Информатика 19.06.2023 18:08 393 Третьяков Денис

Эта задача с открытыми тестами. Ее решением является набор ответов, а не программа на языке программ

Ответов: 1

Информатика 03.07.2023 09:08 83 Смышляев Егор

Прошу дать верный ответ Сдать решение задачи 5-Автобусные остановки Полный балл: 100 Ограничение в

Ответов: 2

Информатика 17.07.2023 21:44 186 Горелов Роман

A. Быстрый старт Ограничение времени 1 секунда Ограничение памяти 64Mb Ввод стандартный ввод или inp

Ответов: 2

Информатика 01.07.2023 02:20 136 Мирный Булат

Выполните побитовый XOR двух чисел: 48 и 156. Ответ запишите в десятичном представлении. Помогите

Ответов: 2

Информатика 18.06.2023 00:36 873 Тимчук Маша

Петя собирает для туристического кружка световое табло. Сколько лампочек ему нужно разместить на таб

Ответов: 1

Информатика 28.09.2023 22:06 116 Галушкин Даниель

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

Ответов: 1

Информатика 03.07.2023 02:42 118 Кадуцкий Никита

100 БАЛЛОВ СРОЧНО Задача 2. Реверс Имя входного файла: стандартный ввод Имя выходного файла: станд

Ответов: 2

Информатика 02.07.2023 22:45 272 Кононова Вероника

На остановке останавливаются автобусы с разными номерами. Сообщение о том, что подошел автобус № 1

Ответов: 2

Мифы о языке программирования Ада

Миф об устаревшем языке опровергается одним запросом к поисковику: последняя редакция вышла в 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.

Ада Лавлейс — известность и признание

Известность к Аде пришла с переводом статьи Луиджи Менабреа — признанного инженера, который написал много работ по механике и математике. Среди них были его заметки о разностной машине Бэббиджа. В 1843 году эта статья Менабреа была опубликована с заметками Ады Лавлейс (собственно, она её и перевела). В заметках Лавлейс писала, что машина, подобная аналитической машине Бэббиджа, когда-нибудь сможет обрабатывать не только цифры, но и любые другие объекты: например, создавать музыку, живопись, формулы. Надо сказать, что заметки Лавлейс получились куда объёмнее и шире самой статьи Менабреа. В том же 1843 году Ада Лавлейс написала программу для подсчёта чисел Бернулли.

Примечание: Числа Бернулли — последовательность рациональных чисел, впервые рассмотренная Якобом Бернулли в связи с вычислением суммы последовательных натуральных чисел, возведённых в одну и ту же степень.

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

Так получилось, что Ада написала эту программу для потомков — ведь компьютеров тогда еще не было. Уже в наше время программисты пробовали переложить программу Ады на Python и C, но без результатов. В итоге разработчики даже нашли ошибку в расчётах Ады. Вот вам собственно и первый баг! Как отметил блогер Джим Рэндал, переложивший программу Ады на Python: «в «диаграмме развития» Лавлейс пишет v5/v4, но правильно будет v4/v5. Эта ошибка могла появиться при печати, а не у Лавлейс».

Понравилась статья? Поделиться с друзьями:
Идеальная мама
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: