昨日の記事「フローチャートを復権させよう -- 2020年代のプログラミングへ」のごとき内容は、僕は何度も繰り返し書いています。昨日の記事のなかに過去記事への相当数のリンクがあることからも、それは分かると思います。もう一度代表的な過去記事を挙げれば:
- フローチャートからマゾ・テストまで (2009年)
というわけで、僕にとっては定期ポストみたいなものです。年に一,二度はこのことを言っておきたい、みたいな。
過去に書いた、フローチャート、トレース付きモノイド圏、goto文、継続などの記事はあんまりウケなかったのに、なぜか昨日の記事はブックマークもアクセスも集めたようです。不思議だ。「正規表現」のときみたいに誰かが言及したのかな?
それはそうと、ブックマーク・コメントのひとつに:
フローチャートは手続き型しか記述できない。同時性や格納形式の相手が出来ない
これって、3,40年前の評価ですよね*1。
時代は変わったのに、「フローチャートってダメなんだよね」とか根拠もなく盲信しているのって、なんなの?
僕が参照している資料のどれかひとつでも眺めれば(読まなくてもいいです)、「手続き型しか記述できない」って言葉はまず出てこないでしょう。例えば、長谷川真人(はせがわ・まさひと)さんのスライドのはじまりのほう(9枚目)は次のような文章です。
再帰プログラムの不動点意味論
再帰プログラム、たとえば階乗を計算するプログラム
fact(x) ≡ if x = 0 then 1 else x*fact(x - 1)
F(f)(x) ≡ if x = 0 then 1 else x*f(x - 1)
すなわち fact = F(fact) となる。
で、絵が登場している24枚目は…、これは絵が眼目なので画像で引用しましょう。
letrecって「手続き型」っすか? そもそも手続き型だの関数型だのって分類が意味あるの? 党派的活動が好きな人が看板に使っているだけのような気がしますが*2。
「同時性や格納形式」ってのは、なにを意味するかハッキリしないのですが、並列実行や非決定性なら普通に絵に描けますよ。描画法が古くさい(伝統的な)so-called アクティビティ図でも、同期バーとかフォーク/ジョインポイントとか呼ばれているアイコンがあるようですし。非決定性の絵については、例えば「非決定性プログラミングだって絵を描いてみれば一目瞭然」を参照。
ストレージに関する扱いは、例えば「ストレージの線形代数: 泥臭いデータ操作の洗練された定式化」を見てください。ストレージ操作を表現するモノイダルスタンピングモナドの絵なら(手描きで汚いですが):
もう一度繰り返し言いますが、フローチャート -- プログラムのpictorial/graphical/diagrammatic/geometricな表現と言ったほうが適切かもしれませんが -- の意味論は面目を一新しているのであって、時代は変わっているのです。いつまでも、3,40年前の悪印象を引きずるのはやめましょうよ。