Rexx - Rexx

Rexx
Rexx-img-lg.png
Paradigma multiparadigma : procedimental , estructurado
Diseñada por Mike Cowlishaw
Desarrollador Mike Cowlishaw, IBM
Apareció por primera vez 1979 ; Hace 42 años ( 1979 )
Lanzamiento estable
ANSI X3.274 / 1996 ; Hace 25 años ( 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, REXX personal, REXX / imc
Dialectos
NetRexx , Object REXX , ahora ooREXX , KEXX
Influenciado por
PL / I , ALGOL , EJEC , EJEC 2
Influenciado
NetRexx , objeto REXX

Rexx ( Ejecutor extendido reestructurado ) es un lenguaje de programación interpretado desarrollado en IBM por Mike Cowlishaw . 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 mainframe IBM .

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 usa 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 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 y Windows NT 4.0 (Kit de recursos: Regina). Las secuencias de comandos REXX para OS / 2 comparten la extensión de nombre de archivo .cmd con otros lenguajes de secuencias de comandos, y la primera línea de la secuencia de comandos 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 , EXEC 2 y REXX en CP / CMS y VM / 370 a través de 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 .

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 . 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, 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 y comercializada por Mansfield Software Group (fundada por Kevin J. Kearney en 1986). La primera versión del compilador apareció en 1987, escrita para CMS por Lundin y Woodruff. 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 , Apple Macintosh , y Mac OS X .

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 de Anders Christensen (más tarde 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". 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 .

En enero de 2017, REXX figuraba en el índice TIOBE como uno de los cincuenta idiomas en su top 100 que no pertenece al top 50.

En 2019, el 30 ° Simposio de la Asociación de Idiomas Rexx marcó el 40 ° aniversario de Rexx. El simposio se llevó a cabo en Hursley, Inglaterra, donde se diseñó e implementó Rexx por primera vez.

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. 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 en 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.

Sintaxis

Bucle

La estructura de control de bucle en Rexx comienza con ay DOtermina con un ENDpero viene en varias variedades. NetRexx usa la palabra clave en LOOPlugar de DOpara hacer un bucle, mientras que ooRexx trata LOOPy DOcomo 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:

 do while [condition]
 [instructions]
 end
 do until [condition]
 [instructions]
 end

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]
 [instructions]
 end

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:

 do expression
 [instructions]
 end

Rexx puede incluso realizar un bucle hasta que finalice el programa:

 do forever
 [instructions]
 end

Un programa puede salir del bucle actual con la leaveinstrucción, que es la forma normal de salir de un do foreverbucle, o puede cortocircuitarlo con la iterateinstrucción.

Bucles combinados

Lo más inusual es que Rexx permite combinar elementos tanto condicionales como repetitivos en el mismo ciclo:

 do index = start [to limit] [by increment] [for count] [while condition]
 [instructions]
 end
 do expression [until condition]
 [instructions]
 end

Condicionales

Condiciones de prueba con IF:

 if [condition] then
 do
 [instructions]
 end
 else
 do
 [instructions]
 end

La ELSEcláusula es opcional.

Para instrucciones únicas, DOy ENDtambién se puede omitir:

 if [condition] then
 [instruction]
 else
 [instruction]

La sangría es opcional, pero ayuda a mejorar la legibilidad.

Prueba de múltiples condiciones

SELECTes 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 WHENclá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-...-ELSEcódigo en cascada que a la switchdeclaración de C o Java .

 select
 when [condition] then
 [instruction] or NOP
 when [condition] then
 do
 [instructions] or NOP
 end
 otherwise
 [instructions] or NOP
 end

La NOPinstrucció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:

 say hello /* => HELLO */
 hello = 25
 say hello /* => 25 */
 hello = "say 5 + 3"
 say hello /* => say 5 + 3 */
 interpret hello /* => 8 */
 drop hello
 say hello /* => HELLO */

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 . Una variable compuesta consta de un tallo seguido de una cola. UNA . (punto) se utiliza para unir el tallo a la cola. Si las colas utilizadas son numéricas, es fácil producir el mismo efecto que una matriz.

 do i = 1 to 10
 stem.i = 10 - i
 end

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 = 'Monday'
 stem.i = 2

En Rexx también es posible establecer un valor predeterminado para una raíz.

 stem. = 'Unknown'
 stem.1 = 'USA'
 stem.44 = 'UK'
 stem.33 = 'France'

Después de estas asignaciones stem.3se produciría el plazo 'Unknown'.

La raíz completa también se puede borrar con la instrucción DROP.

 drop stem.

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.0se 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: procedure expose dictionary.
 parse arg w
 n = dictionary.0 + 1
 dictionary.n = w
 dictionary.0 = n
 return

También es posible tener varios elementos en la cola de una variable compuesta. Por ejemplo:

 m = 'July'
 d = 15
 y = 2005
 day.y.m.d = 'Friday'

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: procedure expose count. word_list
 parse arg w .
 count.w = count.w + 1 /* assume count. has been set to 0 */
 if count.w = 1 then word_list = word_list w
 return

y luego más tarde:

 do i = 1 to words(word_list)
 w = word(word_list,i)
 say w count.w
 end

A costa de algo de claridad, es posible combinar estas técnicas en un solo tallo:

 add_word: procedure expose dictionary.
 parse arg w .
 dictionary.w = dictionary.w + 1
 if dictionary.w = 1 /* assume dictionary. = 0 */
 then do
 n = dictionary.0+1
 dictionary.n = w
 dictionary.0 = n
 end
 return

y después:

 do i = 1 to dictionary.0
 w = dictionary.i
 say i w dictionary.w
 end

Rexx no proporciona una red de seguridad aquí, por lo que si una de las palabras resulta ser un número entero menor, dictionary.0esta 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.

 do i over stem.
 say i '-->' stem.i
 end

Instrucciones de palabras clave

ANALIZAR GRAMATICALMENTE

La PARSEinstrucción es particularmente poderosa; combina algunas funciones útiles para el manejo de cadenas. Su sintaxis es:

 parse [upper] origin [template]

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 clave withes necesaria para indicar dónde termina la expresión
  • var (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

upperes 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"
 parse var myVar firstName lastName
 say "First name is:" firstName
 say "Last name is:" lastName

muestra lo siguiente:

 First name is: John
 Last name is: Smith

Usando un delimitador como plantilla:

 myVar = "Smith, John"
 parse var myVar LastName "," FirstName
 say "First name is:" firstName
 say "Last name is:" lastName

también muestra lo siguiente:

 First name is: John
 Last name is: Smith

Usando delimitadores de números de columna:

 myVar = "(202) 123-1234"
 parse var MyVar 2 AreaCode 5 7 SubNumber
 say "Area code is:" AreaCode
 say "Subscriber number is:" SubNumber

muestra lo siguiente:

 Area code is: 202
 Subscriber number is: 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.

 /* demonstrate INTERPRET with square(4) => 16 */
 X = 'square'
 interpret 'say' X || '(4) ; exit'
 SQUARE: 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 variableconstrucciones. Junto con la función incorporada VALUE, CALL se puede utilizar en lugar de muchos casos de INTERPRET. Este es un programa clásico:

 /* terminated by input "exit" or similar */
 do forever ; interpret linein() ; end

Una "calculadora Rexx" un poco más sofisticada:

 X = 'input BYE to quit'
 do until X = 'BYE' ; interpret 'say' X ; pull X ; end

PULLes la abreviatura de parse upper pull. Asimismo, ARGes 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 inédito de Westinghouse llamado Time Machine que pudo recuperarse por completo después de un error fatal.

NUMÉRICO

 say digits() fuzz() form() /* => 9 0 SCIENTIFIC */
 say 999999999+1 /* => 1.000000000E+9 */
 numeric digits 10 /* only limited by available memory */
 say 999999999+1 /* => 1000000000 */

 say 0.9999999999=1 /* => 0 (false) */
 numeric fuzz 3
 say 0.99999999=1 /* => 1 (true) */
 say 0.99999999==1 /* => 0 (false) */

 say 100*123456789 /* => 1.23456789E+10 */
 numeric form engineering
 say 100*123456789 /* => 12.34567890E+9 */

 say 53 // 7   /* => 4   (rest of division)*/
  Calcula 2 Calcula e
código
 numeric digits 50
 n=2
 r=1
 do forever /* Newton's method */
 rr=(n/r+r)/2
 if r=rr then leave
 r=rr
 end
 say "sqrt" n ' = ' r
 numeric digits 50
 e=2.5
 f=0.5
 do n=3
 f=f/n
 ee=e+f
 if e=ee then leave
 e=ee
 end
 say "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:

 signal on halt;
 do a = 1
	 say a
	 do 100000 /* a delay */
	 end
 end
 halt:
 say "The program was stopped by the user"
 exit

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 novalueNOVALUESYMBOL

La VALUEfunción se puede utilizar para obtener el valor de las variables sin desencadenar una NOVALUEcondició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 SIGLy RCse 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 ONconstrucción. Eso es útil si las funciones externas no necesariamente existen:

 ChangeCodePage: procedure /* protect SIGNAL settings */
 signal on syntax name ChangeCodePage.Trap
 return SysQueryProcessCodePage()
 ChangeCodePage.Trap: return 1004 /* windows-1252 on OS/2 */

Ver también

Referencias

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 & Sons, 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 . CBM Books, 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