Фортран

С Сибирьска википедья
Revision as of 21:59, 30 Травня 2026 by Yaroslav (розговор | влож) (Bot: Automated import of articles)
(розн) ← Older revision | Latest revision (розн) | Newer revision → (розн)
Айдать на коробушку Айдать на сыскальник

Фортран (от англ. FORTRAN — Formula Translator) — исторически первый язык программирования высокого уровня, получивший массовое коммерческое и академическое распространение. Язык был специально спроектирован для выполнения сложных научных и инженерных вычислений. На протяжении всей второй половины XX века Фортран сохранял статус главного инструмента для программирования математических задач. Огромное количество накопленных математических библиотек (решение систем дифференциальных уравнений, математическая статистика и методы линейной алгебры) делает его актуальным в узкоспециализированной инженерной среде до настоящего времени. Практически весь фундаментальный математический аппарат человечества был алгоритмизирован и задокументирован на этом языке.

История создания

В начале 1950-х годов программирование осуществлялось исключительно на языках ассемблера и ранних автокодах, что делало процесс ввода сложных математических формул и уравнений в ЭВМ крайне трудоемким и медленным. В 1953 году Джон Бэкус, инженер корпорации IBM, предложил концепцию принципиально нового языка, который позволил бы транслировать линейно записанные математические формулы непосредственно в машинно-исполняемый код. Позднее, в интервью 1979 года, Бэкус отмечал, что идея языка возникла во многом из желания упростить рутинную работу по расчету траекторий ядерных ракет и избавить программистов от необходимости писать громоздкий ассемблерный код.

Разработка системы велась исследовательской командой, состоящей примерно из двадцати человек. В ноябре 1954 года была опубликована первая спецификация системы перевода математических формул IBM. В октябре 1956 года разработчики выпустили первое учебное пособие по Фортрану, а в апреле 1957 года был представлен первый рабочий компилятор. Разработка компиляторов американскими инженерами развивалась стремительно, опередив европейский проект Алгол-58 почти на год. К 1960 году IBM выпустила стабильные версии транслятора для всех своих передовых вычислительных машин (включая архитектуры IBM 709, 650, 1620 и 7090), а на глобальном рынке уже присутствовало около 40 различных реализаций компиляторов.

Эволюция стандартов

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

Стандарт Фортран 66 свел разрозненные реализации языка к единой спецификации.

Стандарт Фортран 77 стал важнейшей вехой в истории языка. Были добавлены операторы открытия и закрытия файлов, а также внедрен полноценный строковый (символьный) тип данных (до появления этого стандарта символы обрабатывались компилятором как числовые значения). Под влиянием парадигмы структурного программирования были внедрены блочные конструкции (такие как ветвления if-then-else), что позволило сократить использование безусловных переходов по числовым меткам.

Стандарт Фортран 90 привел к существенной модернизации языка с учетом достижений языков семейства Си. Был введен свободный формат написания исходного кода, добавлены инструменты для работы с динамической памятью (динамические массивы и указатели), концепция модулей и базовые элементы объектно-ориентированного программирования (ООП).

В стандарте Фортран 95 были интегрированы конструкции для упрощения векторных и матричных вычислений без явного использования циклов, а также концепции «чистых» (pure) подпрограмм. Дальнейшие стандарты, такие как Фортран 2003, Фортран 2008 и Фортран 2018, продолжили углублять интеграцию ООП, добавили асинхронный ввод-вывод данных и расширили возможности языка в области параллельных вычислений.

Архитектура и синтаксис

Ранние версии языка были физически привязаны к формату стандартной 80-колонной картонной перфокарты. Исходный код подчинялся строгим позиционным правилам, нарушение которых приводило к синтаксической ошибке. С 1 по 5 колонку располагалась область числовых меток. Шестая колонка служила маркером продолжения строки (она заполнялась любым символом, кроме пробела и нуля). С 7 по 72 колонку записывался сам текст оператора или текстовый комментарий. Наконец, с 73 по 80 колонку резервировалось место для физической нумерации перфокарт на случай, если колода случайно рассыплется. Процесс компиляции представлял собой последовательное считывание этих колод кардридером в память вычислительной машины.

Начиная со стандарта Фортран 90, ограничения перфокарт были отменены. Введение свободного формата позволило размещать несколько операторов на одной строке, использовать произвольные отступы и длинные идентификаторы. Тем не менее, язык полностью сохранил поддержку оператора безусловного перехода (goto) и логических циклов с числовыми метками.

