Пишу, по большей части, про историю, свою жизнь и немного про программирование.

«Здравствуй, мир» на Коболе

Я как-то проверял сколько занимает минимальная программа на «Гоу», оказалось — 232КБ. Посмотрел как дела с этим у Кобола. «ОупенКобол» скомпилировал мой helloword в девятикилобайтный запускаемый файл, что неплохо — сишный вариант у меня занял всего на килобайт меньше.

Вот так выглядит моя первая программа на Коболе:

000100*Моя первая программа на Коболе
000200 IDENTIFICATION DIVISION.
000300 PROGRAM-ID. hw.
000400 AUTHOR. Evgeny Stepanischev
000500 PROCEDURE DIVISION.
000600      DISPLAY "Привет, мир!".
000700      STOP RUN.

Первые шесть символов каждой строки — её номер, как легко догадаться. В современном Коболе их можно опустить (OpenCobol поддерживает этот синтаксис с ключом «-free»). Дальше идёт специальный символ, один из четырёх, насколько я знаю. Пробел — значит дальше начало новой строки кода, «звёздочка» — комментарий, минус — продолжение предыдущей строки кода (строки не должны быть длинее 80 символов) и «D» — некий «debug», для чего он, я пока не знаю.

В старом Коболе очень жёсткий порядок всего и вся. Мало того, что секции программы должны быть описано в строгом порядке, так ещё и столбец тоже имеет значение! То есть Кобол строго следит за отступами. Например, мой код с DISPLAY и STOP RUN начинается с 12-го символа. Так надо. А c 73 символа до 80-й можно писать что угодно — проигнорируется.

Язык очень многословный и имеет целую тучу зарезервированных слов, некоторые из которых весьма доставляют:

bolk@Bolk ~/Projects/Cobol  $ cobc --list-reserved | wc -l
     530

bolk@Bolk ~/Projects/Cobol  $ cobc --list-reserved | egrep '[[:digit:]]' | egrep -v 'UTF|UCS|FLOAT'
COMP-1				(Y)
COMP-2				(Y)
COMP-3				(Y)
COMP-4				(Y)
COMP-5				(Y)
COMPUTATIONAL-1			(Y)
COMPUTATIONAL-2			(Y)
COMPUTATIONAL-3			(Y)
COMPUTATIONAL-4			(Y)
COMPUTATIONAL-5			(Y)
STANDARD-1			(Y)
STANDARD-2			(Y)
SUB-QUEUE-1			(N)
SUB-QUEUE-2			(N)
SUB-QUEUE-3			(N)

Как я буду учить это всё великолепие, пока не знаю, не уверен, что интерес к языку у меня настолько глубок. Впрочем, может оказаться, что бо́льшая часть из указанных 530 зарезервированных слов нужны в жизни очень редко. А ещё, бегло пробежавшись по документации, я нашёл большое количество синонимов. За примерами далеко ходить не надо, «COMP-N» и «COMPUTATIONAL-N» из вышеприведённого листинга — синонимы.

10 комментариев
voldmar (voldmar.ru) 2011

Встретил сейчас фразу «The code samples are in COBOL, but other than that the article is quite accessible.», тебя вспомнил. Из статьи http://eli.thegreenplace.net/2011/10/28/an-observation-on-writing-line-processing-loop-code/

Трудорг 2011

Ух ты. Даже не слышал о таком. :)

Евгений Степанищев (bolknote.ru) 2011

Комментарий для Трудорг:

О Коболе-то? Популярнейший язык на самом деле. А программистов почти нет.

К 1997 году активно использовалось около 240 миллиардов строк кода на Коболе. Около 90 % финансовых транзакций в мире обрабатывается кодом на Коболе, и 75 % коммерческой обработки данных написано на Коболе. Общая стоимость используемого в настоящее время коболовского кода оценивается в 2 триллиона долларов США. До сих пор ежегодно пишутся миллиарды новых строк кода на Коболе.

Из «Википедии» ( http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B1%D0%BE%D0%BB )

runforyou.ru/ 2011

Да интересно тоже не слышал!

Orcinus Orca (www.orcinus.ru) 2011

Народ, это древний язык. Мы еще скажите, что Модула-два не знаете. Тоже шикарный язык, ориентированный на системных программистов. Если бы не Борланд, то модула давно бы заткнула за пояс Паскаль!

Евгений Степанищев (bolknote.ru) 2011

Комментарий для www.orcinus.ru:

Глядишь, новый тренд образуется — учить Кобол :-D

Orcinus Orca (www.orcinus.ru) 2011

всё возможно. Но я считаю кобол морально устаревшим. По этому я его могу выучить лишь ради спортивного интереса и тренировки мозгов.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для www.orcinus.ru:

Я тоже считаю его морально устаревшим :)

funk_rabbit (funk-rabbit.livejournal.com) 2011

Комментарий для Евгения Степанищева:

Ты наверное в курсе но не все знают что шестизначная нумерация и спец символ для статуса строки — особенность не столько Кобола или Фортрана сколько платформы на которой они работали. Эти ограничения вызваны перфокартами, в том числе писать номер через десяток ли сотню строк.

Каждая перфокарта — строка программы длиной в 80 символов. для того что бы человек не запутался в программе — первые шесть отдали под нумерацию. Т. к. человек не мог быть уверенным что ему не придется изменять код — по умолчанию люди нумеровали строки через десятки или сотни — дабы не перебивать кучу перфокарт в последствии, если место под нумерацию не хватило.

А еще частенько на перфокарту частенько сверху набивали код пробитый на перфокарте и иногда — комментарии к нему.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для funk-rabbit.livejournal.com:

Спасибо, важный экскурс.

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