Rhine: Eine typisierte LLVM-Sprache stellt sich vor

Michael Thomas

© Shutterstock.com/scyther5

Die Programmiersprache rhine aus der Feder von Ramkumar Ramachandra ist eine typisierte, von Elixir inspirierte Sprache, die die LLVM-Just-in-time-Kompilierung nutzt und einen vollständigen abstrakten Syntaxbaum, sowie N-D-Tensoren, First-Class-Funktionen und Typinferenz bietet.

Die von Ramachandra im GitHub-Repositorium des Projekts vorgestellten Sprachfeatures umfassen beispielsweise die Typannotation ~Int ( In rhine werden nur Argumenttypen kommentiert; Rückgabetypen werden inferiert) sowie die Funktion ~Function(Int -> Int -> Int. Letztere nimmt zwei Integer auf und gibt einen zurück, wobei etwas Haskell-Syntax eingestreut wird.

Nutzten vorherige Versionen von rhine noch einen via Bison erzeugten Parser, steht den Usern aktuell ein handgeschriebener, rekursiv absteigender Parser zur Verfügung, der insbesondere im Hinblick auf die Geschwindigkeit sowie die Qualität der Fehlerreports deutlich besser abschneiden soll. Möchte man den Code einfach halten, ist mindestens ein Token Vorausschau notwendig.

Eine Besonderheit von rhine ist der AST. Dieser nimmt starke Anleihen bei der LLVM-Zwischenschicht (IR), umfasst jedoch auch einige höher angesiedelte Konzepte, wie beispielsweise Tensoren. Er ist Ramachandra zufolge als SSA zu betrachten und verfügt über einen eingebetteten UseDef-Graph, weshalb Analysen und Transformationen sich besonders leicht gestalten sollen.

Eine Übersicht über die weiteren Features und Konzepte der noch jungen Sprache kann der entsprechenden GitHub-Seite entnommen werden.

Aufmacherbild: Hacker using laptop von Shutterstock / Urheberrecht: scyther5

Verwandte Themen:

Geschrieben von
Michael Thomas
Michael Thomas
Michael Thomas studierte Erziehungswissenschaft an der Johannes Gutenberg-Universität Mainz und arbeitet seit 2013 als Freelance-Autor bei JAXenter.de. Kontakt: mthomas[at]sandsmedia.com
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: