Articulo de referencia

Oberón (lenguaje de programación)

Oberon es un lenguaje de programación de propósito general publicado por primera vez en 1987 por Niklaus Wirth y el miembro más reciente de la familia wirthiana de lenguajes tip...

Oberon es un lenguaje de programación de propósito general publicado por primera vez en 1987 por Niklaus Wirth y el miembro más reciente de la familia wirthiana de lenguajes tipo ALGOL ( Euler , ALGOL W , Pascal , Modula y Modula-2 ). [ 1 ] [ 2 ] [ 3 ] [ 4 ] Oberon fue el resultado de un esfuerzo concentrado para aumentar la potencia de Modula-2 , el sucesor directo de Pascal , y simultáneamente reducir su complejidad. Su principal característica nueva es el concepto de extensión de tipos de datos de tipos de registro . [ 5 ] Permite construir nuevos tipos de datos a partir de los existentes y relacionarlos, desviándose del dogma del tipado estático estricto de datos. La extensión de tipos es la forma de herencia de Wirth que refleja el punto de vista del sitio padre. Oberon fue desarrollado como parte de la implementación de un sistema operativo , también llamado Oberon en ETH Zurich en Suiza . El nombre se inspiró tanto en las imágenes de la sonda espacial Voyager de la luna del planeta Urano , llamada Oberón , como en el hecho de que Oberón es famoso por ser el rey de los elfos. [ 6 ]

Oberon fue mantenido por Wirth y la última actualización del compilador del Proyecto Oberon data del 6 de marzo de 2020. [ 7 ]

Diseño

Oberon se diseñó teniendo en mente el lema atribuido a Albert Einstein : «Haz las cosas lo más simples posible, pero no más simples». La pauta principal fue concentrarse en las características básicas y esenciales y omitir los aspectos efímeros. Otro factor fue el reconocimiento del aumento de la complejidad en lenguajes como C++ y Ada . A diferencia de estos, Oberon enfatiza el uso del concepto de biblioteca para extender el lenguaje. Los tipos de enumeración y subrango, presentes en Modula-2, se omitieron, y los tipos de conjunto se limitan a conjuntos de enteros. Todos los elementos importados deben estar calificados por el nombre del módulo donde se declaran. Las funcionalidades de bajo nivel se resaltan permitiendo su uso únicamente en un módulo que incluya el identificador SYSTEMen su lista de importación. La comprobación estricta de tipos , incluso entre módulos, la comprobación de índices en tiempo de ejecución , la comprobación de punteros nulos y el concepto de extensión de tipos segura permiten que la programación se base en gran medida únicamente en las reglas del lenguaje.

El objetivo de esta estrategia era producir un lenguaje más fácil de aprender, más sencillo de implementar y muy eficiente. Los compiladores Oberon se han considerado compactos y rápidos, a la vez que ofrecen una calidad de código comparable a la de los compiladores comerciales. [ 8 ]

Características

Las características que definen el idioma Oberón incluyen: [ 9 ]

  • Sintaxis sensible a mayúsculas y minúsculas con palabras clave en mayúsculas.
  • Extensión de tipo con prueba de tipo
  • Módulos y compilación por separado
  • Operaciones con cadenas
  • Aislamiento de código inseguro
  • Soporte para la programación del sistema

Orientación del objeto

Oberon admite la extensión de tipos de registro para la construcción de abstracciones y estructuras heterogéneas. A diferencia de los dialectos posteriores, Oberon-2 y Active Oberon, el Oberon original carece de un mecanismo de despacho como característica del lenguaje, pero lo incluye como técnica de programación o patrón de diseño. Esto proporciona una gran flexibilidad en la programación orientada a objetos (POO). En el sistema operativo Oberon, se utilizan dos técnicas de programación conjuntamente para la llamada de despacho: el conjunto de métodos y el manejador de mensajes.

Conjunto de métodos

En esta técnica, se define una tabla de variables de procedimiento y se declara una variable global de este tipo en el módulo extendido, la cual se asigna de nuevo en el módulo genérico:

