Oberon (lenguaje de programación)


De Wikipedia, la enciclopedia libre
  (Redirigido desde Oberon-07 )
Saltar a navegación Saltar a búsqueda

Oberon es un lenguaje de programación de propósito general publicado por primera vez en 1987 por Niklaus Wirth y el último miembro de la familia Wirthian de lenguajes similares a ALGOL ( Euler , ALGOL W , Pascal , Modula y Modula-2 ). [1] [2] [3] [4] Oberon fue el resultado de un esfuerzo concentrado para aumentar el poder de Modula-2 , el sucesor directo de Pascal , y simultáneamente para reducir su complejidad. Su principal novedad es el concepto de extensión de tipos de registros. [5]Permite construir nuevos tipos de datos a partir de los existentes y relacionarlos, desviándose del dogma de la tipificación de datos estrictamente estática . La extensión de tipo es la forma de herencia de Wirth que refleja el punto de vista del sitio principal. Oberon fue desarrollado como parte de la implementación de un sistema operativo , también llamado Oberon en ETH Zurich en Suiza . El nombre proviene de la luna del planeta Urano , llamado Oberon .

Oberon todavía es mantenido por Wirth y la última actualización del compilador del Proyecto Oberon está fechada el 6 de marzo de 2020. [6]

Diseño

Oberon está diseñado con un lema atribuido a Albert Einstein en mente: "Haz las cosas lo más simples posible, pero no más simples". La pauta principal fue concentrarse en características que son básicas y esenciales y omitir cuestiones efímeras. Otro factor fue el reconocimiento del crecimiento de la complejidad en lenguajes como C ++ y Ada . En contraste con estos, Oberon enfatiza el uso de la biblioteca.concepto para extender el lenguaje. Se omitieron los tipos de enumeración y subrango, que estaban presentes en Modula-2, y los tipos de conjuntos se limitan a conjuntos de números enteros. Todos los artículos importados deben estar calificados por el nombre del módulo donde se declaran. Las instalaciones de bajo nivel se destacan al permitir que solo se utilicen en un módulo que incluye el identificador SYSTEM en su lista de importación. La verificación de tipo estricta , incluso en todos los módulos, y la verificación de índice en tiempo de ejecución , la verificación de puntero nulo y el concepto de extensión de tipo seguro permiten en gran medida que la programación se base solo en las reglas del lenguaje.

La intención de esta estrategia era producir un lenguaje que fuera más fácil de aprender, más simple de implementar y muy eficiente. Los compiladores de Oberon se han considerado compactos y rápidos, al tiempo que proporcionan una calidad de código comparable a la de los compiladores comerciales. [7]

Caracteristicas

Las características que caracterizan el idioma de Oberon incluyen: [8]

  • Sintaxis sensible a mayúsculas y minúsculas con palabras clave en mayúsculas
  • Ampliación de tipo con prueba de tipo
  • Módulos y compilación separada
  • Operaciones de cadena
  • Aislar código inseguro
  • Soporte para la programación del sistema

Orientación a objetos

Oberon admite la extensión de tipos de registros 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 envío como característica del lenguaje, pero lo tiene como técnica de programación o patrón de diseño. Esto le da una gran flexibilidad en OOP. En el sistema operativo Oberon, se utilizan dos técnicas de programación juntas para la llamada de despacho: conjunto de métodos y controlador de mensajes.

Suite 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 y se asigna nuevamente en el módulo genérico:

MÓDULO Figuras; (* Módulo abstracto *)TIPO Figura * = PUNTERO A FigureDesc; Interfaz * = PUNTERO A InterfaceDesc; InterfaceDesc * = RECORD draw *: PROCEDURE (f: Figure); claro *: PROCEDIMIENTO (f: Figura); marca *: PROCEDIMIENTO (f: Figura); mover *: PROCEDIMIENTO (f: Figura; dx, dy: INTEGER ); FIN ; FigureDesc * = REGISTRO si: Interfaz; FIN ;PROCEDIMIENTO Init * (f: Figura; si: Interfaz);EMPEZAR f.if: = siEND Init;PROCEDIMIENTO Dibujar * (f: Figura);EMPEZAR f.if.draw (f)END Draw;(* Otros procedimientos aquí *)FIN Cifras.

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

