Введение
Язык программирования 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.
CAL, short for Conversational Algebraic Language, was a programming language and system designed and developed by Butler Lampson at Berkeley in 1967 for the SDS 940 mainframe computer. CAL is a version of the seminal JOSS language with several cleanups and new features to take advantage of the SDS platform. The Berkeley SDS was used for the development of the Tymshare commercial time sharing platform and an improved version of CAL was offered as a programming environment to its customers in 1969. Although CAL saw "almost no use", it had a lasting impact by influencing the design of Tymshare SUPER BASIC which copied a number of its features. Some of those features, in turn, appeared in BASIC PLUS on the PDP 11, which is the direct ancestor of 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 годах. Дальнейшее описание будет основано преимущественно на первой версии, если не указано иное.
To a large degree, CAL was a version of JOSS that replaced these sorts of customizations with more common solutions like and so they could run on common terminals. The other noticeable differences were that CAL was all upper case, as opposed to sentence casing in JOSS, and it did not require a period at the end of the line. The commands were otherwise almost identical and the overall structure and syntax were the same. As with JOSS, CAL had an interactive user interface that allowed the user to type in statements in "direct mode" or programs to be run in "indirect mode". In BASIC, the former is more commonly referred to as "immediate mode". Both CAL and JOSS used a two part line number, known as the part and step, separated by a period, for instance, for part 1 step 100. Parts were generally used to group related statements into subroutines. In CAL, the part number could be between 0 and 999999, and the step from 0 to 99999. There were two main versions of CAL, released in 1967 and 1969. The following description will be based primarily on the former version unless otherwise noted.
Скоки и подпрограммы
Как и в 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 changed to , which is much more obvious, and made a more minor change the parameters were passed in using braces instead of parenthesis, so the equivalent definition would be and called in the same way,
A more important change to CAL's functions was the ability to call subroutines from the definitions using , as in This left the issue of assigning the resulting calculated value back to the function, which was addressed with the introduction of the statement at the end of the part, where Z is the final value to be returned.
CAL изменился на , что гораздо более наглядно, и внес небольшое изменение: параметры передавались в фигурных скобках вместо круглых, поэтому эквивалентное определение выглядело бы , а вызов оставался прежним.
CAL changed to , which is much more obvious, and made a more minor change the parameters were passed in using braces instead of parenthesis, so the equivalent definition would be and called in the same way,
A more important change to CAL's functions was the ability to call subroutines from the definitions using , as in This left the issue of assigning the resulting calculated value back to the function, which was addressed with the introduction of the statement at the end of the part, where Z is the final value to be returned.
Более существенным изменением в функциях CAL стала возможность вызывать подпрограммы из определений с помощью , как в примере . Это породило вопрос о присвоении полученного вычисленного значения обратно функции, который был решен с помощью оператора в конце блока, где Z – конечное возвращаемое значение.
CAL changed to , which is much more obvious, and made a more minor change the parameters were passed in using braces instead of parenthesis, so the equivalent definition would be and called in the same way,
A more important change to CAL's functions was the ability to call subroutines from the definitions using , as in This left the issue of assigning the resulting calculated value back to the function, which was addressed with the introduction of the statement at the end of the part, where Z is the final value to be returned.
Другие изменения
CAL включал математические функции JOSS, но добавил несколько новых, включая , , , и . Он также добавил новый оператор , который возвращал остаток от деления двух его операндов.
Прямой режим
CAL добавил небольшое количество команд прямого режима и соответствующих операторов. При обнаружении в программе, они выводили сообщение "PAUSED AT STEP 1.1" и затем возвращались в прямой режим. Это было аналогично команде BREAK в BASIC. Это позволяло пользователю вводить значения и продолжать выполнение с помощью CONTINUE. Находясь в прямом режиме, пользователь мог пошагово, по одной строке за раз, отслеживать выполнение программы.
Улучшения в CAL 1969
Одним из незначительных изменений в версии 1969 года стало исключение команды присваивания переменным. В JOSS она была необязательной в интерактивном режиме, но обязательной в программных операторах, и версия CAL 1967 года придерживалась этого правила. Версия 1969 года сделала её необязательной в обоих случаях.