深入拆解 Java 虚拟机
郑雨迪
Oracle 高级研究员,计算机博士
87446 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 40 讲
模块四:黑科技 (3讲)
深入拆解 Java 虚拟机
15
15
1.0x
00:00/00:00
登录|注册

35 | Truffle:语言实现框架

Graal.js
Google的V8
基于Truffle的Sulong
利用LLVM编译器生成的二进制文件
基于Truffle的FastR
GNU R
Truffle Ruby
JRuby
使用Graal的HotSpot虚拟机
使用C2的HotSpot虚拟机
可运行LLVM bitcode的编程语言
依赖Graal编译器提供的API
可在任何Java虚拟机上运行
实现词法分析、语法分析、AST解释器
用Java编写
高性能
复用运行时优化组件
依赖Graal编译器提供的API
可在任何Java虚拟机上运行
运行时优化
实现词法分析、语法分析、AST解释器
用Java编写
Polyglot API
Truffle语言之间共用对象
支持混用不同编程语言
去优化和重新编译
基于假设的投机性优化
基于类型profile的优化
动态语言中的类型确定
Truffle的应用
概念
JavaScript
C/C++
R
Ruby
Java虚拟机语言
Sulong项目
项目简介
目标
Truffle
Polyglot特性
技术依赖
Oracle Labs实现的语言
Polyglot
节点重写
Partial Evaluation
性能指标
语言实现框架
总结与实践
GraalVM
Truffle: 语言实现框架

该思维导图由 AI 生成,仅供参考

今天我们来聊聊 GraalVM 中的语言实现框架 Truffle。
我们知道,实现一门新编程语言的传统做法是实现一个编译器,也就是把用该语言编写的程序转换成可直接在硬件上运行的机器码。
通常来说,编译器分为前端和后端:前端负责词法分析、语法分析、类型检查和中间代码生成,后端负责编译优化和目标代码生成。
不过,许多编译器教程只涉及了前端中的词法分析和语法分析,并没有真正生成可以运行的目标代码,更谈不上编译优化,因此在生产环境中并不实用。
另一种比较取巧的做法则是将新语言编译成某种已知语言,或者已知的中间形式,例如将 Scala、Kotlin 编译成 Java 字节码。
这样做的好处是可以直接享用 Java 虚拟机自带的各项优化,包括即时编译、自动内存管理等等。因此,这种做法对所生成的 Java 字节码的优化程度要求不高。
不过,不管是附带编译优化的编译器,还是生成中间形式并依赖于其他运行时的即时编译优化的编译器,它们所针对的都是编译型语言,在运行之前都需要这一额外的编译步骤。
与编译型语言相对应的则是解释型语言,例如 JavaScript、Ruby、Python 等。对于这些语言来说,它们无须额外的编译步骤,而是依赖于解释执行器进行解析并执行。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Truffle是一个基于Java的语言实现框架,旨在简化新编程语言的开发,并通过Truffle提供的运行时优化来提高性能。基于Truffle的语言实现只需用Java实现词法分析、语法分析以及抽象语法树的解释执行器,便可在任何Java虚拟机上运行。当运行在附带Graal编译器的Java虚拟机上时,Truffle将调用Graal编译器提供的API,实现对解释执行的即时编译,从而提高性能。Truffle框架已实现并开源多个Truffle语言,如Sulong项目,可让任何能编译为LLVM bitcode的编程语言在其上运行。文章还介绍了各种语言在GraalVM EE上的性能指标,展示了Truffle语言解释器的优越性能。总体而言,Truffle框架为语言实现提供了高效的运行时优化,使得开发新语言变得更加简单且性能优越。文章还介绍了Partial Evaluation和节点重写等技术,以及Truffle的Polyglot特性,支持在一段代码中混用多种不同的语言。这些特性使得Truffle成为一个强大的语言实现框架,为开发者提供了灵活性和性能优势。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入拆解 Java 虚拟机》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • xiaobang
    感觉truffle的特化和pypy的做法有点像,老师能否评价一下这两者呢?另外,truffle的特化相当于对每份目标语言源码都要搞一个新目标语言解释器,这样似乎比较耗时间,而性能测试说明性能比其它解释器要高,能解释一下为什么吗

    作者回复: 是挺像的。你可以看看Stefan Marr的专业学术文章 http://stefan-marr.de/papers/oopsla-marr-ducasse-meta-tracing-vs-partial-evaluation/ Truffle解释器本身会被partial evaluation和即时编译,相当于即时编译新目标语言了

    2018-10-15
    7
  • simple_孙
    Polyglot是不是类似于mmap技术,在虚拟机的堆空间上只有一份,但是可以映射到不同语言的对象上
    2021-09-25
  • 宋世通
    这招叫做釜底抽薪
    2021-08-27
  • zzj
    想问下对于没有垃圾回收的语言,如 C++,经过 Truffle 解释后,在 JVM 上运行的时候还有 GC 吗?是有 native 方法直接调用对象的析构吗?
    2019-03-27
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部