Das Java-TX Projekt

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

  • 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:


Das Eclipse-Plugin steht hier zum Download bereit.

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

  • Martin Plümicke, Andreas Stadelmeier: Introducing Scala-like function types into Java-TX (pdf)
    In Proceedings of the 14th International Conference on Managed Languages & Runtimes (ManLang, formerly PPPJ), ACM International Conference Proceeding Series, ISBN 978-1-4503-0935-6, Prague, Czech Republic, September 26-27, 2017
  • Martin Plümicke: More type inference in Java-8
    In Lecture Notes in Computer Science 8974, PSI' 14, Ershov Informatics Conference Perspectives of System Informatics , pages , June 24-27, 2014, St. Petersburg, Russia
  • Adding overloading to Java type inference (pdf)
    Im Gemeinsamen Tagungsband der Workshops der Tagung Software Engineering 2015 der 8. Arbeitstagung Programmiersprachen (ATPS 2015) , pages 127-132, 18. März 2015 in Dresden
  • Martin Plümicke: Well-typings for Javaλ (pdf)
    In Proceedings of the 9th international symposium on Principles and practice of programming in Java ACM International Conference Proceeding Series, ISBN 978-1-4503-0935-6, Kongens Lyngby, Denmark, August 24-26, 2011
  • Martin Plümicke: Intersection Types in Java (pdf)
    In Proceedings of the 6th international symposium on Principles and practice of programming in Java ACM International Conference Proceeding Series; Vol. 347 Modena, Italy, September 9-11, 2008
  • Martin Plümicke: Typeless Programming in Java 5.0 with Wildcards (pdf)
    In Proceedings of the 5th international symposium on Principles and practice of programming in Java ACM International Conference Proceeding Series; Vol. 272 Monte de Caparica/Lisbon, Portugal, September 5-7, 2007
  • Martin Plümicke, Jörg Bäuerle: Typeless programming in Java 5.0 (pdf)
    In Proceedings of the 4th international symposium on Principles and practice of programming in Java ACM International Conference Proceeding Series; Vol. 178 Mannheim, Germany, August 30 - September 1, 2006.

Typunifikation

Implementierung

 

Kontakt

Prof. Dr. rer. nat. Martin Plümicke
Tel.: 07451/521-142
Email: m.pluemicke@hb.dhbw-stuttgart.de