New Words
遅延計算(Lazy Evalution)
別名、要求駆動計算(demand-driven evalution)。結果が必要になった時点で計算を行う。メモリに計算結果を保存しておいて、必要な分だけを計算する。この手法を用いることにより、無限に大きくなる可能性のあるデータ構造を計算できる。メモリは食うが、再帰的な関数を使用する際の速度向上に使えそう。
高階プログラミング(Highly-order Programming)
関数を引数で渡す能力のこと。「Cでは、関数ポインタを用いて高階プログラミングを実現している」という言い方ができる(はず)。
明示的状態(Explicit State)
関数の過去の記憶(経験、とも呼べる)のこと。無味乾燥にいうと、関数の内部メモリ。明示的状態により、関数の挙動が変わる。
オブジェクト(Object)
内部記憶とそれに対するアクセス方法(=インターフェース:Interface)をもつデータ(*)のこと。内部記憶を直接書き換える代わりに、インターフェースを呼び出し、内部記憶を変更する。この方法を取ることにより、状態遷移が設計者の意図した方向に行きやすくなる。
# (*)データという表現が曖昧で気にいらないのだが、他の表現はないだろうか。
クラス(Class)
どんなオブジェクトを作るか定義しておくもの。オブジェクトの鋳型。
メソッド(Method)
クラス内部で定義される操作(=関数)。メソッドの部分集合がインターフェースということ(だろうか)。
継承(Inheritance)
ある既存クラスとのDiffを記述するだけで新しいクラスを定義する機能のこと。本書によると、「非常に厄介な概念で、正しく使うことが難しい」。要注意の概念のようだ。
原始的(atomic)
ある操作の中間が観測できないこと。例えば、1つのスレッドを実行中に、他のスレッドをすべてロックしたとする。そして、そのスレッドの実行後、他のスレッドの実行が再開されたとしよう。このとき、他のスレッドはそのスレッドが「実行前の状態」から「実行後の状態」に突然遷移したように見える。このとき、そのスレッドを原始的(atomic)であるという。