Módulo-2

Módulo-2
clase de idioma imperativo , estructurado , modular , ocultación de datos y métodos
Apareció en 1978
Autor niklaus wirth
sistema de tipos estático , fuerte
Implementaciones principales

ETH Zurich (creado por Niklaus Wirth ), Gardens Point , p1 ,

XDS-x86 nativo , gm2 (GNU Modula-2)
Dialectos PIM2, PIM3, PIM4, ISO
sido influenciado Pascal , Mesa , ALGOL , Simula-67
influenciado Modula-3 , Oberon , Ada , Fortran 90 , Lua , Zonnon , Modula-GM

Modula-2 (Modula-2) es un lenguaje de programación de propósito general , que es un desarrollo de Pascal , desarrollado por Niklaus Wirth en 1978 .

Objetivos y principios del desarrollo del lenguaje

El lenguaje Modula-2 fue desarrollado por Niklaus Wirth para crear software de sistema para la computadora Lilith ., cuyo desarrollo comenzó en 1977 en el Instituto de Informática de Zúrich . Esto determina muchas de sus características. El lenguaje se diseñó originalmente como una herramienta de programación de sistemas industriales que le permite escribir programas confiables, comprensibles y fáciles de mantener. Al mismo tiempo, el lenguaje, si bien sigue siendo un lenguaje de alto nivel con escritura fuerte y soporte para todas las herramientas de programación confiables, debería permitir acceder directamente al hardware, crear programas de sistema específicos , como controladores de interrupciones y controladores de dispositivos , y soporte. programación de procesos interactivos que se ejecutan en paralelo .

El antepasado inmediato de Modula-2 fue el lenguaje Modula , creado por Wirth en la primera mitad de la década de 1970 basado en Pascal . La adición principal, reflejada en el nombre del lenguaje, fue la capacidad de dividir el programa en módulos: fragmentos de código separados que interactúan a través de interfaces descritas explícitamente. También se rediseñó la sintaxis y se agregaron herramientas de programación paralela. La única implementación experimental de Modula apareció en 1975 . El módulo se puede considerar como una versión inicial, una especie de “versión alfa” de Modula-2, sintácticamente estos dos lenguajes son muy cercanos. Además, según Wirth, Modula-2 fue influenciado por el lenguaje Mesa ., desarrollado en Xerox PARC .

Características generales

El lenguaje Modula-2 es un lenguaje de programación estructural , modular , con una sintaxis basada en el lenguaje Pascal, pero notablemente revisada y mejorada. Sus principales características se detallan a continuación.

El lenguaje tiene una estructura simple: solo tiene 40 palabras reservadas (en comparación, hay 63 en Ada ); el "Informe de idioma" oficial, que contiene una descripción completa de Modula-2, ocupa 40 páginas (la descripción completa de la versión abreviada de PL / 1 ocupa aproximadamente 200 páginas).

Funciones de sintaxis

La forma más fácil de describir las características de Modula-2 es comparándolo con el lenguaje Pascal. Las diferencias más importantes, además de la introducción de módulos y mecanismos de exportación de descripciones gestionadas, son las siguientes.

IF THEN condiciona sentencias ELSIF THEN condiciona sentencias ELSIF THEN condiciona ... sentencias ELSE sentencias END

Esto eliminó la necesidad del uso constante de declaraciones compuestas BEGIN-ENDy "escaleras" de declaraciones IF para pruebas de condición de varios pasos.

  • Bucles WHILEy FORtambién proporcionan un cuerpo de un conjunto de declaraciones y terminan con la palabra reservada END.
  • Bucle incondicional añadido LOOP-END.
  • Tanto los procedimientos como las funciones se declaran con la palabra clave PROCEDURE.
  • Se agregó un campo de bits de tipo BITSET predefinido .
  • El operador de salto incondicional GOTO ha sido eliminado del lenguaje .
  • Se ha agregado un tipo procedimental, que permite asignar procedimientos y funciones a las variables. Posteriormente, esta función se incluyó en Pascal, donde originalmente no estaba disponible.

