Scheme、Common Lisp、Clojure、JavaScriptなどの関数型プログラミング言語を使用するゲームエンジンはありますか?
Unity3Dを試しましたが、「JavaScript」は実際にはJavaScriptではなく、厳密に型指定されており、機能しません。
var add : Func<int, int, int> = ...
Scheme、Common Lisp、Clojure、JavaScriptなどの関数型プログラミング言語を使用するゲームエンジンはありますか?
Unity3Dを試しましたが、「JavaScript」は実際にはJavaScriptではなく、厳密に型指定されており、機能しません。
var add : Func<int, int, int> = ...
回答:
.netプラットフォームでXNAを使用する場合は、常にf#またはiron python(はい、わかっています。pythonは機能しません)またはその他の.netified言語を使用できます。
http://fsharpgamedev.codeplex.com/ http://www.ironpython.info/index.php/XNA_Example_with_a_Bouncing_Sprite
編集:Lispで書かれたもう1つのエンジン:http : //code.google.com/p/blackthorn-engine/
書かれているとおりの質問に対する回答はありませんが、特定の使用するエンジンを探すのではなく、「機能的なゲームエンジンが他にないのはなぜですか」と尋ねようとしているのではないかと思います。それが正しい場合は、質問を言い換える必要があります。そうでなければ...無視してください。:)
純粋な機能的アプローチは、ゲームには適していません。ゲーム(およびグラフィックス、物理学、AI)と基本的にすべての状態変化について。これらの問題に対する正しい機能的アプローチは、ループごとに1回、新しい状態全体を計算することです。これは、実際のハードウェアの動作をより直接的にコーディングする場合と比較して、非常に厳しいパフォーマンスペナルティを持ちます。
そのため、プロダクションで機能的なゲームエンジンを目にすることはありません。これは、ゲームエンジンが解決することを意図した問題の大多数にとって、単に間違ったプログラミングパラダイムです。高レベルのスクリプトとゲームロジックコードでも解決する必要のある問題の大部分では、これは間違ったプログラミングパラダイムです。機能的なゲームエンジンを作成することはほぼ確実に可能ですが、使用するのは遅く、難しく、面倒であり、見せびらかすためのきちんとしたデモ/おもちゃであること以外は、実際の目的には役立ちません。
これは、関数型プログラミングがゲームのどこにもないということではありません。C#、Unity JavaScript、さらにはC ++ 11でも、非常に機能的なスタイルのコーディング(適切な場合)を使用しています。一部の非常に具体的な問題は、関数型スタイルで最もよく、または少なくとも最も簡単に解決されます。今日の一般的な言語のほとんどは、「実際の」関数型言語よりも厄介な方法ですが、この形式のプログラミングをサポートしています。通常、機能的アプローチで解決されるこれらの問題は、コアエンジンコードにも、ゲーム自体で実行されるコードにもありません。関数型コーディングは、ツールやオフラインデータ処理(たとえば、モデルや他のアセットのベイク)に非常に役立ちます。また、GPUプログラミングは、アルゴリズムの記述方法が漠然と機能していることも議論の余地があります。
もちろん、これらのオフラインツールをできるだけ高速にしたいので、非常に特殊な状況以外では機能的なアプローチを避けるのが最善です。関数型言語は並列処理に優れていますが、これはいくつかの問題に適していますが、ハードウェアからの抽象化は、非常に非効率的なシングルスレッドパフォーマンスにつながる傾向があります。(LISPのような言語は、純粋な機能ではなく、実際には一般的なLISPはマルチパラダイムであるため、ここでうまく機能します。)ゲームエンジンまたは関連するツールキットにとって絶対的に最悪のことは、コンテンツの反復のボトルネックになることです。アーティストやレベルデザイナーが5分でできることを実行するのに数時間かかる(または理想的にはほぼ瞬時に)多くの機能を備えた豪華なエンジンは、低品質のゲームや予算の拡大によるキャンセルにつながるだけです。
Naugthy Dog社はゲームエンジンでListを使用し、Game Oriented Assembly Lispと呼ばれていました。
いくつかの情報はここにあります:http : //en.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp
一部のコードサンプル:http : //web.archive.org/web/20070127022728/http : //lists.midnightryder.com/pipermail/sweng-gamedev-midnightryder.com/2005-August/003804.html
公共利用はできません。