13 сентября 2016 в 17:23

История языков программирования: как Fortran позволил пользователям общаться с ЭВМ на «ты»



В 2017 году языку Fortran исполняется 60 лет. За это время язык несколько раз дорабатывался. «Современными» версиями считаются Fortran 90, 95, 2003 и 2008. Если изначально это был язык программирования высокого уровня с чисто структурной парадигмой, то в более поздних версиях появились средства поддержки ООП и параллельного программирования. На сегодняшний день Fortran реализован для большинства платформ.

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

В 1950 году, когда Джону Бекусу было 25 лет, он, получив степень магистра математики в Колумбийском университете, устроился программистом в фирму IBM. Вскоре он возглавил группу, разрабатывающую интерпретатор под названием «Быстрый кодировщик» для компьютера марки IBM-701. Затем он работал в составе группы по созданию более мощного преемника модели 701, машины IBM-704.



В 1953 году Бекус выступил с рационализаторской инициативой. Он предложил создать язык и компилятор к нему, которые должны были упростить программирование модели IBM-704. Система позволяла записывать программы в алгебраической форме, а компилятор должен был автоматически переводить ее в машинные коды.

С этим предложением Джон Бекус, как говорится, оказался в нужном месте, в нужное время. С опозданием выйдя на рынок, фирма IBM испытывала затруднения с увеличением сбыта своих компьютеров. По этой причине она поддерживала исследования по информатике в Колумбийском, Гарвардском и некоторых других университетах. Помимо этого, IBM и сама искала пути снижения стоимости программирования, а также пыталась упростить работу с компьютерами, чтобы сделать их более привлекательными, «дружественными» для пользователей.

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

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


IBM-704

Исследователи фирмы IBM, создававшие Fortran, и не подозревали, насколько большое значение приобретет этот язык. Когда они в начале 1954 года приступили к работе, информатика развивалась стихийно, и каждый работал по наитию. Это привело к возникновению профессиональных программистов и специалистов по информатике.
Один из управляющих фирмы IBM решил, что из шахматистов получаются хорошие программисты, поэтому он заводил беседы с возможными кандидатами в программисты во время шахматных партий с одним из сотрудников фирмы IBM (который, кстати, был чемпионом США по шахматам).

Мало кто из восьми человек, занятых в разработке Fortran, был серьезно знаком с компьютерами. Они пришли из университетов и авиакомпаний, а также из собственных программистских групп IBM.
Даже сам руководитель команды разработки Fortran Джон Бекус имел лишь несколько лет опыта работы с компьютером, когда приступил к созданию нового языка программирования.
До колледжа Бекус был посредственным учеником («Я прошел больше школ, чем могу вспомнить»). После службы в армии во время второй мировой войны он оказался в Нью-Йорке, где поступил в школу радиотехники. «Пределом моих стремлений было сделать высококачественное звуковоспроизводящее устройство», — признался Бекус позднее,.

Однако преподаватель по ремонту телевизионной и радиоаппаратуры пробудил у Бекуса интерес к математике и убедил его продолжить учебу в Колумбийском университете. Так скромно началась одна из самых плодотворных карьер в истории вычислительной техники.
Итак, разработчики во главе с Бекусом расположились в штаб-квартире фирмы IBM на Мэдисон-авеню в Нью-Йорке.

Они выделили основные понятия нового языка, в частности оператор присваивания (например, N = 100), задававший переменным определенные значения, ввели индексируемые переменные, которые сообщали компьютеру, какой элемент из списка переменных нужен (например, X(3) означает третий элемент списка, названного X), предложили очень важный оператор DO, который позволял повторять нужную последовательность операторов заданное число раз.

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

Однако совсем другое дело — разработка компилятора. Бекус понимал, что развеять сомнения в возможностях «автоматического» программирования, то есть написания программ на языках высокого уровня нелегко. Это произойдет, когда программы, полученные с помощью Fortran, будут такими же быстродействующими и надежными, как и написанные в машинных кодах или на языке ассемблера, думал он.

По плану на разработку компилятора отводилось полгода, однако работа над ним заняла более двух лет.
В конце 1956 года и в 1957 году интенсивность работы по доводке и отладке компилятора резко возросла. В этот период члены группы часто снимали номер в ближайшей гостинице, где отсыпались днем, работая на машине по ночам, чтобы иметь возможно больше непрерывного машинного времени. Ошибки одна за другой устранялись, и в апреле 1957 года компилятор был готов для использования владельцами машины IBM-704.

«Большой конфуз»


