Módulo-3

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 17 de marzo de 2021; la verificación requiere 1 edición .
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 ) ( 2010-07-14 )
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.

Historia

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.

Características del lenguaje

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).

Propiedades del lenguaje

  • Los módulos constan de una interfaz (INTERFAZ) y un cuerpo (MÓDULO);
  • Los módulos que contienen código inseguro están marcados con la palabra clave UNSAFE;
  • Gestión automática de memoria ( recolección de basura );
  • Tipos de tipado fuerte , compuesto (REGISTRO) y extensible (OBJETO);
  • Manejo de situaciones excepcionales;
  • Soporte multiproceso;
  • Genéricos (GENERIC, análogo de las plantillas de C++).

Ejemplos

¡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.

Algunos módulos incluidos en la biblioteca estándar

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.

  • IO - interfaz de entrada-salida.
  • Rd/Wr son interfaces que implementan flujos de lectura/escritura, respectivamente.
  • Text es una interfaz para trabajar con cadenas (tipo TEXT).
  • Word: procedimientos para trabajar con enteros sin signo.
  • Fmt: formato de varios tipos de datos para imprimir.

La biblioteca estándar también incluye interfaces para trabajar con números de coma flotante, diccionarios, listas, etc.

Programación de bajo nivel

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.

Principales implementaciones

La mayoría de los compiladores son de código abierto.

  • DEC SRC M3 es el compilador Modula-3 original de DEC.
  • Critical Mass CM3 es el sucesor más avanzado del DEC SRC M3.
  • Polytechnique Montreal Modula-3 PM3 es otro sucesor del DEC SRC M3 (ahora fusionado con CM3).
  • EzM3 es un compilador independiente liviano construido sobre PM3. Desarrollado junto con CVSup
  • HM3 es el sucesor de PM3 (versión 1.1.15), con compatibilidad con POSIX Threading (NPTL).

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.

Literatura

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.

  • Greg Nelson, editor. Programación de sistemas con Modula-3 La referencia definitiva sobre el lenguaje Modula-3 con artículos interesantes sobre la construcción de software de sistemas orientados a objetos y una documentación de la discusión que conduce a las características finales del lenguaje.
  • Samuel P. Harbison, Modula-3 Libro de texto de clase fácil de usar.
  • Robert Sedgewick, Algoritmos en Modula-3
  • Laszlo Boszormenyi y Carsten Weich, Programación en Modula-3: una introducción a la programación con estilo
  • Renzo Orsini, Agostino Cortesi Programmare in Modula-3 : introduzione alla programmazione imperativa ea oggetti un libro italiano del idioma que explica sus principales características.

Proyectos usando Modula-3

  • El sistema operativo SPIN ( en ) fue escrito en el Módulo-3. Las interfaces del núcleo son compatibles con DEC Unix.
  • CVSup  es un programa para sincronizar repositorios, también escrito en el Módulo-3.

Notas

Enlaces