stringtranslate.com

Módulo-2

Modula-2 es un lenguaje de programación procedimental estructurado desarrollado entre 1977 y 1985/8 por Niklaus Wirth en ETH Zurich . Fue creado como lenguaje para el sistema operativo y el software de aplicación de la estación de trabajo personal Lilith . [1] Posteriormente se utilizó para programación fuera del contexto de Lilith.

Wirth vio a Modula-2 como un sucesor de sus lenguajes de programación anteriores Pascal y Modula . [2] [3] Los conceptos principales son:

  1. El módulo como unidad de compilación para compilación separada.
  2. La corrutina como elemento básico de los procesos concurrentes
  3. Tipos y procedimientos que permiten el acceso a datos específicos de la máquina

El diseño del lenguaje fue influenciado por el lenguaje Mesa y el Xerox Alto , ambos de Xerox PARC , que Wirth vio durante su año sabático de 1976 allí. [4] La revista informática Byte dedicó el número de agosto de 1984 al lenguaje y su entorno. [5]

Wirth creó la serie de lenguajes Oberon como sucesor de Modula-2, mientras que otros (particularmente en Digital Equipment Corporation y Acorn Computers , más tarde Olivetti ) desarrollaron Modula-2 en Modula-2+ y más tarde en Modula-3 .

Descripción

Modula-2 es un lenguaje de procedimientos de propósito general adecuado tanto para la programación de sistemas como para la programación de aplicaciones. La sintaxis se basa en el lenguaje anterior de Wirth, Pascal , con algunos elementos y ambigüedades sintácticas eliminados. El concepto del módulo , diseñado para admitir la compilación y la abstracción de datos por separado; y se agregó soporte directo de lenguaje para multiprogramación .

El lenguaje permite el uso de compiladores de un solo paso . Un compilador de este tipo de Gutknecht y Wirth era aproximadamente cuatro veces más rápido que los compiladores de pasadas múltiples anteriores . [6]

A continuación se muestra un ejemplo del código fuente del programa "Hola mundo":

MÓDULO  Hola ; DESDE  STextIO  IMPORTAR  WriteString ; COMENZAR  WriteString ( "¡Hola mundo!" ) FINALIZAR  Hola .

Se puede utilizar un módulo Modula-2 para encapsular un conjunto de subprogramas y estructuras de datos relacionados y restringir su visibilidad desde otras partes del programa. Los programas Modula-2 se componen de módulos, cada uno de los cuales consta de dos partes: un módulo de definición , la parte de interfaz, que contiene solo aquellas partes del subsistema que se exportan (visibles para otros módulos), y un módulo de implementación . que contiene el código de trabajo interno del módulo.

El lenguaje tiene un estricto control de alcance . A excepción de los identificadores estándar, ningún objeto externo es visible dentro de un módulo a menos que se importe explícitamente; ningún objeto del módulo interno es visible desde el exterior a menos que se exporte explícitamente.

Supongamos que el módulo M1 exporta los objetos a, b, cy P enumerando sus identificadores en una lista de exportación explícita.

  MÓDULO  DE DEFINICIÓN M1 ;  EXPORTACIÓN  CALIFICADA  a ,  b ,  c ,  P ;  ...

Entonces, los objetos a, b, cy P del módulo M1 se conocen fuera del módulo M1 como M1.a, M1.b, M1.c y M1.P. Se exportan de forma cualificada al exterior (asumiendo que el módulo M1 es global). El nombre del módulo exportador, es decir, M1, se utiliza como calificador seguido del nombre del objeto.

Supongamos que el módulo M2 contiene la siguiente declaración IMPORT

 MÓDULO  M2 ;  IMPORTAR  M1 ;  ...

Entonces esto significa que los objetos exportados por el módulo M1 al exterior de su programa adjunto ahora se pueden usar dentro del módulo M2. Están referenciados de forma calificada : M1.a, M1.b, M1.c y M1.P. Ejemplo:

 ...  M1 . un  :=  0 ;  M1 . c  :=  M1 . P ( M1.a + M1.b ) ; _ _  _ ...  

La exportación calificada evita conflictos de nombres. Por ejemplo, si otro módulo M3 exporta un objeto llamado P, entonces los dos objetos se pueden distinguir ya que M1.P difiere de M3.P. No importa que ambos objetos se llamen P dentro de sus módulos exportadores M1 y M3.

Existe un método alternativo. Supongamos que el módulo M4 está formulado de la siguiente manera:

 MÓDULO  M4 ;  DESDE  M1  IMPORTAR  a ,  b ,  c ,  P ;

