レガシーコード生産ガイド

私に教えられることなら

近況 オブジェクト指向プログラミング環境を作っておる

前回の近況で、Smalltalkはやっぱアカンわ、Lispだわ、とか言ったんだけど、その後もどうにかしてSmalltalkみたいなLateBindingにできないか悩んでいた。

ああこれはアカンわ、やりきってないから心残りなだけだ、と思ったので気合い入れまくりまくってコード書きまくりまくった。

で、ようやくブートストラップの目処がついた。

f:id:phaendal:20170725064904p:plain

プログラミング環境の名前はDenプログラミング言語の名前はDengoとす。

下流

  • まずDenLispのパーサコンビネータを使ってDengo(プロトタイプ)->S式->JSのコンパイラを書く
  • ついでにランタイムコードとIDEも作る
  • セーブ機能をつけてないのにコードを書きまくってしまった(アホ)のでリロードしないように慎重にセーブ機能をつける
  • Dengo(プロトタイプ)の設計がダメダメな事に気づくが、後戻りできないので気合いでなんとかしようと決意する
  • IDE上で、Dengo(プロトタイプ)によってDengo(新)のパーサコンビネータコンパイラ、ランタイムコードを書く
  • ここでクラスのデータ構造などを一新することにするが、予想以上に作業量が多くて泣きそうになる
  • ロードしたらぶっ壊れる状態でリロードしないように慎重にデータ構造を書き換える
  • システム全体をJSとして書き出し、DenLispなしで動くことを確認

なんかやたら綱渡りな場面が多かったけど上手くいった。良かった良かった。

かなりDengoで書いた感想なんだけど、やっぱメソッドという単位で編集できること、その変更が完全にLate Bindingなことは相当に心強い。壊れないというよりは、壊れても大丈夫という強さを感じる。

それからパーサコンビネータコンパイラ作ってて、やっぱ破壊的変更可能なオブジェクト最高や!不変性なんかいらんかったんや!!と考えを改めた。エラーメッセージや例外の処理がものすごく書きやすくて驚いた。

これは前々から思ってることで、静的なプログラミング環境・静的な検査・静的(Immutable)なオブジェクトの組み合わせはある程度強力だけど(Elmとか)、そのいいとこどりしようとして動的(Mutable)なオブジェクトに静的な環境と検査をつけようとするのは間違っている。環境、検査も動的に振ってしまえば最強になる。まあわかろうとする人少ないだろうし、わかってもらうと自分の優位性が下がるので、勝った後に喚きたい。

今後は多分DenLispからDengoに切り替えていく。今のところ利点しか見当たらない。それからSmalltalkという言葉はこの記事を最後にしばらく使わない。何故かというと、Smalltalkの話題になると必ず出てくるア◯◯・ケ◯の思想やプログラミング教育マンが本当に嫌いで距離を起きたいので。子供の教育を口に出すやつのビジョンが青空の下座り込んでくだらないデバイスに熱中する子供達とか腐ってるよ。ぉたくか?(この後見るに耐えない罵詈雑言を書き連ねていたが、寝て起きて冷静になるとあんまりだと思ったので消す)

広告を非表示にする