Seed7 - Seed7

Seed7
Paradigma multiparadigma : extensível , orientado a objetos , imperativo , estruturado , genérico , reflexivo
Projetado por Thomas Mertes
Apareceu pela primeira vez 2005 ; 16 anos atrás ( 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 .sourceforge .net
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:

Vários conceitos de linguagem de programação são generalizados:

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 7a 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