MÓDULO Figuras; (* Módulo abstracto *)TIPO Figura* = PUNTERO A FigureDesc; Interface* = PUNTERO A InterfaceDesc; InterfaceDesc* = REGISTRO dibujar* : PROCEDIMIENTO (f : Figura); claro* : PROCEDIMIENTO (f : Figura); marca* : PROCEDIMIENTO (f : Figura); mover* : PROCEDIMIENTO (f : Figura; dx, dy : ENTERO ); FIN ; FigureDesc* = REGISTRO si : Interfaz; FIN ; PROCEDIMIENTO Init* (f : Figura; if : Interfaz); INICIO f.si := si FIN de inicialización; PROCEDIMIENTO Dibujar* (f : Figura); COMENZAR f.si.dibujar(f) FIN del dibujo; (* Otros procedimientos aquí *)FIN de las cifras.

Extendemos el tipo genérico Figura a una forma específica:

MÓDULO Rectángulos; IMPORTAR cifras; TIPO Rectángulo* = PUNTERO A RectánguloDesc; RectangleDesc* = REGISTRO (Figuras.FigureDesc) x, y, w, h: ENTERO ; FIN ; VAR si : Figures.Interface; PROCEDIMIENTO Nuevo* ( VAR r : Rectángulo); INICIO NUEVO (r); Figuras.Inicializar(r, si) FIN Nuevo; PROCEDIMIENTO Dibujar* (f: Figura); VAR r: Rectángulo; INICIO r := f(Rectángulo); (* f COMO Rectángulo *) (* ... *) FIN Dibujar; (* Otros procedimientos aquí *)BEGIN (* Inicialización del módulo *) NUEVO (si); if.draw := Draw; if.clear := Clear; if.mark := Mark; if.move := Move FIN Rectángulos.

El despacho dinámico solo se realiza mediante procedimientos en el módulo Figures, que es el módulo genérico.

Controlador de mensajes

Esta técnica consiste en reemplazar el conjunto de métodos por un único procedimiento, que discrimina entre los distintos métodos:

MÓDULO Figuras; (* Módulo abstracto *)TIPO Figura* = PUNTERO A FigureDesc; Mensaje* = FIN DEL REGISTRO ; DrawMsg* = REGISTRAR (Mensaje) FIN ; ClearMsg* = REGISTRAR (Mensaje) FIN ; MarkMsg* = REGISTRAR (Mensaje) FIN ; MoveMsg* = REGISTRO (Mensaje) dx*, dy* : ENTERO FIN ; Controlador* = PROCEDIMIENTO (f: Figura; Mensaje VAR : Mensaje); FigureDesc* = REGISTRO (* Resumen *) manejador: Manejador; FIN ; PROCEDIMIENTO Handle* (f : Figura; VAR msg : Mensaje); INICIO f.manejar(f, msg) FIN del mango; PROCEDIMIENTO Init* (f : Figura; handle : Controlador); INICIO f.handle := handle FIN de inicialización; FIN de las cifras.

Extendemos el tipo genérico Figura a una forma específica:

MÓDULO Rectángulos; IMPORTAR cifras; TIPO Rectángulo* = PUNTERO A RectánguloDesc; RectangleDesc* = REGISTRO (Figuras.FigureDesc) x, y, w, h: ENTERO; FIN ; PROCEDIMIENTO Dibujar* (r : Rectángulo); INICIO (* ... *) FIN Dibujar; (* Otros procedimientos aquí *)PROCEDIMIENTO Manija* (f: Figura; Mensaje VAR : Figuras.Mensaje); var r: Rectángulo; COMENZAR r := f(Rectángulo); SI msg ES Figures.DrawMsg ENTONCES Draw(r) SINO SI msg ES Figures.MarkMsg ENTONCES Mark(r) SINO SI msg ES Figures.MoveMsg ENTONCES Move(r, msg(Figures.MoveMsg).dx, msg(Figures.MoveMsg).dy) SINO (* ignorar *) FIN FIN Handle;PROCEDIMIENTO Nuevo* ( VAR r : Rectángulo); INICIO NUEVO (r); Figuras.Init(r, Handle) FIN Nuevo; FIN Rectángulos.

En el sistema operativo Oberon, ambas técnicas se utilizan para el despacho dinámico. La primera se emplea para un conjunto conocido de métodos; la segunda, para cualquier método nuevo declarado en el módulo de extensión. Por ejemplo, si el módulo de extensión Rectángulos implementara un nuevo procedimiento Rotar(), dentro del módulo Figuras solo podría invocarse mediante un manejador de mensajes.

Implementaciones y variantes

Oberón

