«Здравствуй, мир» на Коболе
Я как-то проверял сколько занимает минимальная программа на «Гоу», оказалось — 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» из вышеприведённого листинга — синонимы.
Встретил сейчас фразу «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/
Ух ты. Даже не слышал о таком. :)
Комментарий для Трудорг:
О Коболе-то? Популярнейший язык на самом деле. А программистов почти нет.
Из «Википедии» ( http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B1%D0%BE%D0%BB )
Да интересно тоже не слышал!
Народ, это древний язык. Мы еще скажите, что Модула-два не знаете. Тоже шикарный язык, ориентированный на системных программистов. Если бы не Борланд, то модула давно бы заткнула за пояс Паскаль!
Комментарий для www.orcinus.ru:
Глядишь, новый тренд образуется — учить Кобол :-D
всё возможно. Но я считаю кобол морально устаревшим. По этому я его могу выучить лишь ради спортивного интереса и тренировки мозгов.
Комментарий для www.orcinus.ru:
Я тоже считаю его морально устаревшим :)
Комментарий для Евгения Степанищева:
Ты наверное в курсе но не все знают что шестизначная нумерация и спец символ для статуса строки — особенность не столько Кобола или Фортрана сколько платформы на которой они работали. Эти ограничения вызваны перфокартами, в том числе писать номер через десяток ли сотню строк.
Каждая перфокарта — строка программы длиной в 80 символов. для того что бы человек не запутался в программе — первые шесть отдали под нумерацию. Т. к. человек не мог быть уверенным что ему не придется изменять код — по умолчанию люди нумеровали строки через десятки или сотни — дабы не перебивать кучу перфокарт в последствии, если место под нумерацию не хватило.
А еще частенько на перфокарту частенько сверху набивали код пробитый на перфокарте и иногда — комментарии к нему.
Комментарий для funk-rabbit.livejournal.com:
Спасибо, важный экскурс.
Строки нумеровали через десятки и сотни и сильно позже перфокарт — в Бейсиках, например. Просто из-за того, что так было проще вставить позже несколько строк кода, не перенумеровывая потом всё и не меняя переходы (напоминаю читателям, что в старых Бейсиках переходы и вызовы подпрограмм осуществлялись по номеру строки).