著作一覧 |
サメはつまらなかったがこっちはすごくおもしろかったぞドリームワークス。最初、子供のためにイヤイヤ行くという感じだったが(サメがつまらなかったし)、でもとても楽しめた。今年見た中では象についで2番目。ペンギンやアナキンより映画っぽくておもしろかった。
ペンギンがシージャックしようと船長室にやってくる。それまでペンギン視点でペンギンを撮っているからペンギンのサイズはスクリーンの縦の4/5くらいはある。それが、船長室に入った瞬間に視点が切り替わって1/10くらいになる(人間の視点になる)。そこで4人並んでペタペタ歩く。あるいはその前のドアから飛び込んでくるところ。
砂浜でライオンが箱から出てくるところと、キリンの箱を見つけるシーン。キリンを箱から出そうと突進するところ。
リスザルのダンスパーティ。音楽スキスキ。踊るのスキスキ。
生き物がステーキ肉に見える(黄金狂時代でチャップリンが鳥の丸焼きに見えるくだり—なんで条が出てこないんだ—をはじめこのくらい映画的な手法はないな)ところ。夢の中の舌なめずり。
話の内容は深刻。なんでライオンが最後までパラダイスへ行かないかとか。
ペンギンにしろキリンにしろライオンにしろ動きがとても映画的だ。サメもそう言えば兄貴がくたばるシーンが映画の動きだったのを思い出した。たとえばロボッツ(ワーナーかな)より遥かに動きがリズミカルできれいだからだ。
ストラウストラップは
C++ was designed to support data abstraction, object-oriented programming, and generic programming in addion to traditional C programming techniques under these constraints.
- The C++ programming language third edition p.22 -
(抽象データ型−これ良い訳ではないね−とOOPと総称プログラミング(に加えてこれらの制約の下で伝統的なCプログラミング)をサポートするように設計してある)と言ってるんですが、この言い方だと、抽象データ型とOOPは並立しているように見えます。
ここに限らず、どうもStroustrupの書いたものを読むと、C++にとって抽象データ型はすごく大事なポイントで、OOPはすごく便利なポイントというように考えているように思えます。この場合、OOPはポリモーフィズムの実現という意味以上のものは無いのではないかと考えられるのは、OOPについて語る箇所にはクラス階層とvtblを利用した実装の話が付いて回る点です(かつ、他にもやりようはいくらでもあるんだが、と少しばかり投げやりな感じも見える)。
このように読むと、StroustrupがC++で重視しているのは、あくまでも抽象データ型(これはデータ構造と操作言語の組なので、良く『カプセル化』と言われるものと同じ)であり、それが型である以上クラス中心主義という呼び方はそんなに外れてはいないと思います。
#vtblの中身(と大元のポインタ)を動的に変えればC++でインスタンスベースのOOPもできるじゃんとか思わないでもない。
#なんかプログラマー日記(9月2日)のコメント欄が盛り上がっていて楽しそうなのですごく久々にtCppPLとか読んでみたり(デザインのほうのやつは家に置いてあるので読めない)。
#っていうか、thisを省略できるというのはすごく大きい気がする(selfが省略できなくなるのはやだな)。あと常に省略可能なthis以外については操作の対象(=object)を最初に記述するのだから、OOP以外の何物でもないとも思う。まず対象物、そして操作。なるほどインテリセンス(コード補完)だな。
kmt-tさんから反応があったんだけど、
・トラックバックが打てない(追記:設置ミスでした。ごめんなさい)
・ある言語の……理解できないことはありえない、というのには賛成できない
・トリッキーなコードは駄目コード、というのには賛成できない
という3点が挙げられていて(追記:点だけを書いていたので修正した)、ちょっと1については実験(ここをトラックバック先にして打つ)。
2については後ほど(追記:書いた)。最初に書くと、HOGE/HUGAが何してるかさっぱりわかりません。でもそれは問題なしと僕は思います。
3って、これは僕に対してではないですよね? 僕はトリッキーなコードというものは空想の世界の話だから、そんなものにだまされちゃいけないよ、と言っているんだけど。駄目なコードというのは読みにくいコード、センスが無いコード、退屈なコード、つまり僕の主観でだめなコードと、コンパイルできないコード、脆弱性があるコード(これはそのコードの実行コンテキストにも依存する点に注意)、遅いコード、リソースを不必要に食うコード、バグがあるコード、つまり実行に支障があるコードの2種類から構成されるのであって、トリッキーかどうかなんていうのは関係ありません。
うが。tb.rbを入れてなかった……orz
ジェズイットを見習え |
data abstractionは「データ抽象(化)」と言ってましたねえ,昔は。手続き中心→オブジェクト中心のパラダイムシフトの途中にあったのがdata abstractionなので,ストラウストラップは「C++はその全てをサポートする言語だ」と言いたかったのでしょうか。