Skip to content
Leonel Sanches da Silva edited this page Jan 6, 2024 · 6 revisions

Introdução

Delégua é uma variação da linguagem Égua patrocinada pela Design Líquido – empresa brasileira sediada em Curitiba, Paraná, Brasil. Seu principal objetivo é uma abordagem mais comercial em cima da linguagem Égua, com algumas capacidades adicionais, como trabalhar com o ecossistema Node.js e a composição das bibliotecas, que não fazem parte do núcleo da linguagem.

Mesmo com a abordagem mais comercial, a licença da linguagem é MIT, o que significa que a linguagem sempre foi e sempre será gratuita para qualquer uso. A ideia é apenas torná-la mais robusta, para o caso de aplicações grandes, escaláveis, com valor além do educacional.

Delégua começou tendo como base o código-fonte de Égua até a versão 1.2.0, quando nasceu, no começo de 2022, mas é radicalmente diferente na implementação. Toda a lógica da linguagem é traduzida ao máximo para o português, para também servir aos fins didáticos de como construir uma linguagem interpretada. Égua, até então, é implementada em cima de JavaScript. Delégua usa TypeScript e é mais modularizada.

O núcleo da linguagem

O que chamamos de núcleo da linguagem é implementado em outro repositório. Lá temos as definições básicas de lexadores, avaliadores sintáticos e interpretadores. Neste repositório, aumentamos essas capacidades adicionando suporte ao Node.js, como capacidade de trabalhar com diversos arquivos (recurso de importação), suporte à depuração remota e acesso ao NPM.

A separação foi necessária porque o núcleo da linguagem é usado em aplicações que não estão necessariamente no Node.js. Antigamente o recurso era contornado usando o Browserify, mas isso virou um problema ao usar a bibliotecas em aplicações que usam frameworks baseados no Webpack, como React e Vue.js. É possível usar o Browserify, mas fica impossível depurar o código decentemente ao realizar a geração dos fontes pelo Browserify.

Componentes internos

Delégua Node possui todos os componentes do núcleo da linguagem e mais alguns:

  • Um importador, classe responsável por abrir um arquivo de fonte, analisá-lo e, caso o conteúdo esteja semanticamente correto, prover a lista de declarações para os demais componentes. Dentro do importador, vivem outros dois componentes:

    • Um lexador, ou analisador léxico, que obtém todos os lexemas (ou radicais) do código e os transforma em tokens (ou símbolos), que são unidades de categorização de função linguística, como literais, variáveis, funções, classes etc.

    • Um parser, ou analisador sintático, que confere todos os símbolos definidos pelo lexador e transforma-os em estruturas de alto nível, que serão usadas para a execução lógica do código.

Compatibilidade com bibliotecas do JavaScript

Em teoria, Delégua Node suporta qualquer biblioteca Node.js no padrão do NPM. Por exemplo, se quisermos usar a biblioteca Lodash, uma conhecida biblioteca para tratamento de estruturas de dados, podemos usar o seguinte:

// Para isso funcionar, a biblioteca `lodash` precisa estar instalada ou no projeto (diretório `node_modules`), ou globalmente.
var lodash = importar('lodash');
var a = { 'b': 'c' };
escreva(lodash.get(a, 'b', 'f'));
// Resultado: c

Modos de execução

Delégua Node possui quatro modos de execução:

  • LAIR (Leia-Avalie-Imprima-Repita), conhecido em inglês como REPL (Read-Evaluate-Print-Loop);

  • Execução de um arquivo fornecido como parâmetro;

  • Execução de código fornecido como parâmetro;

  • Tradução de um arquivo em um dialeto para outro dialeto.

Para usar Delégua em modo LAIR, você pode ou instalar o pacote do Delégua Node:

npm i -g @designliquido/delegua-node

Ou a solução completa (recomendado):

npm i -g delegua

Após a instalação, use o comando:

delegua

Inspirado em Python, o modo LAIR de Delégua funciona basicamente como uma calculadora. Não é preciso usar a instrução escreva() para saber o resultado de cada linha (Égua requer a instrução escreva()).

delegua> 2+2
4

delegua> 3*5
15

delegua> 3**5
243

delegua> 5 ** 4 ** 3 ** 2
59604644775390620

Se a ideia é executar um arquivo, basta passar o nome do arquivo como último argumento.

delegua meu-arquivo.delegua

Se a ideia é executar um código como argumento, use o parâmetro -c ou --codigo seguido do código a ser executado, entre aspas.

delegua -c "escreva(2+1)"