ICL VME
VME (Entorno de máquina virtual) es un sistema operativo de mainframe desarrollado por la empresa británica International Computers Limited (ICL, ahora parte del grupo Fujitsu). Originalmente desarrollado en la década de 1970 (como VME/B, más tarde VME 2900) para impulsar los nuevos mainframes de la serie 2900 de ICL, el sistema operativo ahora se conoce como < b>OpenVME incorpora un subsistema Unix y se ejecuta en computadoras centrales ICL Series 39 y Trimetra, así como en servidores x64 estándar de la industria.
Orígenes
El programa de desarrollo del sistema New Range comenzó con la fusión de International Computers and Tabulators (ICT) e English Electric Computers en 1968. Una de las decisiones fundamentales fue que presentaría un nuevo sistema operativo. Dentro de ICL se llevaron a cabo varios estudios de viabilidad y diseño diferentes, siendo los tres más destacados:
- VME/B (originally System B), dirigido a grandes procesadores como el 2970/2980 y desarrollado en Kidsgrove, Staffordshire y West Gorton, Manchester
- VME/K (originally System T), dirigido a los sistemas de gama media como el 2960 y desarrollado en Bracknell después del diseño original para estos pequeños procesadores, System D, fue reducido. VME/K fue desarrollado e introducido en el mercado, pero finalmente fue reemplazado por VME/B
- VME/T, que nunca fue lanzado, pero garantiza una mención ya que fue concebido para apoyar la "tolerancia por defecto", y depreda los esfuerzos de la exitosa empresa estadounidense de startups Tandem Computers en esta área.
El arquitecto principal de VME/B fue Brian Warboys, quien posteriormente se convirtió en profesor de ingeniería de software en la Universidad de Manchester. Se pueden ver varias influencias en su diseño, por ejemplo, el anterior sistema operativo George 3 de Multics y ICL; sin embargo, fue esencialmente diseñado desde cero.
Se consideraba que VME/B competía principalmente con el mainframe System/370 de IBM como sistema operativo comercial y adoptó la codificación de caracteres EBCDIC.
Historia
Cuando New Range se lanzó por primera vez en octubre de 1974, su sistema operativo se denominó "Sistema B". Cuando se entregó por primera vez, se había convertido en "VME/B".
VME/K se desarrolló de forma independiente (según Campbell-Kelly, "por capricho de Ed Mack") y se entregó más tarde con los mainframes más pequeños, como el 2960. En ese momento, VME/B todavía estaba plagado de problemas de rendimiento y confiabilidad, y el equipo de administración, principalmente estadounidense, tenía dudas al respecto.
ICL había vendido un gran sistema a la Agencia Espacial Europea para procesar datos de Meteosat en su centro de operaciones en Darmstadt. Se desarrolló in situ una variante personalizada de VME/K, conocida como VME/ESA, para cumplir con los requisitos del cliente.
Luego de una crisis financiera en 1980, se incorporó una nueva administración a ICL (Christopher Laidlaw como presidente y Robb Wilmot como director general). Una de las primeras decisiones de la nueva dirección fue eliminar VME/K. Así, en julio de 1981, "VME2900" fue lanzado: aunque presentado a la base de clientes como una fusión de VME/B y VME/K, en realidad era la base de VME/B con algunas características seleccionadas de VME/K injertadas. Esto brindó la oportunidad de eliminar algunas funciones obsoletas, que permanecieron disponibles para los clientes que las necesitaban en forma de "BONVME" opción.
El "2900" el sufijo se eliminó en la versión del sistema 213 (SV213) cuando ICL lanzó la serie 39 en 1985 como sucesora de la serie 2900 original; y el "Abierto" El prefijo se agregó después de SV294. VME se volvió capaz de alojar aplicaciones escritas originalmente para Unix a través de un subsistema basado en UNIX System V Release 3, llamado VME/X, adaptado para ejecutarse bajo VME y usando la codificación de caracteres ASCII.
En 2007, Fujitsu anunció una versión de VME que se ejecuta como un subsistema alojado, llamado superNova, dentro de Microsoft Windows, o SUSE o Red Hat Enterprise Linux en hardware x86-64.
En 2012, el grupo de usuarios de VME, AXiS, anunció que después de casi 40 años se disolvería debido a la reducida base de usuarios.
Fujitsu tenía la intención de admitir VME en las computadoras de los clientes hasta 2020.
En 2020, Fujitsu transfirió 13 aplicaciones de HM Revenue and Customs desde sus computadoras a la plataforma de alojamiento VME administrada virtual de Fujitsu.
A partir de 2022, el Departamento de Trabajo y Pensiones todavía usaba sistemas basados en VME para respaldar los pagos de pensiones estatales.
Arquitectura
VME está estructurado como un conjunto de capas, cada capa tiene acceso a recursos en diferentes niveles de abstracción. Los recursos virtuales proporcionados por una capa se construyen a partir de los recursos virtuales ofrecidos por la capa inferior. El acceso a los recursos de cada capa se controla a través de un conjunto de Niveles de Acceso: para que un proceso use un recurso en un nivel de acceso particular, debe tener una clave de acceso que ofrezca acceso a ese nivel. El concepto es similar a los "anillos de protección" en Multics. La arquitectura permite 16 niveles de acceso, de los cuales los 6 externos están reservados para código de nivel de usuario.
Ortogonalmente a los niveles de acceso, el sistema operativo pone los recursos a disposición de las aplicaciones en forma de Máquina Virtual. Una Máquina Virtual puede ejecutar múltiples procesos. En la práctica, una máquina virtual VME está más cerca del concepto de un proceso en otros sistemas operativos, mientras que un proceso VME es más como un hilo. La asignación de recursos a una máquina virtual utiliza un modelo de pila: cuando se extrae la pila, se liberan todos los recursos asignados a ese nivel de pila. Por lo tanto, las llamadas de una aplicación al sistema operativo se realizan mediante una llamada que conserva la misma pila de procesos, pero con un cambio en el nivel de protección; la eficiencia resultante de las llamadas al sistema es una de las características que hace que la arquitectura sea competitiva.
La comunicación entre máquinas virtuales se logra mediante eventos (canales de comunicación con nombre) y áreas de memoria compartida. La arquitectura de hardware también proporciona instrucciones de semáforo INCT (incremento y prueba) y TDEC (prueba y decremento).
Los archivos y otros objetos persistentes se registran en un repositorio llamado Catálogo. A diferencia de otros sistemas operativos, la jerarquía de nombres de archivos es independiente de la ubicación de un archivo en una cinta o volumen de disco en particular. En los días en que había más necesidad de almacenamiento fuera de línea, esto facilitó el seguimiento de los archivos independientemente de su ubicación y el movimiento de archivos entre ubicaciones sin cambiarles el nombre. Además de los archivos, el Catálogo realiza un seguimiento de los usuarios y grupos de usuarios, volúmenes, dispositivos, conexiones de red y muchos otros recursos. Los metadatos de los archivos se pueden almacenar en un objeto denominado Descripción del archivo. El Catálogo fue probablemente el primer ejemplo de lo que más tarde se llamaría una base de datos entidad-relación.
Las interrupciones se manejan creando un nuevo marco de pila en la pila para el proceso relevante, manejando la interrupción usando este nuevo entorno y luego sacando la pila para volver al proceso interrumpido.
Las excepciones en tiempo de ejecución, denominadas contingencias, son capturadas por el controlador de errores de programa de objetos (OPEH), que puede producir un informe (equivalente a un seguimiento de pila), ya sea de forma interactiva o escrita en un diario.
OMF
El código de objeto compilado se mantiene en un formato llamado OMF (formato de módulo de objeto). A diferencia de muchos otros sistemas operativos, este también es el formato utilizado por el cargador. Hay varios compiladores disponibles, así como utilidades, en particular Collector, que vincula el código de varios módulos OMF en un solo módulo, para una carga más eficiente en tiempo de ejecución, y Module Amender, que permite parchear las instrucciones en un OMF. módulo para corregir errores, utilizando la sintaxis del lenguaje ensamblador.
SCL
El lenguaje de comandos para VME se conoce como SCL (Lenguaje de control del sistema).
Se trata de un lenguaje de programación de alto nivel mucho más reconocible que el control de tareas o los lenguajes de shell que se encuentran en la mayoría de los demás sistemas operativos: se puede comparar con lenguajes de secuencias de comandos como JavaScript, aunque su sintaxis superficial se deriva de Algol 68.
SCL está diseñado para permitir el uso interactivo línea a línea desde una consola o desde un archivo de comando, y la creación de scripts o programas ejecutables (cuando el lenguaje se compila en formato de módulo de objeto de la misma manera que cualquier otro). otro lenguaje de programación VME). La declaración de un procedimiento dentro de SCL también actúa como la definición de un formulario o plantilla simple que permite invocar el procedimiento desde un terminal interactivo, con campos validados de acuerdo con los tipos de datos de los parámetros del procedimiento subyacente o utilizando los valores predeterminados de los parámetros del procedimiento.
El vocabulario de comandos incorporado utiliza una convención de nomenclatura coherente con un verbo imperativo seguido de un sustantivo: por ejemplo, DELETE_FILE o DISPLAY_LIBRARY_DETAILS. El comando se puede escribir completo o en forma abreviada que combina abreviaturas estándar para el verbo y el sustantivo: por ejemplo, XF (X para ELIMINAR, F para ARCHIVO) o DLBD (D para PANTALLA, LB para BIBLIOTECA, D para DETALLES).
SCL tiene una estructura de bloques, con bloques de inicio/fin que cumplen funciones duales y complementarias de definir el alcance léxico de las declaraciones de variables y definir los puntos en los que se deben liberar los recursos adquiridos del sistema operativo. Las variables del lenguaje (a las que se puede acceder desde las aplicaciones en forma de variables de entorno) pueden tener varios tipos simples, como cadenas, supercadenas (secuencias de cadenas), booleanos y enteros, y también se utilizan para contener referencias a recursos del sistema. como archivos y conexiones de red.
Es posible "desmontar" un programa SCL de OMF de vuelta al código fuente SCL usando el comando READ_SCL (o RSCL). Sin embargo, la salida no siempre es perfecta y, a menudo, incluirá errores que detendrían la recompilación sin la intervención del usuario.
Puede verse un ejemplo de código simple en el sitio web de 99 botellas de cerveza.
A continuación se muestra un ejemplo más realista, en el que SCL se usa para compilar un programa escrito en S3. Este ejemplo está tomado del archivo de implementaciones de Kermit de la Universidad de Columbia.
BEGIN CUANDO RESULT GT 0 +_ THEN +_ SEND_RESULT_MESSAGE (RES = RESULT, ACT = "QUIT()") FI INT KMT_SRC, KMT_OMF, KMT_REL ASSIGN_LIBRARY (NAM = KERMIT. SOURCE, LNA = KMT_SRC) ASSIGN_LIBRARY (NAM = KERMIT.OMF, LNA = KMT_OMF) ASSIGN_LIBRARY (NAM = KERMIT.REL, LNA = KMT_REL) BEGIN DELETE_FILE (NAM = *KMT_OMF.KMT_DATA_MODULE(101)) DELETE_FILE (NAM = *KMT_OMF.KMT_DH_MODULE(101) DELETE_FILE (NAM = *KMT_OMF.KMT_EH_MODULE(101)) DELETE_FILE (NAM = *KMT_OMF.KMT_FH_MODULE(101)) DELETE_FILE (NAM = *KMT_OMF.KMT_HELP_MTM(101)) DELETE_FILE (NAM = *KMT_OMF.KMT_MAIN_MODULE(101)) DELETE_FILE (NAM = *KMT_OMF.KMT_PH_MODULE(101)) DELETE_FILE (NAM = *KMT_OMF.KMT_PP_MODULE(101) DELETE_FILE (NAM = *KMT_OMF.KMT_SP_MODULE(101) DELETE_FILE (NAM = *KMT_OMF.KMT_SP_MTM(101) DELETE_FILE (NAM = *KMT_OMF.KMT_UI_MODULE(101)) DELETE_FILE (NAM = *KMT_REL.KERMIT(101)) DELETE_FILE (NAM = *KMT_REL.KERMIT_MODULE(101)) FIN S3_COMPILE_DEFAULTS (LIS = OBJECT & XREF, DIS = ERRORLINES) S3_COMPILE (INP = *KMT_SRC.KMT_DATA_MODULE(101), OMF = *KMT_OMF.KMT_DATA_MODULE(101)) S3_COMPILE (INP = *KMT_SRC.KMT_DH_MODULE(101), OMF = *KMT_OMF.KMT_DH_MODULE(101)) S3_COMPILE (INP = *KMT_SRC.KMT_EH_MODULE(101), OMF = *KMT_OMF.KMT_EH_MODULE(101)) S3_COMPILE (INP = *KMT_SRC.KMT_FH_MODULE(101), OMF = *KMT_OMF.KMT_FH_MODULE(101)) NEW_MESSAGE_TEXT_MODULE (CON = *KMT_SRC.KMT_HELP_MTM(101), OMF = *KMT_OMF.KMT_HELP_MTM(101)) S3_COMPILE (INP = *KMT_SRC.KMT_MAIN_MODULE(101), OMF = *KMT_OMF.KMT_MAIN_MODULE(101)) S3_COMPILE (INP = *KMT_SRC.KMT_PH_MODULE(101), OMF = *KMT_OMF.KMT_PH_MODULE(101)) S3_COMPILE (INP = *KMT_SRC.KMT_PP_MODULE(101), OMF = *KMT_OMF.KMT_PP_MODULE(101)) S3_COMPILE (INP = *KMT_SRC.KMT_SP_MODULE(101), OMF = *KMT_OMF.KMT_SP_MODULE(101)) NEW_MESSAGE_TEXT_MODULE (CON = *KMT_SRC.KMT_SP_MTM(101), OMF = *KMT_OMF.KMT_SP_MTM(101) S3_COMPILE (INP = *KMT_SRC.KMT_UI_MODULE(101), OMF = *KMT_OMF.KMT_UI_MODULE(101)) COLLECT () -... INPUT(*KMT_OMF.KMT_DATA_MODULE(101) " *KMT_OMF.KMT_DH_MODULE(101) " *KMT_OMF.KMT_EH_MODULE(101) " *KMT_OMF.KMT_FH_MODULE(101) " *KMT_OMF.KMT_HELP_MTM(101) " *KMT_OMF.KMT_MAIN_MODULE(101) " *KMT_OMF.KMT_PH_MODULE(101) " *KMT_OMF.KMT_PP_MODULE(101) " *KMT_OMF.KMT_SP_MODULE(101) " *KMT_OMF.KMT_SP_MTM(101) " *KMT_OMF.KMT_UI_MODULE(101) NEWMODULE(*KMT_REL.KERMIT_MODULE(101)) SUPPRESS RETAIN(KERMIT_THE_FROG) LISTMODULE PERFORMA ++++ COMPILE_SCL (INP = *KMT_SRC.KERMIT(101), OUT = *KMT_REL.KERMIT(101), COD = NOTICIAS, OPT = FIL) FIN
Los comandos ilustrados en este fragmento incluyen CUANDO (declara la política de manejo de errores), ASSIGN_LIBRARY (vincula un nombre local para un directorio de archivos), DELETE_FILE (hace que un archivo permanente sea temporal y luego se elimina al FINAL del bloque), S3_COMPILE (compila un programa escrito en S3: este comando rompe la convención habitual verbo-sustantivo), NEW_MESSAGE_TEXT_MODULE (crea un módulo que contiene mensajes de error parametrizados adecuados para la localización) y COMPILE_SCL, que compila un programa SCL en código objeto.
El comando COLLECT combina diferentes módulos de código de objeto en un solo módulo y está controlado por su propio archivo de comando local que se incorpora en línea en el SCL entre los delimitadores "----" y "++++". Los subcomandos INPUT y NEWMODULE identifican los nombres de los módulos de entrada y salida; SUPPRESS y RETAIN determinan la visibilidad externa de los procedimientos nombrados dentro del módulo recopilado; y LISTMODULE solicita un informe que describe el módulo de salida.
Tenga en cuenta que "." se utiliza para separar las partes de un nombre de archivo jerárquico. Un asterisco inicial denota un nombre local para una biblioteca, vinculada mediante el comando ASSIGN_LIBRARY. El número entre paréntesis después de un nombre de archivo es un número de generación. El sistema operativo asocia un número de generación con cada archivo y las solicitudes de un archivo obtienen la última generación a menos que se especifique lo contrario. La creación de un archivo nuevo creará por defecto la próxima generación y dejará intacta la generación anterior; este programa, sin embargo, elige deliberadamente crear la generación 101, para identificar un lanzamiento público.
Variantes de seguridad mejorada
Como resultado de la fuerte participación de ICL en la prestación de servicios informáticos al sector público del Reino Unido, en particular aquellos con requisitos de seguridad especiales como OPCON CCIS, fue uno de los primeros participantes en el mercado de sistemas seguros.
VME formó un núcleo de las actividades de ICL en el ámbito de los sistemas seguros. Tenía la ventaja de que, como el último sistema operativo a gran escala jamás diseñado y construido desde cero, su arquitectura subyacente abarcaba muchas de las primitivas necesarias para desarrollar un sistema seguro, en particular, los registros de control de acceso (ACR) asistidos por hardware para limitar a los privilegios que podría tomar cualquier proceso (incluidos los Usuarios).
Esto llevó a que la Agencia Central de Informática y Telecomunicaciones (CCTA) del Gobierno del Reino Unido financiara el Proyecto Spaceman a mediados de la década de 1980 para el Centro de Tecnología de Defensa ICL (DTC) para desarrollar una variante de seguridad mejorada de VME. ICL lanzó esto como un par de productos complementarios, con el lanzamiento comercial llamado Opción de alta seguridad (HSO) y el lanzamiento para el sector público, incluidas las tecnologías de Cifrado proporcionado por el gobierno (GFE), llamado Opción de seguridad del gobierno (GSO).
HSO y GSO se probaron formalmente bajo el Esquema de Evaluación (Seguridad) del Reino Unido de CESG, uno de los predecesores de ITSEC y Common Criteria, y al hacerlo se convirtió en el primer sistema operativo principal en obtener la Certificación formal.
Serie 39
La gama Serie 39 introdujo la Arquitectura Nodal, una implementación novedosa de memoria compartida distribuida que puede verse como un híbrido de un sistema multiprocesador y un diseño de clúster. Cada máquina consta de una serie de nodos, y cada nodo contiene su propio procesador de código de pedido (CPU) y memoria principal. Las máquinas virtuales suelen estar ubicadas (en cualquier momento) en un nodo, pero tienen la capacidad de ejecutarse en cualquier nodo y reubicarse de un nodo a otro. Los discos y otros periféricos se comparten entre nodos. Los nodos se conectan mediante un bus óptico de alta velocidad, que se utiliza para proporcionar aplicaciones con una memoria virtual compartida. Los segmentos de memoria que están marcados como compartidos (segmentos públicos o globales) se replican en cada nodo y las actualizaciones se transmiten a través de la red entre nodos. Los procesos que utilizan segmentos de memoria no compartidos (nodales o locales) se ejecutan completamente aislados de otros nodos y procesos.
Proceso de desarrollo
VME se escribió originalmente casi por completo en S3, un lenguaje de programación de sistemas especialmente diseñado basado en Algol 68R (sin embargo, VME/K se escribió principalmente en el lenguaje ensamblador SFL). Aunque se utiliza un lenguaje de alto nivel, el sistema operativo no está diseñado para ser independiente de la arquitectura de hardware subyacente: por el contrario, la arquitectura de software y hardware están estrechamente integradas.
Desde principios de la década de 1990 en adelante, algunos subsistemas VME completamente nuevos se escribieron parcial o totalmente en el lenguaje de programación C.
Desde sus inicios, VME se desarrolló con la ayuda de un sistema de repositorio de ingeniería de software conocido como CADES, originalmente diseñado y administrado por David Pearson (científico informático) y construido para ese propósito utilizando una base de datos IDMS subyacente. CADES no es simplemente un sistema de control de versiones para módulos de código: gestiona todos los aspectos del ciclo de vida del software desde la captura de requisitos, la metodología de diseño y la especificación hasta el mantenimiento de campo. CADES se usó en el desarrollo del módulo VME para contener definiciones separadas de estructuras de datos (modos), constantes (literales), interfaces de procedimiento y algoritmos centrales. Podrían existir múltiples versiones ('Vidas') de cada uno de estos componentes. Los algoritmos se escribieron en lenguaje de desarrollo de sistemas (SDL), que luego se convirtió a fuente S3 mediante un preprocesador. Se pueden generar múltiples versiones de los mismos módulos.
Herramientas de desarrollo de aplicaciones
Las herramientas de desarrollo de aplicaciones que se ofrecen con VME se dividen en dos categorías:
- idiomas de programación de tercera generación
- cuarta generación QuickBuild.
El conjunto de herramientas de VME es inusualmente homogéneo, y la mayoría de los clientes utilizan el mismo conjunto básico de lenguajes y herramientas. Como resultado, las herramientas también están muy bien integradas. Las herramientas de terceros han causado una impresión relativamente pequeña.
Durante muchos años, la gran mayoría de los usuarios de VME escribieron aplicaciones en COBOL, generalmente utilizando la base de datos IDMS y el monitor de procesamiento de transacciones TPMS. Otros lenguajes de programación incluyeron Fortran, Pascal, ALGOL 68RS, Coral 66 y RPG2, pero estos servían a intereses minoritarios. Más tarde, a mediados de la década de 1980, los compiladores para C estuvieron disponibles, tanto dentro como fuera del subsistema Unix, en gran medida para permitir la migración de software como los sistemas de bases de datos relacionales. Es interesante que el EEC haya escrito un compilador de subconjuntos PL/I para ayudar en la migración de programas de IBM al hardware ICL.
Los compiladores desarrollados dentro de ICL comparten una arquitectura común y, en algunos casos, comparten componentes como generadores de código. Muchos de los compiladores usaron un módulo llamado ALICE [Assembly Language Internal Common Environment] y produjeron una forma temprana de código precompilado (P-Code) denominado ROSE, lo que hace que las bibliotecas de formato de módulo de objeto (OMF) compiladas se puedan cargar en cualquier máquina en el rango.
Lenguajes de programación del sistema: S3 y SFL
El lenguaje principal utilizado para desarrollar tanto el propio sistema operativo VME como otro software del sistema, como compiladores y monitores de procesamiento de transacciones, es S3. Este es un lenguaje de alto nivel basado en muchos aspectos en Algol 68, pero con tipos de datos y funciones y operadores de bajo nivel alineados estrechamente con la arquitectura de la serie 2900.
También está disponible un lenguaje ensamblador SFL (Ssystem Function Language). Esto se utilizó para el desarrollo de VME/K, cuyos diseñadores no confiaban en que un lenguaje de alto nivel pudiera ofrecer un rendimiento adecuado, y también para el sistema de base de datos IDMS debido a sus orígenes como producto de terceros. SFL originalmente se llamaba Macro Assembler Programming LanguagE (MAPLE), pero como la arquitectura 2900 se posicionaba como máquinas de lenguaje de alto nivel, se cambió el nombre a pedido de ICL Marketing. Se había desarrollado como parte del conjunto de herramientas para System D, que posteriormente se canceló. Las familias relacionadas de ensambladores para otras arquitecturas (CALM-xx ejecutándose bajo VME, PALM-xx desarrollado en Pascal y ejecutándose en varios hosts) se desarrollaron para uso interno.
Ni S3 ni SFL se promocionaron nunca como herramientas de desarrollo comercial para aplicaciones de usuario final, ya que normalmente no se entregaban como parte estándar del sistema operativo ni se comercializaban explícitamente como productos por derecho propio. Sin embargo, tanto SFL como S3 estaban disponibles como opciones para organizaciones de usuarios y terceros que tenían una necesidad específica de ellos.
Construcción rápida
El entorno de desarrollo de aplicaciones QuickBuild en VME ha tenido un gran éxito a pesar de que las aplicaciones están bloqueadas en gran medida en el entorno VME. Este entorno se centra en el Sistema de diccionario de datos (DDS, también llamado OpenDDS), un intento temprano y muy exitoso de crear un repositorio integral que admita todas las demás herramientas, con soporte completo para el ciclo de vida del desarrollo. Además de esquemas de bases de datos y descripciones de archivos y registros, el diccionario realiza un seguimiento de objetos como informes y consultas, diseños de pantalla y código 4GL; también admite una variedad de modelos en el nivel de captura de requisitos, como modelos de entidad-relación y modelos de proceso.
QuickBuild 4GL está empaquetado en dos formatos:
- Aplicación Master para la creación de aplicaciones TP en línea
- ReportMaster para reportar por lotes.
Ambos son lenguajes declarativos de alto nivel que utilizan la programación estructurada de Jackson como paradigma de diseño. ApplicationMaster es inusual en su enfoque del diseño de aplicaciones, ya que se centra en la sesión del usuario como si se estuviera ejecutando en un único proceso conversacional, ocultando por completo la complejidad de mantener el estado en las interacciones del usuario. Debido a que 4GL y otras herramientas, como el diseñador de pantalla, solo funcionan con el diccionario DDS, que también contiene los esquemas de la base de datos, existe una reutilización considerable de metadatos que rara vez se logra con otros 4GL.
Contenido relacionado
HMAS Sídney
Cota de malla
Blizzard Entertainment