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:
- Declaraciones y operadores definidos por el usuario
- Tipos de datos abstractos
- Plantillas sin sintaxis especial
- Orientado a objetos con interfaces y despacho múltiple
- Tipificación estática
- Puede ser interpretado o compilado
- Portabilidad del código fuente a través de bibliotecas suministradas que proporcionan una interfaz común para diferentes sistemas operativos y sistemas de ventanas.
- Funciona en BSD , Linux , Mac OS X , Unix y Windows.
Se generalizan varios conceptos del lenguaje de programación:
- Las declaraciones de tipos (que asignan un nombre a un tipo) y las definiciones de funciones toman la forma de definiciones de constantes.
- Las expresiones en tiempo de compilación pueden ejecutar funciones definidas por el usuario.
- La sobrecarga y la orientación a objetos (con envío múltiple) se consideran conceptos comunes, pero ocurren en momentos diferentes: tiempo de compilación y tiempo de ejecución , respectivamente.
- Los nombres de tipos y las descripciones de tipos se pueden utilizar como parámetros y resultados de funciones.
- Las funciones, que se ejecutan en tiempo de compilación , se pueden utilizar para definir objetos.
- Las plantillas se escriben como funciones de tiempo de compilación con parámetros de tipo.
- Las matrices , los mapas hash y las estructuras no son una característica codificada de forma rígida, sino que se definen como tipos de datos abstractos en bibliotecas .
- El analizador y el intérprete son parte de la biblioteca de tiempo de ejecución.
- Compatibilidad con Unicode UTF-32 . Esto evita problemas con codificaciones de longitud variable como UTF-8 y UTF-16 .
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
- Macros y un preprocesador
- Módulos y espacios de nombres
- Gestión manual de memoria
- Punteros y NULL
- Expresiones regulares
- Parámetros de función predeterminados
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 pareció 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 complex : sumando1 ) + ( en complex : sumando2 ) es func resultado var complex : suma es complex . valor ; inicio suma . re := sumando1 . re + sumando2 . re ; suma . im := sumando1 . im + sumando2 . im ; fin func ;
Referencias
- ^ Mertes, Thomas (12 de agosto de 2024). «New Seed7 Release 2024-08-12» (Nueva versión de Seed7 2024-08-12) . Consultado el 16 de agosto de 2024 a través de SourceForge .
- ^ ab Daniel Zingaro , "Modern Extensible Languages", SQRL Report 47 McMaster University (octubre de 2007), página 16 (enlace alternativo).
- ^ 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.
- ^ 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 .
- ^ Bibliotecas de Seed7
- ^ Una biblioteca de seguridad de la capa de transporte (TLS) escrita en Seed7
- ^ API de abstracción de base de datos
- ^ Mertes, Thomas, "Entwurf einer erweiterbaren höheren Programmiersprache", tesis de diploma Universidad Tecnológica de Viena (1984). (Resumen)
- ^ Mertes, Thomas, "Definition einer erweiterbaren höheren Programmiersprache", Tesis doctoral Universidad Tecnológica de Viena (1986). (Resumen)
- ^ "Club de codificación: presenta Seed7". YouTube . 4 de julio de 2024 . Consultado el 22 de julio de 2024 .
- ^ David Gudeman (26 de marzo de 2015), "El lenguaje de programación Seed7" (En Seed7 puedes especificar una sintaxis como esta)
Enlaces externos
- Sitio web oficial : página de inicio con preguntas frecuentes, manual, capturas de pantalla, ejemplos, descripciones de bibliotecas, evaluaciones comparativas y un conjunto de algoritmos
- Espejo de la página de inicio de Seed7
- Seed7 en GitHub
- Descargue Seed7 desde su repositorio principal en SourceForge
- Seed7 en Rosetta Code: contiene muchos ejemplos de Seed7
- La búsqueda del ciclo definitivo explora la extensión 3n+C de la conjetura de Collatz con programas Seed7
- Blog de Remo Laubacher: Ejecutables de Linux enlazados estáticamente con GCJ, Seed7 y haXe (2011)
- Blog de David Gudeman El lenguaje de programación Seed7 (2015)
- Un puerto de FreeBSD (ver también aquí), mantenido por Pietro Cerutti
- Un puerto de OpenBSD, proporcionado por Brian Callahan
- Un paquete Seed7 para openSUSE/Fedora (ver también aquí o aquí)
- Una discusión donde se describe a Seed7 como un lenguaje donde los usuarios del lenguaje pueden definir realmente una nueva sintaxis.
- Seed7 en "Fossies": el nuevo archivo de software de código abierto