必要な言葉がないなら、誰も説明できない
makeに関してしみじみ感じたのは、やはり適切な概念と用語法が欠如していることだ。そのために、正確な事を誰も記述できない状況になっている。
- makeが作る(であろう)グラフを依存関係グラフと呼んでいいかあやしい。むしろ実行計画グラフだろう。
- ターゲットと前提(prerequisite)がルール内の構文的なものか、意味的(グラフ的)なものか区別できない。
- ターゲットを意味的なものとして、グラフ上の特定ノードを指しているのか、グラフ上のノードの特性(種別)のことか区別できない。
- 擬似ターゲットが、技法のことかメカニズムのことか区別できない。メカニズムではない技法と.PHONY指定されたターゲットでは挙動が変わる。
- ソースがソースコードのことか、グラフの末端ノードのことか、グラフの非ターゲットノードのことか区別できない。グラフの末端ノード(ビルドフローの湧き出し)と非ターゲットノードはまったく異なる概念だ。
- ゴールをターゲットと呼んでしまっている。
正確に語るには、「ターゲット」の4つの意味を区別する必要がある。
- ターゲット(1) 構文的な役割。ルール構文で左辺に現れる項目。
- ターゲット(2) 動的に構築したDAGにおけるノードで、特定の構文的なルールのターゲットとなっているもの。
- ターゲット(3) 動的に構築したDAGにおけるノードの種別。ターゲットではないノードがソースノード。
- ターゲット(4) ゴールの代用。これはゴールと言うべき。
(2)と(3)の用法は類似してるが、構文的なルールの対応物としてのターゲットノードか、グラフのノードを二種類に分けたときの種別かの違い。
ゴール、ルール、ターゲットを混同した記述も多い。僕もそんな記述により酷い誤解をしていた。ソフトウェア自体は、.DEFAULT_GOALなんて使っているので区別している。
擬似ターゲットに関しては、
暗黙のルールもまた困った言葉だ。
- パターンルールの同義語
- パターンルールと接尾辞ルールを総称して
- 組み込みのパターンルール/接尾辞ルールのこと
暗黙のルールが曖昧だから対義語の明示的ルールも使いにくい言葉になってしまう。
言葉や記法はほんとに大事なのだ。不適切な言葉・記法により人類はどれほどの損失を被ってきたか。例えば、微積分の記法がニュートン法式だけでライプニッツ記法がなかったら、どれほどの損失だったか、と想像すればよい。