MÓDULO Rectángulos;Importar cifras;TYPE Rectangle * = PUNTERO A RectangleDesc; RectangleDesc * = REGISTRO (Figuras.FigureDesc) x, y, w, h: INTEGER ; FIN ;VAR si: Figuras.Interfaz;PROCEDIMIENTO Nuevo * ( VAR r: Rectángulo);COMENZAR  NUEVO (r); Figuras.Init (r, si)FIN Nuevo;PROCEDIMIENTO Dibujar * (f: Figura); VAR r: rectángulo;COMIENZO r: = f (Rectángulo); (* f AS Rectángulo *)  (* ... *) END Dibujar;(* Otros procedimientos aquí *)BEGIN  (* Inicialización del módulo *)  NUEVO (si); if.draw: = Dibujar; if.clear: = Clear; if.mark: = Marca; if.move: = MoverEND Rectángulos.

El envío dinámico solo se realiza a través de procedimientos en el módulo de Figuras que es el módulo genérico.

Controlador de mensajes

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

MÓDULO Figuras; (* Módulo abstracto *)TIPO Figura * = PUNTERO A FigureDesc; Mensaje * = FIN DE REGISTRO ; DrawMsg * = RECORD (Mensaje) END ; ClearMsg * = RECORD (Mensaje) END ; MarkMsg * = RECORD (Mensaje) END ; MoveMsg * = RECORD (Mensaje) dx *, dy *: INTEGER  END ; Manejador * = PROCEDIMIENTO (f: Figura; VAR msg: Mensaje); FigureDesc * = REGISTRO  (* Resumen *) mango: Manipulador; FIN ;PROCEDIMIENTO Manejador * (f: Figura; VAR msg: Mensaje);EMPEZAR f.handle (f, msg)Mango FINAL ;PROCEDIMIENTO Inicialización * (f: Figura; mango: Manipulador);EMPEZAR f.handle: = mangoEND Init;FIN Cifras.

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

