Infos zu Einbindung Scriptsprachen in Anwendungen?



  • Hallo,

    ich habe eine kleine Anzahl Anwendungen in die ich eine Scriptsprache einbinden will um einige Funktionalitäten für einen versierten Anwender veränderbar zu machen.

    Weil ich es aus anderes kommerzieller Software kenne und es am "üblichsten" zu sein scheint würde ich das gerne mit VB-Script machen. Bin aber auch für andere Sprachen offen, solang sie nicht zu exotisch sind und meine Anforderungen erfüllen:
    Benutzbar mit: C(++), C# und Delphi. Unterstützung von OO auf VBSript-Niveau.

    Kann mir jemand Infos dazu geben? Ich google micht schon zu Tode, finde aber nichts. wahrscheinlich weil ich nicht mal die richtigen Begriffe dafür kenne.

    Kennt sich jemand aus?



  • ich hab mich zwar nie damit beschaeftigt, aber ich denke, du brauchst wohl einen interpreter für die gewünschte scriptsprache in deinem programm. entweder du schreibst den selbst, oder lädst dir einen fertigen.

    mfg,
    julian



  • Mit nem interpreter ist es ja nicht getan. Der muß auch in irgendeiner Weise Zugriff auf die Funktionalität der Anwendung bieten.



  • Ist eigentlich ganz einfach. Du mußt dir erstmal eine einbettbare Scriptsprache aussuchen. Es gibt da mehrere Kandidaten, die dafür sehr gut geeignet sind (nicht alle Scriptsprachen sind das):

    - AngelScript (C++-ähnliche Script-Sprache)
    - Lua (seeehr schnelle prozedurale Script-Sprache)
    - Python (OO-ScriptSprache)

    Was anderes würde ich für C++ nicht ausprobieren. AngelSpript ist speziell für C++-Einbettung gedacht. Tutorial wie man das macht, findet man auf der Homepage.

    Lua ist zwar hauptsächlich prozedural, bringt aber in seiner 100 KB LIB-Datei eine eigene VM mit JIT mit. 😮 👍 Sehr fix und wird auch in bekannten Spielen eingesetzt. Einbindung in C++-Programme findet man im lua-Wiki.

    Python kann man auch in C++ einbinden. Hier ist Boost.Python zu empfehlen, das ist eine Template-Library, die es einfach macht, C++ und Python zu verbinden.



  • Jester schrieb:

    Mit nem interpreter ist es ja nicht getan. Der muß auch in irgendeiner Weise Zugriff auf die Funktionalität der Anwendung bieten.

    Ja, das ist meistens mit zwei drei Zeilen Code erledigt. Vorallem bei Lua sehr einfach. Die Aufrufe gehen sogar in beide Richtungen: ich kann von C oder C++ aus eine Lua-Funktion aufrufen, aber auch eine Lua-Funktion kann meine C oder C++ Funktionen aufrufen. Ist schon ziemlich idiotensicher einfach. 😃

    Tutorial zur Lua-Einbindung: http://www.gamedev.net/reference/programming/features/lua/

    Wer eine OO-Scriptsprache einbinden will, muß ein wenig mehr machen, aber da gibt es mittlerweile auch viele Libs und Tools, die einen unterstützen.



  • <a href= schrieb:

    www.swig.org">
    Supported Languages
    The following scripting languages were supported in the final SWIG 1.1 release.

    * Tcl 8.0 and newer versions.
    * Python 1.5 and newer.
    * Perl 5.003 or newer.
    * Guile 1.3.4 and newer.

    The following languages are also supported in SWIG 1.3.6 onwards.

    * Java JDK 1.1 and newer.
    * Ruby.
    * Mzscheme.

    PHP support was added in SWIG 1.3.11.
    Objective Caml (Ocaml) and Pike support was added in SWIG 1.3.14.
    Support for C# and the Chicken scheme compiler was added in SWIG 1.3.18.
    Support for Allegro CL and Modula-3 was added in SWIG-1.3.22.
    Support for Lua, CLISP and Common Lisp with UFFI was added in SWIG-1.3.26.
    Support for Common Lisp with CFFI was added in SWIG-1.3.28.
    Support for R was added in SWIG-1.3.30.

    Any newer versions of these languages should be assumed to be supported unless otherwise indicated. There is also SwigJS, a JavaScript module for SWIG, swig4d for the D programming language and SWIGEiffel for Eiffel.



  • Mit luabind ist die Einbindung von lua in C++-Programme ziemlich einfach. Und es ist sogar OOP möglich. Man kann z.B. in lua von C++-Klassen ableiten und umgekehrt.
    Ich habe es selbst schonmal eingesetzt und würde es jederzeit wieder tun 😉



  • All das kann Boost.Python auch (bis auf das ableiten von Pythonklassen, was aber imho auch nicht sinnvoll ist).



  • Ich weiß, luabind ist boost.python nachempfunden. Allerdings ist Python auch wesentlich schwergewichtiger als lua.


Anmelden zum Antworten