Software Design 9月号の特集はC言語のポインタとオブジェクト指向で、僕はポインタ編の記事を書かせていただきました。
![Software Design (ソフトウェア デザイン) 2014年 09月号 [雑誌] Software Design (ソフトウェア デザイン) 2014年 09月号 [雑誌]](http://ecx.images-amazon.com/images/I/51f%2BNfl-h-L._SL160_.jpg)
Software Design (ソフトウェア デザイン) 2014年 09月号 [雑誌]
- 出版社/メーカー: 技術評論社
- 発売日: 2014/08/18
- メディア: 雑誌
- この商品を含むブログ (2件) を見る
C でシステムプログラミングっていうのは、10年以上やってませんので、2014年現在でもポインタの記事の需要があるというのが驚きでした。
C++ におけるオブジェクト指向は内部的に関数ポインタを使っており、ポインタとオブジェクト指向ってけっこう深い関係にあります(実装上の話ですが)。
そもそも,オブジェクトとは何なのか.その起源は,Simula67という言語が編み出した
「とってもへんちくりんな変数」
の種類なのだ.もともと,プログラミング言語の変数には「グローバル」というどこからでもアクセスできる変数しかなかった.プログラムは至る場所からこのグローバル変数を参照・変更することができた. このカオス状態から逃れるために,構造化プログラミング言語では,「ローカル」という種類の変数を発明し,関数(サブルーチン,手続き)という1つのモジュールの中からしかアクセスできないようにした.そして,その領域取得と開放を自動的にスタック上で行うことができる機構(自動変数とも言う)を言語処理系に持ちこんだのだった.
さて,ここで,Simula67は,一つのいたずらを試みた.
「この関数内のローカル変数の寿命を,グローバル変数のように長くできないだろうか?」
そして生まれたのが,「オブジェクト」というヒープメモリに動的に確保された領域と,それを指すポインタだ.オブジェクトは関数内で生成され,関数が終了しても生き残る.そして,ポインタを通じて他の関数からも参照することができる....なんて妙な生き物!
この機構をSmalltalkがガベージコレクションと共に採用し,これが現在の「オブジェクト」の原型となる.