ebooksgratis.com

See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Euphoria (linguagem de programação) - Wikipédia, a enciclopédia livre

Euphoria (linguagem de programação)

Origem: Wikipédia, a enciclopédia livre.

Nota: Para outros significados de Euphoria, ver Euphoria.
Euphoria
Clique aqui para ver o logotipo de Euphoria.
Demonstração da função Multitasking.
Demonstração da função Multitasking.
Paradigma: Abstração de dados,
Orientação a objetos,
Programação estruturada
Surgido em: Julho de 1993
Última versão: 3.1.1 (22 de Agosto de 2007)
Criado por: Robert Craig
Estilo de tipagem: Dinâmica, Fraca
Compiladores:
Dialetos:
Influenciada por: BASIC, C, C++
Influenciou: Py
Licença: Domínio público
Website: RapidEuphoria.com

Euphoria é uma linguagem de programação interpretada de alto nível, abstrata, orientada a objetos e estruturada, e motor de jogo, simultaneamente, criada por Robert Craig, da Rapid Deployment Software[1], em Julho de 1993. O Euphoria está sob domínio público e tem seu código aberto. A linguagem possui suporte a programação multitarefa, que possibilita a execução de várias tarefas simultaneamente, com uma velocidade razoável, e que pode ser útil na criação de jogos que precisem executar múltiplas tarefas.

O Euphoria pode ser usado como aplicação CGI[2]. O File Archive Search[3] é uma aplicação CGI e é escrito em Euphoria, por exemplo. Ele também pode ser usado como linguagem embutível, assim como Python.

Também pode ser usado como RAD, programando-se rapidamente em Euphoria, e depois traduzindo o código para C, usando o tradutor automático.

Índice

[editar] História

Interpretador do Euphoria 3.1.1, sendo executado no Windows.
Interpretador do Euphoria 3.1.1, sendo executado no Windows.

O Euphoria teve sua primeira versão publicada em Julho de 1993, como sendo um projeto de código fechado. Porém, a partir da versão 3.0.0, lançada em 19 de Setembro de 2006, passou a ser totalmente código aberto (algumas partes do pacote já estavam em domínio público, desde a versão 2.5 Alpha). Sua última versão[4] foi a 3.1.1, e foi lançada em 22 de Agosto de 2007.

Desenvolvida inicialmente como um projeto pessoal, para inventar uma linguagem de programação do zero, Euphoria teve sua real primeira versão criada por Robert Craig, para um Atari ST. A versão original para Atari ST, nunca foi lançada. A primeira “encarnação” mundialmente visível da linguagem, foi para o sistema DOS de 32 bit. Versões atuais, além do DOS de 32 bit, suportam Microsoft Windows, Linux e FreeBSD. Com o lançamento da versão 2.5 Alpha, lançada em 15 de Novembro de 2004, o interpretador do Euphoria, foi dividido em três partes: o analisador sintático, o front-end, e o back-end. O tradutor “Euphoria-para-C”, o encadernador (binder), e o front-end, possuem 100% de seus códigos em Euphoria, e o back-end possui 100% de seu código em C. O interpretador possui 30% de seu código (front-end) em Euphoria e 70% (back-end) em C.

O Euphoria, foi primeiramente usada como passatempo para programação de jogos e para criação de inteligência artificial, mas provou ser útil para os mais diversos propósitos[5]. Já existem programas criados usando Euphoria, e programas que usam Euphoria, como script para seu programa. Um bom exemplo, é o SDK do 3DSTATE 3D Engine, o 3D Developer Studio[6].

[editar] Características

O Euphoria foi desenvolvido com as seguintes características em mente:

  • Simplicidade - Para fácil aprendizado e uso, igualmente ao BASIC, com construções de alto nível, mais consistentes;
  • Poder - Para fornecer capacidades de programação de baixo nível necessárias para acessar o sistema operacional e a BIOS para desenvolvimento profissional, como C++, porém mais estruturada e mais abstrata que uma linguagem de baixo nível, fazendo a mesma menos perigosa;
  • Segurança - Extensivo suporte a depuração, checagem de subscrição, checagem de tipo, e gerência de memória automáticos;
  • Flexibilidade - Suporte para tipos definidos pelo usuário, com variáveis livres ou rigorosas, de acordo com o desejado. Orientação a objetos pode ser efetuada usando objects como tipo de dado;
  • Automatismo - Interpretado, com gerência de memória e coletor de lixo automáticos;
  • Velocidade - Para ser veloz o bastante para rivalizar à altura com as linguagens compiladas, para ser útil e proveitosa, apesar de ser interpretada. A Rapid Deployment Software garante que o interpretador do Euphoria é 31 vezes mais rápido[7] do que Python, e 35 vezes mais rápido do que Perl.

