アーカイブ

2008年 6月 21日 のアーカイブ

C♯でも普通にポインタが使えたんだな。
たった一言、unsafeと書くだけで。
使っちゃいけないと思うあまり、使えない物と思い込んでいただけかも知れない。

DelphiではVCLという枠組があるが、枠組から外れてWin32APIを使用しても問題ないし、
そのためには往々にしてポインタも必要になるが、VCLしか使わなければポインタは要らない。
VCLだけを使う場合は、ポインタが隠蔽されてしまって、知らなくてもプログラミングできる。
C♯もそれと似たような物で、.NETの枠組から外れなければポインタも必要ない。
今まで、.NETでプログラミングするなら、.NETの枠組から外れないのが前提で、
.NETアプリなのに.NETにない機能の呼び出しを頻繁に行っていると、
そのオーバーヘッドで遅くなるということで、もし枠組から外れる物を作るなら、
最初から外れてもペナルティーのないDelphiを使っていた。
ポインタは使えないんじゃなく、ポインタを使うならDelphiで使う事に決めていたから、
C♯にはポインタがないと勘違いしたのかもな。

テキストエディタを作れるかどうかという観点だと、.NETにない機能の呼び出しが頻繁に必要で、
スピード勝負と言う所があるジャンルだから.NETはまだまだダメって事になるが、
今作ってるDirectShow関連のアプリの場合、動画再生はDirectShowに丸投げするので、
アプリ本体の実行速度が重要にはならないようで、.NETから外れるオーバーヘッドなどどうでもいい。
本体が遅いからって動画が遅くなることもないし、動画再生中の本体はほとんど何もしていない。
だから、全く遠慮せず、いくらでも.NETから外れた機能の呼び出しを行う事にした。

ポインタはunsafeすなわち安全でないということだが、ポインタが危険だとは感じない。
しかしコンパイラが型としてチェックできないメモリの使い方をしているのは事実で、
チェックしてないから間違えると何が起るかわからないことも事実。
ポインタを隠蔽してしまえるほどに.NETが進化すれば文句はないが、
やはりまだ残念な状態ということで、C♯でも必要な時はポインタを使う。