ポインタ不要論 - 極楽せきゅあ日記
園田先生の処から。元ネタはココ。
(元ネタの方は純粋なC話ではなく、C++も一部混ざっちゃっていますが(STL使うなら、当然C++になりますしねぇ)……。)
自分も最早プログラマとは言えない状態にありますが(苦笑)、普通のアプリケーションを作る目的でCで書くなら、ポインタは使わない方が吉でしょうね。
(例えばOSのカーネルとかデバイスドライバとか、組み込み系機器のプログラムをするなら、多分ポインタは必要でしょうけれど……。)
なら元ネタで書かれているC++なら良いかと言うと、C++には言語レベルでガベージコレクションが用意されていない(メモリ管理はCと同様自分(プログラマ側)で管理する必要がある)ので、例えばデストラクタの呼び出し忘れによるメモリリーク……とかの問題も残ったりします。
あと「入力値を信用しない」は……これは言語問わず汎用的に言える事ですね。別にポインタを隠蔽しているような言語(JavaやC#、各種スクリプト言語など)であっても、例えばバッファオーバーフローやXSS等の不正攻撃は起こりますしね。
どちらかと言えば「ポインタ要・不要」よりも、「入力値は信用しない・出来ない事を前提としたプログラミング(これはプログラム外部からの入力もそうですが、モジュール(関数)レベルでも当てはまります)」の方が、本当はもっと重要なのかと思います。
園田先生の処から。元ネタはココ。
(元ネタの方は純粋なC話ではなく、C++も一部混ざっちゃっていますが(STL使うなら、当然C++になりますしねぇ)……。)
自分も最早プログラマとは言えない状態にありますが(苦笑)、普通のアプリケーションを作る目的でCで書くなら、ポインタは使わない方が吉でしょうね。
(例えばOSのカーネルとかデバイスドライバとか、組み込み系機器のプログラムをするなら、多分ポインタは必要でしょうけれど……。)
なら元ネタで書かれているC++なら良いかと言うと、C++には言語レベルでガベージコレクションが用意されていない(メモリ管理はCと同様自分(プログラマ側)で管理する必要がある)ので、例えばデストラクタの呼び出し忘れによるメモリリーク……とかの問題も残ったりします。
あと「入力値を信用しない」は……これは言語問わず汎用的に言える事ですね。別にポインタを隠蔽しているような言語(JavaやC#、各種スクリプト言語など)であっても、例えばバッファオーバーフローやXSS等の不正攻撃は起こりますしね。
どちらかと言えば「ポインタ要・不要」よりも、「入力値は信用しない・出来ない事を前提としたプログラミング(これはプログラム外部からの入力もそうですが、モジュール(関数)レベルでも当てはまります)」の方が、本当はもっと重要なのかと思います。