CAL (язык программирования)
CAL , сокращение от разговорного алгебраического языка , был языком программирования и системой , спроектированной и разработанной Батлером Лэмпсоном в Беркли в 1967 году для SDS 940 мейнфрейма . CAL — это версия оригинального языка JOSS с несколькими усовершенствованиями и новыми функциями, позволяющими использовать преимущества платформы SDS.
Berkeley SDS использовалась для разработки Tymshare коммерческой платформы разделения времени , а улучшенная версия CAL была предложена ее клиентам в качестве среды программирования в 1969 году. Хотя CAL «почти не использовалась», она оказала длительное влияние, повлияв на дизайн Tymshare SUPER BASIC , копирующий ряд его особенностей. Некоторые из этих функций, в свою очередь, появились в BASIC-PLUS на PDP-11 , который является прямым предком Microsoft BASIC . [ 1 ]
Описание
[ редактировать ]Основные понятия
[ редактировать ]JOSS был разработан для использования непрограммистами в ВВС США и в корпорации Rand , и чтобы помочь в этом, компания Rand разработала специальные компьютерные терминалы , которые было легче настроить и использовать. Эти терминалы, основанные на пишущей машинке IBM Selectric , также включали специальный набор символов , в котором реализованы общие математические символы, такие как ≥
и ≠
.
В значительной степени CAL была версией JOSS, которая заменила подобные настройки более распространенными решениями, такими как >=
и #
чтобы они могли работать на общих терминалах. [ 2 ] Другие заметные различия заключались в том, что CAL был в верхнем регистре, в отличие от набора предложений в JOSS, и не требовал точки в конце строки. [ 3 ] В остальном команды были почти идентичны, а общая структура и синтаксис были одинаковыми.
Как и в случае с JOSS, CAL имела интерактивный пользовательский интерфейс , который позволял пользователю вводить операторы в «прямом режиме» или запускать программы в «косвенном режиме». В BASIC первый режим чаще называют «немедленным режимом». , состоящий из двух частей И CAL, и JOSS использовали номер строки , известный как часть и шаг, разделенных точкой, например: 1.100
для части 1 шаг 100. Части обычно использовались для группировки связанных операторов в подпрограммы. В CAL номер детали может находиться в диапазоне от 0 до 999999, а шаг — от 0 до 99999. [ 4 ]
Существовали две основные версии CAL, выпущенные в 1967 и 1969 годах. Следующее описание будет основано в основном на первой версии, если не указано иное.
Переходы и подпрограммы
[ редактировать ]Как и в JOSS, CAL поддерживает TO
команда для перехода к предоставленной части или шагу, как в TO PART 3
или TO STEP 4.5
, и DO
для вызовов подпрограмм, как в DO PART 9
исполнить всю часть или DO STEP 5.1
чтобы выполнить этот единственный шаг, а затем вернуться. Более поздний синтаксис был полезен, когда было много небольших подпрограмм, поскольку их можно было реализовать в одной строке без соответствующего кода. RETURN
или подобная концепция. [ 5 ]
Условное ветвление и присваивание
[ редактировать ]Одной из наиболее примечательных синтаксических особенностей JOSS была концепция «модификаторов операторов», которые контролировали работу других операторов. JOSS использовал это для условного ветвления.
На большинстве языков можно было бы написать что-то вроде: «Если это выражение истинно, то сделайте это...». В JOSS этот порядок был обратным, и такие утверждения принимали форму «сделай это, если это правда», например: Type "HELLO" if X=5.
. CAL добавила немного синтаксического сахара к этой базовой концепции, добавив новый модификатор UNLESS
, что, в зависимости от контекста, приводило к более очевидному коду; TYPE "IT IS NOT EQUAL TO FIVE" UNLESS X=5
. [ 6 ]
В JOSS, чтобы присвоить значение 5 переменной A, если значение B больше 10, и 0 в противном случае, код будет таким:
Set A=5 if B>10. Set A=0 if B<=10.
CAL также поддерживает условные выражения : [ 7 ]
A=IF B>10 THEN 5 ELSE 0
Похожая модификация была WHERE
оператор, используемый для установки переменных как часть if или for. По своей концепции она была похожа на структуру if/then/else, но могла содержать любое количество элементов. Например, =A*B WHERE A=B UNTIL A>20, WHERE A=1 UNTIL A>100
. [ 8 ]
Петли
[ редактировать ]Зацикливание в JOSS также контролировалось модификатором For
. При этом использовался несколько неясный синтаксис FORTRAN ; Type i for i=1(2)10.
запускает цикл от 1 до 10 с шагом 2, поэтому будет напечатано 1,3,5,7,9. Можно также указать явные значения, Type i for i=1,5,6,7,10.
, или смешайте их, Type i for i=1,5(1)7,10.
CAL усовершенствовал синтаксис JOSS, введя BY
и TO
ключевые слова, поэтому эквивалентный код в CAL будет TYPE I FOR I=1 BY 2 TO 10
. В JOSS скобка вокруг значения шага была разделителем двух пределов, поэтому ее нельзя было сделать необязательной. Выделив TO
границы стали явными, и BY
был сделан необязательным, поскольку предполагалось, что он равен 1; TYPE I FOR I=1 TO 10
. Как и в случае с JOSS, можно использовать явные значения и диапазоны; TYPE I FOR I=1,5 TO 7,10
. CAL дополнительно модифицировал цикл for, добавив условные выходы, используя WHILE
и UNTIL
. Например, TYPE A FOR A=1 BY 1 WHILE A<=50
или TYPE B FOR B=1 UNTIL A=50
. [ 9 ]
Пользовательские функции
[ редактировать ]JOSS позволял пользователю определять функции, используя Let
заявление. Синтаксис позволял называть локальные переменные в сигнатуре функции; Let F(X,Y)=X+Y.
Программы могли бы затем вызывать эти функции, как если бы они были встроенными. Set A=F(1,5).
Клиентская лицензия изменена Let
к DEFINE
, что гораздо более очевидно, и внесло более незначительное изменение: параметры передавались с использованием фигурных скобок вместо круглых скобок, поэтому эквивалентное определение будет выглядеть так: DEFINE F[X,Y]=X+Y
и звонил таким же образом, SET A=F[1,5]
. [ 10 ]
Более важным изменением в функциях CAL стала возможность вызывать подпрограммы из определений с помощью TO
, как в DEFINE F(X,Y) : TO PART 5
. [ а ] В результате оставалась проблема присвоения полученного вычисленного значения обратно функции, которая была решена с введением RETURN Z
оператор в конце части, где Z — последнее возвращаемое значение. [ 10 ]
Другие изменения
[ редактировать ]CAL включала математические функции JOSS, но добавляла несколько новых, в том числе ABS
, TAN
, ATAN
, и LOG10
. [ 11 ] Также добавлен новый оператор, MOD
, который вернул остаток от деления двух своих операндов. [ 12 ]
Прямой режим
[ редактировать ]В CAL добавлено небольшое количество команд прямого режима и связанных с ними операторов.
PAUSE
, когда он встречался в программе, выводил сообщение " ПРИОСТАНОВЛЕНО НА ЭТАПЕ 1.1 ", а затем вернулся в прямой режим. Это было похоже на STOP
команда на БЕЙСИКЕ. Это позволило пользователю вводить значения и продолжать выполнение с помощью GO
. [ 13 ] В прямом режиме пользователь может STEP
по одной строке за раз, чтобы отслеживать выполнение программы. [ 13 ]
Улучшения в CAL 1969
[ редактировать ]Одним незначительным изменением в версии 1969 года было исключение SET
команда присваивания переменных . Это было необязательно в прямом режиме в JOSS, но требовалось в операторах программы, и версия CAL 1967 года следовала этому правилу. [ 14 ] Версия 1969 года сделала это необязательным в обоих случаях.
Сноски
[ редактировать ]- ^ Учитывая, что DO обычно используется для вызова подпрограмм, неясно, почему в данном случае выбрали TO.
Ссылки
[ редактировать ]Цитаты
[ редактировать ]- ^ Лэмпсон, «Системы», Research , Microsoft .
- ^ Руководство 1969 г. , с. 7.
- ^ Руководство 1969 г. , с. 23.
- ^ Руководство 1969 г. , с. 11.
- ^ Руководство 1969 г. , с. 15, 26.
- ^ Руководство 1969 г. , с. 12.
- ^ Руководство 1969 г. , с. 14.
- ^ Руководство 1969 г. , с. 21.
- ^ Руководство 1969 г. , с. 13.
- ^ Jump up to: а б Руководство 1967 года , с. 27.
- ^ Руководство 1967 г. , с. 9.
- ^ Руководство 1967 г. , с. 10.
- ^ Jump up to: а б Руководство 1967 года , с. 25.
- ^ Руководство 1967 г. , с. 8.
Библиография
[ редактировать ]- Лэмпсон, Батлер (июнь 1969 г.). КАЛ (PDF) . Тимшер.
- Лэмпсон, Батлер (июнь 1967 г.). Справочное руководство по CAL для компьютерных систем с разделением времени SDS 940 (PDF) . Системы научных данных.