Gibt es eigentlich Java Source Code Interpreter..?

sirbender

Top Contributor
Damit meine ich nicht den internen Interpreter der JVM der Bytecode abarbeitet und wo ab und zu der JIT uebernimmt. Auch meine ich nicht sowas:
https://openjdk.java.net/jeps/330 wo auch Bytecode generiert (in memory) und ausgefuehrt wird.

Nein, ich meine einen Interpreter in Java geschrieben dem man z.B. einen Snippet Java Code als String geben kann und wo dieser diesen dann ausfuehrt. Allerding nicht indem Bytecode erzeugt wird aus dem Snippet, sondern indem einfach die Befehle des Source codes dynamisch abgearbeitet werden.

Java:
        String s = new String("Hello World");
        System.out.println(s);

Der Interpreter wurde das Source-Snippet parsen und z.B. einen AST erzeugen. Danach wuerde er fuer die erste Zeile dynamisch ein String-Objekt erzeugen und danach die println Methode dynamisch aufrufen mit dem Objekt als Argument. Eventuell kann man damit nicht alle Faelle von validem Java Code abdecken, aber simple Faelle auf jeden Fall, oder?

Gibt es so ein Project, dass simple Java Ausdruecke ausfuehrt? Fuer mathematische Ausdruecke gibt es in Java solche Interpreter.
 

sirbender

Top Contributor
Ich glaube jshell fuehrt auch Bytecode aus. Also nein, nicht etwas wie jshell.

Theoretisch sollte es aber keinen Grund geben warum man nicht direkt Source code ausfuehren koennen sollte indem man die Statements und Expressions im Source code einfach "ausfuehrt". Wenn im source code ein String Objekt erzeugt wird, tust du das identisch in deinem Interpreter. Wenn das String Objekt via println im source code ausgegeben wird auf der Konsole kannst du dynamisch in deinem Interpreter println aufrufen und das vorher erzeugte Sting Objekt uebergeben.
 
K

kneitzel

Gast
Nunja, es gibt z.B. BeanShell - da ist das aber noch erweitert worden um Script-Elemente ....
 

httpdigest

Top Contributor
Einen Java Quelltext-Interpreter in Java zu schreiben, hat keinen Use-Case. Erstens benötigst du sowieso eine JVM, um den Interpreter laufen zu lassen, und wenn du die Laufzeitumgebung sowieso hast/benötigst, kannst du auch gleich das eigentlich zu interpretierende Programm kompilieren und mit der Java-Laufzeitumgebung ausführen.
Es wäre also nichts weiter als eine riesengroße Zeitverschwendung ohne einen Anwendungsfall, einen Java Interpreter in Java zu bauen. Und genau deswegen hat es wohl auch noch niemand gemacht.
 

sirbender

Top Contributor
Nunja, es gibt z.B. BeanShell - da ist das aber noch erweitert worden um Script-Elemente ....

Und die BeanShell fuehrt source code aus? Da wird doch vorher auch auf Bytecode umgewandelt, oder?

Einen Java Quelltext-Interpreter in Java zu schreiben, hat keinen Use-Case. Erstens benötigst du sowieso eine JVM, um den Interpreter laufen zu lassen, und wenn du die Laufzeitumgebung sowieso hast/benötigst, kannst du auch gleich das eigentlich zu interpretierende Programm kompilieren und mit der Java-Laufzeitumgebung ausführen.
Es wäre also nichts weiter als eine riesengroße Zeitverschwendung ohne einen Anwendungsfall, einen Java Interpreter in Java zu bauen. Und genau deswegen hat es wohl auch noch niemand gemacht.

Fuer mich haette es einen Use-Case :)
 
K

kneitzel

Gast
Also BeanShell sagt unter https://beanshell.github.io/intro.html:
"In short, BeanShell is dynamically interpreted Java, plus a scripting language and flexible environment all rolled into one clean package."

In wie weit da aber an welcher Stelle eben ByteCode zum Einsatz kommt oder nicht: Was spielt das für eine Rolle? Wo ist denn der ausschlaggebende Punkt für Dich? Wo hängt es aus Deiner Sicht bei deinem Usecase?

