Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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 функцией высшего порядка, которая вызывает свой предоставленный аргумент с соответствующей обработкой ошибок.

Ссылки [ править ]

  1. ^ Hunke Хорсто (1981). Среды программной инженерии (иллюстрировано ред.). Паб Северная Голландия. Co. p. 83. ISBN 978-0-444-86133-7.
  2. ^ "Архив исходного кода программного обеспечения Kermit" . Проект Кермита Колумбийского университета. 22 августа 2011 . Проверено 1 марта 2013 года .