>_ DevTrendsde

Sprache

Start

Sprachen

Bereiche

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

EOLANG und das Konzept der reinsten OOP ohne Typen, Klassen oder Schleifen

Was wäre, wenn Sie Klassen, Vererbung, statische Methoden und Typen aus Ihrer Lieblings-Programmiersprache entfernen würden? Und dazu noch null, Operatoren, Typecasting und Kontrollstrukturen wie if oder for. Das klingt verrückt, aber genau das ist EOLANG (oder einfach EO) — eine experimentelle Sprache, die vom Objectionary-Team unter der Leitung von Yegor Bugayenko entwickelt wurde.

Die Entwickler des Projekts sind überzeugt, dass beliebte Sprachen wie Java, C++, Python und C# überhaupt nicht objektorientiert sind. Es sind Hybride, bei denen prozeduraler Code hinter Klassen und Utility-Methoden versteckt ist. Selbst Smalltalk oder Self seien, laut den EO-Autoren, nicht rein genug.

Um diese Situation zu korrigieren, beschlossen die Entwickler, eine Sprache von Grund auf neu zu entwerfen und auf einem formalen mathematischen Modell zu basieren — dem $\phi$-Kalkül (Phi-Kalkül).

Was steckt drin? Nur Objekte und Dekoration

EO hat keine traditionellen Klassen. Stattdessen werden sogenannte abstrakte Objekte verwendet, die zum Leben erweckt werden, wenn Argumente an sie übergeben werden. Alle Entitäten sind standardmäßig unveränderlich.

Sie können Code-Wiederverwendung nicht durch traditionelle Vererbung implementieren — sie existiert hier einfach nicht. Der einzige Kompositionsmechanismus ist Dekoration. Ein Objekt enthält ein spezielles Attribut @ (Phi), das auf ein anderes Objekt zeigt. Alle Aufrufe, die nicht vom aktuellen Objekt behandelt werden, werden transparent an die umhüllte Entität weitergeleitet.

So sieht ein einfaches Begrüßungsskript aus:

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

Hier ist app ein abstraktes Objekt. Es dekoriert das Objekt stdout und übergibt ihm das Argument "Hello, world!\n". Die Syntax basiert auf Einrückungen mit zwei Leerzeichen, was entfernt an Python erinnert, obwohl auch eine horizontale Notation über Klammern verfügbar ist: stdout "Hello, world!".

Aber wie schreibt man Schleifen ohne while oder for? In EO werden Schleifen als reguläre Objekte konstruiert. Werfen wir einen Blick auf das Beispiel zum Ausgeben einer Quadratzahl:

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

Das sieht ungewohnt aus. Der Code kombiniert Objekte seq (Sequenz), while und Ausdrücke wie x.as-number.plus 1. Es gibt keine arithmetischen Operatoren + oder * — stattdessen werden Methoden der entsprechenden Objekte aufgerufen.

Architektonischer Punk: XML und XSLT 2.0 unter der Haube

Das Überraschendste am Projekt ist nicht nur die Semantik der Sprache, sondern die Architektur des Compilers.

Die meisten Compiler erstellen einen abstrakten Syntaxbaum (AST) im Speicher und durchlaufen ihn mit Besuchern in Java oder C++. Die EO-Entwickler gingen einen anderen Weg. Der Parser konvertiert den Code in XMIR — eine Zwischenrepräsentation basierend auf XML.

Dann beginnt die XSLT-Magie. Alle Syntaxtransformationen, Prüfungen und Übersetzungen in Zielcode werden als eine Reihe von XSLT 2.0-Stylesheets implementiert. Die README des Projekts enthält sogar einen Benchmark, der zeigt, wie viele Millisekunden jede .xsl-Datei während des Modulbaus zur Verarbeitung benötigt. Zum Beispiel werden mehr als 30% der Zeit für to-java.xsl aufgewendet.

Die Build-Pipeline ist direkt in Apache Maven über eo-maven-plugin eingebettet. Module und Bibliotheken von Drittanbietern werden nicht als fertige JAR-Dateien von Maven Central heruntergeladen. Stattdessen holt das Tool MjPull EO-Quellcode aus dem Git-Repository von Objectionary und kompiliert sie zusammen mit Ihrem Projekt.

Wie kann man die Sprache selbst ausprobieren?

Sie benötigen Java SE und npm zum Starten. Das CLI-Tool wird mit einem einzigen Befehl installiert:

npm install -g [email protected]

Danach können Sie eine einfache Datei kompilieren und ausführen:

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

Gibt es einen praktischen Nutzen davon?

Es ist unwahrscheinlich, dass jemand derzeit Produktionsservices in EOLANG schreiben wird. Die Sprache bleibt ein Forschungsexperiment. Es fehlen konventionelle Optimierungen, und die Kompilierungskette über XSLT ist langsamer als traditionelle Lösungen.

Aber EO dient als ausgezeichnete mentale Übung. Es zwingt Sie, Gewohnheiten zu überdenken, die durch jahrelange Arbeit mit Java, C# oder Python geformt wurden. Wenn Ihnen null, Veränderlichkeit und Typen genommen werden, müssen Sie neu lernen, wie man Komponentenkonnektivität entwirft und Dekorierer verwendet.

Wenn Sie sich für Programmiersprachentheorie, formale Modelle wie das $\phi$-Kalkül oder ungewöhnliche Compiler-Architekturen interessieren — das Repository objectionary/eo verdient definitiv Ihre Aufmerksamkeit.

Ähnliche Projekte