投稿

6月, 2016の投稿を表示しています

個人プロジェクトの今後

Haskell, OCaml版を無事に実装し終えて、今後のことについて迷っている。
今考えられる個人プロジェクトは、大まかには2つである。

1. lisp 処理系
2. サーバー

まず、lisp 処理系について掘り下げてみる。
こちらについては、多言語実装と高速化、多機能化の3つを挙げることができる。
多言語実装では、いかに挙げる言語での実装を目標としている。

* lisp, scheme
* sml
* elixir
* rust
* c
* c++

まだまだ挙げようと思えば挙げられるが、有益な経験を得られると思えるものみに絞った。
多言語実装を通して、その言語に慣れ親しむのが主な目的である。
このプロジェクトに取り組む前は、動的手続き型言語(Ruby, JavaScript)でのみ
実装できただけであったため、その後に続くGo, Haskell, OCamlは得るものが多かった。
しかし、静的型づけ、関数型と歩を進めたあとでは、そのあとに続く言語での
得られるものは少ないのではないかという不安がある。
ただし、lisp自体の習熟は、なぜlispの生産性が高いと言えるのかをよく理解できていないため、
プロジェクトを進める価値はまだ十分にあると言えそうである。

以上の不安から、浅い部分で経験を積むのではなく、深いところに踏み込んでいくことを考えている。
その候補としては、処理系の高速化や多機能化が挙げられる。

高速化に関しては、ゼロ知識のため他のプロジェクトを読むのが主な作業になるだろう。
そこで得られた知見を自分のプロジェクトなり他人のプロジェクトなりにコミットして、
ベンチマークの成績を挙げられれば、わかりやすい励みになると思われる。

多機能化については、Peter Norvig実装から脱却して、ひとつのOSSプロジェクトへと成長させる
ことを意味している。ここでは、what's new に答えられるかどうかがプロジェクトの真価を
問われる部分かと思われるが、まずは既存の仕様を理解し忠実に実装するという点を目標としたい。
自分のレベルから考えて、それだけでも十分高度な目標であろう。

次に、サーバーについて考えてみる。
こちらについては、フレームワークの構築とサーバーそのものの実装が挙げられる。
どちらも、簡単なものを実装してみて、理解を深めるのが主な目…

Lispy実装を追加

だいぶ前のことになりますが、Peter Norvig 先生の Lispy を参考に別言語での再実装していました。 kawakami-o3/yaLispy 最近、新たに Go, Haskell, OCaml での実装を追加しました。 Go雑感 先に実装していたRubyやJavaScript版とほぼ同様に実装できているものの、 Cell型の定義にいろいろ含まれていて冗長に感じます。 Cライクの言語実装でよく見かける定義ですが、もっといいアイデアはないものか。 Haskell雑感 Go実装の前に取り組んだ時はいろいろわからず苦労していましたが、 型の取り扱いに慣れてくると割とすんなり実装できてしまいました。 唯一、構文解析でリスト構造を生成する関数で手間取りました。 相互再帰している構文解析器、これももう少しシンプルに実装できないものか。 OCaml雑感 Haskellの実装後に取り組んだこともあり、つまづくところはほぼなく完了しました。 Haskell版のソースと見比べると若干整って見えます。 Haskellはオフサイドルールがある割には表現力が高くて、ごちゃごちゃしがちなのでしょうか?