|
|||||||||||||||||||||||||||||||||||||||||||||||||||
2012 2010 2009 2008 2007 |
July 11, 2008. 試合前々日
「鉄鼠」読了。僧侶の名前は覚えられないが、今回の再読でようやくストーリーのあらましがわかるようになった。1400ページの全貌を掴むのは結構疲れる。歴史教科の得意な方はこういうストーリーも頭に残りやすいのだろうか。今回も榎木津は格好良かったな。禅の教科書としては最高なので一度お試しあれ。読む気力が続くなら、だが。
仕事の方は設計があらかた終わったのでコーディングに入った。VBでバッチ処理を書くという暴挙にでている。しかしこれは意図的なもの。プロジェクトの取り決め上、C++との2択だったが、今回のバッチのボトルネックはせいぜい子センター側の通信速度であり、CPU的処理速度は問題にならないため、メンテナンスコストを考えVBを選択した。メモリリークの面倒なんか見たくない。Cの良さもよく知ってはいるが、拘りすぎるのはアセンブラに拘りすぎる人と同じなので...。これからはミドルウェアの時代。言語にこだわりを持つのは一部のスペシャリストと、趣味の領域になるだろう。
ここからはマニアックな話。業界人以外はしばらく読み飛ばした方がよいかも。
言語の特色を語るとき、まな板に登るのはオブジェクト指向、動作速度、メモリ管理あたりの話が多い。オブジェクト指向に関しては、あった方がよいだろう、ぐらいで流しておこう。実装のある言語でも、大抵の場合は(ほとんど)オブジェクト指向でない実装をする事は可能なので、あまり議論しても意味がない。
動作速度に関してはCの一人勝ちである。といわれる。しかし実際には頭の良いコンパイラでコンパイルするとJava等のほうが速い場合も多々である。そもそも高級言語においては速度はコンパイラに依存するものであり、言語仕様と速度は語るレイヤが違う。無論Cのほうがプログラマの意図を汲んだコーディングが可能だが、それを言うならアセンブラの方が上だし、マシン語のほうが上だ(ハードウェアで実装すれば最速だがここでは割愛)。つまり、フレームワーク化の進んだ言語ほど重くなるのは、当然のトレードオフである。 ちなみに.NETの速度についていろいろ語られる事があるが、あれはbaristaの記憶が確かなら、Javaのような中間byteコードを吐いた上で、そこからさらにコンパイラを通すため、結局どれで組んでもほぼ同じ速度で動作し、Cの動作速度に近い、と認識している。無論コンパイラの性能に強く依存する事は否めないが。 トレードオフの話でわかるとおり、プリミティブな言語を使ってでも高速化を図る事に意義があるのは、チープなハード環境においてのみである。そしてそれはほぼなくなりつつある。携帯にJavaが搭載され、3Dポリゴンのゲームが動作する時代なのだから、もはやコアな組み込みプログラマ以外に速度を過剰に意識する必要はないだろう。
最後にメモリについてだが、昨今の高級言語のメモリは良く判らないタイミングで開放される。コーディングスタイルによっては確保されるサイズも不明なことが多い。それを欠点に上げる人は多いが、これは利点である。手動で管理する事のわずらわしさから抜け出すための努力が高級言語化だからだ。 そもそも細かい単位でメモリの確保・開放を行なうとメモリの断片化が起こりやすい。本気でメモリの利用の効率化が図りたいなら「malloc freeをこまめにやります!」レベルではなく、まとまったメモリ領域を確保した上で、その中に効率よくデータを配置する事で断片化も避けるべきだ。そうでなければ「使えない」メモリ空間が増えるはずである。果たしてC#やJavaのメモリ管理に異論を唱えるCプログラマにそこまで気を使える人がどれぐらいいるだろうか。一方VMなどを使う言語の場合、最初にVM用のメモリが確保され、必要に応じて大きな単位で再確保される。当然無駄は多いが断片化も少ないはずだ。しかしそもそもwindows系OSにおいてメモリの確保は相対アドレスで行なわれる。したがってVMやコーディングからまとまった領域を確保しても、絶対アドレス指定を行なっているわけではないため。物理的には断片化が起こっている可能性がある(それどころか物理的にはHDDに書き込まれている可能性もある)。つまり、過剰な努力は無駄な事がわかる。
結局のところプログラムの歴史は人間が楽をする方向に進んできたので、遅くても楽な方を選ぶのが本流だろう。速度が必要なときに、必要に応じて少し大変な言語を選べばよい。超高速を求めると、専用ハードを造る事になるわけだ。必要もないのにより高速な言語を選ぶのは時間の無駄である。その究極の形は人の手による手計算である。「遅いじゃん」と言われそうだが、CPUの速度が0でも計算ができるので、CPU負荷から考えれば最速の処理方法。これが極限値であるが、もはやプログラムですらない。
なお、天才と趣味の人には上記の理論は適用されない。
夜は大会の準備をしながらゲド戦記を鑑賞。「息子は酷い」と親を引き合いに評価するのはやめてやれよ、フラットな目で見てやれよ、と思って鑑賞した所....うーん、確かにちょっとと言う出来。CG以外の部分の描写の古臭さ、カット割の拙さなどが目に付く。何よりも総集編的なのがアウト。勇気あるストーリーの割愛や、3部作化などが必要だったのではないかな。なにより息子さんは、宮崎駿の真似をしない方がよい。宮崎駿は絵は古いが、カットの見せ方が天才的で、何より、命を削ってアニメを作る弩変態なのだ。一般人が同じ土俵に立っちゃいけない。違う画風、違う音楽、違う視点で全く別のアニメを作って勉強した方がよいのではないかな。同じ「≠駿なジブリアニメ」の中では「猫の恩返し」の方に好感。そこ、「単なる猫好きだろ!」とか言わない。 ※パスにはこの日記のタイトルをコピペして下さい。 Copyright 2008 barista. All rights reserved. |
|