Zonnon | |
---|---|
clase de idioma | imperativo , estructural , modular , orientado a objetos , multiproceso |
tipo de ejecución | compilado |
Apareció en | 2000 |
Autor | Jürg Gutknecht [1] |
extensión de archivo | .znn |
Liberar | 1.3.0 ( 9 de noviembre de 2012 ) |
sistema de tipos | estático , fuerte |
Implementaciones principales | ETHZ |
sido influenciado | Oberón activo |
Licencia | MS-PL |
Sitio web | zonnon.org |
Plataforma | .RED |
Zonnon es un lenguaje de programación de propósito general basado en el lenguaje Modula-2 que admite objetos activos introducidos en Active Oberon . El lenguaje introdujo un nuevo paradigma de programación: el modelo compositivo. Se utiliza recolección de basura , se contienen herramientas sintácticas para programación de objetos, organización de computación paralela, redefinición de operadores y manejo de excepciones. El lenguaje fue diseñado por Jürg Gutknecht . En la versión moderna del compilador ETH , el lenguaje tiene la capacidad de resolver problemas de álgebra lineal con una sintaxis similar a matlab [2] [3] . El compilador de lenguaje es el primero en ser creado completamente fuera de Microsoft y completamente integrado en Visual Studio junto con otros lenguajes de plataforma .NET . [cuatro]
El proyecto surgió de la participación de científicos del Swiss Federal Institute of Technology ( ETH ), especialistas de Oberon en el marco del Project 7 (Proyecto 7), una iniciativa presentada en 1999 por Microsoft Research para estudiar el lenguaje para compatibilidad con el Plataforma NET en los años (1999-2002). [5] El autor del lenguaje es Jurg Gutknecht, profesor de ETH, colega de Niklaus Wirth y su coautor sobre el lenguaje Oberón . El proyecto Zonnon se desarrolló a principios de la década de 2000 en Zúrich en ETH . El objetivo del proyecto era crear un lenguaje de programación de propósito general y alto nivel con la sintaxis más simple y clara, pero que al mismo tiempo tuviera capacidades suficientes para desarrollar software de cualquier complejidad.
El proyecto Zonnon no puede considerarse una continuación de la línea de lenguajes Pascal - Modula - Oberon - Oberon-2 - Component Pascal. Es, más bien, un ramal paralelo , separado de la citada línea en algún lugar a la altura de la Modula - Oberon. El antepasado inmediato de Zonnon es Active Oberon , desarrollado con la participación del mismo Jürg Gutknecht. Si Niklaus Wirth, al crear Oberon, simplificó Modula-2 tanto como fue posible, eliminando de él todo lo que no se consideró demasiado necesario, entonces los creadores del lenguaje Zonnon tomaron un camino más tradicional: conservaron la mayoría de las características de Modula. 2 e incluso devolvió algo de Pascal, y también complementó el lenguaje con varios conceptos y mecanismos nuevos.
Zonnon, según los partidarios de este proyecto, es más simple y potente que lenguajes como Ada, Java y C# [6] . Está diseñado para programar de manera fácil y eficiente sistemas paralelos utilizando los nuevos procesadores multinúcleo que dominarán la industria durante una década.
El lenguaje distingue entre mayúsculas y minúsculas: la diferencia en el caso de las letras en los identificadores conduce a su diferencia. Se ha realizado un movimiento original: las palabras clave (reservadas) se reservan cuando se escriben todas las letras en mayúsculas o todas las letras en minúsculas. Es decir, accepty ACCEPT son palabras clave, pero aquí AcCePt hay solo un identificador válido.
Hay 51 palabras clave en el idioma (escritas solo en minúsculas o solo en mayúsculas):
aceptar | actividades | matriz | como | esperar | empezar | por | caso | constante | definición | división | hacer | más | elsif | fin | excepción | salir | falso | para | si | implementación | implementos | importación | en | es | lanzamiento | bucle | modificación | módulo | nuevo | cero | objeto | de | en | operador | o | procedimiento | recibir | registro | refinamientos | repetir | volver | uno mismo | enviar | entonces | a | cierto | tipo | hasta | variable | tiempo
De las características, se puede notar el uso del signo #como símbolo de la operación "no igual" (como en el Módulo-2), así como la presencia de la operación ** - "exponenciación", - devuelta al servicio después de muchos años del olvido de la lengua Fortran .
El lenguaje incluye un conjunto de tipos primitivos: varios tipos numéricos, incluido un entero sin signo, varios reales, un tipo de cadena (las herramientas de lenguaje estándar tratan las cadenas como no modificables), carácter y booleano. Los tipos de rango se abandonaron, pero los tipos de enumeración se mantuvieron y se usaron activamente. El tipo de conjunto ( SET) se ha conservado, pero se ha vuelto menos genérico: los conjuntos ahora solo pueden consistir en números enteros en el rango de cero a algún límite superior definido por la implementación. Los tipos y conjuntos primitivos se pueden usar en un programa con modificadores de tamaño: si en la descripción de un objeto u objeto un número sigue al nombre del tipo entre llaves, se percibe como la cantidad de bits que se deben asignar al valor. Sin embargo, esta característica (más precisamente, los valores de tamaño específicos permitidos para cada uno de los tipos) depende del sistema, por lo que no se puede recomendar su uso en programas que dicen ser portátiles.
Las matrices se describen de la misma manera que en Oberon: un tipo de matriz puede tener un tamaño ilimitado en cualquier conjunto de dimensiones; al crear una matriz real, sus dimensiones se especifican explícitamente. Los índices de matriz pueden ser números enteros (el límite inferior siempre es cero) o enumerados.
La estructura general del programa, los módulos, la división del módulo en un módulo de definiciones y un módulo de implementación, las reglas para escribir construcciones sintácticas se toman prestadas de Modula-2 prácticamente sin cambios. Se admite la construcción "larga" del operador condicional IF-THEN-ELSIF-ELSE-END, todos los tipos de ciclos disponibles en el módulo: construcción de selección REPEAT-UNTIL, WHILE, FOR, LOOP, CASE. A partir de Pascal, las operaciones de E/S primitivas estándar se devolvieron al lenguaje Write, WriteLn, Read, ReadLn(que se trasladaron a la biblioteca estándar en el Módulo-2 ).
Además, el lenguaje tiene:
La principal innovación conceptual de Zonnon, en comparación con Modula y Oberon, fue la introducción de objetos activos. En la mayoría de los lenguajes de programación, un objeto es simplemente una colección de datos y métodos de procesamiento que el programa utiliza según sea necesario. Los objetos activos, además, tienen su propio comportamiento, es decir, cada objeto activo tiene su propio hilo de ejecución independiente, que interactúa con otros hilos a través de herramientas de intercambio de lenguaje, según los protocolos descritos para ellos. En Zonnon, se hizo posible describir los objetos activos y el orden de su interacción por medio del lenguaje, lo que hace posible, si es necesario, formar un programa como un conjunto de objetos activos que interactúan y funcionan de forma independiente.
Este programa calcula la suma de dos números ingresados desde el teclado.
Zonnon utiliza modelos de herencia composicional basados en la agregación. Normalmente, un objeto (o módulo) consta de una serie de componentes funcionales, cada uno de los cuales se presenta a los clientes en forma de definición abstracta. Un conjunto de definiciones, así como la propia interfaz de un objeto (es decir, la colección de todos los elementos públicos de un objeto) constituye la interfaz entre un objeto y sus clientes. Esto le permite darse cuenta de las ventajas de la programación modular y de componentes y, lo que es más importante, poder admitir herencia única y múltiple (sin las desventajas de implementar esta última en C ++), polimorfismo, refinamiento y agregación, delegación a nivel de firmas de métodos.
Es casi imposible definir sin ambigüedades ciertas características del idioma como ventajas y desventajas; tal evaluación depende en gran medida de la opinión del evaluador. En este sentido, sería adecuado comparar Zonnon con lenguas cercanas a él.
En comparación con Pascal y Modula-2, Zonnon se ha vuelto mucho más potente, pero al mismo tiempo más voluminoso y complejo. El aumento de potencia se logró gracias a la inclusión de nuevas construcciones sintácticas. Las funciones de procesamiento en paralelo (en el caso de Zonnon, no son solo las construcciones sintácticas en sí mismas, sino también el principio general de construir programas como conjuntos de objetos activos) le permiten transferir operaciones de rutina al compilador. La preservación del principio modular de la programación permite que los programas se escriban todos a la vez sin utilizar la programación orientada a objetos , lo cual es importante para fines educativos. Se ha introducido un nuevo modelo de composición, pero los defensores de OOP también pueden usar objetos. Se han introducido facilidades de manejo de excepciones. La evaluación comparativa de los idiomas dependerá de cuán significativas se consideren estas dos ventajas.
Hay diferentes opiniones sobre las herramientas de procesamiento paralelo: algunos teóricos y profesionales creen que las herramientas de programación paralela no deberían introducirse en el lenguaje en absoluto, y que el soporte de las bibliotecas del sistema es suficiente para ellos, otros señalan que dichas bibliotecas deberían ser absolutamente estándar, es decir, aún se convierten en parte del lenguaje, de lo contrario los programas que los usan perderán la portabilidad (por otro lado, la portabilidad no es realmente necesaria con tanta frecuencia). En cualquier caso, para un programador, el valor de los mecanismos de procesamiento paralelo de Zonnon viene determinado en gran medida por su disposición a aceptar el modelo de objetos activos propuesto por el lenguaje como elemento principal del programa.
Tampoco hay consenso sobre el mecanismo para manejar las excepciones. Niklaus Wirth se negó a introducir tal mecanismo en Oberon, considerándolo inútil, ya que el sistema Oberon, para el que se desarrolló este lenguaje, no lo necesita. En general, existe la opinión de que la mayoría de los problemas con la reacción de los programas a posibles errores se resuelven por completo sin el manejo de excepciones, y este mecanismo no es gratuito; por regla general, debe pagar por la capacidad de detectar cualquier error con el rendimiento del programa. . Por otro lado, el manejo de excepciones es conveniente y ahora se ha convertido en un lugar común, y las pérdidas de rendimiento no son tan grandes (o los requisitos de velocidad no son tan críticos) como para renunciar a la conveniencia del desarrollo.
Las innovaciones restantes de Zonnon, en particular, una sintaxis OOP más desarrollada, interfaces, indexadores, propiedades, redefinición de operadores, difícilmente deberían considerarse fundamentales. Por un lado, complican el lenguaje y todo lo que te permiten hacer se puede hacer casi con la misma facilidad sin ellos. Por otro lado, cabe señalar que en este caso estos fondos se implementaron de manera bastante económica. Después de todo, si comparamos Zonnon con Object Pascal, que se desarrolló aproximadamente de acuerdo con el mismo esquema, complementando el lenguaje de origen con nuevos mecanismos de moda, podemos ver que Zonnon está al mismo nivel que Object Pascal en términos de capacidades, sin pasar por alto. herramientas de procesamiento paralelo, pero sigue siendo más simple.
La implementación del lenguaje desde el principio no fue por el camino de crear su propio entorno de desarrollo integrado y entorno de soporte, como en el caso del lenguaje Oberon, sino por el camino de la integración con la plataforma .NET lanzada y mantenida por Microsoft. Este enfoque proporcionó un aumento en la velocidad de implementación al eliminar el desarrollo de su propio entorno y sistema de bibliotecas, y también otorgó automáticamente acceso a los programas a las bibliotecas de aplicaciones y sistemas del entorno .NET. Las desventajas de esta opción de implementación incluyen la dependencia del desarrollo de software externo que no está bajo el control del implementador del lenguaje.
Sin embargo, dentro de la misma implementación de .NET, existe una variante de un entorno de desarrollo multiplataforma que está integrado en Eclipse y utiliza la implementación Mono gratuita de .NET que puede funcionar en Linux.
Para Windows, también existe el entorno de desarrollo nativo más sencillo, ETH Zonnon Builder , que incluye un editor de texto con resaltado de sintaxis, herramientas de creación de proyectos y herramientas sencillas de control de versiones.
El primer compilador fue creado en ETH para la plataforma Microsoft .NET por Evgeny Zuev. En 2005, también se creó un paquete de software que integra un compilador y un sistema CASE que soporta el diseño de programas Zonnon mediante la construcción de diagramas en el lenguaje UML 2.0 en el entorno de desarrollo Microsoft Visual Studio .NET. La herramienta resultante es compatible con el estándar para el ciclo de desarrollo de software MS Visual Studio .NET en el lenguaje Zonnon utilizando UML, incluida la construcción inversa de la descripción UML de acuerdo con el código del proyecto.
Lenguajes orientados a objetos | |
---|---|
compilado | |
guion |
|
Ambas actuaciones |