Módulo-3 | |
---|---|
Semántica | imperativo , estructural , modular , orientado a objetos , genérico |
clase de idioma | lenguaje de programación , lenguaje de programación orientado a objetos y lenguaje de programación imperativo |
tipo de ejecución | compilado |
Apareció en | 1986 - 1988 |
Autor | DEC SRC , Olivetti |
Desarrollador | Corporación de equipos digitales |
Liberar | 5.8.6 (14 de julio de 2010 ) |
sistema de tipos | estricto, estático |
Implementaciones principales | CM3 , PM3 , EzM3 , HM3 |
sido influenciado | Algol , Modula-2 , Modula-2+ , Oberon , Pascal |
influenciado | C# , Java , Ocaml , Python , Nim |
Sitio web | módulo3.org |
Modula-3 (Modula-3, M3) es un lenguaje de programación de sistemas , desarrollo del lenguaje Modula-2 . Desarrollado en el Centro de Investigación de Sistemas (SRC) de DEC con Olivetti .
Desarrolladores: Luca Cardelli, Jim Donahue, Mick Jordan, Bill Kalsow y Greg Nelson. El lenguaje no se usa mucho en la industria, aunque se usa en la academia. Durante el desarrollo, el lenguaje estuvo fuertemente influenciado por el lenguaje Modula-2+ que luego usó SRC para escribir software para la estación de trabajo multiprocesador DEC Firefly .
Las principales características de Modula-3 son: simplicidad, seguridad de tipo y la capacidad de uso para escribir software de sistema . Modula-3 admite programación genérica , multitarea , administración automática de memoria ( recolección de basura ), manejo de excepciones , programación orientada a objetos (incluida la ocultación de datos y métodos). Los desarrolladores del lenguaje persiguieron el objetivo de complementar Modula-2 con nuevas características de los lenguajes de programación modernos. Al mismo tiempo, las funciones potencialmente peligrosas y complejas, como la herencia múltiple y la sobrecarga de operadores , no se incluyeron en el lenguaje.
El desarrollo de Modula-3 comenzó en 1986. Maurice Wilkes escribió a Niklaus Wirth con algunas ideas para una nueva versión del Módulo. Wilkes, que anteriormente había trabajado para DEC, regresó a Inglaterra y tomó un trabajo en el Centro de Investigación Olivetti. Wirth estaba ocupado desarrollando el nuevo lenguaje de programación Oberon en ese momento , pero no rechazó la ayuda de Wilkes. La descripción de Modula-3 se completó en agosto de 1988 y se revisó en enero de 1989. Al mismo tiempo, aparecieron compiladores de DEC SRC y Olivetti, y también comenzaron a aparecer compiladores de empresas de terceros.
En la década de los noventa del siglo XX, Modula-3 se generalizó principalmente en el ámbito académico, como lenguaje para la enseñanza de la programación, y casi nunca se utilizó en la industria. La razón de esto podría ser la muerte de DEC, el principal desarrollador del lenguaje. Al mismo tiempo, Critical Mass Corporation propuso el compilador comercial CM3 y el entorno de desarrollo integrado Reactor. En 2000, Critical Mass cerró. Modula-3 cuenta actualmente con el soporte de Elego Software Solutions GmbH, que ha heredado el código fuente del compilador CM3 de Critical Mass. El Reactor IDE ahora ha sido renombrado a CM3 IDE y distribuido con código fuente. En marzo de 2002, Elego recibió el código fuente del compilador PM3, previamente desarrollado en la Ecole Polytechnique de Montreal.
Manejo de excepciones en los bloques TRY... EXCEPT... END y TRY... FINALY... END. La construcción EXCEPT se implementa de manera similar a la construcción CASE. Modula-3 también admite un bucle LOOP...EXIT...END.
Soporte implementado para la programación orientada a objetos . El tipo de objeto es OBJECT. Este tipo se diferencia de los registros (RECORD) en que es un tipo de referencia y le permite crear procedimientos asociados con el tipo (métodos), y también admite la sobrecarga de métodos. Todos los métodos son virtuales. Por ejemplo, la construcción:
TIPO A = OBJETO a: ENTERO; MÉTODOS p():=AP FIN;define un tipo de objeto que contiene un campo a de tipo entero y un método p. El procedimiento AP es una implementación del método p y tiene la siguiente forma:
PROCEDIMIENTO AP(auto: A) = COMENZAR … FIN AP;El método se llama así: op();, donde o es una variable (objeto) de tipo A.
La construcción REVEAL proporciona un mecanismo simple pero muy poderoso para ocultar detalles de implementación de objetos de los clientes.
Modula-3 es uno de los pocos lenguajes que requiere que las unidades de programación importadas de módulos externos estén estrictamente calificadas. Por ejemplo, si el módulo A usa la variable x del módulo B, la referencia a esta variable debe escribirse de esta forma: Bx En otras palabras, Modula-3 no permite importar todos los objetos exportados por cualquier módulo. Debido a esto, es casi imposible deshabilitar el programa añadiéndole una nueva funcionalidad. Un gran número de usuarios pueden expandir el programa simultáneamente sin temor a que esto provoque fallas. Modula-3 también distingue entre declarar la firma de un método (el bloque METHODS) y sobrecargarlo (el bloque OVERRIDES).
¡Hola , mundo! podría verse así:
MÓDULO Principal; IMPORTACIÓN; EMPEZAR IO.Put("Hola Mundo\n") FIN principal.o así (usando el módulo de flujo de salida):
MÓDULO Hola EXPORTACIONES Principal; IMPORTAR Wr, Stdio; EMPEZAR Wr.PutText(Stdio.stdout, "¡Hola, mundo!\n"); Wr.Close(Stdio.stdout); FIN Hola.Similar al lenguaje C, la mayoría de los procedimientos para escribir programas en el Módulo 3 se implementan en la biblioteca estándar. Las operaciones de E/S también se implementan en la biblioteca estándar.
La biblioteca estándar también incluye interfaces para trabajar con números de coma flotante, diccionarios, listas, etc.
Modula-3, además de referencias , también admite punteros . El tipo ADDRESS es la contrapartida C del tipo void* . Un puntero a una variable de tipo entero se vería así:
TIPO IntPtr = REF SIN RASTREO ENTERO;Para obtener la dirección de una variable, use la función integrada ADR(), que es análoga a la operación & en C. El recolector de elementos no utilizados no realiza un seguimiento de los punteros (esto se indica con la palabra UNTRACED). Todos los punteros se deben desasignar manualmente mediante el procedimiento integrado DISPOSE.
Además, Modula-3 admite todos los tipos de datos disponibles en el lenguaje C. Debido a esto, el código Modulo-3 se puede vincular libremente con el código C. Todas las definiciones de tipo están contenidas en el módulo Ctypes.
La mayoría de los compiladores son de código abierto.
Todas las implementaciones admiten una gran cantidad de plataformas (más de 20). Los tipos de datos son binarios compatibles con los tipos de lenguaje C, lo que permite que los dos lenguajes se usen juntos.
Algunos de estos libros se pueden encontrar en tiendas en línea extranjeras. La mayoría de ellos están disponibles de forma gratuita en Internet.
Lenguajes de programación | |
---|---|
|