Euforia (linguagem de programação)

ImprimirCitar

Euphoria é uma linguagem de programação criada por Robert Craig da Rapid Deployment Software em Toronto, Ontário, Canadá. Inicialmente desenvolvido (embora não lançado publicamente) no Atari ST, o primeiro lançamento comercial foi para o MS-DOS como software proprietário. Em 2006, com o lançamento da versão 3, o Euphoria tornou-se um software de código aberto. O grupo openEuphoria continua a administrar e desenvolver o projeto. Em dezembro de 2010, o openEuphoria Group lançou a versão 4 do openEuphoria junto com uma nova identidade e mascote para o projeto. O OpenEuphoria está atualmente disponível para Windows, Linux, macOS e três tipos de *BSD.

Euphoria é uma linguagem interpretada imperativa-procedimental de alto nível e propósito geral. Um tradutor gera o código-fonte C e a coleção de compiladores GNU (GCC) e os compiladores Open Watcom são suportados. Como alternativa, os programas Euphoria podem ser vinculados ao interpretador para criar executáveis autônomos. Várias bibliotecas de interface gráfica do usuário (GUI) são suportadas, incluindo Win32lib e wrappers para wxWidgets, GTK+ e IUP. O Euphoria possui um banco de dados integrado simples e wrappers para uma variedade de outros bancos de dados.

Visão geral

A linguagem Euphoria é uma linguagem processual de propósito geral que se concentra na simplicidade, legibilidade, desenvolvimento rápido e desempenho através de vários meios.

  • Simplicidade – Ele usa apenas quatro tipos de dados incorporados (veja abaixo) e implementa coleta automática de lixo.
  • Legião – A sintaxe favorece palavras-chave em inglês simples sobre o uso de pontuação para delinear construções.
  • Desenvolvimento rápido – Um intérprete incentiva o prototipagem e o desenvolvimento incremental.
  • Desempenho – Um coletor de lixo de contagem de referência eficiente lida corretamente com referências cíclicas.

História

Desenvolvida como um projeto pessoal para inventar uma linguagem de programação do zero, Euphoria foi criada por Robert Craig em um Atari Mega-ST. Muitas ideias de design para a linguagem vieram da tese de mestrado de Craig em ciência da computação na Universidade de Toronto. A tese de Craig foi fortemente influenciada pelo trabalho de John Backus em linguagens de programação funcional (PF).

Craig portou sua implementação original do Atari para a plataforma DOS de 16 bits e o Euphoria foi lançado pela primeira vez, versão 1.0, em julho de 1993 sob uma licença proprietária. A implementação original do Atari é descrita por Craig como "primitiva" e não foi divulgado publicamente. Euphoria continuou a ser desenvolvido e lançado por Craig por meio de sua empresa Rapid Deployment Software (RDS) e do site rapideuphoria.com. Em outubro de 2006, a RDS lançou a versão 3 do Euphoria e anunciou que doravante o Euphoria seria distribuído gratuitamente sob uma licença de software de código aberto.

A RDS continuou a desenvolver o Euphoria, culminando com o lançamento da versão 3.1.1 em agosto de 2007. Posteriormente, a RDS interrompeu o desenvolvimento unilateral do Euphoria e o grupo openEuphoria assumiu o desenvolvimento contínuo. O grupo openEuphoria lançou a versão 4 em dezembro de 2010 junto com um novo logotipo e mascote para o projeto openEuphoria.

A versão 3.1.1 continua sendo um marco importante, sendo a última versão do Euphoria que suporta a plataforma DOS.

Euphoria é um acrônimo para Programação de Usuário Final com Objetos Hierárquicos para Aplicações Interpretadas Robustas embora haja alguma suspeita de que este seja um backronym.

O interpretador Euphoria foi originalmente escrito em C. Com o lançamento da versão 2.5 em novembro de 2004, o interpretador Euphoria foi dividido em duas partes: um analisador front-end e um interpretador back-end. O front-end agora é escrito em Euphoria (e usado com o tradutor Euphoria-to-C e o Binder). O back-end principal e a biblioteca de tempo de execução são escritos em C.

Recursos

Euphoria foi concebido e desenvolvido com os seguintes objetivos e características de design:

  • Facilidade de aprendizagem e com construções de alto nível consistentes (mais do que, por exemplo, a linguagem BASIC)
  • Implementação de memória de 32 bits de forma plana para evitar o gerenciamento de memória complexo e limites de endereçamento de tamanho
  • Depuração de suporte e manipulação de erros em tempo de execução
  • Verificação de subscrição e tipo
  • Loose e digitação variável estrita
  • Programação através de objetos como tipos (definidos pelo usuário ou de outra forma)
  • Interpretado, com gerenciamento automático de memória e coleta de lixo
  • Tipos de coleção heterogênea (sequências)
  • Biblioteca de gráficos do DOS (versão de linguagem da euforia até e incluindo 3.1.1)
  • Depurador
  • Sistema integrado de base de dados
  • Manuseio de memória de baixo nível
  • Envoltório direto de (ou acesso a) bibliotecas C

Modos de execução

  • Interpreter
  • Tradutor C (E2C) para executáveis autônomos ou ligação dinâmica
  • Compilador e intérprete de Bytecode (shrouder)
  • O Binder liga o código fonte Euphoria ao intérprete para criar um executável.
  • Uma versão read-eval-print loop (REPL) está no roteiro openEuphoria.

Usar

