编译原理实战课
宫文学
北京物演科技CEO
立即订阅
2840 人已学习
课程目录
已更新 28 讲 / 共 53 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (2讲)
开篇词 | 在真实世界的编译器中游历
免费
学习指南 | 如何学习这门编译原理实战课?
预备知识篇 (9讲)
01 | 编译的全过程都悄悄做了哪些事情?
02 | 词法分析:用两种方式构造有限自动机
03 | 语法分析:两个基本功和两种算法思路
04 | 语义分析:让程序符合语义规则
05 | 运行时机制:程序如何运行,你有发言权
06 | 中间代码:不是只有一副面孔
07 | 代码优化:跟编译器做朋友,让你的代码飞起来
08 | 代码生成:如何实现机器相关的优化?
知识地图 | 一起来复习编译技术核心概念与算法
不定期加餐 (1讲)
不定期加餐1 | 远程办公,需要你我具备什么样的素质?
真实编译器解析篇 (16讲)
09 | Java编译器(一):手写的编译器有什么优势?
10 | Java编译器(二):语法分析之后,还要做些什么?
11 | Java编译器(三):属性分析和数据流分析
12 | Java编译器(四):去除语法糖和生成字节码
13 | Java JIT编译器(一):动手修改Graal编译器
14 | Java JIT编译器(二):Sea of Nodes为何如此强大?
15 | Java JIT编译器(三):探究内联和逃逸分析的算法原理
16 | Java JIT编译器(四):Graal的后端是如何工作的?
17 | Python编译器(一):如何用工具生成编译器?
18 | Python编译器(二):从AST到字节码
19 | Python编译器(三):运行时机制
20 | JavaScript编译器(一):V8的解析和编译过程
21 | JavaScript编译器(二):V8的解释器和优化编译器
22 | Julia编译器(一):如何让动态语言性能很高?
23 | Julia编译器(二):如何利用LLVM的优化和后端功能?
24 | Go语言编译器:把它当做教科书吧
编译原理实战课
15
15
1.0x
00:00/00:00
登录|注册

22 | Julia编译器(一):如何让动态语言性能很高?

宫文学 2020-07-22
你好,我是宫文学。
Julia 这门语言,其实是最近几年才逐渐获得人们越来越多的关注的。有些人会拿它跟 Python 进行比较,认为 Julia 已经成为了 Python 的劲敌,甚至还有人觉得它在未来可能会取代 Python 的地位。虽然这样的说法可能是有点夸张了,不过 Julia 确实是有它的可取之处的。
为什么这么说呢?前面我们已经研究了 Java、Python 和 JavaScript 这几门主流语言的编译器,这几门语言都是很有代表性的:Java 语言是静态类型的、编译型的语言;Python 语言是动态类型的、解释型的语言;JavaScript 是动态类型的语言,但可以即时编译成本地代码来执行。
而 Julia 语言却声称同时兼具了静态编译型和动态解释型语言的优点:一方面它的性能很高,可以跟 Java 和 C 语言媲美;而另一方面,它又是动态类型的,编写程序时不需要指定类型。一般来说,我们很难能期望一门语言同时具有动态类型和静态类型语言的优点的,那么 Julia 又是如何实现这一切的呢?
原来它是充分利用了 LLVM 来实现即时编译的功能。因为 LLVM 是 Clang、Rust、Swift 等很多语言所采用的后端工具,所以我们可以借助 Julia 语言的编译器,来研究如何恰当地利用 LLVM。不过,Julia 使用 LLVM 的方法很有创造性,使得它可以同时具备这两类语言的优点。我将在这一讲中给你揭秘。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《编译原理实战课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(3)

  • ヾ(◍°∇°◍)ノ゙
    老师,很多语言都声称使用llvm提升性能,但是在lua领域好像一直是luajit无法超越
    2020-07-22
  • myrfy
    从速度角度考虑,julia的编译应该是AOT的,可以在编译期多花时间,来换取执行期的速度,而v8是jit,要保证运行流畅,不能花太多时间。
    从jit的角度分析,如果依赖统计数据确定了某一变量的类型,则该变量类型变动的概率很低,为小概率的事件再生成一套机器码不划算
    从内存占用角度,生成更多的版本意味着占用更多内存,而v8的主要使用场景,浏览器,对资源的限制是比较严格的。
    2020-07-22
  • d
    “多重分派能够根据方法参数的类型,确定其分派到哪个实现。它的优点是容易让同一个操作,扩展到支持不同的数据类型。”,宫老师,多重分派是泛型实现吗?
    2020-07-22
收起评论
3
返回
顶部