sexta-feira, 13 de dezembro de 2013

18.03 Perguntas frequentes

 

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