LLVM/wwwtlruy01com人人都需要懂一点I8669I44445的酷炫编译器
一款人人都需要懂一点的酷炫编译器——LLVM
LLVM简介
LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。
发展历史
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软件系统奖。
LLVM与众不同的原因
◾LLVM的“中间表示”(IR)是一项大创新。LLVM的程序表示方法真的“可读”。虽然看上去这没什么要紧,但要知道,其他编译器的中间表示大多是种内存中的复杂数据结构,以至于很难写出来,这让其他编译器既难懂又难以实现。
◾LLVM架构远比其他编译器要模块化得多。
◾LLVM给狂热的学术黑客提供了一种研究工具的选择,它还是一款有大公司做后台的工业级编译器。这意味着你不需要去在“强大的编译器”和“可玩的编译器”之间做妥协——不像你在Java世界中必须在HotSpot和Jikes之间权衡那样。
LLVM在不同语言中使用
使用 LLVM 的典型方式是通过你所熟悉的语言来编写代码
两种常见的可选语言是 C 和 C++:
◾LLVM 本身是用 C++ 编写的
◾LLVM 的 API 以 C 和 C++ 版本提供
◾大量的语言开发往往会以 C/C++ 作为一个基础
不过,这两种语言并不是唯一的选择。许多语言都可以原生调用 C 语言库,所以理论上可以用任何这样的语言进行 LLVM 开发。但需要有一个实际的语言库可以很好地封装 LLVM API。
需要注意的是,一些与 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 版本。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python入门你要懂哪些?
前言 什么是计算机语言 计算机就是一台用来计算的机器,人让计算机干什么计算机就得干什么! 需要通过计算机的语言来控制计算机(也就是编程语言)! 计算机语言其实和人类的语言没有本质的区别,不同点就是交流的主体不同!计算机语言发展经历了三个阶段: 1). 机器语言 机器语言通过二进制编码来编写程序 执行效率好,编写起来太麻烦 2). 符号语言(汇编) 使用符号来代替机器码 编写程序时,不需要使用二进制, 而是直接编写符号 编写完成后,需要将符号转换为机器码,然后再由计算机执行符号转换为机器码的过程称为汇编 将机器码转换为符号的过程,称为反汇编 汇编语言一般只适用于某些硬件,兼容性比较差 3). 高级语言 高级语言的语法基本和现在英语语法类似,并且和硬件的关系没有那么紧密了。也就是说我们通过高级语言开发程序可以在不同的硬件系统中执行 并且高级语言学习起来也更加的容易,现在我们知道的语言基本都是高级语言 如:C、 C++、C#、Java、JavaScript、Python 等.. 编译型语言和解释型语言 计算机只能识别二进制编码(机器码),所以任何的语言在交由计算机执行时必须要先转换为机器码,...
- 下一篇
程序员的wwwruy01comJava学习清单I8669I44445我想你应该挺需要的
IT行业飞速发展,除了水涨船高的薪资水平,还有不断推陈出新的编程技术。不同的技术,应用在不同的领域。但对于小白来说,想要投身这个行业,我该从何学起?那些应用领域是未来的大趋势?而我未来的学习方向又有哪些呢? 学编程,用Java确实是一个相当不错的选择。不过,面对Java网上有纷杂的资料,一些程序员却不知道该怎么选择。 学习Java没有章法,那么编程就无法建立体系,这就导致了一种现象:学了好长的一段时间感觉仍然只学了一个皮毛。 所以,小编整理了一份Java学习任务清单,按照先后顺序,由简单到复杂学习Java,假以时日定能玩转Java 1、《实战JAVA程序设计》这是一份来自阿里程序员的Java学习清单,我想你应该挺需要的这是一本针对初学者学Java的一本书,最近翻看这本书才发现,它的内容结构非常的清晰,从基础内容到部分进阶内容,你可以根据自己的基础或者需要,重新或选择性学习书中内容。 这本书里有JAVASE讲解、有项目实战、有数据结构、有算法、有JDK源码解读、有底层内存分析、有设计模式,从一开始就植入了“高手思维和高手习惯”, 可以说是非常适合大学生和入门学习的人使用。 2、大神的视频...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS6,CentOS7官方镜像安装Oracle11G
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker使用Oracle官方镜像安装(12C,18C,19C)