O Euphoria suporta chamadas de rotinas de código de máquina e de funções de C.

O Euphoria não requer indentação (diferente de Python) e nem requer ponto-e-vírgula (;) (diferente de C++) no final de cada comando. Ele pode conter mais de um comando em uma mesma linha. Ele também ignora os espaços entre comandos:

object    r    r    =     1

O exemplo acima é o mesmo que:

object r
r = 1

[editar] Etimologia

O nome “Euphoria”, é um acrônimo para: End User Programming with Hierarchical Objects for Robust Interpreted Applications” (em português: “Programação para Usuário Final com Objetos Hierárquicos para Aplicações Interpretadas Robustas”). Seu nome se pronuncia “Eufór-ia”.

[editar] Tipos de arquivo

Os arquivos de código de Euphoria são divididos em sete tipos de arquivo e, usam as seguintes extensões:

  • .E (Biblioteca DOS);
  • .EU (Biblioteca Linux/FreeBSD);
  • .EW (Biblioteca Windows);
  • .EX (Programa DOS);
  • .EXU (Programa Linux/FreeBSD);
  • .EXW (Programa Windows);
  • .IL (Programa coberto, multiplataforma).

[editar] Tipos de dado

O Euphoria tem um tipo de dado básico[8]:

  • object: Um tipo de dado genérico que pode conter qualquer tipo de elemento, e pode ser mudado durante a execução. Isso significa que se o programador tem um object chamado X que possui o valor 3.172, então depois o programador pode atribuir para X o valor "ABC". Um object pode ser classificado como um atom, integer ou sequence.

Adicionalmente, Euphoria tem três tipos de dado “especializados”:

  • atom: Esses são números, implementados como inteiro ou fracionário de 32 bit ou 64 bit, dependendo do valor atual. Ele armazena os valores inteiros em 4 bytes. Quando um atom inteiro recebe um valor fracionário, ele o converte e armazena o mesmo para fracionário de 8 bytes;
  • integer: Uma forma especial de atom, restrita a valores inteiros de 31 bit, numa faixa de -1073741824 até 1073741823. Esse tipo de dado é mais eficientes do que o atom, mas não pode conter a mesma extensão. Caracteres são armazenados como inteiros (exemplo: codificando A de ASCII é exatamente o mesmo que 65);
  • sequence: Vetor que pode conter zero ou mais elementos; cada elemento é um object. O número de elementos na sequence não é fixa; o codificador pode adicionar ou remover elementos quando requirido durante a execução. Euphoria automaticamente “manobra” a alocação e a desalocação de RAM, e automaticamente coleta lixo para o programador. Elementos individuais são referenciados usando um valor no índice fechado em colchetes. O primeiro elemento numa sequence tem um índice de 1. Elementos embutidos dentro de sequences são referenciados pelo colchete adicional, desde modo, X[3][2], refere-se ao segundo elemento do terceiro elemento de X. Exemplo: Se X = {"ABC","DEF","GHI"}, então X[3][2] = "H".

Um exemplo de uma sequence:

object r
r = {"A","B","C","D","E","F","G"}

O exemplo acima é o mesmo que:

object r
r = {65,66,67,68,69,70,71}

Como isso pode ser complicado, sequences podem ser usados de forma mais simplificada:

object r
r = "ABCDEFG"

Os números podem ser colocados em hexadecimal:

object r,s,v,w,k
r = #152       -- r é igual a "R"
s = #FE        -- s é igual a 254
v = #A000      -- v é igual a 40960
w = #FFFF00008 -- w é igual a 68718428168
k = -#10       -- k é igual a -16

[editar] Caso-sensibilidade

Euphoria é caso-sensitivo, isto é, faz diferenciação de maiúsculas e de minúsculas. Exemplo: A é diferente de a, já que em ASCII, A equivale a 65 e, a equivale a 97. Outro exemplo:

