Gibt es eigentlich Java Source Code Interpreter..?

S

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.
 
S

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 ....
 
H

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.
 
S

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.
 
S

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".
 
S

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.
 
H

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
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
L 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
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
O Input/Output java.io.File beenden Allgemeine Java-Themen 5
S Java class direved from inner class Allgemeine Java-Themen 6
O Leerzeichen und Umlaute im Pfad einer Java Applikation machen Probleme Allgemeine Java-Themen 13
Gaudimagspam CSV-Datei auslesen in Java Allgemeine Java-Themen 7
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
H Java SDK unter 32 Bit Allgemeine Java-Themen 5
P Unterschied Java SE und Java EE Allgemeine Java-Themen 2
B Methoden Java Getter und Setter Methoden Allgemeine Java-Themen 9
M Registry Autostart Eintrag mit Java erstellen (über Windows cmd) Allgemeine Java-Themen 7
M Registry Autostart Eintrag ertstellen mit Java (Runtime.getRuntime().exec()) Allgemeine Java-Themen 0
S Java-Task-Management-Tool für Windows und Mac selber programmieren Allgemeine Java-Themen 4
M java.util.prefs.Preferences "not visible" Allgemeine Java-Themen 7
M Website Quelltext mit Java einlesen Allgemeine Java-Themen 10
J Java Filechooser Speichern Allgemeine Java-Themen 8
Dann07 Java-Programm findet DLLs nicht! Allgemeine Java-Themen 20
F Fehlermeldung: java.lang.NoClassDefFoundError: org/apache/commons/net/ntp/NTPUDPClient Allgemeine Java-Themen 6
T Java-Anfänger möchte professionell coden lernen Allgemeine Java-Themen 23
M Java 2D Array für ein Grid erstellen ? Allgemeine Java-Themen 2
H Java Dom Childelemente von de Childelemente von den Childelement bekommen Allgemeine Java-Themen 1
P USER Management in SQL übergreifend auf JAVA Programm Allgemeine Java-Themen 41
platofan23 Wie .txtDatei im Java Eclipse-Projekt bzw. in der Jar speichern? Allgemeine Java-Themen 7
Z Welches GUI Framework für Java ist aktuell? Allgemeine Java-Themen 16
I Java und XML Allgemeine Java-Themen 10
K Java Programmfluss Allgemeine Java-Themen 13
R Delete files before creating new from temp using Java file method Allgemeine Java-Themen 1
N Byte Array in Java "dekomprimieren" Allgemeine Java-Themen 3
N Convert.FromBase64 von C# für Java Allgemeine Java-Themen 11
C Java RMI Client - Server Allgemeine Java-Themen 0
Ullenboom Ein neues Java-Buch entsteht, willst du helfen? Allgemeine Java-Themen 7
N fixed-keyword von C# für Java Allgemeine Java-Themen 6
G Java Reflections Allgemeine Java-Themen 6
bueseb84 Java : Cannot find Symbol Allgemeine Java-Themen 7
N E-Mail per Java verschicken Allgemeine Java-Themen 2
Y Java Bruttoberechnen + runden Methode Allgemeine Java-Themen 1
Y Java Methoden unterschiedliche Zahlenreihen Allgemeine Java-Themen 2
M java.io.EOFException bei einem DataoutputStream ?! Allgemeine Java-Themen 2
D Java Kuriositäten / Rätsel Allgemeine Java-Themen 9

Ähnliche Java Themen

Anzeige

Neue Themen


Oben