您现在的位置是:首页 > 文章详情

LLVM/wwwtlruy01com人人都需要懂一点I8669I44445的酷炫编译器

日期:2019-10-19点击:546

一款人人都需要懂一点的酷炫编译器——LLVM

QQ_20191020100056

LLVM简介

LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。
QQ_20191020100116

发展历史

2000年LLVM开始开发。

2005年Apple雇了Chris Lattner,LLVM也相当于成了Apple的官方支持的编译器。

2011年12月 LLVM3.0发布,LLVM包括了一系列子项目,并且同步发布了新版本,如C/C++/Objective-C前端Clang 3.0改进了C++程序编译支持;改进C++ 2011标准支持;实现支持即将发布的C1x标准的某些特性;更快的生成代码,更快的编译,等等。

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

QQ_20191020100128

LLVM与众不同的原因
◾LLVM的“中间表示”(IR)是一项大创新。LLVM的程序表示方法真的“可读”。虽然看上去这没什么要紧,但要知道,其他编译器的中间表示大多是种内存中的复杂数据结构,以至于很难写出来,这让其他编译器既难懂又难以实现。
◾LLVM架构远比其他编译器要模块化得多。
◾LLVM给狂热的学术黑客提供了一种研究工具的选择,它还是一款有大公司做后台的工业级编译器。这意味着你不需要去在“强大的编译器”和“可玩的编译器”之间做妥协——不像你在Java世界中必须在HotSpot和Jikes之间权衡那样。
QQ_20191020100145

LLVM在不同语言中使用

使用 LLVM 的典型方式是通过你所熟悉的语言来编写代码

两种常见的可选语言是 C 和 C++:
◾LLVM 本身是用 C++ 编写的
◾LLVM 的 API 以 C 和 C++ 版本提供
◾大量的语言开发往往会以 C/C++ 作为一个基础

不过,这两种语言并不是唯一的选择。许多语言都可以原生调用 C 语言库,所以理论上可以用任何这样的语言进行 LLVM 开发。但需要有一个实际的语言库可以很好地封装 LLVM API。

QQ_20191020100152

需要注意的是,一些与 LLVM 的语言绑定可能不完整,例如 Python ,有多种绑定选择,但每个选项的完整性和实用性各不相同:
◾LLVM 项目维护着自己的一套到 LLVM 的 C API 的绑定,但是目前他们没有继续维护。

◾llvmpy 在 2015 年后就没有进行维护了 —— 这对软件项目都是不利的,因为每个版本的 LLVM 都有一些变化,所以在使用 LLVM 时便是如此。
◾由创建 Numba 的团队开发的 llvmlite 已经成为当前在 Python 中的 LLVM 的竞争者。它只实现了 LLVM 功能的一个子集,正如 Numba 项目的需求所规定的那样。但是这个子集满足了绝大多数 LLVM 用户所需。
◾llvmcpy 旨在为 C 库带来最新的 Python 绑定,以自动化的方式保持更新,并使用 Python 的习惯用法来访问它们。

LLVM 的创建者撰写的使用 C++ 或 OCAML 语言的教程能够一步步指导你创建一种简单的名为 Kaleidoscope 的语言:
◾Haskell:参考原始教程的直接移植。
◾Python:在此网站的教程和原始版本非常相近,而另一个版本则是用交互式命令行进行更为雄心勃勃的重写。这两种版本都使用 llvmlite 作为到 LLVM 的绑定。
◾Rust 和 Swift:不可避免地,我们不得不将该教程移植到这两种语言之上,它们都是由 LLVM 自身帮助使其诞生的。

最后,这个教程也有其他国家语言版本的。这里有中文版,分别是使用原始的 C++ 和 Python 版本。

原文链接:https://yq.aliyun.com/articles/721421
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章