object r
r = "abcABC"

É o mesmo que:

object r
r = {97,98,99,65,66,67}

Que, por sua vez, é o mesmo que:

object r
r = {"a","b","c","A","B","C"}

Essa regra se aplica a tudo em Euphoria, inclusive aos nomes de variáveis e os comandos:

OBJECT A
A = "ABC" -- Forma incorreta
PUTS(1,A)
 
object B
B = "ABC" -- Forma correta
puts(1,B)
 
object b
b = "ABC" -- Forma correta
puts(1,b)

A primeira declaração, no exemplo acima, está incorreta, pois todos os comandos de Euphoria devem estar em minúsculas.

[editar] Multitarefa

Jogo “Language War”, feito em Euphoria.
Jogo “Language War”, feito em Euphoria.

A linguagem possui suporte a programação multitarefa (do inglês: Multitasking), que possibilita a execução de várias tarefas simultaneamente[9], com uma velocidade razoável, que pode ser útil na criação de jogos que precisem executar múltiplas tarefas.

Junto dos exemplos do pacote padrão, existe um jogo chamado “Language War” (Guerra da linguagem), que demonstra o uso desta função. O jogo apresenta uma guerra entre times com nomes de linguagens famosas: EUPHORIA, Assembly, K&R C, ANSI C, C++, BASIC, Java, onde o jogador controla o time EUPHORIA, e o computador controla os demais times. Esse exemplo é baseado num jogo de guerra espacial, desenvolvido em 1979, para o TRS-80, por David A. Craig e Robert Craig. Funciona apenas no DOS e no Windows, em resolução de tela de 640x480 e em 16 cores.

Há também outro exemplo, que exibe vários “E”s girando independente e simultaneamente. Esse mesmo só pode ser executado no ambiente Windows, por estar em uma janela.

[editar] Gerência de memória automática

No Euphoria, a alocação de memória acontece automaticamente, e os tipos de dado são convertidos dinamicamente, não fazendo necessária a conversão, isto é, o tipo de dado é convertido assim que necessário e automaticamente. Exemplo: se há uma variável com um valor inteiro, e a essa variável for atribuído um valor fracionário, essa variável será automaticamente convertida para suportar o valor fracionário, diferentemente de C/C++.

[editar] Declarações e variáveis

Variáveis são palavras que recebem um determinado valor. Para se usar variáveis, é necessário que sejam declaradas primeiro. Para se declarar uma variável, se coloca o tipo de dado, seguido do nome da variável:

object a   -- Declara a como object
atom b     -- Declara b como atom
integer c  -- Declara c como integer
sequence d -- Declara d como sequence

[editar] Constantes

Além da variável comum, existem as variáveis constantes, que não recebem valores depois de terem recebido um valor inicial atribuído à mesma.

constant a = 1 -- Declara a como constant de valor 1

As constantes também devem ter um valor atribuído durante sua declaração, diferente das variáveis comuns. O tipo de dado de uma constante é object.

[editar] Global / Local

De todas as funções, processos e variáveis, existem dois tipos: as globais e as locais. As globais são acessíveis de todos os arquivos; as locais, só são acessíveis do arquivo de onde foram declaradas. Um arquivo só pode acessar uma função em uma biblioteca inclusa, porque ela é global. Se ele fosse local, a mesma não poderia ser usada, exceto pelas funções de dentro da biblioteca. Quando uma função/processo/variável é declarada como local/global, assim ela será até o fim da execução do programa. Exemplo:

global constant r = 1     -- Declara r como constant global de valor 1
global object s           -- Declara s como object global
integer v                 -- Declara v como integer local
function w() end function -- Declara w como função local
global procedure k() end procedure -- Declara k como processo global

Por padrão, todas as funções, processos e variáveis, são locais.

[editar] Operadores

Ver artigo principal: Operadores de Euphoria

Operadores são símbolos especiais, que servem para fazer ações matemáticas, ou comparações lógicas, dentro de estruturas de controle.

[editar] Caracteres especiais

O Euphoria, como em outras linguagens de programação, possui caracteres especiais, que servem como uma forma de formatação de texto básica. Eles são:

Caractere Descrição
\n Nova linha
\r Oculta o caracter à esquerda
\t Tabulação
\\ Permite passar barra (\) como um sequence
\' Permite passar aspas simples (') como um sequence
\" Permite passar aspas duplas (") como um sequence
-- Comentários não-multi-linha (não se propagam para outras linhas)[10], que são ignorados pelo Euphoria.

