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 года сделала его необязательным в обоих случаях.

Сноски

  1. ^ Учитывая, что DO обычно используется для вызова подпрограмм, неясно, почему они выбрали TO в этом случае.

Рекомендации

Цитаты

  1. ^ Лэмпсон, "Системы", Исследование, Microsoft.
  2. ^ Ручная 1969, п. 7.
  3. ^ Ручная 1969, п. 23.
  4. ^ Ручная 1969, п. 11.
  5. ^ Ручная 1969, п. 15, 26.
  6. ^ Ручная 1969, п. 12.
  7. ^ Ручная 1969, п. 14.
  8. ^ Ручная 1969, п. 21.
  9. ^ Ручная 1969, п. 13.
  10. ^ а б Ручная 1967, п. 27.
  11. ^ Ручная 1967, п. 9.
  12. ^ Ручная 1967, п. 10.
  13. ^ а б Ручная 1967, п. 25.
  14. ^ Ручная 1967, п. 26.
  15. ^ Ручная 1967, п. 8.

Библиография