Введение

Язык программирования CAL, сокращение от Conversational Algebraic Language, был языком программирования и системой, разработанной Батлером Лэмпсоном в Беркли в 1967 году для мэйнфрейма SDS 940. CAL является версией основополагающего языка JOSS с рядом улучшений и новыми возможностями, чтобы в полной мере использовать преимущества платформы SDS. Berkeley SDS использовался для разработки коммерческой платформы совместного использования времени Tymshare, а усовершенствованная версия CAL была предложена клиентам Tymshare в качестве среды программирования в 1969 году. Несмотря на то, что CAL практически не использовался, он оказал значительное влияние, повлияв на разработку Tymshare SUPER BASIC, который позаимствовал многие его функции. Некоторые из этих функций, в свою очередь, появились в BASIC PLUS для PDP 11, являющемся прямым предком Microsoft BASIC.

Основные понятия

JOSS был разработан для использования не-программистами в ВВС США и в Rand Corporation, и для облегчения этого Rand разработал специализированные компьютерные терминалы, которые было проще настраивать и использовать. Эти терминалы, основанные на пишущей машинке IBM Selectric, также включали пользовательский набор символов, реализующий распространенные математические символы, такие как и . В значительной степени CAL являлась версией JOSS, которая заменяла подобные настройки более распространенными решениями, такими как и , чтобы обеспечить возможность работы на стандартных терминалах. Другими заметными отличиями были то, что CAL использовал только заглавные буквы, в отличие от стандартного написания предложений в JOSS, и не требовал точки в конце строки. Команды в обоих языках были почти идентичны, а общая структура и синтаксис оставались одинаковыми. Как и в JOSS, CAL имел интерактивный пользовательский интерфейс, позволявший пользователю вводить операторы в "прямом режиме" или программы для выполнения в "косвенном режиме". В BASIC подобный режим чаще называют "непосредственным режимом". И CAL, и JOSS использовали двухкомпонентный номер строки, известный как "часть" и "шаг", разделенные точкой, например, для части 1 шаг 100. "Части" обычно использовались для группировки связанных операторов в подпрограммы. В CAL номер части мог быть от 0 до 999999, а шаг – от 0 до 99999. Существовали две основные версии CAL, выпущенные в 1967 и 1969 годах. Дальнейшее описание будет основано преимущественно на первой версии, если не указано иное.

Скоки и подпрограммы

Как и в JOSS, CAL поддерживала команду перехода к указанной части или шагу, как в or , и для вызовов подпрограмм, как в для выполнения всей части, или для запуска только этого шага с последующим возвратом. Последний синтаксис был удобен при большом количестве небольших подпрограмм, так как их можно было реализовать в одну строку без использования связанной или аналогичной конструкции.

Круги

Периодическое выполнение в JOSS также контролировалось модификатором, который использовал несколько запутанный синтаксис из FORTRAN; выполняет цикл от 1 до 10 с шагом 2, поэтому он будет выводить 1, 3, 5, 7, 9. Можно было также указывать конкретные значения, или комбинировать оба способа.

CAL улучшил синтаксис JOSS, введя ключевые слова `TO` и `STEP`, так что эквивалентный код в CAL будет выглядеть следующим образом. В JOSS скобки вокруг значения шага служили разделителем для верхнего и нижнего пределов, поэтому их нельзя было опустить. Разделив пределы, они стали явными, а шаг можно было опустить, подразумевая значение 1. Как и в JOSS, можно было использовать как конкретные значения, так и диапазоны; CAL дополнительно модифицировал цикл `FOR`, добавив условные выходы с помощью `EXIT` и `NEXT`. Например, `EXIT WHEN condition` или `NEXT WHEN condition`.

Функции, определяемые пользователем

JOSS позволял пользователю определять функции с помощью оператора. Синтаксис позволял указывать локальные переменные в сигнатуре функции; программы могли затем вызывать эти функции как встроенные.

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

Более существенным изменением в функциях CAL стала возможность вызывать подпрограммы из определений с помощью , как в примере . Это породило вопрос о присвоении полученного вычисленного значения обратно функции, который был решен с помощью оператора в конце блока, где Z – конечное возвращаемое значение.

Другие изменения

CAL включал математические функции JOSS, но добавил несколько новых, включая , , , и . Он также добавил новый оператор , который возвращал остаток от деления двух его операндов.

Прямой режим

CAL добавил небольшое количество команд прямого режима и соответствующих операторов. При обнаружении в программе, они выводили сообщение "PAUSED AT STEP 1.1" и затем возвращались в прямой режим. Это было аналогично команде BREAK в BASIC. Это позволяло пользователю вводить значения и продолжать выполнение с помощью CONTINUE. Находясь в прямом режиме, пользователь мог пошагово, по одной строке за раз, отслеживать выполнение программы.

Улучшения в CAL 1969

Одним из незначительных изменений в версии 1969 года стало исключение команды присваивания переменным. В JOSS она была необязательной в интерактивном режиме, но обязательной в программных операторах, и версия CAL 1967 года придерживалась этого правила. Версия 1969 года сделала её необязательной в обоих случаях.