En Internet se pueden encontrar implementaciones gratuitas de Oberon (el lenguaje) y Oberon (el sistema operativo) (varias son de la propia ETHZ).

Oberón-2

Se realizaron algunos cambios a la primera especificación publicada. Por ejemplo, se agregaron características de programación orientada a objetosFOR (POO) y se reinstauró el bucle. El resultado fue Oberon-2 . Una versión, llamada Native Oberon , incluye un sistema operativo y puede arrancar directamente en hardware compatible con IBM PC . También se desarrolló en ETHZ una implementación de Oberon en .NET con algunas extensiones menores relacionadas con .NET. En 1993, una empresa derivada de la universidad ETHZ lanzó al mercado un dialecto de Oberon-2 llamado Oberon-L . En 1997, se le cambió el nombre a Component Pascal .

Los compiladores Oberon-2 desarrollados por ETH incluyen versiones para Microsoft Windows , Linux , Solaris y Mac OS clásico . Existen implementaciones de otras fuentes para algunos otros sistemas operativos, incluidos Atari TOS y AmigaOS [ 10 ] .

Existe un analizador léxico Oberon-2 Lex y un analizador sintáctico Yacc desarrollados por Stephen J Bevan de la Universidad de Manchester, Reino Unido, basados ​​en el que aparece en la referencia de Mössenböck y Wirth. Su versión es la 1.4.

Otros compiladores incluyen Oxford Oberon-2, [ 11 ] que también entiende Oberon-07, y Vishap Oberon. [ 12 ] Este último se basa en el compilador de código fuente a código fuente (transpilador) de lenguaje C de Oberon de Josef Templ llamado Ofront, [ 13 ] que a su vez se basa en el compilador OP2 desarrollado por Regis Crelier en ETHZ.

Oberón-07

Oberon-07, definido por Niklaus Wirth en 2007 y revisado en 2008, 2011, 2013, 2014, 2015 y 2016, se basa en la versión original de Oberon en lugar de Oberon-2. Los principales cambios son: se deben usar funciones de conversión numérica explícitas (por ejemplo, FLOORy ); se omitieron las instrucciones , y ; se extendieron las instrucciones ; las instrucciones se pueden usar para pruebas de extensión de tipo; las instrucciones solo se pueden conectar al final de una función; las variables importadas y los parámetros de valor estructurado son de solo lectura; y, se pueden asignar matrices sin usar . [ 14 ]FLTWITHLOOPEXITWHILECASERETURNCOPY

Se han desarrollado compiladores Oberon-07 para su uso con diversos sistemas informáticos. El compilador de Wirth está dirigido a un procesador RISC ( computadora de conjunto de instrucciones reducido ) de su propio diseño, que se utilizó para implementar la versión 2013 del sistema operativo Project Oberon en una placa FPGA ( matriz de puertas programables en campo ) Spartan-3 de Xilinx. También existen versiones del procesador RISC para FPGA Spartan-6, Spartan-7, Artix-7 y un emulador RISC para Windows (compilable en Linux y macOS , con binarios disponibles para Windows). OBNC se compila mediante C y puede utilizarse en cualquier sistema operativo compatible con POSIX (Interfaz de Sistema Operativo Portátil ). La implementación comercial Astrobe está dirigida a los microcontroladores STM ARM Cortex-M0, M3, M4, M7 y Raspberry Pi RP2040 y RP2350. El compilador Patchouli produce binarios de 64 bits para Windows. Oberon-07M produce binarios de 32 bits para Windows e implementa la revisión 2008 del lenguaje. Akron produce binarios tanto para Windows como para Linux. OberonJS traduce Oberon a JavaScript . Existe un IDE en línea para Oberon . oberonc es una implementación para la máquina virtual de Java .

Oberón activo

Active Oberon es otra variante de Oberon, que agrega objetos (con protección de acceso centrada en objetos y control de actividad local), aserciones protegidas por el sistema, planificación de prioridad preemptiva y una sintaxis cambiada para métodos (denominados procedimientos ligados a tipos en el vocabulario de Oberon). Los objetos pueden ser activos, lo que significa que pueden ser hilos o procesos. Además, Active Oberon tiene una forma de implementar operadores (incluida la sobrecarga), una sintaxis avanzada para usar matrices (ver extensiones del lenguaje OberonX Archivado el 4 de marzo de 2016 en Wayback Machine y Actas [ 15 ] de la 7.ª Conferencia Conjunta de Lenguajes Modulares 2006 Oxford, Reino Unido), y conoce los espacios de nombres . [ 16 ] El sistema operativo A2 (anteriormente Active Object System (AOS), [ 17 ] luego Bluebottle ), especialmente el núcleo , sincroniza y coordina diferentes objetos activos.

