Ich schreibe eine kleine eingebettete Sprache für ein anderes Projekt. Obwohl die Spieleentwicklung nicht die ursprüngliche Absicht war, sieht sie allmählich gut aus, und ich denke, ich werde sie irgendwann in diesem Sinne entwickeln.
Ohne irgendwelche Details preiszugeben (um Voreingenommenheit zu vermeiden), bin ich neugierig zu wissen:
Welche Funktionen lieben Sie in einer Skriptsprache für die Spieleentwicklung?
Welche Aspekte fanden Sie am nützlichsten, wenn Sie Lua, Python oder eine andere eingebettete Sprache wie Tcl oder Guile als primäre Skriptsprache in einem Spielprojekt verwendet haben?
Sprachmerkmale (Lambdas, Klassen, Parallelität)
Implementierungsfunktionen (Leistungsoptimierungen, JIT, Hardwarebeschleunigung)
Integrationsfunktionen (C-, C ++ - oder .NET-Bindungen)
Oder etwas ganz anderes?
Antworten:
Ich suche zwei Dinge - Geschwindigkeit und Integration. Normalerweise gehören die beiden zusammen und mit Vertrautheit. Leider gibt es für C ++ so gut wie keine Sprachen, die Geschwindigkeit und Integration bieten. Ich habe Lua benutzt und es saugte schrecklich. Ich habe die ganze Zeit damit verbracht, Bindungen zu schreiben und bei weitem nicht genug Zeit, um tatsächlich Code zu schreiben.
Sprachmerkmale? Das Einbetten einer Skriptsprache dient nicht dazu, dass sie über dynamische Funktionen verfügt, die meine Originalsprache nicht hatte, sondern dass sie zur Laufzeit interpretiert werden kann . Darüber hinaus ist mir das wirklich egal, solange es im Grunde genommen funktionsfähig ist, dann ist das in Ordnung - und passt zu meiner Hostsprache (in diesem Fall C ++). Erstaunlicherweise scheitern Sprachen, die für die Integration in Hostanwendungen ausgelegt sind, jedoch vollständig an der Integration .
Benötige ich Co-Routinen? Nein, ich brauche keine Co-Routinen. Benötige ich dynamisches Tippen? Nein, ich muss wissen, welche Typen aus meiner Skriptsprache auf mich zurückkommen, und da mein gesamter vorhandener Code auf sehr starker Typisierung basiert, möchte ich wirklich, dass mein Skriptcode dies auch respektieren kann. Benötige ich Müllabfuhr? Nein, meine Typen verwalten bereits ihre eigenen Ressourcen, und ich möchte definitiv deterministische Zerstörung. Will ich gehen Nein, ich möchte Ausnahmen werfen.
Das Problem, das ich fand, war, dass im Grunde alle vorhandenen Skriptsprachen so konzipiert waren, dass sie C und nicht C ++ erweitern und das C ++ - Modell in vielerlei Hinsicht nicht richtig unterstützen. Außerdem haben sie eine völlig andere Semantik. Wie um alles in der Welt werde ich übersetzen?
shared_ptr
, was automatische deterministische Zerstörung ist, in eine von Müll gesammelte Umgebung übersetzen? Sie können beliebige Wrapping-Bibliotheken schreiben. Sie werden nicht ändern, dass die zugrunde liegende Sprachsemantik nicht mit der Sprache kompatibel ist, die Sie damit erweitern möchten. Wie kann ich sicherstellen, dass diesvoid*
der richtige Typ ist? Wie kann ich mit Vererbung umgehen? Wie werfe und fange ich Ausnahmen? Es funktioniert einfach nicht.Eine gute Skriptsprache für C ++ wäre statisch typisiert, Wertesemantik, deterministisch zerstört, Ausnahmen auslösen und abfangen und meine Destruktoren / Konstruktoren / Kopierkonstruktoren respektieren, da dann alle meine Typen einfach funktionieren, nett und einfach, und die resultierende Sprache wird es sein schnell und unterstütze alle meine ursprüngliche Semantik, einfach zu binden.
quelle
Für webbasiertes Spielen sind drei wichtige Faktoren für mich:
Ich mag Perl besonders, teilweise weil ich bereits mit der Sprache vertraut bin und weil ein Webservermodul wie mod_perl2 einen enormen Leistungs- und Integrationsvorteil bietet - mod_perl2 speichert eine kompilierte Version der Skripte im RAM (die nur interpretiert werden) Erstes Laden), wodurch es einen großen Geschwindigkeitsvorteil gegenüber anderen interpretierten Sprachen ohne Kompilierungsoptionen bietet. Außerdem wird es mit einer funktionsreichen API, die den Zugriff auf viele sehr leistungsstarke Funktionen ermöglicht, in den Apache HTTPd-Server integriert.
Diese Faktoren können für die webbasierte Spieleentwicklung hilfreich sein (und wenn Datenbankzugriff erforderlich ist, hilft das Zwischenspeichern der Datenbankverbindungen, die Antwortzeiten für Benutzer weiter zu verkürzen). Natürlich ist dies möglicherweise nicht die idealste Lösung für alles, da jede Sprache ihre Vor- und Nachteile hat, aber es hat immer gut für meine Bedürfnisse funktioniert.
quelle
In der Reihenfolge der (abnehmenden) Wichtigkeit angeordnet:
quelle