Dialectos

Hay dos dialectos principales de Modula-2. El primero: PIM (después del título del libro de Niklaus Wirth "Programación en Modula-2", donde se proporcionó una descripción detallada del lenguaje y las principales bibliotecas del sistema), existe en tres versiones principales que aparecieron secuencialmente y difieren mínimamente entre sí. . El segundo dialecto principal es ISO , que está estandarizado por la Organización Internacional de Normalización. Las principales diferencias entre los dialectos y la descripción original del idioma se enumeran a continuación.

  • PIM2 (1983)
    • Requiere el uso obligatorio de la directiva EXPORT en el módulo de definiciones.
    • La función TAMAÑO es una función de biblioteca y debe importarse desde el módulo SISTEMA .
  • PIM3 (1985)
    • Se eliminó la directiva EXPORT de los módulos de definición. El cambio fue motivado por el hecho de que todo el contenido del módulo de definiciones se exporta, por lo que usar EXPORTAR es redundante.
    • La función TAMAÑO está predefinida (disponible en cualquier parte del programa sin importar).
  • PIM4 (1988)
    • Se aclaró el comportamiento de la operación MOD para operandos negativos.
    • Se agregó un requisito de que todas las cadenas declaradas como ARRAY OF CHAR deben tener terminación nula (ASCII NUL), incluso si la cadena abarca toda la matriz.
  • ISO [1] (1996 y 1998)
    • Se agregaron tipos de datos COMPLEX y LONGCOMPLEX .
    • Excepciones añadidas.
    • Se agregó una construcción para el código de terminación del módulo FINALMENTE .
    • Biblioteca de E/S completamente estandarizada.
    • Se han hecho aclaraciones que han eliminado la mayoría de las ambigüedades de la descripción original, se han hecho muchas correcciones y aclaraciones menores.

Ventajas y desventajas

Definitivamente se puede decir que el lenguaje Modula-2, aunque conserva las características positivas de Pascal, tiene una serie de características que lo convierten en un lenguaje mucho más poderoso y más adecuado para la programación de sistemas y aplicaciones . Las principales ventajas de Modula-2 sobre los lenguajes de programación estructural modernos son las siguientes [2] :

  • Simplicidad y brevedad de la definición del lenguaje. Una definición de sintaxis completa en notación RBNF toma menos de 3 páginas, diagramas de sintaxis completos  : 12 páginas, el "mensaje sobre el idioma" oficial tiene una longitud de 40 páginas, que es casi un mínimo absoluto para un idioma universal con tales capacidades. En comparación, la definición oficial completa del idioma Ada es de 400 páginas mecanografiadas.
  • Sintaxis sencilla, lógica y uniforme, libre de construcciones redundantes y elementos que provoquen errores ortográficos. Modula-2 es el primer lenguaje de programación de directivas que elimina la instrucción GOTO .
  • Un mecanismo bien pensado para dividir un programa en unidades de compilación (módulos) con interfaces explícitamente descritas e importaciones totalmente controladas, lo que le permite importar tanto módulos completos como elementos individuales con la posibilidad tanto de calificados (con el nombre del módulo) como no calificados. uso de los nombres de los objetos importados.
  • Exclusión del lenguaje de las facilidades de entrada-salida y la mayoría de los procedimientos y funciones estándar y trasladarlos a bibliotecas, diseñadas como módulos estándar, lo que simplifica el lenguaje y el compilador y le da al implementador total libertad en cómo se usan los procedimientos y funciones estándar. implementado.
  • La incorporación de mecanismos de programación de bajo nivel en el lenguaje, incluida la manipulación directa de la memoria y los datos y punteros sin tipo, lo que hace posible escribir en un lenguaje de alto nivel la mayoría de los programas de bajo nivel que tradicionalmente se escribían en ensamblador, como como controladores y manejadores de interrupciones .
  • Disponibilidad de medios elementales de programación paralela, escogidos de tal forma que garanticen su adecuada implementación tanto en plataformas físicamente multiprocesador como en plataformas de tiempo compartido.
  • Significativo para la época de la creación del lenguaje fue la aparición del tipo procedimental y, en consecuencia, variables a las que se pueden asignar dinámicamente los procedimientos.

