- Nemerle
-
Nemerle
Funktionale SpracheBasisdaten Paradigmen: objektorientiert, imperativ, funktional Entwickler: Open Source / Universität Wroclaw Aktuelle Version: 0.9.4 (25. Februar 2008) Einflüsse: ML, C# Betriebssystem: Windows, jedes Unix ähnliche Betriebssystem auf dem Mono installiert ist Lizenz: BSD Lizenz nemerle.org Nemerle ist eine hybride Computersprache. Sie bietet die Möglichkeit, funktional, imperativ sowie objekt-orientiert zu programmieren. Nemerle ist eine Programmiersprache für ISO CLI und wurde an der Universität Breslau entwickelt. Mit der Entwicklung von Nemerle wurde versucht, die Eigenschaften der Programmiersprache ML mit dem Look and Feel von C# zu verbinden.
Nemerle wurde nach dem Erzmagier Nemmerle aus „Der Magier der Erdsee“ von Ursula K. Le Guin benannt (die Schreibweise mit nur einem ‚m‘ wird als design decision bezeichnet).
Inhaltsverzeichnis
Sprachmerkmale
Nemerle basiert auf dem CLI-Objektsystem und ist entsprechend statisch typisiert und mit der CLI-Klassenbibliothek und in z. B. C# oder Visual Basic implementierten Bibliotheken kompatibel. Die Syntax ist grundsätzlich ähnlich der von C# gehalten, mit dem erklärten Ziel, leicht verständlich für Benutzer anderer „geschweifte-Klammern“-Sprachen zu sein.
Von der Syntax und dem Objektsystem abgesehen, bedient sich Nemerle allerdings einiger Konzepte aus der funktionalen Programmierung. Darunter fallen algebraische Datentypen und Pattern Matching, wie sie in der ML-Sprachfamilie vorkommen, und die Möglichkeit der Metaprogrammierung über Makros, wie sie in Common Lisp oder Scheme verwendet werden. Auch weiter verbreitete Sprachkonstrukte wie Closures und Typinferenz, die inzwischen auch in C# verfügbar sind, hat Nemerle übernommen.
Nemerle kann sowohl unter Microsoft .NET als auch der freien Laufzeitumgebung des Mono-Projekts verwendet werden.
Makros
Makros[1] in Nemerle sind einfach Programmstücke, die zum Zeitpunkt der Kompilierung ausgeführt werden, und nicht erst, wenn das Programm schließlich vom Benutzer ausgeführt wird. Dabei können manche Makros einfach wie Funktionsaufrufe aussehen, andere aber auch wie CLI-Attribute an Deklarationen angehängt werden.
Es ist auch möglich, mittels einem Makro dem Compiler völlig neue syntaktische Konstrukte beizubringen. Dies verdient besondere Beachtung, da z. B. die Kontrollstrukturen, die in anderen Sprachen mit C-artiger Syntax üblich sind, auf diese Weise implementiert sind. So steckt zum Beispiel hinter for-Schleifen nichts weiter als ein Makro, das die Schleife zu einer endrekursiven Funktion umschreibt.
Indem der Compiler Makros ermöglicht, dessen internen Datenstrukturen zu manipulieren, ermöglicht Nemerle auf diese Weise machtvolle Metaprogrammierung: Ein Makro produziert einen Syntaxbaum, der vom Compiler an der Stelle, von der das Makro aufgerufen wurde, eingefügt wird. Dem Makro steht dabei der volle Sprachumfang und die gesamte Klassenbibliothek zur Verfügung.
Beispiele
Das traditionelle „Hallo Welt!“ kann in Nemerle beinahe wie in C# implementiert werden:
class Hello { static Main () : void { System.Console.WriteLine ("Hallo Welt!"); } }
Dieses Beispiel unterscheidet sich lediglich in der Form der Angabe des Typs des Rückgabewerts von Main von C#, der hier nach dem Namen der Funktion mit einem Doppelpunkt von dieser getrennt angegeben wird. Alternativ kann man „Hallo Welt!“ auch auf folgende Weise ausdrücken:
System.Console.WriteLine("Hallo Welt!");
In diesem Beispiel wird eine umgebende Klassen- und Funktionsdeklaration in der Form des obigen Beispiel automatisch ergänzt.
Einzelnachweise
Weblinks
Wikimedia Foundation.