2

我正在攻读博士学位,通过集成不同类型的计算机语言来更好地重用软件。由于性能和安全问题,我不考虑将它们与外部函数调用和/或 Web 服务的使用集成。

Lisp 是我最喜欢的工具,因为交互式开发、宏、在运行时进行修改、代码作为数据(人们通常会想象听到 Lisp 这个词)等等。有一些方法可以将不同类型的 Lisp 移植到 JVM(clojure、kawa、SISC、ABCL 等)或 .NET(clojure .NET、DotLisp、IronLisp)等虚拟机上。这很有趣,但仅限于相应虚拟机的“宇宙”。

有谁知道相反的方法,即在 Lisp 系统上运行 Java 或 C#?我找到了斗篷的其余部分。这似乎或多或少是一个死项目。对我来说,将 Lisp 作为一种通用抽象来托管其他语言(如 Java 和 C#)会更明智。

您认为哪些障碍可以克服缺乏通用且可扩展的“语言环境”集成 Java 或 C# 等语言(没有外部函数调用或(Web)服务))?是因为没有 Lisp 系统在某种虚拟机上运行,​​例如 LLVM,还是其他原因?

最好的问候,英格玛

4

3 回答 3

2

Lisp 是这种语言托管的一个很好的平台,因为它具有宏功能。但是,您需要更多的语言特性来做好它:模块、阅读器宏、高级宏规范等等。Racket是一个朝着这个方向发展的 Lisp 变体。您已经可以使用Algol 60 , Prolog的一种变体,一种类型化的姊妹语言,等等。Guile也在朝着这个方向发展,实现了ECMAScript

至于在 Lisp 上实现 Java 或 C#,理论上是可能的,但需要大量工作才能在实际水平上支持这些语言(Racket 用于实现一小部分 Java)。考虑到 CLR 和 JVM 现在都是多语言平台,您是否真的会有所收获也不清楚。更有趣的是利用 Lisp 宏来定义更好的自定义语言 (DSL),定义有用的 Lisp 方言,或者专门实现另一种语言来引导一个有用的工具(例如,Guile 实现 Emacs Lisp)。

于 2012-05-22T22:16:16.023 回答
0

Lisp is a perfect host language for such a meta-platform, but it is not necessarily an ideal target language for compiling something low level and imperative. Fortunately, nothing stops you from generating, say, an assembly code within your Lisp environment.

于 2012-05-22T23:32:34.210 回答
0

好吧,“这取决于”,一如既往,对吧?

如果有的话,你希望将多少 Lisp 暴露给 Java?例如,如果您将 JVM 移植到 Lisp,您是否以某种方式将垃圾收集器所需的 JVM 与 Lisp 实现的实际底层 GC 相匹配,或者您是否只需编写自己的 GC 来 GC JVM 堆中的 JVM 对象。

出于几个原因,将两者结合起来很可能是不切实际的。Lisp GC 在实际实现中几乎是隐藏的,就像 Javas GC 一样。这可能太隐藏而无法与 JVM 实现一起使用。

没有理由不能在 Lisp 中构建 JVM,它只是一堆字节码。Lisp 可以很好地处理字节。

已经有 JVM 在 JavaScript 中的实现,它与核心的 Lisp 没有太大区别。

但是除了有一个 lispy 命令行来与 JVM 交互之外,JVM 本身不会很“lispy”。怎么会这样?这是一个 JAVA 虚拟机。实现可以是“lisp”,但理想情况下,这种 lisp-ness 都不会冒泡到 JVM 本身。

除了 Lisp 在开发任何程序方面的任何优势之外,我认为 Lisp 并不特别适合“更好”地开发虚拟机。

Lisp 擅长开发其他语言,尤其是其他基于 S-Exp 的语言。但是虚拟机就是虚拟机。Monster case 语句或其他基于数值机制的调度。

于 2012-05-22T22:33:53.360 回答