Seed7 - Seed7
Paradigma | multiparadigma : extensível , orientado a objetos , imperativo , estruturado , genérico , reflexivo |
---|---|
Projetado por | Thomas Mertes |
Apareceu pela primeira vez | 2005 |
Versão estável | 2021-08-07 / 69 dias atrás |
Disciplina de digitação | estático , forte , seguro , nominativo , manifesto |
SO | Plataforma cruzada : BSD , Linux , OS X , Unix , Windows |
Licença | GPL , LGPL (para a biblioteca de tempo de execução) |
Extensões de nome de arquivo | .sd7, .s7i |
Local na rede Internet | seed7 |
Implementações principais | |
implementação de referência de código aberto | |
Influenciado por | |
Pascal , Modula-2 , Ada , ALGOL 68 , C , C ++ , Java |
Seed7 é uma linguagem de programação extensível de propósito geral projetada por Thomas Mertes. É sintaticamente semelhante a Pascal e Ada . Junto com muitos outros recursos, ele fornece um mecanismo de extensão. O Seed7 oferece suporte à introdução de novos elementos de sintaxe e sua semântica na linguagem e permite que novas construções de linguagem sejam definidas e escritas no Seed7. Por exemplo, os programadores podem introduzir sintaxe e semântica de novas instruções e símbolos de operador definidos pelo usuário . A implementação do Seed7 difere significativamente daquela de linguagens com sintaxe e semântica embutidas em código .
Recursos
Seed7 suporta os paradigmas de programação : imperativo , orientado a objetos (OO) e genérico . Ele também oferece suporte a recursos como chamada por nome , envio múltiplo , sobrecarga de função , sobrecarga de operador , tratamento de exceções e aritmética de precisão arbitrária .
Os principais recursos incluem:
- Declarações e operadores definidos pelo usuário
- Tipos de dados abstratos
- Modelos sem sintaxe especial
- Orientado a objetos com interfaces e envio múltiplo
- Tipagem estática
- Pode ser interpretado ou compilado
- Portabilidade do código fonte
- Funciona em BSD , Linux , Mac OS X , Unix , Windows
Vários conceitos de linguagem de programação são generalizados:
- As declarações de tipo (que atribuem um nome a um tipo) e as definições de função assumem a forma de definições de constantes.
- Expressões de tempo de compilação podem executar funções definidas pelo usuário.
- Sobrecarga e orientação a objetos (com despacho múltiplo) são vistos como conceitos comuns. Eles simplesmente acontecem em momentos diferentes: tempo de compilação e tempo de execução , respectivamente.
- Nomes de tipo e descrições de tipo podem ser usados como parâmetro e resultado de função.
- Funções, que são executadas em tempo de compilação , podem ser usadas para definir objetos.
- Os modelos são escritos como funções de tempo de compilação com parâmetros de tipo.
- Arrays , mapas hash e structs não são recursos embutidos em código. Em vez disso, eles são definidos como tipo de dados abstratos em bibliotecas .
- O analisador e o interpretador fazem parte da biblioteca de tempo de execução.
- Suporte a UTF-32 Unicode. Isso evita problemas de codificações de comprimento variável, como UTF-8 e UTF-16 .
O projeto Seed7 inclui um intérprete e um compilador . O intérprete inicia os programas muito rapidamente, apoiando o desenvolvimento rápido do programa. O compilador usa o analisador e as interfaces de reflexão da biblioteca de tempo de execução para gerar um programa C , que é subsequentemente compilado em código de máquina . Os programas compilados do Seed7 podem ter desempenho comparável aos programas C.
Bibliotecas
Seed7 tem muitas bibliotecas, abrangendo áreas incluindo contêineres , funções numéricas, análise lexical , manipulação de arquivos, rede ( 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 , pixmap e vetor fontes , banco de dados API independente , Common gateway interface (CGI) de apoio, compressão de dados , ficheiros de arquivo ( tar , zip , cpio , ar , rpm ), codificação de caracteres , tratamento de hora e data, processamento XML , resumos de mensagens e muito mais. Essas bibliotecas reduzem a necessidade de usar recursos não portáveis do sistema operacional e bibliotecas de terceiros (que nem sempre podem estar presentes) diretamente. As bibliotecas do Seed7 contêm camadas de abstração para hardware , sistema operacional e bibliotecas de terceiros, por exemplo, bibliotecas gráficas e de banco de dados. Em outras palavras, nenhuma mudança é necessária para mover os programas Seed7 entre diferentes processadores ou sistemas operacionais .
Biblioteca TLS
Seed7 tem sua própria implementação de Segurança da Camada de Transporte . A biblioteca inclui AES e criptografia de curva elíptica .
API de abstração de banco de dados
Seed7 fornece uma biblioteca com uma API independente de banco de dados . Os programas podem se conectar a bancos de dados MySQL , MariaDB , SQLite , PostgreSQL , Oracle , Open Database Connectivity (ODBC), Firebird , InterBase , Db2 e SQL Server . Independentemente do banco de dados, podem ser criadas instruções preparadas, variáveis de ligação podem ser usadas, as instruções podem ser executadas e os conjuntos de resultados podem ser obtidos.
História
Seed7 é baseado em MASTER, uma linguagem de programação extensível descrita no diploma e nas teses de doutorado de Thomas Mertes. A maioria das idéias originais de MASTER, como instruções e operadores definidos pelo usuário, podem ser encontradas em Seed7. Um pré-compilador , para traduzir MASTER para Pascal, foi proposto, mas não implementado, no projeto original. Em 1989, começou o desenvolvimento de um intérprete para MASTER, denominado HAL. Em 2005, os projetos MASTER e HAL foram lançados como código aberto sob o nome de projeto Seed7. Desde então, novas versões são lançadas a cada duas ou três semanas. Na versão 2021-04-25, o projeto Seed7 contém mais de 500.000 linhas de código-fonte e várias centenas de páginas de documentação.
Mecanismo de extensão
Uma extensão inclui duas partes: uma definição de sintaxe, fornecendo um modelo para a nova forma sintática, e uma função Seed7 padrão, usada para definir a semântica.
Definição de sintaxe
A definição de sintaxe usa a Seed7 Structured Syntax Description (S7SSD). Uma declaração S7SSD como
$ syntax expr: .(). + .() is -> 7;
especifica a sintaxe do +
operador . A seta para a direita ->
descreve a associatividade : Vinculação de operandos da esquerda para a direita. Com 7
a prioridade do +
operador é definida. O padrão de sintaxe .(). + .()
é introduzido e delimitado com pontos ( .
). Sem pontos, o padrão é () + ()
. O símbolo ()
é um símbolo não terminal e +
é um símbolo terminal. O S7SSD não faz distinção entre diferentes símbolos não terminais . Em vez disso, só conhece um símbolo não-terminal: ()
.
Extensão semântica
A definição do +
operador para números complexos é apenas uma definição de função:
const func complex: (in complex: summand1) + (in complex: summand2) is func result var complex: sum is complex.value; begin sum.re := summand1.re + summand2.re; sum.im := summand1.im + summand2.im; end func;
Referências
links externos
- Site oficial - página inicial com FAQ, manual, capturas de tela, exemplos, descrições de bibliotecas, benchmarks e um conjunto de algoritmos
- Seed7 no GitHub
- Baixe Seed7 de seu repositório principal no SourceForge
- Seed7 no Rosetta Code - Contém muitos exemplos Seed7
- The Quest for the Ultimate Cycle explora a extensão 3n + C da conjectura de Collatz com programas Seed7
- Blog de Remo Laubacher : Executáveis Linux vinculados estaticamente com GCJ, Seed7 e haXe (2011)
- Blog de David Gudeman The Seed7 Programming Language (2015)
- Uma versão do FreeBSD / veja também aqui , mantida por Pietro Cerutti
- Uma porta OpenBSD , fornecida por Brian Callahan
- Um pacote Seed7 para openSUSE / Fedora , (veja também aqui ou aqui )
- Uma discussão em que Seed7 é descrito como uma linguagem em que a nova sintaxe pode realmente ser definida pelos usuários da linguagem
- Seed7 em "Fossies" - o arquivo de software de código aberto fresco