Глава 2. Эра языков высокого уровня (1950–1970-е годы)

2.1. Fortran (1954) — первый язык высокого уровня для научных и инженерных расчётов

2.1.1 Исторический контекст: необходимость абстракции

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

В 1953 году Джон Бэкус, программист компании IBM, предложил создать более эффективный способ программирования для IBM 704. Так началась работа над Fortran (FORmula TRANslator).

Схема 2.1 · Хронология создания Fortran
%%{init: {'theme':'base', 'themeVariables': { 'primaryColor': '#ffffff', 'primaryTextColor': '#1e4a76', 'primaryBorderColor': '#7ca2c9', 'lineColor': '#2b6a9e', 'secondaryColor': '#f6faff', 'background': '#ffffff' }}}%% timeline title История Fortran 1953 : Джон Бэкус предлагает проект 1954 : Начало разработки спецификаций 1957 : Выпуск первого компилятора Fortran I 1958 : Fortran II (подпрограммы) 1962 : Fortran IV (типы данных, логические операции) 1966 : Первый стандарт ANSI Fortran 66 1978 : Fortran 77 (структурное программирование) 1991 : Fortran 90 (массивы, модули)

Команда разработки

Группу под руководством Джона Бэкуса составили программисты: Ирвинг Циллер, Ричард Голдберг, Лоис Хейбт и другие. За 3 года они создали первый в истории компилятор для языка высокого уровня, который генерировал код, почти не уступающий по эффективности ручному коду на ассемблере.

2.1.2 Ключевые особенности Fortran I

Схема 2.2 · Основные характеристики первого Fortran
%%{init: {'theme':'base', 'themeVariables': { 'primaryColor': '#ffffff', 'primaryTextColor': '#1e4a76', 'primaryBorderColor': '#7fa9d1', 'lineColor': '#2b6a9e', 'secondaryColor': '#eef6ff', 'background': '#ffffff' }}}%% mindmap root((Fortran I)) Математическая нотация Арифметические выражения Формулы как в математике Приоритет операций Типы данных INTEGER REAL DOUBLE PRECISION COMPLEX Управляющие конструкции DO-циклы IF-условия GOTO Ввод-вывод Форматный READ/WRITE Подпрограммы FUNCTION SUBROUTINE

1. Математическая нотация

Fortran позволял записывать формулы практически в той же форме, что и в математике. Например, X = (-B + SQRT(B**2 - 4*A*C)) / (2*A) для решения квадратного уравнения.

2. Система типов

Впервые введены типы данных: целые, вещественные (с одинарной и двойной точностью), комплексные числа. Переменные, начинающиеся с I–N, по умолчанию считались целыми (IMPLICIT INTEGER).

C Пример программы на Fortran I (стилизовано) PROGRAM QUADRATIC REAL A, B, C, D, X1, X2 READ(5,100) A, B, C 100 FORMAT(3F10.0) D = B**2 - 4.0*A*C IF (D .GE. 0.0) THEN X1 = (-B + SQRT(D)) / (2.0*A) X2 = (-B - SQRT(D)) / (2.0*A) WRITE(6,200) X1, X2 200 FORMAT(2F15.5) ELSE WRITE(6,300) 300 FORMAT('Нет вещественных корней') ENDIF STOP END
Пример 2.1 · Решение квадратного уравнения на Fortran

3. Компилятор и оптимизация

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

Схема 2.3 · Эффективность компилятора Fortran
%%{init: {'theme':'base', 'themeVariables': { 'primaryColor': '#ffffff', 'primaryTextColor': '#1e4a76', 'primaryBorderColor': '#7ca2c9', 'lineColor': '#2b6a9e', 'secondaryColor': '#f6faff' }}}%% graph LR A[Программа на Fortran] --> B[Компилятор Fortran I] B --> C[Оптимизированный машинный код] D[Программа на ассемблере] --> E[Ручное кодирование] E --> F[Машинный код] C & F --> G{Сравнение} G --> H[Разница < 20%]

4. Влияние на индустрию

Fortran стал первым языком высокого уровня, получившим широкое промышленное применение. К 1960 году большинство научных и инженерных расчётов в США выполнялись на Fortran. Он доказал, что языки высокого уровня могут быть практичными и эффективными.

Таблица 2.1 · Сравнение Fortran с ассемблером (1957)
ПараметрАссемблерFortran I
Скорость разработкинизкаявысокая (в 5–10 раз быстрее)
Скорость выполненияэталон85–100% от эталона
Переносимостьотсутствуетчастичная
Ошибкоопасностьвысокаясредняя

2.1.3 Эволюция Fortran: от I до 2018

Таблица 2.2 · Основные версии Fortran
ВерсияГодКлючевые нововведения
Fortran I1957Первый компилятор, арифметика, DO-циклы, FORMAT
Fortran II1958Подпрограммы (SUBROUTINE), раздельная компиляция
Fortran IV1962Логические операции, типы CHARACTER, DATA
Fortran 661966Первый стандарт ANSI
Fortran 771978IF-THEN-ELSE, строки, структурное программирование
Fortran 901991Массивы, модули, рекурсия, свободный формат
Fortran 951995Небольшие улучшения, FORALL
Fortran 20032003Объектно-ориентированное программирование, интероперабельность с C
Fortran 20182018Параллельное программирование, COARRAY

Значение Fortran для развития программирования

Интересный факт: В 1964 году IBM заявила, что более 50% всех вычислительных задач в мире выполняется на Fortran. Даже сегодня многие суперкомпьютерные бенчмарки пишутся на Fortran благодаря эффективной оптимизации массивов.

Наследие

Fortran стал родоначальником семейства языков высокого уровня. Его идеи — независимость от аппаратуры, математическая нотация, оптимизация — были восприняты Algol, Basic, Pascal и в конечном счёте всеми современными языками.