Androidで関数型言語はどの程度うまく機能しますか?


10

これは、私が特に適切だと思うこの質問の特別なケースです。

私はAndroid用のゲームに取り組んでおり、libgdxでScalaを使用することを計画しています。私はパフォーマンスの高いゲームを作るつもりですが、必ずしも高性能なゲームではありません。libgdxのガベージコレクションに関するドキュメントを見たところ、次のように思いました。

  1. 関数型プログラミングは、多くの不変オブジェクトを意味します。
  2. したがって、オブジェクトを変更するには、新しいオブジェクトを作成する必要があります。
  3. したがって、多くのオブジェクトがガベージコレクションされ、パフォーマンスが低下します。

これは乗り越えられない問題ですか?Androidの機能的なスタイルで他に重大な問題はありますか?

回答:


3

Scalaを使用しても問題はありませんが、新しいオブジェクトをあまり頻繁に割り当てたくありません。一時停止のないGCは(Androidの)神話に過ぎず、ゲーマーはゲームの不具合が気に入らない。しかし、これはあなたがもっと真剣な言葉を使うことから何の利益も得られないという意味ではありません-実際、あなたはそうすることができます。そして、メインのゲームループでは発生しない「機能的なスタイル」で大丈夫です。また、Android上のScala自体は、いくつかの追加のビルド問題と戦う必要がありますが、一度習得すれば耐えられます。Scalaを関数型言語と呼ぶのはそれほど正確ではありませんが、関数型プログラミングに関連するいくつかの機能があります。


2

ゲーム用?関数型言語は避けてください。彼らのパラダイム全体がゲームとうまくかみ合わない。手続き型のOOP言語は、頻繁な状態変更、明示的なメモリとリソースの管理、多くの場所で役立つデータとモデルの抽象化、一部のシステムでのデータ指向の設計などに対するゲームのニーズによりよく適合します。関数型要素と、真の関数型言語は別のものです。

Androidで最高のパフォーマンスを発揮する関数型言語は、JavaやC ++よりも開発エクスペリエンスが劣ります。それらがすべての言語で優れているためではなく、特定のタスクに適しているからです。仕事とそのすべてに適したツール。

これは、モバイル、PC、コンソールなどに当てはまります。ゲームに関数型言語を使用する人はいません。Naughty Dogは、スクリプトにLISPを使用していますが、コアゲームコードは使用していません。彼らはできません。彼らが試みた場合、それは機能しません。

ほとんどの人が入手する最も近いのはシェーダーです。シェーダーはいくつかの点で機能的ですが、HLSLやGLSLなどの非常に手続き型の言語で記述されています。


>ゲーム用?関数型言語は避けてください。2010年のGoogle AIチャレンジがLispボットによって勝利したことは興味深いことです。ゲームを書くのは良くないかもしれませんが、ゲームのプレイに関しては明らかに便利です。semanticweb.com/...

承知しました。別のユースケース。LISPは、ゲームAIとはほとんど関係のない実際のAIに共通しています。ゲームAIは、プレイヤーをだますことで効率的に選択を行い、インテリジェンスを見て楽しいゲームを作ることです。本当のAIは、実際にインテリジェントな決定を下すことであり、人間の意見は非難されます(人間の観察者はAIのように全体像を見ないことが多いため、スマートは時々馬鹿げているように見えます)。
Sean Middleditch 2013

2
For gaming? Avoid functional languages. Their entire paradigm fails to mesh well with games.実際、関数型プログラミングの趣旨を表現する有名なゲーム開発者からの記事をいくつか読んだことがあります。Tim Sweeneyによるものscribd.com/doc/5687/…があり、John Carmackは関数型言語の評価に積極的に取り組んでいるようで、現在HaskellのWolfenstein 3dの移植を行っています。tinyurl.com/ cnzx57u
James McMahon

また、スクリプトにLispのみを使用するNaughty Dogの引用はありますか?私は、彼らがLispのカスタムの方言を持ち、カスタムコンパイラーがPS2ハードウェアをターゲットにしていて、JaxおよびDexterシリーズの大部分を記述しているという印象を受けました。編集:気にしないでください、gamasutra.com / view / feature / 131394 /… Practically all of the run-time code (approximately half a million lines of source code) was written in GOAL (Game Object Assembly Lisp)
James McMahon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.