Введение

Международный компилятор ALGOL, разработанный Лабораторией электронных систем ВМС (NELIAC), является диалектом и реализацией компилятора языка программирования ALGOL 58, разработанным этой лабораторией (Navy Electronics Laboratory, NEL) в 1958 году. Он предназначался для численных и логических вычислений и стал первым языком, предоставившим возможность самозагрузки (bootstrap).

Происхождение

NELIAC был детищем Гарри Хаски, тогдашнего председателя Ассоциации вычислительной техники (ACM) и известного ученого в области компьютерных наук, и поддержан Морисом Халстедом, руководителем вычислительного центра NEL. Самая ранняя версия была реализована на прототипе компьютера AN/USQ 17 (названном «Графиня» в честь Ады Лавлейс) в лаборатории. Это был первый в мире самокомпилирующийся компилятор, особенность, известная как начальная загрузка (bootstrapping). Это означает, что компилятор был сначала закодирован в упрощенной форме на языке ассемблера – «загрузчик» (bootstrap), а затем переписан на собственном языке, скомпилирован этим «загрузчиком» и перекомпилирован уже самим собой, что делало «загрузчик» ненужным. Он считается вариантом ALGOL 58 из-за сходства с этим языком, но в течение двух лет комитет ALGOL разработал другие версии ALGOL, и NELIAC и ALGOL разошлись в своем развитии.

Использование

Компилятор был использован на машине «Графиня» для создания версии для CDC 1604, а позже самостоятельно скомпилирован на этой машине. Многие другие версии были созданы для коммерческих компьютеров, таких как UNIVAC 1107, 490 и 418, а также IBM 704 и 709. Производственная версия NELIAC была системой второго поколения (для AN/USQ 20, модернизированной и милитаризованной версии AN/USQ 20), скомпилированной первой версией, но включающей полное декодирование алгоритмических выражений и, позднее, систему ввода/вывода (I/O), отсутствовавшую во всех остальных версиях. Декомпилятор был скорее предметом любопытства. Первая версия работала на «Графине», но позже была портирована на CDC 1604 и другие компьютеры, и получила некоторое признание в некоторых университетах. Однако оказалось, что в то время было мало программ, которые стоило декомпилировать. NELIAC изначально не предназначался для коммерческого использования. Его основным преимуществом перед другими компиляторами того времени была переносимость на другие компьютеры и однопроходная архитектура компилятора, обеспечивавшая настолько высокую скорость компиляции, что он компилировал в 60-120 раз быстрее, чем другие языки программирования высокого уровня, использовавшие многопроходные компиляторы. Например, компилятор JOVIAL выполнял 14 проходов. Простота языка и высокая скорость компиляции позволяли значительно ускорить циклы разработки по сравнению с другими компиляторами того времени. Это была внутренняя разработка NEL, направленная на создание более экономичного решения проблемы разработки компьютерных систем. NELIAC использовался Королевским канадским флотом для разработки программного обеспечения для системы управления 280 (используемой на эсминцах DDH 280) в период с 1967 по 1971 год. Для разработки этого программного обеспечения канадский военно-морской флот создал Центр генерации программ в Оттаве, провинция Онтарио, Канада. В качестве хост-компьютера использовался Litton L304F с 160 кБ памяти. Из-за ограничений памяти программное обеспечение NELIAC позже было переписано на ассемблере. NELIAC использовался для реализации экспериментальной бортовой системы противолодочной борьбы, а также для разработки проекта Национального чрезвычайного командного пункта на плаву (NECPA), который разрабатывал стратегическую систему командования и управления, устанавливаемую на авианосцах и крейсерах. Пожалуй, самым успешным применением NELIAC был контроль автоматизированной сети высокочастотного пеленгования ВМС США (Classic Bullseye), запущенной в производство в 1968 году и просуществовавшей до начала 1990-х годов. Кроме того, NEL разработала NELOS — пакетную операционную систему, обеспечивавшую ввод/вывод для магнитных лент, принтеров и телекоммуникационного оборудования, последовательную компиляцию заданий и библиотеку символов, позволявшую связывать очень большие компьютерные приложения и выполнять их в режиме реального времени. В состав этих пакетов входили программы управления информацией, включая базы данных, свободные запросы с предшественником ГИС IBM и приложения для отчетности. NECPA и NELOS были развернуты в 1966 году.

Конец NELIAC

Однако программы NELIAC не были легко переносимы, поскольку язык допускал манипулирование двоичными символами, зависящими от длины машинного слова. Кроме того, в языке NELIAC отсутствовали средства ввода-вывода. Также его оператор цикла был необычайно строгим: переменная-индекс должна была точно достигать конечного значения, иначе возникал бесконечный цикл. Это и были слабые места NELIAC. Многие другие известные специалисты в области вычислительной техники, такие как Никлаус Вирт, внесли вклад в проект, но в конечном итоге NELIAC утратил популярность после того, как военно-морское ведомство стандартизовалось на компиляторах с коммерческой поддержкой.