Lua C++ Binding



  • Du kannst dir evtl. Siedler 5 oder Worms (Mayhem) ansehen. Beide
    steuern den KI über Lua.

    0x0ERROR



  • 0x0ERROR schrieb:

    Du kannst dir evtl. Siedler 5 oder Worms (Mayhem) ansehen. Beide
    steuern den KI über Lua.

    Hilfreichster Post Ever 😉

    Trotzdem danke.


  • Administrator

    knivil schrieb:

    Nein, fuer mich lohnten sie sich nicht. Ich habe die LuaAPI direkt benutzt, ist aber aufwendiger.

    Sind diese zwei Sätze nicht irgendwie widersprüchlich?
    Ich meine LuaBind lohnt sich schon nur für das Einbinden von einer einzigen Funktion.

    knivil schrieb:

    Innerhalb von Lua wird dieser Zeiger als light user data herumgereicht.

    Ich empfehle auf Light Userdata eher zu verzichten, da sie keine Metatabellen haben können. Lieber ein Userdata nehmen, welches die grösse eines Zeigers hat und darin dann den entsprechenden Zeiger speichern. Schon nur damit man die zusätzliche __gc Metamethode hat, macht dies reizvoll.
    Dank LuaBind kann man das aber auch alles vergessen, da es für einem automatisch erledigt wird.

    Grüssli



  • Gut, hier ein Nachtrag: Es ist sehr lange her, dass ich Lua + C++ benutzt habe. Ich habe keine Ahnung, wie der Stand der Tools heute ist. Damals waren sie fuer mich unbefriediegend. Warum, tja leider ist es schon etwa 6 Jahre her. Wenn light userdata keine Metatabellen verwenden kann, dann habe ich kein light user data verwendet. Den Quelltext habe ich leider nicht mehr um nachzusehen. Aber da du garbage collection erwaehnst, ich wollte/musste das selbst in die Hand nehmen.



  • hallo,

    ich hätte zu diesem thema auch mal eine frage:

    0x0ERROR schrieb:

    Du kannst dir evtl. Siedler 5 oder Worms (Mayhem) ansehen. Beide
    steuern den KI über Lua.

    0x0ERROR

    ich nehme an, dass diese spiele einen eingebauten script-interpreter haben? oder wie wird das sonst gemacht? ich hab ein script, das z.b. npcs steuert.

    soweit ich übrigens weiß, wird für sowas auch mal python verwendet.

    warum schreibst du dir nicht einfach selbst einen interpreter?



  • Ja, wenn ich ein Auto will, baue ich mir auch einfach selbst eins!


  • Administrator

    pythonnnn schrieb:

    ich nehme an, dass diese spiele einen eingebauten script-interpreter haben? oder wie wird das sonst gemacht?

    Ja, die haben einen eingebauten Script-Interpreter. Lua ist z.B. darauf ausgelegt, dass man es in ein anderes Programm einbinden kann.

    pythonnnn schrieb:

    soweit ich übrigens weiß, wird für sowas auch mal python verwendet.

    Ja, z.B. Civilisation hatte Python eingesetzt. Aber das spielt hier keine grosse Rolle, da Shade Of Mine anscheinend Lua nehmen will.

    pythonnnn schrieb:

    warum schreibst du dir nicht einfach selbst einen interpreter?

    Gegenfrage: Wieso diese Menge an Zusatzaufwand betreiben, wenn man fix fertige Lösungen nehmen kann?

    Grüssli



  • Dravere schrieb:

    Ja, z.B. Civilisation hatte Python eingesetzt. Aber das spielt hier keine grosse Rolle, da Shade Of Mine anscheinend Lua nehmen will.

    Prinzipiell bin ich offen für alternativen - aber ich brauche nur etwas minimales was sehr schnell starten soll. Und da ich kaum Features brauche, bietet Lua alles was ich brauche:
    Simple Einbindung in meine Anwendung
    Wenig Memory Footprint
    Schnelles Initialisieren des Interpreters

    Ich habe mir auch Pawn angesehen, wie Rapso in einem anderen Thread mal vorgeschlagen hat - aber da war mir die Doku zu wenig. Im zweifelsfall nehme ich lieber die Standardlösung. Und das scheint Lua zu sein.

    Python wäre mir zu fett.

    PS:
    Mir geht es um den allgemeinen Ansatz. Die konkrete Implementierung ist dann der nächste Schritt. Mein aktueller Punkt ist: was sind die generellen Ansätze für diese Aufgabenstellung.

    Wie gesagt: ich starte auf eine gewisse Useraction sehr oft und sehr viele Lua-Scripte die jeweils minimal und trivial sind. Oft tun sie garnichts anderes als nur ein print() aufzurufen.


  • Administrator

    Shade Of Mine schrieb:

    Wie gesagt: ich starte auf eine gewisse Useraction sehr oft und sehr viele Lua-Scripte die jeweils minimal und trivial sind. Oft tun sie garnichts anderes als nur ein print() aufzurufen.

    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.

    Grüssli



  • ok, also dann halt keinen eigenen interpreter 🙄

    allerdings könnten von der arbeit andere leute profitieren, wenn es anscheinend keinen gescheiten interpreter/parser gibt.

    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.

    Ethon schrieb:

    Ja, wenn ich ein Auto will, baue ich mir auch einfach selbst eins!

    Dravere schrieb:

    Gegenfrage: Wieso diese Menge an Zusatzaufwand betreiben, wenn man fix fertige Lösungen nehmen kann?

    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.



  • Im professionellen Bereich gibt es Deadlines. Und warum soll es fuer jeden scheiss einen Iso/IEEE/whatever-Standard wie bei C geben, wenn sowieso nur einer es implementiert?



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


  • Administrator

    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üssli

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


Anmelden zum Antworten