Forum: PC Hard- und Software Interpreter mit LLVM IR oder C als Zwischensprache?


von Lars (Gast)


Lesenswert?

Moin,
hat hier jemand Erfahrung mit Interpreterentwicklung in LLVM?

Ich bin dabei, ein kleines Tool zu entwickeln, das Filter berechnen kann 
(sowohl digital als auch analog). Dieses Tool wird einen Interpreter 
enthalten, der recht allgemeine numerische Ausdrücke (alles, was es im 
wissenschaftlichen Taschenrechner gibt, dazu Gleichungssysteme lösen 
usw.) verarbeiten muss.

Meine Recherche hat ergeben, dass LLVM dafür ideal sein sollte. 
Allerdings müsste ich die LLVM IR Sprache erst lernen.

Wo liegen die Nachteile, wenn ich die eingegebenen Befehle erst in C 
code übersetze, den C code dann "live" kompiliere und sofort ausführe? 
Macht der LLVM nicht dassselbe mit LLVM IR als Zwischensprache?

Ob die Übersetzung ein paar Sekunden länger dauert oder nicht, spielt 
keine Rolle. Wichtig ist, dass der endgültige, ausführbare Code mit 
maximaler Geschwindigkeit läuft.

Wünsche allen einen schönen Sonntag
Lars

von Clemens L. (c_l)


Lesenswert?

Lars schrieb:
> Wo liegen die Nachteile, wenn ich die eingegebenen Befehle erst in C
> code übersetze, den C code dann "live" kompiliere und sofort ausführe?
> Macht der LLVM nicht dassselbe mit LLVM IR als Zwischensprache?

Natürlich.

Direkt LLVM-IR einzusetzen ist nur dann sinnvoll, wenn du damit 
Optimierungen ausdrücken kannst, die in C nicht (oder nicht so einfach) 
möglich wären. Bei deinem Kenntnisstand ist das wahrscheinlich nicht der 
Fall.


Und C ist portabler als LLVM. (Was dir wahrscheinlich egal ist, sonst 
hättest du nicht gefragt. :)

: Bearbeitet durch User
von Lars (Gast)


Lesenswert?

Es scheint ja so, dass mit der LLVM das Parsen, IR-Befehle generieren 
und Ausführen des generierten Codes alles im RAM passieren kann.

Bei C muss ich erst eine C-Datei schreiben, diese mit gcc (z.B.) in eine 
Objektdatei übersetzen, die übersetzte Datei als dll/so-library linken 
und dann ausführen. Das sind viele Dateisystemzugriffe. Oder geht das 
Kompilieren und Ausführen auch in C komplett im RAM?

Lars

von derElf (Gast)


Lesenswert?

Eine C Datei im RAM zu erstellen und dann in einen C Compiler zu "pipen" 
sollte nicht das Problem darstellen.

von Lars (Gast)


Lesenswert?

derElf schrieb:
> Eine C Datei im RAM zu erstellen und dann in einen C Compiler zu "pipen"
> sollte nicht das Problem darstellen.

Tja, wenn man den C Compiler dann auch noch im RAM installiert und ihm 
eine RAMDisk als Dateisystem gibt, dann macht es vielleicht auch Sinn, 
die C-Datei über Sockets zum Compiler zu schicken.
Sonst nicht.

von Lars (Gast)


Lesenswert?

Clemens L. schrieb:
> Direkt LLVM-IR einzusetzen ist nur dann sinnvoll, wenn du damit
> Optimierungen ausdrücken kannst, die in C nicht (oder nicht so einfach)
> möglich wären. Bei deinem Kenntnisstand ist das wahrscheinlich nicht der
> Fall.

Du hast Recht. Bei meinem gestrigen Kenntnisstand war das nicht der 
Fall. Aber man lernt ja dazu.

Fakt ist, dass bei typfreien dynamischen Sprachen wie Octave der LLVM 
wesentliche Vorteile bietet. Anhand fertiger Beispiele konnte ich den 
Performancevorteil testen, den LLVM bietet, indem es Funktionsaufrufe 
für die Argumentlisten optimiert, die tatsächlich zur Laufzeit 
vorkommen.
Wenn ich stattdessen jedesmal den C-Compiler anschmeiße, wird der 
Interpreter reichlich ... ... sagen wir mal ... "speziell".

Dies nur für alle, die sich auch irgendwann mit LLVM beschäftigen 
wollen, und denen irgendein Haiopei was von fehlenden Kenntnissen 
einreden will. Es ist alles möglich und überhaupt nicht schwer :)

Lars

von Andreas H. (ahz)


Lesenswert?

Lars schrieb:
> Dies nur für alle, die sich auch irgendwann mit LLVM beschäftigen
> wollen, und denen irgendein Haiopei was von fehlenden Kenntnissen
> einreden will. Es ist alles möglich und überhaupt nicht schwer :)

Dann sei doch mal so lieb und schlau mich mal auch etwas auf :-)

Ich dachte immer LLVM-IR hat SSA Forms und man kann die nur mit IIi 
ausführen, was aber 1. ein JIT compiler & 2. ein Cmdlinetool ist. Gibts 
das etwa auch als LIB fct ?
Ansonsten müsstest Du den SSAs ja erst mal "physischen" Speicher 
zuordnen, inkl. dem ganzen Tanz des Memory managments. Oder ?

Bei Deinem Projekt ist mir aber auch allgemein etwas unklar. Warum 
nimmst Du nicht eine "fertige" Skriptsprache. Die lassen sich doch meist 
einfach in den eigenen Code einbauen.
Oder noch einfacher: Nimm Octave. Da hast Du doch eigentlich fast alles 
dabei. Matlab hat auch passende Toolboxen. USW. USW.

Grüße
Andreas

von Lars (Gast)


Lesenswert?

Andreas H. schrieb:
> Dann sei doch mal so lieb und schlau mich mal auch etwas auf :-)

Wozu? Spiel einfach weiter Bullshit-Bingo. Damit kommt man auch bei 
größter Ahnungslosigkeit hervorragend durchs Leben, wenn man außer 
Dummschwätzen nichts leisten muss.

von Andreas H. (ahz)


Lesenswert?

Lars schrieb:
> Spiel einfach weiter Bullshit-Bingo.

Brauch ich nicht.
Bei mir läuft es ja :-D

Grüße
Andreas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.