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
-
Florian Steurer, Martin Plümicke: Erweiterung und Neuimplementierung der Java Typunifikation
(pdf)
In Proceedings of the
35th Annual Meeting of the GI Working Group Programming Languages and Computing Concepts, May 2.-4., 2018, Bad Honnef
- Martin Plümicke:
Java Type Unification with Wildcards
(pdf)
In Proceedings of the 17th International Conference, INAP 2007, and 21st Workshop on Logic Programming, WLP 2007, Würzburg, Germany, October 4-6, 2007, Revised Selected Papers
- Martin Plümicke:
Type Unification in Generic-Java
(postscript)
In Proceedings
of 18th International Workshop on Unification,
pages , Cork, Ireland, July 5. 2004
Implementierung