Articulo de referencia

Objeto REXX

Object REXX es un lenguaje de programación de alto nivel , de propósito general , interpretado y orientado a objetos ( basado en clases ) . Es una continuación y una extensión s...

Object REXX es un lenguaje de programación de alto nivel , de propósito general , interpretado y orientado a objetos ( basado en clases ) .

Es una continuación y una extensión significativa del lenguaje de programación Rexx (a menudo llamado "Classic Rexx"). Object REXX conserva todas las características y la sintaxis de "Classic Rexx" al tiempo que agrega capacidades completas de programación orientada a objetos (OOP). Aunque Object REXX no implementa todos los aspectos del estándar "Tecnología de la información: lenguaje de programación REXX" ANSI X3.274-1996 [1] , ofrece muchas características nuevas propias.

Siguiendo la influencia de "Classic Rexx", Object REXX está diseñado para que sea fácil de aprender, usar y mantener. Hay varias implementaciones orientadas a objetos de REXX disponibles, incluidas Open Object Rexx ("ooRexx") y Rexx Object Oriented ("roo!"). [2] : 311 

Historia

En 1988, el proyecto "Oryx" de IBM , bajo la dirección técnica de Simon C. Nash, experimentó con la fusión de "Classic Rexx" con el modelo de objetos de Smalltalk . [3] [4] La motivación detrás del proyecto era transferir las ventajas de OOP a "Classic Rexx" mientras se mantenía la compatibilidad y, por lo tanto, transferir la usabilidad de "Classic Rexx" a OOP. [5] Al principio, los proyectos se centraron en el aspecto de OOP, como tratar todo como un objeto, encapsulación y paso de mensajes basados ​​en objetos, concurrencia basada en objetos , clases y herencia . [6]

Este trabajo inicial condujo posteriormente, bajo la dirección de Rick McGuire, al primer prototipo de Object REXX, que se presentó en 1992. En 1994, IBM anunció que Object REXX reemplazaría a "Classic Rexx" como el intérprete REXX estándar en la siguiente versión de OS/2 . [4] En 1996, Object REXX [a] fue lanzado como parte del sistema operativo OS/2 Warp 4. [7] En 1997, siguieron versiones para Windows 95 , Windows NT y Linux . [8] [9] En 1999 se lanzó una versión de Object REXX para AIX V4.1.5 o superior. [10] En 2000, siguieron versiones para  zLinux y Sun/Solaris . Para Windows 2000 , Windows Me , Windows 98 y Windows NT 4.0 , la última actualización importante de Object REXX se lanzó en 2001. [11]

El 12 de octubre de 2004, IBM anunció la discontinuación de Object REXX y transfirió el código fuente y los derechos de licencia [b] al grupo de interés especial (SIG) sin fines de lucro, la Rexx Language Association (RexxLA). En 2005, la RexxLA lanzó ooRexx como una nueva encarnación de Object REXX como software libre y de código abierto bajo la Licencia Pública Común . [12] Esta primera versión de ooRexx 3.0.0 ha sido refactorizada en gran medida en comparación con el código fuente original de IBM para aumentar la legibilidad. Más tarde, el núcleo de ooRexx se reescribió en C++ puro , y se diseñó e implementó una nueva arquitectura e interfaz nativa bajo la dirección técnica de Rick McGuire. Este trabajo permitió a la RexxLA lanzar ooRexx 4.0.0 con soporte para 64 bits en 2009. Hasta el día de hoy, la RexxLA continúa desarrollando, brindando soporte y manteniendo ooRexx, así como "Classic Rexx" y NetRexx . Además, la RexxLA organiza simposios anuales. [13]

El intérprete Object REXX original de IBM sigue estando disponible en sistemas operativos derivados de OS/2, como ArcaOS y eComStation .

Lanzamientos

La siguiente tabla contiene características y cambios destacables de las principales versiones del intérprete Object REXX y ooRexx. Todas las versiones de ooRexx y la documentación necesaria están disponibles en Sourceforge . [14] [15] Para las distribuciones basadas en Arch Linux, la versión actual y la versión de desarrollo están disponibles como Arch User Repository . Desde la versión 5.0.0, hay disponibles versiones portátiles del intérprete que permiten su uso sin instalación.

