どの様な話?
そもそもCOBOLでは、副作用の使用はかなり抑制的になる様に言語が設計されていました。
- 実行前に固定で設定された、
- 初めに動くプログラムと、マスストレージ(大記憶)との紐付け以外、
- 副作用を使う事が出来ず、
- 規約でアクセスモジュールと言うものを用意し、
- 副作用は一手にそこでのみ行われる様にする
と言う特徴が有りました。
- データセットを順に読んで、順に結果を書き出す
と言うCOBOLのワンパターンの処理ですと、これで済みましたが、済まない問題もたくさん有りました。
ですので、C言語やそれ以降では
- プログラムの任意の場所でライブラリを読み込み、
- 動的にファイルパスやURLを設定して読み書きをする
と言う方向性が主流となりました。
COBOLでも試行錯誤はしていた
汎用機も良くなり、1システム全体で1000バイトしか使うな、と言う制約が弱まった時、
- 全システム全てで使う全ての値を置くことが出来る仮引数(linkage section)を設定し、
- 確実に、呼ばれるプログラムには副作用が無い事を保証する
なんて事もやりましたが、悪くはなりませんでしたが、良くもなりませんでした。
(テストの為、linkage sectionに値を置くのが大変で、値を置くテスト過程で実際と違ってしまい、判定を誤ったりもしました。)
さらにファクトとしては、
- どんなに小さいプログラムでも、全システム全てで使う全ての値を置くので、
- 速度が10分の1になった(頻繁な計測による結果)
と言う事は有りました。(富豪として処理されました。)
副作用と言うのは、結果的に速度向上に寄与していると思います。
さらに状況は悪化していると思います
DOMの操作などは、さらに大変だと思います。
データセットを順に読んで、などと違い、毎回毎回違うやり方での読み書きとなるからです。
結論
これからも「使わざるを得ない副作用を使うと悪く言われる」事でプログラミングが嫌いになる人は存在し続けることでしょう。