#编译器

Portability Is Reliability(evan.nemerson.com)
2021-5-6 14:31
任何熟悉我的开源工作的人都知道我的工作的重点是在可移植性上,但最近对我来说,很多人可能不知道为什么。 Hedley - 一个C / C ++标题,让您利用所有平台(旧标准,C与C ++,不同编译器,旧编译器等)可能无法使用的功能,而不会创建硬依赖性。 便携式代码段 - 织放相关模块的集合,旨在提供对不同功能的......
2021-5-5 20:43
很多程序员都认为编译器是魔法黑匣子,您可以在其中普通杂乱的代码,并获得一个很好的优化二进制。走廊哲学家频道经常开始争论哪个语言功能或编译器标志使用的命令来捕获编译器的魔术的全部力量。如果您见过GCC码库,您真的相信它必须是来自另一个星球的工人魔法优化。 尽管如此,如果您分析编译器的输出,您将发现编译器并不是在优化代......
2021-4-26 10:30
Warning: Can only detect less than 5000 characters 每个计算机科学家应该知道浮点算术。 大卫·格洛伯格。 [PDF]系统V应用二进制接口(AMD64)。 [PDF](几乎)在运行UNIX OS上的X64平台上与C代码接口的所有内容。 手术呼叫标准ARM 64位架构。 ......
2021-4-9 23:5
在2020年夏天,我们描述了我们的工作模糊巩固编译器,Solc。所以现在我们想重新审视这个项目,因为模糊运动往往会“饱和”,以时间随着时间的推移找到较少的新结果。坚固的模糊耗尽气体吗?欺骗一个高赌注项目值得的,特别是如果它有自己的积极和有效的模糊努力? 使用AFL Variant的2月20日2月份提交了该模糊运动的......
2021-4-1 19:34
在第十一个世纪,坎特伯雷的圣安塞姆提出了一个粗略地存在的上帝的争论:上帝通过定义,我们可以想象的最大的是;一个不存在的上帝显然不如上帝那么伟大; ergo,上帝必须存在。这被称为本体论争论,有足够的人发现它令人信服仍在讨论,近一千年之后。本体论争论的一些批评者争辩说,它基本上定义了存在的存在,这不是定义如何工作。 ......
2021-3-16 14:56
根据Kotlin编译器,PSI或Program Struction界面,树是基于AST的顶部构建的,为操纵特定语言构造添加语义和方法。 AST节点具有直接映射到底层文档中的文本范围。 AST的最底部节点匹配Lexer返回的单个令牌,更高级别的节点匹配多个令牌片段。 对AST树的节点执行的操作,例如插入,删除,重新排......
Teaching Compilers Backward(blog.sigplan.org)
2021-2-24 21:57
编译程序是一个引人入胜的复杂过程,高级程序通过该程序成为低级可执行代码。如何规划和实现这样的旅程?开发技术后,如何教给别人? 最近有很多关于编译器类的教学法的讨论。在此博客文章中,我们将重点介绍编译器构造类的一种设计:材料的表示顺序。通常,编译器类按执行顺序显示编译器的阶段。我们称此为“前进”方向。在特拉维夫大学......
2021-2-21 7:59
这篇文章是有关Cranelift的三部分系列文章中的第二篇。在第一篇文章中,我描述了Cranelift及其替代后台代码生成基础结构的项目的上下文,并详细说明了指令选择问题以及如何解决它。剩下的两篇文章将深入探讨一些有趣的工程问题。 在本文中,我想更深入地探讨我们工作中的编译器性能方面。 (在下一篇文章中,我们将探讨......
2021-2-18 19:58
这就是StoneKnifeForth,这是一种受Forth启发的非常简单的语言。预计它不会有用;相反,其目的是显示编译器的简单程度。删除注释时,编译器在两页代码下有点不足。 该软件包包括一个用“ StoneKnifeForth”编写的“元圆环编译器”,并将StoneKnifeForth编译为x86 Linux EL......
Compiler Class(norswap.com)
2021-2-9 20:38
所有课程材料都可以在线获取,以供有兴趣的人阅读。 我也很乐意回答您的问题。 该课程的项目是创建自己的编程语言。 提供了一些库来协助完成此任务:
2021-1-24 3:33
给LWN订户的好处订阅LWN的主要好处是有助于我们继续发布,但除此之外,订户还可以立即访问所有网站内容,并可以访问许多其他网站功能。 请立即注册! 内核项目竭尽全力促进使用较旧的工具链进行构建。 在新系统上构建内核就已经是一个挑战。 首先被迫安装自定义工具链不会改善这种情况。 因此,内核开发人员试图通过大多数发行商......
Compilers Are Hard(blog.shipreq.com)
2021-1-21 12:43
我经常听说编写编译器很困难,并且与编写其他类型的软件有所不同。一些近期的经验使我对为什么会这样有深刻的认识,并证明了这很有趣! 我最近完成了ShipReq的新功能的工作。我花了大约2个月的时间进行开发,最终成为我一生中编写过的最困难的代码。我已经进行了数十年的编码,从事过许多不同的项目,并且从事的工作非常庞大组织;......
2020-12-26 19:28
从模糊的,空洞的想法到如何在新的编程语言中实现,再到健壮,自洽,实际的实现这些想法,还有很长的路要走。从头开始设计和实现新的编程语言是程序员可以执行的最具挑战性的任务之一。 注意:这篇文章的目标读者是那些想要在设计有用的编程语言上做出艰苦尝试的积极进取的程序员。如果您只是想将一种语言作为有趣的附带项目,那么您完全可......
2020-12-12 0:14
CS 6120是Adrian Sampson撰写的有关编程语言实现的博士学位级别的Cornell CS课程。它涵盖通用编译器主题,例如中间表示,数据流和“经典”优化,以及更多研究型主题,例如并行化,即时输入。编译和垃圾回收。这项工作包括阅读论文和开源黑客任务,这些任务使用LLVM和为此课程发明的教育IR。 本页列出......
2020-11-29 16:5
Nim是一种静态类型的编译系统编程语言。它结合了来自成熟语言(如Python,Ada和Modula)的成功概念。其设计注重效率,表达力,...
2020-11-25 22:0
下载PDF摘要:在法国,所得税是根据法国公共财政局(DGFiP)创作,设计和维护的,从纳税人的个人收益中计算得出的。该算法依赖于传统的自定义语言和最初于1990年设计的编译器,它与法国葡萄酒不同,没有随着时间的流逝而衰老。由于输入语言的不足和编译器的技术局限性,该算法越来越难以维护,它依靠临时行为和变通办法来实现税法......
2020-11-22 6:9
非本地语义编译器转换(例如自动区分和某些贝叶斯推理算法)给动态化带来了特殊挑战。
2020-11-7 11:6
在过去的几个月里,我一直在用C语言编写一个C编译器,这是一次非常困难的经历。我这么做是为了看看能不能把《龙》这本著名的书中提到的理论概念用上,其中有几个让我有点摸不着头脑。 所以我做了一个小程序,简单地声明了`x`,并给它赋值,这个值是`x`的乘法。 这是可以编译的,但我想知道编译器如何决定在RHS上设置‘x’的值来......
Minicompiler: Lexing(christine.website)
2020-10-31 19:54
我一直想做自己的编译器。编译器是我日常工作中不可或缺的一部分,我经常使用它们的成果。不久前,当我浏览TempleOS源代码时,在::/Demos/Lessons文件夹中发现了MiniCompiler.HC,我有点吃惊。它实现了一个从简单的数学表达式到AMD64字节码的两阶段编译器(完成后将其比特转换为代码稍后跳转到的......
2020-10-24 7:24
应大众要求,我正在做另一篇LLVM帖子。这一次,它是单一静态赋值(或SSA)形式,这是优化编译器的中间表示中的一个常见特性。 就像上一个一样,SSA是编译器和IR设计的主题,我大部分都能理解,但可以从一些自我指导的学习中受益。我们到了。 在最高级别,编译器的工作是单一的:将一些源语言输入转换成一些机器语言输出。在内部......
2020-9-30 18:43
上周,我试图向libsecp256k1添加一些测试代码,我拔掉头发试图让它正常工作。没有多少printf工作来说明我做错了什么。最后,出于无奈,我想我应该快速检查一下是否有与memcmp相关的编译器错误,结果,我发现了GCC错误#95189:memcmp像strcmp一样被错误地剥离。 老实说,读起来这是一个相当可怕......
Bootstrapping(bootstrapping.miraheze.org)
2020-9-24 21:23
简单说明:自举是指使用比自身更小的工具构建编译器,而不是使用已构建的自身版本构建编译器。第二个问题是:预构建的二进制文件是从哪里来的? 这是从使用十六进制编辑器编写的十六进制汇编器开始引导一系列语言过程的详细日志。 本文讨论了软件长期保存的方法。简要介绍不会随着时间的推移而降级的硬件,但本文的大部分内容是关于如何设计......
How the CPython compiler works(tenthousandmeters.com)
2020-9-24 17:31
在本系列的第一篇文章中,我们介绍了CPython VM。我们已经了解到它是通过执行一系列称为字节码的指令来工作的。我们还看到,Python字节码不足以完全描述一段代码的功能。这就是存在代码对象概念的原因。执行诸如模块或函数的代码块意味着执行相应的代码对象。代码对象包含块的字节码、常量和块中使用的变量名称以及块的各种属......
2020-9-8 7:16
由于Mozilla最近的变化,我从事Rust编译器的时间即将结束。我仍然在Mozilla工作,但在可预见的未来,我将专注于Firefox的工作。 所以我想我应该结束我的“如何加速铁锈编译器”系列,这个系列始于2016年。 如何提高铁锈编译器的速度。原始的帖子,标题最有意义的帖子。它主要关注如何为性能工作设置编译器,包......
2020-9-1 22:59
构建编译器很困难。优化编译器是耗资数百万美元的项目 多年来的发展,但仍然无法充分利用可用的性能, 并且很容易被窃听。快速过渡到异构并行和 多样化的体系结构提高了对积极优化编译器的需求 一直居高不下,使得编译器开发人员难以跟上。我们需要的是 简化编译器构造的更好工具。 本文提出了显著降低编译器成本的新技术 构造,同时提......
Guide to the Rust Compiler Development(rustc-dev-guide.rust-lang.org)
2020-8-30 3:39
本指南旨在帮助记录Rustc(Rust编译器)是如何工作的,并帮助新的贡献者参与到Rustc开发中来。 构建和调试rustc:包含无论您如何贡献都应该有用的信息,关于构建、调试、概要分析等。 贡献给Rustc:包含无论您如何贡献都应该有用的信息,关于贡献的程序、稳定特性等。 高级编译器体系结构:讨论编译器的高级体系结......
2020-8-24 19:8
现在,当我们开始编译时,我们只需处理一种事情--整个过程,当我们拿回结果代码并将其打包以运行它时,我们将始终处理整个过程的代码。这使得创建要调用的实际闭包变得很容易。 我们用来开始编译的主要例程是Compile-Procedure,它以表达式、编译时环境、编译时连续和文字列表作为参数。它返回过程的中间代码和更新后的文......
2020-8-24 2:51
在这篇文章中,我们将用Python编写一个Python到C的编译器。这特别容易做到,因为Python有一个内置的解析库,而且许多CPython内部都向扩展编写者公开。 在本文结束时,只要几百行Python代码,我们就可以编译并运行以下程序: $cat tests/recursive_fib.pydef fib(N):......
2020-8-22 1:6
编译器在每个版本中都变得越来越好。有时,在同一编译器的不同版本中,同一段代码的汇编输出可以观察到明显的差异(可以通过编译器资源管理器轻松地完成)。 最近,我开始了检查程序集输出的实践,以分析各种实现的开销。当心,有时它会让人上瘾。但我认为这是学习阅读汇编语言的一种很好的方式,同时也会惊讶于现在的编译器是多么聪明。 在......
2020-8-13 13:22
今天,我想成为一名C编译器。我从前面的编码练习中添加了一个手工编译的ECHO汇编版本,并添加了一个新的make目标make asm,它将对其进行汇编。让我们看看我们手工编译的程序集,并将其与我们的C编译器进行比较,然后问问它是否值得。 .text.p2ign 2.globl main.type main,@funct......