>_ DevTrendspt

Idioma

Início

Linguagens

Seções

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarcados Segurança
Java

EOLANG e o Conceito da OOP Mais Pura Sem Tipos, Classes ou Loops

E se você removesse classes, herança, métodos estáticos e tipos da sua linguagem favorita? E junto com eles descartasse null, operadores, casting de tipos e estruturas de controle como if ou for. Parece loucura, mas é exatamente isso que EOLANG (ou simplesmente EO) propõe — uma linguagem experimental criada pela equipe Objectionary liderada por Yegor Bugayenko.

Os criadores do projeto estão convencido de que linguagens populares como Java, C++, Python e C# não são realmente orientadas a objetos. São híbridos onde código procedural se esconde atrás de classes e métodos utilitários. Nem mesmo Smalltalk ou Self, segundo os autores do EO, são puros o suficiente.

Para corrigir essa situação, os desenvolvedores decidiram criar uma linguagem do zero, baseando-a em um modelo matemático formal — $\phi$-calculus (phi-calculus).

O Que Tem Dentro? Apenas Objetos e Decoração

EO não tem classes tradicionais. Em vez disso, usa os chamados objetos abstratos que ganham vida quando argumentos são passados a eles. Todas as entidades são imutáveis por padrão.

Você não pode implementar reutilização de código através de herança tradicional — ela simplesmente não existe aqui. O único mecanismo de composição é a decoração. Um objeto contém um atributo especial @ (phi) que aponta para outro objeto. Todas as chamadas não tratadas pelo objeto atual são transparentemente encaminhadas para a entidade encapsulada.

Aqui está como fica um simples script de saudação:

[args] > app stdout > @ "Hello, world!\n"

Aqui app é um objeto abstrato. Ele decora o objeto stdout, passando a ele o argumento "Hello, world!\n". A sintaxe depende de indentação com dois espaços, um pouco reminiscente de Python, embora notação horizontal via colchetes também esteja disponível: stdout "Hello, world!".

Mas como você escreve loops sem while ou for? Em EO, loops são construídos como objetos regulares. Observe o exemplo para imprimir uma tabela quadrada:

malloc.empty > [args] > app seq * > [x] >> x.put 2 while x.as-number.lt 6 > [i] >> seq * > [i] >> stdout "%d x %1$d = %d\n".printf * x x.as-number.times x x.put x.as-number.plus 1 true

Parece desconhecido. O código combina objetos seq (sequência), while, e expressões como x.as-number.plus 1. Não há operadores aritméticos + ou * — em vez disso, métodos dos objetos correspondentes são chamados.

Architectural Punk: XML e XSLT 2.0 Por Trás dos Panos

A coisa mais surpreendente sobre o projeto não é apenas a semântica da linguagem, mas a arquitetura do compilador.

A maioria dos compiladores constrói uma árvore sintática abstrata (AST) na memória e a atravessa com visitors em Java ou C++. Os desenvolvedores do EO adotaram uma abordagem diferente. O parser converte o código em XMIR — uma representação intermediária baseada em XML.

Então a magia do XSLT começa. Todas as transformações de sintaxe, verificações e tradução para código-alvo são implementadas como um conjunto de stylesheets XSLT 2.0. O README do projeto até inclui um benchmark mostrando quantos milissegundos cada arquivo .xsl leva para processar durante builds de módulos. Por exemplo, mais de 30% do tempo é gasto em to-java.xsl.

O pipeline de build é integrado diretamente no Apache Maven via eo-maven-plugin. Módulos e bibliotecas de terceiros não são baixados como arquivos JAR prontos do Maven Central. Em vez disso, a ferramenta MjPull puxa código fonte EO do repositório Git da Objectionary e os compila junto com o seu projeto.

Como Experimentar a Linguagem Você Mesmo?

Você vai precisar de Java SE e npm para começar. O utilitário CLI é instalado com um único comando:

npm install -g [email protected]

Depois disso, você pode compilar e executar um arquivo simples:

eoc --easy link
eoc --easy --alone dataize app

Existe Algum Benefício Prático Nisso?

É improvável que alguém escreva serviços em produção em EOLANG agora. A linguagem permanece um experimento de pesquisa. Falta otimizações convencionais, e a cadeia de compilação através de XSLT é mais lenta que soluções tradicionais.

Mas EO serve como um excelente exercício mental. Ele força você a reconsiderar hábitos formados através de anos trabalhando com Java, C# ou Python. Quando você é despido de null, mutabilidade e tipos, você tem que reaprender como projetar conectividade de componentes e usar decoradores.

Se você está interessado em teoria de linguagens de programação, modelos formais como $\phi$-calculus, ou arquiteturas de compiladores incomuns — o repositório objectionary/eo definitivamente merece sua atenção.

Projetos relacionados