ich habe mal wieder eine seltsame Technologie-Frage.
Wir sind dabei unser nächstes Game in unserer SpieleProgAG zu planen und würden gerne potentiell Modding und Scripting Support für eine potentielle Player-Community anbieten (natürlich ist das noch Zukunftsmusik, allerdings muss man sich ja vorher über die benutzten Technologien einigen).
Ich würde also gerne mal ein wenig unsere bisherigen Gedankengänge zusammenfassen und etwas Feedback von Euch bekommen.
Damit das Spiel so performant wie möglich bleibt, soll die "Grund-Engine" in C++ geschrieben sein. Außerdem soll das Game auf Mac, Linux und Windows laufen.
Es soll zum einen Mods geben, die quasi im Hintergrund laufen und im großen Stil das Spiel verändern bzw. erweitern können. Zum anderen soll es Scripts geben, die für sich genommen eher überschaubar sind, allerdings potentiell häufig ausgeführt werden bzw. viele Instanzen haben (z. B. könnte jede Einheit durch ein Script gesteuert werden oder jedesmal, wenn ein bestimmtes Objekt auf den Boden auftrifft, wird ein Script aufgerufen, um das Objekt durch zerbrochene Versionen zu ersetzen. Zum Beispiel.)
Da es mir nicht sinnvoll erscheint, sowohl eine Scripting, als auch eine Modding API zu haben, würde ich gerne nur eine API haben, die für Scripte und für Mods geeignet ist. Insbesondere sollten also Scripte und Mods in der gleichen Sprache geschrieben sein.
Für Modder ist es m.M.n. unzumutbar, in C++ Mods zu schreiben, die nicht nur stabil, sondern auch noch plattformunabhängig laufen.
Zum Entwickeln wäre es am besten, eine Sprache zu haben, die man vernünftig dynamisch (lies: zur Laufzeit) neu interpretieren/kompilieren kann, damit man das Spiel nicht neustarten muss, um Änderungen an Mods/Scripten durchzuführen. Außerdem würde man sich gute Debug-Möglichkeiten wünschen.
Größere Mods können durchaus komplex und anspruchsvoll werden, weswegen die Sprache auch nicht allzu inperformant sein sollte.
TL;DR
Ich suche eine Programmiersprache/Technologie für Skripte und Mods, die:
- Man zur Laufzeit kompilieren kann, bzw. interpretiert ist
- Von möglichst vielen Leuten geschrieben werden kann
- Plattformunabhängig ist
- Kein Performance Bottleneck wird
- Sich gut debuggen lässt
- Sowohl für kleinere Scripte, als auch ganze Mods geeignet ist
- Man gut mit C++ Interop benutzen kann (also gute/schnelle/einfache Kommunikation von und nach C++)
- JVM
+ bietet die Möglichkeit in Java, Scala, Clojure etc. zu programmieren
+ Java ist nach C/C++ die am weitesten verbreitete Sprache
+ es gibt gute IDEs und Tools für Java (inklusive Debugging)
~ Compile Geschwindigkeit soll bei ca. 10k lines per sec liegen, was ausreichen sollte
~ Ausführungsgeschwindigkeit ist nicht die Beste, sollte aber mit JIT akzeptabel sein
- die JVM bläht das Programm auf
- der GC kann einem Ärger bereiten (ich weiß allerdings nicht, wieviel sich dort in den letzten Jahren verbessert hat)
- die C++ Interoperabilität kann zu wünschen übrig lassen (welche Lib würdet Ihr empfehlen/habt Ihr gute Erfahrungen mit? JNI/JNA/...?) - LLVM VM-Kit (http://vmkit.llvm.org/)
+ man könnte nahezu jede Sprache benutzen, die sich nach llvm compilen lässt (inklusive aller JVM und .NET Sprachen)
+ die Ausführungsgeschwindigkeit sollte sehr gut sein
~ ich weiß nicht, wie gut man den Code debuggen kann
~ keine Ahnung bezüglich C++-Interop
- das Projekt ist glaube ich noch sehr jung
- das Kompilieren könnte u.U. lange/länger dauern - Lua
+ sehr einfache Anbindung an C++
+ man kann zwischen JIT und interpretieren entscheiden und damit gut dynamisch Code ändern und Performanz vereinen
~ hat Debug Möglichkeiten, IDE-Features müsste man wahrscheinlich selbst implementieren
- Könnte für große Mods zu unhandlich werden
- Ist nicht allzu sehr verbreitet (allerdings unter Spiele-Moddern wahrscheinlich mehr, als "normale" Sprach-Rankings vermuten lassen, hat da jemand Zahlen?) - .NET/Mono
+ relativ schnell
+ sehr komfortabel (Achtung: meine Meinung)
+ kompiliert ziemlich schnell
~ C++-Interop unter Unix ist mir unklar, unter Windows nur C-style
~ Ist mittlerweile relativ weit verbreitet (auch wegen Unity)
- man hätte wieder ne ganze VM, inklusive .NET Framework dabei