#编译器

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......
2020-7-24 7:59
早在2017年,我就写过为什么D编程语言是开发的绝佳选择。但是D中有一个突出的特性我没有进行足够的扩展:通用函数调用语法(UFCS)。UFCS是D中的语法糖,可以将任何常规函数链接到一个类型(字符串、数字、布尔值等)上。类似于该类型的成员函数。 如果您尚未安装D,请安装D编译器,以便您可以自己运行本文中的D代码。 /......
2020-7-19 11:18
Toad.com的约翰·吉尔莫·格努于美国东部标准时间2020年5月23日06:39:25在gmail.com>;的泰勒·亚当斯<;Coppero1237写道:>;>;是因为给GCC添加后台是免费的,C已经广为人知,而C已经足够了?Skeeve.com的阿诺德写道:>;天鹅座解决方案公司(Hi J......
2020-7-14 1:17
2019年11月12日第17卷第5期编译器是将高级的、更容易编写的代码转化为高效的机器代码以供计算机执行的必备技术。他们在做这件事上的老练经常被忽视。您可能会花费大量时间仔细考虑算法和处理错误消息,但可能没有足够的时间来了解编译器能够做些什么。 本文介绍了一些编译器和代码生成概念,然后介绍了您的编译器正在为您完成的一......
2020-7-13 3:42
下载PDF摘要:传统编译器在单个通用中间表示(IR)上操作。这些IR通常是低级的,接近机器指令。因此,依赖领域特定信息的优化要么是不可能的,要么需要复杂的分析来恢复丢失的信息。相反,多级重写实例化方言层次结构(IR),逐层降低程序,并在最合适的级别执行代码转换。我们展示了这种方法在天气和气候领域的有效性。特别地,我们......
2020-7-12 8:43
在2020年7月10日星期五下午3:59,Josh Triplett<;[email protected]&>写道:据我回忆,Greg;最初引入此选项的最大条件是执行与LTO使用的相同的Kconfig选项,并关闭其下的&>选项。有足够的时间来做实验。否,请将其设为铁锈可用自动配置选项。与我们已......
2020-7-7 5:42
这是系列文章中的最后一篇,也是最有趣的一篇。第1部分和第2部分重点介绍了Golang-Goroutines和几乎停顿的GC的两个关键特性。这篇帖子补充了所有缺失的部分。 但是,在如何实现所有这些功能方面,有更多的不同之处而不是相似之处。让我们跳到这些内容:)。 Go编译成本机二进制文件--也就是说,它的二进制文件“绑......
2020-7-6 5:13
这篇文章详细介绍了5+JIT和各种优化策略,并讨论了它们如何与不同的JIT协同工作。这篇博文中的信息是深度优先的,因此有许多重要的概念可以跳过。 有关JIT编译器的背景信息,请参阅JIT编译器深度介绍:JIT不是非常及时的。如果标题对你没有意义,那么它可能值得浏览一下。 我经常描述一种优化行为,并声称它可能存在于其他......
2020-6-30 0:55
为了帮助支持我们的社区在新冠肺炎期间远程工作,我们将在2020年6月30日之前免费提供ACM在我们数字图书馆中发布的所有作品。了解更多。 我们使用饼干,以确保我们给你最好的经验,在我们的网站。 您的浏览器似乎不支持它们,这会影响网站功能。
2020-6-28 6:44
我知道浮点算术在现代计算机上有点疯狂。例如,浮点数不具有关联性: 但是,至少在我的经验中,这是相当一致的。您不应该简单地假设像关联性这样的花哨属性在现实世界中起作用。 如果上帝真的存在,可变比率就会是0.50178230318,故事就到此为止了。不幸的是,没有正好为0.50178230318的浮点数。相反,它落在浮点......
2020-6-26 5:18
注意:这是一篇来自Sixten编程语言文档的老帖子,我对它进行了润色和充实。在写完之后,我发现了Salsa,这是一个与我的Rock库有着非常相似目标的Rust库,它也绝对值得一看! 编译器不再仅仅是获取一堆源文件并产生汇编代码的黑匣子。我们期望他们: 是增量的,这意味着如果我们在做了一些更改之后重新编译一个项目,我们......
Tiny C Compiler(bellard.org)
2020-6-24 2:46
小的!。您可以在任何地方编译和执行C代码,例如在救援盘上(x86TCC可执行文件大约100KB,包括C预处理器、C编译器、汇编器和链接器)。 快地!。TCC生成x86代码。无字节码开销。编译、汇编、链接比GCC快好几倍。 无限量!任何C动态库都可以直接使用。TCC正朝着完全符合ISOC99的方向发展。TCC当然可以自......
An Intro to Compilers(nicoleorchard.com)
2020-6-20 17:26
编译器只是一个翻译其他程序的程序。传统编译器将源代码转换为您的计算机能够理解的可执行机器码。(一些编译器将源代码翻译成另一种编程语言。这些编译器称为源到源翻译器或转换程序。)。LLVM是一个广泛使用的编译器项目,由许多模块化的编译器工具组成。 前端将源代码转换为中间表示(IR)*。clang是LLVM用于C语言家族的......
2020-6-13 19:55
《寻找原始的Fortran编译器》刊载于2017年4-6月的IEEE计算史年鉴。如果链接不起作用,你可以在这里阅读我最终提交的版本。 我写这篇文章是为了记录我在2003年末开始寻找IBM704的原始FORTRAN编译器的源代码的过程。很多搜索都记录在这个灰尘甲板的博客上,我在2004年7月创建了这个博客,作为一种广告......
2020-6-5 11:47
我最喜欢的语言之一是围棋语言。我喜欢它的简约。它在云环境中很受欢迎,也很有用。许多流行的工具都是用Go编写的,这是有充分理由的。 去年我做了一次关于围棋的演讲,有人要求我对围棋进行批评。我不介意围棋缺少例外或泛型。这些功能通常被高估了。 然而,尽管Go很有魅力,但我发现它的编译器与我对其他编程语言的期望不一样。当围棋......
Why do C to Z80 compilers produce poor code?(retrocomputing.stackexchange.com)
2020-5-31 3:24
我的印象是,很难将C编译成Z80并最终得到优化良好的代码。是这样吗?为什么? 我对6502的了解更多。下面的一些例子说明了为什么C不适合6502: C中的数组由整数类型索引。6502在索引数组方面相当快,但不幸的是,只有在索引是一个字节宽的情况下。因此,像strcmp或strlen这样的代码可能需要对每个字符执行16......
One-pass Compiler(keleshev.com)
2020-5-23 21:43
让我们来看看什么是一遍编译器,并尝试实现一遍编译器。 一遍编译器在分析过程中直接发出汇编(或二进制代码),而不创建中间表示,如AST。这是一种罕见的技术,在计算机内存匮乏的时代使用。这限制了可能的语言功能和生成的代码的质量。但是,这种技术产生的快速编译器让比尔·盖茨羡慕不已。这是一种非常罕见的技术,在计算机内存匮乏的......
2020-5-17 4:42
我的名字是Jesse,这是一个面向喜欢在实践中学习的开发人员的Rust入门教程。 本教程的目的是发展对Rust中的工具构建的直觉-具体地说,学习如何在Rust中思考和构建。 我们的目标是生产一个非常基本的命令行编译器,可以将包含标题和段落的基本Markdown文档转换为html文件。 为此,我们将从构建一个简单的“H......