S3 es un lenguaje de programación de computadoras de alto nivel estructurado e imperativo . [1] Fue desarrollado por la empresa británica International Computers Limited (ICL) para sus mainframes de la serie 2900 . Es un lenguaje de programación de sistemas con sintaxis influenciada por ALGOL 68 pero con tipos de datos y operadores alineados con los ofrecidos por la Serie 2900. Era el lenguaje de implementación del sistema operativo VME .
Paradigma | Estructurado , imperativo |
---|---|
Desarrollador | International Computers Limited |
Influenciado por | |
ALGOL 68 |
Ejemplo anotado
Un raro ejemplo de un programa S3 disponible en el dominio público es la implementación de Kermit desarrollada en el Centro de Computación Regional de South-West Universities y archivada en el archivo de implementaciones de Kermit de la Universidad de Columbia . [2] Los ejemplos siguientes son aspectos destacados seleccionados del módulo principal (kmt_main_module).
El programa comienza con una identificación del módulo y comentarios que citamos a modo de reconocimiento a los autores:
MODULE KMT_MAIN_MODULE; @ Versión 1.01 @@ ------------------------------------------------- ----------------------------- @@ @@ @@ ----- SWURCCVMEKERMIT ----- @@ @@ @@ ------------------------------------------------- --------------- @@ @@ @@ Versión 1.00 (febrero de 1986) @@ @@ Escrito por: Richard Andrews y David Lord, @@ Centro de Computación Regional de South West Universities, @@ Claverton Down, Bath BA2 7AY, Reino Unido @@ @@ @@ ------------------------------------------------- --------------- @@ @@ @@ Versión 1.01 (octubre de 1986) @@ @@ Correcciones de: Dave Allum y David Lord, SWURCC. @@ ------------------------------------------------- --------------- @
A continuación, siga una serie de "declaraciones de modo". Modo es el término de Algol 68 para un tipo.
MODO KMT_BUFFER ES (96) BYTE; MODO KMT_STRING ES REF () BYTE; MODE KMT_WORD ES REF () BYTE; MODO KMT_MTM_VALUES ES CUALQUIER (PALABRA LARGA LW_VALUE, LONG INT LI_VALUE, REF WORD RW_VALUE, REF INT RI_VALUE, REF LARGA PALABRA RLW_VALUE, REF LONG INT RLI_VALUE, REF () BYTE RVB_VALUE, REF () REF () BYTE RVRVB_VALUE); MODO KMT_PP_PACKET_STATISTICS_S ES ESTRUCTURA (INT INPUT_TOTAL, OUTPUT_TOTAL);
El primer tipo es una matriz de 96 bytes; los dos siguientes son referencias (punteros) a matrices de bytes. KMT_MTM_VALUES es un tipo de unión que permite que aparezcan una variedad de tipos diferentes. Tenga en cuenta que WORD es un entero sin signo de 32 bits, INT es un entero de 32 bits con signo; LARGO hace que sea de 64 bits. La última opción de la unión está marcada como REF () REF () BYTE, lo que significa que es un puntero a una matriz cuyos miembros son punteros a matrices de bytes.
El tipo final declarado aquí es un STRUCT, específicamente una tupla que contiene dos enteros.
El programa continúa declarando procedimientos externos de los que depende el módulo. RESPUESTA indica un valor de retorno que contiene información de error:
EXT PROC (RESPUESTA) KMT_UI; EXT PROC (REF INT, INT, RESPUESTA) KMT_PH; EXT PROC (REF INT, REF INT, RESPUESTA) KMT_PP_GET_PACKET, PROC (INT, INT, BOOL, RESPUESTA) KMT_PP_SEND_PACKET, PROC (REF () BYTE, RESPUESTA) KMT_PP_BUILD_STRING_PACKET_DATA;
y también algunas variables externas:
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;
El resto del programa consta de una serie de definiciones de procedimiento. Uno de estos, que realmente define el punto de entrada al programa, se reproduce aquí:
ESTÁTICA GLOBAL () PROC KERMIT_THE_FROG ES (() REF () OPCIÓN BYTE, () REF () BYTE VME_FILE, () REF () BYTE REM_FILE, () RESULTADO DE LA RESPUESTA): EMPEZAR () BYTE JSV_NAME: = "ASG"; @ obtener valor para ASG_ROUTE bool @ CTM_JS_READ (JSV_NAME, NIL, NIL, ASG_ROUTE, RC_IGNORED); SI RC_IGNORED NE 0 ENTONCES ASG_ROUTE: = FALSE FI; @ verificar las referencias de los parámetros (valores de los parámetros validados más tarde): @ @ OPTION debe ser del modo REF () BYTE, no puede ser ZLR o NIL @ @ VME_FILE debe ser de modo REF () BYTE, puede ser ZLR, no debe ser NIL @ @ REM_FILE debe ser de modo REF () BYTE, puede ser ZLR, no debe ser NIL @ A MENOS QUE (VERIFICAR OPCIÓN Y OPCIÓN VÁLIDA) Y (VERIFICAR VME_FILE Y (VALIDR VME_FILE O NOT (VME_FILE IS NIL))) Y (VERIFICAR REM_FILE Y (VALIDR REM_FILE O NOT (REM_FILE IS NIL))) ENTONCES @ referencia de parámetro inválida @ RESULTADO: = 10002 @ ARCH_INACCESSIBLE_PARAMETER @ ELSF @ crear bloque de recursos @ CTM_JS_BEGIN (RESULTADO); RESULTADO <= 0 ENTONCES @ bloque de recursos creado @ LONG LONG WORD KERMIT_RESULT; CUALQUIER ((3) PALABRA LARGA AS_LW, (6) PALABRA AS_W) PARAMS; PARAMS.AS_LW: = (OPCIÓN BDESC, BDESC VME_FILE, BDESC REM_FILE); @ configurar el controlador de errores del programa @ IF KMT_EH_INFORM_PE_CONTINGENCY (RESULTADO); RESULTADO> 0 ENTONCES @ no pudo configurar el controlador de errores @ SALTAR ELSF CTM_JS_CALL (NIL, PDESC KERMIT_SUPPORT, PARAMS.AS_W, KERMIT_RESULT, RESULTADO); @ crear firewall @ RESULTADO <= 0 ENTONCES @ salió normalmente o vía CTM_STOP @ RESULTADO: = SI (S'S'KERMIT_RESULT) <= 0 ENTONCES 0 @ ignorar las advertencias @ ELSE 52000 @ error devuelve código de resultado común @ FI FI; CTM_JS_END (RC_IGNORED) @ final del bloque de recursos @ FI FINAL
Las características a tener en cuenta aquí incluyen:
- La declaración del procedimiento está decorada con anotaciones que definen una sintaxis de línea de comandos que permite llamar al programa desde SCL o utilizarlo desde un shell interactivo con solicitudes de valores de parámetros predeterminados.
- Las llamadas a procedimientos con el prefijo CTM son llamadas a la "Máquina de destino del compilador", una API que ofrece el sistema operativo VME.
- "JSV" significa "variable de espacio de trabajo", el término de VME para una variable de entorno, y la llamada en CTM_JS_READ lee el valor de la variable.
- A MENOS QUE signifique "si no"; ELSF significa "más si".
- LONG LONG WORD declara un entero de 128 bits, que es un tipo nativo compatible con la arquitectura 2900
- La mayor parte del procesamiento se delega a otro procedimiento, KERMIT_SUPPORT, que se puede encontrar en el mismo módulo. Esto se llama indirectamente a través del sistema operativo CTM_JS_CALL, similar a una llamada exec () en los sistemas Unix; esto asegura un manejo limpio de fallas y la puesta en orden de cualquier recurso en caso de un error fatal. La palabra clave PDESC construye un "descriptor de procedimiento": esencialmente trata a KERMIT_SUPPORT como una función de primera clase que se puede pasar como un argumento a otra función, lo que hace que CTM_JS_CALL sea una función de orden superior que llama a su argumento proporcionado con el manejo de errores apropiado.
Referencias
- ^ Hünke, Horst (1981). Entornos de ingeniería de software (edición ilustrada). Pub de Holanda Septentrional. Co. p. 83. ISBN 978-0-444-86133-7.
- ^ "Archivo de código fuente del software Kermit" . Proyecto Kermit de la Universidad de Columbia. 22 de agosto de 2011 . Consultado el 1 de marzo de 2013 .