Jump to content

S3 (язык программирования)

S3
Парадигма Структурированный , императивный
Разработчик Интернэшнл Компьютерс Лимитед
Под влиянием
АЛГОЛ 68

S3 структурированный , императивный высокого уровня язык программирования . [1] Он был разработан британской компанией International Computers Limited (ICL) для своих мэйнфреймов серии 2900 . Это язык системного программирования , синтаксис которого основан на АЛГОЛе 68, но типы данных и операторы соответствуют тем, которые предлагаются в серии 2900. Это был язык реализации операционной системы VME .

Аннотированный пример

[ редактировать ]

Редким примером программы S3, доступной в открытом доступе, является реализация Kermit, разработанная в Региональном компьютерном центре Юго-Западного университета и заархивированная в Колумбийского университета . архиве реализаций Kermit [2] В приведенных ниже примерах показаны основные моменты основного модуля (kmt_main_module).

Программа начинается с идентификации модуля и комментариев, которые мы цитируем в знак признательности авторам:

MODULE KMT_MAIN_MODULE;                                         @ Version 1.01 @

@------------------------------------------------------------------------------@
@                                                                              @
@                                                                              @
@               -----  S W U R C C   V M E   K E R M I T  -----                @
@                                                                              @
@                                                                              @
@       ----------------------------------------------------------------       @
@                                                                              @
@                                                                              @
@       Version 1.00   (February 1986)                                         @
@                                                                              @
@         Written by : Richard Andrews and David Lord,                         @
@                      South West Universities Regional Computer Centre,       @
@                      Claverton Down, Bath BA2 7AY, U.K.                      @
@                                                                              @
@                                                                              @
@       ----------------------------------------------------------------       @
@                                                                              @
@                                                                              @
@       Version 1.01   (October 1986)                                          @
@                                                                              @
@           Fixes by : Dave Allum and David Lord, SWURCC.                      @
@       ----------------------------------------------------------------       @

Далее следует ряд «объявлений режима». Режим — это термин Алгола 68 для обозначения типа.

 MODE KMT_BUFFER IS (96)BYTE;
 MODE KMT_STRING IS REF()BYTE;
 MODE KMT_WORD IS REF()BYTE;
  
 MODE KMT_MTM_VALUES IS ANY
   (LONG WORD      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()BYTE      RVB_VALUE,
    REF()REF()BYTE RVRVB_VALUE);
  
 MODE KMT_PP_PACKET_STATISTICS_S IS STRUCT
    (INT INPUT_TOTAL,
         OUTPUT_TOTAL);

Первый тип — это массив из 96 байт; следующие два — это ссылки (указатели) на массивы байтов. KMT_MTM_VALUES — это тип объединения, позволяющий использовать множество различных типов. Обратите внимание, что WORD — 32-битное целое число без знака, INT — 32-битное целое число со знаком; LONG делает его 64-битным. Последний параметр в объединении помечен REF()REF()BYTE, что означает, что он является указателем на массив, члены которого являются указателями на массивы байтов.

Последний объявленный здесь тип — это STRUCT, а именно кортеж, содержащий два целых числа.

