Erlang仮想マシンでLispを実現するLFE

8年の開発期間を経て,Erlang仮想マシン(BEAM)上でLisp言語をサポートするLisp Flavoured Erlang(LFE)がバージョン1.0の安定版に到達した。開発者のRobert Virding氏は,Erlangの初期開発者のひとりでもある。

LFEはLisp-2,すなわちCommon Lispタイプの,Erlangコンパイラのフロントエンドだ。マクロベースのメタプログラミングを可能にし,再帰と高階関数の利用をサポートする。また,Erlangの哲学を継承することにより,メッセージパッシングアクタモデルを採用し,“シェア・ナッシング”パラダイムをプログラマに求めるとともに,完全なパターンマッチングも提供している。Erlangと100%の互換性を持つコードを生成するLFEは,Open Telecom Platform (OTP)を使用した標準的なErlangおよびアプリケーションとのシームレスな共存も可能である。OTPは,高可用性,コンカレント,スケーラブルなアーキテクチャを備えた開発を可能にすることを目的に,Erlangで記述されたミドルウェアとライブラリのコレクションである。

以下のコードスニペットは,リストの要素の総和を求める簡単な再帰関数の定義を,ErlangとLFEのシンタックスで比較したものだ。

Erlang:

      sum(L) -> sum(L,0).
      sum([], Total) -> Total;
      sum([H|T], Total) -> sum(T, H+Total).

LFE:

      (defun sum (l) (sum l 0))
      (defun sum
        (('() total) total)
        (((cons h t) total) (sum t (+ h total))))

Lisp言語の伝統により,LFEはREPLを使用した実行が可能なので,言語の特徴を手軽に体験することができる。タスク管理やプロジェクト作成,依存性管理などの可能なREPLは,lfetoolプロジェクトが提供するものだ。インストールはDocker経由で,docker pull lfex/lfeを実行すればよい。この中に,LFEプロジェクトの作成と実行に可能な部分が含まれている。

その他の注目すべき点として,現時点ではまだ開発段階ではあるが,LFEのメンテナが現在,Gerald Jay Sussman氏とHal Abelson氏の古典的名著である“Structure and Interpretation of Computer Programs”のLFE版を作成中だ。

lfetoolなど,多数のLFEライブラリのメンテナを務めるDuncan McGreggor氏に,言語について詳しく聞いた。

LFEは何年かの開発期間を経て,今回バージョン1.0に達しましたが, これは何を意味するのでしょうか?LFEの安定度や実際の開発への適応性については,どのように思われていますか?

以前にRobertがメールリストやツィートで説明していますが,v1.0というのは,基本的には独自の判断によるものです。1.0リリースの準備は,かなり以前からできていました。実際に,いくつかの大手企業やスタートアップが,すでにLFEを製品開発に使用していると聞いています。このうちのいくつかは,数年前からLFEを実開発で使用しています。LFEはCore Erlangと100%互換性のあるコード をコンパイルしますから,これは理にかなった判断です。Erlangはもう何十年も前から,実際の開発で安定して使用されていますからね。

Erlangの仮想マシン上でLisp型言語を使用するメリットは,どのようなものなのでしょう?

Lispのメリットについては,60年代から多くの人たちによって語り尽くされています - 柔軟性と汎用性(REPL,マクロ,同図像性(homoiconicity), DSL開発の容易さなど)です。これと,Lispコミュニティが数十年にわたって開発した言語やライブラリが組み合うことで,LFEがインスピレーションを得た,極めて印象的なリソースを実現しています。これらは現代のLisp全般に言えることですが,さらにErlangの中心的な機能である高並列性やフォールトトレランスが加わることによって,LFEは,分散システムの開発を必要とするLisp開発者にとっては,ある意味で夢のような言語になっているのです。

LFEのロードマップについて教えて頂けますか?LFE SICPの開発状況はどうでしょう?

LFEとして現時点で最大の優先課題のひとつはドキュメントの更新です(統合,更新,複数バージョンのサポート,ユーザやリーダが容易にコントリビュートできるようにすること)。この何年間で達成された価値ある開発成果を,LGFEコミュニティの人たちにとって有用なエクスペリエンスとして,ひとつにまとめる必要がありますね。やるべき事はたくさんあります!新たなデザインも出来上がっていますし,複数のドキュメントソースからのコンテンツ生成も検討中です。ゆっくりですが着実に前進しているので,これらの成果がLFEコミュニティに歓迎されるものであることを願っています。

SICPをLFEの変換する作業は(中心的な執筆者の作業スケジュールの関係で)しばらく停滞していましたが,最近のドキュメント作成作業に触発されて再開しています。先週もいくつかのレポートが更新されていましたから,間もなく新たなコンテンツが期待できると思います!

LFEはGitHubで公開されている。HomebrewやDocker,あるいはソースからインストールが可能だ。