espyの日記: 「残念ながらソフトには回路図が無いのです」の意味 1
日記 by
espy
ハードとソフトの品質管理や保守性の話題で、「残念ながらソフトには回路図が無いのです…」
という意味の本質的なところに、少し気が付いた気がする。
回路図は、ソースコードに例えると、書いている言語が手続き型言語じゃなくて、
関数型というか宣言型なんですね。
例えば逆に、「手続き型の言語で書かれた回路図」というものが、
もし存在したら…
・まず1ページ目の回路が動く。Sensor1からの入力が Op-Amp1で処理され、
ワイヤー変数 output1に電圧値で代入される。
・もし、output1>2.5ならば、回路図2ページ目のIC2に行き、そうでなければ
3ページ目のIC3で処理されて、結果はwire2に代入されて...
と読まなければならないとしたら…「うげぇっ!」 ですよね。
“回路図ソースコード”は、実際は関数型で、全ての部分部分は同時に動作
(同時に評価)されて動いているし、全ての信号線には“代入”は無い。
電線は状態を覚えないし。
また、回路設計のとき、部分部分で状態を持つような回路、たとえば
OffとFull-RUNに加えて省電力モードが複数有るようなケースでは、とたんに
ややこしくなり、注意深く設計/デバッグしなければならなくなる。
いわば関数言語的では無くなるわけで。 これは経験的にも実感がある。
と、ここまで書いて、大規模なASICをHDL記述している人は、途中にレジスタが
あるから手続き言語と同じ苦しみを味わうのか? とか、C言語設計は実はヤバイ
のではないか?という疑問が湧いてきた…。
かいろせっけいとlisp (スコア:1)
なんてのを思い出しつつ。
C言語とかで設計するのは、「オリジナル(リファレンス)となるCコードがある」様な環境(たとえば適当なAVコーデック、H.264とか)だといいかもしれませんが、そうでないと、確かにいやなパターンもありうるかもしれません。
-- Takehiro TOMINAGA // may the source be with you!