ゲームを作成するのに最適な関数型言語は何ですか?[閉まっている]


19

私はしばらくの間、関数型プログラミング言語に目を向けてきましたが、実際にそれらに取り組むことをためらっています。しかし、私は少なくとも、その方向を一目見始めて、私が何かの準備ができていることを確認する時が来たと思います。

Haskell、F#、Scalaなどの話を見てきました。しかし、私は言語とそのコミュニティの違いを知らず、特に気にしません。ゲーム開発のコンテキストを除きます。

それでは、ゲーム開発の観点から、どの関数型プログラミング言語がゲームプログラミングに最も適した機能を備えているのでしょうか?たとえば、機能的な言語用の機能的なゲーム開発ライブラリ/エンジン/フレームワークまたはグラフィックエンジンはありますか?ゲーム開発でよく使用される特定のデータ構造を処理する言語はありますか?

結論:機能的ゲームプログラミングに最適な機能的プログラミング言語とその理由

私はこの質問が明確な最良の言語を宣言することを信じる/期待するので、主観的な傾向にもかかわらずCWとマークしていません。


2
「2Dゲームですか、3Dゲームですか?」「ハァッかは、私にはわからない- aieeeeを
サイクロプス

@Cyclopsあー、何?わかりません
...-リケット

@Ricket、部分的には、あなたが話しているゲームの種類、2Dまたは3D(そしておそらくリアルタイムまたはターンベース)を明確にする要求でした。部分的には、最初の部分を不明瞭にしたのはモンティ・パイソンのジョークでした。わー。:)そして、私はゲームのタイプを指定するのが便利だと思います- すべてに完璧な単一の機能言語がなければ、異なることで異なる言語がより良いかもしれません。
サイクロプス

言語で利用可能なさまざまなエンジン/ライブラリを除き、2Dまたは3Dが言語の選択に影響を与えるとは思わない。私は個人的に2Dと3Dの両方に興味を持っているので、この質問を書いているときにどちらかを考えていませんでした。しかし、全体として、2Dおよび3Dゲームは多くの一般的なシステムとデータ構造(オーディオ、入力、AI、プログラム構造、ゲームループなど)を共有しており、2Dに移植可能な3Dゲームが多数あります。ええ、モンティパイソンは見たことがないので、まったく理解できませんでした。:)
リケット

1
最高の言語について明確な答えがあるとは思わない。
Hu胡

回答:


12

Microsoftの.netファミリーの一部であるF#は、ゲームを構築するための素晴らしい基盤であるXNAにアクセスできます。ちょっとしたグーグルで、いくつかのチュートリアル、ビデオ、記事が表示されます。優れたXNAドキュメントも役立ちます。

Haskellのゲームにも動きがありますこちらをご覧ください。おそらくopenGLバインディングを使用しているでしょう。

ScalaはJavaの土地でプレイするため、利用可能なすべてのJavaエンジン/バインディングと統合されます。このSOの投稿を参照してください。

私はHaskellでしか遊んだことがありませんが、各機能言語には独自の特徴があると思います。それぞれに小さなテストゲームを用意して、どれが自分に合っているかを確認する価値があります。

私が言ったように、私は最小限のHaskellの経験しか持っていないので、私は最高のコメントをすることはできませんが、これらのリソースはあなたがうまくいけば始めるべきです。


2
JVMの問題とコンパイラー実装の未熟さの間で、言語自体はそれを十分にサポートしているにもかかわらず、機能スタイルを使用する場合、Scalaのパフォーマンスは受け入れられないことがわかりました。最終的には、F#やOCamlではなく、PythonやRubyと同じくらい高速になります。(Scalaの速度は、より多くのオブジェクト指向/手続き型に対して競争力があります。)

XNAを実行するF#プロジェクトを実際に取得しました(コーンフラワーブルーの空のXNAウィンドウです。コードはF#であり、C#ではありません。
RCIX

8

私はLispと言うでしょう。

少なくともNaughty Dogでスクリプト言語としてゲームで使用されており(または私が思うに)、非常に成熟した言語です。

