Was ist eine gute Skriptsprache für die Integration in Hochleistungsanwendungen?

7

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:

  • Leistung - MUSS schnell sein & & amp; Skripte aktualisieren
  • Cross-Plattform - Muss relativ einfach auf mehrere Plattformen portiert werden (ein bisschen Arbeit, aber sollte nur ein paar Tage dauern, um auf jede Plattform zu portieren)
  • Offline-Kompilierung - Die Möglichkeit, den Skript-Code offline vorzuspeichern ist fast unerlässlich (hilft bei Dateigrößen und Ladezeiten)
  • Fähigkeit, gut in C ++ zu integrieren - Sollte in der Lage sein, OO-Code innerhalb der Sprache zu unterstützen und diese Funktionalität in C ++ zu integrieren
  • Multithread - nicht erforderlich, aber erwünscht. Es wäre am besten, in der Lage zu sein, getrennte Instanzen davon auf mehreren Threads auszuführen, die sich nicht gegenseitig stören (d. H. Keine Globals innerhalb des zugrunde liegenden Codes, die während des Laufens geändert werden müssen). Critical Section- und Mutex-basierte Lösungen müssen nicht angewendet werden.

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

    
Grant Peters 27.02.2009, 17:38
quelle

10 Antworten

3

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.

    
Crashworks 27.02.2009, 23:21
quelle
9

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.

    
Yes - that Jake. 27.02.2009 17:44
quelle
7

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.

>     
Doub 27.02.2009 17:46
quelle
7

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.

    
Klaim 27.02.2009 17:42
quelle
2

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.

    
Javier 27.02.2009 18:36
quelle
2

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.

    
Anders Hansson 27.02.2009 22:38
quelle
1

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.

    
S.Lott 27.02.2009 17:58
quelle
0

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.

    
quelle
0

Diese kommen Ihnen in den Sinn:

  • Lua
  • Python mit boost :: python
  • MzScheme oder Guile
  • Ruby mit SWIG
greyfade 27.02.2009 20:11
quelle