Leyenda:
Versión antigua
Old version, still maintained
Última versión
Latest preview version
Lanzamiento futuro

Filosofía y características del diseño

ooRexx está diseñado para conservar todas las características de "Classic Rexx". Cumple [c] con el estándar ANSI para el lenguaje Rexx (X3.274-1996, "Programming Language Rexx" [1] ), para la interoperabilidad entre plataformas con otras implementaciones que lo cumplan. Por lo tanto, los programas "Classic Rexx" normalmente se ejecutan bajo ooRexx sin ningún cambio. Esto facilita la transferencia tanto del código del programa como del conocimiento del desarrollador desde "Classic Rexx" a ooRexx. A esto, ooRexx agrega todas las características de OOP, como subclasificación , polimorfismo y encapsulamiento de datos . Otras características incluyen herencia múltiple a través de clases mixin .

El código que IBM publicó en código abierto en 2004 no incluía las clases para IBM System Object Model (SOM) y Workplace Shell (WPS). [30] La versión OS/2 de IBM Object REXX incluye clases para soportar SOM [31] y WPS. [32] Estas también están incluidas en el producto de continuación inicial de OS/2, eComStation, y también en su descendiente actual, ArcaOS. [33]

ooRexx sigue la filosofía de diseño de "Classic Rexx" para crear un lenguaje de programación "centrado en el ser humano" que sea fácil de aprender, codificar, recordar y mantener, en parte manteniendo el lenguaje pequeño y siguiendo el principio del menor asombro . [2] [34] ooRexx 5.0.0, por ejemplo, contiene solo treinta instrucciones de palabras clave. [35] Además, solo hay un tipo de datos, la cadena de caracteres , que no tiene que declararse, lo que reduce el esfuerzo para los programadores en comparación con los lenguajes estrictamente tipados . [36]

Forma libre

Como "Classic Rexx", ooRexx tiene una sintaxis de formato libre donde la posición del código del programa es irrelevante. Antes de la ejecución, el intérprete fusiona múltiples espacios en blanco sin comillas en uno solo, mientras que una cadena de caracteres entre comillas (simples o dobles) no se modifica. La concatenación se puede solicitar explícitamente con dos barras verticales ( ||), o implícitamente separando términos con espacios o uniendo términos. Dado que un lenguaje de formato libre requiere que se consideren menos reglas sintácticas, se supone que facilita el esfuerzo de aprendizaje al reducir la carga cognitiva intrínseca . [37]

decir "Hola mundo!" /* salida: ¡Hola mundo! */ decir "Este" 'es' "REXX!" /* salida: ¡Este es REXX! */ decir "Adiós" "adiós" || '!' /* salida: ¡Adiós! */ 
hola = 'Hola' decir Hola 'mundo!' /* salida: ¡Hola mundo! */ decir Hola 'mundo!' /* salida: ¡Holamundo! */                      
                
                      
                       
                       

Sin distinción entre mayúsculas y minúsculas

Como "Classic Rexx", ooRexx es un lenguaje de programación que no distingue entre mayúsculas y minúsculas . El intérprete pone en mayúsculas todos los caracteres que no están entre comillas antes de ejecutarlos. Como no es necesario diferenciar entre mayúsculas y minúsculas, se necesitan aprender menos detalles adicionales y se evitan errores de sintaxis frustrantes. [37]

a = " Esto" 'es' "REXX!" /* una cadena fusionada */ Decir A /* salida: ¡Esto es REXX! */ DECIR a /* salida: ¡Esto es REXX! */                
                                  
                                  

Paradigma del mensaje

De manera similar al paradigma de mensajería implementado por Alan Kay en Smalltalk, todo en ooRexx es un objeto con el que se puede comunicar mediante el envío de mensajes que nombran un método. La noción de enviar mensajes a objetos como si fueran seres vivos ayuda a los principiantes a aprender los conceptos de programación orientada a objetos. [38]

