CAL (язык программирования) - CAL (programming language)
CAL, Короче для Разговорный алгебраический язык, был язык программирования и система разработан и разработан Батлер Лэмпсон в Беркли в 1967 году для SDS 940 универсальный компьютер. CAL - это версия оригинального JOSS язык с рядом исправлений и новых функций, чтобы воспользоваться преимуществами платформы SDS.
Паспорт безопасности Беркли использовался для разработки Тимшаре коммерческий совместное времяпровождение платформа и улучшенная версия CAL была предложена в качестве среды программирования для своих клиентов в 1969 году. Хотя CAL «почти бесполезна», она оказала долгосрочное влияние, оказав влияние на дизайн Tymshare SUPER BASIC который скопировал ряд его особенностей. Некоторые из этих функций, в свою очередь, появились в БАЗОВЫЙ-ПЛЮС на PDP-11, который является прямым предком Microsoft BASIC.[1]
Описание
Базовые концепты
JOSS был разработан для использования непрограммистами в ВВС США и внутри Rand Corporation, и для этого Рэнд разработал индивидуальный компьютерные терминалы которые было проще настроить и использовать. Эти терминалы, основанные на 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 поддерживает К
команда для перехода к предоставленной части или шагу, как в К ЧАСТИ 3
или же К ШАГУ 4.5
, и ДЕЛАТЬ
для вызовов подпрограмм, как в СДЕЛАТЬ ЧАСТЬ 9
исполнить всю партию или СДЕЛАТЬ ШАГ 5.1
выполнить этот единственный шаг, а затем вернуться. Более поздний синтаксис был полезен, когда было много небольших подпрограмм, поскольку они могли быть реализованы в одной строке без связанного ВОЗВРАЩАТЬСЯ
или аналогичная концепция.[5]
Условное ветвление и присваивание
Одной из наиболее заметных синтаксических особенностей JOSS была концепция «модификаторов операторов», которые управляли работой других операторов. JOSS использовал это для условного перехода.
В большинстве языков можно написать что-нибудь вроде «если это выражение истинно, то сделай это ...». В JOSS этот порядок был изменен на противоположный, и такие утверждения имели форму «сделай это, если это правда», например, Введите «HELLO», если X = 5.
. CAL добавил несколько синтаксический сахар к этой базовой концепции, добавив новый модификатор ПОКА НЕ
, что, в зависимости от контекста, приводило к более очевидному коду; ТИП «НЕ РАВНО ПЯТИ», ЕСЛИ X = 5
.[6]
Итак, чтобы присвоить значение 5 переменной A, если значение B было больше 10, и 0 в противном случае, код будет следующим:
Установите A = 5, если B> 10. Установите A = 0, если B <= 10.
CAL также поддерживается условные выражения:[7]
A = ЕСЛИ B> 10 ТО 5 ИНАЧЕ 0
Аналогичной модификацией стала КУДА
оператор, используемый для установки переменных как часть if или for. Она была похожа по концепции на структуру if / then / else, но могла иметь любое количество элементов. Например,= A * B, ГДЕ A = B ДО А> 20, ГДЕ A = 1 ДО А> 100
.[8]
Петли
Зацикливание в JOSS также контролировалось модификатором За
. Это использовало несколько неясный синтаксис; Введите i для i = 1 (2) 10.
выполняет цикл от 1 до 10, шаг за шагом 2, поэтому он напечатает 1,3,5,7,9. Можно также указать явные значения, Введите i для i = 1,5,6,7,10.
, или смешайте два, Введите i для i = 1,5 (1) 7,10.
CAL улучшила синтаксис JOSS, добавив К
и К
ключевые слова, поэтому эквивалентный код в клиентской лицензии будет ТИП I ДЛЯ I = 1 НА 2 ДО 10
. В JOSS скобка вокруг значения шага была разделителем для двух пределов, поэтому его нельзя было сделать необязательным. Выделяя К
пределы стали явными, и К
был сделан необязательным, как предполагалось, как 1; ТИП I ДЛЯ I = от 1 до 10
. Как и в случае с JOSS, можно использовать явные значения и диапазоны; ТИП I ДЛЯ I = 1,5 TO7, 10
. CAL дополнительно изменила цикл for, добавив условные выходы, используя ПОКА
и ДО ТОГО КАК
. Например, ТИП A ДЛЯ A = 1 НА 1, ЕСЛИ A <= 50
или же ТИП B ДЛЯ B = 1 ДО А = 50
.[9]
Пользовательские функции
JOSS позволял пользователю определять функции с помощью Позволять
утверждение. Синтаксис позволял именовать локальные переменные в сигнатуре функции; Пусть F (X, Y) = X + Y.
Затем программы могут вызывать эти функции, как если бы они были встроенными, Установите A = F (1,5).
CAL изменена Позволять
к ОПРЕДЕЛЯТЬ
, что гораздо более очевидно и с более незначительными изменениями, параметры были переданы с использованием фигурных скобок вместо скобок, поэтому эквивалентное определение будет УКАЗАТЬ F [X, Y] = X + Y
и так же звонил, УСТАНОВИТЬ A = F [1,5]
.[10]
Более важным изменением в функциях клиентской лицензии стала возможность вызывать подпрограммы из определений с использованием К
, как в ОПРЕДЕЛЕНИЕ F (X, Y): К ЧАСТИ 5
.[а] Это оставило проблему присвоения результирующего вычисленного значения функции, которая была решена с введением ВОЗВРАТ Z
оператор в конце части, где Z - окончательное возвращаемое значение.[10]
Прочие изменения
CAL включает математические функции JOSS, но добавляет ряд новых, включая АБС
, TAN
, ЗАГАР
, и LOG10
.[11] Он также добавил нового оператора, MOD
, который вернул остаток от деления двух его операндов.[12]
Прямой режим
CAL добавила небольшое количество команд прямого режима и связанных операторов.
ПАУЗА
при обнаружении в программе выводит сообщение «PAUSED AT STEP 1.1» и затем возвращается в прямой режим. Это было похоже на ОСТАНОВКА
команда на БЕЙСИКЕ. Это позволило пользователю ввести значения и продолжить выполнение с ИДТИ
.[13] В прямом режиме пользователь мог ШАГ
по одной строке за раз, чтобы отслеживать выполнение программы.[13]
CAL изменил JOSS ' Позволять
пользовательская функция в несколько более очевидном ОПРЕДЕЛЯТЬ
, а также изменив список параметров, чтобы использовать [] вместо (). В JOSS они обычно находились в прямом режиме, тогда как в CAL они были разрешены только в прямом режиме. Например, можно было ОПРЕДЕЛЕНИЕ F [N] = PROD (I FOR I = 1 TO N)
. Этот пример также демонстрирует способность JOSS использовать диапазон цикла в качестве входных данных для функции.[14] В отличие от JOSS, CAL позволяла выполнять многоэтапные функции, добавляя дополнительные операторы, разделенные двоеточием, например, ОПРЕДЕЛИТЬ X [A, B, C]: ДЕЛАТЬ ЧАСТЬ 5
. Обратите внимание, что в этом примере нет тела, он просто вызывает c
Улучшения в CAL 1969
Одним из незначительных изменений в версии 1969 года было устранение НАБОР
команда для присвоение переменной. Это было необязательно в прямом режиме в JOSS, но требовалось в операторах программы, и версия CAL 1967 года следовала этому правилу.[15] Версия 1969 года сделала его необязательным в обоих случаях.
Сноски
- ^ Учитывая, что DO обычно используется для вызова подпрограмм, неясно, почему они выбрали TO в этом случае.
Рекомендации
Цитаты
- ^ Лэмпсон, "Системы", Исследование, Microsoft.
- ^ Ручная 1969, п. 7.
- ^ Ручная 1969, п. 23.
- ^ Ручная 1969, п. 11.
- ^ Ручная 1969, п. 15, 26.
- ^ Ручная 1969, п. 12.
- ^ Ручная 1969, п. 14.
- ^ Ручная 1969, п. 21.
- ^ Ручная 1969, п. 13.
- ^ а б Ручная 1967, п. 27.
- ^ Ручная 1967, п. 9.
- ^ Ручная 1967, п. 10.
- ^ а б Ручная 1967, п. 25.
- ^ Ручная 1967, п. 26.
- ^ Ручная 1967, п. 8.
Библиография
- Лэмпсон, Батлер (июнь 1969 г.). CAL (PDF). Tymshare.
- Лэмпсон, Батлер (июнь 1967). Справочное руководство CAL для компьютерных систем с разделением времени SDS 940 (PDF). Системы научных данных.