По ошибке, которую Бекус назвал «большим конфузом», компилятор был послан в лабораторию «Вестингауз-Беттис» в виде колоды перфокарт и без каких-либо инструкций; что и позволило Гербу Брайту из лаборатории «Вестингауз-Беттис» запустить Fortran вслепую. Остальные пользователи получили систему на магнитной ленте вместе с руководством для оператора.



В одну из пятниц апреля 1957 года в компьютерный центр атомной лаборатории «Вестингауз-Беттис» возле Питтсбурга почтальон доставил загадочную посылку. Программист Херб Брайт и двое его коллег открыли ящик, на котором не было никаких пометок, и обнаружили там стопку примерно из 2 тысяч перфокарт, без единой инструкции.

Рассматривая перфокарты, Брайт вспомнил, что в IBM как раз шла окончательная отладка языка высокого уровня, предназначенного для использования на IBM-704. Может, почтальон принес именно этот долгожданный компилятор? Брайт и его друзья решили загрузить загадочные карты в компьютер и посмотреть, что получится.

Брайт вложил в считывающее устройство компьютера тестовую программу, написанную на Фортране, и нажал кнопку пуска. Новый компилятор выдал на принтер сообщение: «на карте № 25 обнаружена ошибка в операторе — пропущена запятая».

Программисты, привыкшие к запутанным сообщениям в виде числовых кодов, были поражены ясностью этой информации. Неверный оператор исправили и снова нажали кнопку пуска. Ленты начали вращаться, и компьютер выдал стопку перфокарт программы. Когда карты загрузили в считывающее устройство, заработал принтер и без остановки напечатал 28 страниц. Компьютер лишь слегка ошибся в формате выходных данных. «Но числа были правильными! Числа были правильными!» — восклицал позднее Брайт.



На самом деле, примерно в одно и то же время с Fortran'ом появилось еще два языка высокого уровня – Кобол и Алгол. Начиная с конца 50-х годов они долгое время лидировали в компьютерном мире. Большинство современных программ написано на языках, которые представляют собой потомки этих трех языков.

Распространение и адаптация


Но поначалу Fortran принимали без особой теплоты. Программисты, как вспоминал Бекус, «весьма скептично воспринимали все наши заявки». Однако по сравнению со своими предшественниками Fortran был сравнительно прост для обучения и использования.

Кроме того, фирма IBM снабжала все модели 704 Fortran’ом бесплатно. В результате к 1958 году более половины всех машинных команд на 60 компьютерах фирмы были получены не вручную, а «автоматически», с помощью нового языка высокого уровня.

Бекус понимал, что конкурирующие производители тоже займутся разработкой языков высокого уровня для своих вычислительных машин. Однако Fortran быстро стал нормой и его адаптировали для различных моделей ЭВМ. Первую адаптацию осуществила сама фирма IBM. Через пять лет Fortran использовался на шести различных моделях компьютеров фирмы IBM, а также на компьютерах компании «Сперри Рэнд», «Филко» и других.

Небольшая группа, в которую входил Дэвид Хеммис, за короткое время адаптировала Fortran к машине IBM-650, меньшей, чем IBM-704. Хеммис и его коллеги разработали систему «FORTRANSIT» (FOR TRANSIT — для перехода); позднее эти два слова слились в одно. Таким образом, система FORTRANSIT стала первым транслятором исходного, работающим на ЭВМ нескольких моделей.


Дэвид Хеммис – один из первых разработчиков компьютерных языков, за рулем своего автомобиля выпуска 1928 года. Фотография сделана в Уэстхемптоне (шт. Нью-Йорк) во время автомобильных гонок 1957 года.

Доработка


Тем не менее, работу над новым языком нужно было продолжать достаточно долго: это стало ясно еще в начале 1957 года, когда продолжался процесс отладки. Бекус и другие разработчики понимали, что язык нуждается в более точной системе диагностики программных ошибок. Кроме того, необходимо было реализовать возможность раздельного и независимого написания подпрограмм и программных модулей. Таким образом язык получил бы еще одно преимущество – повторное использование кода.

Благодаря усилиям разработчиков всего через год после создания оригинала появился Fortran II. Одно из достоинств нового языка состояло в том, что он позволял вставлять в программы фрагменты кода на ассемблере. Более поздняя версия, Fortran III, была создана в 1958 году. Про Fortran IV, который еще больше расширил возможности языка, стало известно в 1962 году.

Ядро языка, его основные операторы и выражения, оставались практически неизменными на протяжении многих лет. Но, поскольку Фортран многократно адаптировался ко все новым системам машин, для которых он не предназначался, постепенно накапливались отличия. Одни возможности терялись, новые возникали. Это неизбежно порождало путаницу.

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