A diferencia de Smalltalk, hay un operador de mensaje explícito, la tilde ( ~), donde el objeto receptor se coloca a la izquierda de él y se devuelve el resultado de la operación. Al igual que Smalltalk, los mensajes de ooRexx se pueden poner en cascada si ~~se utilizan dos tildes ( ) en lugar de una, devolviendo el objeto que recibió el método en lugar del resultado producido. El comportamiento predeterminado de la mayoría de los métodos se puede cambiar especificando una opción, que puede escribirse con todas las letras o abreviarse y no distingue entre mayúsculas y minúsculas. Esto permite una comprensión literal y reduce el esfuerzo de aprendizaje para los principiantes. [37] Por ejemplo, el método strip elimina por defecto los espacios en blanco iniciales y finales. Este comportamiento se puede cambiar, por ejemplo, especificando "leading"o "l"como opción.

a = " Esto" 'es' "ooRexx!" /* una cadena fusionada */ Digamos A /* salida: ¡Esto es ooRexx! */ Digamos a ~ Strip ( "Leading" ) /* salida: ¡Esto es ooRexx! */ Digamos A ~ strip ( "l" ) /* salida: ¡Esto es ooRexx! */              
                                  
                 
                       

Funciones integradas y externas

La versión 5.0.0 de ooRexx contiene 82 funciones integradas , cuyo número se ha mantenido relativamente estable a lo largo de los años. [35] Mediante la ::requires directiva , se pueden integrar bibliotecas de funciones externas por programa. Dichas bibliotecas suelen estar organizadas en torno a funciones específicas del dominio.

La biblioteca de extensión Rexx proporciona una clase para leer y escribir archivos de valores separados por comas (CSV), para crear y procesar datos de notación de objetos JavaScript (JSON) y un entorno de subcomandos que emula parcialmente un entorno TSO / CMS . [39] La biblioteca RxMath ofrece funciones matemáticas avanzadas como cálculo de raíz cuadrada, función exponencial, logaritmo, seno, coseno, tangente, arcoseno y cálculo de potencia. [40] La biblioteca RxSock permite incorporar protocolos TCP/IP , [41] mientras que la biblioteca RxFtp [42] proporciona específicamente acceso al protocolo de transferencia de archivos .

Puentes

La extensión de Windows incluye un motor de scripts de Windows Script Host (WSH) que se puede utilizar para realizar tareas de automatización general. También incluye compatibilidad con Object Linking and Embedding / ActiveX (OLE) que permite interactuar con programas de Windows como Microsoft Office a través de OLEObject. [43] ooSQLite proporciona una interfaz para SQLite , una biblioteca en proceso que implementa un motor de base de datos SQL transaccional autónomo, sin servidor y de configuración cero . [44] También hay una biblioteca externa que implementa un puente Java bidireccional , basado en Bean Scripting Framework , llamado BSF4ooRexx, que permite utilizar clases Java en programas ooRexx. [38]

Específico del sistema operativo

Para Windows, ooRexx incluye el marco OODialog que permite producir cuadros de diálogo de Windows y, por lo tanto, interfaces gráficas de usuario . [45] Además del soporte OLE, permite que la extensión de Windows interactúe con el administrador de programas de Windows, el registro de eventos del sistema , el portapapeles y el registro, así como consultar, editar e interactuar con ventanas, menús o submenús. [43]

Para los sistemas operativos compatibles con POSIX , la biblioteca de clases nCurses permite escribir interfaces de usuario basadas en texto utilizando la biblioteca de programación ncurses . [46] La biblioteca RxUnixSys proporciona funciones en la mayoría de los sistemas Unix para interactuar con procesos e hilos, usuarios y grupos de usuarios, archivos y sistemas de archivos y otros. [47]

Notas

  1. ^ Incluye interfaces con el Modelo de objetos del sistema (SOM) y Workplace Shell (WPS)
  2. ^ Excluyendo los paquetes SOM y WPS
  3. ^ Object REXX y Open Object Rexx no incluyen todas las nuevas características del estándar ANSI Rexx.

