De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

Seed7 es un lenguaje de programación extensible de uso 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 de lenguaje en Seed7. [3] Por ejemplo, los programadores pueden introducir sintaxis y 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 de forma rígida .

Funciones [ editar ]

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 envío múltiple
  • Escritura estática
  • Puede ser interpretado o compilado
  • Portabilidad del código fuente
  • Funciona con BSD , Linux , Mac OS X , Unix , Windows

Se generalizan varios conceptos de lenguaje de programación:

  • Las declaraciones de tipo (que asignan un nombre a un tipo) y las definiciones de funciones toman la forma de definiciones 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. Simplemente suceden en diferentes momentos: tiempo de compilación y tiempo de ejecución , respectivamente.
  • Los nombres de tipos y las descripciones de tipos se pueden utilizar como resultado de parámetros y 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. En cambio, se definen como tipos de datos abstractos en bibliotecas .
  • El analizador y el intérprete son parte de la biblioteca en tiempo de ejecución.
  • Compatibilidad con UTF-32 Unicode. Esto evita problemas de codificaciones de longitud variable como UTF-8 y UTF-16 .

El proyecto Seed7 incluye un intérprete y un compilador . El intérprete inicia los programas muy rápidamente, lo que permite un desarrollo rápido del programa. 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 de Seed7 pueden tener un rendimiento comparable al de los programas C. [4]

Bibliotecas [ editar ]

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 , mapas de pixels y el vector de fuentes , la base de datos API independiente , Common gateway Interface (CGI) de apoyo, compresión de datos , ficheros de archivo ( alquitrán ,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 del sistema operativo no portátiles y bibliotecas de terceros (que no siempre pueden estar presentes) directamente. 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 los programas de Seed7 entre diferentes procesadores o sistemas operativos .

Biblioteca TLS [ editar ]

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 [ editar ]

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 , Db2 y SQL Server . Independientemente de la base de datos, se pueden crear declaraciones preparadas, vincular variables, ejecutar declaraciones y obtener conjuntos de resultados.

Historia [ editar ]

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 declaraciones y los 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, comenzó el desarrollo de un intérprete para MASTER, llamado HAL. En 2005, los proyectos MASTER y HAL se lanzaron como código abierto bajo el nombre del 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 [ editar ]

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 estándar de Seed7, que se utiliza para definir la semántica. [2]

Definición de sintaxis [ editar ]

La definición de sintaxis utiliza la descripción de sintaxis estructurada de 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 7la prioridad del +operador se define. El patrón de sintaxis .(). + .()se introduce 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. [10] El S7SSD no distingue entre diferentes símbolos no terminales . En su lugar, sólo se conoce un símbolo no terminal: ().

Extensión semántica [ editar ]

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

const func complex: (en complex: summand1) + (en complex: summand2) es func resultado var complex: suma es complex.value; empezar sum.re: = summand1.re + summand2.re; sum.im: = summand1.im + summand2.im; end func;

Referencias [ editar ]

  1. ^ Mertes, Thomas (25 de abril de 2021). "Nueva versión de Seed7 2021-04-25" . Consultado el 25 de abril de 2021 , a través de SourceForge .
  2. ↑ a b 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 el análisis de software" , ISBN 978-3-642-11446-5 , Springer, 2010, página 166. 
  4. ^ Stadfeld, Paul (1 de abril de 2010). "La búsqueda del ciclo definitivo (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 de Seed7
  6. ^ Una biblioteca de seguridad de la capa de transporte (TLS) escrita en Seed7
  7. ^ API de abstracción de la base de datos
  8. ^ Mertes, Thomas, "Entwurf einer erweiterbaren höheren Programmiersprache", Tesis de diploma de la Universidad Tecnológica de Viena (1984). ( Resumen )
  9. ^ Mertes, Thomas, "Definición einer erweiterbaren höheren Programmiersprache" , Tesis doctoral de la Universidad Tecnológica de Viena (1986). ( Resumen )
  10. ^ David Gudeman (26 de marzo de 2015), "El lenguaje de programación de Seed7" (en Seed7 puede especificar una sintaxis como esta)

Enlaces externos [ editar ]

  • 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
  • Seed7 en GitHub
  • Descarga Seed7 desde su repositorio principal en Sourceforge
  • Seed7 en Rosetta Code : contiene muchos ejemplos de Seed7
  • The Quest for the Ultimate Cycle explora la extensión 3n + C de la conjetura de Collatz con los programas Seed7
  • Blog de Remo Laubacher : ejecutables de Linux vinculados estáticamente con GCJ, Seed7 y haXe (2011)
  • Blog de David Gudeman El lenguaje de programación Seed7 (2015)
  • Un puerto FreeBSD / ver también aquí , mantenido por Pietro Cerutti
  • Un puerto de OpenBSD , proporcionado por Brian Callahan
  • Un paquete Seed7 para openSUSE / Fedora , (vea también aquí o aquí )
  • Una discusión en la que Seed7 se describe como un lenguaje en el que los usuarios del lenguaje pueden definir una nueva sintaxis.
  • Seed7 en "Fossies" - el archivo de software de código abierto fresco