Por quê uma nova linguagem de programação?
Porque Seed7 tem várias características que não são encontradas em
outras linguagens de programação:
·
É possível declarar
novas instruções (sintática e semântica) da mesma maneira como as funções são
declaradas.
Há também os operadores definidos pelo usuário com prioridade e
associatividade.
·
'Construtores de
declaração' para constante, variável, função, parâmetro, e outras declarações
estão descritos em Seed7.
O usuário pode alterar as construções existentes de declarações ou
inventar novas.
·
Templates não usam sintaxe
especial.
Estes são apenas funções com parâmetros type
ou um resultado type.
·
Seed7 tem 'dados do
tipo abstrato'.
Por exemplo, os tipos array, hash, struct e set.
Estes não são codificados no compilador.
São 'tipos de dados abstratos' escritos em Seed7.
'Dados do tipo abstrato definidos pelo usuário' também são possíveis.
·
A 'orientação a
objetos' de Seed7 permite 'multiple dispatch'.
Isso significa que a identificação de uma função não é dada apenas pelo
seu nome.
·
Seed7 é uma
linguagem sintaticamente e semanticamente extensível: Quase toda a linguagem
Seed7 (instruções, operadores, construtores de declaração, e muito mais) é
definido em Seed7 em um arquivo do tipo include (seed7_05.s7i).
·
No início do
aplicativo existe uma instrução de inclusão para um interpretador da linguagem.
Tornando possível definir, linguagens variadas ou totalmente diferentes.
O que é uma linguagem de programação extensível?
A maioria das linguagens de programação, extensíveis ou não, suportam:
variáveis definidas pelo usuário,
funções e tipos.
Metalinguagem
Consiste em uma linguagem para descrever outras linguagens.
Linguagens não extensíveis
A grande diferença está nos 'construtores de declaração' que nestas
linguagens estão embutidos no compilador (ou interpretador).
É desencorajado qualquer tipo de modificação nos 'construtores de
declaração'.
E não há nenhuma documentação de como manipular os 'construtores de
declaração'.
Linguagens extensíveis
Permite ao programador definir e construir uma nova linguagem.
Os construtores de declaração, normalmente não estão embutidos no
compilador (ou interpretador).
Existe documentação dando suporte e encorajando a manipulação dos contrutores de declaração.
Seed7 distingue extensões sintáticas e semânticas.
Extensões sintáticas são descritas no Capítulo 9 (definição de
estruturas sintáticas) do manual.
As extensões semânticas de Seed7 são feitas declarando instruções e
operadores como funções.
To do this statically
typed "call-by-name"
parameters are used.
História
A pesquisa na área de 'programação extensível' teve seu auge na década
de 1960, mas na década de 1970 este movimento foi substituído pelo movimento de
abstração.
Quando contam sobre a 'história do software' hoje em dia, quase não há
indícios de que o movimento de 'linguagens extensíveis' ocorreu.
Este período histórico da 'linguagem de programação extensível',
resumiu-se em uma 'linguagem de base' fornecendo o fundamental em recursos de
computação e uma meta-linguagem capaz de modificar a
'linguagem base'.
Um programa consistia então de uma meta-linguagem
e um código derivado desta.
Um uso popular de 'linguagem extensível' são as macro.
A concepção e desenvolvimento de Seed7 é baseado em pesquisa
independente que foi feita sem saber que o 'movimento das linguagens extensíveis' existiu.
Os programas em Seed7 são portáteis?
Sim. Seed7 não mede esforços para apoiar a programação portátil.
Várias bibliotecas de driver garantem acesso
aos recursos do sistema operacional, como: arquivos, diretórios, rede, relógio,
teclado, console e gráficos são feitas de uma forma portátil.
Muitas funções são definidas para evitar a necessidade de usar os
comandos do shell (cmd.exe).
·
Diferentes codificações
Unicode (por exemplo, UTF-8 ou UTF-16) nas chamadas do sistema (por exemplo, fopen() e wopen()) são ímplicitas ao programador.
·
Funções portáteis
para manipulação de arquivo:
Copiar, mover e remover arquivos (e árvores de diretório).
Propriedades como tamanho, tipo e modo podem ser obtidas e alteradas.
Lê o contéudo de um diretório como array de string ou através da interface do arquivo.
Um padrão na representação de caminho elimina todos os problemas com
letras de unidade e diferentes delimitadores de caminho.
·
Diferenças entre sockets Unix e sockets Windows (winsockets) são gerenciadas pela linguagem Seed7 e nela um socket é um arquivo, assim como no Unix.
·
A biblioteca keybd.s7i dá suporte ao teclado, lendo simples
pressionamentos de teclas.
Os caracteres lidos do teclado não são ecoados para o console e não há
necessidade de pressionar ENTER.
Existe também uma forma portátil para verificar se uma tecla foi
pressionada.
·
A leitura de combinações
de teclas como CTRL+F1, tanto no console ou janela gráfica em diferentes
sistemas operacionais retornam o mesmo código de caracter.
·
Independente do
sistema operacional a data e hora tem base no calendário gregoriano proléptico, suporte fornecido pela biblioteca time.s7i.
·
O console de texto
permite o posicionamento do cursor.
·
A biblioteca gráfica
portátil permite desenhar, operações com imagens, manipulação de janelas,
fontes do tipo bitmap, eventos para redesenhar a janela entre outras coisas são
fornecidas por esta.
·
Deficiências dos
sistemas operacionais ficam ocultas. Por exemplo, a função utime()
do Windows não funciona em diretórios, mas Seed7 permite modificar o horário de
acesso do diretório no Windows também.
Qual é a licença de uso de Seed7?
O interpretador s7 e programas de exemplo (extensão .sd7) estão sob a
GPL (General Public License,
consulte também o arquivo COPYNG).
A biblioteca runtime está sob a LGPL (Lesser General Public License, consulte também o arquivo LGPL).
Arquivos com extensão .s7i são parte da biblioteca Seed7 Runtime.
Seed7 permite a interpretação e compilação de seus programas sob
qualquer licença.
Não existe nenhuma restrição sobre qual licença seus programas Seed7
podem utilizar.
For the development
of the Seed7 compiler it will be necessary to move some source code from the
s7 Interpreter (under GPL)
to the Seed7 Runtime Library (under LGPL). This will only
be done to for the Seed7 runtime library and only
as far as necessary to make no restriction on the license
of compiled Seed7 programs.
Se você me enviar remendos (patches)
ficarei grato.
It is assumed that you accept license
changes from GPL to LGPL
for parts of code which need
to be in the runtime library to support compilation of Seed7 programs.
Seed7 é descendente da linguagem Pascal?
Não.
As palavras-chaves, instruções e declarações lembram Pascal, porém
existem muitas diferenças.
Diz o ditado: Não julgue o livro pela capa.
Seed7 não tem as características limitadas de Pascal.
As principais diferenças são:
Característica |
Padrão Pascal |
Seed7 |
Sintaxe |
codificada no compilador |
definida na biblioteca |
Instruções |
codificadas no compilador |
definidas na biblioteca |
Operadores |
codificados no compilador |
definidos na biblioteca |
Array |
codificado no compilador |
dado abstrato do tipo array |
Record / Struct |
codificado no compilador |
dado abstrato |
Hash Table |
não faz parte do padrão da linguagem |
dado abstrato do tipo hash |
Compiler target |
código de máquina ou p-code |
C, compilado para código de máquina depois |
Template |
sem suporte |
função com 'type parameters' |
Abstract Data Type |
sem suporte |
função com 'type result' |
Orientação a objeto |
sem suporte |
interface e 'multiple dispatch' |
Todas tecnologias padrão Pascal podem ser implementadas com Seed7, com
exceção do 'analisador sintático LL(1)'.
Que tipo de programas podem ser escritos em Seed7?
Seed7 é uma linguagem de propósito geral e os programas podem ser
compilados para um executável.
Seed7 pode ser utilizada em diversas áreas de aplicação:
·
Aplicações similares
ao Excel.
·
Scripts para
manipular arquivos e diretórios. A página inicial do site Seed7 e os lançamentos
de versões são criados com scripts Seed7.
·
Ferramentas para
rede. Existe suporte para sockets, HTTP, FTP e análise
(parse) de HTML.
·
Programas para
manipular XML. Existe suporte para análise (parse) de XML e leitura de
XML na estrutura de dados DOM.
·
Scripts CGI. Seed7
possui uma biblioteca para dar suporte a CGI e um 'web server'
chamado Comanche pode ser usado para testar scripts CGI.
·
Linguagem para
demonstrar algoritmos.
·
Utilitários de linha
de comando, como:
- Um make (gerenciador de compilação)
capaz de processar arquivos Unix e Windows.
- Um compactador de arquivos para o formato .tar
- Um programa para salvar uma partição de disco rígido potencialmente
danificada para um arquivo de imagem.
·
Jogos 2D, como:
- Panic
- Mahjong solitaire
- Pairs
·
Simuladores, como:
- Um planeta contendo apenas peixes e tubarões.
- Bactérias que lutam entre si.
- Autômatos celulares, com dois estados possíveis por célula.
·
Funções para
explorar a matemática, como:
- Conjunto de Mandelbrot
- Diagrama de Bifurcação
Quantas linhas de código, possui o projeto Seed7?
O pacote Seed7 contém mais de 100.000 linhas de código C e mais de
190.000 linhas de código Seed7.
Na versão datada de 17/02/2013 o número de linhas são:
104.320 Código fonte em C (*.c)
10.290 Arquivos
de cabeçalhos em C (*.h)
111.860 Código fonte em Seed7 (*.sd7)
82.112 Biblioteca
Seed7 / Arquivos de inclusão (*.s7i)
Códigos em C (arquivos *.c e *.h) podem ser divididos da seguinte
forma:
0.3% Interpretador principal
11.6% Análise de texto (parser)
2.8% Coração do interpretador
24.7% Funções de ação primitiva
7.4% Funções comuns de auxílio
48.5% Biblioteca tempo-de-execução
(runtime)
4.7% Dados da biblioteca do compilador
Detalhes sobre esses arquivos podem ser encontrados em 'seed7/src/read_me.txt'.
Em quais sistemas operacionais o Seed7 roda?
Seed7 roda nos seguintes sistemas operacionais:
·
Linux é suportado
'fora da caixa', ou seja, diretamente sem necessidade de configuração ou
modificação. Justamente porque o mesmo foi desenvolvido em Linux.
·
Unix (Seed7 foi
usado sob diversas variações de Unix então é muito provável que Seed7 seja
facilmente portado para qualquer variante de Unix.
·
BSD
·
É compatível com o
Windows e diversos compiladores escritos para ele:
o MinGW GCC (o arquivo binário do Seed7 lançado para Windows utilizou MinGW)
o Cygwin GCC (o X11 gráfico requer o Cygwin/X)
o Microsoft Visual C - cl.exe (cl.exe é um compilador
independente do Microsoft Visual C)
o Borland Developer Studio -
bcc32.exe (bcc32.exe é um compilador independente do Borland Developer Studio)
o DJGPP (é um compilador de 32-bits para DOS, sockets e gráficos não são suportadas)
o Mac OS X
Para outros sistemas operacionais talvez seja necessário escrever 'módulos
controladores de tela', ou seja, um console de texto, gráficos, tempo e demais
aspectos de Seed7.
O pacote contém módulos antigos desatualizados, porém podem ser usados
como base para escrever tais módulos.
Para mais detalhes e informações leia os arquivos 'seed7/read_me.txt' and 'seed7/src/read_me.txt'.
Como faço para descompactar o arquivo *.tgz de lançamento?
Windows
No windows você pode usar o compactador 7-Zip.
É apenas um utilitário para compactar e descompactar arquivos e não possue relação com Seed7
7-Zip é open-source, disponível em:
www.7-zip.org.
Linux/Unix
Se você usa o programa 'gnu tar', faça isto:
$ tar -xvzf seed7_05_yyyymmdd.tgz
Se o programa 'tar' não aceitar a opção 'z',
então você precisa descompacatar com o arquivo 'gunzip' primeiro.
$ gunzip seed7_05_yyyymmdd.tgz
$ tar -xvf seed7_05_yyyymmdd.tar
Às vezes, o formato será *.gz, ao invéns de *.tgz.
Nesse caso, use o 'gunzip', como mostrado
acima.
Como alternativa, podemos usar o 'zcat':
$ zcat seed7_05_yyyymmdd.gz > seed7.tar
$ tar -xvf seed7.tar
Como faço para compilar o interpretador Seed7?
A forma de compilar o interpretador depende do sistema operacional e
ferramentas utilizadas.
Precisamos de um compilador stand-alone
e um utilitário make para compilar o
interpretador.
Um compilador C dependente de uma IDE não será útil, pois o compilador
Seed7 (s7c) precisa chamar o compilador C também.
Não só ele, mas outros programas também.
Para compilar o interpretador no
Linux vá para o diretório src e digite:
make depend
make
Para os demais casos, várias combinações entre sistemas operacionais e
utilitários make, possuem um arquivo do tipo make compatível:
Nome do arquivo makefile |
Sistema Operacional |
Executável |
|
|
|
|
|
|
|
Nenhum comentário:
Postar um comentário