O Euphoria foi projetado para facilitar o manuseio de conjuntos dinâmicos de dados de vários tipos e é particularmente útil para processamento de strings e imagens. Euphoria tem sido usado em experimentos de inteligência artificial, no estudo da matemática, no ensino de programação e na implementação de fontes envolvendo milhares de caracteres. Uma grande parte do intérprete de Euphoria é escrita em Euphoria.

Tipos de dados

Euphoria tem dois tipos básicos de dados:

Atom – Um número, implementado como um inteiro assinado de 31 bits ou um ponto flutuante IEEE de 64 bits. Euphoria muda dinamicamente entre inteiro e representação ponto flutuante de acordo com o valor atual.
Sequência – Um vetor (array) com zero ou mais elementos. Cada elemento pode ser um átomo ou outro sequência. O número de elementos em uma sequência não é fixo (ou seja, o tamanho do vetor / raio não tem que ser declarado). O programa pode adicionar ou remover elementos conforme necessário durante o tempo de execução. A alocação de memória é tratada automaticamente pela contagem de referência. Os elementos individuais são referenciados usando um valor de índice fechado em suportes quadrados. O primeiro elemento em uma sequência tem um índice de um [1]. Elementos dentro de sequências incorporadas são referenciados por valores adicionais de índice bracked, assim X[3][2] refere-se ao segundo elemento contido na sequência que é o terceiro elemento de X. Cada elemento de uma sequência é um objeto tipo (veja abaixo).

Euphoria tem dois tipos de dados adicionais predefinidos:

Integer – Um átomo, restrito a valores inteiros assinados em 31 bits no intervalo - Sim.073741824 para 1073741823 (- Sim. - Sim. 230{displaystyle -2^{30}} para 230- Sim. - Sim. 1- Sim.). Integer os tipos de dados são mais eficientes do que os átomo tipos de dados, mas não pode conter a mesma gama de valores. Os caracteres são armazenados como inteiros, por exemplo, codificação ASCII-'A' é exatamente o mesmo que codificação 65.
Objeto – Um tipo de dados genérico que pode conter qualquer um dos acima (i.e., átomo, sequência ou Intérprete) e que podem ser alterados para outro tipo durante o tempo de execução.

Não há nenhum tipo de dados de cadeia de caracteres. Strings são representadas por uma sequência de valores inteiros. No entanto, como as strings literais são tão comumente usadas na programação, o Euphoria interpreta os caracteres entre aspas duplas como uma sequência de números inteiros. Por isso

"ABC"

é visto como se o codificador tivesse escrito:

'A', 'B', 'C'

que é o mesmo que:

(65, 66, 67)

Olá, mundo!

puts(1, "Hello, World!n")

Exemplos

Os comentários do programa começam com um hífen duplo -- e vão até o final da linha.

O código a seguir procura um item antigo em um grupo de itens. Se encontrado, ele o remove concatenando todos os elementos antes dele com todos os elementos depois dele. Observe que o primeiro elemento em uma sequência tem o índice um [1] e que $ refere-se ao comprimento (ou seja, número total de elementos) da sequência.

função global delete_item(objeto velho, sequência grupo)
 Intérprete Sim.
 - O código começa...- Sim. encontrar(velho, grupo)
 se) 0 entãogrupo = grupo[1.. pos-1] & group[pos+1.. $)
 terminar se
retorno grupo
função final

A seguinte modificação no exemplo acima substitui um item antigo por um novo. Como as variáveis old e new foram definidas como objetos, elas podem ser átomos ou sequências. A verificação de tipo não é necessária, pois a função funcionará com qualquer sequência de dados de qualquer tipo e não precisa de bibliotecas externas.

função global substitui_item(objeto velho, objeto novo, sequência grupo)
 Intérprete Sim.
 - O código começa...- Sim. encontrar(velho, grupo)
 se) 0 entãogrupo[pos] = novo
 terminar se
retorno grupo
função final

Além disso, nenhum ponteiro está envolvido e os subscritos são verificados automaticamente. Assim, a função não pode acessar a memória fora dos limites. Não há necessidade de alocar ou desalocar memória explicitamente e nenhuma chance de vazamento de memória.

A linha

grupo = grupo[1.. pos-1] & group[pos+1.. $)

mostra algumas das facilidades de manipulação de sequências. Uma sequência pode conter um conjunto de qualquer tipo, e isso pode ser fatiado (para obter um subconjunto dos dados em uma sequência) e concatenado em expressões sem necessidade de especial funções.

Passagem de parâmetro

Argumentos para rotinas são sempre passados por valor; não há facilidade de passagem por referência. No entanto, os parâmetros podem ser modificados localmente (ou seja, dentro do chamado), o que é implementado de maneira muito eficiente, pois as sequências têm semântica automática de cópia na gravação. Ou seja, quando você passa uma sequência para uma rotina, inicialmente apenas uma referência a ela é passada, mas no momento em que a rotina modifica esse parâmetro de sequência a sequência é copiada e a rotina atualiza apenas uma cópia do original.

Idiomas comparáveis

  • Lua
  • Phix
  • Python
  • REBOL
  • Nim
  • Ruby!

Contenido relacionado

Classe (programação de computador)

Na programação orientada a objetos, uma classe é um modelo de código de programa extensível para criar objetos, fornecendo valores iniciais para estado e...

KL-ONE

KL-ONE é um sistema de representação de conhecimento na tradição de redes e quadros semânticos; ou seja, é uma linguagem de quadro. O sistema é uma...

Tipo de dados abstrato

Na ciência da computação, um tipo de dado abstrato é um modelo matemático para tipos de dados. Um tipo de dado abstrato é definido pelo seu...
Más resultados...
Tamaño del texto:
Copiar