Esto significa que los objetos exportados por el módulo M1 al exterior pueden volver a usarse dentro del módulo M4, pero ahora mediante meras referencias a los identificadores exportados de manera no calificada como: a, b, cy P. Ejemplo:

 ...  un  :=  0 ;  c  :=  P ( a  +  b );  ...

Este método de importación se puede utilizar si no hay conflictos de nombres. Permite que las variables y otros objetos se utilicen fuera de su módulo de exportación de la misma manera no calificada que dentro del módulo de exportación.

Las reglas de exportación e importación no sólo protegen los objetos contra accesos no deseados, sino que también permiten una referencia cruzada de la definición de cada identificador en un programa que se va a crear. Esta propiedad ayuda con el mantenimiento de programas grandes que contienen muchos módulos.

El lenguaje proporciona concurrencia de un solo procesador ( monitores , corrutinas y transferencia explícita de control) y acceso al hardware (direcciones absolutas, manipulación de bits e interrupciones ). Utiliza un sistema de tipo nominal .

dialectos

Hay dos dialectos principales de Modula-2. El primero es PIM , llamado así por el libro Programación en Modula-2 de Niklaus Wirth. [4] Hubo tres ediciones principales de PIM: la segunda, la tercera (corregida) y la cuarta. Cada uno describe ligeras variantes del idioma. El segundo dialecto importante es ISO , llamado así por el esfuerzo de estandarización de la Organización Internacional de Normalización . Estas son algunas de las diferencias entre ellos.

Superseries

Hay varios superconjuntos de Modula-2 con extensiones de idioma para dominios de aplicación específicos:

Derivados

Hay varios lenguajes derivados que se parecen mucho a Modula-2 pero que son lenguajes nuevos por derecho propio. La mayoría son lenguajes diferentes con diferentes propósitos y con fortalezas y debilidades propias:

Muchos otros lenguajes de programación actuales han adoptado características de Modula-2.

Elementos del lenguaje

Palabras reservadas

PIM [2,3,4] define 40 palabras reservadas :

Y REPETIR EL BUCLE ELSIFMODO FINAL DE ARRAY VOLVERCOMENZAR SALIR CONFIGURACIÓN DEL MÓDULOPOR EXPORTACIÓN NO ENTONCESCASO PARA DE ACONST DE O TIPODEFINICIÓN SI PUNTERO HASTAPROCEDIMIENTO DE IMPLEMENTACIÓN DIV VARIMPORTAR CALIFICADOS MIENTRASOTRA VEZ EN EL REGISTRO CON

Identificadores incorporados

PIM [3,4] define 29 identificadores integrados :

ABS EXCL LONGINT REALBITSET FALSO TAMAÑO LONGREALFLOTADOR BOOLEAN MAX VERDADEROCAP DETENER MIN TRUNCCARDENAL ALTO VAL NILCHAR INC IMPARCHR INCLUIDOPROCESO ENTERO DEC

Uso del sistema integrado

Modula-2 se utiliza para programar muchos sistemas integrados .

Módulo Cambridge-2

Cambridge Modula-2 de Cambridge Microprocessor Systems se basa en un subconjunto de PIM4 con extensiones de lenguaje para desarrollo integrado. El compilador se ejecuta en DOS y genera código para microcontroladores integrados basados ​​en la serie Motorola 68000 (M68k) que ejecutan un sistema operativo MINOS.

Mod51

Mod51 de Mandeno Granville Electronics se basa en ISO Modula-2 con extensiones de lenguaje para desarrollo integrado siguiendo IEC 1131 , un estándar industrial para controladores lógicos programables (PLC) estrechamente relacionado con Modula-2. El compilador Mod51 genera código independiente para microcontroladores basados ​​en 80C51.

Módulo-GM