[editar] Estruturas de controle

Estruturas de controle são comandos básicos que são usados para realizar comparações lógicas e repetições. Há três estruturas de controle em Euphoria: if, while, for.

[editar] Declarações Top-Level

Declarações Top-Level são comandos que afetam o código por inteiro. Esses comandos sempre são colocados no início do código. Não é obrigatório o uso de qualquer opção.

[editar] include

O Euphoria possui bibliotecas, como qualquer outra linguagem; para acessá-la, basta usar a estrutura include[11]. Para usá-la, basta seguir o modelo:

include biblioteca.extensão

Exemplo:

include machine.e -- Inclui a biblioteca machine.e

Para incluir uma biblioteca com êxito, deve-se incluir sua extensão (normalmente .e). Também deve-se incluí-las uma de cada vez, e o nome da biblioteca não pode conter espaços em branco.

Esta estrutura também serve para permitir que o programador divida seu código em mútiplas partes, para que o código fique mais organizado. Nisso, apenas as variáveis e funções globais serão inclusas.

Caso duas ou mais bibliotecas tenham uma função com o mesmo nome, deve-se usar um namespace identifier, para resolver o conflito. Os namespace identifiers são representados por as. Exemplo:

include biblioteca1.e as b1 -- Aplica o indentificador b1 à biblioteca
include biblioteca2.e as b2 -- Aplica o indentificador b2 à biblioteca

Os identificadores só são aplicados durante a inclusão de uma biblioteca. Para acessar uma função ou variável dessas bibliotecas, usa-se o identificador seguido de dois pontos (:) e o nome da função ou variável. Exemplo:

b1:r = 1 -- Atribui a r (de b1) o valor 1
b2:r = 2 -- Atribui a r (de b2) o valor 2

[editar] with / without

O Euphoria também possui opções[12], para personalizar a forma como o código será iniciado. Para ativar uma opção, coloca-se with, seguida da opção e, para desativar uma opção, coloca-se without, seguida da opção. Exemplo:

with profile -- Ativa profile
without profile -- Desativa profile
without warning -- Desativa warning

Ao todo, são cinco opções: profile, profile_time, trace, type_check e warning. Inicialmente, type_check e warning estão ativadas e, profile, profile_time e trace, estão desativadas. É necessário que se ative/desative as opções uma de cada vez.

[editar] Pacote padrão

Editor oficial do Euphoria.
Editor oficial do Euphoria.

O Euphoria é distribuído num pacote, que inclui ferramentas básicas, que auxiliam a programação no mesmo. No Windows, ele vem com um instalador, que instala e configura o Euphoria rápida e automaticamente. O pacote inteiro gira em torno de 2 MB, permitindo ser baixado rapidamente. Ele inclui:

  • Interpretador (front-end e back-end), Binder e Shrouder[13], e o tradutor Euphoria-para-C;
  • Biblioteca padrão[14], com rotinas relativas ao desenvolvimento de jogos e programas diversos;
  • Euphoria Editor (ED) - Um editor com suporte a realce colorido para palavras-chave[15];
  • Euphoria Database System (EDS) - Um sistema de banco de dados para uso com programas Euphoria[16];
  • Manual da linguagem e de suas ferramentas[17];
  • Tutorial e exemplos de código para ajudar no aprendizado da linguagem;
  • FAQ (Frequently Asked Questions - Questões Freqüentemente Perguntadas)[18] para os problemas mais conhecidos;
  • Notas de lançamento[19] e um documento com 24 razões para mudar de C/C++ para Euphoria[20];
  • Manual com dicas para melhorar o desempenho dos códigos[21] de programas Euphoria e, um manual com documentação das funções específicas de plataforma;
  • Guia de como usar Euphoria como aplicação CGI;
  • Código fonte do Euphoria, parcialmente em Euphoria e C;
  • Dois ícones do Euphoria: um colorido e outro em escala de cinza.

Ele também contém partes do CauseWay[22] e da biblioteca Allegro, ambos sob domínio público.

[editar] Licença

