type t (* void *)

関数型言語や英語学習の事とか。

プログラミング: 言語処理系ハンズオンでチューターやってきました

どうもインターネットの闇@no_maddoです。
言語処理系ハンズオンでチューターをやってきたのでその感想とかを書き綴ります。

connpass.com

kmizu.github.io

参加しようと思った理由は覚えてないのですが最近マンネリだしイベント参加すっかーという気持ちだったと思います。
それで、実はチューター陣は1ヶ月前くらいから今回の対象言語であるnubを触っていて、 色々な微妙なbugfixをしていました。

GitHub - kmizu/nub: A Tiny Programming Language

最初はslackで@kmizeさんとどうすっかーjava+なんか自作のパーサーコンビネーターライブラリとかかなぁ みたいな話をしていたのですが「いやいやパーサーコンビネータの概念とかあんま関数型っぽい人じゃないとわかりづらいでしょ」 みたいな議論があってantlrv4になったと記憶しています。

結構教育用言語としてどれくらいの言語規模でやるのかというのは難しくて、 今回のnub言語はデカイと思います。東大生が講義で半年かけて色々やることが前提のmin-caml などと比較しても(あれはマシン語生成とか型チェックとかやるのでデカイですが)言語の仕様としては そこそこ変わらない規模を持ちます。
(もちろんmin-camlのほうが大きいですが)。

私はjava書き慣れなかったのでjavaIntelliJ IDEAに入門するところからやっていました。
javaまぁまぁIDEの支援がアレば書けるようになった気がします。

結構参加者の方を見ていると

  • javaもあまり書いていない
  • antlrv4も初めて

という方が多くて、なかなか大変そうでした。
やってみると簡単だということも複数の新しいものを読み書きするというのはなかなか難しいことです。

nubが公開前に潰したbugの例はissueとか見てみるとわかります。
それで、実はまだまだ問題点があってこれくらいの実用的な言語としては 全く機能がないと言っても過言じゃないこのくらいの言語でも考える事というのは 非常に多いんだなぁという気持ちになってもらえるかなぁと思います。

潰していない問題点 - 構文的にネストした関数定義は許すけど、実行してみると駄目 - なんか言語の設計が式志向っぽいくない(returnとか)

Issues · kmizu/nub · GitHub

とにかく他のプログラムとの違いはその複雑さです。
言語処理系はそのコードベースの大きさとの戦いという一面もあります。
(だからきれいにフェーズごとに機能を分割するわけです) なにせ入力されるプログラムが正しい保証もないし、 非常に微妙ケースが入力されるかもしれませんからね。
(実際に事前のチェックで関数の中からその環境を書き換えようとするとうまくいかないとか 色々なバグが有りました)

まぁその辺の設計の工夫とか苦労みたいなところは来週の コンパイラ勉強会で話せるといいかなぁと思います。

connpass.com

しかし東京の勉強会はやはり登録だけして来ない率がきになります。
結構広い会場でもしちゃんとキャンセルしてもらえたらもっと多くの人に ハンズオンを受けてもらえたんだけどなぁ。。。。。。。

まぁこれくらいにしておきましょう。