rexx

Upload: edgar-alexander-esteves

Post on 02-Mar-2016

56 views

Category:

Documents


0 download

TRANSCRIPT

  • REXX 1

    REXX

    REXX

    Desarrollador(es)

    Mike Cowlishaw e IBM

    Informacin general

    Paradigma multiparadigma

    Apareci en 1979

    Diseado por Mike Cowlishaw

    ltima versin estable ANSI X3.274 (1996)

    Implementaciones IBM NetREXX [1], Open Object Rexx [2], Regina [3], otras

    Dialectos Object REXX, Open Object REXX, NetREXX

    Influido por PL/I, EXEC 2, BASIC

    REXX (REstructured eXtended eXecutor) es un lenguaje de programacin desarrollado en IBM por MikeCowlishaw del que existen numerosas implementaciones disponibles con cdigo abierto. Es un lenguaje deprogramacin estructurado de alto nivel diseado para ser al mismo tiempo fcil de entender y fcil de leer. Hayintrpretes para REXX tanto comerciales como de cdigo abierto para un amplio rango de plataformas y haycompiladores para los mainframes de IBM.El nombre tambin se aplica a la familia de lenguajes relacionados con el lenguaje de programacin REXX: elpropio REXX (llamado en ese contexto REXX clsico o tradicional), Object REXX y NetREXX.

    CaractersticasREXX tiene, entre otras, las siguientes caractersticas: tiene la cadena de caracteres como base no hay declaraciones no hay palabras reservadas (excepto en un contexto local) precisin numrica arbitraria aritmtica decimal un gran conjunto de funciones (especialmente para procesado de cadenas y palabras) gestin automtica de la memoria arrays asociativos acceso directo a las rdenes y facilidades del sistema manejo de errores sencillo herramientas de trazado y depuracin dentro del intrprete acceso a la entrada y salida simplificadoREXX tiene solamente 23 instrucciones de significado bastante evidente para los angloparlantes (call, parse y selectson unos ejemplos) con unos requerimientos mnimos de puntuacin y formateo. Es esencialmente un lenguaje deformato libre con solamente un tipo de dato primitivo: la cadena de caracteres. Esta filosofa implica que todos losdatos son visibles y que la depuracin y el trazado se simplifican.La sintaxis de REXX parece similar a la de PL/I, pero tiene menos notaciones; esto hace que el cdigo sea msdifcil de analizar por el intrprete o el compilador pero ms fcil de usar para el programador.

  • REXX 2

    HistoriaREXX fue diseado e implementado por vez primera como un proyecto personal de Mike Cowlishaw de IBM entreel 20 de marzo de 1979 y mediados de 1982, originalmente como un lenguaje de programacin de 'scripting' parareemplazar los lenguajes EXEC y EXEC 2. Fue diseado para ser un lenguaje de scripting o macros para cualquiersistema y como tal, se considera a REXX precursor de lenguajes como Tcl y Python. Adems, Cowlishaw se centren que estuviese orientado a las personas en lugar de orientado a los ordenadores e intent que el lenguaje semantuviese pequeo y manejable por ello ("Keep the language small" -"Mantn el lenguaje pequeo"- se lea en lapared sobre su escritorio).La primera versin pblica apareci en mayo de 1979 distribuida a travs de VNET, la red interna de IBM y losprimeros usuarios aparte del propio Cowlishaw fueron Ray Mansell (de Hursley en el Reino Unido) y Les Koehler(de Raleigh en Carolina del Norte) que contribuyeron al lenguaje. A finales de 1979 al menos haba unos 70ordenadores con una implementacin del lenguaje.Algunas versiones fueron distribuidas entre compradores seleccionados de IBM como el SLAC (Stanford LinearAccelerator Center) donde la capacidad de REXX de trabajar con aritmtica decimal de precisin arbitraria fue bienrecibida. Al ser descrito por primera vez en pblico en la conferencia SHARE 56 en Houston, Texas, en 1981, lareaccin de los clientes de IBM, liderada por Ted Johnston de SLAC (parcialmente motivada por la aritmtica deREXX), condujo a que se convirtiese en producto oficial de IBM en 1982 y se incluyese en 1983 como parte delsistema VM/CMS.A lo largo de los aos, IBM incluy REXX en forma de intrprete o compilador en casi todos sus sistemasoperativos desde los mainframes a los ordenadores personales (VM/CMS, VM/GCS, MVS TSO/E, AS/400, OS/2,VSE/ESA, AIX, CICS/ESA y PC-DOS) y ha hecho versiones disponibles para Novell Netware, Windows, Java yLinux.La primera versin fuera de IBM fue escrita por Charles Daney en 1984/5. Otras versiones han sido tambindesarrolladas para Atari, Amiga, Unix (mltiples variantes), Solaris, DEC, Windows, Windows CE, PocketPC,MS-DOS, Palm OS, QNX, OS/2, Linux, BeOS, EPOC32, AtheOS, OpenVMS, OpenEdition, Macintosh y Mac OSX.La versin de REXX para Amiga, llamada ARexx debida a Bill Hawes se incluy con AmigaOS 2 y fue populartanto para scripting como para control de aplicaciones. Muchas aplicaciones Amiga tienen "puertos ARexx" en ellaslo que permite controlar la aplicacin a travs de un "script" definido por el usuario.Numerosas versiones gratuitas de REXX estn disponibles. En 1992 aparecieron las dos versiones de cdigo abiertoms ampliamente utilizadas: REXX/imc del britnico Ian Collier para UNIX y Regina del noruego AndersChristensen (posteriormente adoptada por el australiano Mark Hessling) para Windows y Linux. BREXX del griegoVasilis Vlachoudis es bien conocido para DOS, WinCE y PocketPC.Microsoft decidi incluir Regina en todos sus Windows Resource Kits como lenguaje de scripting y continu estaprctica hasta Windows 2000 mientras introduca sus propias aproximaciones al scripting a travs de WSH(Windows Scripting Host) y VBA (Visual Basic for Applications).En 1990, Cathy Dager de SLAC organiz el primer simposio REXX independiente que conducira cuatro aosdespus a la formacin de la RexxLA (REXX Language Association). Los simposios se llevan a cabo anualmente.La RexxLA promovi la aparicin de un estndar ANSI para REXX as como de un borrador para un estndar deObject REXX.En 1996, ANSI se public el estndar para REXX: ANSI X3.2741996 Information Technology ProgrammingLanguage REXX.Desde mediados de la dcada de 1990, existen dos variantes nuevas de REXX: NetREXX que compila a bytecodes Java o es interpretado directamente.

  • REXX 3

    Object REXX que es una versin orientada a objetos compatible con REXX.REXX cumpli su vigesimoquinto aniversario el 20 de marzo de 2004, lo que se celebr en el decimoquintoSimposio Internacional de REXX organizado por la RexxLA (REXX Language Association) en Bblingen,Alemania, en mayo de 2004.En el mismo decimoquinto Simposio Internacional de REXX, el 4 de mayo de 2004, IBM anuncia que retira ObjectREXX como producto y la intencin de abrir el cdigo fuente de Object REXX. Ante este anuncio, la RexxLA seofrece a gestionar el futuro de Object REXX y nombra un comit para encargarse de la transicin. El 12 de octubrede ese mismo ao anuncia que transferir el cdigo a RexxLA para que se convierta en un proyecto de cdigo abiertobajo la licencia Common Public License y el 29 de noviembre de ese mismo ao se ha terminado de transferir todo elcdigo excepto el cdigo especfico de la versin para OS/2, el IBM Resource Workshop (que permita creardilogos para Windows), Object REXX Workbench (IDE) y el paquete de funciones RxFTP. En febrero de 2005aparece la primera versin pblica de ooRexx (Open Object REXX) gestionada por David Ashley y Rick McGuire.

    VariablesEn REXX las variables no tienen tipo e inicialmente se les asigna como valor su nombre en maysculas. De estemodo, el tipo de una variable puede cambiar con el uso dentro del programa. Como ilustra el siguiente cdigo:

    say hola /* HOLA

  • REXX 4

    cadena = '"La vida es sueo", por Caldern de la Barca'

    /* La siguiente cadena est delimitada por comillas.

    Para escribir comillas dentro de la cadena,

    basta escribirlas por duplicado */

    cadena = """La vida es sueo"", por Caldern de la Barca"

    La concatenacin de cadenas puede hacerse implcitamente al poner de forma contigua dos variables oexplcitamente con el operador de concatenacin (||):

    uno = 'Una'

    dos = 'cadena'

    say uno dos /* Una cadena */

    say uno||dos /* Unacadena */

    say uno || ' 'dos /* Una cadena */

    Cuando una cadena literal va seguida de "b" o "x" es tratada como una cadena binaria o hexadecimal:

    /* El carcter para el tabulador horizontal: */

    tab = '09'x /* en hexadecimal */

    tab = '1001'b /* en binario */

    campo_uno = 'Primero'

    campo_dos = 'Segundo'

    say campo_uno || tab || campo_dos

    Como nmeros

    Las cadenas son tratadas como nmeros dependiendo del contexto y cuando son nmeros, pueden escribirse sin losdelimitadores:

    pi = 3.141592

    seis = "6"

    say pi || seis /* 3.1415926 */

    say pi + 6 /* 9.141592 */

    numero_avogadro = 6.022e23

    REXX ofrece la instruccin NUMERIC para establecer la precisin de los clculos numricos (con NUMERICDIGITS), la forma de la salida de las cadenas como nmeros (con NUMERIC FORM) y los dgitos significativosdescartados a la hora de realizar las comparaciones (con NUMERIC FUZZ). Adems las funciones digits(), form() yfuzz() permiten consultar la precisin, la forma y los dgitos significativos descartados en las comparaciones.REXX ofrece una serie de funciones y operadores bsicos para trabajar con nmeros, pero carece de las funcionesmatemticas bsicas (raz cuadrada, funciones trigonomtricas...).

    Como valores lgicos

    Si una cadena vale uno o cero, entonces puede utilizarse como un valor lgico:

    existe = "1"

    if existe & existe = 1 then

    say 'Esta cadena siempre se imprimir'

    else

    say 'Esta cadena nunca se imprimir'

    Puede asignarse el valor lgico de una expresin:

  • REXX 5

    AmayorqueB = A > B /* se asignar 1 a AmayorqueB si A > B, en caso contrario 0 */

    if AmayorqueB then

    say 'A es mayor que B'

    else

    say 'A NO es mayor que B'

    Como estructuras de datos

    Debido a la facilidades que ofrece REXX para trabajar con cadenas, resulta relativamente sencillo crear con unacadena una estructura de datos concreta (un nmero complejo, una matriz, los datos de un libro...):

    /* Por convencin, el programador puede

    tratar la cadena como la unidad imaginaria */

    unidad_imaginaria = "0 1"

    /* Por convencin, el programador puede

    tratar la cadena como la matriz identidad

    de orden tres */

    matriz = "1,0,0;0,1,0;0,0,1"

    /* O, con otra convencin distinta: */

    matriz = "3,3,1,0,0,0,1,0,0,0,1"

    /* Por convencin, el programador puede

    tratar la cadena como los datos de un libro */

    delimitador = '00'x

    titulo = 'The Rexx Language'||,

    ': A Practical Approach to Programming'||,

    ' (Second Edition)'

    autor = 'Michael Cowlishaw'

    isbn = '0137806515'

    libro = titulo || delimitador || autor ||,

    delimitador || isbn

    Variables compuestasEn REXX cualquier variable que incluya un punto tras el primer carcter de su nombre es una variable compuesta(compound variable en ingls). Los caracteres entre el primero y el primer punto (ambos estn incluidos) sonconsiderados el nombre de la variable y recibe el nombre de tronco (stem en ingls). Los caracteres posteriores alpunto son la cola (tail en ingls). As, por ejemplo, si tenemos el smbolo cv.libro.i, cv. es el tronco de lavariable compuesta y libro.i es la cola de la variable compuesta.En REXX clsico, las variables compuestas no pueden pasarse como parmetros por referencia a una funcin, unafuncin no puede devolverlas como resultado y no se incluye un modo de recorrerlas, copiarlas, ni ordenarlas.

    var = 'Hola' /* Variable sencilla */

    var. = 'Hello' /* Variable compuesta INDEPENDIENTE */

    indice = 1

    var.indice = 'Uno'

    var.2 = 'Dos'

    say var /* Hola

  • REXX 6

    drop var.

    say var.1 /* VAR.1

  • REXX 7

    Como estructuras de datos

    Las variables compuestas en REXX pueden usarse para crear estructuras de datos ms complejas (arrays de arraysasociativos, rboles binarios...):

    /* Un nmero complejo */

    unidad_imaginaria.re = 0

    unidad_imaginaria.im = 1

    /* Los datos de un libro */

    libro.!titulo = 'The Rexx Language'||,

    ': A Practical Approach to Programming'||,

    ' (Second Edition)'

    libro.!autor = 'Michael Cowlishaw'

    libro.!ISBN = '0137806515'

    Operadores

    Operadores de concatenacinLos operadores de concatenacin de cadenas en REXX son: (espacio) que concatena dejando un espacio entre las cadenas || que concatena sin dejar espacio entre las cadenas (yuxtaposicin) que concatena sin dejar espacio entre las cadenasEjemplos de uso de estos operadores pueden encontrarse en la seccin dedicada al uso de variables simples enREXX como cadenas.

    Operadores aritmticosLos operadores aritmticos binarios en REXX son los siguientes:

    + suma say 1 + 1 /* 2 */

    - resta say 1 - 1 /* 0 */

    * producto say 2 * 2 /* 4 */

    / cociente say 5 / 2 /* 2.5 */ siempre cociente real entre reales

    % cociente entero say 5 % 2 /* 2 */

    // resto say 5 // 2 /* 1 */ diferente del mdulo; puede dar un nmero negativo

    ** potencia entera say 3 ** 2 /* 9 */ al contrario que en lenguajes como Perl, el exponente siempre es un nmero entero

    Los operadores aritmticos unarios en REXX son: - igual que "0 - nmero" + igual que "0 + nmero"

  • REXX 8

    Operadores lgicosLos operadores lgicos en REXX son: & y boleano | o boleano && o exclusivo \, no

    Estructuras de controlREXX tiene solamente tres instrucciones bsicas para construir todas las estructuras de control propias de laprogramacin estructurada: DO/END, IF/THEN/ELSE y SELECT/WHEN/OTHERWISE/END.La instruccin DO/END sirve para agrupar el cdigo en bloques y para hacer bucles. Las otras dos instruccionespermiten hacer selecciones condicionales de cdigo.

    Bloques DO

    cadena = 'Hola'

    say cadena

    END

    Bucles

    Bucles simples

    veces = 5

    DO veces

    say 'Esto se imprime' veces 'veces'

    END

    DO FOREVER

    say 'Esto se imprime eternamente'

    END

    Bucles controlados

    DO i = 1

    say i

    END i /* Imprime indefinidamente: 1, 2, 3... */

    limite = 100

    DO i = 1 TO limite

    say i

    END i /* Imprime los 100 primeros nmeros naturales */

    veces = 100

    DO i = 1 FOR veces

    say i

    END i /* Imprime los 100 primeros nmeros naturales */

  • REXX 9

    DO i = 10 TO 0 BY -1

    say i

    END i /* Imprime 10, 9, 8... */

    Bucles condicionales

    numero = 1

    limite = 3

    veces = limite - numero

    DO WHILE numero < limite

    numero = numero + 1

    say 'Esto se imprime' veces 'veces'

    END

    numero = 1

    limite = 3

    DO UNTIL numero > limite

    numero = numero + 1

    say 'Esto se imprime' limite 'veces'

    END

    Condicionales IF numero = 1 THEN

    say 'El nmero es igual a 1'

    IF numero = 1 THEN

    say 'El nmero es igual a 1'

    ELSE

    say 'El nmero es distinto de 1'

    IF numero = 1 THEN

    say 'El nmero es igual a 1'

    ELSE IF numero = 2 THEN

    say 'El nmero es igual a 2'

    ELSE

    say 'El nmero es distinto de 1 y 2'

    SELECT

    WHEN numero = 1 THEN

    say 'El nmero es igual a 1'

    WHEN numero = 2 THEN

    say 'El nmero es igual a 2'

    OTHERWISE

    say 'El nmero es distinto de 1 y 2'

    END

  • REXX 10

    Tratamiento de errores y excepcionesEn REXX es posible interceptar los errores y otras excepciones utilizando las instrucciones SIGNAL o CALL. Elestndar ANSI establece que hay siete condiciones (ERROR, FAILURE, HALT, NOVALUE, NOTREADY,LOSTDIGITS y SYNTAX) y no permite definir nuevas excepciones ni generarlas (lo que s es posible en ObjectREXX y NetREXX).Este ejemplo funcionar hasta que sea interrumpido por el usuario o termine el milln de iteraciones del bucle:

    signal on halt

    do i = 1 to 1000000

    say 'El cuadrado de' i 'es' i**2

    end

    exit

    halt:

    say 'El programa ha sido detenido por el usuario'

    La siguiente tabla muestra las condiciones, da una somera idea de cundo aparecen, establece con qu instruccionespueden atraparse y el nivel del lenguaje en el que fueron introducidas.

    ERROR cdigo de retorno (RC) positivo de una orden del sistema SIGNAL y CALL 3.5

    FAILURE RC negativo de una orden del sistema SIGNAL y CALL 3.5

    HALT programa detenido SIGNAL y CALL 3.5

    NOVALUE referenciada una variable sin valor asignado SIGNAL 3.5

    NOTREADY error de entrada o salida SIGNAL y CALL 4.0

    LOSTDIGITS prdida dgitos significativos SIGNAL 5.0

    SYNTAX error de sintaxis o algn error no incluido en los anteriores SIGNAL 3.5

    Cuando una condicin es manejada por SIGNAL ON, las variables especiales SIGL y RC pueden ser analizadaspara entender la situacin. RC contiene el cdigo de error de REXX y SIGL el nmero de lnea donde ocurre elerror.

    El acrnimo REXX

    SignificadoEn la primera especificacin del lenguaje en 1979, Cowlishaw lo llam simplemente "REX" porque le gust cmosonaba y justific ese nombre como proveniente de "Reformed EXecutor".La letra "X" adicional se aadi en 1982 para evitar problemas con marcas registradas cuando un estudio de IBMdescubri que haba un producto comercial llamado Rex-80.Normalmente se considera que REXX es un acrnimo y por lo general Cowlishaw y los documentos de IBM dicenque viene de "REstructured eXtended eXecutor", aunque tambin puede encontrarse como "Restructured EXtendedeXecutor".Debido al hecho de que el nombre original era igual a la palabra latina para "rey", existen muchas referencias a elloen el mundo que rodea al lenguaje: logos en forma de corona (Regina, Open Object REXX...), el nombre delintrprete Regina ("reina" en latn)...

  • REXX 11

    TipografaEn texto plano, Cowlishaw parece preferir Rexx, mientras que en los documentos de IBM y en la mayor parte de laweb se usa REXX. El estndar ANSI utiliza la forma preferida por el comit de estandarizacin, que tiene letrasmaysculas pequeas para las tres letras finales: REXX.

    PronunciacinSe pronuncia como "rex", sin hacer nfasis en la "x" final.

    Bibliografa The Rexx Language: A Practical Approach to Programming (Prentice Hall, 1990), por Michael Cowlishaw, ISBN

    0-13-780651-5 Programming in REXX (McGraw-Hill, 1990), por Charles Daney, ISBN 0-07-015305-1 REXX with OS/2, TSO, & CMS Features (M V S Training, 1999), por Gabriel Gargiulo, ISBN 1-892559-03-X Down to Earth Rexx (Perfect Niche Software, 2000), por William Schindler, ISBN 0-9677590-0-5 Rexx Programmer's Reference (Wiley/Wrox, 2005), por Howard Fosdick, ISBN 0-7645-7996-7

    Enlaces externos Pgina del lenguaje REXX [4] en IBM REXX Language Association [5] (Asociacin del lenguaje REXX) Foro en Ingls sobre Rexx [6] (MVS)

    Intrpretes

    REXX clsico

    Regina [3]: intrprete de cdigo abierto (LGPL) para Linux, BSD, Windows, etc. REXX/imc [7]: intrprete de cdigo abierto (licencia no estndar) para sistemas Unix y Linux. BREXX [8]: intrprete de cdigo abierto (GPL) para DOS, Linux, Windows CE, etc. Reginald [9]: intrprete gratuito para Windows. roo! [10]: intrprete gratuito (Kilowatt Software) para Windows con extensiones orientadas a objetos. r4 [11]: intrprete gratuito (Kilowatt Software) para Windows. REXX para Palm OS [12]: intrprete shareware (Jaxo Inc.) para Palm OS. Personal REXX [13]: intrprete comercial (Quercus Systems) para Windows, OS/2 y DOS. S/REXX [14]: intrprete comercial (Benaroya) para UNIX y Windows. uni-REXX [15]: intrprete commercial (The Workstation Group Ltd.) para UNIX.

  • REXX 12

    Object REXX

    Pgina de Open Object REXX [2]

    NetREXX

    Pgina en IBM de NetREXX [1]

    Grupos de noticias comp.lang.rexx [16]

    Tutores El lenguaje REXX [17]

    Rexx for everyone [18]: una introduccin por David Mertz para IBM developerWorks. Vladimir Zabrodsky's Album of Algorithms and Techniques for Standard Rexx [19]

    Vladimir Zabrodsky's An Introduction to the Rexx Programming Language [20]

    PLEAC-REXX [21]: Programming Language Examples Alike Cookbook para REXX Rexx Frequently Asked Questions (FAQ) [22]: preguntas frecuentes de REXXjaky

    Referencias[1] http:/ / www2. hursley. ibm. com/ netrexx[2] http:/ / www. oorexx. org[3] http:/ / regina-rexx. sourceforge. net[4] http:/ / www. ibm. com/ rexx/[5] http:/ / www. rexxla. org[6] http:/ / www. mvsforums. com/ helpboards/ login. php?redirect=viewforum. php& f=7& start=0[7] http:/ / users. comlab. ox. ac. uk/ ian. collier/ Rexx/ rexximc. html[8] http:/ / ftp. gwdg. de/ pub/ languages/ rexx/ brexx/ html/ rx. html[9] http:/ / www. borg. com/ ~jglatt/ rexx/ rexxuser. htm[10] http:/ / www. kilowattsoftware. com/ rooPage. htm[11] http:/ / www. kilowattsoftware. com/ r4Page. htm[12] http:/ / www. jaxo. com/ rexx[13] http:/ / www. quercus-sys. com[14] http:/ / www. sedit. com/ rexxgrph. html[15] http:/ / www. wrkgrp. com/ unirexx/ index. html[16] http:/ / groups. google. es/ group/ comp. lang. rexx[17] http:/ / www. disc. ua. es/ ~gil/ rexx. html[18] http:/ / www-106. ibm. com/ developerworks/ library/ l-rexx. html[19] http:/ / www. geocities. com/ SiliconValley/ Garage/ 3323/ aat/ index. html[20] http:/ / www. geocities. com/ SiliconValley/ Garage/ 3323/ introrexx. html[21] http:/ / pleac. sourceforge. net/ pleac_rexx/ index. html[22] http:/ / www. mindspring. com/ ~dave_martin/ RexxFAQ. html

  • Fuentes y contribuyentes del artculo 13

    Fuentes y contribuyentes del artculoREXX Fuente: http://es.wikipedia.org/w/index.php?oldid=64580828 Contribuyentes: Acevedo, Canyq, Dodo, GermanX, JRGL, Locovich, Spc, Tirithel, Toad32767, Yago AB, 23 edicionesannimas

    LicenciaCreative Commons Attribution-Share Alike 3.0 Unported//creativecommons.org/licenses/by-sa/3.0/

    REXXCaractersticas Historia Variables Variables simples Como cadenas Como nmeros Como valores lgicos Como estructuras de datos

    Variables compuestas Como arrays asociativos Como arraysComo arrays multidimensionales Como estructuras de datos

    Operadores Operadores de concatenacin Operadores aritmticos Operadores lgicos

    Estructuras de control Bloques Bucles Bucles simples Bucles controlados Bucles condicionales

    Condicionales

    Tratamiento de errores y excepciones El acrnimo REXX Significado Tipografa Pronunciacin

    Bibliografa Enlaces externos Intrpretes REXX clsico Object REXX NetREXX

    Grupos de noticias Tutores

    Licencia