Zum Hauptinhalt springen

Das Java-TX Projekt

Das Java-TX Projekt (TX steht für Type eXtended) beschäftigt sich mit der Weiterentwicklung Sprache Java.

  • Globale Typinferenz
  • Echte Funktionstypen, wie sie aus Scala oder C# bekannt sind
  • Principale Typen
  • Durchschnittstypen

Die Basis von Java-TX ist derzeit Java-8.

In objektorientierten Sprachen wie Standard-Java, C#, Scala oder C++ ist es zwingend erforderlich, den Typ einer Variablen, die Argument- und Return-Typen einer Methode festzulegen. Es gibt allenfalls lokale Typinferenz, die es für einen sehr eingeschränkten Bereich erlaubt Typen wegzulassen. Degegenüber haben funktionale Sparche wie Haskell oder CAML schon seit sehr langer Zeit globale Typinferenzsysteme, die es erlauben alle Typen wegzulassen ohne die Eigenschaft statische Typisierung zu verlieren. Java-TX erlaubt es ebenfalls alle Typen wegzulassen und durch das System inferieren zu lassen.

Im Rahmen von studentischen Arbeiten ist eine erster Prototyp entwickelt worden.

    Schema-Diagramm

    Typinferenz

    Das Herzstück von Java-TX ist die Typinferenz. Bei der Typinferenz wird die bereits erwähnte Berechnung der Typen nichtdeklarierter Variablen durchgeführt. Dabei wird zunächst für jeden nicht deklarierten Typ ein Platzhalter eingeführt. Für die Typ-Platzhalter werden Bedingungen erstellt, deren Lösung(en) die gescuhte Typisierung des Programms darstellen. Die Lösungen werden durch die Typunikation berechnet.

      Typunifikation

      Ähnlich wie bei der Typinferenz von Haskell wird das Typinferenz-Problem auf das Typunifikations-Problem zurückgeführt. Im Gegensatz zu Haskell sind die Bedingungen bei Java-TX allerdings Ungleichungen, die telweise eine Vielzahl von Lösungen besitzen. Die besondere Herausfordeung besteht darin die beste Lösung (den pricipalen Typ) in möglichst kurzer Zeit zu finden.

        Eclipse-Plugin

        Als IDE für Java-TX wurde in Eclipse-Plugin entwickelt. Ein Java-TX Projekt kann somit, direkt in Eclipse, mit dem Compiler mit Typinferenz kompiliert werden. Der Compiler ist in dem Plugin als jar-Archiv eingebunden und somit integraler Bestandteil und Herzstück des Plugins. Der Compiler selbst ist eine unabhängige Komponente. Der von ihm erstellte Parsebaum wird aufgegriffen und die darin enthaltenen Information entsprechend grafisch dargestellt.

          Allgemein

          Im Folgenden soll die grundsätzliche Funktionalität des Plugins anhand eines Bildes mit entsprechender Beschreibung der einzelnen Punkte erläutert werden. Das Bild beschreibt den Zustand nach erfolgreicher Kompilierung einer Klasse:

          Select-Funktion

          Der Compiler berechnet unbekannte Typen anhand deren Verwendung. Es gibt jedoch Fälle, in denen die Typinferenz nicht eindeutig ist. Hier ermöglicht das Plugin dem Anwender den gewünschten Typ über ein Kontextmenü auszuwählen. Dem Anwender werden alle Typen, die für diesen Fall in Frage kommen, in einer Auswahlliste angezeigt. Ein solches Szenario ist in folgendem Bild dargestellt:

          Bytecodegenerierung

          Im Teilprojekt der Bytecodegenerierung wird der abstrakte Syntaxbaum und die unifizierten Typen in Bytecode umgewandelt. Dieser Bytecode kann von jeder Java Virtual Machine auf verschiedenen Plattformen ausgeführt werden, die die Version des Bytecodes (aktuell Version 1.5) interpretieren kann. Der generierte Bytecode ist vollständig Java-konform und beinhaltet ebenfalls Signaturen, die aus den generischen Typen erstellt werden.

            Veröffentlichungen

            Typinferenz

            Typunifikation

            Implementierung