Операции сравнения символьных или числовых данных исторически записывались с использованием специальных буквенных операторов, окруженных точками (например, .GT. для проверки условия «больше», или .LT. для «меньше»), так как на ранних клавиатурах не всегда присутствовали нужные математические знаки.

Типы данных

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

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

Подпрограммы и функции

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

В языке строго различаются два вида подпрограмм: Во-первых, функции. Они возвращают единственный вычисленный результат определенного типа и вызываются внутри математических выражений. Во-вторых, процедуры (субрутины, описываемые ключевым словом subroutine). Они способны одновременно преобразовывать множество переданных аргументов различных типов. Вызов процедуры в коде осуществляется с помощью специального оператора call.

В стандарте Фортран 95 были введены спецификации «чистых» (pure) подпрограмм. Чистая функция обязана только возвращать значение и гарантированно не изменяет переданные в нее входные параметры (глобальные данные). При написании чистых процедур программист обязан явно указывать с помощью модификатора intent статус параметров: какие из них предназначены исключительно для чтения, а какие являются выходными и могут быть изменены. Это нововведение позволило минимизировать побочные эффекты вычислений.

Концептуальный синтаксический пример вызова подпрограммы:

  call MY_SUBROUTINE(Argument1, Argument2)

Массивы и матричные вычисления

Эффективная обработка многомерных массивов — центральная парадигма языка. В отличие от языков семейства Си или Паскаль, элементы многомерных матриц в оперативной памяти Фортрана располагаются строго по столбцам. Для достижения максимальной производительности во вложенных циклах внутренний цикл всегда должен индексировать левые (первые) индексы массива, а внешний — правые.

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

Уникальной мощью обладают логические маски и матричные функции. Маска — это логический массив, который накладывается на другой массив для массового выполнения операций без написания классических циклов со счетчиками. В язык встроены функции all (возвращает истину, если все элементы маски истинны), any (если истинен хотя бы один элемент) и count (подсчет количества истинных элементов). Также встроены специализированные математические функции maxval и minval для мгновенного нахождения экстремумов массива, встроенные функции для поиска индекса по условию, суммирования всех элементов, а также функции автоматического транспонирования и перемножения матриц.

Файловая система

Подсистема ввода-вывода отличается исключительной гибкостью. Современный стандарт языка поддерживает до 15 типов организации файлов (среди которых текстовые, битовые файлы, файлы с фиксированной и переменной длиной записи, файлы прямого и последовательного доступа). Максимальный размер одной записи может достигать 2 гигабайт. Примечательно, что любая символьная строка внутри программы интерпретируется компилятором как внутренний файл, благодаря чему операции считывания данных из обычной текстовой переменной синтаксически идентичны операциям считывания информации с жесткого диска.

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

Развитие в СССР

В академической среде Советского Союза изначально преобладал интерес к европейскому языку Алгол. Однако Фортран быстро завоевал популярность благодаря советским физикам-ядерщикам, тесно сотрудничавшим с Европейским центром ядерных исследований (ЦЕРН). В 1967 году был разработан первый транслятор для отечественной ЭВМ «Минск-22», а в 1968 году коллектив программистов из Объединенного института ядерных исследований создал знаменитый компилятор «Фортран-Дубна».

В 1970–1980-е годы язык стал абсолютным индустриальным стандартом для советских инженеров и массово использовался на суперкомпьютерах серии ЕС ЭВМ. Для визуализации результатов физических симуляций советскими программистами была создана мощная графическая библиотека ГРАФОР. Популярность языка была столь велика, что в конце 1980-х годов для обучения советских детей основам вычислительной техники была написана и издана книга «Энциклопедия профессора Фортрана».

Применение и современное состояние

С развитием информационных технологий и появлением универсальных языков программирования, направленных на создание баз данных и веб-приложений (таких как Java, C# или Python), Фортран потерял массовую долю рынка коммерческого программного обеспечения. Корпорация Microsoft, выпускавшая компиляторы языка с самых ранних версий операционной системы Windows, официально прекратила их поддержку в 1997 году (позднее эту нишу занял продукт Microsoft Fortran PowerStation, разрабатываемый корпорацией DEC).

Тем не менее, язык продолжает активно развиваться и использоваться в научно-исследовательской сфере. Современные компиляторы (как проприетарные, так и свободные, например, GNU Fortran, полностью поддерживающий стандарт 2018 года) позволяют писать эффективный код. Для Фортрана разработаны графические оболочки визуального программирования, средства интеграции с современными реляционными базами данных (SQL) и интерфейсы перекрестной трансляции, позволяющие вызывать оптимизированный фортран-код из программ на других языках.

См. также

Haskell Eiffel

Смотреть видео