gaucheyライブラリ

今日はShibuya.lispHackathonがあったようです。東京には行けなかったんですが、時間中(13:00 - 17:30)は時間をとってリモートで勝手に参加させてもらってました。時間中はひたすらClojureを書いていました。gaucheyという、GaucheにバンドルされたライブラリをClojureへ移植したライブラリを作っていました。

動機

ClojureJVM上で動くLispなので、Javaのクラスにも簡単にアクセスすることができます。もちろん、Javaの標準ライブラリも使いたい放題です。また、clojure-contribというユーザのコントリビューションライブラリもあり、ClojureJavaの機能をより便利に使うことができるようになっています。

ところで、ここしばらくClojureを使っているんですが、「Clojureで日常の細々としたスクリプトをサクッと書いてやろう」という気にはあまりなりません。「起動時間が遅い」というのも一因かもしれませんが、個人的に1番の障壁になっているのは「書くのが面倒臭い」ことだと思います。

Javaのクラスを使うといろいろなことができるようになるのはいいんですが、いちいちXXFactoryを作ってYYBuilderを作ってなんて回りくどいやりかたをするのはあまりスクリプト向けではないなと感じます。一方で、clojure-contribでは、せっかくClojureがもっている階層的なネームスペースが効果的に使われず、大小さまざまな機能が渾然として、どのネームスペースに何が定義されているのか分かりにくいという印象があります。そのため、「こういう機能を探したい」と思ったときに見つかるまでに時間がかかり、やっぱり面倒だなぁと感じてしまいます。

じゃあ、スクリプトをサクッと書くためには何が必要なのか、というのを真面目に考えるのは難しいですが、既存の使い勝手のいいものを真似することはできそうです。ちょうど、Clojureのお隣、Schemeの処理系には「スクリプトインタプリタとしての使い易さに重点を置い」た開発を標榜しているGaucheがあります。これまでGaucheでスクリプトを書いたときに書きやすかったこと、また、ライブラリが整理されていることなどから、Gaucheのライブラリをパクってみたらいいんじゃないか、と思ったのがgaucheyを作ろうとしたきっかけでした。

現状

gaucheyはまだほとんど今日作り始めたばかりなので、Gaucheのほとんどのライブラリをカバーできてません。今日のHackathonの時間内で作れたのは、util.digestとrfc.shaだけでした(^^; 現状はgithubから確認できます。

athos/gauchey · GitHub

今後もマイペースにカバレッジを上げていく予定です。

課題

SchemeClojureでは言語も違ううえ、Gaucheはさらに独自の拡張もしているので、Gaucheの使い勝手を損なわない範囲で両者をどのように擦り合わせていくかが肝になりそうです。Gaucheの(メタクラスをもつ)オブジェクトシステムを使ったライブラリをどうClojureに書き換えるか、とかいろいろありそうです。