2

私は、さまざまな種類のコンピューター言語を統合することにより、より優れたソフトウェアの再利用に関する博士号取得に向けて取り組んでいます。パフォーマンスと安全性の問題のため、それらを外部関数呼び出しや Web サービスの使用と統合することは考えていません。

Lisp は、インタラクティブな開発、マクロ、実行時の変更、データとしてのコード (Lisp という言葉を聞いて想像する通常のこと) などの理由で、私のお気に入りの手段です。JVM (clojure、kawa、SISC、ABCL など) や .NET (clojure .NET、DotLisp、IronLisp) など、さまざまな種類の Lisp を仮想マシンに移植する方法がいくつかあります。これは非常に興味深いことですが、それぞれの仮想マシンの「ユニバース」に制限されています。

逆のアプローチ、つまり Lisp システムで Java や C# を実行する方法を知っている人はいますか? マントの残りを見つけました。それは多かれ少なかれ死んだプロジェクトのようです。私にとっては、Java や C# などの他の言語をホストする共通の抽象化として Lisp を使用する方がはるかに賢明です。

Java や C# などの言語を統合する汎用的で拡張可能な「言語環境」の欠如を克服するには、どのような障害があると思いますか (外部関数呼び出しや (Web) サービスなしで)。たとえばLLVMのような仮想マシン上でLispシステムが実行されていないという事実によるものですか、それとも他に何ですか?

よろしく、イングマール

4

3 に答える 3

2

Lisp は、そのマクロ機能により、この種の言語ホスティングに適したプラットフォームです。ただし、モジュール、リーダー マクロ、高レベル マクロ仕様など、より多くの言語機能が必要です。Racketは、この方向に進んでいる Lisp バリアントの 1 つです。PrologのバリアントであるAlgol 60型付き姉妹言語などは既に使用できます。Guileも、ECMAScriptの実装によってこの方向に進んでいます。

Java や C# を Lisp に実装する限り、理論上は可能ですが、これらの言語を実用的なレベルでサポートするには膨大な量の作業が必要になります (Racket は Java のごく一部を実装するために使用されていました)。また、現在 CLR と JVM の両方が多言語プラットフォームであることを考えると、実際に何かが得られるかどうかも明らかではありません。さらに興味深いのは、Lisp マクロを利用してより優れたカスタム言語 (DSL) を定義したり、Lisp の便利な方言を定義したり、別の言語を実装して便利なツールをブートストラップしたりすることです (たとえば、Emacs Lisp を実装する Guile など)。

于 2012-05-22T22:16:16.023 に答える
0

いつものように、「状況によって異なります」ですね。

もしあれば、どのくらいのLispをJavaに公開したいですか?たとえば、JVMをLispに移植する場合、ガベージコレクターに必要なJVMをLisp実装の実際の基盤となるGCに何らかの形で結合しますか、それとも、JVMヒープ内でJVMオブジェクトをGCする独自のGCを作成しますか。

いくつかの理由から、2つを組み合わせるのは非常に非現実的かもしれません。Lisp GCは、Javas GCのように、実際の実装からはほとんど隠されています。これは、JVM実装で機能するには隠されすぎている可能性があります。

LispでJVMを構築できない理由はありません。それは単なるバイトコードの集まりです。Lispはバイトをうまく処理します。

JavaScriptでのJVMの実装がありますが、それはコアのLispと大差ありません。

しかし、JVMと対話するためのlispyコマンドラインがあることを除けば、JVM自体はあまり「lispy」ではありません。どうして?これはJAVAVMです。実装は「リスピー」である可能性がありますが、理想的には、そのリスプネスのいずれもJVM自体にバブルアウトしません。

Lispがプログラムの開発に持つ利点を超えて、Lispが仮想マシンの開発に特に「優れている」とは思えません。

Lispは他の言語、特に他のS-Expベースの言語の開発に優れています。ただし、VMはVMです。モンスターのcaseステートメントまたは数値メカニズムに基づくその他のディスパッチ。

于 2012-05-22T22:33:53.360 に答える
0

Lisp はそのようなメタプラットフォームにとって完璧なホスト言語ですが、低レベルで命令的なものをコンパイルするための理想的なターゲット言語とは限りません。幸いなことに、Lisp 環境内でたとえばアセンブリ コードを生成することを妨げるものは何もありません。

于 2012-05-22T23:32:34.210 に答える