Das kommt mir gerade extrem seltsam vor.
 

sirbender

Top Contributor
Na dann erzähl' mal? :)

In einem Wort: Kontrolle. Die JVM kann ich nicht kontrollieren (oder nur sehr schwierig) - oft wird in solchen Faellen Bytecode-Modification gemacht. Finde ich unschoen weil es eben auch sehr viel "Black Box" ist und man Kontrolle einbuesst.

Einen Source-Code Interpreter koennte man fuer Spezialfaelle (ich will jetzt nicht ins Detail gehen) eben zu 100% kontrollieren und es waere keine "Black Box".
 

sirbender

Top Contributor
Also BeanShell sagt unter https://beanshell.github.io/intro.html:
"In short, BeanShell is dynamically interpreted Java, plus a scripting language and flexible environment all rolled into one clean package."

In wie weit da aber an welcher Stelle eben ByteCode zum Einsatz kommt oder nicht: Was spielt das für eine Rolle? Wo ist denn der ausschlaggebende Punkt für Dich? Wo hängt es aus Deiner Sicht bei deinem Usecase?

Das kommt mir gerade extrem seltsam vor.

Danke. Ich schau es mir mal an. Wie gesagt, wuerde mich wundern wenn das nicht "in-memory" in Bytecode compiliert und das dann ausfuehrt. Ist ja sehr simpel.

Meine Gruende hab ich in meinem letzten Post ein bischen angerissen.
 

httpdigest

Top Contributor
In einem Wort: Kontrolle. Die JVM kann ich nicht kontrollieren (oder nur sehr schwierig) - oft wird in solchen Faellen Bytecode-Modification gemacht. Finde ich unschoen weil es eben auch sehr viel "Black Box" ist und man Kontrolle einbuesst.

Einen Source-Code Interpreter koennte man fuer Spezialfaelle (ich will jetzt nicht ins Detail gehen) eben zu 100% kontrollieren und es waere keine "Black Box".
Und worauf läuft dein Interpreter selbst? Richtig: Auf einer JVM. Es sei denn natürlich, du lässt deinen Interpreter sich selbst wieder interpretieren. Dann liefe aber der Interpreter-Interpreter auf einer JVM. Also, irgendwo hast du in der Kette am Ende eine JVM...
Aber warum willst du eigentlich hier (bei Java) aufhören? Dem Prozessor würde ich am allerwenigsten vertrauen. Der macht ganz verrückte Sachen, siehe ja die ganzen Sicherheitslücken in letzter Zeit. Ich würde an deiner Stelle einen x86 Interpreter bauen. Das Problem aber auch hier: Der würde ja selbst auf einem echten Prozessor laufen...
 
K

kneitzel

Gast
Was für Kontrolle? Kannst Du den Usecase was Du machen willst und was evtl. nicht gehen könnte, einmal skizzieren?

Der Interpreter führt einen Befehl aus. Wie dieser exakt ausgeführt wird, kann Dir doch egal sein. Denn die Anforderung ist ja, dass z.B. "System.out.println("Hallo")" ausgeführt wird. Ob und wie er System findet, da die out Instanz um dann println aufzurufen ist ein Implementationsdetail, das doch gekapselt ist.
 
X

Xyz1

Gast
Wenn ich Dich richtig verstehe so möchtest Du alle Optimierungen deaktivieren:
-Djava.compiler=NONE

Das deaktiviert alle JIT Optimierungen... Und dieser Begriff BlackBox bezeichnet eigentlich etwas anderes, nämlich closed source, also nur ein Programm das ohne für Menschen lesbaren Quelltext... zu untersuchen ist.

Wikipedia gibt im Wesentlichen dazu zwei Begriffe:
- Black Box (Systemtheorie), ein geschlossenes System unter Vernachlässigung des inneren Aufbaus, siehe dort auch zur Wortherkunft
- und ein Flugdatenschreiber

