Ich und einige Freunde schreiben ein MORPG in Java, und wir würden gerne eine Skriptsprache verwenden, um z. um Aufgaben zu erstellen.
Wir haben keine Erfahrung mit Skripten in Java. Wir haben Python benutzt, aber wir sind sehr unerfahren. Einer von uns hat auch Javascript benutzt.
Welche Skriptsprache sollten wir verwenden? Welche Skriptsprache sollten wir nicht verwenden?
Java unterstützt eine Vielzahl von (Skript-) Sprachen, einige sind in Wikipedia hier und hier . Sie sollten wahrscheinlich Sprache mit leistungsstarken DSL- und Metaprogrammierungsfunktionen wählen, wie z. B. Clojure .
Aber wenn Sie etwas einfacheres brauchen, könnte JavaScript eine brauchbare Alternative sein.
Ich bin verantwortlich für ein ziemlich großes hybrides Java / Jython-System. Wir verwenden Java für die Kern-API-Entwicklung und verbinden dann Java-Objekte mit Jython. Dies ist in einer wissenschaftlichen Computerumgebung, in der wir in der Lage sein müssen, Ad-hoc-Datenanalyse-Skripte schnell zusammenzustellen.
Wenn ich heute dieses System von Grund auf neu starten würde, würde ich nicht Jython als Skriptsprache wählen. Ich mag Python gut, aber ich habe häufig peinliche Unterschiede zwischen dem Python-Typ-System und dem Java-Typ-System. Wenn Sie beispielsweise nur eine Hashtabelle verwenden möchten, sollten Sie ein Python-Wörterbuch oder eine Java-HashMap verwenden? Die Entscheidung hängt davon ab, ob Sie die Datenstruktur nur lokal in Python-Code verwenden oder sie über die Java-Grenze hinweg übergeben. Jython macht eine gewisse Art von Zwang für Sie, aber es ist nicht perfekt. Es ist ärgerlich, sich über solche Probleme Gedanken machen zu müssen, wenn der Zweck der Verwendung einer Skriptsprache überhaupt darin besteht, Ihre Produktivität zu steigern.
Ich nehme an, dass JavaScript oder JRuby ähnliche Probleme haben würde. Heute würde ich eine Skriptsprache wählen, die speziell auf die JVM ausgerichtet ist und das Java-Typsystem nutzt. Die offensichtlichen Kandidaten sind Groovy und Beanshell; Groovy scheint in letzter Zeit an Dynamik gewonnen zu haben, also würde ich genau hinsehen.
Ich stimme Viktors Jython-Vorschlag zu. Anders als das und JavaScript (das Sie erwähnt haben und in Java 6+ über das javax.script
-Paket integriert sind), Groovy und JRuby sind auch einen Blick wert.
Übrigens sollten Sie sich Wyvern ansehen, ebenfalls ein MMORPG, das in Java geschrieben ist und Jython für Skripting verwendet. Steve Yegge , sein Autor, hat von Zeit zu Zeit viel zu sagen. : -)
Was ist mit der Erstellung Ihrer eigenen spezialisierten Skriptsprache? Wenn Ihre App mit Java geschrieben wurde, können Sie ANTLR ( Ссылка ) verwenden, um Ihren Sprachanalysecode zu erstellen.
Der Grund, warum ich das sage, ist, dass eine allgemeine Skriptsprache möglicherweise zu viel Power liefert (weil das Skript nur für Quests verwendet werden soll, nehme ich an).
Aber wenn deine eigene Sprache zu hart ist, dann funktioniert jeder der obigen Vorschläge - du musst nur herausfinden, wie man die Laufzeit des Spiels in das Skript bindet. Ich empfehle auch Lua ( Ссылка ) als eine andere Wahl, die viele Spiele verwenden.
Verwenden Sie keine Skriptsprache! Konzentrieren Sie sich stattdessen auf die Konfigurierbarkeit (was ein Nichtprogrammierer gut kann).
Ein oft genutztes Argument für , eine Skriptsprache zu haben, ist, dass weniger Programmierer weniger triviale Aufgaben ausführen können. Glauben Sie nicht, es wird Sie nicht jedes Mal retten, da triviale Aufgaben bereits von echten Programmierern in no time erledigt werden. Streben Sie nach Konfigurierbarkeit statt nach Skripten, und Sie werden ein viel geringeres Risiko haben, über komplexe Algorithmen und Konzepte in die unfähigen Hände von Spieleentwicklern zu geraten. :)
Das Fehlen von Hotswapping (Bearbeiten und Fortfahren) wäre ein Grund gewesen, eine Skriptsprache in einem MMOG zu implementieren (Sie möchten das ganze Spiel nicht für eine geringfügige Codeänderung neu laden), sondern Java mit eingebauter In Hotswap haben Sie wirklich keinen Grund, eine Skriptsprache oben hinzuzufügen.
Ich habe Jahre damit verbracht, über diese Fragen nachzudenken; am Tag habe ich selbst eine komplette Skriptsprache, IDE, VM, Debugger usw. für ein MMOG implementiert. Seitdem bin ich weiser geworden.
Wenn Sie sich immer noch dafür entscheiden, den unendlich beschwerlichen Weg der Nichtwiederkehr zu gehen, beachten Sie Folgendes:
Bisher habe ich noch nie ein DSL gesehen, das die Situation verbessert (ein wartungsfreundlicheres Produkt bekommen). Ich selbst habe Python in meine Indie-Game-Engine integriert, kam aber schließlich zu mir und riss es raus. "Stackless Python" ist nur eine Art zu sagen "nicht erreichbar, aber schnell". Bitte, korrigieren Sie mich, wenn ich falsch liege?
Ich würde Javascript für diesen Zweck empfehlen. Mozilla Rhino Ссылка ist eine hervorragende Implementierung, die perfekt zu Ihren Bedürfnissen passt.
Ich empfehle Javascript über Jython oder JRuby wegen der Vertrautheit. Trivial Javascript folgt einer sehr vertrauten Syntax, die jeder benutzen kann. Wenn jemand jedoch etwas intensiveres tun möchte, ist Javascript eine sehr leistungsfähige funktionale Programmiersprache.
Ich benutze regelmäßig Groovy und Ruby professionell und glaube, dass ihr Zweck am besten ist, um Teile von Anwendungen mit besonders komplexer Logik zu schreiben, wo Java mühsam zu schreiben ist. Javascript ist eine viel bessere Wahl als eine eingebettete, allgemeine Skriptsprache, die in einem Spiel verwendet wird. Ich habe Python nicht benutzt, aber es ist syntaktisch ähnlich wie Ruby und ich würde meinen, dass es auch ähnlich wäre.
LuaJ scheint eine gute Möglichkeit zu sein, Lua in Java einzubetten:
Ich bin ein großer Fan von Python / Jython wegen der sauberen Syntax - was für Sie geeignet ist, wenn Sie etwas Python-Erfahrung haben.
Ansonsten Groovy, das auf Java-Syntax basiert und eine einfachere Lernkurve darstellt, wenn die meisten Ihrer Entwickler Java-Leute sind. Es hat auch den Vorteil einer engeren Verbindung mit der Java-Sprache und den Bibliotheken.
Beanshell ist gut, wenn Sie einfache Skripterstellung im Sinn haben - es unterstützt keine Klassen. Ich glaube jedoch nicht, dass es in den letzten Jahren Unterstützung gefunden hat (der JSR schien es abzuschwächen ...). Das ist vielleicht eine schlechte Wahl, wenn Unterstützung für Sie wichtig ist.
Tags und Links python javascript java scripting-language