Lisp作为元环境

时间:2012-05-22 21:12:04

标签: lisp metaprogramming environment

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

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

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

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

致敬,Ingmar

3 个答案:

答案 0 :(得分:2)

由于其宏功能,Lisp是这种语言托管的良好平台。但是,您需要更多语言功能才能做得很好:模块,读取器宏,高级宏规范等。 Racket是一个在这个方向上前进的Lisp变体。您已经可以使用Algol 60Prolog的变体,typed sister language等等。 Guile也正朝着这个方向发展ECMAScript

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

答案 1 :(得分:0)

好“它取决于”,一如既往,对吗?

如果有的话,你想要暴露给Java多少?例如,如果您将JVM移植到Lisp,那么您是否以某种方式将JVM对垃圾收集器的需求与Lisp实现的实际底层GC相匹配,或者您只是将您自己的GCs写入JVM堆中的JVM对象。 / p>

出于几个原因,将两者交配起来可能是不切实际的。从实际实现来看,Lisp GC几乎是隐藏的,就像Javas GC一样。这可能太隐蔽了,无法与JVM实现一起使用。

没有理由不能在Lisp中构建JVM,它只是一堆字节代码。 Lisp处理字节就好了。

在JavaScript中已经实现了JVM,它与Lisp的核心没什么不同。

但是除了使用lispy命令行与JVM交互之外,JVM本身不会非常“lispy”。怎么会这样?这是一个JAVA VM。实施可以是“lispy”,但理想情况下,没有任何内容会冒泡到JVM本身。

除了Lisp在开发任何程序方面的任何优势之外,我认为Lisp并不专门为开发虚拟机做出“更好”。

Lisp非常擅长开发其他语言,特别是其他基于S-Exp的语言。但VM是VM。 Monster案例陈述或其他一些基于数值机制的调度。

答案 2 :(得分:0)

Lisp是这种元平台的完美宿主语言,但它不一定是编译低级别和命令式的理想目标语言。幸运的是,没有什么可以阻止你在Lisp环境中生成汇编代码。