ETHZ ha lanzado Active Oberon , que admite objetos activos, así como los sistemas operativos basados ​​en ellos (Active Object System (AOS), Bluebottle, A2) y el entorno (JDK, HTTP, FTP, etc.) para el lenguaje. Al igual que con muchos diseños anteriores de ETHZ, existen versiones de ambos disponibles para su descarga en Internet. A partir de 2003, las unidades centrales de procesamiento (CPU) compatibles incluyen x86 de uno y dos núcleos , y StrongARM .

El desarrollo de lenguajes de esta familia continuó. Una extensión posterior de Oberon-2 se denominó originalmente Oberon/L, pero más tarde se cambió a Component Pascal (CP). CP fue desarrollado para Windows y Mac OS clásico por Oberon Microsystems, una empresa derivada comercial de ETHZ, y para .NET por la Universidad Tecnológica de Queensland . Además, los lenguajes Lagoona [ 18 ] [ 19 ] [ 20 ] y Obliq incorporan métodos de Oberon en áreas especializadas.

Posteriormente, los esfuerzos de desarrollo de .NET en ETHZ se centraron en un nuevo lenguaje llamado Zonnon . Este incluye las características de Oberon y recupera algunas de Pascal (tipos enumerados, E/S integrada), pero presenta algunas diferencias sintácticas. Otras características incluyen soporte para objetos activos, sobrecarga de operadores y manejo de excepciones.

Oberon-V (originalmente llamado Seneca, en honor a Séneca el Joven ) es un descendiente de Oberon diseñado para aplicaciones numéricas en supercomputadoras , especialmente arquitecturas vectoriales o segmentadas . Incluye constructores de matrices y una ALLinstrucción. [ 21 ]

Véase también

Recursos

General

  • Sitio web oficial (última copia disponible en archive.org) de ETH-Zürich
  • Página de Oberon de Niklaus Wirth en ETH-Zürich
  • Oberón Page en SSW, Linz
  • Oberón: El lenguaje de programación de Ulm
  • Proyecto Oberon, El diseño de un sistema operativo y un compilador , libro en PDF de Niklaus Wirth y Jürg Gutknecht, edición de 2005.
  • Genealogía del idioma Oberón
  • Sistema de desarrollo Astrobe ARM Oberon-07
  • Sistema Oberon V4 para HP OpenVMS Alpha con código fuente compatible con direccionamiento de 64 bits.
  • Compilador Oberon-2 de 64 bits para OpenVMS Alpha
  • Compilador Oxford Oberon-2 y su manual de usuario
  • Entorno de desarrollo integrado (IDE) Oberon-07 gratuito. IDE Oberon-07 gratuito para Windows, Macintosh y Linux con resaltado de sintaxis, navegación semántica y depurador de código fuente.
  • Artículo de Oberon escrito por Joseph Templ en la edición de enero de 1994 de Dr.Dobbs

Evolución de Oberón

  • Módulo-2 y Oberon Wirth (2005)
  • El lenguaje de programación, de Oberon Wirth (1988/90).
  • El lenguaje de programación Oberon (Oberon-7, Oberon revisado) Wirth, (2016, informe más reciente del lenguaje)
  • Diferencias entre Oberon-07 y Oberon Wirth (2011)
  • El lenguaje de programación Oberon-2 H. Mössenböck, N. Wirth, Institut für Computersysteme, ETH Zürich, enero de 1992
  • Diferencias entre Oberon y Oberon-2 Mössenböck y Wirth (1991)
  • Novedades en Component Pascal (Cambios de Oberon-2 a CP), Pfister (2001)

