Что такое COBOL и его производительность, что делает его (по сравнению с его возрастом) таким быстрым? - PullRequest
5 голосов
/ 27 октября 2009

Прочитав некоторые из вопросов здесь, общая концепция, кажется, заключается в том, что там по-прежнему существует огромное количество кода COBOL "не там", не только потому, что это кошмар для реорганизации или перекодирования, но просто потому, для определенного сегмента рынка (финансовые показатели и т. д.) она зарекомендовала себя более чем способной удержать свою собственную. Но что такое в языке, который вызывает его? Как может нечто, которому уже несколько десятилетий, продолжать работать достаточно хорошо, чтобы противостоять более современным языкам со всеми соответствующими усовершенствованиями в управлении памятью и т. Д.? Компиляторы COBOL и т. Д. Просто улучшились в фоновом режиме? Или что-то присуще языку, который означает, что он чрезвычайно эффективен для данного набора операций?

Ответы [ 5 ]

11 голосов
/ 27 октября 2009

Язык COBOL был разработан в 1950-х годах, чтобы соответствовать возможностям медленных машин с ограниченным объемом оперативной памяти, доступных в то время. Не говоря уже об отсутствии интерактивных терминалов. Многие аспекты конструкции сделаны так, чтобы их было легко компилировать в простой машинный код без оптимизации. Например, нет переменных. Только один блок рабочего хранилища с именами, которые ссылаются на байтовые массивы определенной фиксированной длины, начиная с фиксированного местоположения. Программы на языке COBOL компилируются в эффективный машинный код по своему замыслу.

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

Так что отчасти причина в том, что код был переносим на новые архитектуры ЦП, поскольку он был языком высокого уровня, но при этом был очень эффективным, поскольку он был разработан, чтобы не использовать причудливые функции, подобные тем, что были в ALGOL-60, предке C. И отчасти причина в том, что COBOL эволюционировал, чтобы соответствовать новым операционным системам и возможностям. Например, базы данных SQL - это просто более сложные формы простых таблично-ориентированных файлов, которые COBOL был разработан для обработки. Оверлейные линкеры позволяли писать огромные программы на языке COBOL до тех пор, пока выполнение выполнялось примерно последовательно. Любая функция, которая была лучше реализована в Ассемблере, PL / 1 или FORTRAN, может быть доступна через вызовы PROCEDURE.

Самым близким современным языком к COBOL является Python, потому что вы можете писать чистые программы, которые почти читают как английский, без посторонней пунктуации везде, но вы можете использовать большую и сложную библиотеку функций, вместо того, чтобы постоянно кодировать свою собственную. Конечно, Python принял все функции ALGOL-60 и более, потому что он был разработан в современную эпоху, когда вам не нужно помещать все в 16 КБ ОЗУ.

4 голосов
/ 05 ноября 2009

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

Даже, казалось бы, чудовищные государственные деятели, такие как: -

PERFORM BEGIN-PARA THROUGH END-PARA VARYING I FROM 1 BY 2 TO MAX_ARRAY.

Переводит примерно до восьми инструкций по сборке (только одна из которых находится внутри цикла)

3 голосов
/ 27 октября 2009

Это потому, что программы на COBOL (по крайней мере, старые) очень просто структурированы, так что совсем нетрудно скомпилировать их в эффективный машинный код. Например, «старые добрые» программы на cobol не нуждаются в эффективном управлении памятью, потому что динамическое выделение памяти просто не происходит; расположение памяти фиксируется во время компиляции.

1 голос
/ 26 февраля 2013

Тихое преимущество COBOL давно заключается в том, что сам язык отделяет данные от инструкций. Данные хранятся в DIVISION DATAISION, а код хранится на расстоянии вытянутой руки в PROCEDURE DIVISION. Это помогает стимулировать написание процедур без сохранения состояния, что является критическим аспектом написания модульного, легко тестируемого кода. В этом отношении COBOL опередил объектно-ориентированных людей - урок, который многие люди из C ++ и Java забыли 15 лет назад.

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

Это одна из причин, по которой КОБОЛ все еще используется на удивление широко. Поскольку он модульный, его можно использовать повторно, поэтому люди продолжают его использовать. И почему бы нет? Это оплачено.

1 голос
/ 27 октября 2009

Еще один момент, если в финансовом контексте предпочтение или COBOL заключается в том, что он предоставляет собственные типы данных и математические операторы для выполнения десятичной арифметики с фиксированной запятой (см .: [Packed Decimal] [1]).

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

Немногие языки, кроме COBOL, PL / 1 и Algol, могут эффективно выполнять арифметику в десятичной фиксированной точке. Мэйнфреймские компьютеры IBM имеют выделенные аппаратные схемы для выполнения вычислений в BCD, что помогает поддерживать производительность COBOL где-то в стратосфере.

[1]: http://en.wikipedia.org/wiki/Packed_decimal"Packed Десятичное число "

...