В 1966 году первый стандарт получил название Fortran 66. В 1977 году, соответственно, вышел стандарт Fortran 77. В 1991 году появился Fortran 90. Fortran 95 создан в 1997 году.

Fortran в СССР


В Советском союзе ко двору больше пришелся Алгол-60. Поэтому Fortran в этой стране появился позже. Тем не менее, постепенно он вышел на первое место по популярности. Были разработаны компиляторы (трансляторы) для большинства отечественных ЭВМ – «Минск-32», БЭСМ-4, БЭСМ-6, АС-6, ЕС ЭВМ, СМ ЭВМ, МВК «Эльбрус» и так далее.

В ИПМ им. Келдыша в разное время было разработано несколько трансляторов. Два из них – Фортран-Алмо и Форшаг (Фортран шаговый) были написаны на языке Алмо и код генерировали на этом же языке. Это позволило установить трансляторы на несколько разнотипных ЭВМ. В обоих трансляторах реализован стандарт Fortran 66.



Форшаг также включал язык диалога, который позволил создавать, редактировать и выполнять трансляцию кода в диалоговом режиме. Помимо этого, был разработан комплекс графических программ для Фортрана – Графор, который активно использовался на различных ЭВМ.

*****

Fortran и по сей день остается популярным среди научных работников. Это первый язык программирования высокого уровня, имеющий транслятор, получивший практическое применение и дальнейшее развитие. Как говорилось в руководстве фирмы IBM, выпущенном в 1957 году, «Fortran обеспечивает эффективный способ создания программ для модели 704, прост в обучении и не требует глубоких знаний в области ЭВМ».

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

Однако следующее поколение программистов стало относиться к Fortran'у как к «ископаемому». Эдсгер Дейкстра, язвительно отмечал, что обучение студентов этому языку должно приравниваться к серьезному преступлению.
Григорий Гринштейн @semen_grinshtein
карма
25,0
рейтинг 58,6
Редактор
Самое читаемое Разработка

