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 definir y escribir nuevas construcciones del lenguaje en Seed7. [3] Por ejemplo, los programadores pueden introducir la sintaxis y la semántica de nuevas declaraciones y símbolos de operador definidos por el usuario . La implementación de Seed7 difiere significativamente de la de los lenguajes con sintaxis y semántica codificadas .

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

Bibliotecas

Seed7 tiene muchas bibliotecas, que cubren áreas que incluyen contenedores , funciones numéricas, análisis léxico , manipulación de archivos, redes ( sockets , seguridad de la capa de transporte (TLS/SSL), protocolo de transferencia de hipertexto (HTTP), HTTP seguro ( HTTPS ), protocolo de transferencia de archivos (FTP). ), Protocolo simple de transferencia de correo (SMTP), etc.), gráficos , mapas de píxeles y fuentes vectoriales , API independiente de la base de datos, soporte de interfaz de puerta de enlace común (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 utilizar funciones no portátiles del sistema operativo y bibliotecas de terceros (que pueden no siempre estar presentes) directamente. Las bibliotecas Seed7 contienen capas de abstracción para hardware , sistema operativo y bibliotecas de terceros, por ejemplo, bibliotecas de gráficos y bases de datos. En otras palabras, no se necesitan cambios para mover programas Seed7 entre diferentes procesadores o sistemas operativos .

biblioteca TLS

Seed7 tiene su propia implementación de Transport Layer Security . [6] La biblioteca incluye AES y criptografía de curva elíptica .

API de abstracción de base 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 declaraciones preparadas, se pueden usar variables de vinculación, se pueden ejecutar las declaraciones y se pueden recuperar conjuntos de resultados.

Historia

Seed7 se basa en MASTER, un lenguaje de programación extensible descrito en las tesis doctorales y de diploma de Thomas Mertes. [8] [9] La mayoría de las ideas originales de MASTER, como declaraciones y operadores definidos por el usuario, se pueden encontrar en Seed7. Se propuso un precompilador para traducir MASTER a Pascal, pero no se implementó en el proyecto original. En 1989, comenzó el desarrollo de un intérprete para MASTER, llamado HAL. En 2005, los proyectos MASTER y HAL se lanzaron como código abierto con el nombre de proyecto Seed7. Desde entonces se han lanzado nuevas versiones cada dos o tres semanas. A partir 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.

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 de Seed7 (S7SSD). Una declaración S7SSD como

$ expresión de sintaxis: .(). + .() es -> 7;

Especifica la sintaxis del + operador . La flecha derecha ->describe la asociatividad : vinculación de operandos de izquierda a derecha. Con ello se define 7la prioridad del +operador. El patrón de sintaxis .(). + .()se introduce y delimita con puntos ( .). Sin puntos el patrón es () + (). El símbolo ()es un símbolo no terminal y +es un símbolo terminal. [10] El S7SSD no distingue entre diferentes símbolos no terminales . En cambio, sólo 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 complejo: (en complejo: sumando1) + (en complejo: sumando2) es func resultado var complejo: la suma es valor complejo; comenzar suma.re := suma1.re + suma2.re; suma.im := suma1.im + suma2.im; función final;

Referencias

  1. ^ Mertes, Thomas (29 de mayo de 2023). "Nueva versión de Seed7 29-05-2023" . Consultado el 29 de mayo de 2023 a través de SourceForge .
  2. ^ ab Daniel Zingaro , "Lenguajes extensibles modernos", Informe SQRL 47 Universidad McMaster (octubre de 2007), página 16 (enlace alternativo).
  3. ^ Abrial, Jean-Raymond y Glässer, Uwe, "Métodos rigurosos para la construcción y el 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 Transport Layer Security (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. ^ David Gudeman (26 de marzo de 2015), "El lenguaje de programación Seed7" (en Seed7 puede especificar una sintaxis como esta)

enlaces externos