С. .Бобровский.

«Программная инженерия»

С. Петербург, изд-во «Питер», 2003

Третье поколение

Фортран: программисты свой выбор сделали — еще 40 лет назад

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

Язык программирования FORTRAN (FORmula TRANslation) был самым первым языком высокого уровня, получившим широкое распростра­нение. Он возник в конце 50-х годов, когда шли горячие дискуссии о самой необходимости создания подобных языков. Программисты, раз­рабатывавшие программы исключительно на ассемблере, выражали сильное сомнение в возможности появления высокопроизводительно­го языка высокого уровня.

Поэтому основным критерием при разработке стандартов Фортрана и создании компиляторов этого языка являлась эффективность испол­няемого кода. Большинство операторов Фортрана транслировалось непосредственно в одну-две машинные команды; простые синтаксиче­ские конструкции и активное использование меток и оператора goto по­зволяли получить очень быстрый код. В результате программы на Фор­тране подчас работали быстрее ассемблерных. Сама внутренняя структура оттранслированной программы была также очень простой: весь код, все подпрограммы и все данные вместе с общим блоком разме­щались исключительно в статической памяти, из-за чего, правда, невоз­можно было использовать рекурсию.

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

И з-за широкого распространения языка и появления множества про­грамм на Фортране (преимущественно вычислительного характера) насущным стал вопрос его стандартизации. Сначала это был стандарт

Fortran IF 1964 года, затем, по мере появления новых языков с новыми идеями, в 19 78 году был принят новый стандарт Fort ra n 77(/77)с большим числом синтаксических расширений, носящих более современ­ный и более гибкий характер. Сегодня наиболее распространенным является стандарт Fortran 90 (f90) и его очередной пересмотренный вариант Fortran 95.

Огромное количество библиотек для Фортрана, начиная от статисти­ческих комплексов и кончая пакетами управления спутниками NASA COSMIC, потребовало строгой совместимости новых стандартов языка с предыдущими версиями для обеспечения корректной трансляции старых текстов программ новыми компиляторами. Поэтому тщатель­ной проработке стандарта именно в отношении Фортрана всегда уде­лялось особое внимание.

В новые версии языка вносились и ненужные дополнения, которые выглядят как следование моде и желание сохранить популярность Фор­трана (это, например, расширения, связанные с динамическим выделе­нием памяти), и полезные вещи (модульная организация программы, работа с частями массивов и другие). Все же сегодня этот язык нельзя назвать перспективным для изучения, так как его синтаксис сильно устарел. Однако разработчикам крупных систем, которым часто прихо­дится решать вычислительные задачи, совсем не обязательно каждый раз брать в руки учебник по математике и «начинать творить» с нуля. В 90% подобных случаев то, что вы ищете, уже давным-давно было реа­лизовано и отлажено на Фортране.

Я сам был свидетелем разработки двух схожих между собой наукоем­ких проектов. Вычислительные алгоритмы, написанные с десяток лет назад для машин типа VAX с диалоговым вводом данных в текстовом режиме, переписывались с помощью Microsoft Fortran (операторы вво­да/вывода заменялись на обращения к внешним функциям). Из этих модулей формировались библиотеки DLL, а сама графическая оболочка разрабатывалась на C++. И все прекрасно работало. Причем в первом подобном проекте я участвовал в 1993 году, а во втором — ровно через десять лет (правда, в последнем случае вместо Microsoft Fortran исполь­зовался Intel Fortran). Популярность Фортрана за это время в научном мире ничуть не понизилась.

Поэтому «безбедная жизнь» Фортрану обеспечена надолго. Есть и еще одна ниша — параллельные вычисления, где строгая семантика языка позволяет получать высокопроизводительные программы. Обычно исполь­зуется стандарт f90, немного расширенный набором операторов для указания пригодных к распараллеливанию частей программы. Парал­лельный Фортран имеет свой стандарт HPF (High Performance Fortran).

Ярые поклонники Фортрана, девизом которых стала легендарная фраза: «Зачем мне изучать другие языки, когда я могу все написать на Форт­ране?» — тем не менее, ощущали его очевидную непригодность для крупномасштабных проектов, связанную с привязанностью к синтак­сису 50-х годов. Они попытались ввести в него модные идеи объектно-ориентированного программирования. К счастью, объектный Фортран в качестве стандарта так и не появился, иначе он представлял бы собой что-то типа Мерседеса с движком от Запорожца.

Среди бесплатно распространяемых версий Фортрана наиболее извес­тен f2c, реализованный для всех Unix/Linux-систем и преобразующий текст Фортран-программы в Си-код (ftp://netlib. ). Для MS-DOS имеется версия bcf77, распространяемая бесплатно для студентов (ftp. uni-stuttgart. de). Отметим Watcom Fortran (www. watcom. org), генериру­ющий высокоэффективный код, а также прекрасную серию Intel-ком-пиляторов. А вообще различные по качеству компиляторы Фортрана имеются на абсолютно всех компьютерных платформах.

Программисты часто спрашивают: «А чем этот Фортран лучше, напри­мер, Си?» Конечно, у каждого языка есть свои плюсы, и у Фортрана это, в первую очередь, фактическое отсутствие машинно-ориентиро­ванных конструкций и определенные гарантии в отношении правиль­ности исполнения вычислительных операций. Например, если при использовании Си-компилятора для 16-разрядных платформ целочис­ленное сложение 32000+1000 может дать отрицательное число, то в Фор­тране такие «проколы» отсутствуют, причем тщательно отслеживается накопление погрешности при вычислениях с большим числом знаков после запятой. Кроме того, программ, реализующих самые разные мате­матические алгоритмы, на Фортране написано столько, что переписы­вать их на другие языки просто глупо. А вообще на подобные «наезды» — «Си лучше!» — в конференции Интернета comp. lang. fortran обычно отве­чают: «А чего ты тогда сюда пишешь?»

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

Так что про Фортран забывать никак нельзя. Использовать его в каче-1стве инструментария в задачах системной интеграции, наверное, не имеет смысла, но то, что было наработано лучшими программистами за 20-30 лет, вполне может ускорить процесс разработки программ. По крайней мере, программных «кирпичиков» для Фортрана суще­ствует несравненно больше, чем для других языков программирования.