stringtranslate.com

Semilla7

Seed7 es un lenguaje de programación extensible de propósito general diseñado por Thomas Mertes. Es sintácticamente similar a Pascal y Ada . Junto con muchas otras características, proporciona un mecanismo de extensión. [2] Seed7 admite la introducción de nuevos elementos de sintaxis y su semántica en el lenguaje, y permite que se definan y escriban nuevas construcciones de lenguaje en Seed7. [3] Por ejemplo, los programadores pueden introducir la sintaxis y la semántica de nuevas declaraciones y símbolos de operadores definidos por el usuario . La implementación de Seed7 difiere significativamente de la de los lenguajes con sintaxis y semántica codificadas de forma rígida .

Características

Seed7 admite los paradigmas de programación : imperativo , orientado a objetos (OO) y genérico . También admite funciones como llamada por nombre , envío múltiple , sobrecarga de funciones , sobrecarga de operadores , manejo de excepciones y aritmética de precisión arbitraria .

Las características principales incluyen:

Se generalizan varios conceptos del lenguaje de programación:

El proyecto Seed7 incluye tanto un intérprete como un compilador . El intérprete inicia los programas muy rápidamente, lo que permite un desarrollo rápido de los mismos. El compilador utiliza las interfaces de análisis y reflexión de la biblioteca de tiempo de ejecución para generar un programa en C , que posteriormente se compila en código de máquina . Los programas Seed7 compilados pueden tener un rendimiento comparable al de los programas en C. [4]

Características omitidas

Bibliotecas

Seed7 tiene muchas bibliotecas, que cubren áreas que incluyen contenedores , funciones numéricas, análisis léxico , manipulación de archivos, redes ( sockets , Transport Layer Security (TLS/SSL), Hypertext Transfer Protocol (HTTP), HTTP Secure ( HTTPS ), File Transfer Protocol (FTP), Simple Mail Transfer Protocol (SMTP), etc.), gráficos , fuentes de mapa de bits y vectoriales , API independiente de la base de datos, soporte para Common Gateway Interface (CGI), compresión de datos , archivos de almacenamiento ( tar , zip , cpio , ar , rpm ), codificación de caracteres , manejo de fecha y hora, procesamiento XML , resúmenes de mensajes y más. [5] Estas bibliotecas reducen la necesidad de usar directamente características del sistema operativo no portables y bibliotecas de terceros (que pueden no estar siempre presentes). Las bibliotecas de Seed7 contienen capas de abstracción para hardware , sistema operativo y bibliotecas de terceros, por ejemplo, bibliotecas gráficas y de bases de datos. En otras palabras, no se necesitan cambios para mover programas de Seed7 entre diferentes procesadores o sistemas operativos .

Biblioteca TLS

Seed7 tiene su propia implementación de Seguridad de la capa de transporte . [6] La biblioteca incluye AES y criptografía de curva elíptica .

API de abstracción de bases de datos

Seed7 proporciona una biblioteca con una API independiente de la base de datos . [7] Los programas pueden conectarse a bases de datos MySQL , MariaDB , SQLite , PostgreSQL , Oracle , Open Database Connectivity (ODBC), Firebird , InterBase , IBM Db2 y SQL Server . Independientemente de la base de datos, se pueden crear sentencias preparadas, se pueden utilizar variables de enlace, se pueden ejecutar sentencias y se pueden obtener conjuntos de resultados.

Historia

Seed7 se basa en MASTER, un lenguaje de programación extensible descrito en las tesis de diploma y doctorado de Thomas Mertes. [8] [9] La mayoría de las ideas originales de MASTER, como las sentencias y operadores definidos por el usuario, se pueden encontrar en Seed7. En el proyecto original se propuso un precompilador para traducir MASTER a Pascal, pero no se implementó. En 1989, se comenzó a desarrollar un intérprete para MASTER, llamado HAL. En 2005, los proyectos MASTER y HAL se publicaron como código abierto bajo el nombre de proyecto Seed7. Desde entonces, se han publicado nuevas versiones cada dos o tres semanas. A la fecha de la versión 2021-04-25, el proyecto Seed7 contiene más de 500.000 líneas de código fuente y varios cientos de páginas de documentación.

Mertes ha dicho que el nombre Seed7 surgió del concepto de sus ideas de que el lenguaje se difundiera como semillas que crecerían a medida que otros lo usaran. La parte "7" se agregó porque era un número primo que le parecía que sonaba bien con "semilla". [10]

Mecanismo de extensión

Una extensión incluye dos partes: una definición de sintaxis, que proporciona una plantilla para la nueva forma sintáctica, y una función Seed7 estándar, utilizada para definir la semántica. [2]

Definición de sintaxis

La definición de sintaxis utiliza la descripción de sintaxis estructurada Seed7 (S7SSD). Una declaración S7SSD como

$ sintaxis expr: .(). + .() es -> 7;

especifica la sintaxis del + operador . La flecha derecha ->describe la asociatividad : Enlace de operandos de izquierda a derecha. Con se define 7la prioridad del operador. Se introduce el patrón de sintaxis y se delimita con puntos ( ). Sin puntos el patrón es . El símbolo es un símbolo no terminal y es un símbolo terminal. [11] El S7SSD no distingue entre diferentes símbolos no terminales . En cambio, solo conoce un símbolo no terminal: .+.(). + .().() + ()()+()

Extensión semántica

La definición del +operador para números complejos es simplemente una definición de función:

const func complex : ( en complejo : sumando1 ) + ( en complejo : suma2 ) es el resultado de func var complex : suma es complejo . valor ; comenzar suma . re := sumando1 . re + comando2 . re ; suma . soy := sumando1 . soy + sumando2 . soy ; función final ;                              

Referencias

  1. ^ Mertes, Thomas (12 de agosto de 2024). "Nueva versión de Seed7 12/08/2024" . Consultado el 16 de agosto de 2024 a través de SourceForge .
  2. ^ ab Daniel Zingaro , "Modern Extensible Languages", SQRL Report 47 McMaster University (octubre de 2007), página 16 (enlace alternativo).
  3. ^ Abrial, Jean-Raymond y Glässer, Uwe, "Métodos rigurosos para la construcción y análisis de software", ISBN 978-3-642-11446-5 , Springer, 2010, página 166. 
  4. ^ Stadfeld, Paul (1 de abril de 2010). «The Quest for the Ultimate Cycle (incluye una comparación de rendimiento entre Python, Seed7 y C)». Archivado desde el original el 25 de octubre de 2013. Consultado el 19 de agosto de 2019 .
  5. ^ Bibliotecas Seed7
  6. ^ Una biblioteca de seguridad de la capa de transporte (TLS) escrita en Seed7
  7. ^ API de abstracción de base de datos
  8. ^ Mertes, Thomas, "Entwurf einer erweiterbaren höheren Programmiersprache", tesis de diploma Universidad Tecnológica de Viena (1984). (Resumen)
  9. ^ Mertes, Thomas, "Definition einer erweiterbaren höheren Programmiersprache", Tesis doctoral Universidad Tecnológica de Viena (1986). (Resumen)
  10. ^ "Club de codificación: presenta Seed7". YouTube . 4 de julio de 2024 . Consultado el 22 de julio de 2024 .
  11. ^ David Gudeman (26 de marzo de 2015), "El lenguaje de programación Seed7" (En Seed7 puedes especificar una sintaxis como esta)

Enlaces externos