Daher wäre auch meine Frage, wieso der ganze Firlefanz?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Gibt es eigentlich einen Standalone-Java-ICQ-clone Allgemeine Java-Themen 19
berserkerdq2 Gibt es eine saubere Dokumentation von Jfoenix? Allgemeine Java-Themen 1
T Verschachtelte For-Schleife gibt falschen Wert zurück, Abbruchbedingung evtl. falsch? Allgemeine Java-Themen 9
E Class.getResourceAsStream() gibt null zurück Allgemeine Java-Themen 2
Tiago1234 CellReference cr = new CellReference("") gibt den falschen Wert zurück Allgemeine Java-Themen 49
F Gibt es mittlerweile eine Alternative zu DaisyDiff Allgemeine Java-Themen 2
Jose05 Gibt es einen Nachteil bei dem JDK 8? Allgemeine Java-Themen 7
H Apache fop -- welche Möglichkeit gibt es um den Fortschritt anzuzeigen (Progressbar) Allgemeine Java-Themen 5
M Warum gibt es Unterschiedliche Kommentar Zeichen Allgemeine Java-Themen 15
Tobero Eclipse Window builder gibt es da sowas wie @ignore? Allgemeine Java-Themen 1
pkm javax.script.ScriptEngineManager gibt mir keine Engine Allgemeine Java-Themen 4
M Openjdk - gibt es auch eine Openjre? Allgemeine Java-Themen 7
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
S Gibt es eine Moeglichkeit die Runtime Ausführung zu analysieren..? Allgemeine Java-Themen 7
R Schlüsselworte "Throw new exception" gibt nicht den String als Fehlermeldung aus Allgemeine Java-Themen 2
F Überprüfen ob es Überschneidungen von Uhrzeiten (vom Typ Calendar) gibt Allgemeine Java-Themen 10
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
LimDul Spezifkation, wann es deprecation Warnings gibt Allgemeine Java-Themen 1
C Variablen == gibt immer false aus. Allgemeine Java-Themen 2
E gibt es BigDouble in Java ? Allgemeine Java-Themen 14
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
R JDK installieren Gibt es ab 2019 überhaupt noch Java? Allgemeine Java-Themen 6
P JSpinner gibt leeren Wert zurück Allgemeine Java-Themen 5
B Gibt es eine Funktion die den Datentyp einer Variablen ermittelt? Allgemeine Java-Themen 8
N Gibt es etwas allgemeineres as Object? Allgemeine Java-Themen 16
T Input/Output Konsole gibt trotz printf keine Umlaute aus Allgemeine Java-Themen 17
H NetBeans geotools 15 oder 16 - welche Abhängingkeiten gibt es? Welche Jars brauche ich? Allgemeine Java-Themen 4
P Prüfen ob es Variable mit Namen gibt der als String übergeben wird Allgemeine Java-Themen 7
S Welche Java Techologien gibt es fürs Frontend Allgemeine Java-Themen 4
V Gibt es eine Möglichkeit die Internet auslastung mit Java auszulesen Allgemeine Java-Themen 11
L Gibt es in Java einen Property Editor? Allgemeine Java-Themen 2
S gibt testText nicht aus Allgemeine Java-Themen 3
R Es gibt keine dummen Fragen (hab ich mal gehört) Allgemeine Java-Themen 11
L Methoden Methode gibt mir beim verschlüsseln mit RSA 0 bytes aus ? Allgemeine Java-Themen 1
H Gibt es einen großen Unterschied zwischen Java 6 und Java 7? Allgemeine Java-Themen 3
L Konsole gibt Smileys aus Allgemeine Java-Themen 3
K Gepacktes Jar-File gibt beim Doppelklick eine Exception aus Allgemeine Java-Themen 4
O Collections ListIterator gibt Inhalt von ArrayList nicht aus Allgemeine Java-Themen 3
G Threads Gibt es eine Möglichkeit des Nichtblokierens? Allgemeine Java-Themen 5
C Vergleich von Enums gibt inkorrekte Werte Allgemeine Java-Themen 6
Jats Programm mit CMD Befehl hängt sich auf oder gibt error = 5 aus Allgemeine Java-Themen 4
V Gibt es einen Variablen Cast? Allgemeine Java-Themen 8
R JNI if abfrage gibt immer false zurück. Allgemeine Java-Themen 7
J Eclipse Elipse gibt mir keine Vorschläge mehr :( Allgemeine Java-Themen 6
G Gibt es so eine SortedMap? Allgemeine Java-Themen 21
Z Boolean Abfrage gibt kein Boolean zurück, aber warum? Allgemeine Java-Themen 6
J Warum gibt es keinen Webbrowser auf Java-Basis? Allgemeine Java-Themen 8
E Gibt es Befehle für Kursor auf Konsole ? Allgemeine Java-Themen 3
J Logger gibt nicht alle Level aus Allgemeine Java-Themen 3
B Gibt es einen Unterschied zwischen Java 1.2 und Java 2? Allgemeine Java-Themen 7
J Calendar gibt falsche Wochenanzahl zurück Allgemeine Java-Themen 3
E Gibt es so etwas wie einen Windows Listener? Allgemeine Java-Themen 6
M Gibt es ein Jar - das alle Componente Automatisch anpasst? Allgemeine Java-Themen 14
R Gibt es eine JVM, die besser mit dem Speicher umgeht? Allgemeine Java-Themen 7
G Jarfile gibt keine Textnachrichten aus Allgemeine Java-Themen 2
S [1/2done] Woher bekommt man libarys die es erst ab 1.6 gibt. Allgemeine Java-Themen 10
G Gibt es etwas ähnliches wie den ReadKey bei Pascal? Allgemeine Java-Themen 3
D Gibt es indizierte Arrays in Java? Allgemeine Java-Themen 3
S Decimalformat gibt falsche Werte aus Allgemeine Java-Themen 3
G Da Jikes nicht mit java 5 geht, gibt es eine andere. Allgemeine Java-Themen 4
M Gibt es ein Foren-System, dass in Java programmiert ist? Allgemeine Java-Themen 51
N char.At gibt Zeichenkette aus. aber leider 2x Allgemeine Java-Themen 10
G was gibt es für mögliche datenbanken? Allgemeine Java-Themen 6
TRunKX Gibt es ne fertige Java Funktion die Dateien vergleicht? Allgemeine Java-Themen 4
S auf einmal gibt es einen fehler. Allgemeine Java-Themen 3
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
W Haben Konstruktoren in Java eigentlich immer mindestens einen Parameter? Allgemeine Java-Themen 4
M Warum eigentlich JAVA? Allgemeine Java-Themen 18
D Zufallsgererator der eigentlich keiner ist Allgemeine Java-Themen 24
M Wie schwer kann es eigentlich sein. Allgemeine Java-Themen 7
M Was produzieren die ganzen Java-Programmierer eigentlich so? Allgemeine Java-Themen 23
H wie viel speicher braucht eigentlich ein array? Allgemeine Java-Themen 2
A Was ist eigentlich ein Thread? Allgemeine Java-Themen 3
S Was sind eigentlich Java Beans? Allgemeine Java-Themen 2
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
N LlaMA, KI, java-llama.cpp Allgemeine Java-Themen 39
V Java-Codierungsherausforderung: Navigieren durch die Macken der Datumsmanipulation Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
M java: unexpected type Allgemeine Java-Themen 2
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
BetziTheRealOne Java PKIX path building failed as non Admin Allgemeine Java-Themen 15
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
KonradN Java 21 Release Allgemeine Java-Themen 5
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
K Java Anwendung machen Anleitung Allgemeine Java-Themen 5
G java.io.listFiles() Allgemeine Java-Themen 3
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
K Java-Projekt Allgemeine Java-Themen 11
K Java-Projekt Allgemeine Java-Themen 0
ruutaiokwu Welcher Browser unterstützt heutzutage noch Java Applets? Allgemeine Java-Themen 5
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
rode45e Java Threads Allgemeine Java-Themen 4
G java.io.listFiles() Allgemeine Java-Themen 2
N Java Dynamic Proxy Allgemeine Java-Themen 3
N Leichte Java Gegner Ki Allgemeine Java-Themen 10
A Java modul Problem Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben