《编译与反编译技术实战》——1.5 编译器LLVM

简介:

本节书摘来自华章计算机《编译与反编译技术实战》一书中的第1章,第1.5节,作者 刘晓楠 陶红伟 岳峰 戴超,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.5 编译器LLVM

LLVM是构架编译器的框架系统,由C++编写而成,用于优化以任意程序语言编写的程序的编译时间、链接时间、运行时间以及空闲时间,对开发者保持开放,并兼容已有脚本。LLVM计划启动于2000年,最初由伊利诺伊大学香槟分校的Chris Lattner主持开展。2006年Chris Lattner加盟Apple公司并致力于LLVM在Apple开发体系中的应用。Apple公司也是LLVM计划的主要资助者。

LLVM的命名最早源自于Low Level Virtual Machine(底层虚拟机)的缩写,由于命名带来的混乱,目前LLVM就是该项目的全称。LLVM 核心库提供了与编译器相关的支持,可以作为多种语言编译器的后台来使用,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。LLVM的项目是一个模块化和可重复使用的编译器和工具技术的集合。LLVM提供一个现代化的、基于SSA的编译策略,能够同时支持静态和动态的任意编程语言的编译目标。至今为止,LLVM已被应用到许多商业和开源的项目,并被广泛用于学术研究。

LLVM荣获2012年ACM软件系统奖。

对关注编译技术的开发人员,LLVM提供了很多优点:

1)现代化的设计。LLVM的设计是高度模块化的,使得其代码更为清晰和便于排查问题所在。

2)语言无关的中间代码。一方面,这使得通过LLVM能够将不同的语言相互联结起来,也使得LLVM能够紧密地与IDE交互和集成。另一方面,发布中间代码而非目标代码能够在目标系统上更好地发挥其潜能而又不影响可调试性(比如,在目标系统上针对本机的硬件环境产生目标代码,但又能够直接通过中间代码来进行行级调试)。

3)可作为工具和函数库。使用LLVM提供的工具可以比较容易地实现新的编程语言的优化编译器或虚拟机,或为现有的编程语言引入一些更好的优化/调试特性。

相关文章
|
7月前
|
人工智能 前端开发 编译器
【AI系统】LLVM 架构设计和原理
本文介绍了LLVM的诞生背景及其与GCC的区别,重点阐述了LLVM的架构特点,包括其组件独立性、中间表示(IR)的优势及整体架构。通过Clang+LLVM的实际编译案例,展示了从C代码到可执行文件的全过程,突显了LLVM在编译器领域的创新与优势。
391 3
|
7月前
|
存储 索引
「Mac畅玩鸿蒙与硬件44」UI互动应用篇21 - 随机励志语录生成器
本篇将带你实现一个随机励志语录生成器应用。用户点击按钮后,界面会随机显示一条预设的励志语录。该应用展示了如何结合数组操作、状态管理和动态更新界面内容的功能,是一个轻量级的互动应用示例。
204 21
「Mac畅玩鸿蒙与硬件44」UI互动应用篇21 - 随机励志语录生成器
|
10月前
|
人工智能 测试技术 Serverless
小而强大,零一万物编程小能手Yi-Coder系列模型开源!
9 月 5 日,零一万物开源了 Yi-Coder 系列模型,它作为 Yi 系列模型家族中的“编程小能手”,展现了卓越的代码生成能力。这是继今年 5 月 13 日开源 Yi-1.5 系列模型之后,零一万物在开源方向上的又一重要成果。
小而强大,零一万物编程小能手Yi-Coder系列模型开源!
|
12月前
|
存储 SQL NoSQL
NoSQL数据库与传统关系型数据库的比较
【7月更文挑战第29天】NoSQL数据库与传统关系型数据库各有其独特的优势和适用场景。关系型数据库在复杂查询、事务处理和一致性方面表现出色,但在扩展性和处理大规模数据集时可能受到限制。而NoSQL数据库则以高扩展性、高性能和高可用性为目标,适用于处理大规模数据集和高并发读写场景。在选择数据库时,开发者应根据具体的应用场景和需求进行权衡和选择。
|
自然语言处理
IEC 61131-3标准编程入门
IEC 61131-3标准编程入门
|
NoSQL 物联网 atlas
|
算法 数据可视化 大数据
大数据分析的技术和方法——探究现代数据处理的未来方向
在当今信息化时代,海量数据已经成为企业和组织的重要资源。大数据分析技术的出现为数据处理提供了更高效、更准确的解决方案。本文将深入探讨大数据分析技术和方法,分析其优势和应用场景,以及未来发展方向。
435 10
|
算法 图形学 UED
【Unity 3D】AssetBundle工作流程、打包策略详解(超详细必看)
【Unity 3D】AssetBundle工作流程、打包策略详解(超详细必看)
588 0
|
前端开发 C语言 iOS开发
基于LLVM的编译原理简明教程 (1) - 写编译器越来越容易了
跟学院派的厚书给大家的印象不同,其实用LLVM写个简单的编译器是件容易的事情,因为大部分事情LLVM都替我们做了。
8479 0
|
JavaScript Java Go
ANTLR快餐教程(1) - 有好多现成例子啊
前面介绍LLVM的第一篇中,我们介绍过,编译器的后端基本都可以通过LLVM来解决。 那么,前端我们如何处理呢?我们选择ANTLR。
4227 0