Rexx ( Ejecutor extendido reestructurado ) es un lenguaje de programación interpretado desarrollado en IBM por Mike Cowlishaw . [2] [3] Es un lenguaje de programación estructurado de alto nivel diseñado para facilitar el aprendizaje y la lectura. Existen intérpretes Rexx patentados y de código abierto para una amplia gama de plataformas informáticas; existen compiladores para las computadoras mainframe de IBM . [4]
Paradigma | multiparadigma : procedimental , estructurado |
---|---|
Diseñada por | Mike Cowlishaw |
Desarrollador | Mike Cowlishaw, IBM |
Apareció por primera vez | 1979 |
Lanzamiento estable | ANSI X3.274 / 1996 |
Disciplina de mecanografía | Dinámica |
Extensiones de nombre de archivo | .cmd, .bat, .exec, .rexx, .rex, EXEC |
Implementaciones importantes | |
VM / SP R3, TSO / E V2, SAAREXX, ARexx , BREXX, Regina, [1] REXX personal, REXX / imc | |
Dialectos | |
NetRexx , Object REXX , ahora ooREXX , KEXX | |
Influenciado por | |
PL / I , ALGOL , EJEC , EJEC 2 | |
Influenciado | |
NetRexx , objeto REXX | |
|
Rexx se utiliza como lenguaje de macro y secuencias de comandos , ya menudo se utiliza para procesar datos y texto y generar informes; estas similitudes con Perl significan que Rexx funciona bien en la programación de Common Gateway Interface (CGI) y, de hecho, se utiliza para este propósito. Rexx es el lenguaje de secuencias de comandos principal en algunos sistemas operativos, por ejemplo, OS / 2 , MVS , VM , AmigaOS , y también se utiliza como un lenguaje macro interno en algún otro software, como SPFPC , KEDIT , THE y el emulador de terminal ZOC . Además, el lenguaje Rexx se puede utilizar para secuencias de comandos y macros en cualquier programa que utilice los lenguajes de motores de secuencias de comandos de Windows Scripting Host ActiveX (por ejemplo, VBScript y JScript) si uno de los motores Rexx está instalado.
Rexx se suministra con VM / SP Release 3 en adelante, TSO / E Versión 2 en adelante, OS / 2 (1.3 y posterior, donde se denomina oficialmente Lenguaje de procedimientos / 2 ), AmigaOS Versión 2 en adelante, PC DOS ( 7.0 o posterior ) 2000 ), ArcaOS , [5] y Windows NT 4.0 (Kit de recursos: Regina). Los scripts REXX para OS / 2 comparten la extensión de nombre de archivo .cmd con otros lenguajes de scripting, y la primera línea del script especifica el intérprete que se utilizará. Las macros REXX para aplicaciones compatibles con REXX utilizan extensiones determinadas por la aplicación. A finales de la década de 1980, Rexx se convirtió en el lenguaje de programación común para la arquitectura de aplicaciones de sistemas IBM , donde pasó a llamarse "Lenguaje de procedimiento SAA REXX".
Un script o comando Rexx a veces se denomina EXEC en un guiño al tipo de archivo CMS utilizado para los scripts EXEC , [6] EXEC 2 [7] y REXX en CP / CMS y VM / 370 a z / VM .
Características
Rexx tiene las siguientes características y características:
- Sintaxis simple
- La capacidad de enrutar comandos a múltiples entornos.
- La capacidad de admitir funciones, procedimientos y comandos asociados con un entorno de invocación específico.
- Una pila incorporada, con la capacidad de interoperar con la pila de host si hay una.
- Pequeño conjunto de instrucciones que contiene solo dos docenas de instrucciones
- Sintaxis de forma libre
- Tokens que no distinguen entre mayúsculas y minúsculas, incluidos nombres de variables
- Base de la cadena de caracteres
- Tipificación dinámica de datos , sin declaraciones
- Sin palabras clave reservadas , excepto en el contexto local
- No incluye instalaciones de archivos
- Precisión numérica arbitraria
- Aritmética decimal, punto flotante
- Una amplia selección de funciones integradas, especialmente procesamiento de texto y cadenas
- Gestión de almacenamiento automática
- Protección contra choques
- Estructuras de datos direccionables por contenido
- Matrices asociativas
- Acceso directo a los comandos e instalaciones del sistema
- Manejo de errores simple y seguimiento y depurador integrados
- Pocas limitaciones artificiales
- Instalaciones de E / S simplificadas
- Operadores no convencionales
- Solo admite parcialmente los parámetros de línea de comandos de estilo Unix, excepto implementaciones específicas
- No proporciona ningún control de terminal básico como parte del lenguaje, excepto implementaciones específicas
- No proporciona una forma genérica de incluir funciones y subrutinas de bibliotecas externas, excepto implementaciones específicas.
Rexx acaba de veintitrés años, en gran medida auto-evidente, instrucciones (como call
, parse
, y select
) con puntuacion mínimo y los requisitos de formato. Es esencialmente un lenguaje de forma casi libre con un solo tipo de datos, la cadena de caracteres; esta filosofía significa que todos los datos son visibles (simbólicos) y la depuración y el seguimiento se simplifican.
La sintaxis de Rexx se parece a PL / I , pero tiene menos notaciones; esto hace que sea más difícil de analizar (por programa) pero más fácil de usar, excepto en los casos en los que los hábitos PL / I pueden llevar a sorpresas. Uno de los objetivos del diseño de REXX fue el principio del menor asombro . [8]
Historia
antes de 1990
Rexx fue diseñado e implementado por primera vez, en lenguaje ensamblador , como un proyecto de 'tiempo propio' entre el 20 de marzo de 1979 y mediados de 1982 por Mike Cowlishaw de IBM, originalmente como un lenguaje de programación de scripts para reemplazar los lenguajes EXEC y EXEC 2 . [2] Fue diseñado para ser un lenguaje de macro o scripting para cualquier sistema. Como tal, Rexx se considera un precursor de Tcl y Python . Rexx también fue diseñado por su creador para ser una versión simplificada y más fácil de aprender del lenguaje de programación PL / I. Sin embargo, algunas diferencias con PL / I pueden hacer tropezar a los incautos.
Se describió por primera vez en público en la conferencia SHARE 56 en Houston, Texas, en 1981, [9] donde la reacción del cliente, defendida por Ted Johnston de SLAC , llevó a que se enviara como un producto de IBM en 1982.
A lo largo de los años, IBM incluyó Rexx en casi todos sus sistemas operativos ( VM / CMS , MVS TSO / E , IBM i , VSE / ESA , AIX , PC DOS y OS / 2 ) y ha puesto a disposición versiones para Novell NetWare , Windows , Java y Linux .
La primera versión que no es de IBM fue escrita para PC DOS por Charles Daney en 1984/5 [3] y comercializada por Mansfield Software Group (fundado por Kevin J. Kearney en 1986). [2] La primera versión del compilador apareció en 1987, escrita para CMS por Lundin y Woodruff. [10] También se han desarrollado otras versiones para Atari , AmigaOS , Unix (muchas variantes), Solaris , DEC , Windows , Windows CE , Pocket PC , DOS , Palm OS , QNX , OS / 2 , Linux , BeOS , EPOC32 / Symbian , AtheOS , OpenVMS , [11] : p.305 de Apple Macintosh y Mac OS X . [12]
La versión Amiga de Rexx, llamada ARexx , se incluyó con AmigaOS 2 en adelante y era popular para la creación de scripts y el control de aplicaciones. Muchas aplicaciones de Amiga tienen un "puerto ARexx" integrado que permite el control de la aplicación desde Rexx. Un solo script de Rexx podría incluso cambiar entre diferentes puertos de Rexx para controlar varias aplicaciones en ejecución.
1990 al presente
En 1990, Cathie Dager de SLAC organizó el primer simposio independiente de Rexx, que condujo a la formación de la Asociación de Idiomas REXX. Los simposios se llevan a cabo anualmente.
Hay varias versiones gratuitas de Rexx disponibles. En 1992, aparecieron los dos puertos de código abierto más utilizados : REXX / imc de Ian Collier para Unix y Regina [1] de Anders Christensen (posteriormente adoptado por Mark Hessling) para Windows y Unix. BREXX es bien conocido por las plataformas WinCE y Pocket PC, y se ha "adaptado" a VM / 370 y MVS .
OS / 2 tiene un sistema de desarrollo visual de Watcom VX-REXX . Otro dialecto fue VisPro REXX de Hockware.
Portable Rexx de Kilowatt y Personal Rexx de Quercus son dos intérpretes de Rexx diseñados para DOS y también se pueden ejecutar en Windows mediante un símbolo del sistema. Desde mediados de la década de 1990, han aparecido dos variantes más nuevas de Rexx:
- NetRexx : compila en Java de código byte a través de código fuente de Java; esto no tiene palabras clave reservadas y utiliza el modelo de objetos de Java, por lo que generalmente no es compatible con versiones posteriores de Rexx "clásico".
- Object REXX : una versión orientada a objetos generalmente compatible con versiones posteriores de Rexx.
En 1996, el American National Standards Institute (ANSI) publicó un estándar para Rexx: ANSI X3.274–1996 "Tecnología de la información - Lenguaje de programación REXX". [13] Desde 1985 se han publicado más de dos docenas de libros sobre Rexx.
Rexx celebró su 25º aniversario el 20 de marzo de 2004, que se celebró en el 15º Simposio Internacional REXX de la REXX Language Association en Böblingen, Alemania, en mayo de 2004.
El 12 de octubre de 2004, IBM anunció su plan de publicar las fuentes de implementación de Object REXX bajo la Licencia Pública Común . Las versiones recientes de Object REXX contienen un motor de secuencias de comandos ActiveX Windows Scripting Host (WSH) que implementa esta versión del lenguaje Rexx.
El 22 de febrero de 2005, se anunció el primer lanzamiento público de Open Object Rexx (ooRexx). Este producto contiene un motor de secuencias de comandos WSH que permite programar el sistema operativo Windows y las aplicaciones con Rexx de la misma manera en que Visual Basic y JScript se implementan mediante la instalación predeterminada de WSH y motores de secuencias de comandos de terceros Perl , Tcl y Python .
A partir de enero de 2017[actualizar]REXX fue incluido en el índice TIOBE como uno de los cincuenta idiomas en su top 100 que no pertenece al top 50. [14]
Kits de herramientas
Rexx / Tk, un conjunto de herramientas para gráficos que se utilizarán en programas Rexx de la misma manera que Tcl / Tk, está ampliamente disponible.
Se ha desarrollado un IDE de Rexx, RxxxEd, para Windows. [11] Se ha desarrollado RxSock para la comunicación en red, así como otros complementos e implementaciones de Regina Rexx, y la mayoría de los kits de recursos para varias versiones de Windows incluye un intérprete de Rexx para la línea de comandos de Windows y funciona en todos ellos. así como DOS.
Ortografía y mayúsculas
Originalmente el idioma se llamaba Rex ( Ejecutor reformado ); se agregó la "X" adicional para evitar colisiones con los nombres de otros productos. REX estaba originalmente en mayúsculas porque el código del mainframe estaba orientado a mayúsculas. El estilo en aquellos días era tener nombres en mayúsculas, en parte porque casi todo el código seguía estando en mayúsculas. Para el producto, se convirtió en REXX, y ambas ediciones del libro de Mike Cowlishaw usan mayúsculas. La expansión a REstructured eXtended eXecutor se utilizó para el producto del sistema en 1984. [8]
Sintaxis
Bucle
La estructura de control de bucle en Rexx comienza con ay DO
termina con un END
pero viene en varias variedades. NetRexx usa la palabra clave en LOOP
lugar de DO
para hacer un bucle, mientras que ooRexx trata LOOP
y DO
como equivalente cuando hace un bucle.
Bucles condicionales
Rexx admite una variedad de bucles tradicionales de programación estructurada al probar una condición antes ( do while
) o después ( do until
) de que se ejecute la lista de instrucciones:
hacer mientras [ condición ] [ instrucciones ] final
hacer hasta [ condición ] [ instrucciones ] final
Bucles repetitivos
Como la mayoría de los lenguajes, Rexx puede realizar un bucle al incrementar una variable de índice y detenerse cuando se alcanza un límite:
do index = start [ to limit ] [ by increment ] [ for count ] [ instrucciones ] final
El incremento se puede omitir y el valor predeterminado es 1. El límite también se puede omitir, lo que hace que el ciclo continúe para siempre.
Rexx permite bucles contados, donde una expresión se calcula al comienzo del bucle y las instrucciones dentro del bucle se ejecutan tantas veces:
hacer expresión [ instrucciones ] final
Rexx puede incluso realizar un bucle hasta que finalice el programa:
hacer para siempre [ instrucciones ] final
Un programa puede salir del bucle actual con la leave
instrucción, que es la forma normal de salir de un do forever
bucle, o puede cortocircuitarlo con la iterate
instrucción.
Bucles combinados
Lo más inusual es que Rexx permite combinar elementos tanto condicionales como repetitivos en el mismo ciclo: [15]
do index = start [ to limit ] [ by increment ] [ for count ] [ while condition ] [ instrucciones ] final
hacer expresión [ hasta condición ] [ instrucciones ] final
Condicionales
Condiciones de prueba con IF
:
si [ condición ] entonces hacer [ instrucciones ] final demás hacer [ instrucciones ] final
La ELSE
cláusula es opcional.
Para instrucciones únicas, DO
y END
también se puede omitir:
si [ condición ] entonces [ instrucción ] demás [ instrucción ]
La sangría es opcional, pero ayuda a mejorar la legibilidad.
Prueba de múltiples condiciones
SELECT
es de Rexx estructura de la caja , al igual que muchos otros constructos derivados de PL / I . Al igual que algunas implementaciones de construcciones CASE en otros lenguajes dinámicos, las WHEN
cláusulas de Rexx especifican condiciones completas, que no necesitan estar relacionadas entre sí. En eso, se parecen más a conjuntos de IF-THEN-ELSEIF-THEN-...-ELSE
código en cascada que a la switch
declaración de C o Java .
Seleccione cuando [ condición ] entonces [ instrucción ] o NOP cuando [ condición ] entonces hacer [ instrucciones ] o NOP final de lo contrario [ instrucciones ] o NOP final
La NOP
instrucción "no realiza ninguna operación" y se utiliza cuando el programador no desea hacer nada en un lugar donde se requerirían una o más instrucciones.
La cláusula OTHERWISE es opcional. Si se omite y no se cumplen las condiciones WHEN, se genera la condición SYNTAX.
Variables simples
Las variables en Rexx no tienen tipo, e inicialmente se evalúan como sus nombres, en mayúsculas. Por tanto, el tipo de una variable puede variar con su uso en el programa:
decir hola / * => HOLA * / hola = 25 decir hola / * => 25 * / hola = "di 5 + 3" decir hola / * => decir 5 + 3 * / interpretar hola / * => 8 * / soltar hola decir hola / * => HOLA * /
Variables compuestas
A diferencia de muchos otros lenguajes de programación, el Rexx clásico no tiene soporte directo para matrices de variables direccionadas por un índice numérico. En cambio, proporciona variables compuestas . [16] Una variable compuesta consta de un tallo seguido de una cola. UNA . (punto) se usa para unir el tallo a la cola. Si las colas utilizadas son numéricas, es fácil producir el mismo efecto que una matriz.
hago yo = 1 a 10 tallo . i = 10 - yo final
Posteriormente existen las siguientes variables con los siguientes valores: stem.1 = 9, stem.2 = 8, stem.3 = 7
...
A diferencia de las matrices, no se requiere que el índice de una variable de raíz tenga un valor entero. Por ejemplo, el siguiente código es válido:
i = 'lunes' tallo . i = 2
En Rexx también es posible establecer un valor predeterminado para una raíz.
tallo . = 'Desconocido' tallo . 1 = 'EE. UU.' tallo . 44 = 'Reino Unido' tallo . 33 = 'Francia'
Después de estas asignaciones stem.3
se produciría el plazo 'Unknown'
.
La raíz completa también se puede borrar con la instrucción DROP.
tallo de gota .
Esto también tiene el efecto de eliminar cualquier valor predeterminado establecido anteriormente.
Por convención (y no como parte del lenguaje), el compuesto stem.0
se usa a menudo para realizar un seguimiento de cuántos elementos hay en una raíz, por ejemplo, un procedimiento para agregar una palabra a una lista podría codificarse así:
add_word : procedimiento exponer diccionario . analizar arg w n = diccionario . 0 + 1 diccionario . n = w diccionario . 0 = n regreso
También es posible tener varios elementos en la cola de una variable compuesta. Por ejemplo:
m = 'julio' d = 15 y = 2005 día . y . m . d = 'viernes'
Se pueden usar múltiples elementos de cola numéricos para proporcionar el efecto de una matriz multidimensional.
Las características similares a las variables compuestas de Rexx se encuentran en muchos otros lenguajes (incluyendo matrices asociativas en AWK , hashes en Perl y Hashtables en Java ). La mayoría de estos lenguajes proporcionan una instrucción para iterar sobre todas las claves (o colas en términos de Rexx) de tal construcción, pero esto falta en el Rexx clásico. En su lugar, es necesario mantener listas auxiliares de valores finales según corresponda. Por ejemplo, en un programa para contar palabras, se puede utilizar el siguiente procedimiento para registrar cada aparición de una palabra.
add_word : procedimiento exponer recuento . lista de palabras analizar arg w . contar . w = cuenta . w + 1 / * asumir recuento. se ha establecido en 0 * / si cuenta . w = 1 luego word_list = word_list w regreso
y luego más tarde:
do i = 1 a palabras ( lista_palabras ) w = palabra ( lista_palabras , i ) decir w contar . w final
A costa de algo de claridad, es posible combinar estas técnicas en un solo tallo:
add_word : procedimiento exponer diccionario . analizar arg w . diccionario . w = diccionario . w + 1 si diccionario . w = 1 / * asumir diccionario. = 0 * / entonces haz n = diccionario . 0 + 1 diccionario . n = w diccionario . 0 = n final regreso
y después:
do i = 1 al diccionario . 0 w = diccionario . I digo yo w diccionario . w final
Rexx no proporciona una red de seguridad aquí, por lo que si una de las palabras resulta ser un número entero menor, dictionary.0
esta técnica fallará misteriosamente.
Las implementaciones recientes de Rexx, incluido Object REXX de IBM y las implementaciones de código abierto como ooRexx, incluyen una nueva construcción de lenguaje para simplificar la iteración sobre el valor de una raíz o sobre otro objeto de colección como una matriz, tabla o lista.
No me lo largo del tallo . digo i '->' raíz . I final
Instrucciones de palabras clave
ANALIZAR GRAMATICALMENTE
La PARSE
instrucción es particularmente poderosa; combina algunas funciones útiles para el manejo de cadenas. Su sintaxis es:
analizar [ superior ] origen [ plantilla ]
donde origen especifica la fuente:
arg
(argumentos, en la cola de nivel superior de la línea de comando)linein
(entrada estándar, p. ej. teclado)pull
(Cola de datos Rexx o entrada estándar)source
(información sobre cómo se ejecutó el programa)value
(una expresión)with
: la palabra clavewith
es necesaria para indicar dónde termina la expresiónvar
(una variable)version
(versión / número de lanzamiento)
y la plantilla puede ser:
- lista de variables
- delimitadores de números de columna
- delimitadores literales
upper
es opcional; si se especifica, los datos se convertirán a mayúsculas antes del análisis.
Ejemplos:
Usando una lista de variables como plantilla
myVar = "John Smith" analizar var myVar firstName lastName di "El nombre es:" firstName di "El apellido es:" apellido
muestra lo siguiente:
Nombre es: John El apellido es: Smith
Usando un delimitador como plantilla:
myVar = "Smith, John" análisis sintáctico var miVar Apellido "" FirstName di "El nombre es:" firstName di "El apellido es:" apellido
también muestra lo siguiente:
Nombre es: John El apellido es: Smith
Usando delimitadores de números de columna:
myVar = "(202) 123-1234" analizar var MyVar 2 AreaCode 5 7 SubNumber decir "El código de área es:" AreaCode diga "El número de suscriptor es:" SubNumber
muestra lo siguiente:
El código de área es: 202 El número de suscriptor es: 123-1234
Una plantilla puede utilizar una combinación de variables, delimitadores literales y delimitadores de números de columna.
INTERPRETAR
La instrucción INTERPRET evalúa su argumento y trata su valor como una instrucción Rexx. A veces Interpretar es la manera más clara para realizar una tarea, pero se usa a menudo en código más claro es posible utilizar, por ejemplo, value()
.
Otros usos de INTERPRET son la aritmética de precisión arbitraria (decimal) de Rexx (incluidas las comparaciones difusas), el uso de la instrucción PARSE con plantillas programáticas, matrices derivadas y matrices dispersas. [ ¿cómo? ]
/ * demostrar INTERPRETAR con cuadrado (4) => 16 * / X = 'cuadrado' interpretar 'decir' X || «(4); Salida' CUADRADO : return arg ( 1 ) ** 2
Esto muestra 16 y sale. Debido a que el contenido de las variables en Rexx son cadenas, incluidos números racionales con exponentes e incluso programas completos, Rexx ofrece interpretar cadenas como expresiones evaluadas.
Esta característica podría usarse para pasar funciones como parámetros de función , como pasar SIN o COS a un procedimiento para calcular integrales.
Rexx ofrece solo funciones matemáticas básicas como ABS, DIGITS, MAX, MIN, SIGN, RANDOM y un conjunto completo de conversiones hexadecimales más binarias con operaciones de bits. Las funciones más complejas como SIN se implementaron desde cero o se obtuvieron de bibliotecas externas de terceros . Algunas bibliotecas externas, generalmente las implementadas en lenguajes tradicionales, no admitían precisión extendida.
Las versiones posteriores (no clásicas) admiten CALL variable
construcciones. Junto con la función incorporada VALUE
, CALL se puede utilizar en lugar de muchos casos de INTERPRET
. Este es un programa clásico:
/ * terminado por la entrada "salida" o similar * / hacer siempre ; interpretar linein () ; final
Una "calculadora Rexx" un poco más sofisticada:
X = 'ingrese BYE para salir' hazlo hasta que X = 'ADIÓS' ; interpretar "decir" X ; tirar de X ; final
PULL
es la abreviatura de parse upper pull
. Asimismo, ARG
es la abreviatura de parse upper arg
.
El poder de la instrucción INTERPRET tenía otros usos. El paquete de software Valor se basó en la capacidad interpretativa de Rexx para implementar un entorno de programación orientada a objetos . Otro uso se encontró en un producto de Westinghouse inédito llamado Time Machine que pudo recuperarse completamente después de un error fatal.
NUMÉRICO
decir dígitos () fuzz () forma () / * => 9 0 CIENTÍFICO * / digamos 999999999 + 1 / * => 1.000000000E + 9 * / dígitos numéricos 10 / * solo limitado por la memoria disponible * / digamos 999999999 + 1 / * => 1000000000 * / digamos 0.9999999999 = 1 / * => 0 (falso) * / fuzz numérico 3 digamos 0.99999999 = 1 / * => 1 (verdadero) * / digamos 0.99999999 == 1 / * => 0 (falso) * / digamos 100 * 123456789 / * => 1.23456789E + 10 * / ingeniería de formas numéricas digamos 100 * 123456789 / * => 12,34567890E + 9 * / digamos 53 // 7 / * => 4 (resto de la división) * /
Calcula √ 2 | Calcula e | |
---|---|---|
código | dígitos numéricos 50 n = 2 r = 1 hacer para siempre / * método de Newton * / rr = ( n / r + r ) / 2 Si r = RR continuación licencia r = rr final decir "sqrt" n '=' r | dígitos numéricos 50 e = 2,5 f = 0,5 hacer n = 3 f = f / n ee = e + f si e = ee entonces vete e = ee final di "e =" e |
producción | sqrt 2 = 1.414213562373095048801688724209698078569671875377 | e = 2,7182818284590452353602874713526624977572470936998 |
SEÑAL
La instrucción SIGNAL está destinada a cambios anormales en el flujo de control (consulte la siguiente sección). Sin embargo, se puede usar incorrectamente y tratar como la instrucción GOTO que se encuentra en otros lenguajes (aunque no es estrictamente equivalente, porque termina bucles y otras construcciones). Esto puede producir un código difícil de leer.
Manejo de errores y excepciones
En Rexx es posible interceptar y tratar errores y otras excepciones, utilizando la instrucción SIGNAL. Hay siete condiciones del sistema: ERROR, FAILURE, HALT, NOVALUE, NOTREADY, LOSTDIGITS y SYNTAX. El manejo de cada uno se puede activar y desactivar en el código fuente según se desee.
El siguiente programa se ejecutará hasta que el usuario lo cancele:
señal de alto ; hacer a = 1 decir un hacer 100000 / * un retraso * / final final detener : decir "El programa fue detenido por el usuario" Salida
Una declaración intercepta el uso de variables indefinidas, que de otro modo obtendrían su propio nombre (en mayúsculas) como valor. Independientemente del estado de la condición, el estado de una variable siempre se puede verificar con la función incorporada que devuelve VAR para las variables definidas.signal on novalue
NOVALUE
SYMBOL
La VALUE
función se puede utilizar para obtener el valor de las variables sin desencadenar una NOVALUE
condición, pero su propósito principal es leer y establecer variables de entorno , similar a POSIX getenv
y putenv
.
Condiciones
ERROR
- RC positivo de un comando del sistema
FAILURE
- RC negativo para un comando del sistema (por ejemplo, el comando no existe)
HALT
- Terminación anormal
NOVALUE
- Se hizo referencia a una variable no definida
NOTREADY
- Error de entrada o salida (por ejemplo, intentos de lectura más allá del final del archivo)
SYNTAX
- Sintaxis de programa no válida o alguna otra condición de error
LOSTDIGITS
- Se pierden dígitos significativos (ANSI Rexx, no en la segunda edición de TRL)
Cuando se maneja una condición SIGNAL ON
, las variables del sistema SIGL
y RC
se pueden analizar para comprender la situación. RC contiene el código de error Rexx y SIGL contiene el número de línea donde surgió el error.
A partir de la versión 4 de Rexx, las condiciones pueden obtener nombres y también hay una CALL ON
construcción. Eso es útil si las funciones externas no necesariamente existen:
ChangeCodePage : procedimiento / * proteger la configuración de SEÑAL * / señal en el nombre de sintaxis ChangeCodePage . Trampa return SysQueryProcessCodePage () ChangeCodePage . Trampa : devuelve 1004 / * windows-1252 en OS / 2 * /
Ver también
- ISPF
- XEDIT
- Comparación de carcasas de computadora
- Comparación de lenguajes de programación
Referencias
- ^ a b Mark Hessling (25 de octubre de 2012). "Intérprete Regina Rexx" . Proyecto SourceForge regina-rexx . Consultado el 10 de febrero de 2014 .
- ^ a b c MF Cowlishaw . "Breve historia de IBM REXX" . IBM . Consultado el 15 de agosto de 2006 .
- ^ a b Melinda Varian. "Simposio REXX, mayo de 1995" .
- ^ "Catálogo de todos los documentos (filter = rexx)" . Servidor de bibliotecas de IBM . 2005 . Consultado el 10 de febrero de 2014 .
- ^ "¿ArcaOS incluye soporte para REXX?" . Consultado el 3 de septiembre de 2020 .
- ^ IBM Virtual Machine Facility / 370: EXEC User's Guide (PDF) (Segunda edición). Corporación de Máquinas de Negocios Internacionales. Abril de 1975. GC20-1812-1.
- ^ Referencia EXEC 2 (PDF) (Segunda ed.). Corporación de Máquinas de Negocios Internacionales. Abril de 1982. p. 92. SC24-5219-1.
- ^ a b MF Cowlishaw (1984). "El diseño del lenguaje REXX" (PDF) . IBM Systems Journal, VOL 23, nº 4, 1984 (PDF). IBM Research . pag. 333. doi : 10.1147 / sj.234.0326 . Consultado el 23 de enero de 2014 .
¿Podría haber un factor de asombro alto asociado con la nueva función? Si el usuario no aplica accidentalmente una característica y provoca lo que le parece un resultado impredecible, esa característica tiene un factor de asombro alto y, por lo tanto, no es deseable. Si una característica necesaria tiene un factor de asombro alto, puede ser necesario rediseñar la característica.
- ^ MF Cowlishaw (18 de febrero de 1981). "REX - Un lenguaje de programación de comandos" . COMPARTE . Consultado el 15 de agosto de 2006 .
- ^ Lundin, Leigh; Woodruff, Mark (23 de abril de 1987). "T / REXX, un compilador REXX para CMS" . Oficina de derechos de autor de EE . UU . Washington, DC: Independent Intelligence Incorporated (TXu000295377).
- ^ a b Howard Fosdick (2005). Referencia del programador de Rexx . Wiley Publishing . pag. 390. ISBN 0-7645-7996-7.
- ^ "Implementaciones de Rexx" . RexxLA. Archivado desde el original el 24 de septiembre de 2006 . Consultado el 15 de agosto de 2006 .
- ^ Si bien ANSI INCITS 274-1996 / AMD1-2000 (R2001) y ANSI INCITS 274-1996 (R2007) son de pago, se puede descargar un borrador gratuito: "Estándar nacional estadounidense para sistemas de información - Lenguaje de programación REXX" (PDF) . X3J18-199X.
- ^ "Los próximos 50 lenguajes de programación" . Índice TIOBE . tiobe.com. 2017. Archivado desde el original el 19 de enero de 2017 . Consultado el 10 de enero de 2017 .
- ^ MF Cowlishaw (1990). El lenguaje Rexx: un enfoque práctico de la programación (2ª ed.). Prentice Hall . ISBN 0-13-780651-5.
- ^ http://www.uic.edu/depts/accc/software/regina/rexxrule.html#p02h24
Otras lecturas
- Callaway, Merrill. El libro de cocina de ARexx: una guía tutorial para el lenguaje ARexx en la computadora personal Commodore Amiga . Whitestone, 1992. ISBN 978-0963277305 .
- Callaway, Merrill. El libro de cocina de Rexx: una guía de aprendizaje del lenguaje Rexx en OS / 2 y Warp en la computadora personal de IBM . Whitestone, 1995. ISBN 0-9632773-4-0 .
- Cowlishaw, Michael. El lenguaje Rexx: un enfoque práctico de la programación . Prentice Hall, 1990. ISBN 0-13-780651-5 .
- Cowlishaw, Michael. El lenguaje NetRexx . Prentice Hall, 1997. ISBN 0-13-806332-X .
- Daney, Charles. Programación en REXX . McGraw-Hill, TX, 1990. ISBN 0-07-015305-1 .
- Ender, Tom. Programación orientada a objetos con Rexx . John Wiley e hijos, 1997. ISBN 0-471-11844-3 .
- Fosdick, Howard. Referencia del programador de Rexx . Wiley / Wrox, 2005. ISBN 0-7645-7996-7 .
- Gargiulo, Gabriel. REXX con características OS / 2, TSO y CMS . MVS Training, 1999 (tercera edición 2004). ISBN 1-892559-03-X .
- Goldberg, Gabriel y Smith, Philip H. The Rexx Handbook . McGraw-Hill, TX, 1992. ISBN 0-07-023682-8 .
- Goran, Richard K. REXX Manual de resumen de referencia . CFS Nevada, Inc., 1997. ISBN 0-9639854-3-4 .
- IBM Redbooks. Implementación del soporte de Rexx en Sdsf . Vervante, 2007. ISBN 0-7384-8914-X .
- Kiesel, Peter C. Rexx: Técnicas avanzadas para programadores . McGraw-Hill, TX, 1992. ISBN 0-07-034600-3 .
- Marco, Lou Desarrollo ISPF / REXX para programadores experimentados . Libros CBM, 1995. ISBN 1-878956-50-7
- O'Hara, Robert P. y Gomberg, David Roos. Programación moderna con Rexx . Prentice Hall, 1988. ISBN 0-13-597329-5 .
- Rudd, Anthony S. 'Uso práctico de TSO REXX'. CreateSpace, 2012. ISBN 978-1475097559 .
- Schindler, William. Con los pies en la tierra Rexx . Software de nicho perfecto, 2000. ISBN 0-9677590-0-5 .
enlaces externos
- Página de inicio de Mike Cowlishaw
- Página de idioma REXX en IBM
- Asociación de idiomas REXX
- Lenguaje de programación Rexx en Open Hub