为什么 llvm 上没有好的方案/lisp?

发布于 2024-08-18 21:55:59 字数 227 浏览 4 评论 0原文

有“Gambit计划”、“MIT计划”、“PLT计划”、“鸡计划”、“Bigloo计划”、“盗窃计划”……;然后就是口齿不清。

然而,(据我所知)LLVM 上还没有一个流行的方案/lisp,尽管 LLVM 提供了很多好东西,例如:

  • 比 x86 更容易生成代码
  • 易于进行 C FFI 调用 ...

那么为什么 LLVM 上没有好的方案/lisp 呢?

There is Gambit Scheme, MIT Scheme, PLT Scheme, Chicken Scheme, Bigloo, Larceny, ...; then there are all the lisps.

Yet, there's not (to my knowledge) a single popular scheme/lisp on LLVM, even though LLVM provides lots of nice things like:

  • easier to generate code than x86
  • easy to make C FFI calls
    ...

So why is it that there isn't a good scheme/lisp on LLVM?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

无法回应 2024-08-25 21:55:59

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

您可能对 HLVM 感兴趣,但目前它仍处于实验阶段。

LLVM provides a lot, but it's still only a small part of the runtime a functional language needs. And C FFI calls are uncomplicated because LLVM leaves memory management to be handled by someone else. Interacting the Garbage Collector is what makes FFI calls difficult in languages such as Scheme.

You might be interested in HLVM, but it's still more than experimental at this point.

萌酱 2024-08-25 21:55:59

对于 CL:Clasp 是 LLVM 上的 Common Lisp 实现,而 mocl 在 LLVM 上实现 Common Lisp 的子集。

对于方案:有一个 自托管方案-> LLVM 演示Bigloo 方案的原型 LLVM 后端< /a>.

对于 Clojure:有 Rhine,它是受 Clojure 启发的 lisp。

For CL: Clasp is a Common Lisp implementation on LLVM, and mocl implements a subset of Common Lisp on LLVM.

For Scheme: there's a self-hosting Scheme->LLVM demo and a prototype LLVM backend for Bigloo Scheme.

For Clojure: there's Rhine, which is a Clojure-inspired lisp.

北城半夏 2024-08-25 21:55:59

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

http://www.ida.liu。 se/~tobnu/scheme2llvm/

从字面上看你的问题,

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

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

There's a very small and apparently unoptimised Scheme compiler here:

http://www.ida.liu.se/~tobnu/scheme2llvm/

Taking your question literally,

  • Writing compilers is hard.
  • A poor implementation like the one linked above can block new implementations. People going to the LLVM page see that there's a Scheme already, and don't bother writing one.
  • There's a limited number of people who write and use Scheme (I'm one, not a hater, btw).
  • There are lots of existing Scheme intepreters and compilers and there's not a screaming need to have a new one.
  • There's not an immediate, clear benefit to writing a new interpreter using LLVM. Would it be faster, easier, more flexible, better in some way than the other dozens of Scheme implementations?
  • The LLVM project went with another language (C) to demo their technology, and haven't seen a need to implement a lot of others.

I think that it could be a lot of fun for someone to build an LLVM-based Scheme compiler. The Scheme compilers in SICP and PAIP are both good examples.

遗弃M 2024-08-25 21:55:59

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

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

Maybe I'm completely misunderstanding the question or context, but I believe that you could use ECL, which is a Common Lisp that compiles down to C, and use the Clang compiler to target LLVM (instead of GCC).

I'm not sure what (if any) benefit this would give you, but it would give you a Lisp running on LLVM =].

迷爱 2024-08-25 21:55:59

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

One thing to keep in mind is that many of these implementations have C FFIs and native-code compilers that significantly predate LLVM.

守望孤独 2024-08-25 21:55:59

CL-LLVM 为 LLVM 提供 Common Lisp 绑定。它采用 FFI 方法,而不是尝试直接输出 LLVM 程序集或位码。

该库可通过 Quicklisp 获得。

CL-LLVM provides Common Lisp bindings for LLVM. It takes the FFI approach, rather than attempting to output LLVM assembly or bitcode directly.

This library is available via Quicklisp.

顾忌 2024-08-25 21:55:59

mocl 是 Common Lisp 相对静态子集的编译器。它通过 LLVM/Clang 编译。

mocl is a compiler for a relatively static subset of Common Lisp. It compiles via LLVM/Clang.

总以为 2024-08-25 21:55:59

(据我所知)没有一个
LLVM 上流行的方案/lisp

目前,llvm-gcc 是最接近 LLVM 上任何语言的流行实现的东西。特别是,目前还没有成熟的带有垃圾收集功能的基于 LLVM 的语言实现。我确信 LLVM 将被用作许多令人兴奋的下一代语言实现的基础,但这将需要大量的时间和精力,而且在这种情况下 LLVM 还处于早期阶段。

我自己的 HLVM 项目是唯一具有垃圾收集及其 GC 的基于 LLVM 的实现之一具有多核功能,但绑定松散:我使用影子堆栈来实现“不合作环境”,而不是破解 LLVM 中的 C++ 代码来集成真正的堆栈遍历。

there's not (to my knowledge) a single
popular scheme/lisp on LLVM

Currently, llvm-gcc is the nearest thing to a popular implementation of any language on LLVM. In particular, there are no mature LLVM-based language implementations with garbage collection yet. I am sure LLVM will be used as the foundation for lots of exciting next-generation language implementations but that will take a lot of time and effort and it is early days for LLVM in this context.

My own HLVM project is one of the only LLVM-based implementations with garbage collection and its GC is multicore-capable but loosely bound: I used a shadow stack for an "uncooperative environment" rather than hacking the C++ code in LLVM to integrate real stack walking.

可是我不能没有你 2024-08-25 21:55:59

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

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

不知道这样算不算“好”。

There is a Scheme2LLVM, apparently based on SICP:

The code is quite similar to the code in the book SICP (Structure and Interpretation of Computer Programs), chapter five, with the difference that it implements the extra functionality that SICP assumes that the explicit control evaluator (virtual machine) already have. Much functionality of the compiler is implemented in a subset of scheme, llvm-defines, which are compiled to llvm functions.

I don't know if it's "good".

小情绪 2024-08-25 21:55:59

GHC 正在试验一个方案后端,并通过其本机代码编译器获得了非常令人兴奋的初步结果。当然,那是 haskell。但他们最近对 LLVM 进行了新的更改,使尾部调用更容易 IIRC。这可能有利于某些计划的实施。

GHC is experimenting with a scheme backend and getting really exciting preliminary results over their native code compiler. Granted, that's haskell. But they've recently pushed new changes into LLVM making tail calls easier IIRC. This could be good for some scheme implementation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文