スクリプト言語で何を求めていますか?[閉まっている]


10

別のプロジェクト用に少し埋め込み言語を書いています。ゲーム開発は本来の目的ではありませんでしたが、うまく適合しているように見え始めており、私はいつかその流れで開発するつもりです。

(バイアスを避けるために)詳細を明らかにせずに、私は知りたいと思っています。

ゲーム開発用のスクリプト言語のどの機能が好きですか?

Lua、Python、またはTclやGuileなどの別の埋め込み言語をゲームプロジェクトの主要なスクリプト言語として使用した場合、どの側面が最も有用だと思いましたか?

  • 言語機能(ラムダ、クラス、並列処理)

  • 実装機能(パフォーマンスの最適化、JIT、ハードウェアアクセラレーション)

  • 統合機能(C、C ++、または.NETバインディング)

  • それともまったく違うものですか?


2
難読化:難読化できる場合は、おそらく柔軟性も高いためです。たとえば、Perlを例にとります。これは、300bpsモデムからのラインノイズによって引き起こされた出力のように見えます(誰かが家の反対側にある電話を手に取ったとき)。速い。;-P
ランドルフリチャードソン

1
@ランドルフ:良い点。難読化の唯一の問題は、若い言語ではない安定した言語に依存する傾向があることです。0.10で機能する難読化ツールは、0.11では機能しない場合があります。
Jon Purdy

@ジョン・パーディ:正解(+1)また、難読化されたコードの保守が難しくなる側面もあります。ただし、重要なのは、難読化によって、言語がどれほど柔軟であるかを示す興味深い指標が1つ提供されるということです。
ランドルフリチャードソン2011

5
@ランドルフ:いつperlはそのようにならないのですか?
Ken

1
@Joe Wreschnigそれは「どちらを選ぶべきか」ということであり、これは「スクリプト言語の優れた機能」です。
共産主義者のアヒル

回答:


4

スピードと統合という2つのことを探しています。通常、2つは一緒になり、親しみがあります。残念ながら、C ++の場合、速度と統合を提供する言語はほとんどありません。私はLuaを使用しましたが、それは恐ろしく吸いました。私はずっとバインディングを作成するのに費やしましたが、実際にコードを作成するのに十分な時間はありませんでした。

言語機能?スクリプト言語を埋め込むことの目的は、元の言語にはなかった不規則な動的言語機能を持たせることではなく、実行時に解釈できるようにすることです。それが基本的に機能的である限り、私はそれを超えて本当に気にしません、そしてそれはそれで問題なく、私のホスト言語(この場合はC ++)に適合します。ただし、驚くべきことに、ホストアプリケーションに統合するように設計された言語は、統合に関する部分を完全に失敗させます。

コルーチンが必要ですか?いいえ、コルーチンは必要ありません。動的なタイピングは必要ですか?いいえ、スクリプト言語から返された型を知る必要があります。既存のコードはすべて非常に強力な型指定に基づいて構築されているため、スクリプトコードでもそれを尊重できるようにしたいと思っています。ガベージコレクションは必要ですか?いいえ、私のタイプはすでに独自のリソースを管理しており、私は間違いなく確定的な破壊を望んでいます。後藤はいい?いいえ、例外を投げたいのですが。

私が見つけた問題は、基本的に、既存のすべてのスクリプト言語はC ++ではなくCを拡張するように設計されており、多くの点でC ++モデルを適切にサポートしていないことです。それに加えて、セマンティクスはまったく異なります。shared_ptr決定的な自動破壊であるを、ガベージコレクションされた環境にいったいどのように変換しますか?必要なラッピングライブラリを作成できます。拡張しようとしている言語と互換性のない基本的な言語セマンティクスを変更することはありません。これvoid*が正しいタイプであることをどのように確認できますか?継承はどのように処理できますか?例外をスローしてキャッチするにはどうすればよいですか?機能しません。

C ++に適したスクリプト言語は、静的に型付けされ、値のセマンティクス、確定的に破壊され、例外をスローしてキャッチし、私のデストラクタ/コンストラクタ/コピーコンストラクタを尊重します。高速で、私のオリジナルのセマンティクスをすべてサポートし、バインドが簡単です。


私が最近書いたラッパーライブラリのようなものを試して、同じ問題のいくつかに対処する必要があります。shared_ptrsなどをうまく使用でき、タイプセーフであり(とにかくできる限り)、コードまたはLua環境によって制御されるものの寿命を望むかどうかを決定できます。継承をサポートします。通常のLua APIと非常に似ています。バインディングの作成について不満があるかどうかはわかりませんが、99%の時間でバインディングを作成するためにvimスニペットを使用しています。
Alex Ames

2

Webベースのゲームの場合、私にとって3つの重要な要素は次のとおりです。

  • 親しみやすさ
  • 速度
  • 統合

私は特にPerlが好きです。これは、言語にすでに精通していることと、mod_perl2のようなWebサーバーモジュールを使用すると、パフォーマンスと統合に大きなメリットがあるためです。mod_perl2は、コンパイルされたバージョンのスクリプトをRAMに保持します(これは、最初の読み込み)これにより、コンパイルオプションのない他のインタープリタード言語よりも速度が大幅に向上し、Apache HTTPdサーバーに、非常に強力な機能へのアクセスを提供する機能豊富なAPIと統合されます。

これらの要素は、Webベースのゲーム開発に役立ちます(データベースアクセスが必要な場合は、データベース接続をキャッシュすることで、ユーザーの応答時間をさらに短縮できます)。もちろん、これはすべての言語に最適なソリューションではない可能性があります。それぞれの言語には長所(および短所)があるためですが、常に私のニーズに適しています。


2

重要度の高い順に並べます:

  • 一目で読み取れます。実際、これは私が使用したいすべての言語の要件ですが、スクリプト作成では間違いなく重要です。つまり、スクリプトは、定義上、「コア」コードよりも頻繁に変更されます。したがって、LISPやPERLはありません。
  • 簡潔さ。スクリプトは常に作成および書き換えされており、多数の「ボイラープレート」コードを入力するのは非効率的です。
  • 簡単なデバッグ。ブレークポイント、ステップスルーなどが望ましい。
  • 私が選んだ「コア」テクノロジーとの簡単な統合。ゲームにC ++を使用している場合は、LUAのように、優れたC ++バインディングが必要です。ゲームがC#の場合は、CLIベースの言語(C#、IronPython、Boo)を選択します。
  • 言語機能:連想配列、コルーチン、おそらくラムダ。実際、これは主にスクリプトを何に使用するかによって異なります。AIスクリプトは、たとえば初期化スクリプトとは異なります。
  • 良いドキュメント。C#には専用のMSDN全体があり、Booにはソースしかありません。そのため、C#の方がはるかに優れています。
  • 良い開発環境。VSまたはEclipseは毎回Notepadに勝っています。

+1これはかなり役立ちます。ありがとうございます。これ以上の議論があるかどうか待ってみますが、あなたはそれをうまくカバーしたと思います。
Jon Purdy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.