このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

必要な言葉がないなら、誰も説明できない

makeに関してしみじみ感じたのは、やはり適切な概念と用語法が欠如していることだ。そのために、正確な事を誰も記述できない状況になっている。

  • makeが作る(であろう)グラフを依存関係グラフと呼んでいいかあやしい。むしろ実行計画グラフだろう。
  • ターゲットと前提(prerequisite)がルール内の構文的なものか、意味的(グラフ的)なものか区別できない。
  • ターゲットを意味的なものとして、グラフ上の特定ノードを指しているのか、グラフ上のノードの特性(種別)のことか区別できない。
  • 擬似ターゲットが、技法のことかメカニズムのことか区別できない。メカニズムではない技法と.PHONY指定されたターゲットでは挙動が変わる。
  • ソースがソースコードのことか、グラフの末端ノードのことか、グラフの非ターゲットノードのことか区別できない。グラフの末端ノード(ビルドフローの湧き出し)と非ターゲットノードはまったく異なる概念だ。
  • ゴールをターゲットと呼んでしまっている。

正確に語るには、「ターゲット」の4つの意味を区別する必要がある。

  1. ターゲット(1) 構文的な役割。ルール構文で左辺に現れる項目。
  2. ターゲット(2) 動的に構築したDAGにおけるノードで、特定の構文的なルールのターゲットとなっているもの。
  3. ターゲット(3) 動的に構築したDAGにおけるノードの種別。ターゲットではないノードがソースノード。
  4. ターゲット(4) ゴールの代用。これはゴールと言うべき。

(2)と(3)の用法は類似してるが、構文的なルールの対応物としてのターゲットノードか、グラフのノードを二種類に分けたときの種別かの違い。

ゴール、ルール、ターゲットを混同した記述も多い。僕もそんな記述により酷い誤解をしていた。ソフトウェア自体は、.DEFAULT_GOALなんて使っているので区別している。

擬似ターゲットに関しては、

  • リソース名前空間の名前をタスク名に流用しているもの=擬似リソース名
  • .PHONYメカニズムでタスク名だとマークした名前=PHONYターゲット名=タスク名

暗黙のルールもまた困った言葉だ。

  1. パターンルールの同義語
  2. パターンルールと接尾辞ルールを総称して
  3. 組み込みのパターンルール/接尾辞ルールのこと

暗黙のルールが曖昧だから対義語の明示的ルールも使いにくい言葉になってしまう。

言葉や記法はほんとに大事なのだ。不適切な言葉・記法により人類はどれほどの損失を被ってきたか。例えば、微積分の記法がニュートン法式だけでライプニッツ記法がなかったら、どれほどの損失だったか、と想像すればよい。