38 lines
1.7 KiB
Markdown
38 lines
1.7 KiB
Markdown
# Quellen
|
|
* http://cr.openjdk.java.net/~briangoetz/lambda/lambda-translation.html
|
|
* http://blog.takipi.com/erstellen-von-lambda-ausdrucken-scala-vs-java-8/
|
|
|
|
# Decompiler
|
|
* Es wird javap verwendet. Die Datei ~/bin/javap leitet den javap Befehl um. Muss angepasst werden, wenn man andere Version verwenden will.
|
|
|
|
#Quellen
|
|
* Brian Götz zu Lambdas: http://wiki.jvmlangsummit.com/images/1/1e/2011_Goetz_Lambda.pdf
|
|
|
|
# Doku
|
|
* 2 Möglichkeiten Lambda Ausdrücke zu kompilieren: Anonymous inner class, Invokedynamic
|
|
|
|
## Invokedynamic
|
|
* Hat Argumente auf dem Stack liegen
|
|
* Indexbytes zeigen auf eine InvokeDynamic_Info structure, welche beinhaltet:
|
|
* Methodenname der bootstrap-Methode (Symbolic Reference)
|
|
* Mehrere Symbolic References auf statische Argumente der Bootstrap Methode
|
|
* Einen Methodenname und Deskriptor.
|
|
* Ausführung:
|
|
* Nach dem auflösen dieser Struktur stehen die Informationen des InvokeDynamic_Info zur Verfügung
|
|
* Anschließend wird ein invokevirtual auf die Bootstrap Methode ausgeführt
|
|
* Die Index Referenz für InvokeVirtual hat bestimmte Werte: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.invokedynamic
|
|
* Die Rückgabe der Bootstrap-Methode (CallSite) wird mittels invokevirtual ausgeführt.
|
|
|
|
## Bootstrap Methods
|
|
* Ein Attribut im Classfile
|
|
* Gibt die Bootstrap Methoden an
|
|
* Die Angabe erfolgt durch Zeiger auf Method_Handle_info Strukturen im Konstantenpool
|
|
* Rückgabe der Bootstrap-Methode ist ein CallSite Objekt: https://docs.oracle.com/javase/7/docs/api/java/lang/invoke/CallSite.html
|
|
|
|
## LambdaMetaFactory
|
|
* Stellt eine mögliche Bootstrap Methode dar
|
|
|
|
# TODO:
|
|
* Matrix Beispiel muss funktionieren (verschachtelter Lambda Ausdruck)
|
|
* Automatisch Bytecode generieren, wenn alle Typen eingesetzt sind
|