Referencias

  1. Wirth, Niklaus (1987). De Modula a Oberon y el lenguaje de programación Oberon (Informe). Informes técnicos de la ETH D-INFK. Vol.  Band 82. Wiley. doi : 10.3929/ethz-a-005363226 .
  2. Wirth, Niklaus (julio de 1988). "El lenguaje de programación Oberon". Software: Practice and Experience . 18 (7): 661– 670. doi : 10.1002/spe.4380180707 .
  3. Wirth, Niklaus (julio de 1988). "De Modula a Oberon". Software: Practice and Experience . 18 (7): 671– 690. doi : 10.1002/spe.4380180706 . S2CID 13092279 . 
  4. Wirth, Niklaus (abril de 1988). "Extensiones de tipos" . ACM Transactions on Programming Languages ​​and Systems . 10 (2): 204– 214. doi : 10.1145/42190.46167 . S2CID 15829497 . 
  5. Pountain, D. Marzo de 1991. "Los hijos de Modula, Parte II: Oberón" . Byte . Vol. 16, n.º 3, págs. 135–142 .   {{cite magazine}}: CS1 maint: nombres numéricos: lista de autores ( enlace )
  6. Wirth, Niklaus ; Gutknecht, Jürg (1987-2021). "Proyecto Oberón" (PDF) .
  7. Wirth, Niklaus. "Registro de cambios de Oberon" . ETH Zurich . Consultado el 16 de enero de 2021 .
  8. Mössenböck, Hanspeter. "Construcción de compiladores: el arte de Niklaus Wirth" (PDF) . Consultado el 28 de mayo de 2025 .
  9. Wirth, Niklaus ; Gutknecht, Jürg (1987-2021). «Proyecto Oberón» .
  10. "Aminet - Buscar" . aminet.net . Consultado el 22 de enero de 2026 .
  11. Spivey (8 de abril de 2019). "Compilador Oxford Oberon-2" . Consultado el 17 de enero de 2021 .
  12. ^ dcwbrown (16 de junio de 2020). "Compilador Vishap Oberon" . GitHub . Consultado el 17 de enero de 2021 .
  13. jtempl (2 de enero de 2020). "Ofront" . GitHub . Consultado el 17 de enero de 2021 .
  14. Wirth, Niklaus (3 de mayo de 2016). El lenguaje de programación Oberon-07 (PDF) . ETH Zurich, Departamento de Ciencias de la Computación (Informe) . Recuperado el 17 de enero de 2021 .
  15. Friedrich, Felix ; Gutknecht, Jürg (2006). «Tipos de objetos estructurados en arrays para programación matemática». En Lightfoot, David E.; Szyperski, Clemens (eds.). Lenguajes de programación modulares . Lecture Notes in Computer Science. Vol. 4228. Springer, Berlín Heidelberg. pp. 195–210 . doi : 10.1007/11860990_13 . ISBN   978-3-540-40927-4. S2CID 34210781 . 
  16. "Propuesta de contextos de módulos" (PDF) . Archivado del original (PDF) el 22 de diciembre de 2015. Consultado el 21 de diciembre de 2015 .
  17. Muller, Pieter Johannes (2002). Diseño de sistema de objetos activos e implementación multiprocesador (PDF) (Tesis doctoral). Instituto Federal Suizo de Tecnología, Zúrich ( ETH Zúrich ). Archivado del original (PDF) el 28 de mayo de 2016. Consultado el 18 de marzo de 2021 .
  18. Fröhlich, Peter H.; Franz, Michael. Sobre ciertas propiedades básicas de los lenguajes de programación orientados a componentes (PDF) (Informe). Universidad de California, Irvine . Consultado el 18 de enero de 2021 .
  19. Fröhlich, Peter H.; Gal, Andreas; Franz, Michael (abril de 2005). "Apoyo a la composición de software a nivel de lenguaje de programación" . Science of Computer Programming . 56 ( 1–2 ). Elsevier BV: 41–57 . doi : 10.1016/j.scico.2004.11.004 .Consultado el 18 de enero de 2021.
  20. Franz, Michael; Fröhlich, Peter H.; Kistler, Thomas (20 de noviembre de 1999). «Hacia el soporte de lenguaje para la programación en tiempo real orientada a componentes». Actas: Quinto Taller Internacional sobre Sistemas Confiables en Tiempo Real Orientados a Objetos . Instituto de Ingenieros Eléctricos y Electrónicos (IEEE). págs. 125–129 . doi : 10.1109/WORDSF.1999.842343 . ISBN  0-7695-0616-X. S2CID 6891092 . Consultado el 21 de enero de 2021.
  21. Griesemer, Robert (1993). "Un lenguaje para aplicaciones numéricas en computadoras vectoriales". Actas de CONPAR 90: Conferencia VAPP IV, Disertación n.° 10277. ETH Zúrich.