Delco Electronics , entonces una subsidiaria de GM Hughes Electronics , desarrolló una versión de Modula-2 para sistemas de control integrados a partir de 1985. Delco lo llamó Modula-GM. Fue el primer lenguaje de programación de alto nivel utilizado para reemplazar el código de máquina (lenguaje) para sistemas integrados en las unidades de control del motor (ECU) de Delco . Esto fue significativo porque Delco producía más de 28.000 ecus por día en 1988 para GM. Éste era entonces el mayor productor de ecus del mundo. [18] El primer uso experimental de Modula-GM en un controlador integrado fue en el controlador del sistema de frenos antibloqueo de 1985, que se basó en el microprocesador Motorola 68xxx, y en 1993 la ECU Gen-4 utilizada por los equipos de carreras de autos del campeonato Champ Car World Series. (CART) y los equipos Indy Racing League (IRL). [19] El primer uso en producción de Modula-GM fue su uso en camionetas GM a partir del módulo de control de vehículos (VCM) del año modelo 1990 utilizado para administrar los motores Vortec de GM Powertrain . Modula-GM también se utilizó en todas las ECU de la familia de motores Buick V6 de 90° 3800 Serie II de GM utilizados en el modelo Buick Park Avenue del año 1997-2005 . Los compiladores Modula-GM y las herramientas de gestión de software asociadas fueron obtenidas por Delco de Intermetrics .

Modula-2 fue seleccionado como base para el lenguaje de alto nivel de Delco debido a sus muchas ventajas sobre otras opciones de lenguaje alternativo en 1986. Después de que Delco Electronics se escindiera de GM (con otras divisiones de componentes) para formar Delphi Automotive Systems en 1995, el abastecimiento global requería que se utilizara un lenguaje de software de alto nivel no propietario. El software integrado en la ECU desarrollado ahora en Delphi está compilado con compiladores comerciales para el lenguaje C.

Satélites de radionavegación rusos

Los satélites del sistema ruso de radionavegación por satélite GLONASS , similar al Sistema de Posicionamiento Global (GPS) de Estados Unidos, están programados en Modula-2. [20]

Compiladores

Módulo Turbo-2

Turbo Modula-2 era un compilador y un entorno de desarrollo integrado para MS-DOS desarrollado, pero no publicado, por Borland . Jensen and Partners, que incluía al cofundador de Borland, Niels Jensen, compraron el código base inédito y lo convirtieron en TopSpeed ​​Modula-2. Finalmente se vendió a Clarion, ahora SoftVelocity, quien luego ofreció el compilador Modula-2 como parte de su línea de productos Clarion en ese momento. [43]

Echelon comercializó brevemente una versión Zilog Z80 CP/M de Turbo Modula-2 bajo licencia de Borland. Micromint vendió una versión complementaria para Hitachi HD64180 como herramienta de desarrollo para su computadora de placa única SB-180. [44]

Módulo IBM-2

IBM tenía un compilador Modula-2 para uso interno que se ejecutaba tanto en OS/2 como en AIX , y tenía soporte de primera clase en el editor E2 de IBM . [45] IBM Modula-2 se utilizó para partes del código interno con licencia vertical de OS/400 (efectivamente, el núcleo de OS/400). [46] Este código fue reemplazado en su mayor parte por C++ cuando OS/400 fue portado a la familia de procesadores IBM RS64 , aunque algo permanece en las versiones modernas del sistema operativo. [47] [48] También existía un backend Motorola 68000 , que puede haber sido utilizado en productos de sistemas integrados. [45]

Sistemas operativos

Modula-2 se utiliza para programar algunos sistemas operativos (SO). La estructura y el soporte del módulo Modula-2 se utilizan directamente en dos sistemas operativos relacionados.

El sistema operativo llamado Medos-2 , para la estación de trabajo Lilith, fue desarrollado en ETH Zurich por Svend Erik Knudsen con el asesoramiento de Wirth. Es un sistema operativo orientado a objetos de un solo usuario construido a partir de módulos Modula-2. [49] [50] [51]

El sistema operativo llamado Excelsior , para la estación de trabajo Kronos , fue desarrollado por la Academia de Ciencias de la Unión Soviética , sucursal de Siberia, el Centro de Computación de Novosibirsk , el proyecto de Sistemas Modulares Desarrollables Asíncronos (MARS), y el Grupo de Investigación Kronos (KRG). Es un sistema monousuario basado en módulos Modula-2. [52]

Libros

