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

私に教えられることなら

近況

もう野良だったことは忘れたのか、気ままに暮らしておられる

わたモテ

最近面白すぎる

7巻あたりから読みつつ最新話を追って空白部分が埋まるのを待ちましょう

仕事

結局毎日Clojureばっか書いている。

VM作って遊んでてJVMすげ〜〜ジャバの資産すげ〜〜って見なおしたのと、JVMはそんなに重くないという記事を読んで一気にJVM気に入ってしまった。

Lisp

なんかいろいろ目論んでいる。3impのスタックVMを参考にして

  • letをlambdaに展開するのではなく、スタックに確保したローカル変数領域に書き込む
  • 末尾呼び出し最適化を行わず、ClojureのLoopみたいなプリミティブを一つ使う
  • 前の記事に書いたあやしい構文をデフォルトとする

という処理系をSchemeで書いた。

スタックフレーム周りで頭がデロデロになるかと思った。

あとコンパイラ書くときに様々な問題を逐一対処してたんだけど、α変換など行えば問題自体が一気に消えることがわかってヌッとなった。

ML

ヌッとなったのでMinCamlを参考にしてOCamlでHM型推論と最適化、それからパーサコンビネータ書いてちょっと実験・学習してた。

> let: adder n = let: f x = n + x; f; (adder 1) 2
[Parse]
(略)
[Syntax]
(略)
[Typed]
(略)
[KNormal]
LetRec (adder, [n], LetRec (f, [x], Add (n, x), Var f), Let (k#1, Let (k#0, Int 1, App (adder, [k#0])), Let (k#2, Int 2, App (k#1, [k#2]))))
[Optimized]
Int 3

お〜〜

学んだことLisp処理系に反映する予定。

信頼性

型なんだけど、(中略)、ウーム……となっている。

遅いコードを貯蓄するを読みなおしたのもあって、実行時assertion + テストでいいじゃん、となったので、簡単なpower-assertっぽいのを書いて試してみた。

f:id:phaendal:20171228225247p:plain

こういうのが思いついてすぐ書けるのがLispのいいとこですね。

導入してみた結果なんだけど、assertionの強さは何度か経験したのに忘れてたのはなんでだ、愚かすぎる、というぐらいメリットが強くてたまげている。

Clojureのspecにはかなり期待している。

広告を非表示にする