Программа продолжается объявлением внешних процедур, от которых зависит модуль. RESPONSE указывает возвращаемое значение, содержащее информацию об ошибке:

 EXT PROC (RESPONSE)                              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,
        (<KEY RESPONSE;DEF N'RESULT>) RESPONSE RESULT):
  
    BEGIN
  
       ()BYTE JSV_NAME := "ASG";              @ obtain value for ASG_ROUTE bool @
       CTM_JS_READ(JSV_NAME,NIL,NIL,ASG_ROUTE,RC_IGNORED);
       IF RC_IGNORED NE 0 THEN ASG_ROUTE := FALSE FI;
  
       @ verify parameter references (parameter values validated later):        @
       @    OPTION   must be of mode REF () BYTE, may not be ZLR or NIL         @
       @    VME_FILE must be of mode REF () BYTE, may be ZLR, must not be NIL   @
       @    REM_FILE must be of mode REF () BYTE, may be ZLR, must not be NIL   @
  
       UNLESS (VERIFY OPTION AND VALIDR OPTION)
       AND    (VERIFY VME_FILE AND (VALIDR VME_FILE OR NOT(VME_FILE IS NIL)))
       AND    (VERIFY REM_FILE AND (VALIDR REM_FILE OR NOT(REM_FILE IS NIL)))
       THEN                                       @ invalid parameter reference @
          RESULT := 10002 @ ARCH_INACCESSIBLE_PARAMETER @
  
       ELSF                                             @ create resource block @
          CTM_JS_BEGIN(RESULT);
          RESULT <= 0
       THEN                                            @ resource block created @
          LONG LONG WORD KERMIT_RESULT;
          ANY((3)LONG WORD AS_LW,(6) WORD AS_W) PARAMS;
          PARAMS.AS_LW := (BDESC OPTION,BDESC VME_FILE,BDESC REM_FILE);
  
                                                 @ set up program error handler @
          IF  KMT_EH_INFORM_PE_CONTINGENCY(RESULT);
               RESULT > 0
          THEN                                    @ failed to set error handler @
             SKIP
          ELSF CTM_JS_CALL(NIL,PDESC KERMIT_SUPPORT,PARAMS.AS_W,KERMIT_RESULT,
                           RESULT);                           @ create firewall @
               RESULT <= 0
          THEN                         @ either exited normally or via CTM_STOP @
             RESULT := IF (S'S'KERMIT_RESULT) <= 0
                       THEN 0                                 @ ignore warnings @
                       ELSE 52000              @ error return common resultcode @
                       FI
          FI;
  
          CTM_JS_END(RC_IGNORED)                           @ end resource block @
       FI
  
    END

Здесь следует отметить следующие особенности:

  • Объявление процедуры дополнено аннотациями, которые определяют синтаксис командной строки, позволяющий вызывать программу из SCL или использовать из интерактивной оболочки с запросом значений параметров по умолчанию.
  • Вызовы процедур с префиксом CTM — это вызовы «Целевой машины компилятора», API, предлагаемого операционной системой VME.
  • «JSV» означает «переменная пространства задания», термин VME для переменной среды, а вызов CTM_JS_READ считывает значение этой переменной.
  • UNLESS означает «если нет»; ELSF означает «иначе, если».
  • LONG LONG WORD объявляет 128-битное целое число, которое является собственным типом, поддерживаемым архитектурой 2900.
  • Основная часть обработки делегируется другой процедуре KERMIT_SUPPORT, которую можно найти в том же модуле. Он вызывается косвенно через операционную систему CTM_JS_CALL, аналогично вызову exec() в системах Unix; это обеспечивает чистую обработку сбоев и очистку любых ресурсов в случае фатальной ошибки. Ключевое слово PDESC создает «дескриптор процедуры»: по сути, оно рассматривает KERMIT_SUPPORT как функцию первого класса, которую можно передать в качестве аргумента другой функции, что делает CTM_JS_CALL функцией более высокого порядка, которая вызывает предоставленный ей аргумент с соответствующей обработкой ошибок.
  1. ^ Хюнке, Хорст (1981). Среды программной инженерии (иллюстрированное ред.). Северо-Голландский паб. Компания р. 83. ИСБН  978-0-444-86133-7 .
  2. ^ «Архив исходного кода программного обеспечения Kermit» . Проект Кермита Колумбийского университета. 22 августа 2011 года . Проверено 1 марта 2013 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 64fe62adf00c1613ca4229a45430cfe4__1650701160
URL1:https://arc.ask3.ru/arc/aa/64/e4/64fe62adf00c1613ca4229a45430cfe4.html
Заголовок, (Title) документа по адресу, URL1:
S3 (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)