Referencias

  1. ^ "Resumen de proyectos de N. Wirth, 1962-1999". Departamento de Ciencias de la Computación . ETH Zúrich .
  2. ^ Wirth, Niklaus (2002). "Pascal y sus sucesores". En Broy, Manfredo; Denert, Ernst (eds.). Pioneros del software: contribuciones a la ingeniería de software . Berlín, Heidelberg: Springer-Verlag . págs. 108-120. doi :10.1007/978-3-642-59412-0. ISBN 978-3-642-59412-0. S2CID  2698265.
  3. ^ Wirth, Niklaus (18 de febrero de 2005). "Historia y objetivos de Modula-2". Diario del Dr. Dobb . Informa PLC.
  4. ^ ab Wirth, Niklaus (1988). Programación en Modula-2 (4ª ed.). Berlín, Heidelberg: Springer. doi :10.1007/978-3-642-83565-0. ISBN 978-3-642-83565-0. S2CID  41899609.Página 4.
  5. ^ Wirth, Niklaus ; Gutknecht, Jürg ; Ohran, Richard; Pablo, Robert J.; Coar, David (agosto de 1984). "Tema: Módulo-2". Byte: The Small Systems Journal . vol. 9, núm. 8. págs. 143-232.Disponible en Archive.org
  6. ^ Wirth, Niklaus (1 de mayo de 1984). "Un compilador Modula-2 de un solo paso para Lilith" (PDF) . Software CFB . Consultado el 23 de noviembre de 2023 .
  7. ^ ISO/IEC 10514-1:1996
  8. ^ Tichy et al., Modula-2*: An Extension for Modula-2 para programas portátiles altamente paralelos, Universidad de Karlsruhe [1990]
  9. ^ Bräunl, Programación paralela, Prentice-Hall [1993]
  10. ^ Muller, C. (noviembre de 1986). "Modula – Prolog: un desarrollo de software". Software IEEE . 3 (6): 39–45}. doi :10.1109/MS.1986.229475. S2CID  763425.
  11. ^ ab modula2.org, 5. ¿Dónde puedo obtener información sobre ISO Modula-2?
  12. ^ Cardelli et al., Informe Modula-3 , Informe de investigación 31, Centro de investigación de sistemas, Digital Equipment Corporation, [1988]
  13. ^ N. Wirth y J. Gutknecht, Proyecto Oberon: el diseño de un sistema operativo y compilador, ISBN 0-201-54428-8 , Addison-Wesley [1992] 
  14. ^ Moessenboeck & Wirth, El lenguaje de programación Oberon-2 , ETH Zurich [1995]
  15. ^ Thomas Bräunl, Parallaxis, un lenguaje para programación paralela de datos estructurados, Universidad de Stuttgart [1996]
  16. ^ Pat D. Terry, Otro lenguaje de programación mínimo, Avisos de ACM SIGPLAN No. 30 [1995]
  17. ^ D. Blasband, El lenguaje de programación YAFL, segunda edición, [1993]
  18. ^ Revista Delco Electronics Electron, The Atwood Legacy, primavera del 89, página 25
  19. ^ Desarrollo de electrónica para carreras de autos GM.
  20. ^ Koltashev, AA (2006). "Módulo-2 en el espacio ruso". Kronos: Historia de un proyecto (en ruso). xTecnología . Consultado el 8 de abril de 2021 .
  21. ^ Dado, David (9 de octubre de 2020). "ACK". GitHub . Consultado el 13 de marzo de 2021 .
  22. ^ "Módulo ADW-2". Modula-2.org . Consultado el 13 de marzo de 2021 .
  23. ^ "Módulo Aglet-2". Módulo Aglet-2 . 15 de febrero de 2012 . Consultado el 13 de marzo de 2021 .
  24. ^ "Módulo FST-2". psg.com . Consultado el 13 de octubre de 2021 .
  25. ^ "Módulo de puntos de jardines". Grupo de Lenguajes y Sistemas de Programación, Facultad de Tecnologías de la Información . Universidad Tecnológica de Queensland, Brisbane. 29 de enero de 2007. Archivado desde el original el 23 de marzo de 2013 . Consultado el 13 de marzo de 2021 .
  26. ^ K John Gough (25 de octubre de 2010). "Módulo Gardens Point-2 (GPM / CLR)". GitHub . Consultado el 16 de octubre de 2022 .
  27. ^ "Módulo GNU-2". Sabana . Fundación de Software Libre. 30 de agosto de 2018 . Consultado el 13 de marzo de 2021 .
  28. ^ "Módulo Logitech-2". La revista electrónica para desarrolladores de OS/2 (EDM/2) . Consultado el 29 de mayo de 2022 .
  29. ^ "1988: Modula-2 y Logitech RTK". Øyvind Teig. 12 de abril de 2022. Foto del disquete
  30. ^ Degen, René; Nieder, Claudio; Preusando, Bernd; Schaub, Markus; Straube, Jörg (2004). "M2Amiga". Sitio web de Claudio . A+L AG. Archivado desde el original el 20 de enero de 2019 . Consultado el 13 de marzo de 2021 .
  31. ^ "Lilith y Modula-2". Software CFB . Consultado el 23 de noviembre de 2023 .
  32. ^ "MacMETH: un sistema de lenguaje rápido Modula-2 para computadoras Macintosh". ETH Zurich: Ecología de sistemas terrestres . 22 de enero de 2020 . Consultado el 13 de marzo de 2021 .
  33. ^ "Lenguaje de programación de texto estructurado Mod51". Herramientas de diseño . Archivado desde el original el 21 de octubre de 2008 . Consultado el 13 de marzo de 2021 .
  34. ^ Tempelmann, Thomas (1 de septiembre de 2020). "Página de inicio de Thomas Tempelmann" . Consultado el 18 de marzo de 2021 .
  35. ^ "Módulo-2 R10" . Consultado el 13 de octubre de 2021 .
  36. ^ Dotzel, Chih-Ya (21 de enero de 2020). "Módulo consciente" . Consultado el 18 de marzo de 2021 .
  37. ^ Wiedemann, Albert (13 de enero de 2021). "p1 Módulo-2". p1 Sociedad de Ciencias de la Computación . Consultado el 19 de marzo de 2021 .
  38. ^ Beck, Michael; Geiss, Rubino (2006). "El compilador MOCKA de Karlsruhe Modula-2". Instituto de Estructuras de Programas y Organización de Datos (IPD) . Instituto Tecnológico de Karlsruhe . Archivado desde el original el 4 de septiembre de 2009 . Consultado el 21 de marzo de 2021 .
  39. ^ Jefferson, Gareth (agosto de 1986). "Compilador Modula-2". Computadora personal australiana . págs.49, 52, 54, 56, 58 . Consultado el 8 de octubre de 2022 .
  40. ^ "Sistemas Modula-2 para OpenVMS/Alpha y OpenVMS/VAX". Terra Datentechnik (en inglés y alemán). Erlenbach, Suiza. 12 de noviembre de 2002 . Consultado el 23 de marzo de 2021 .
  41. ^ Borchert, Andrés; Hasch, Martín (21 de enero de 2003). "m2c: sistema Modula-2 de Ulm". Universidad de Ulm . Ulm , Alemania . Consultado el 23 de marzo de 2021 .
  42. ^ "Familia de productos XDS: Modula-2 - Herramientas de desarrollo Oberon-2". Excelsior LLC . 1999–2009. Archivado desde el original el 27 de mayo de 2009 . Consultado el 23 de marzo de 2021 .
  43. ^ "Acerca de Clarín". Archivado desde el original el 7 de diciembre de 2002 . Consultado el 31 de marzo de 2023 .
  44. ^ "Bodega de circuitos". Byte: The Small Systems Journal . vol. 11, núm. 13. pág. 98.
  45. ^ ab "IBM Módulo-2". edm2.com . 2 de marzo de 2019 . Consultado el 12 de marzo de 2021 .
  46. ^ "Comentarios de los lectores sobre AS/400 para un misterio resuelto". itjungle.com . 21 de febrero de 2011 . Consultado el 12 de marzo de 2021 .
  47. ^ Soltis, Frank G. (1997). Dentro del AS/400 (2ª ed.). Prensa de Duque. ISBN 978-1882419661.
  48. ^ Leif Svalgaard (8 de octubre de 2003). "Re: Re: emulador MI". MI400 (lista de correo) . Consultado el 26 de febrero de 2021 .
  49. ^ Knudsen, Svend Erik (1983). Medos-2: un sistema operativo orientado a Módulo-2 para computadoras personales Lilith (PhD). ETH Zúrich . doi : 10.3929/ethz-a-000300091. hdl : 20.500.11850/137906.
  50. ^ Knudsen, Svend Erik (25 de octubre de 2000). "Medos en retrospectiva". En Böszörményi, László; Gutknecht, Jürg ; Pomberger, Gustav (eds.). La escuela de Niklaus Wirth: el arte de la simplicidad . Morgan Kaufman. págs. 69–86. ISBN 978-1558607231. ISBN  1-55860-723-4 y dpunkt, ISBN 3-932588-85-1
  51. ^ Sand, Paul A. (septiembre de 1984). "La computadora personal Lilith". Byte . págs. 300–311 . Consultado el 6 de marzo de 2021 .Reimpresión.
  52. ^ Kuznetsov, DN; Nedorya, AE; Tarasov, EV; Filippov, VE "Kronos: una familia de procesadores para lenguajes de alto nivel". Kronos: Historia de un proyecto (en ruso). xTecnología . Consultado el 13 de abril de 2021 .

enlaces externos