読者です 読者をやめる 読者になる 読者になる

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

私に教えられることなら

近況

振り返りのために残しておきます

Scheme型推論

Scheme(Gauche)で型推論を書いてみる - レガシーコード生産ガイド

OCamlでSECDマシン(VM・S式のパースまで)

github.com

速攻MinCamlコンパイラ概説の最適化までをS式でやってみたいな、と思い準備しました。

型にだいぶん助けられました。OCamlの文法だとタブイッパツインデントがemacs(tuareg-mode)で効くのも気持ちいいですね。

ただppx_derivingをmerlin?が認識してくれなくてエラーになるので放置中……

Smalltalkで書くLL(1)のSmalltalkパーサ

PEGライブラリのPetitParserを使って書いていたんですが、後々ブートストラップ時にクラスライブラリを全部自分で書きたいので、今書いてしまいました。

github.com

ブロックなど括弧の対応に、現在の構造をスタックで管理しています。スタックを自然とパーサオブジェクトのインスタンス変数にしていますが、他の言語でどう実現するか考えるとちょっと面白い。parseという関数にしてしまうと引数でいろいろ引き回さないといけないからです。クロージャが使えるなら似た構造にしますが、トップレベル以外からのパースがやや面倒になるのが考えどころです。

どちらにしろ、パーサコンビネータ作ってしまうのが楽ですが……

ElmでSPA

phaendal.hatenablog.com

上記のために型推論や静的型付き関数型言語でコードを書く練習をしよう、という考えもありたどり着いたElmですが、普通に便利で使いやすいことがわかったので、ちょうど飛び込んできたある案件に使ってみることにしました。

未だに「自分では実現できない機能が出てくるのではないか」という恐れがありますが、今のところかなり順調ではあります。案件自体が進退微妙なところですが、上手くいったら事例として紹介したいです。とにかくリファクタリングが楽でどんどんコードが綺麗になっていくのが楽しいです。

やりたいこと

まず第一に、イメージベースのプログラミング環境を作ってみたい、と思っています。

そして、今までいくつかアセンブリやCでVMを書いてきましたが、次は目的の言語自身でGC含めたVMを書いてみたくなりました。

例えばSmalltalkにはSqueakのSlangという前例がありますが、セマンティクスがかなりC寄りというか、Cが入り込んだものだと感じます。そうではなく、完全にCを意識することなく書きたいわけです。SchemeにはTwitterで教えてもらったPreSchemeというものがあり、その目的を達成しているようです。Standard MLだとMLKitがそうなのでしょうか(未確認)。

SmalltalkLisp、ML系あたりをそのVM記述言語にしたいのですが、どれを選んでも少なくとも型推論と、注意深くサブセットを構築することは必須のようです。どれぐらい時間がかかるかは謎です。

とりあえずPreSchemeは面白そうなので調べてみて、多分実際に作ってみると思います。その後同じ目的に取り組み続けるかは微妙なところです……

広告を非表示にする