関数型プログラミング言語を使用するゲームエンジンはありますか?[閉まっている]


10

Scheme、Common Lisp、Clojure、JavaScriptなどの関数型プログラミング言語を使用するゲームエンジンはありますか?

Unity3Dを試しましたが、「JavaScript」は実際にはJavaScriptではなく、厳密に型指定されており、機能しません。


2
私はThreeJSを使用していますが、すばらしいことに満ちていますが、アクティブなコミュニティが不足しているため、ドキュメントは深刻な問題です。
MaiaVictor

5
なぜ関数型プログラミング言語でプログラミングしたいのですか?あなたが直面している問題は何ですか?より具体的にしてください。現状では、この質問は1つの正しい答えを出すには一般的すぎるため、次のような(すべて「等しく」正しい)答えのリストを生成する傾向があります。-Javaゲームエンジンと組み合わせたClojureはどうですか?-それ自体は機能しない言語で関数型プログラミングスタイルを採用するのはどうですか?(CarmackによるC ++の関数型プログラミングを読んでください。)-など
Eric

2
機能とUnity3DのJavascriptがされ、通常の Javascriptを、あなただけの#4.0種類、何かのようにCを使用する必要がありますvar add : Func<int, int, int> = ...
fableal

2
「どのテクノロジーを使用するか」に関するFAQをご覧ください。回答が示すように、この質問はリストを生成するだけです。正解は1つだけではないため、建設的ではありません(「ある」以外)。ここはリストを編集する場所ではありません。
MichaelHouse

2
これは一種の「適切な仕事に適切なツール」の問題です。関数型プログラミングは、変更可能な状態を最小限に抑え、可能な限り排除することに重点を置いています。これは特定のクラスのアプリケーションではうまく機能する可能性がありますが、どのゲームでも機能する方法とはまったく正反対です。
メイソンウィーラー、

回答:




2

書かれているとおりの質問に対する回答はありませんが、特定の使用するエンジンを探すのではなく、「機能的なゲームエンジンが他にないのはなぜですか」と尋ねようとしているのではないかと思います。それが正しい場合は、質問を言い換える必要があります。そうでなければ...無視してください。:)

純粋な機能的アプローチは、ゲームには適していません。ゲーム(およびグラフィックス、物理学、AI)と基本的にすべての状態変化について。これらの問題に対する正しい機能的アプローチは、ループごとに1回、新しい状態全体を計算することです。これは、実際のハードウェアの動作をより直接的にコーディングする場合と比較して、非常に厳しいパフォーマンスペナルティを持ちます。

そのため、プロダクションで機能的なゲームエンジンを目にすることはありません。これは、ゲームエンジンが解決することを意図した問題の大多数にとって、単に間違ったプログラミングパラダイムです。高レベルのスクリプトとゲームロジックコードでも解決する必要のある問題の大部分では、これは間違ったプログラミングパラダイムです。機能的なゲームエンジンを作成することはほぼ確実に可能ですが、使用するのは遅く、難しく、面倒であり、見せびらかすためのきちんとしたデモ/おもちゃであること以外は、実際の目的には役立ちません。

これは、関数型プログラミングがゲームのどこにもないということではありません。C#、Unity JavaScript、さらにはC ++ 11でも、非常に機能的なスタイルのコーディング(適切な場合)を使用しています。一部の非常に具体的な問題は、関数型スタイルで最もよく、または少なくとも最も簡単に解決されます。今日の一般的な言語のほとんどは、「実際の」関数型言語よりも厄介な方法ですが、この形式のプログラミングをサポートしています。通常、機能的アプローチで解決されるこれらの問題は、コアエンジンコードにも、ゲーム自体で実行されるコードにもありません。関数型コーディングは、ツールやオフラインデータ処理(たとえば、モデルや他のアセットのベイク)に非常に役立ちます。また、GPUプログラミングは、アルゴリズムの記述方法が漠然と機能していることも議論の余地があります。

もちろん、これらのオフラインツールをできるだけ高速にしたいので、非常に特殊な状況以外では機能的なアプローチを避けるのが最善です。関数型言語は並列処理に優れていますが、これはいくつかの問題に適していますが、ハードウェアからの抽象化は、非常に非効率的なシングルスレッドパフォーマンスにつながる傾向があります。(LISPのような言語は、純粋な機能ではなく、実際には一般的なLISPはマルチパラダイムであるため、ここでうまく機能します。)ゲームエンジンまたは関連するツールキットにとって絶対的に最悪のことは、コンテンツの反復のボトルネックになることです。アーティストやレベルデザイナーが5分でできることを実行するのに数時間かかる(または理想的にはほぼ瞬時に)多くの機能を備えた豪華なエンジンは、低品質のゲームや予算の拡大によるキャンセルにつながるだけです。


1
参照:Clean Game Library(Clean)およびNikki and the Robots(Haskell)
アンドレスF.

1
この答えはほとんど間違っており、実際の関数型言語に対する非常に不十分な理解に基づいているようです。
CAマッキャン

1
実際のカウンターポイントはありますか?
Sean Middleditch 2013

4
...業界品質のゲームを関数型言語で出荷した経験はどれくらいありますか?経験があれば教えてください。専門知識や権威に訴えることや、個人的な非難ではなく、説明と正当化を伴う声明を発表してください。この種の憤慨と個人的な口論の可能性は、まさにこの質問が閉じられた理由です。
Sean Middleditch 2013

4
あなたは私の口に言葉を入れています。私の専門知識についてのあなたの意見はそのトピックとは全く無関係なので、私は経験レベルを述べていません。個人のスキルレベルを攻撃する時間がある一方で、事実を述べる時間がないと主張しないでください。おそらく本当の修正がありますが、それらを述べる必要があります。「あの男は間違っている」というのは誰にとっても貴重な答えのフィードバックではない。私はあなたが間違っていると主張することができます、そしてそれから私たちは口論の無限で無意味なサイクルを持っています。答えが間違っている理由を教えてください。
Sean Middleditch 2013

0

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

公共利用はできません。


ウィキペディアの説明を見ると、LISPの祖先であるにもかかわらず、GOALが関数型言語ではないことがすぐにわかります。
メイソンウィーラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.