Парадигма | Структурированный , императивный |
---|---|
Разработчик | International Computers Limited |
Под влиянием | |
АЛГОЛ 68 |
S3 представляет собой структурированный , необходимо высокого уровня компьютерного языка программирования . [1] Он был разработан британской компанией International Computers Limited (ICL) для мэйнфреймов серии 2900 . Это язык системного программирования с синтаксисом, на который влияет АЛГОЛ 68, но с типами данных и операторами, согласованными с теми, которые предлагает серия 2900. Это был язык реализации операционной системы VME .
Аннотированный пример [ править ]
Редким примером общедоступной программы S3 является реализация Kermit, разработанная в Региональном компьютерном центре Юго-Западных университетов и заархивированная в архиве реализаций Kermit Колумбийского университета . [2] Приведенные ниже примеры представляют собой избранные основные моменты основного модуля (kmt_main_module).
Программа начинается с идентификации модуля и комментариев, которые мы цитируем в знак признательности авторам:
МОДУЛЬ KMT_MAIN_MODULE; @ Версия 1.01 @@ ------------------------------------------------- ----------------------------- @@ @@ @@ ----- SWURCCVMEKERMIT ----- @@ @@ @@ ------------------------------------------------- --------------- @@ @@ @@ Версия 1.00 (февраль 1986 г.) @@ @@ Авторы: Ричард Эндрюс и Дэвид Лорд, @@ Региональный компьютерный центр Юго-Западных университетов, @@ Claverton Down, Bath BA2 7AY, UK @@ @@ @@ ------------------------------------------------- --------------- @@ @@ @@ Версия 1.01 (октябрь 1986 г.) @@ @@ Исправления: Дэйв Аллум и Дэвид Лорд, SWURCC. @@ ------------------------------------------------- --------------- @
Затем следует ряд «объявлений режима». Режим - это термин в языке Алгола 68 для обозначения типа.
РЕЖИМ KMT_BUFFER IS (96) BYTE; РЕЖИМ KMT_STRING IS REF () BYTE; РЕЖИМ KMT_WORD IS REF () BYTE; РЕЖИМ KMT_MTM_VALUES ЛЮБОЙ (ДЛИННОЕ СЛОВО LW_VALUE, LONG INT LI_VALUE, REF WORD RW_VALUE, REF INT RI_VALUE, REF LONG WORD RLW_VALUE, REF LONG INT RLI_VALUE, REF () БАЙТ RVB_VALUE, REF () REF () BYTE RVRVB_VALUE); РЕЖИМ KMT_PP_PACKET_STATISTICS_S СТРУКТУРИРОВАН (INT INPUT_TOTAL, OUTPUT_TOTAL);
Первый тип - это массив размером 96 байт; следующие два - это ссылки (указатели) на массивы байтов. KMT_MTM_VALUES - это тип объединения, позволяющий появляться множеству различных типов. Обратите внимание, что WORD - это 32-битное целое число без знака, INT - 32-битное целое число со знаком; LONG делает его 64-битным. Последняя опция в объединении помечена как REF () REF () BYTE, что означает, что это указатель на массив, члены которого являются указателями на массивы байтов.
Последний объявленный здесь тип - это STRUCT, а именно кортеж, содержащий два целых числа.
Программа продолжается объявлением внешних процедур, от которых зависит модуль. RESPONSE указывает возвращаемое значение, содержащее информацию об ошибке:
EXT PROC (ОТВЕТ) KMT_UI; EXT PROC (REF INT, INT, RESPONSE) KMT_PH; EXT PROC (REF INT, REF INT, RESPONSE) KMT_PP_GET_PACKET, PROC (INT; INT; BOOL; RESPONSE) KMT_PP_SEND_PACKET, PROC (REF () BYTE, RESPONSE) KMT_PP_BUILD_STRING_PACKET_DATA;
а также некоторые внешние переменные:
EXT REF () BYTE KMT_VERSION; EXT REF BOOL ASG_ROUTE; EXT REF () KMT_MTM_VALUES KMT_MTM_AREA; EXT REF () BYTE MTM_TEXT; EXT REF INT MTM_TEXT_LEN; EXT REF () REF () BYTE MTM_RECALL_DATA;
Остальная часть программы состоит из нескольких определений процедур. Один из них, который фактически определяет точку входа в программу, воспроизводится здесь:
GLOBAL STATIC (<STATUS 5; PSPACE 10001; TEMPLATE>) PROC KERMIT_THE_FROG IS ((<LIT "COMMAND">) REF () BYTE OPTION, (<LIT "">) REF () BYTE VME_FILE, (<LIT "">) REF () BYTE REM_FILE, (<КЛЮЧЕВОЙ ОТВЕТ; DEF N'RESULT>) РЕЗУЛЬТАТ ОТВЕТА): НАЧИНАТЬ () BYTE JSV_NAME: = "ASG"; @ получить значение для ASG_ROUTE bool @ CTM_JS_READ (JSV_NAME, NIL, NIL, ASG_ROUTE, RC_IGNORED); ЕСЛИ RC_IGNORED NE 0, ТО ASG_ROUTE: = FALSE FI; @ проверка ссылок на параметры (значения параметров проверяются позже): @ @ OPTION должен иметь режим REF () BYTE, не может быть ZLR или NIL @ @ VME_FILE должен иметь режим REF () BYTE, может быть ZLR, не должен быть NIL @ @ REM_FILE должен иметь режим REF () BYTE, может быть ZLR, не должен быть NIL @ ЕСЛИ (ПОДТВЕРДИТЬ ВАРИАНТ И ВАРИАНТ ВАЛИДРА) И (ПРОВЕРЬТЕ VME_FILE И (VALIDR VME_FILE ИЛИ НЕ (VME_FILE IS NIL))) И (ПРОВЕРЬТЕ REM_FILE И (VALIDR REM_FILE ИЛИ НЕ (REM_FILE IS NIL))) ТО @ неверная ссылка на параметр @ РЕЗУЛЬТАТ: = 10002 @ ARCH_INACCESSIBLE_PARAMETER @ ELSF @ создать ресурсный блок @ CTM_JS_BEGIN (РЕЗУЛЬТАТ); РЕЗУЛЬТАТ <= 0 ТО @ ресурсный блок создан @ ДЛИННОЕ СЛОВО KERMIT_RESULT; ЛЮБЫЕ ((3) ДЛИННОЕ СЛОВО AS_LW, (6) СЛОВО AS_W) ПАРАМЕТРЫ; PARAMS.AS_LW: = (ОПЦИЯ BDESC, BDESC VME_FILE, BDESC REM_FILE); @ настроить обработчик ошибок программы @ ЕСЛИ KMT_EH_INFORM_PE_CONTINGENCY (РЕЗУЛЬТАТ); РЕЗУЛЬТАТ> 0 ТО @ не удалось установить обработчик ошибок @ ПРОПУСКАТЬ ELSF CTM_JS_CALL (NIL, PDESC KERMIT_SUPPORT, PARAMS.AS_W, KERMIT_RESULT, РЕЗУЛЬТАТ); @ создать брандмауэр @ РЕЗУЛЬТАТ <= 0 THEN @ либо завершился нормально, либо через CTM_STOP @ РЕЗУЛЬТАТ: = ЕСЛИ (S'S'KERMIT_RESULT) <= 0 ТО 0 @ игнорировать предупреждения @ ELSE 52000 @ ошибка вернуть общий код результата @ FI FI; CTM_JS_END (RC_IGNORED) @ конец ресурсного блока @ FI КОНЕЦ
Здесь следует отметить следующие особенности:
- Объявление процедуры украшено аннотациями, которые определяют синтаксис командной строки, позволяющий вызывать программу из SCL или использовать из интерактивной оболочки с запросом значений параметров по умолчанию.
- Вызовы процедур с префиксом CTM - это вызовы «целевой машины компилятора», API, предлагаемого операционной системой VME.
- «JSV» означает «переменная пространства заданий», термин VME для переменной среды, а вызов CTM_JS_READ считывает значение переменной.
- ЕСЛИ не означает «если нет»; ELSF означает «иначе, если».
- LONG LONG WORD объявляет 128-битное целое число, которое является собственным типом, поддерживаемым архитектурой 2900.
- Основная часть обработки делегирована другой процедуре, KERMIT_SUPPORT, которая находится в том же модуле. Это вызывается косвенно через операционную систему CTM_JS_CALL, аналогично вызову exec () в системах Unix; это гарантирует чистую обработку сбоев и приведение в порядок любых ресурсов в случае фатальной ошибки. Ключевое слово PDESC создает «дескриптор процедуры»: по сути, оно рассматривает KERMIT_SUPPORT как функцию первого класса, которую можно передать в качестве аргумента другой функции, что делает CTM_JS_CALL функцией высшего порядка, которая вызывает свой предоставленный аргумент с соответствующей обработкой ошибок.
Ссылки [ править ]
- ^ Hunke Хорсто (1981). Среды программной инженерии (иллюстрировано ред.). Паб Северная Голландия. Co. p. 83. ISBN 978-0-444-86133-7.
- ^ "Архив исходного кода программного обеспечения Kermit" . Проект Кермита Колумбийского университета. 22 августа 2011 . Проверено 1 марта 2013 года .