Глава 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 I | 1957 | Первый компилятор, арифметика, DO-циклы, FORMAT |
| Fortran II | 1958 | Подпрограммы (SUBROUTINE), раздельная компиляция |
| Fortran IV | 1962 | Логические операции, типы CHARACTER, DATA |
| Fortran 66 | 1966 | Первый стандарт ANSI |
| Fortran 77 | 1978 | IF-THEN-ELSE, строки, структурное программирование |
| Fortran 90 | 1991 | Массивы, модули, рекурсия, свободный формат |
| Fortran 95 | 1995 | Небольшие улучшения, FORALL |
| Fortran 2003 | 2003 | Объектно-ориентированное программирование, интероперабельность с C |
| Fortran 2018 | 2018 | Параллельное программирование, COARRAY |
Значение Fortran для развития программирования
- Первый язык высокого уровня — доказал возможность автоматизации программирования.
- Оптимизирующий компилятор — заложил основы теории компиляции.
- Независимость от машины — программы можно было переносить между разными компьютерами (с минимальными изменениями).
- Долгожитель — используется до сих пор в научных и инженерных расчётах, особенно в физике и метеорологии.
Интересный факт: В 1964 году IBM заявила, что более 50% всех вычислительных задач в мире выполняется на Fortran. Даже сегодня многие суперкомпьютерные бенчмарки пишутся на Fortran благодаря эффективной оптимизации массивов.
Наследие
Fortran стал родоначальником семейства языков высокого уровня. Его идеи — независимость от аппаратуры, математическая нотация, оптимизация — были восприняты Algol, Basic, Pascal и в конечном счёте всеми современными языками.