>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
Java

EOLANG e il concetto di OOP più pura senza tipi, classi o cicli

Cosa succederebbe se rimuovessi classi, ereditarietà, metodi statici e tipi dal tuo linguaggio di programmazione preferito? E insieme a loro scartassi null, operatori, casting dei tipi e strutture di controllo come if o for. Sembra folle, ma è esattamente ciò che fa EOLANG (o semplicemente EO) — un linguaggio sperimentale creato dal team Objectionary guidato da Yegor Bugayenko.

I creatori del progetto sono convinti che linguaggi popolari come Java, C++, Python e C# non siano affatto orientati agli oggetti. Sono ibridi dove il codice procedurale si nasconde dietro classi e metodi di utilità. Secondo gli autori di EO, nemmeno Smalltalk o Self sono abbastanza puri.

Per risolvere questa situazione, gli sviluppatori hanno deciso di progettare un linguaggio da zero, basandolo su un modello matematico formale — il $\phi$-calculus (phi-calculus).

Cosa c'è dentro? Solo Oggetti e Decorazione

EO non ha classi tradizionali. Usa invece i cosiddetti oggetti astratti che prendono vita quando gli vengono passati argomenti. Tutte le entità sono immutabili per impostazione predefinita.

Non puoi implementare il riutilizzo del codice attraverso l'ereditarietà tradizionale — semplicemente non esiste qui. L'unico meccanismo di composizione è la decorazione. Un oggetto contiene un attributo speciale @ (phi) che punta a un altro oggetto. Tutte le chiamate non gestite dall'oggetto corrente vengono inoltrate in modo trasparente all'entità wrappata.

Ecco come appare un semplice script di saluto:

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

Qui app è un oggetto astratto. Decora l'oggetto stdout, passandogli l'argomento "Hello, world!\n". La sintassi si basa su un'indentazione di due spazi, in qualche modo simile a Python, sebbene sia disponibile anche la notazione orizzontale tramite parentesi: stdout "Hello, world!".

Ma come si scrivono i cicli senza while o for? In EO, i cicli sono costruiti come oggetti regolari. Dai un'occhiata all'esempio per stampare una tabella quadrata:

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

Sembra poco familiare. Il codice combina oggetti seq (sequenza), while, ed espressioni come x.as-number.plus 1. Non ci sono operatori aritmetici + o * — invece, vengono chiamati i metodi degli oggetti corrispondenti.

Architectural Punk: XML e XSLT 2.0 Sotto il Cofano

La cosa più sorprendente del progetto non sono solo le semantiche del linguaggio, ma l'architettura del compilatore.

La maggior parte dei compilatori costruisce un albero della sintassi astratta (AST) in memoria e lo attraversa con visitor in Java o C++. Gli sviluppatori di EO hanno adottato un approccio diverso. Il parser converte il codice in XMIR — una rappresentazione intermedia basata su XML.

Poi inizia la magia di XSLT. Tutte le trasformazioni della sintassi, i controlli e la traduzione nel codice target sono implementati come una serie di fogli di stile XSLT 2.0. Il README del progetto include anche un benchmark che mostra quanti millisecondi ogni file .xsl impiega per essere processato durante le build dei moduli. Ad esempio, più del 30% del tempo viene speso su to-java.xsl.

La pipeline di build è integrata direttamente in Apache Maven tramite eo-maven-plugin. I moduli e le librerie di terze parti non vengono scaricati come file JAR pronti da Maven Central. Invece, lo strumento MjPull preleva il codice sorgente EO dal repository Git di Objectionary e li compila insieme al tuo progetto.

Come Provare il Linguaggio da Solo?

Avrai bisogno di Java SE e npm per iniziare. L'utility CLI viene installata con un singolo comando:

npm install -g [email protected]

Dopo di che, puoi compilare ed eseguire un semplice file:

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

C'è Qualche Beneficio Pratico in Questo?

È improbabile che qualcuno scriva servizi in produzione con EOLANG adesso. Il linguaggio rimane un esperimento di ricerca. Mancano ottimizzazioni convenzionali e la catena di compilazione tramite XSLT funziona più lentamente delle soluzioni tradizionali.

Ma EO serve come un eccellente esercizio mentale. Ti costringe a riconsiderare le abitudini formatesi attraverso anni di lavoro con Java, C# o Python. Quando ti vengono sottratti null, la mutabilità e i tipi, devi reimparare come progettare la connettività dei componenti e usare i decorator.

Se sei interessato alla teoria dei linguaggi di programmazione, ai modelli formali come il $\phi$-calculus, o ad architetture di compilatori insolite — il repository objectionary/eo merita sicuramente la tua attenzione.

Progetti correlati