assembly - lisp 是如何用汇编语言实现的?

标签 assembly lisp implementation convention

很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center .




10年前关闭。




许多(可能是全部?)编程语言由汇编语言组成

lisp 是如何用汇编语言实现的?

谷歌有什么好的引用资料、手册、教程或关键字吗?

任何用于构建您自己的 lisp 实现的官方规则/约定?

例如尾递归应该遵循一些具体化规则或其他东西..

谢谢

最佳答案

虽然其他评论和帖子是对的,但这个问题过于模糊,可能有点困惑,我还是忍不住分享一些建议。我收集了许多关于实现 Lisp 的链接和书籍,因为我最近对语言实现有点着迷。当然,这是一个很深的话题,但阅读与 Lisp 相关的内容特别引人注目,因为如果你在 Lisp 中实现了 Lisp 编译器或解释器,你可以跳过很多关于解析的密集阅读,只需使用 read .这使作者能够快速了解​​编译或解释的内容。这些推荐是我读过、开始或正在阅读的书籍,主要涉及 Scheme,而不是 Common Lisp,但仍然可能会引起一些兴趣。

如果您没有语言实现的背景,并且从未有幸阅读过经典的 Lisp 和 Scheme“元循环评估器”,我会推荐 Structure and Interpretation of Computer Programs .如果你看过 Lisp-in-Lisp(或 Scheme-in-Scheme...),你可以跳过。在 SICP 的最后两章中,作者介绍了 Lisp/Scheme 的几种不同解释器和一些变体,以及字节码编译器和虚拟机。这简直是​​一本精彩的书,而且是免费的。

如果您没有时间阅读 SICP,或者不想为了阅读解释和编译章节而费力地阅读它,我会推荐 The Little Schemer .尽管它很短并且是为 Lisp 和 Scheme 的新手准备的,如果你从未见过用 Lisp 编写的 Lisp 解释器,他们确实提供了一个,这是一本非常令人愉快的书,但由于可爱的风格,可能并不适合所有人.

还有另一本类似于 SICP 的关于 Scheme 的免费书籍,名为 An Introduction to Scheme and its Implementation ,我没有读过,但用作一些位的引用。那里有关于解释器和编译器的部分,它似乎比 SICP 更深入一些,处理诸如解析之类的毛茸茸的事情。它可能需要一个编辑器,但它仍然是一个令人印象深刻的产品。

有了关于如何在 Lisp 中执行 Lisp 的好主意,您就可以在较低级别上实现 Lisp。

Lisp in Small Pieces经常被推荐。我已经阅读了其中的大部分内容,可以说这绝对是一本好书,内容丰富。我会用一个很好的梳子回顾它,因为当你不理解的东西时很容易浏览。我也很难从作者的站点获取代码以运行;如果你明白了,我建议使用 Gambit Scheme 并运行依赖于 Meroonet 的代码,来自 this分配。 Lisp in Small Pieces 提供了许多用 Scheme 编写的解释器以及一个字节码编译器和一个编译器到 C。

Small Pieces 中的 Lisp 移动得很快,而且非常密集。如果这对你来说太多了,也许从 The Essentials of Programming Languages 开始.我读过一些,它很不错,但更多的是解释器。显然,旧版本之一(第 1 版?我不确定...)包含一个编译器。 3个版本之间似乎有很多变化,但第一个在亚马逊上 super 便宜,所以检查一下。

至于编译成 C,这是一个有很多毛茸茸的东西的粗俗主题。编译到 C 带来了所有这些奇怪的角落问题,比如如何优化尾调用和处理闭包、一流的延续和垃圾收集,但它非常有趣,而且许多“真实”的 Scheme 实现都走这条路。 Marc Feeley 在这方面的演讲非常有趣,标题为 The 90 Minute Scheme to C compiler .

我从编译一直到汇编的资源较少,但是有一篇经常推荐的论文介绍了将 Scheme 编译到 x86,名为 An Incremental Approach to Compiler Construction.它假设读者很少,但是我发现它太快了并且没有填写足够的细节。也许你会有更好的运气。

上面的很多推荐都来自一年多前 Hacker News 上的这个怪物评论,来自 mahmud .它引用了许多 ML 资源,并使用延续进行编译。我的学习还没有那么远,所以我不能说什么是好是坏。但这是一个非常有值(value)的评论。引用的著作包括 Andrew Appel 的“Compiling with Continuations”和 Paul Wilson 的“Uniprocessor Garbage Collection Techniques”论文。

祝你好运!

关于assembly - lisp 是如何用汇编语言实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5865868/

相关文章:

recursion - 第 i 个和第 i+1 个元素循环的惯用 clojure

c - 调用我在 Win7-x64 上创建的 Detoured 函数后应用程序崩溃

assembly - 汇编程序 : Relative Jump

gcc - 为什么 GCC 不遵循 System V AMD64 ABI?

lisp - 为什么函数应用会提示长列表?

list - 在 lisp 中展平列表

java - java算法是用C实现的还是用java实现的?

java - 为什么 ThreadLocalRandom 的实现如此奇怪?

oop - 在编码框架时使用哪种设计选项更好?

compiler-construction - 以哪个汇编程序为目标?