编译器

2022-2-17 14:53
在过去的三年里,我把一半的工作时间花在和平号项目上。目标是创建一个通用的轻量级即时(JIT)编译器,以及该项目';s基石是一个独立于机器的中级中间表示(MIR)。有关该项目的更多信息,请参阅我之前关于Red Hat Developer的文章: 到目前为止,我在MIR项目上的工作重点是制作一个快速的JIT编译器,......
2021-7-28 0:53
在介绍我们的培训时,我们想强调 Rust 非常重视其对开发人员友好性的承诺,并且 Rust 编译器将混淆错误消息视为错误。这一直是 Rust 项目在 1.0 版本之前的明确观点:如果您在 Rust 中遇到令人困惑的编译器错误消息,我认为这是一个错误。请报告(并抄送 @wycats)— Yehuda Katz (@wy......
2021-6-13 0:40
使用Rust为写小工具,我一直在很开心。我的日常工作涉及大量的JavaScript和Rust提供了一种熟悉的感觉,因此尝试锈病是一个容易做出的决定。但与此同时,实际上在Rust中做了有意义的工作需要很多重新思考如何构建与您的代码有关的结构和原因。编译器 - 符合其呼叫 - 是无情的;然而,出于某种原因,它出现了很多乐......
2021-6-12 7:46
在本网络研讨会中,我们将通过编译器前端查看OpenMP API指令的解释,包括OpenMP与编译器Optimi的互动...
2021-5-14 7:50
Cowgol是一种实验性的,适用于非常小的系统的ADA灵感语言(6502,Z80等)。它不同,因为它的'旨在自托管在这些设备上:最终目标是能够重建整个编译器onan 8位微量,虽然我们'尚未存在。 桌面驱动,易于端口后端(80386后端是1.2kloc,需要其他编译器更改) 微小:80386 L......
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树的节点执行的操作,例如插入,删除,重新排......
2021-2-24 21:57
编译程序是一个引人入胜的复杂过程,高级程序通过该程序成为低级可执行代码。如何规划和实现这样的旅程?开发技术后,如何教给别人? 最近有很多关于编译器类的教学法的讨论。在此博客文章中,我们将重点介绍编译器构造类的一种设计:材料的表示顺序。通常,编译器类按执行顺序显示编译器的阶段。我们称此为“前进”方向。在特拉维夫大学......
2021-2-21 7:59
这篇文章是有关Cranelift的三部分系列文章中的第二篇。在第一篇文章中,我描述了Cranelift及其替代后台代码生成基础结构的项目的上下文,并详细说明了指令选择问题以及如何解决它。剩下的两篇文章将深入探讨一些有趣的工程问题。 在本文中,我想更深入地探讨我们工作中的编译器性能方面。 (在下一篇文章中,我们将探讨......
2021-2-18 19:58
这就是StoneKnifeForth,这是一种受Forth启发的非常简单的语言。预计它不会有用;相反,其目的是显示编译器的简单程度。删除注释时,编译器在两页代码下有点不足。 该软件包包括一个用“ StoneKnifeForth”编写的“元圆环编译器”,并将StoneKnifeForth编译为x86 Linux EL......
2021-2-9 20:38
所有课程材料都可以在线获取,以供有兴趣的人阅读。 我也很乐意回答您的问题。 该课程的项目是创建自己的编程语言。 提供了一些库来协助完成此任务:
2021-1-30 5:41
地球上大约有7.5x10 ^ 18的沙粒。这个故事是关于在数以千亿计的计算中找到相差约1e-18的方程式的变化。这就是7粒沙粒,与我们对整个地球的预期不同。 花了几天时间生成了数十亿字节的调试日志和GDB断点后,我终于在编译器中发现了一个非常特殊的错误。我认为这是一个有趣的故事。 早在2008年,我就开始开发名......
2021-1-24 3:33
给LWN订户的好处订阅LWN的主要好处是有助于我们继续发布,但除此之外,订户还可以立即访问所有网站内容,并可以访问许多其他网站功能。 请立即注册! 内核项目竭尽全力促进使用较旧的工具链进行构建。 在新系统上构建内核就已经是一个挑战。 首先被迫安装自定义工具链不会改善这种情况。 因此,内核开发人员试图通过大多数发行商......
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’的值来......
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一样被错误地剥离。 老实说,读起来这是一个相当可怕......
2020-9-24 21:23
简单说明:自举是指使用比自身更小的工具构建编译器,而不是使用已构建的自身版本构建编译器。第二个问题是:预构建的二进制文件是从哪里来的? 这是从使用十六进制编辑器编写的十六进制汇编器开始引导一系列语言过程的详细日志。 本文讨论了软件长期保存的方法。简要介绍不会随着时间的推移而降级的硬件,但本文的大部分内容是关于如何设计......
2020-9-24 17:31
在本系列的第一篇文章中,我们介绍了CPython VM。我们已经了解到它是通过执行一系列称为字节码的指令来工作的。我们还看到,Python字节码不足以完全描述一段代码的功能。这就是存在代码对象概念的原因。执行诸如模块或函数的代码块意味着执行相应的代码对象。代码对象包含块的字节码、常量和块中使用的变量名称以及块的各种属......
2020-9-8 7:16
由于Mozilla最近的变化,我从事Rust编译器的时间即将结束。我仍然在Mozilla工作,但在可预见的未来,我将专注于Firefox的工作。 所以我想我应该结束我的“如何加速铁锈编译器”系列,这个系列始于2016年。 如何提高铁锈编译器的速度。原始的帖子,标题最有意义的帖子。它主要关注如何为性能工作设置编译器,包......