MÓDULO Rectángulos;Importar cifras;TYPE Rectangle * = PUNTERO A RectangleDesc; RectangleDesc * = REGISTRO (Figuras.FigureDesc) x, y, w, h: INTEGER; FIN ;PROCEDIMIENTO Dibujar * (r: Rectángulo);COMENZAR  (* ... *) FIN Dibujar;(* Otros procedimientos aquí *)PROCEDIMIENTO Mango * (f: Figura; VAR msg: Figuras.Mensaje); VAR r: rectángulo;EMPEZAR r: = f (rectángulo); SI msg IS Figures.DrawMsg ENTONCES Draw (r) ELSIF msg IS Figures.MarkMsg ENTONCES Marcos (r) ELSIF msg ES Figures.MoveMsg ENTONCES Mover r, msg) .DX, msg .dy ((Figures.MoveMsg (Figures.MoveMsg) ) ELSE  (* ignorar *)  END END Handle;PROCEDIMIENTO Nuevo * ( VAR r: Rectángulo);COMENZAR  NUEVO (r); Figuras.Init (r, mango)FIN Nuevo;END Rectángulos.

En el sistema operativo de Oberon, ambas técnicas se utilizan para el envío dinámico. El primero se utiliza para un conjunto conocido de métodos; el segundo se utiliza para cualquier método nuevo declarado en el módulo de extensión. Por ejemplo, si el módulo de extensión Rectangles implementara un nuevo procedimiento Rotate (), dentro del módulo Figuras solo se podría llamar a través de un controlador de mensajes.

Implementaciones y variantes

Oberon

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

Oberon-2

Se realizaron algunos cambios en la primera especificación publicada. Por ejemplo, se agregaron funciones de programación orientada a objetos (OOP) y se FORrestableció el ciclo. El resultado fue Oberon-2 . Una versión, llamada Native Oberon, que incluye un sistema operativo y puede arrancar directamente en un hardware de clase compatible con IBM PC . En ETHZ también se desarrolló una implementación .NET de Oberon con la adición de algunas extensiones menores relacionadas con .NET. En 1993, una empresa derivada de ETHZ trajo al mercado un dialecto de Oberon-2 llamado Oberon-L . En 1997, pasó a llamarse Componente Pascal .

Los compiladores de 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 .

Hay un escáner Oberon-2 Lex y un analizador Yacc de Stephen J Bevan de la Universidad de Manchester, Reino Unido, basado en el de la referencia de Mössenböck y Wirth. Está en la versión 1.4.

Otros compiladores incluyen Oxford Oberon-2, [9] que también comprende Oberon-07 y Vishap Oberon. [10] Este último se basa en el compilador fuente a fuente (transpiler) de Oberon to C language de Josef Templ llamado Ofront, [11] que a su vez se basa en el compilador OP2 desarrollado por Regis Crelier en ETHZ.

Oberon-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éricas explícitas (por ejemplo, FLOORy FLT), las declaraciones WITH, LOOPy EXITse omitieron, las WHILEdeclaraciones se extendieron, las CASEdeclaraciones se pueden usar para pruebas de extensión de tipo, las RETURNdeclaraciones 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 las matrices se pueden asignar sin usar COPY. [12]

Los compiladores de Oberon-07 se han desarrollado para su uso con muchos sistemas informáticos diferentes. El compilador de Wirth apunta a un procesador de computadora con conjunto de instrucciones reducido (RISC) de su propio diseño que se utilizó para implementar la versión 2013 del sistema operativo Project Oberon en una placa Spartan-3 de matriz de compuerta programable en campo (FPGA) Xilinx . También existen puertos del procesador RISC a FPGA Spartan-6, Spartan-7, Artix-7 y un emulador RISC para Windows (compilable en Linux y macOS , y binarios disponibles para Windows). OBNC se compila a través de C y se puede utilizar en cualquier sistema operativo compatible con Interfaz de sistema operativo portátil ( POSIX ). El astrobe comercialla implementación apunta a microcontroladores ARM Cortex-M3, M4 y M7 de 32 bits. El compilador Patchouli produce binarios de Windows de 64 bits. Oberon-07M produce binarios de Windows de 32 bits e implementa la revisión 2008 del lenguaje. Akron's produce binarios tanto para Windows como para Linux. OberonJS traduce Oberon a JavaScript . Hay IDE en línea para Oberon . oberonc es una implementación para la máquina virtual Java .

Oberon activo

Active Oberon es otra variante más de Oberon, que agrega objetos (con protección de acceso centrada en objetos y control de actividad local), aserciones protegidas por el sistema, programación de prioridad preventiva y una sintaxis modificada para los métodos (procedimientos de tipo enlazado en el vocabulario de Oberon). Los objetos pueden estar activos, lo que significa que pueden ser subprocesos o procesos. Además, Active Oberon tiene una forma de implementar operadores (incluida la sobrecarga), una sintaxis avanzada para usar matrices (ver extensiones de lenguaje de OberonX y Actas [13] de la 7ª Conferencia Conjunta de Idiomas Modulares 2006 Oxford, Reino Unido), y conoce los espacios de nombres . [14] El sistema operativo A2 (anteriormenteActive Object System (AOS), [15] luego Bluebottle ), especialmente el kernel , sincroniza y coordina diferentes objetos activos.

ETHZ ha lanzado Active Oberon que admite objetos activos y los sistemas operativos basados ​​en ellos (Active Object System (AOS), Bluebottle, A2) y el entorno (JDK, HTTP, FTP, etc.) para el idioma. Al igual que con muchos diseños anteriores de ETHZ, las versiones de ambos están disponibles para descargar en Internet. A partir de 2003, las unidades de procesamiento central (CPU) admitidas incluyen x86 de núcleo único y doble y StrongARM .

Idiomas relacionados

Continuó el desarrollo de los idiomas en esta familia. Una extensión adicional de Oberon-2, originalmente llamada Oberon / L pero luego renombrada como Component Pascal , fue desarrollada para Windows y Mac OS clásico por Oberon microsystems, una empresa comercial derivada de ETHZ, y para .NET por la Universidad Tecnológica de Queensland. . Además, los lenguajes Lagoona [16] [17] [18] y Obliq llevan los métodos de Oberon a áreas especializadas.

Los esfuerzos posteriores de desarrollo de .NET en ETHZ se centraron en un nuevo lenguaje llamado Zonnon . Esto incluye las características de Oberon y restaura algunas de Pascal (tipos enumerados, IO incorporado) pero tiene algunas diferencias sintácticas. Otras características incluyen soporte para objetos activos, sobrecarga de operadores y manejo de excepciones.

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

Ver también

  • Oberon (sistema operativo)
  • A2 (sistema operativo)
  • Oberon en Wikilibros

Recursos

General

  • Sitio web oficial (última copia disponible en archivo org) en ETH-Zürich
  • Página de Oberon de Niklaus Wirth en ETH-Zürich
  • Oberon Page en SSW, Linz
  • Oberon: el lenguaje de programación en 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 2005
  • Genealogía de lenguas de Oberon
  • Sistema de desarrollo Astrobe ARM Oberon-07
  • Oberon System V4 para HP OpenVMS Alpha con direccionamiento de 64 bits compatible con el código fuente
  • Compilador Oberon-2 de 64 bits para HP OpenVMS Alpha
  • Compilador Oxford Oberon-2 y su manual de usuario
  • IDE gratuito de Oberon-07 IDE gratuito de Oberon-07 para Windows, Macintosh y Linux con colores de sintaxis, navegación semántica y depurador de código fuente
  • Artículo de Oberon por Joseph Templ en la edición de enero de 1994 del Dr. Dobbs

Evolución de Oberon

  • Modula-2 y Oberon Wirth (2005)
  • El lenguaje de programación Oberon Wirth, (1988/90)
  • El lenguaje de programación Oberon (Oberon-7, Oberon revisado) Wirth, (2016, informe de idiomas más actual)
  • 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 del componente Pascal (cambios de Oberon-2 a CP), Pfister (2001)

Referencias

  1. ^ Wirth, Niklaus. De Modula a Oberon y el lenguaje de programación Oberon (Informe). Informes técnicos de ETH D-INFK. Banda 82. Wiley.
  2. ^ Wirth, Niklaus (julio de 1988). "El lenguaje de programación Oberon". Software: práctica y experiencia . 18 (7): 661–670.
  3. ^ Wirth, Niklaus (julio de 1988). De Modula a Oberon. Software: Práctica y Experiencia (Informe). 18 . págs. 671–690.
  4. ^ Wirth, Niklaus (abril de 1988). "Extensiones de tipo". Transacciones ACM en lenguajes de programación . 10 (2): 204–214.
  5. ^ Pountain, D. Marzo de 1991. "Hijos de Modula, Parte II: Oberon" . Byte . Vol. 16 no. 3. págs. 135-142.
  6. ^ Wirth, Niklaus. "Registro de cambios de Oberon" . ETH Zurich . Consultado el 16 de enero de 2021 .
  7. ^ Mössenböck, Hanspeter. "Construcción del compilador: el arte de Niklaus Wirth" (PDF) . Universidad Johannes Kepler.
  8. ^ Wirth, Niklaus ; Gutknecht, Jürg (1987-2021). "Proyecto Oberon" .
  9. ^ Spivey (8 de abril de 2019). "Compilador de Oxford Oberon-2" . Consultado el 17 de enero de 2021 .
  10. ^ dcwbrown (16 de junio de 2020). "Compilador de Vishap Oberon" . GitHub . Consultado el 17 de enero de 2021 .
  11. ^ jtempl (2 de enero de 2020). "Ofront" . GitHub . Consultado el 17 de enero de 2021 .
  12. ^ 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) . Consultado el 17 de enero de 2021 .
  13. ^ Friedrich, Felix ; Gutknecht, Jürg (2006). "Tipos de objetos estructurados por matrices para programación matemática". En Lightfoot, David E .; Szyperski, Clemens (eds.). Lenguajes de programación modular . Lenguajes de programación modular . Apuntes de conferencias en Ciencias de la Computación. 4228 . Springer, Berlín Heidelberg. págs. 195–210. doi : 10.1007 / 11860990_13 . ISBN 978-3-540-40927-4.
  14. ^ "Propuesta de contextos de módulo" (PDF) .
  15. ^ Muller, Pieter Johannes (2002). El diseño del sistema de objetos activos y la implementación de multiprocesador (PDF) (PhD). Instituto Federal Suizo de Tecnología, Zúrich ( ETH Zúrich ).
  16. ^ 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 .
  17. ^ 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" . Ciencia de la Programación de Computadores . Elsevier BV 56 (1–2): 41–57. doi : 10.1016 / j.scico.2004.11.004 . Consultado el 18 de enero de 2021.
  18. ^ Franz, Michael; Fröhlich, Peter H .; Kistler, Thomas (20 de noviembre de 1999). "Hacia el soporte del 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. Consultado el 21 de enero de 2021.
  19. ^ Griesemer, Robert (1993). "Un lenguaje para aplicaciones numéricas en computadoras vectoriales". Actas CONPAR 90: Conferencia VAPP IV, Diss Nr. 10277 . ETH Zurich.
Obtenido de " https://en.wikipedia.org/w/index.php?title=Oberon_(programming_language)&oldid=1043970412#Oberon-07 "