関数のコールと直書きでは処理速度に違いがある
という実証を今日授業を通して先生がやっていました。
なるほど、直書きのプログラムのほうが速度的には速いのだなぁと…
そして一つ疑問になったこと、
オブジェクト指向における「メソッド」という概念です。
メソッドといえばいわゆる「オブジェクトに送られてきたメッセージを処理するもの」というものですが
このメソッドを呼ぶ場合の処理速度ってのは関数と同じなのでしょうか??
もしメソッドを呼ぶ時点で処理速度に支障があるのであればオブジェクト指向という概念と
(僕自身が勘違いしているのかもしれませんが、少なくとも自分の思っているオブジェクト指向の概念であるならば)
ちょっと衝突しているような気がします、メリットとデメリットが
個人的にはオブジェクト指向は
必要なデータはprivateに隠蔽、
一つ一つの処理を関数(メソッド)にしていき、
そのメッセージのやり取りで組み立てていくような凡庸性と多様性のあるコード設計、
という風に解釈しています。
そして純粋オブジェクト指向と言われているsmalltalkなんかは整数にすらオブジェクトがあり、
演算するときは演算のメッセージを送って処理する、
という話すら聞きます(実際守らないで普通に演算する場合もあるらしいですが)
だとすればそれって実は処理速度が落ちていたりするものなのでしょうか?
という素朴な疑問です。
そしてそんな疑問を持ちながらググッたら
「オブジェクト指向は遅くなる」というのが一般論のようでした^^;
自分のオブジェクト指向に対する概念を勘違いしていた、
というよりは「わかりやすいコード設計の代償」が処理速度になってる的なコメントが多かったので
あぁ、なるほどなと…
調べていくとSmallTalkも最初は処理速度が遅かったため知名度が低かったというようなことが書いてあったので、
オブジェクト指向というのはPCのスペックが上がってきた現代だからこそ提唱できる概念なんだなぁ
ということを今日勉強しました!
ではでは
関数のコールと直書きでは処理速度に違いがある、ではオブジェクト指向は??
関数のコールと直書きでは処理速度に違いがある、ではオブジェクト指向は??
最後に編集したユーザー せんちゃ on 2011年2月02日(水) 00:13 [ 編集 1 回目 ]
Re: 関数のコールと直書きでは処理速度に違いがある、ではオブジェクト指向は??
いまどきのCPUはキャッシュがあるので、キャッシュに収まるくらいの大きさの関数であればインラインに展開するより高速になる場合があります。
C++のメンバ関数は暗黙でthisポインタを引数に持つ関数コールです。
PCのスペックが上がったからというのは強ち間違いではないですけどオブジェクト指向が遅いなんて何十年前の話ですか。
かなり限られた環境以外ではコーディングに何倍も時間かけて1億分の1秒単位で短縮できても自己満足にしかならないと思いますけどね。
C++のメンバ関数は暗黙でthisポインタを引数に持つ関数コールです。
PCのスペックが上がったからというのは強ち間違いではないですけどオブジェクト指向が遅いなんて何十年前の話ですか。
かなり限られた環境以外ではコーディングに何倍も時間かけて1億分の1秒単位で短縮できても自己満足にしかならないと思いますけどね。