Scriptsprache einbinden



  • Hi,

    gibt es ein Framework oder eine bestehende Lib mit welcher ich in C++ eine Skriptsprache "einbinden" kann, ohne dass auf dem System des Users viel mitinstalliert werden muss?

    Was ich erreichen will: Ein Programm soll beliebig, während der Laufzeit, durch usergeschriebene Scripts erweitert werden. Dabei soll aber mit dem Programm nach Möglichkeit keine komplette Umgebung einer Scriptsprache mitgeliefert werden müssen, einfach um den Aufwand möglichst klein zu halten.

    Wenn ich das richtig verstanden habe muss ja z.B. bei boost.python auf dem Rechner wo das Programm läuft auch Python installiert sein, oder z.B. bei Ruby eine Ruby-Umgebung. Das möchte ich eigentlich vermeiden.

    Grüße


  • Administrator

    Ich verwende dazu gerne Lua. Dann muss man nur die Lua DLL mitausliefern. Zudem hat man mit Lua verdammt viele Möglichkeiten.

    Grüssli



  • Lua ist ein guter Kandidat. Es gibt auch Bindings für C++.

    Was ich auch sehr interessant finde, ist Angel\1:
    http://www.angelcode.com/angelscript/
    Vorteil ist, das es sehr C++-ähnlich ist und man nicht viel neues lernen muß. Auch ist es speziell als Scriptsprache für C++ entwickelt und kennt deshalb Klassen.



  • Dravere schrieb:

    Ich verwende dazu gerne Lua. Dann muss man nur die Lua DLL mitausliefern. Zudem hat man mit Lua verdammt viele Möglichkeiten.

    Lua ist in Ordnung. Kann man auch gleich statisch linken, das Binary wird wahrscheinlich unter 200k haben.
    🙂



  • Hab mir mal beides ein bisschen angekuckt. Ist ja gar nicht so einfach zu entscheiden. Lua hat natürlich die breitere Unterstützung, allerdings spricht die Nähe zu C/C++ für AngelScript..

    Was für C++-Bindings sind denn für Lua empfehlenswert? Gibt da ja auch ne recht große Zahl..



  • rhrby schrieb:

    Hab mir mal beides ein bisschen angekuckt. Ist ja gar nicht so einfach zu entscheiden. Lua hat natürlich die breitere Unterstützung, allerdings spricht die Nähe zu C/C++ für AngelScript..

    Was für C++-Bindings sind denn für Lua empfehlenswert? Gibt da ja auch ne recht große Zahl..

    Ich kann dir nur luabind http://www.rasterbar.com/products/luabind/docs.html empfehlen. Ist wirklich sehr angenehm zu nutzen und nimmt dir sehr viel Arbeit ab.
    Wer Boost.Python kennt, wird damit ebenfalls sehr schnell zurecht kommen.
    Du musst nur schauen, dass du mit bjam zurecht kommst, da hatte ich zu Beginn so meine Probleme.

    Gruß Gate



  • Kommt denke ich darauf an, was du machen willst. Wenn es mehr in Konfigurations-Scripts geht, würde ich Lua empfehlen. Auch wenn du eher einem Endanwender (der kein Progger ist) eine Makrosprache (ähnliche Makros in MS-Excel) anbieten willst, wäre auch Lua ratsamer. Lua ist von der Syntax einfacher.

    Wenn du mehr technisch scripten willst, also komplexere Vorgänge, würde ich AngelScript nehmen. Da es durch seine OOP mehr kapselt und somit komplexere Scripte erlaubt. Durch die C-lastige Syntax ist es aber natürlich für den Beckermeister, der ein Makro schreiben will, nicht so der Burner. 😉 Aber wenn das nicht die Zielgruppe ist, gibt es meiner Meinung nach nichts besseres für einen eingefleischten C++ler. 😃



  • Mit Flusspferd könntest du auch JavaScript als Scriptsprache einbinden. Flusspferd basiert auf dem JavaScript-System von Mozilla Firefox und das passt alles in eine Library. Der User braucht also kein Python, Firefox oä installiert haben.

    http://flusspferd.org/docs/cpp-tutorial-firstprogram.html



  • @ Artchi: Ich würde mir das AngelScript ja auch gerne mal ansehen; doch irgendwie finde ich einfach kein Tutorial oder Examples zum Script selber? Wie ich AngelScript in C++ verwalte steht dort ja ausführlich, aber zum Script selber finde ich GAR NICHTS.

    Gruß



  • Auf der Doku-Seite gibt es The script language.



  • Es gibt eine Scriptsprache V1, die man per DLL einbinden kann.
    https://v1-script.net

    Hier ist ein VC++ 2010 Projekt, das die Einbindung von V1 Script beispielhaft aufzeigt.
    https://v1-script.net/download/v1-0.96-dev-win32-dll.zip


  • Mod

    Das kommt 10 Jahre zu spät.


Log in to reply