Lispの利点は、デシリアライゼーションにあります。これは、資産管理と呼ばれるものの主要な部分です。Lispの逆シリアル化は簡単で、コードとデータは1つです。これにより、アセットと動作のファイル形式を簡単に作成できます。json / xml / yaml / binにあるものとAI用の1つのF#ファイルではありません。すべてをs-expressionsとして保存できます。これにより、アセットパイプラインが大幅に簡素化されます。


TBHこれに対してお勧めします。スクリプト言語は、開発者が使用するだけのものではありません。改造マニアは、ゲームを国防省になるでしょう、そしてより速く(()())))()((())Plusは、さえ限り関数型言語が行くように、Lispは難解であるよりも、それらを追い払うだろう何もありません。。
RCIXは、

7
modderを怖がらせることがあなたを心配させるものであるなら、関数型言語を選ぶことはおそらく正しい動きではありません。
ポールウィックス

3
@RCIX&@Joe-Necro Powersがアクティブになります。とにかく、Scheme 教育言語として使用されます。SICPは1冊の本でCS学位の半分のようなもので、多くの学校(最近までMITを含む)で使用され、HTDPはそれほどハードコアではありません。
ジェシーミリカン

1
@RCIX&Joe確かに。lispとschemeは多くの大学で導入されている言語です。
-oberhamsi

1
Lispはあなたが使いたいものではありません。Naughty Dogには1人のLispプログラマが1人いて、彼が辞めるとすべてのエンジンをC ++に移行しました。ある会社の古いエンジンが常に輝かしい例として引きずり出される理由はわかりません=)
パトリックヒューズ

8

実用的な経験を積んだ後、私はClojureに投票します-すでに1つの小さなゲームを作成し、さらに多くのことを計画しています。

理由:

  • 生産性 -Clojureは動的言語です。インタラクティブなREPLスタイルの開発に優れた機能を備えています。たとえば、REPLを使用して、実行中のゲームアプリケーションインスタンス内の状態を照会または変更できます。Clojureのコードもばかばかしいほど簡潔です。Clojureでの生産性は、JavaやC#の3〜5倍だと思います。
  • 不純-Haskellのような純粋な関数型言語の美しさと優雅さに感謝しますが、ゲームプログラミングはプラグマティズムが勝つ厄介な追求です。必要なときに関数に副作用を付けたいと思っていますが、Clojureはこれを許可しています。そうは言っても、ほとんどの場合、慣用的なClojureスタイルは純粋に機能的です。
  • メタプログラミング - 同音異義語としてのClojureのLisp遺産は、メタプログラミング/コード生成に最適です。「言語を拡張」して、独自のDSLを作成したり、biolerplateを削除したりするのは簡単です。Clojureは独自のゲームスクリプト言語であるため、簡単に使用できます。動的なコードコンパイルにより、スクリプトはコアゲームエンジンと同じ速度で実行されます。
  • Javaライブラリへのアクセス。Javaのすべてのサウンド/グラフィックス/ AI /ネットワークライブラリを使用できます。これは、他のほとんどの関数型言語(これらをゼロから記述するか、多くのトリッキーなインターフェイスコードを開発する必要がある場合)に比べて大きな利点です。これは命を救うことができます。
  • クロスプラットフォーム -これはJVMでの実行から無料で提供されますが、素晴らしいボーナスです。
  • パフォーマンス -動的関数型言語の場合、Clojureは可能な限り高速です。常にコンパイルされ、解釈されることはありません。インテリジェントな最適化により、Clojureの低レベルの純粋なJavaコードの速度に合わせることができます。たとえば、Javaプリミティブ配列を使用したり、型ヒントを提供して、コンパイラがパフォーマンスが重要なコードで静的に型指定された関数呼び出しを生成することを保証できます。
  • 並行性 -Clojureには、優れたソフトウェアトランザクションメモリシステムによってサポートされる、並行状態を管理するための優れたモデルがあります。この仕組みの詳細については、このビデオをご覧ください。

私は時間だけではないだろう、私は最先端のを書いていた場合はClojureのはあなたが(私はまだあなたがC / C ++が必要だと思う)最先端の性能を必要とするグラフィックを多用ゲームになることを検討してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.