Realityこの広告は、90日以上更新していないブログに表示しています。ゲーム業界マルチプラットホームライブラリを作ってみた。※リンク先pdf有名なSEGA本の著者、平山さんによる今年のCEDECでの講演内容である。見る内容的には十分読み応えのあるのだが、一部釈然としないところもある。4.9章の「標準ライブラリや言語機能について」というところから。標準が嫌なのかゲームプログラマはなぜかC++標準ライブラリを使わない。いや、使おうとする人もいるが何かと理由をつけて使わない。その理由が大体困ったような内容が多い。リンク先でも書かれているが、vectorにはpush_back()やerase()がある。これは安全性と性能の両面で危険な面がある。「erase()は必要ない」と書かれている。私は「は?」と首をかしげたくなってしまった。確かにvectorのerase()は何も考えずに使用すると膨大なコピーコストが発生してしまう。vectorにはErase-Removeイディオムというものを使用することにより効率的な要素の削除を行う事も出来る。それでもなお、「erase()は使うな!削除はpop_back()だけにしろ!」というのならさすがに私はその人を疑ってしまう。newに対して異常に保守的なのも気になる。考えなしにnewを行うのは危険ではあるが、vector程度のnewでコストが気にかかるようなことはまずない。そもそもvectorではreserve()をしておけば余分なメモリを確保することもないはず。結局動的なコンテナやそれに近いものを実装する際にはメモリを確保することになるので、わざわざ自分で作る理由はない。そもそもそれは問題ではない私はSTLを使うことによって大きな問題に出喰わすような事は過去に一度もありませんでした。ボトルネックになるようなところはコリジョンなどもっと根本的な部分が殆どで、メモリはプールから使用する場合も多く、そういった場合は大量にnewしようがmalloc()しようがさほどのコストにもならない。そこに対して異常に保守的になってしまい、使用禁止にしてしまうには勿体なさすぎる。STLはただのコンテナではなく、"コンテナ"、"アルゴリズム"、"イテレータ"、"関数オブジェクト"を統合的に扱う事の出来る素晴しい標準ライブラリです。それぞれを理解して使用すれば圧倒的に楽をする事が出来るし、間違いなく自信にも繋がる。ゲームプログラマはC++を理解しようとしない人が多い。理解しようとしないのか必要性を感じないから。そんなものはなくてもゲームは作れるし、アプリケーションも作れます。そこを理解しようとするために時間を使うならと勉強をしようとしない。確かに平山さんの言っている事はもっともでもあるし、自分自身でも正しいというつもりもないと言っている。そこで使う側に理解してもらおうという努力を怠ってしまっているのは悲しい事実である。C++は膨大な仕様で面倒な事が多すぎるというのも確かだが、なぜそこで理解しようと思わずに思考停止してしまうのか。現実的に言えば上の人にそんな事は言えないし、押し付ける事は出来ない。問題が出るくらいなら出る前から対策しておくべきという事だろう。悲しい事だが、これが紛れもない現実である。C++を勘違いしてる人の多さ殆どのゲームプログラマは本当のC++を知りません。C++を過去のプログラミング言語と思っている人も沢山います。それは勘違いであり、今なお先進的な言語でもあり、最も古臭い言語でもあるのです。本当のC++はプログラマの負担を最低限に抑えるし、現実的な問題の解決法も持っています。それを知らない人達はC++をdisり、理解しようともせずにコードを書いてしまい、「C++なんてクソ!」と言い放ちます。そんな日々をみるたびに私は悲しく思います。月別アーカイブはてなブログをはじめよう!alweiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。