编译

2020-9-25 1:2
欢迎回到“编译Lisp”系列。这一次,我想暂停编译,最后添加一个阅读器。我终于对手动输入日益复杂的AST感到沮丧了,所以我想是时候了。在这篇帖子之后,我们将能够输入如下程序: 让我们的编译器为我们制作ast!魔法。这也将为我们增加一些很好的调试工具。例如,假设有一个交互式命令行实用程序,我们可以在其中输入Lisp表达......
2020-9-24 21:24
SCC是一个有限的C编译器,可生成微小模型(即单段)DOS COM文件。它应该可以在大多数操作系统上运行,并且可以在具有128K RAM的DOS2.0+兼容系统(例如SDO)下自托管(编译器只使用64K,但是操作系统也需要具有生命力:)。 使用C99编译器编译scc.c并在scc.c上运行输出,这将生成scc.com......
2020-9-24 17:31
在本系列的第一篇文章中,我们介绍了CPython VM。我们已经了解到它是通过执行一系列称为字节码的指令来工作的。我们还看到,Python字节码不足以完全描述一段代码的功能。这就是存在代码对象概念的原因。执行诸如模块或函数的代码块意味着执行相应的代码对象。代码对象包含块的字节码、常量和块中使用的变量名称以及块的各种属......
2020-9-22 17:45
MOUD是Rust的HTML模板引擎。它是以宏html!的形式实现的,它将您的标记编译成专门的Rust代码。这种独特的方法使Maud模板快速、超级类型安全且易于部署。 请注意,Maud依赖于不稳定的过程宏API,因此需要Rust的夜间版本。 从0.11版开始,我对库的核心语法和语义感到满意。此阶段的开发重点是添加功能......
2020-9-22 0:25
为了避免在本地设置编译器环境,您可以使用预先构建的Docker镜像:xtuc/cobaul: Docker run\-e EM_OUT\-e EM_args\-v/tmp/cobol-worker:/root/.emscripten_cache/\-v$pwd:/worker\-v$pwd/build:/build\......
2020-9-21 5:2
“小事”是一系列基于洛克斯利内部培训课程的新帖子。通常,内容要么是专有的(例如,特定主密钥平台的内部工作原理),要么通常不是很有趣(例如,我们的内部库和工具),但有时内容适合更广泛的受众,在这种情况下,我想分享它们。 这篇文章将介绍一些加速C++编译的源码级技术,以及它们的(不)优势。它不会谈论C++之外的事情,比如......
2020-9-17 18:36
你有没有羡慕过分配公用设施是多么容易呢?或者,也许您的脚本变得过多,并且遇到了需要特定于平台的代码的库的障碍?或者那个OTP版本看起来很容易发布,但不知何故,运行untar正好有足够的摩擦让人抱怨你使用长生不老药。 BAKWARE通过扩展MixRelease来解决这些问题,使其能够将Elixir项目转换为可复制和直接......
2020-9-12 17:54
PermalLink GitHub是5000多万开发人员的家园,他们一起工作,共同托管和审查代码、管理项目和构建软件。 报名。 在最近的版本中,Elixir团队一直专注于编译器,无论是在编译时捕获更多错误,还是在提高速度方面都是如此。ELEXIRV1.11在这两个方面都取得了很好的进展。此版本还包括许多其他优点,例如......
2020-9-12 2:57
Andrew Sengul将介绍APRL语言到Common Lisp的编译器APRPLE。APL是一种使用简洁、一致的语法和数组的语言……
2020-9-11 21:25
OPUS是Microsoft内部开发人员用于Microsoft Word for Windows v1.1a的代码名-让我们从源代码编译它,看看它是否可以运行!Microsoft Word for Windows v1.1a版权所有©Microsoft 1989。 这篇博客记录了如何获取源代码,并将其转换成可以工作的......
2020-9-10 13:8
这是关于JIT编译器系列文章的第一篇。我们的计划是采用一种简单的输入语言,并为其开发一些解释器和JIT,其复杂程度大致递增。我希望在本系列结束时,读者能够很好地理解开发JIT编译器需要什么,以及有哪些工具可以帮助完成这项任务。 输入语言将是Brainfuck,或BF,因为我将从现在起和整个系列中都会提到它。我认为这是......
2020-9-9 22:40
Loko方案在GNU Affero通用公共许可证版本3或更高版本下可用。 Loko Scheme是一款小众编译器。它并没有试图取代任何其他编译器。一些关于你可以用它做什么的想法: 尝试让C在Scheme上运行,而不是反过来。 驱动程序基于编译器内部机制、伙伴分配器和基于并发ML的并发性。 请将问题报告给GitLab上......
2020-9-8 7:16
由于Mozilla最近的变化,我从事Rust编译器的时间即将结束。我仍然在Mozilla工作,但在可预见的未来,我将专注于Firefox的工作。 所以我想我应该结束我的“如何加速铁锈编译器”系列,这个系列始于2016年。 如何提高铁锈编译器的速度。原始的帖子,标题最有意义的帖子。它主要关注如何为性能工作设置编译器,包......
2020-9-6 23:49
欢迎回到“编译Lisp”系列。上一次,我们完成了将其余常量作为标记指针立即数添加的操作。由于只有值(无法对其进行操作)没有多大用处,我们将添加一些原始的一元函数。 “原语”在这里指的是它们内置于编译器中,因此我们实际上不会编译对汇编过程调用的调用。这也称为编译器内部机制。“一元”表示函数只有一个参数,“函数”有点用词......
2020-9-4 19:50
我们依赖您的支持:您知道您每月只需不到3美元就可以获得Phoronix Premium吗?今天就试着在一个页面上查看我们的网站无广告、多页文章,以及更多内容,这样我们就可以写更多的Linux硬件评论了。Google Summer of Code2020中最有趣的项目之一是正在进行的允许并行编译单个代码文件的工作,这是......
2020-9-3 8:58
今天,我终于写下了一些关于编译器诊断设计的两个外围方面的思考,我认为这两个方面对某些类型的警告非常重要,我的第一个思考是关于修复程序,第二个是关于抑制机制。 现在大多数C++编译器并不只是告诉你发生了问题(就像ed的有名的?提示符),以及问题是什么(例如,“预期标识符”),他们会试图告诉您如何解决问题。 将GCC 4......
2020-9-1 22:59
构建编译器很困难。优化编译器是耗资数百万美元的项目 多年来的发展,但仍然无法充分利用可用的性能, 并且很容易被窃听。快速过渡到异构并行和 多样化的体系结构提高了对积极优化编译器的需求 一直居高不下,使得编译器开发人员难以跟上。我们需要的是 简化编译器构造的更好工具。 本文提出了显著降低编译器成本的新技术 构造,同时提......
2020-9-1 16:6
下载PDF摘要:二进制可执行文件的逆向工程是计算机安全领域的一个关键问题。一方面,恶意方可能会从软件产品中找回可解释的源代码,以获取商业优势。另一方面,二进制反编译可用于代码漏洞分析和恶意软件检测。然而,高效的二进制反编译是具有挑战性的。传统的反编译器有以下主要局限性:(I)它们只适用于特定的源-目标语言程序,因此为......
2020-8-30 10:7
编写性能关键型程序可能会令人沮丧,因为为命令式语言优化编译器往往是不可预测的。对于优化的子集--那些简化而不是重新排序代码的优化--证明编译器可靠地执行优化将是有用的。我们表明,采用“超分析”的方法进行优化可以证明这一点。通过与线性代数类比,我们将优化器的零空间定义为它归结为空程序的程序。为了跨越空空间,我们定义了通......
2020-8-30 3:39
本指南旨在帮助记录Rustc(Rust编译器)是如何工作的,并帮助新的贡献者参与到Rustc开发中来。 构建和调试rustc:包含无论您如何贡献都应该有用的信息,关于构建、调试、概要分析等。 贡献给Rustc:包含无论您如何贡献都应该有用的信息,关于贡献的程序、稳定特性等。 高级编译器体系结构:讨论编译器的高级体系结......
2020-8-25 21:5
可移植性在BPF上下文中意味着什么?编写开发人员需要处理的可移植BPF程序的挑战是什么?这篇文章将描述BPF的可移植性问题,以及BPF CO-RE(编译一次,随处运行)是如何帮助解决这个问题的。 自从(E)BPF诞生以来,对BPF社区来说,尽可能简化BPF应用程序的开发,使其体验像用户空间应用程序一样简单和熟悉,一直......
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-18 7:53
我们提出了一个编译器,它可以自动将高级形状基元(管、板)的汇编转换为低级机器指令。 工业针织机可以在没有人工干预的情况下快速生产精细的、无缝的3D表面。然而,用于对它们进行编程的工具需要详细的操作和对低级针织操作的理解。我们提出了一个编译器,它可以自动将高级形状基元(管、板)的汇编转换为低级机器指令。这些高级形状基元......
2020-8-17 0:10
NIM是一种静态类型的编译系统编程语言。它结合了成熟语言(如Python、Ada和Moda)的成功概念。 NIM生成本地无依赖关系的可执行文件,不依赖于虚拟机,这些文件很小,很容易重新分发。 NIM编译器和生成的可执行文件支持所有主要平台,如Windows、Linux、BSD和MacOS。 受C++和Rust的启发,......
2020-8-13 13:22
今天,我想成为一名C编译器。我从前面的编码练习中添加了一个手工编译的ECHO汇编版本,并添加了一个新的make目标make asm,它将对其进行汇编。让我们看看我们手工编译的程序集,并将其与我们的C编译器进行比较,然后问问它是否值得。 .text.p2ign 2.globl main.type main,@funct......
2020-8-7 2:18
使测量二进制大小变得如此困难的原因之一是,编译器可以在幕后执行很多可能导致二进制大小不同的工作,这也是为什么,尽管将其用作SnakeQR的粗略度量,我并不认为它是一个比较度量。对我们来说幸运的是,我们再也不用太担心二进制文件的大小了。不过,让我们来比较一下,只是为了好玩。 我们将比较clang 8.0.1和clang......
2020-8-6 7:42
编译器资源管理器是一个交互式在线编译器,它显示编译后的C++、Rust、Go(以及更多)代码的汇编输出。
2020-8-5 13:7
我上一次写这篇文章是在4月份,讲述了我在加速Rust编译器方面所做的工作。又到了更新的时间了。 首先是流程改变:我已经开始每周进行性能分类。每周二,我都会查看过去一周合并的所有公关的业绩结果。对于性能下降或提高了不可忽略的每个PR,我都会向PR添加一条注释,并提供指向测量结果的链接。我还将这些结果收集到一份每周报告中......