Referencias

  1. ^ ab "X3.274-1996 Instituto Nacional Estadounidense de Estándares para el Lenguaje de Programación Rexx" (PDF) .
  2. ^ ab Fosdick, Howard (2005). Referencia del programador Rexx. Wiley Publishing. ISBN  0-7645-7996-7.
  3. ^ "7 razones por las que Rexx sigue siendo importante". SmartBear.com . Consultado el 19 de junio de 2024 .
  4. ^ ab "IBM Object REXX - EDM2". www.edm2.com . Consultado el 19 de junio de 2024 .
  5. ^ Nash, Simon C. (11 de junio de 1990). "REXX orientado a objetos" (PDF) . Actas del Simposio REXX para desarrolladores y usuarios : 76-100.
  6. ^ Nash, Simon C. (21 de mayo de 2009). "Una retrospectiva de Object Rexx" (PDF) . Actas del 20.º Simposio sobre el lenguaje Rexx .
  7. ^ "IBM Object REXX para OS/2 - EDM2". www.edm2.com . Consultado el 19 de junio de 2024 .
  8. ^ "IBM Object REXX ahora funciona en Windows NT y Windows 95". IBM. 25 de febrero de 1997.
  9. ^ Schweizer, Manfred; Berger, Uwe (21 de abril de 2005). "De Object REXX a ooRexx" (PDF) . Actas del 16.º Simposio sobre el lenguaje Rexx .
  10. ^ "IBM Object REXX para AIX: lenguaje de programación orientado a objetos para programadores principiantes y avanzados". IBM. 30 de marzo de 1999.
  11. ^ "IBM Object REXX para Windows V2R1: Programación orientada a objetos para usuarios principiantes y avanzados". IBM. 20 de marzo de 2001.
  12. ^ "Retirada de software y suspensión del servicio: IBM Object REXX". IBM. 12 de octubre de 2004.
  13. ^ "RexxLA - Simposios Rexx". www.rexxla.org . Consultado el 17 de mayo de 2024 .
  14. ^ "ooRexx (Open Object Rexx) - Busque /oorexx en SourceForge.net". sourceforge.net . Consultado el 18 de mayo de 2024 .
  15. ^ "ooRexx (Open Object Rexx) - Examinar /oorexx-docs en SourceForge.net". sourceforge.net . Consultado el 18 de mayo de 2024 .
  16. ^ "IBM Object REXX para OS/2 - EDM2". www.edm2.com . Consultado el 19 de junio de 2024 .
  17. ^ "IBM Object REXX ahora funciona en Windows NT y Windows 95". IBM. 25 de febrero de 1997.
  18. ^ "IBM Object REXX para AIX: lenguaje de programación orientado a objetos para programadores principiantes y avanzados". IBM. 30 de marzo de 1999.
  19. ^ "IBM Object REXX para Windows V2R1: Programación orientada a objetos para usuarios principiantes y avanzados". IBM. 20 de marzo de 2001.
  20. ^ "Noticias de ooRexx". Sourceforge . Consultado el 18 de mayo de 2024 .
  21. ^ Open Object Rexx Reference Version 3.0.0 Edition (PDF) . RexxLA. 24 de marzo de 2005 . Consultado el 18 de mayo de 2024 .
  22. ^ "Noticias de ooRexx". Sourceforge . Consultado el 18 de mayo de 2024 .
  23. ^ "Noticias de ooRexx". Sourceforge . Consultado el 18 de mayo de 2024 .
  24. ^ "Noticias de ooRexx". Sourceforge . Consultado el 18 de mayo de 2024 .
  25. ^ "ooRexx 4.0.0: Readme" (PDF) . Consultado el 18 de mayo de 2024 .
  26. ^ "ooRexx 4.1.0: ReleaseNotes" . Consultado el 18 de mayo de 2024 .
  27. ^ "ooSQLite: Readme" . Consultado el 18 de mayo de 2024 .
  28. ^ "ooRexx 4.2.0: Cambios" . Consultado el 18 de mayo de 2024 .
  29. ^ "ooRexx 5.0.0: Cambios" . Consultado el 18 de mayo de 2024 .
  30. ^¿ Dónde está el soporte de SOM en 4.0.0?
  31. ^ Willis Boughton (2004). "SOM y Object REXX". EDM/2 . Consultado el 2 de febrero de 2014 .
  32. ^ "Acceso a objetos de Workplace Shell". Referencia de objetos REXX . IBM.
  33. ^ "¿ArcaOS incluye soporte para REXX?" . Consultado el 3 de septiembre de 2020 .
  34. ^ Cowlishaw, Mike (1987). "El diseño del lenguaje REXX". ACM SIGPLAN Notices . 22 (2): 26–35. doi :10.1145/24686.24687.
  35. ^ ab Ashley, W. David; Flatscher, Rony G.; Hessling, Mark; McGuire, Rick; Peedin, Lee; Sims, Oliver; Wolfers, Jon (2022). Documentación de ooRexx 5.0.0 Referencia de objetos abiertos Rexx (PDF) . RexxLA.
  36. ^ Stefik, Andreas; Siebert, Susanna (2013). "Una investigación empírica sobre la sintaxis de los lenguajes de programación". ACM Transactions on Computing Education (TOCE) . 13 (4): 1–40. doi :10.1145/2534973.
  37. ^ abc Winkler, Till; Flatscher, Rony G. "Carga cognitiva en la educación en programación: aliviando la carga de los principiantes con REXX" (PDF) . Conferencia centroeuropea sobre sistemas de información e inteligencia .
  38. ^ ab Flatscher, Rony G.; Winkler, Till. "Uso del paradigma del mensaje para facilitar el aprendizaje de conceptos y programación orientados a objetos" (PDF) . En 2024 47th MIPRO ICT and Electronics Convention (MIPRO) : 1244–1249.
  39. ^ Ashley, W. David; Flatscher, Rony G.; Hessling, Mark; McGuire, Rick; Peedin, Lee; Sims, Oliver; Wolfers, Jon (2022). Documentación de ooRexx 5.0.0 Referencia de la biblioteca de extensiones de Rexx (PDF) . RexxLA.
  40. ^ Ashley, W. David; Flatscher, Rony G.; Hessling, Mark; McGuire, Rick; Peedin, Lee; Sims, Oliver; Wolfers, Jon (2022). Documentación de ooRexx 5.0.0 Referencia de funciones matemáticas de RxMath (PDF) . RexxLA.
  41. ^ Ashley, W. David; Flatscher, Rony G.; Hessling, Mark; McGuire, Rick; Peedin, Lee; Sims, Oliver; Wolfers, Jon (2022). Documentación de ooRexx 5.0.0 Referencia de funciones de socket TCP/IP de RxSock (PDF) . RexxLA.
  42. ^ Ashley, W. David; Flatscher, Rony G.; Hessling, Mark; McGuire, Rick; Peedin, Lee; Sims, Oliver; Wolfers, Jon (2022). Documentación de ooRexx 5.0.0 Referencia de la biblioteca de clases RxFtp (PDF) . RexxLA.
  43. ^ ab Ashley, W. David; Flatscher, Rony G.; Hessling, Mark; McGuire, Rick; Peedin, Lee; Sims, Oliver; Sims, Oliver; Wolfers, Jon (2022). Documentación de ooRexx 5.0.0 Referencia de extensiones de Windows (PDF) . RexxLA.
  44. ^ Ashley, W. David; Flatscher, Rony G.; McGuire, Rick; Miesfeld, Mark; Peedin, Lee; Sims, Oliver; Wolfers, Jon (2022). Documentación de ooRexx 1.0.0 Referencia de ooSQLite (PDF) . RexxLA.
  45. ^ Ashley, W. David; Flatscher, Rony G.; McGuire, Rick; Peedin, Lee; Sims, Oliver; Wolfers, Jon (2019). Documentación de ooRexx 4.2.4 Referencia de ooDialog (PDF) . RexxLA.
  46. ^ Ashley, W. David; Flatscher, Rony G.; Hessling, Mark; McGuire, Rick; Peedin, Lee; Sims, Oliver; Steinböck, Erich; Wolfers, Jon (2022). Documentación de ooRexx 5.0.0 Referencia de la biblioteca de clases nCurses (PDF) . RexxLA.
  47. ^ Ashley, W. David; Flatscher, Rony G.; Hessling, Mark; McGuire, Rick; Peedin, Lee; Sims, Oliver; Steinböck, Erich; Wolfers, Jon (2022). Documentación de ooRexx 5.0.0 Referencia de funciones de extensiones de Unix (PDF) . RexxLA.
  • Asociación de Lenguaje Rexx
  • Documentación de Open Object Rexx 5.0.0
  • Abrir objeto Rexx en Sourceforge
Retrieved from "https://en.wikipedia.org/w/index.php?title=Object_REXX&oldid=1247469600"