Skripting in Java [geschlossen]

8

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?

    
eflles 17.10.2008, 09:23
quelle

11 Antworten

5

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.

    
caustic 17.10.2008, 09:38
quelle
9

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.

    
thork 18.10.2008 14:23
quelle
7

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. : -)

    
Chris Jester-Young 17.10.2008 09:37
quelle
4

Wie wäre es mit Jython?
Ссылка

    
Viktor Elofsson 17.10.2008 09:30
quelle
4

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.

    
Chii 17.10.2008 10:19
quelle
2

Kurze Version

Verwenden Sie keine Skriptsprache! Konzentrieren Sie sich stattdessen auf die Konfigurierbarkeit (was ein Nichtprogrammierer gut kann).

Längere Version

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:

  • Wähle eine reife Sprache, die schon eine Weile existiert.
  • Automatisches Testen, Debuggen und Editieren wird sehr viel Spaß machen, bis Sie Ihre eigenen Tools / Plugins erstellen / anfangen, in der VM herumzuhacken.

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?

    
Jonas Byström 08.05.2009 08:10
quelle
1

Sie haben einige Optionen:

Möglicherweise sogar BeanShell ( Ссылка )

Ich bin selbst ein Python-Fan, also würde ich Jython empfehlen, aber das sind wahrscheinlich alle vernünftigen Optionen.

    
Parand 17.10.2008 09:39
quelle
1

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.

    
Lex 17.10.2008 16:21
quelle
1

LuaJ scheint eine gute Möglichkeit zu sein, Lua in Java einzubetten:

Ссылка

    
Ben Ziegler 24.03.2010 13:39
quelle
0

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.

    
Anthony Roy 17.10.2008 12:06
quelle