Комментарии (31)

  • 0
    А ещё BASIC был создан для обучению Фортрану, и выглядит как упрощённый Фортран (и по сути таковым и являлся). А вместо IDE имел интерпретарор работавший с командной строки, что облегчало обучение, так как у Фотрана был компилятор работавший с командной же строки.

    PS Помню как я сам учил Бейсик, и как знание Бейсика мне помогло быстро освоить Фортран, в котором очень многое было уже знакомым из Бейсика.
    • 0
      ПМСМ, это очень спорное утверждение. Если взять синтаксис классического Бейсика, он мало похож на Фортран.
      Например, сравните конструкцию «обход»:
      IF (ABC.EQ.3) GO TO 555
      и
      IF ABC = 3 THEN GOTO 555

      Цикл со счетчиком:
      DO 555 I=1,10,1 (не помню точный порядок параметров, уж извините)
      555…

      и

      FOR i = 1 TO 10

      NEXT i

      Вывод текста на экран:

      OPEN(UNIT=5, FILE='CON'....)
      WRITE(5, 555)'Hello world'
      555 FORMAT(.....)

      и

      PRINT «Hello world»

      Есть, разумеется, какие-то общие моменты, но они повсюду примерно такие.
      • 0
        Сходств и общих моментов между Бейсиком и Фортраном всё-таки больше чем с Паскалем или Алголом…
        • 0
          Паскаль — более поздный язык, тут даже сравнивать нечего.

          Сходств и общих моментов между Бейсиком и Фортраном

          Какие-то есть, да. Например, счетчик с циклом с произвольным шагом типа
          FOR i = 1 TO 10 STEP 0.001

          Но в общем и целом мне они схожими не кажутся.

          П.С. изучал сначала Фортран, потом Бейсик, какое-то время параллельно.
          • 0
            Я лично с Бейсика на Фортран перешёл за пару дней, так как многое мне было уже знакомым. Для сравнения — Паскаль я изучал намного дольше.
            • 0
              Не вижу ни одной объективной причины для этого. Разумеется, если мы ограничимся только теми конструкциями, которые есть в Ф. и Б., иначе смысл сравнения теряется — естественно, больший объем будет изучаться дольше.
              • 0
                Для быстрого старта — сходств хватает. А дальше, естественно, нужно учит углублённо.

                Это как зная С можно быстро начать использовать C++, но полное использование возможностей языка требует глубокого обучения.
                • 0
                  Все равно не вижу разительных отличий Паскаля. Напротив, я бы сказал, что концептуально Паскаль больше похож на Фортран, если не брать некоторые отдельные конструкции, появившиеся как концепции позже.
                  Например, представим, что пишем что-то простое, какой-то модуль, смотрим, что используем.

                  В Фортране и Паскале модули есть, в Бейсике (классическом) — нет.
                  В Фортране и Паскале есть User defined функции и подпрограммы, в Бейсике — нет (GOSUB по метке не в счет, это эрзац и ничего похожего нет ни в П. ни в Ф)
                  В Фортране и Паскале надо объявлять переменные заранее, «вверху», в Бейсике нет объявление, все по первому использованию.
                  Вывод и ввод в Фортране не похож ни на что. Вывод в переменную с форматированием — только на sprintf из C.
                  Цикл со счетчиком похож у Бейсика и Паскаля, но не у Бейсика и Фортрана.
                  Обращение со встроенными строками похоже у всех трех, но доступ к подстрокам у Фортрана свой, не похожий ни на что.

                  Серьезно, я не вижу сходств, которые позволяли бы быстро пересесть с Фортрана на Бейсик/наоборот, но не на Паскаль.
                  Покажите мне хоть одну-две конструкции.
                  • 0
                    Зная Бейсик и выучив те различия, что Вы указали в посте https://habrahabr.ru/post/309914/?utm_source=tm_megamozg&utm_medium=tm_block&utm_campaign=tm_promo#comment_9804544 — уже можно написать на Фортране относительно сносно работающую программу.
                    А вот в случае Паскаля учить придётся больше и дольше, то есть сходу так быстро не напишешь.
                    • 0
                      Это не так.
                      Покажите мне хоть одну-две конструкции.
                      • 0
                        Я с книгой по Fortran-77 в качестве справочника и зная Бейсик написать рабочую программу на Фортране (не HelloWorld!) смог написать в тот же самый день.
                        А вот чтобы написать что-то рабочее на Паскеле мне пришлось сначала прочитать всю книгу.
                        • 0
                          Вы описываете свой опыт, весьма субъективный. Я прошу конкретные конструкции, для интереса, не срача ради.
                          Я писал на Ф., потом перешел на Бейсик, потом на Паскаль и сейчас работаю на Дельфи. Поэтому все три языка — «мои». И я не могу понять, что потребовалось изучать в Паскале, прочитав всю книгу, если вы уже умели писать на Фортране.

                          Я могу сейчас составить три короткие программы на этих языках и показать наглядно, почему ваша точка зрения мне кажется странной и неправдоподобной.
                          • 0
                            Другой синтаксис: ни в Бейсике ни в Фортране — нет begin и end, нет точки с запятой, присвоение в Бейсике и Фортране — одинаковое, и так далее. Если сравнить то языки — очень похожи, и оба отличаются от Паскаля.
                            • 0
                              Да нет же. В собщении https://habrahabr.ru/post/309914/#comment_9807566 я приводил сравнение ряда параметров, Паскаль по ряду параметров больше похож на Ф и на Б, чем те два между собой.

                              Согласитесь, такие вещи, как «нет точки с запятой», «присвоение — = а не :=», необходимость расставления блоков и вне цикла — это не то, из-за чего сложно изучить язык настолько, что это займет 2 недели и чтение литературы, вместо прямого перехода со справочником в руках.

                              Я чуть позже все-таки приведу пример какой-нибудь простой программы на этих трех языках, чтобы было яснее.
                              • 0
                                И в Бэйсике и в Фортране подпрограммы называются SUBROUTINE
                                — в Паскале это Procedure
                                Оператор PRINT имеется и в Бэйсике и в Фортране
                                — в Паскале это такого оператора нет
                                … и так далее => программу на Бэйсике достаточно лишь немного подправить чтобы она смогла откомпилироваться на Фортране, а вот для Паскаля придётся практически всё переписывать.
                                • 0
                                  И в Бэйсике и в Фортране подпрограммы называются SUBROUTINE

                                  Вот только незадача: да, есть такие диалекты Бейсика, где подпрограммы называются SUB, например, тот же Quick Basic. Однако, ветка началась с вашего высказывания о том, что-де Бейсик создан для обучения Фортрану и очень на него похож. Однако ж в том Бейсике, и в большинстве более поздних диалектов такого конструкта как «подпрограмма» нет вообще. Точнее, нет в привычном нам понимании. Есть только блок кода с метками, который вызывается GOSUB, почти как GOTO, с доступом ко всем переменным, без разграничения области видимости. Как в машинном коде. Например:

                                  940 GOTO 1000
                                  950 LET a = 3


                                  990 RETURN
                                  1000 FOR i = 1 to 10
                                  1010 GOSUB 950
                                  1020 NEXT i

                                  В то время как и в Ф. и в П. есть привычные нам подпрограммы, пусть они и обозначаются разными ключевыми словами.

                                  Согласитесь, приведенное мною отличие намного важнее разницы в ключевых словах.

                                  Оператор PRINT имеется и в Бэйсике и в Фортране

                                  Есть, но делает он несколько иное. Это тот же вывод «в устройство». Не каждый диалект Фортрана разрешит вам использовать PRINT с произвольным форматом и выводом «по умолчанию».
                                  write Паскаля много ближе Бейсиковскому PRINT'у — здесь отличие по факту только в скобках и названии оператора.

                                  … и так далее => программу на Бэйсике достаточно лишь немного подправить чтобы она смогла откомпилироваться на Фортране, а вот для Паскаля придётся практически всё переписывать.

                                  Это разница в названии операторов и синтаксисе. Это мелочь, поймите — концептуальная разница где-то меньше между П и Ф, где-то между П и Б. Но практически везде велика между Ф и Б.
                                  Я все же напишу примеры как-нибудь, надо настроить среды для Ф и Б.
                                  • 0
                                    Ах да, в том Фортране, который был во времена разработки Бейсика, не было PRINT'а.
                                  • 0
                                    Я писал на хардкорном Бейсике без IDE в коммандной строке под ДОС/РВ (выглядел как гибрид Доса с Юниксом). А Quick-Basic я увидел уже после Фортрана, и кажется после Паскаля.
                                    GOSUB — не встречал
  • 0
    А еще были такие уникальные ЭВМ как М-220, СПЭМ и ВЕСНА. И на них тоже работал Фортран-Алмо.
  • +2
    А в книге

    Орлов, В.Н.
    Комплексирование программ в ОС ЕС
    Издательство: М.: Финансы и статистика
    Переплет: мягкий; 133 страниц; 1986 г.

    были такие разделы про ФОРТРАН:

    Связь ПЛ/1 — Фортран
    Связь Фортран — ПЛ/1
    Связь Фортран — Ассемблер
    Связь Ассемблер — Фортран

    Эх, старые и добрые друзья ФОРТРАН и ПЛ/1
    • 0
      А ведь книжки-то юбилей, 30-лет!
  • 0
    FORTRAN — первый язык, который я освоил, и которому многим обязан. Уже потом были ассемблер PDP-11, PASCAL, MODULA-2, C/C++, Perl, немного Java…

    Спасибо за статью. Вот только зацепило предложение: «Были разработаны компиляторы (трансляторы) для большинства отечественных ЭВМ –… ЕС ЭВМ, СМ ЭВМ...»

    Неплохо было бы уточнить, что ЕС — это как бы IBM System/360/370, а СМ — DEC PDP-11 (из серии СМ-3/4/1420). То есть, компиляторы, как и ОСи для этих клонов, в СССР не разрабатывались, а скорее, адаптировались…
    • 0
      С приходом ЕС ЭВМ разработка компиляторов да и проектирование новых ЭВМ, не в смысле производства (один ряд ЕС ЭВМ от ЕС-1007 до ЕС-1066 чего стоит), практически прекратился. И СССР в след за IBM прозевал наступление Эры персональных ЭВМ. А до ЕС ЭВМ и СМ все компиляторы были отечественной разработки. Чего один Фортран-Алмо стоит. Так и хочется упонянуть об обратной польской записи — неоьъемлемой части Алмо.
      • 0
        А оптимизирующий Фортран для БЭСМ-6?
        • 0
          Да, БЭСМ-6 была отечественной разработкой (тогда и понятия такого не было как импортозамещение) и ней много чего было и диски от ЕС ЭВМ, а посути от IBM
          • 0
            Присобачить можно много чего — мы лентопротяжки от ЕС к СМ подключали, чтобы с большими лентами работать. Это сути не меняет, БЭСМ — наша машина, с очень интересными решениями. Например, вирутальная память, своп.
            • 0
              Она и дольше всех работала, чуть ли не сейчас еще!
              • 0
                Последняя отключена в 1994 если верить интеренту.
          • 0
            Ну это уже позже — пишут, что изначально к ней стыковались родные магнитные барабаны.
            • 0
              И лентопротяжки своего формата. Принтеры тоже необычные, без буферизации.
  • 0
    Тема неожиданно получила развитие в сторону операционных систем.

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