CorbaScript es un lenguaje de scripting orientado a objetos diseñado para admitir la interacción con objetos de la arquitectura CORBA ( Common Object Request Broker Architecture ). Fue desarrollado para proporcionar un entorno de scripting flexible para el desarrollo de aplicaciones CORBA tanto del lado del cliente como del servidor, aprovechando las capacidades de invocación dinámica y reflexión de interfaz.
CorbaScript es un lenguaje interpretado dinámico cuya sintaxis se asemeja a la de C++ y Java . Sin embargo, integra varios elementos de diseño de lenguajes dinámicos como Python y Smalltalk . Al igual que estos lenguajes, CorbaScript trata todos los valores como objetos y admite la comprobación dinámica de tipos en tiempo de ejecución. El código fuente se traduce a pseudocódigo ejecutado por una máquina virtual orientada a objetos dedicada que incluye un recolector de basura simple basado en el conteo de referencias . [ 1 ]
Características
Programación básica
CorbaScript incluye características típicas de scripting:
- Ejecución interpretada, apta tanto para el modo interactivo como para el modo por lotes.
- Verificación de tipos en tiempo de ejecución.
- Tipos básicos que incluyen long , double , boolean , char , string , array y dictionary .
- Estructuras de control como if-else , while , do-while y for-in.
- Manejo de excepciones mediante throw y try-catch-finally.
- Procedimientos y módulos definidos por el usuario (archivos de script reutilizables).
- Constructos de programación orientada a objetos , incluyendo clases , herencia múltiple y polimorfismo .
El entorno de ejecución incluye un recolector de basura simple basado en el conteo de referencias .
Integración de CORBA
CorbaScript está estrechamente integrado con el middleware CORBA y proporciona acceso completo tanto a la Interfaz de Invocación Dinámica (DII) como a la Interfaz de Esqueleto Dinámico (DSI):
- Invocación de cualquier objeto CORBA a través de DII, lo que permite la creación de scripts para clientes CORBA.
- Implementación de objetos CORBA a través de DSI, lo que permite escribir servidores en CorbaScript.
- Compatibilidad total con los tipos de datos definidos en el lenguaje de definición de interfaz (IDL) de OMG , incluidos los tipos complejos como struct , union , sequence y array .
- Acceso a parámetros de entrada, salida y entrada/salida mediante la API CORBA DynAny .
- La comprobación de tipos se realiza a través del repositorio de interfaces , con almacenamiento en caché opcional para mejorar el rendimiento.
- Acceso mediante scripts a la estructura de las interfaces IDL para el descubrimiento y la reflexión dinámicos .
Integración avanzada
CorbaScript también incluye capacidades adicionales más allá de la programación básica:
- Carga dinámica de bibliotecas C para la integración de código nativo.
- Soporte experimental para la interacción con una máquina virtual Java .
- Entorno de ejecución extensible que permite incorporar nuevas funcionalidades en C++ .
Módulos
CorbaScript permite que cualquier script funcione como un módulo importable. Algunos módulos estándar incluyen:
- LIBC: acceso dinámico a las funciones de la biblioteca estándar de C.
- E/S: admite la lectura y escritura de archivos binarios y de texto.
- matemáticas : operaciones matemáticas estándar.
- POSIX : Llamadas al sistema POSIX como system() y fork().
- socket : compatibilidad con redes TCP/IP.
- IOR: almacenamiento/recuperación simplificada de referencias a objetos CORBA (IOR).
- NSTools y CosNamingImpl: herramientas e implementación para la gestión del servicio de nombres CORBA .
- shell: clase base para crear programas de shell.
- SMTP : una implementación básica de SMTP.
- Hora : utilidades de fecha y hora.
Manifestaciones
La distribución de CorbaScript incluye una serie de aplicaciones y herramientas de ejemplo:
- hello: una aplicación básica cliente/servidor CORBA "Hola Mundo".
- calc: un servicio de calculadora sencillo.
- chat: un sistema de chat que implementa patrones de diseño de fábrica y observador .
- Componente: componentes de devolución de llamada del cliente que utilizan conexiones implícitas.
- Computadora: un servicio distribuido de números primos.
- Evento: implementación de un canal de eventos mediante el servicio de eventos de OMG.
- cuadrícula: patrón de fábrica para objetos de cuadrícula.
- ir: navegación a través del repositorio de interfaz CORBA.
- Enlace: demostración de invocación recursiva de objetos.
- Nomenclatura: integración con el servicio de nombres CORBA.
- Prueba: demostraciones sobre tipos de argumentos y modos de paso.
- trabajador: ejemplo cliente-servidor que utiliza invocaciones diferidas (asíncronas) .
- remote_cssh: interfaz del motor de scripting que utiliza OMG IDL e invocación remota basada en shell.
- Proceso: Acceso a objetos CORBA y patrón de fábrica mediante URL .
Ejemplos
Hola Ejemplo
A continuación se ilustra cómo se puede utilizar CorbaScript para interactuar con un objeto CORBA definido por la siguiente interfaz OMG IDL:
interface Hello { void hello (); void display ( in string message ); };Mediante CorbaScript, puede invocar operaciones en un objeto CORBA que implemente esta interfaz:
>>> # La variable `hello` hace referencia a un objeto `Hello` de CORBA. >>> hello = Hello ( "IOR:..." ) >>> # Invocando la operación 'hello' >>> hello . hello () >>> # Invocando la operación 'display' >>> hello . display ( "¡Hola Mundo!" )>>> # obtener el servicio de nombres CORBA >>> NS = CORBA . ORB . resolve_initial_references ( "NameService" ) >>> # resolver un nombre en el servicio de nombres CORBA >>> object = NS . resolve ( CosNaming . Name ( CosNaming . NameComponent ( "anHelloObject" , "" )))>>> # Sintaxis más sencilla con conversión automática de secuencia >>> objeto = NS . resolve ([[ "anHelloObject" , "" ]])>>> # invocar operaciones en el objeto resuelto >>> objeto.display ( " ¡ Hola mundo!" )CorbaScript permite la invocación sencilla e intuitiva de objetos CORBA.
Implementación de objetos CORBA en CorbaScript
El siguiente ejemplo muestra cómo implementar la interfaz `Hello` en CorbaScript:
# define una clase de script que implementa la interfaz Hello class HelloImpl { # constructor proc __HelloImpl__ ( self ) {}# Implementación de la operación `hello` proc hello ( self ) { println ( "Se invoca la operación `hello` de OMG IDL." ) }# Implementación de la operación `display` proc display ( self , message ) { println ( message ) } }>>> # crear una instancia >>> hello = HelloImpl ()>>> # invocación local >>> hello . hello () Se invoca la operación `hello` de OMG IDL.>>> hola . display ( "Hola Mundo!" ) ¡Hola Mundo!>>> # Conectarse a CORBA y especificar la interfaz implementada >>> CORBA . ORB . connect ( hello , Hello )>>> # Registrar el objeto en el servicio de nombres CORBA >>> NS = CORBA . ORB . resolve_initial_references ( "NameService" ) >>> NS . bind ([[ "anHelloObject" , "" ]], hello . _this )Este ejemplo demuestra cómo CorbaScript simplifica tanto la invocación como la implementación de objetos CORBA. En la distribución de CorbaScript se incluyen ejemplos adicionales, como una interfaz para el servicio de nombres CORBA y una implementación de CORBA CosNaming.
Disponibilidad
El intérprete de CorbaScript está implementado en C++ y está disponible en la mayoría de los principales sistemas basados en Unix , así como en Windows .
Referencias
- ↑ Características de CorbaScript , corbaweb.lifl.fr (archivado el 22 de abril de 2005)
Enlaces externos
- El lenguaje CorbaScript (archivado)
- Presentación revisada conjunta de CORBA Scripting
- Expresiones regulares: Gestione CORBA con scripts – ITworld
- Tutorial de IDLScript/CorbaScript por Christophe Gransart
- Lenguajes de programación orientados a objetos
- Lenguajes de scripting
- Arquitectura de agente de solicitud de objetos comunes
- Lenguajes de programación
- Temas básicos de lenguajes de programación