Las desventajas del lenguaje incluyen:

  • Debilidad de los mecanismos de programación paralela , en particular, la organización de la interacción de procesos paralelos. La implementación de estas herramientas se traslada a las bibliotecas del sistema, y ​​la biblioteca estándar contiene solo las herramientas de control de paralelización más simples. Un programa paralelo en el Módulo 2 que usa controles de concurrencia que van más allá de estos límites pierde automáticamente la portabilidad. [3]
  • Ausencia de mecanismos para gestionar el mapeo de tipos abstractos a la memoria. [3]
  • El soporte para módulos locales complica innecesariamente el compilador. Las razones para usar módulos anidados son limitar el alcance y resaltar las partes de alta prioridad del programa para asegurar la sincronización durante el procesamiento paralelo, pero se pueden implementar de otras formas más simples y obvias. [cuatro]
  • La división explícita en un módulo de implementación y un módulo de definición es una decisión controvertida. Complica el trabajo del compilador y obliga al programador a sincronizar cambios en diferentes archivos. Se puede notar que en el descendiente de Modula-2 - Oberon - se abandonó tal separación, en cambio, en un solo módulo de programa, los elementos exportados (que constituyen la interfaz del módulo) simplemente se marcan de una manera especial. [cuatro]

También se puede notar la ausencia en el Módulo 2 de una serie de características conocidas y populares en el momento de su creación, que se pueden atribuir tanto a las ventajas como a las desventajas del lenguaje, según el punto de vista de un crítico en particular:

Uso

En la URSS, los primeros compiladores para Modula-2 aparecieron en 1982-83 para las computadoras SM-4 y Elektronika-60. El traductor para BESM-6 fue desarrollado en el Centro de Computación de la Academia de Ciencias de la URSS ( V.A. Serebryakov , V.G. Lyuty, A.N. Bezdushny) [5] . Al mismo tiempo, se desarrollaron tecnologías de programación y se crearon los primeros paquetes de programas aplicados basados ​​en el Módulo-2. Dicho trabajo se llevó a cabo, en particular, en la Facultad de Cibernética del MEPhI . VNTK "START" del Centro de Computación de la Rama Siberiana de la Academia de Ciencias de la URSS desarrolló una serie de procesadores Kronos con soporte de hardware para el lenguaje de programación Modula-2.

En general, podemos decir que Modula-2 no recibió la distribución y el reconocimiento que merecía por sus cualidades. El lenguaje ganó cierta popularidad en el entorno académico de Europa, fue bastante popular entre los programadores de la URSS, pero no pudo presionar a su predecesor: nuevas implementaciones del lenguaje Pascal, que incluían los medios para organizar módulos y, más tarde, la programación de objetos . tools , siempre pasó por alto Modula-2 en popularidad. El sistema Lilith, para el cual se creó Modula-2, no recibió una gran popularidad y no pudo ayudar al avance de Modula-2.

La distribución extremadamente amplia de compiladores Pascal baratos y rápidos de Borland International desempeñó su papel . Curiosamente, el compilador Turbo Modula-2 para CP/M OS no solo fue creado por Borland, sino que incluso salió a la venta en América del Norte y Europa Occidental. Sin embargo, la dirección de la empresa, principalmente Philippe Kahn , decidió abandonar el desarrollo de este sistema para no crear un competidor del extremadamente exitoso Turbo Pascal . El resultado de esta decisión fue que el vicepresidente de Borland, Nils Jensen, uno de los fundadores de la compañía, dejó Borland con su equipo de desarrollo en 1987 y compró los derechos del Turbo Modula-2. La empresa JPI (Jensen & Partners International) creada por él lanzó bajo la marca TopSpeed ​​una línea de compiladores para procesadores de la familia x86: Assembler, Modula-2, Pascal, C/C++, Ada.

