Ich bin Entwickler eines Spiels und arbeite gerade an der Entwicklung einer plattformübergreifenden Multithread-Engine für unser Unternehmen. Wohl eines der mächtigsten Werkzeuge in einer Game Engine ist das Scriptsystem. Daher bin ich auf der Suche nach einer neuen Skriptsprache, die in unsere Engine integriert werden kann (derzeit mit einer relativ einfachen Inhouse-Engine).
Die wichtigsten Funktionen für das gewünschte Skriptsystem (in der Reihenfolge ihrer Wichtigkeit) sind:
Ich habe bisher Erfahrung in der Integration / Verwendung von Lua, Squirrel (OO Sprache, basierend auf Lua) und habe eine ActionScript 2 virtuelle Maschine geschrieben.
Also, welches Scriptsystem empfehlen Sie, dass es die obigen Kriterien erfüllt? (Und wenn möglich, könnten Sie auch einen Vergleich mit anderen Skriptsprachen, die Sie eventuell haben, veröffentlichen oder verlinken)
Danke, Gewähren
Wir hatten bisher viel Glück mit Squirrel . Lua ist so beliebt, dass es auf dem besten Weg ist, ein Standard zu werden.
Ich empfehle Ihnen, sich mehr Gedanken um Speicher als Geschwindigkeit zu machen. Die meisten Skriptsprachen sind "schnell genug" und wenn sie langsam werden, können Sie einige dieser Funktionen immer wieder nach C ++ verschieben. Viele von ihnen brennen jedoch viel Speicher durch und auf einem Konsolenspeicher ist eine noch knappe Ressource als CPU-Zeit. Unbegrenzter Speicherverbrauch bringt Sie schließlich zum Absturz, und wenn Sie nur 4 MB für den Interpreter reservieren müssen, müssen Sie 30 Texturen aus dem Fenster werfen, um Platz zu schaffen.
Lua hat den Vorteil, dass es von einer Reihe von namhaften Videospielentwicklern und einer guten Basis von sachkundigen Entwicklern getestet wurde, dank der Annahme von Blizzard-Activision als die primäre Plattform für die Entwicklung von World of Warcraft-Add-Ins.
Lua passt sehr gut zu Ihren Bedürfnissen. Ich nehme sie in der gleichen Reihenfolge.
Lua ist eine der schnellsten Skriptsprachen. Es ist schnell zu kompilieren und schnell zu starten.
Lua kompiliert auf jeder Plattform mit einem ANSI C Compiler, der alle Spieleplattformen von afaik enthält.
Lua kann vorkompiliert werden, aber als sehr dynamische Sprachen sind die meisten Fehler nur zur Laufzeit erkennbar. Auch vorkompilierter Code (als Bytecode) ist oft größer als der Quellcode.
Es gibt viele Lua / C ++ - Bindewerkzeuge.
Multi-Threading wird nicht unterstützt (Sie können nicht auf eine einzelne Instanz des Interpreters aus mehreren Threads zugreifen), aber Sie können mehrere Instanzen des Interpreters haben, einen pro Thread oder sogar einen pro Spielobjekt.
>Lua werden seit Jahren in der Videospielindustrie eingesetzt. Leicht und effizient.
ChaiScript und Falcon sind gute Kandidaten Ihre Bedürfnisse und mit höherer Sprache als Lua, aber mit weniger Geschichte und Community-Unterstützung.
Lua , und dann LuaJIT für zusätzliche Geschwätzigkeit!
erwarten Sie nicht zu viel von automatischen C ++ - Bibliotheken, die meisten sind langsam und restriktiv. besser machen Sie Ihre eigene Bindung für Ihre eigenen Objekte.
wie für Nebenläufigkeit, entweder LuaLanes , oder rollen Sie Ihre eigenen. Wenn Ihr C ++ - Programm bereits Multithread ist, rufen Sie einfach separate LuaStates von jedem Thread auf und verwenden Sie bei Bedarf Ihre eigenen C ++ - Shared-Strukturen als Kommunikationskanäle.
Wie Sie vielleicht schon wissen, ist die häufigste Antwort in Lua "rollen Sie Ihre eigenen", und es ist oft der beste Rat! außer wenn es um Bindungen zu gängigen C / C ++ - Bibliotheken geht, ist es in diesem Fall sehr wahrscheinlich, dass es bereits eine gibt.
Wenn Sie es noch nicht angeschaut haben, würde ich vorschlagen, dass Sie sich Angelscript anschauen.
Ich habe es erfolgreich in einer plattformübergreifenden Umgebung (Windows und Linux mit nur einer Neukompilierung) verwendet und es ist so konzipiert, dass es sich gut in C ++ integrieren lässt (sowohl Objekte als auch Code).
Es ist leicht und unterstützt Multi-Threading (in dem Sinne, dass die Frage gestellt wurde), funktioniert gut und kompiliert zu Byte-Code, der im Voraus erledigt werden könnte.
Beginnen Sie mit Python .
Wenn du beweisen kannst, dass du mehr Geschwindigkeit brauchst, dann schau dir Stackless Python an. Das ist, was EVE Online für ihr Spiel verwendet.
JavaScript ist möglicherweise eine vernünftige Option, da die Anstrengungen zur Optimierung der verschiedenen Implementierungen für die Verwendung in Webbrowsern sehr intensiv waren.
Tags und Links c++ scripting performance cross-platform