Software-Wiki
Advertisement
TeaJay
Paradigmen: objektorientiert, imperativ, funktional
Erscheinungsjahr: 2014
Entwickler: Michael Burzan, Michael Kußmann
Aktuelle Version: 0.1  (05. Mai 2014)
Typisierung: stark, statisch
Einflüsse: Java, C++, Lisp
Betriebssystem: plattformunabhängig
Lizenz: GPL
www.teajay.org

TeaJay ist eine freie, plattformunabhängige, an Java angelehnte Multiparadigmensprache welche im Zuge zweier Abschlussarbeiten an der Westfälischen Wilhelms-Universität Münster als Lehrsprache entstand.

Das Typsystem der Sprache orientiert sich besonders stark am Begriff des abstrakten Datentyps (Abstract Data Type, ADT). So ist es in TeaJay vorgeschrieben, dass jeder benutzerdefinierte Typ in Spezifikation und Implementierung aufgetrennt wird. Zur Kompilierzeit muss dabei nur die Spezifikation eines Typs vorliegen, während eine Implementierung erst zur Laufzeit vorliegen muss. Implementierungen werden dabei just-in-time von einem Laufzeitsystem geladen. Für TeaJay gibt es einen prototypischen Compiler, sowie Laufzeitumgebung und Sprachbibliothek. Der Compiler übersetzt TeaJay direkt in Java-ByteCode und verwendet die mit Java 7 eingeführte Instruktion invokedynamic.

Besonderheiten[]

Abstrakte Datentypen[]

Pro Datei darf in TeaJay nur ein Typ definiert oder eine Implementierung angegeben werden. Es folgt ein Beispiel für ein TeaJay-Programm[1]:

//Datei: simpleadder/SimpleAdder.tj
package simpleadder;
 /* Addierer: Erlaubt das Addieren zweier Zahlen. */
public typedef SimpleAdder {
	/* Erwartet zwei als String codierte Zahlen. */
	SimpleAdder(String a, String b) throws NumberFormatException;
	/* Führt die Addition a + b aus und gibt das Ergebnis zurück. */
	Number add();
}

In SimpleAdder.tj wird die Schnittstelle des Programms bzw. Typs beschrieben. Um ein TeaJay-Programm auszuführen muss man den Namen des Typs und den Namen einer Methode angeben (in diesem Fall SimpleAdder und add). Die Kommandozeilenargumente werden dem Konstruktor übergeben. Eine Implementierung von SimpleAdder kann wie folgt aussehen[1]:

//Datei: implementations/SimpleAdderImpl.tj
package implementations;
typeimpl SimpleAdderImpl implements simpleadder.SimpleAdder {
	Number a;
	Number b;
	
	SimpleAdderImpl(String a1, String b1) throws NumberFormatException {
		a = Number.parseNumber(a1);
		b = Number.parseNumber(b1);
	}
	Number add() {
		return a + b;
	}
}

Um den Typ SimpleAdder zu erzeugen braucht man nur seinen Namen, eine Implementierung wird von der Laufzeitumgebung geladen:

SimpleAdder a = new SimpleAdder("2", "3");

Number[]

TeaJay besitzt nur einen eingebauten Typen zur Darstellung von Zahlen[1]. Dieser kann potenziell alle rationalen Zahlen darstellen indem er sie als Bruch mit ganzzahligem Zähler und Nenner darstellt. Der Raum der darstellbaren Zahlen ist natürlich aus technischen Gründen durch den verfügbaren Speicher beschränkt.

Number a = 22 / 5;
IO.println(a.toFractionString()); //Ausgabe: 22/5

Closures[]

TeaJay unterstützt Closures und bindet diese in das starke Typsystem ein. In TeaJay fangen Closures dabei nicht automatisch ihre Umgebung ein, sondern sie muss explizit angegeben werden[1]:

Number num = 5;
Closure() cl1 = closure[Number num = num;]() {
	IO.println(num); num += 1;
};

Ein Closure wird dabei durch seinen Rückgabetyp und Parametertypen identifiziert. Auch können Closures sich selber, über this, rekursiv aufrufen[1]:

Closure<Number>(Number) fibo = closure<Number>(Number n) {
	if (n == 0 || n == 1) {
		return n;
	} else {
		return this(n - 1) + this(n - 2);
	}
};
IO.println(fibo(7)); //Closure-Aufruf

Operatorüberladung[]

TeaJay unterstützt für die meisten Operatoren Operatorüberladung[1]. Ausahmen bilden die Operatoren =, &&, ||, ! und der Cast-Operator. Insbesondere kann der Operator == überladen werden. Für Java-Klassen ruft == die aus Java bekannte Methode Object.equals auf. Damit eigent sich der Operator z.B. auch für den String-Vergleich:

String a = ...;
if (a == "b") { /*vergleich ist unkritisch*/ }

Weblinks[]

Offizielle Webseite von TeaJay

Einzelnachweise[]

  1. 1,0 1,1 1,2 1,3 1,4 1,5 Michael Burzan, Michael Kußmann: Entwurf und Implementierung einer ADT-orientierten Programmiersprache. Münster 2014 (http://www.teajay.org).


Wikidata-logo Im Wikidata-Objekt Q16868176 befinden sich offene Daten zum Thema und Links zu Wikimedia-Projekten.
Info Sign  Dieser Wikipedia-Artikel wurde gemäß GFDL bzw. CC-by-sa mit allen Versionen importiert.
Advertisement