为什么不是';llvm上没有好的scheme/lisp吗?

为什么不是';llvm上没有好的scheme/lisp吗?,lisp,scheme,llvm,Lisp,Scheme,Llvm,有赌博计划,麻省理工学院计划,PLT计划,鸡肉计划,大扫荡,盗窃等。。。;然后是所有的口齿不清 然而,据我所知,LLVM上没有一个流行的scheme/lisp,尽管LLVM提供了许多好东西,如: 比x86更容易生成代码 方便拨打C FFI电话 那么,为什么在LLVM上没有一个好的scheme/lisp呢?LLVM提供了很多,但它仍然只是函数式语言需要的运行时的一小部分。而C FFI调用并不复杂,因为LLVM将内存管理留给其他人处理。在Scheme等语言中,与垃圾收集器交互使得FFI调用变得

有赌博计划,麻省理工学院计划,PLT计划,鸡肉计划,大扫荡,盗窃等。。。;然后是所有的口齿不清

然而,据我所知,LLVM上没有一个流行的scheme/lisp,尽管LLVM提供了许多好东西,如:

  • 比x86更容易生成代码
  • 方便拨打C FFI电话

那么,为什么在LLVM上没有一个好的scheme/lisp呢?

LLVM提供了很多,但它仍然只是函数式语言需要的运行时的一小部分。而C FFI调用并不复杂,因为LLVM将内存管理留给其他人处理。在Scheme等语言中,与垃圾收集器交互使得FFI调用变得困难


您可能对它感兴趣,但在这一点上,它仍然不仅仅是实验性的。

需要记住的一点是,这些实现中的许多都具有明显早于LLVM的C FFI和本机代码编译器

GHC正在试验scheme后端,并在其本机代码编译器上获得了令人激动的初步结果。当然,那是哈斯克尔。但他们最近推动了LLVM的新变化,使尾部调用更容易IIRC。这可能有利于某些方案的实施

据我所知,一个也没有 LLVM上流行的scheme/lisp

目前,
llvmgcc
是最接近llvm上任何语言的流行实现的东西。特别是,目前还没有成熟的基于LLVM的语言实现来实现垃圾收集。我相信LLVM将被用作许多令人兴奋的下一代语言实现的基础,但这将花费大量的时间和精力,这是LLVM在此背景下的早期。
我自己的项目是仅有的基于LLVM的垃圾回收实现之一,它的GC支持多核,但绑定松散:我在“不合作环境”中使用了影子堆栈而不是在LLVM中对C++代码进行黑客攻击,以集成真正的堆栈行走。

< P>这里有一个非常小的且显然未优化的编译器:

从字面上理解你的问题

  • 编写编译器很难
  • 像上面链接的那样糟糕的实现可能会阻止新的实现。进入LLVM页面的人看到已经有了一个方案,不用费心去写
  • 编写和使用Scheme的人数量有限(顺便说一句,我是其中之一,不是一个憎恨者)
  • 现有的Scheme Intepreter和编译器很多,不需要新的
  • 使用LLVM编写新的解释器并没有立即明显的好处。它会比其他几十种方案实现更快、更容易、更灵活、在某些方面更好吗
  • LLVM项目使用了另一种语言(C)来演示他们的技术,并且没有必要实现很多其他语言

我认为对某人来说,构建一个基于LLVM的Scheme编译器是非常有趣的。SICP和PAIP中的Scheme编译器都是很好的例子。

也许我完全误解了这个问题或上下文,但我相信您可以使用,这是一种编译为C的常见Lisp,并使用编译器来针对LLVM(而不是GCC)

我不确定这会给您带来什么好处(如果有的话),但它会给您一个在LLVM=]上运行的Lisp。

为LLVM提供了通用的Lisp绑定。它采用FFI方法,而不是试图直接输出LLVM程序集或位代码

此库可通过Quicklisp获得。

是通用Lisp相对静态子集的编译器。它通过LLVM/Clang进行编译。

For CL:是LLVM上的公共Lisp实现,并在LLVM上实现公共Lisp的子集

对于方案:有一个和

对于Clojure:there's,这是一个受Clojure启发的lisp。

有一个,显然是基于SICP的:

该代码与SICP(计算机程序的结构和解释)一书第五章中的代码非常相似,不同之处在于它实现了SICP假定显式控制计算器(虚拟机)已经具有的额外功能。编译器的许多功能都是在scheme的子集llvm defines中实现的,该子集被编译为llvm函数


我不知道它是否“好”。

我想你指的是LLVM后端,而不是方案一。你如何使尾部调用更容易?您只需将处于尾部位置的调用标记为“tail”并启用TCO…这个问题是否需要真正的答案——比如LLVM和/或Scheme的问题,无论是技术性的还是社会性的,这些问题阻碍了实现?或者只是口头抱怨,比如,“为什么没有人洗碗?”或者“这辆车为什么这么晚?”更新:现在有一辆,即Mono。现在也有叮当声,Haskell有一个LLVM实现。还是没有口齿不清。(不是说Jon错了。只是提供了一个更新。)@SK logic:AFAIK,我最后一次看(2010年11月)Mono仍然没有一个可用的垃圾收集器,我不确定Mono的状态如何,因为它的开发者被解雇了。即使在2010中,这个声明也是不准确的,除非你认为C、C++和Objul-C是一个统一的语言。ARC在2010年也存在于LLVM上。完全同意。我认为这是ECL相对于trival Lisp编译器的主要优势。Link已经死了,但这是2011年2月的版本。据我所知,HLVM已经死了。我不确定,但你是说垃圾收集器[通常]是LLVM很难的原因,还是仅仅一个[Lisp垃圾收集器]太难?因为我很确定LLVM中有一些语言带有垃圾收集器。LLVM文档甚至特别提到了该方案@KatasticVoyage我的意思是,一个高效的垃圾收集器是很难的,因为它不能简单地附加在像LLVM这样的代码生成框架上。这不是强加的