Lua C++ Binding
-
Dravere schrieb:
Wirlich direkt ein
print()
aufrufen? Du hattest gesagt, dass du die Daten aus Lua danach weiterverarbeiten willst, oder? Wieso stellst du dann nicht eine API in Lua zur Verfügung? Über die API kann man Daten aus dem Programm holen, welche zur Verfügung gestellt werden, man kann aber auch wieder Daten zurückgeben.Die API kannst du über C++ Funktionen und Objekte per LuaBind den Lua Skripts zur Verfügung stellen.
Ein eigenes print natürlich.
Und wie gesagt: die meisten Scripte brauchen da nicht viel. Aber es gibt wenige Scripte wo es dann notwendig ist die Daten zu transformieren und zu bearbeiten. Das kommt selten vor, ist aber wichtig dass es möglich ist.Prinzipiell generiert mir Lua Textdateien die weiter verarbeitet werden. Oft ist es ein Textblock der Fix ist, dann macht das Script nur print("Lorem ipsum...") aber ab und zu ist es notwendig dass es generierte Daten (die aus dem C++ teil kommen) als Ausgangsmaterial nutzen muss.
So übergibt C++ zB eine liste an Lua, und Lua formt diese dann entsprechend um, um wieder reinen text zu bekommen. Da gibt es eine Menge an Infos die theoretisch Lua zur Verfügung stehen müssen - auch wenn nur ein sehr kleiner Teil der Scripte diese nutzen wird.
-
lua sprachstandard? schrieb:
allerdings könnten von der arbeit andere leute profitieren, wenn es anscheinend keinen gescheiten interpreter/parser gibt.
Wer sagt denn, dass es keinen guten Interpreter/Parser gibt?
lua sprachstandard? schrieb:
mal schaun... der erste schritt wäre, dass man sich die sprache genau anschaut. gibt es eine art "sprach-standard" wie bei c?
wo find ich den für lua? und wo für python? hab schon ein bissl gegoogelt, konnte aber nix in die richtung finden.Deine Suchfähigkeiten sind ziemlich schlecht.
http://www.lua.org/
http://python.org/lua sprachstandard? schrieb:
Gegenfrage: Was mache ich mal in 30 jahren, wenn es keinen treiber/keine software mehr für meinen digitalen-"video-auf-pc-übertrag"-player mehr gibt? ich schreib mir selbst software. deshalb lernt man doch programmieren. um selbst was zu schaffen.
Das hat überhaupt nichts mit der aktuellen Aufgabenstellung zu tun. Und schreibst du alle Software selbst? Auch dein Betriebsystem? Oder nutzt du Bibliotheken, damit du nicht alles selbst machen muss?
@Shade Of Mine,
Wo genau liegt denn aktuell noch das Problem? Deine zwei Fragen sind somit:
Wrapper verwenden?
Welcher Wrapper verwenden?Um mehr geht es nicht, oder?
Grüssli
-
Dravere schrieb:
@Shade Of Mine,
Wo genau liegt denn aktuell noch das Problem? Deine zwei Fragen sind somit:
Wrapper verwenden?
Welcher Wrapper verwenden?Um mehr geht es nicht, oder?
Es geht um den generellen Ansatz. Keine konkreten Probleme. Eine Minimallösung mit direkt der Lua API und ein kleiner SWIG Test haben schon funktioniert.
Mich interessiert hier lediglich was so die gängigen Varianten sind, das anzugehen. Ob sich so schwergewichte wie SWIG lohnen - oder ob man lieber alles direkt mit der Lua-C-API machen sollte.
Ich habe noch nie Lua in C++ eingebettet und will daher eine Designtechnisch korrekte Lösung haben. Irgendwie zusammenpfuschen wäre ja kein Problem
-
Es ist wie mit allem: Das erste Mal kriegt man es nie richtig hin.
-
knivil schrieb:
Es ist wie mit allem: Das erste Mal kriegt man es nie richtig hin.
exakt
deshalb der thread.
damit die Lösung wenigstens keine ist, für die man sich schämen muss...
-
Gegenfrage: Was mache ich mal in 30 jahren, wenn es keinen treiber/keine software mehr für meinen digitalen-"video-auf-pc-übertrag"-player mehr gibt? ich schreib mir selbst software. deshalb lernt man doch programmieren. um selbst was zu schaffen.
Programmierst du deine Treiber etwa selbst? Am Besten gleich dein ganzes OS?
Für Lua einen eigenen Interpreter zu schreiben ist Mist da der Standardinterpreter extrem ausgereift, gut geschrieben und massiv getestet ist.
-
Dravere schrieb:
Deine Suchfähigkeiten sind ziemlich schlecht.
http://www.lua.org/
http://python.org/
GrüssliDeine Lesefähigkeiten sind ziemlich schlecht.
ich schrieb bereits, dass ich über google gesucht hab. und JA, auf den webseiten hab ich zuerst geschaut.für arroganz und eitelkeit hab ich kein verständnis.
wenn ich damit meine? keine ahnung.Ethon schrieb:
Programmierst du deine Treiber etwa selbst? Am Besten gleich dein ganzes OS?
Für Lua einen eigenen Interpreter zu schreiben ist Mist da der Standardinterpreter extrem ausgereift, gut geschrieben und massiv getestet ist.ich schlimmsten fall: ja.
der begriff "os" ist weit gefasst. auch ein 5 zeiliger assemblercode, der nur code auf dem bildschirm ausgibt, ist ein betriebssystem.
-
hingerotzt& hingeschi schrieb:
der begriff "os" ist weit gefasst. auch ein 5 zeiliger assemblercode, der nur code auf dem bildschirm ausgibt, ist ein betriebssystem.
Nein, ist es nicht.
Und was missfaellt dir an Lua.org? Warst du mit der Dokumentation unzufrieden? Was stoerte dich?
-
hingerotzt& hingeschi schrieb:
ich schlimmsten fall: ja.
der begriff "os" ist weit gefasst. auch ein 5 zeiliger assemblercode, der nur code auf dem bildschirm ausgibt, ist ein betriebssystem.Laut dem Christbaum:
Ein Betriebssystem ist eine Sammlung von Computerprogrammen, die die Systemressourcen eines Computers wie Arbeitsspeicher, Festplatten, Ein- und Ausgabegeräte verwaltet und diese Anwendungsprogrammen zur Verfügung stellt. Das Betriebssystem bildet dadurch die Schnittstelle zwischen den Hardwarekomponenten und der Anwendungssoftware des Benutzers.
-
knivil schrieb:
hingerotzt& hingeschi schrieb:
der begriff "os" ist weit gefasst. auch ein 5 zeiliger assemblercode, der nur code auf dem bildschirm ausgibt, ist ein betriebssystem.
Nein, ist es nicht.
Und was missfaellt dir an Lua.org? Warst du mit der Dokumentation unzufrieden? Was stoerte dich?
na das ich nirgends einen ausformulierten standard finde.
irgendwo muss beschrieben sein, wie die sprache aussieht und aufgebaut ist.
gilt sowohl für lua als auch für python.
doch. ein os ist nicht definiert. nur weil man eine kommandozeile, und keinen bunten fensterchen hat, auf die jeder depp klicken kann (oder auch nicht...), heißt das noch nicht, dass das kein os ist.
cli func1: jmp func1
und da ist es schon, ein mini betriebssystem. es hat natürlich keine funktion, aber das bedeutet nix.
-
Offtopic: Damit das System auch booten kann findet man ein Tutorial
hier: http://www.tutorials.de/content/171-ein-eigenes-kleines-betriebssystem.html0x0ERROR
-
der code oben lässt sich mit nasm kompilieren, außerdem funktioniert er, dafür brauch ich kein tutorial.
einfach mit einem hexeditor einen usb-stick öffnen und die paar bytes manuell reinschreiben. dann system neustarten und vom usb-stick booten.
läuft.
also wo sind jetzt nochmal die standards von lua und python?
-
ja funktioniert schrieb:
also wo sind jetzt nochmal die standards von lua und python?
Als ob ein Standard soviel bedeuten würden. Das ist einfach ein falsches realitätsverständnis. Ein ISO Standard ist auch nur ein Dokument. Und eine genaue Beschreibung der Sprache gibt es sowohl für Python als auch für Lua. Und sowohl für Python als auch für Lua gibt es mehrere miteinander kompatible Implementierungen.
Lua Implementierungen sind zB deutlich kompatibler zueinander als Implementierungen des offizielen C++11 ISO Standards.
Lustig, nicht wahr?
-
Shade Of Mine schrieb:
ja funktioniert schrieb:
also wo sind jetzt nochmal die standards von lua und python?
Als ob ein Standard soviel bedeuten würden. Das ist einfach ein falsches realitätsverständnis. Ein ISO Standard ist auch nur ein Dokument. Und eine genaue Beschreibung der Sprache gibt es sowohl für Python als auch für Lua. Und sowohl für Python als auch für Lua gibt es mehrere miteinander kompatible Implementierungen.
Lua Implementierungen sind zB deutlich kompatibler zueinander als Implementierungen des offizielen C++11 ISO Standards.
Lustig, nicht wahr?
ja WO sind diese beschreibungen? WO ist der ISO-standard? darum gehts doch hier
-
WOOOOOO? schrieb:
ja WO sind diese beschreibungen? WO ist der ISO-standard? darum gehts doch hier
WOOOOO? Nur WOOOOO?? sind die lustigen trolle?
Darum gehts doch hier.PS:
Ein Standard ist keinen pfifferling Wert.
Den Wert bekommt ein Standard durch die Umsetzung von Leuten. Und das ist das essentielle. Mit genug Geld kann alles ein ISO Standard werden, aber praktischen nutzen hat sowas nicht.Die Frage ob Python ISO Standardisiert werden soll, ist eine reine finanzielle Frage. Und ein ISO Standard wäre für Sprachen wie Python sehr schlecht.
-
Shade Of Mine schrieb:
WOOOOOO? schrieb:
ja WO sind diese beschreibungen? WO ist der ISO-standard? darum gehts doch hier
WOOOOO? Nur WOOOOO?? sind die lustigen trolle?
Darum gehts doch hier.PS:
Ein Standard ist keinen pfifferling Wert.
Den Wert bekommt ein Standard durch die Umsetzung von Leuten. Und das ist das essentielle. Mit genug Geld kann alles ein ISO Standard werden, aber praktischen nutzen hat sowas nicht.Die Frage ob Python ISO Standardisiert werden soll, ist eine reine finanzielle Frage. Und ein ISO Standard wäre für Sprachen wie Python sehr schlecht.
ach ihr mit euren trollen, ich seid doch alle paranoid.
sowohl lua als auch python sind sprachen unter freien lizenzen, warum sollte es keine öffentlichen standards geben? es gibt ja nichtmal irgendwelche beschreibungen, nichtmal das. nach welchen standards werden denn die parser und interpreter geschrieben? das würde mich mal interessieren.
es MUSS irgendwo einen standard oder eine genaue beschreibung geben, sonst funktioniert das nicht. das ist mit allen dingen so. wenn alle ihr eigenes ding machen, dann funkioniert nix
-
das hier wäre z.b. was:
http://www.lua.org/manual/5.2/manual.html
ist aber halt nicht genau das, was ich suche.
-
<link> schrieb:
es gibt ja nichtmal irgendwelche beschreibungen, nichtmal das. nach welchen standards werden denn die parser und interpreter geschrieben? das würde mich mal interessieren.
es MUSS irgendwo einen standard oder eine genaue beschreibung geben, sonst funktioniert das nicht. das ist mit allen dingen so. wenn alle ihr eigenes ding machen, dann funkioniert nix
Augen auf und lesen:
http://www.lua.org/manual/5.2/manual.html
http://docs.python.org/3/reference/abbba schrieb:
das hier wäre z.b. was:
http://www.lua.org/manual/5.2/manual.html
ist aber halt nicht genau das, was ich suche.Was suchst du dann? Die ganze Sprache ist dort beschrieben. Inklusive der Standardbibliothek, der API, der Hilfs-API und am Ende sogar noch mit der EBNF Angabe für die Parser. Das ist sogar ausführlicher als der C++ Standard.
Falls da wirklich noch etwas unklar bliebe, kannst ja auch gerne die Referenz-Implementation anschauen gehen.
Grüssli
-
Ich habe mir vorhin den Spaß gemacht, LuaJit und LuaBind in mein Programm reinzufrickeln. Ich muss schon sagen, das geht echt wie geschmiert, Hut ab. Die Schattenseite ist allerdings, dass das alleinige includen von luabind Visual Studio fast in die Knie zwingt. Da geht der CPU-Lüfter meines alten Core 2 Duo los und das Tippen wird streckenweise auch verzögert. Intellisense muss man dann immer zweimal antippen, bis irgendwas kommt. Ich werde morgen mal probieren, dafür einen pch zu generieren...
Das liegt doch hauptsächlich an den ganzen Variadics, die da simuliert werden, hoffe ich? Wenn ja, wäre das mal ein weiterer Grund, warum Microsoft mal über eine Consumer Preview hinaus kommen sollte
-
Okay, luabind hat seine Stärken, aber wenn man die nicht braucht, sorgt es für zuviel Overhead, außerdem funktionieren seine Exceptions nicht so gut in Verbindung mit LuaJit. Ich hätte hier eigentlich zwei Verwendungen für Lua: Einmal eine nicht performance-kritische, bei der aber viel von meinem Programm erreichbar sein sollte, und eine performance-kritische "Echtzeit"-Sache. Nun wäre es toll, wenn ich für das eine LuaJit verwenden könnte und für das andere normales Lua + Luabind. Nun sind die beiden Drop-In-kompatibel. Kann man irgendwie zwei unterschiedliche C++-Übersetzungseinheiten an unterschiedliche Bibliotheken mit gleichem Interface binden? Sodass praktisch die obj-Datei, die der Compiler pro Übersetzungseinheit ausspuckt schon an die zu verwendende Bibliothek gebunden ist?
Andererseits glaube ich gelesen zu haben, dass man bei LuaJit angeben kann, dass es kein Jit machen soll, vielleicht funktionieren dann ja exceptions so, wie man es möchte, dann könnte ich mir Frickeleien ersparen.