编程语言与软件工程2010scheme2006.cs.uchicago.edu
编译器构造的增量式方法
An Incremental Approach to Compiler Construction (2006)
进阶 · 约 120 分钟读完前置知识:Scheme 基础、x86 汇编基础、编译原理基本概念
导读
这篇 2006 年的经典论文(Ghuloum 著)提出一种增量式构建编译器的方法:从最小的编译器出发,通过一系列小步骤逐步扩展功能,每一步都能编译运行,最终得到一个完整的 Scheme 编译器。这种循序渐进的方式让学习者更容易理解编译器各部分的演进过程。
HN 关注点:这是 HN 上多次被重提的经典编译器入门论文,读者关注它作为学习编译原理的实践路径,并讨论相关的延伸资料和现代实现方式。
后来怎么样
这篇论文提出的增量式编译器构建方法成为编译器教学领域的经典范例,被广泛用作编译课程的实践教材,并启发了 nanopass 编译器框架等一系列后续工作。
HN 评论精选
这几条评论里:质疑 1 补充 3
补充推荐 Nada Amin 的实现和教程作为配套学习资料
Nada Amin(2014 年 Strange Loop 演讲《Programming Should Eat Itself》的主讲人)已经完整实现了这篇论文的方法,并在其 GitHub 上提供了配套的 workshop 教程文档。她还参与了下一代 Scala 编译器 Dotty 的开发。
juliangamble查看英文原文
Nada Amin, who gave the keynote at Strange Loop in 2014 "Programming Should Eat Itself" https://www.youtube.com/watch?v=SrKj4hYic5A has worked through the implementation https://github.com/namin/inc and provided the corresponding workshop documentation in her github account. https://github.com/namin/inc/blob/master/docs/tutorial.pdf She's also been involved in contributing to the next generation Scala compiler (Dotty).
补充补充 nanopass 编译器相关论文资料
推荐几篇相关论文:lambda-the-ultimate 上的讨论帖,以及 Dybvig 的 nanopass 系列论文(nano-jfp 和 commercial-nanopass)。
fao_查看英文原文
Here are some related papers you might be interested in (If you haven't seen them already): http://lambda-the-ultimate.org/node/1589 http://www.cs.indiana.edu/~dyb/pubs/nano-jfp.pdf http://www.cs.indiana.edu/~dyb/pubs/commercial-nanopass.pdf
补充建议用 WASM 替代汇编作为现代实践目标
现在有了 WASM,学习这篇论文的一个好方式是生成 WASM 而不是论文建议的汇编代码,并把 WASM 的结构当作宏来使用。
pjmlp查看英文原文
Now with WASM, a good way to go through this paper is to generate WASM instead of the suggested Assembly and use WASM constructs as macros.
质疑提出对“增量”一词另一种含义的期望
我更想看到的是“增量编译器的构建方法”——即编译器输出能针对之前输入增量求值代码的编译器。
amelius查看英文原文
What I'd like to see is "An Approach to Incremental Compiler Construction", i.e., a compiler that outputs code which evaluates its input incrementally wrt. previous inputs.
相关资源
从这篇论文所有 HN 讨论帖的全部评论里整理出来的链接。
历次讨论
- 2010Hacker News 讨论帖77 分 · 18 评
- 2015Hacker News 讨论帖111 分 · 13 评
- 2019Hacker News 讨论帖86 分 · 5 评
- 2021Hacker News 讨论帖66 分 · 10 评
同领域还值得读
Google 的软件工程(2017)
Software Engineering at Google (2017)
介绍了 Google 的软件工程实践,包括其单一代码库(monorepo)、几乎全部开发在主干进行而非分支、代码审查、构建系统 Blaze、协议缓冲区等工具与流程,并讨论了频繁重…
编程语言与软件工程2017 · 1,127 分 · 465 评 · 引用 15入门 · 约 45 分钟编辑精选Peter Naur:编程作为理论构建 (1985)
Peter Naur – Programming as Theory Building (1985)
Peter Naur 1985 年的经典论文《Programming as Theory Building》提出:编程的本质不是写代码或文档,而是在程序员头脑中构建对程序及其运行…
编程语言与软件工程2016 · 629 分 · 74 评入门 · 约 45 分钟编辑精选SciPy 1.0:Python 科学计算的基础算法
SciPy 1.0: fundamental algorithms for scientific computing in Python
这篇发表于 Nature Methods 的论文介绍了 SciPy 1.0——Python 科学计算生态的基石库,涵盖其核心算法模块(优化、积分、插值、线性代数等)、软件架构与社…
编程语言与软件工程2020 · 387 分 · 98 评入门 · 约 45 分钟编辑精选Lisp 的历史(1979)
History of Lisp (1979)
这是 Lisp 发明者 John McCarthy 于 1979 年为 HOPL(编程语言史)会议撰写的回顾文章,讲述 Lisp 的起源、设计动机与早期演进,文中也涉及 if 表…
编程语言与软件工程2018 · 352 分 · 44 评入门 · 约 45 分钟编辑精选使用 NumPy 进行数组编程
Array Programming with NumPy
这篇 Nature 文章介绍 NumPy 的数组编程模型及其在科学计算中的核心作用:以 ndarray 为中心,通过向量化操作让 Python 高效处理多维数组。
编程语言与软件工程2020 · 318 分 · 134 评入门 · 约 40 分钟编辑精选