Первая проблема при попытке научить себя COBOL - это выяснить, как установить язык, предназначенный для мэйнфреймов, на современную машину. Это не могло быть так просто, как brew install cobol?

Оказывается… да, можно что-то подобное. Несмотря на то, что практически никто больше не изучает COBOL, небольшая группа программистов поддерживает набор инструментов для COBOL на современных машинах. Последний стабильный выпуск GnuCOBOL (ранее OpenCOBOL) был выпущен пять месяцев назад. Для пользователей Mac, таких как я, его можно безболезненно установить с помощью команды brew install gnu-cobol.

Но, честно говоря, COBOL не устанавливается на ваш компьютер. GnuCOBOL - это транспилятор, который разбирает COBOL и преобразует его в C перед компиляцией. Это немного похоже на обман. Я оказался вовлеченным в философские дебаты о том, «что вообще значит установить язык?» COBOL был разработан для взаимодействия, вот в чем весь смысл. Так что установка его на компьютер через транспиллер кажется антиклиматической.

Многие люди ошибочно полагают, что Грейс Хоппер изобрела COBOL как первый англоязычный язык программирования, читаемый человеком. По правде говоря, COBOL был разработан правительственным комитетом, сильно заимствованным из работы Хоппера над FLOW-MATIC от Unisys ... до такой степени, что можно утверждать, что от 80% до 90% исходного синтаксиса и структуры COBOL были взяты непосредственно из FLOW-MATIC Хоппера. Были и другие языки, которые использовались в COBOL (в основном AIMACO ВВС и COMTRAM IBM), но в то время они не работали.

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

Правительство (а точнее военные) тратило сотни миллионов долларов на написание разных программ для одной компьютерной системы, а затем на переписывание одной и той же программы для другой компьютерной системы. Одно только министерство обороны США увеличило расходы на более чем 2 миллиарда долларов в сегодняшних деньгах. COBOL рассматривался как решение этой проблемы: язык, понятный всем компьютерам. В то время это было довольно новаторски. Никто всерьез не рассматривал переносимость как элемент языка. Даже первая реализация LISP была тесно связана с IBM 740.

Ирония этой ситуации заключается в том, что вместо этого правительство тратит миллиарды долларов на поддержку программ COBOL.

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

Когда первые черновики COBOL были готовы, Министерство обороны просто заявило компьютерной индустрии, что они не будут покупать компьютеры, которые не поддерживают COBOL. В то время как все основные производители в то время (Burroughs, IBM, Honeywell Labs, RCA, Sperry Rand и Sylvania) работали над своими собственными языками высокого уровня, ни один из них не хотел терять миллионы долларов, ведя бизнес с представляемым Министерством обороны США. .

И как только они все поддержали COBOL, COBOL стал языком, на котором все остальные тоже сделали это по умолчанию.

Однако для современных компьютеров поддержка COBOL означает сначала компиляцию на какой-нибудь другой язык высокого уровня. Хотите запустить COBOL на своем Raspberry Pi? ElasticCOBOL перенесет его на Java за вас. COBOLScript преобразует его в Javascript. Вот небольшой проект по переносу COBOL на Ruby.

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

Однако, если вы хотите сделать что-то сложным, на самом деле есть пара сообщений в блоге о превращении Raspberry Pi в мэйнфреймы. В конце концов, ранние мэйнфреймы имели небольшую долю памяти и вычислительной мощности, чем устройства, продаваемые любителям. То же самое программное обеспечение (эмулятор с открытым исходным кодом Hercules) работает в Linux, поэтому при желании может быть использовано для превращения любого компьютера в мэйнфрейм в стиле 1960-х годов.

И не думайте, что войти в мир COBOL означает отказаться от современных инструментов разработки. IBM выпустила серию плагинов для Eclipse. Существует IDE для COBOL, написанная на Python. Кто-то даже придумал, как сканировать код COBOL с помощью Sonar и интегрировать его с Jenkins.

Некоторые из них, вероятно, пригодятся, когда я приступлю к своей первой задаче кодирования на COBOL: математике. Будьте на связи!