2008-09-19 22 views
12

Verwenden Sie Luabind, toLua ++ oder eine andere Bibliothek (wenn ja, welche) oder gar keine?Wie kleben Sie Lua an C++ - Code?

Für jeden Ansatz, was sind die Vor- und Nachteile?

Luabind:

+0

upps ... korrigiert :) – steffenj

+0

Es gab eine Diskussion dieses Themas [hier] (http://stackoverflow.com/questions/63784/implementing-scripts-in-c-app#63865). – Mark

Antwort

4

Um meine eigene Frage teilweise zu beantworten, wenn Sie wissen, wie über diese peinliche Template Syntax Methoden und Klassen zu binden, ist es ziemlich einfach und leicht, neue Bindungen hinzuzufügen. Luabind hat jedoch erhebliche Auswirkungen auf die Leistung und sollte nicht für Echtzeitanwendungen verwendet werden. Ungefähr 5-20 Mal mehr Aufwand als das Aufrufen von C-Funktionen, die den Stack direkt manipulieren.

1

Ich benutze keine Bibliothek. Ich habe SWIG verwendet, um eine C-Bibliothek vor einiger Zeit zu entlarven, aber es gab zu viel Overhead, und ich höre auf, es zu benutzen.

Die Profis sind bessere Leistung und mehr Kontrolle, aber es braucht mehr Zeit zu schreiben.

1

Verwenden Sie Raw Lua API für Ihre Bindungen - und halten Sie sie einfach. Lassen Sie sich von der API selbst (AUX-Bibliothek) und Bibliotheken von Lua-Autoren inspirieren.

Mit etwas Übung ist rohe API die beste Option - maximale Flexibilität und minimaler unnötiger Overhead. Du hast was du willst und nicht mehr, so wie du es brauchst.

Wenn Sie große Bibliotheken von Drittanbietern binden müssen, verwenden Sie automatische Generatoren wie tolua, tolua ++ (oder rollen Sie Ihre eigenen für den speziellen Fall). Es würde dich von der manuellen Arbeit befreien.

Ich würde nicht empfehlen, Luabind zu verwenden. Im Moment ist die Entwicklung ins Stocken geraten (aber sie beginnt wieder ins Leben zurückzukehren), und wenn Sie einen Eckfall treffen, sind Sie vielleicht auf sich allein gestellt. Auch Luabind verwendet stark Template-Metaprogrammierung. Dies kann (und darf nicht) inakzeptabel sein, abhängig vom Standpunkt.

+0

Abgesehen von Leuten, die Compiler verwenden, die TMP nicht unterstützen können, sehe ich nicht, warum das nicht akzeptabel wäre.Was die Entwicklung angeht, gibt es einige (ich habe kürzlich eine Verbesserung/Korrektur beigesteuert), und meistens finde ich es nicht zu wenig wichtig. Es ist jedoch nicht sehr aktiv, wahr. –

5

Ich kann nicht wirklich mit der "roll your own" Stimme stimmen, bindende Grundtypen und statische C-Funktionen zu Lua ist trivial, ja, aber das Bild ändert sich der Moment Sie beginnen, mit Tabellen und Metatables; Dinge werden sehr schnell kniffliger.

LuaBind scheint den Job zu machen, aber ich habe ein philosophisches Problem damit. Für mich sieht es so aus, als ob deine Typen bereits kompliziert sind, die Tatsache, dass Luabind stark templatiert ist, macht deinen Code nicht einfacher zu folgen, da ein Freund von mir sagte: "Du brauchst Herb Shutter, um die Kompilierungsnachrichten herauszufinden" . Plus es hängt von Boost ab, plus Kompilierzeiten bekommen einen ernsthaften Treffer, usw.

Nach ein paar Versuchen scheint Tolua ++ das Beste zu sein. Tolua scheint nicht sehr in der Entwicklung zu sein, wo Tolua ++ gut zu funktionieren scheint (plus die Hälfte der 'Tolua' Tutorials gibt es tatsächlich 'Tolua ++' Tutorials, vertraue mir darauf :) Tolua erzeugt das richtige Zeug, die Quelle kann geändert werden und es scheint, mit komplizierten Fällen umzugehen (wie Schablonen, Vereinigungen, namenlose Strukturen, usw., usw.)

Das größte Problem mit Tolua ++ scheint, das Fehlen der richtigen Tutorials zu sein, voreingestellt Visual Studio-Projekte, oder die Tatsache, dass die Befehlszeile ein wenig schwierig zu folgen ist (Ihr Pfad/Dateien können keine Leerzeichen haben - zumindest in Windows) Und trotzdem, für mich ist es der Gewinner.