New Words

遅延計算(Lazy Evalution)

別名、要求駆動計算(demand-driven evalution)。結果が必要になった時点で計算を行う。メモリに計算結果を保存しておいて、必要な分だけを計算する。この手法を用いることにより、無限に大きくなる可能性のあるデータ構造を計算できる。メモリは食うが、再帰的な関数を使用する際の速度向上に使えそう。

高階プログラミング(Highly-order Programming)

関数を引数で渡す能力のこと。「Cでは、関数ポインタを用いて高階プログラミングを実現している」という言い方ができる(はず)。

明示的状態(Explicit State)

関数の過去の記憶(経験、とも呼べる)のこと。無味乾燥にいうと、関数の内部メモリ。明示的状態により、関数の挙動が変わる。

オブジェクト(Object)

内部記憶とそれに対するアクセス方法(=インターフェース:Interface)をもつデータ(*)のこと。内部記憶を直接書き換える代わりに、インターフェースを呼び出し、内部記憶を変更する。この方法を取ることにより、状態遷移が設計者の意図した方向に行きやすくなる。
# (*)データという表現が曖昧で気にいらないのだが、他の表現はないだろうか。

クラス(Class)

どんなオブジェクトを作るか定義しておくもの。オブジェクトの鋳型。

メソッド(Method)

クラス内部で定義される操作(=関数)。メソッドの部分集合がインターフェースということ(だろうか)。

オブジェクトベースプログラミング(Object-Based Programming)

オブジェクトを用いてプログラミングを行うこと。オブジェクト指向プログラミングとの違いは後述。

オブジェクト指向プログラミング(Object-Oriented Programming)

オブジェクトベースプログラミングに継承(Inheritance)という概念を加えたもの。継承については後述。

継承(Inheritance)

ある既存クラスとのDiffを記述するだけで新しいクラスを定義する機能のこと。本書によると、「非常に厄介な概念で、正しく使うことが難しい」。要注意の概念のようだ。

原始的(atomic)

ある操作の中間が観測できないこと。例えば、1つのスレッドを実行中に、他のスレッドをすべてロックしたとする。そして、そのスレッドの実行後、他のスレッドの実行が再開されたとしよう。このとき、他のスレッドはそのスレッドが「実行前の状態」から「実行後の状態」に突然遷移したように見える。このとき、そのスレッドを原始的(atomic)であるという。