Apesar de estar sob domínio público, o Euphoria possui uma licença, que é meramente explicativa[23]. Ela explica que o Euphoria não tem nenhuma garantia, e pede, mas não requer, que programadores coloquem algum reconhecimento da linguagem e da comunidade oficial de desenvolvimento do Euphoria, em programas criados no mesmo, e colocando também, uma ligação para a página oficial do Euphoria. Seu código fonte também está disponível para o público. A RDS encoraja[24] que pessoas modifiquem, sublicenciem, distribuem e vendam o Euphoria. Por este motivo, há diversas versões não-oficiais do Euphoria, espalhadas pela internet, com diferentes licenças de uso.

[editar] Distribuição de programas Euphoria

Há quatro formas de se distribuir[25] programas Euphoria:

  • O código fonte em Euphoria pode ser distribuído da mesma forma que foi escrito. O usuário final precisará do interpretador para executar o código;
  • O código pode ser “coberto”, usando o Shrouder, para proteger o código fonte, onde todos os códigos Euphoria são compilados para um único arquivo, numa linguagem intermediária bytecode de baixo nível, o Euphoria IL (Euphoria Intermediate Language), impedindo que outros possam ver, copiar, ou modificar o código fonte. O código IL pode ser interpretado pelo back-end, que é também uma máquina virtual;
  • O código fonte em Euphoria pode ser “encadernado”, usando o Binder, onde todos os códigos Euphoria são embutidos em um único interpretador, para uma fácil distribuição. Opcionalmente, pode-se aplicar um ícone ao executável (Windows, somente). Como o Shrouder, o código estará protegido contra cópias. A desvantagem, em relação ao método anterior, é que o código terá alguns kilobytes a mais e, a vantagem é que o código não necessita do interpretador ou do back-end, para ser executado. Ao invés disso, ele se auto-interpreta, já que está embutido no interpretador;
  • O usuário pode usar o tradutor de “Euphoria-para-C”, para converter o código fonte em Euphoria, num código fonte de C, e então compilar, usando um compilador de C, em um código de máquina. Usando essa técnica, além de poder criar um programa mais ágil, pode-se criar programas como bibliotecas dinâmicas. O tradutor e capaz de produzir código C, compatível com cinco compiladores: Borland C++, DJGPP, GCC, LCC e Watcom.

Quando o código passa pelo Binder ou pelo Shrouder, o código é revisado automaticamente, e as rotinas e as variáveis não usadas, são apagadas, para otimizar a velocidade do código e diminuir o tamanho do mesmo.

[editar] Exemplos

Ver artigo principal: Lista de exemplos de Euphoria
Ver artigo principal: Programa Olá Mundo
puts(1,"Olá Mundo!")

[editar] Livros

Existem alguns livros[26] comerciais que possuem conteúdo diretamente ligado à programação em Euphoria, que são muito úteis para o aprendizado no mesmo, já que o manual oficial[27] é muito direto, e não possui muitas partes teóricas. Abaixo segue-se uma lista:

  • Euphoric Mysteries - Euphoric Mysteries tem como alvo principal, os recém-chegados a programação. Os programadores experienciados também irão achar ele interessante. Assuntos cobertos incluem: instalação e configuração, ambientes dirigidos a eventos, núcleo da linguagem Euphoria, banco de dados, gráficos do Windows;
  • The OidZone Programmer's Reference - Este livro guia o leitor linha por linha sobre a teoria e o código atrás do rápido jogo de ação, o OidZone, que foi escrito em Euphoria.

Existem outros bons livros que são aconselhados a programadores de Euphoria, porém, esses não abordam diretamente à programação em Euphoria, mas podem ser adaptados facilmente. Abaixo, segue-se uma lista deles:

  • The C Programming Language - Este é o livro padrão na programação em C. Já que Euphoria pode ser programado com C, de várias formas, este livro pode ser de boa ajuda para se conhecer um pouco sobre C. Este livro é breve, completo, bem estruturado e autoritativo;
  • Programming Windows - Fifth Edition - Este livro ensina programação de baixo nível em Windows usando C e a Win32 API. O que for aprendido, pode ser facilmente adaptado a Euphoria.

Referências

[editar] Ver também

[editar] Ligações externas

Outros projectos Wikimedia também contêm material sobre este artigo:
Imagens e media no Commons
Oficial
Tutoriais
Ferramentas
Bibliotecas
Comunidades e outros
Usa Euphoria comercialmente


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -