«Здравствуй, мир» на Коболе
Я как-то проверял сколько занимает минимальная программа на «Гоу», оказалось — 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» из вышеприведённого листинга — синонимы.