En la actualidad, el lenguaje Modula-2 se utiliza para programar el software de a bordo de los satélites lanzados como parte del proyecto GLONASS [7] . A finales de 2010, el compilador GNU Modula-2 se incluyó oficialmente en la colección GCC [8] .

Idiomas descendientes

  • Modula-3  es un desarrollo posterior de Modula-2, desarrollado conjuntamente por DEC y Olivetti Firms con el apoyo de consultoría de Wirth.
  • Oberon  es un desarrollo posterior de Modula-2, creado por Wirth en 1988. Oberon utiliza la gestión automática de memoria con recolección de basura , también cambió una serie de características que, según la experiencia de usar Modula-2, el autor consideró infructuosas. Se agregó un subsistema de objetos implementado económicamente. Oberon, a su vez, se convirtió en el antepasado de toda una rama de lenguajes: Oberon-07 , Oberon-2 , Component Pascal ( Component Pascal ), Active Oberon , OberonScript .
  • Zonnon  es un lenguaje creado por Jürg Gutknecht basado en Modula-2 y Active Oberon, con la adición de una serie de elementos nuevos, tanto originales como prestados de otros lenguajes.
  • Alma-0  : Alma-0 es una versión aumentada (paradigma múltiple) del lenguaje imperativo Modula-2.
  • Parallaxis [9]  es un lenguaje de programación estructurado para la programación de datos paralelos (sistemas SIMD) desarrollado por Thomas Brownle en 1989. El lenguaje se basa en la serie Modula-2 pero se amplía con construcciones paralelas no independientes.

Además de los descendientes directos, muchos otros lenguajes heredaron elementos de sintaxis y arquitectura general de Modula-2 en un grado u otro. La influencia de Modula-2 fue mencionada por los creadores de lenguajes tan poco parecidos como, por ejemplo, Lua y Go . La influencia de Modula-2 (y en mayor medida su descendiente, el lenguaje Oberon) se puede rastrear en Java, C#, dialectos de Pascal tardío como Object Pascal y Delphi.

Notas

  1. ISO/CEI 10514-1:1996
  2. Wirt N. Programación en el lenguaje Modula-2. M.: Mir, 1987;
  3. 1 2 Kurochkin V. M. Prólogo del editor de traducción del libro: Wirth N. Programación en el lenguaje Modula-2. M.: Mir, 1987.
  4. 1 2 Niklaus Wirth. "De Módulo a Oberon" . InfoArte (1998). Consultado el 25 de octubre de 2010. Archivado desde el original el 19 de septiembre de 2011.
  5. Una breve introducción al Departamento de Matemáticas de Sistemas. apoyo del CC RAS . Consultado el 30 de noviembre de 2019. Archivado desde el original el 11 de septiembre de 2019.
  6. Koltashev A. A.  Modula-2 en el espacio ruso Copia de archivo del 11 de abril de 2011 en Wayback Machine
  7. Página GNU Modula-2 . Consultado el 9 de octubre de 2009. Archivado desde el original el 5 de octubre de 2009.
  8. Libro en inglés: Bräunl: Parallel Programming , Prentice-Hall, 1993
    Libro en inglés: Bräunl: Parallel Image Processing , Springer-Verlag, 2001
    Libro en alemán: Bräunl: Parallel Programmierung , Vieweg-Verlag, 1993
    Libro en alemán: Bräunl: Parallele Bildverarbeitung , Addison -Wesley, 1995
    Libro en alemán: Bräunl: Massiv paralelo Programmierung mit dem Parallaxis-Modell , Springer-Verlag, Informatik-Fachberichte, 1990
    Libro en ruso: Bräunl: Programación paralela , Vyschshaya Shkola Publishers, Kiev, 1997

Literatura

Enlaces