『Jythonプログラミング』の気になった所

Chapter5まで読んだ。この本はJavaPythonの比較本だと感じた。私は言語の比較が大好きなので面白い。

Chapter5の「この章の目的」という項からの引用。

世の中の「オブジェクト指向」という言葉の使われ方を見ていると、おおざっぱに言って2つの「思想」がるように思えます。1つは「関連する変数や関数がコードのあちこちに散らばるのはよくない。ひとかたまりのモノとして扱えるべき。」という思想です。もう1つは「整数や関数などのいろいろなモノが、モノによって扱い方が違うのはよくない。統一的な方法で扱えるべき。」という思想です。

なるほど。ある掲示板では、オブジェクト指向のメリットは、マルチプルインスタンスと抽象化の2つであるという結論が出ていた記憶があるので、大体同じ結論になっていたのは面白い。抽象化の具体例をまとめてみるのは面白いと思うが、色々あると思うので難しいかも。


「タプルはなぜ生まれたか」という項で、__hash__の意味をやっと理解できた。__hash__の意味は、「辞書のキーで同じものとして扱える条件を決めるためのもの」であるということ。キーとして同じものの決め方は、同一判定でも良いし、同値判定でも良いし、何でも良い。同じ整数値を返せば同じものとして見なされる。そして、Pythonでは間違いを起こしにくくするために、Mutableなオブジェクトでは、__hash__でエラーを返して正しく通さないようにしている。


「継承は万能か?」という項で、多重継承の問題点がやっと理解できた。問題点は、メソッド解決の順序が複雑になることである。例えば、菱形継承の場合は、旧スタイルクラスのような検索順序によっては、親クラスが子クラスより先に検索される場合があり、その場合子クラスでオーバーライドしても意味がない。新スタイルクラスでももちろん問題で、複雑な継承関係の場合、どういう順序で検索されるかが複雑になる。もちろん、継承の欠点はこれだけではないが、mixinとも比較していて面白かった。


ブログでも読んだが、「言語融合の時代」という項を読んで、いかにシームレスに他の言語とやりとりができるかが重要になると書いてあった。ある意味、Virtual MachineすなわちハードウェアOSの抽象化の時代とも言えるかもしれない。しかし、ソフトウェアはハードウェアの上に載っているので、ハードウェアは非常に重要になる。最近は1つのCPUの速度が限界に達し、マルチコアの時代になってきているので、ソフトウェアでもTBBのように、いかに複数のCPUに処理を分散させるかが重要になってくるかもしれない。マルチスレッドや、もっと細かいマイクロスレッドは、ある意味逆で、1つのCPUで複数のプログラムが実行されているかのような仕組みなので、意味あるのか、あるいは分散処理とどうからむのか疑問。いずれにしても、時代と共に価値を失わないのはプログラミングの概念だと思うので、自分としては複数言語の比較をこれからも続けていくつもり。Python関数型言語の仕組みを考えるみたいな記事を書きたいなあ。