ポインタを無くした弊害の事例2008年06月23日 13時10分13秒

Java はその最初からポインタをプログラマから隠すことに重きをおいてきた。オブジェクト指向言語と言うこともあり、それなりの成功を納めていた。

厳しい環境などではガーベッジコレクションの時期や量などで、問題になるとも聞くが、別に C や C++ でも、ガーベッジコレクションを用いた実装もあるので、メモリの扱い自体が問題ではない。

オブジェクトを用いた高級言語として Java を扱うと、実際にメモリアクセスを必要とする事は無い。しかし、低レベルの操作を行なおうとすると色々と不便な目にあう。例えば、I/O stream 等がその典型的な例だろう。InputStream には二つの read がある。int read(byte[] b) と int read(byte[] b, int off, int len) がそれだ。

C 言語にはこのような二つの read など必要無い。C 言語では、read に読み出すバイト列のアドレスを渡す。それに引き替え、Java では、バイト列のアドレスを直接渡すことが出来ないので、int read(byte[] b, int off, int len) のインターフェイスを用いて、何処に読み出すのかを指定する必要がある。どのみち、必要な変数の数は変わらないが、インターフェスが繁雑になる。