Clojure で書かれた新しい関数型インタプリタ型 Lisp 言語である Autology が、プログラミング言語愛好家の間で活発な議論を巻き起こしています。このプロジェクトの特徴は、実行時にプログラムが自身のインタプリタにアクセスできるようにすることで、実行中に言語の動作を動的に変更することを可能にしています。
実行時の言語修正
Autology は、インタプリタ関数を **
という変数にバインドし、プログラム内からアクセス可能にするという、メタプログラミングに対する異例のアプローチを取っています。この設計により、開発者はプログラムの実行中に言語が式を評価する方法を変更することができます。コンパイル時に動作する従来の Lisp マクロとは異なり、Autology は言語の構文とセマンティクスを実行時に完全に書き換えることを可能にします。
プロジェクトの作者である Kimbsy 氏は、これを主に楽しみのため、そして面白いアイデアを探求するためのものだと説明し、現在の実装は非常に遅くリソースを大量に消費することを認めています。Kimbsy 氏は5月に London Clojurians で、6月にはクラクフの Lambda Days で Autology についての講演を予定しています。
Autologyの主な特徴
- Clojureで書かれている
- インタープリター関数はプログラムにデータ構造として利用可能
- 実行環境内で変数
**
にバインドされている - 実行時に言語の動作を変更可能
- 言語機能を動的に追加、変更、または削除できる
関連プロジェクトと概念
- Common Lispの実装( SBCL 、 CCL )とインタープリターアクセスパッケージ
- Common Lispのリーダーマクロ
- FEXPRs(歴史的なLisp機能)
- John Shuttによる Kernel プログラミング言語
- Amin と Rompf による「インタープリターの塔」研究
- Shen 言語
従来の Lisp アプローチとの比較
コミュニティでの議論では、Autology と従来の Lisp 実装との興味深い比較が明らかになりました。何人かのコメンターは、 SBCL (Steel Bank Common Lisp)や CCL (Clozure Common Lisp)などの Common Lisp の実装には、インタプリタの内部と対話するためのパッケージがすでに存在するが、 Autology のような直接的な方法ではないと指摘しました。
あるコメンターは、 Common Lisp のリーダーマクロがどのように同様の柔軟性を実現できるかを説明しました:
「Common Lisp では、リーダーマクロと呼ばれるものを使用して、インタプリタを一時的に完全に制御することができ、これは完全に馬鹿げたことができます。」
議論はまた、 FEXPR (Function Expression)のような歴史的な Lisp の概念にも触れました。これらは同様の機能を提供する初期の試みでしたが、最終的にはパフォーマンス上の理由からマクロに取って代わられました。ユーザー kazinator による詳細な技術的説明では、 Autology のアプローチが、単なる字句環境ではなくカスタマイズ可能なインタプリタオブジェクトを渡すことで、 FEXPR とどのように異なるかが強調されました。
理論的応用と限界
主に実験的なプロジェクトとして作成されましたが、コミュニティの議論ではこのような極端な実行時の柔軟性の潜在的な応用が探求されました。言及された理論的なユースケースの一つは、字句スコープ内で異なる言語構文を切り替える能力で、開発者が複雑な問題のさまざまな部分を、それぞれの部分に最適な言語で表現できるようにするというものです。
このプロジェクトには、同じプログラム内で異なる言語構文を切り替えることを示す言語間コードの例が含まれています。一部のユーザーはこれが改良された外部関数インターフェース(FFI)メカニズムとして機能する可能性があると示唆しましたが、他のユーザーはその利点が複雑さのコストを上回るかどうかに疑問を呈しました。
何人かのコメンターは、 John Shutt の Kernel プログラミング言語、 Nada Amin と Tiark Rompf のインタプリタタワーに関する研究、そして Shen 言語など、関連する研究との関連性を指摘しました。これらの関連性は、プログラミング言語設計における言語拡張性と反射の幅広い探求の中での Autology の位置づけを強調しています。
実用的なツールとしての現在の限界にもかかわらず、 Autology は極端な柔軟性を念頭に置いてプログラミング言語が設計されたときに生まれる創造的な可能性を示しています。あるコメンターが指摘したように、わずか1,000行の Clojure コードで多くのアイデアを探求できることは印象的です。
Autology をさらに探求することに興味がある方は、言語に関数を追加する方法、評価戦略を切り替える方法、あるいはプログラム内にメタサーキュラーな Lisp を定義する方法を示す例とともに、オンラインでプロジェクトが利用可能です。
参考: Autology