35 | Truffle:语言实现框架
郑雨迪
该思维导图由 AI 生成,仅供参考
今天我们来聊聊 GraalVM 中的语言实现框架 Truffle。
我们知道,实现一门新编程语言的传统做法是实现一个编译器,也就是把用该语言编写的程序转换成可直接在硬件上运行的机器码。
通常来说,编译器分为前端和后端:前端负责词法分析、语法分析、类型检查和中间代码生成,后端负责编译优化和目标代码生成。
不过,许多编译器教程只涉及了前端中的词法分析和语法分析,并没有真正生成可以运行的目标代码,更谈不上编译优化,因此在生产环境中并不实用。
另一种比较取巧的做法则是将新语言编译成某种已知语言,或者已知的中间形式,例如将 Scala、Kotlin 编译成 Java 字节码。
这样做的好处是可以直接享用 Java 虚拟机自带的各项优化,包括即时编译、自动内存管理等等。因此,这种做法对所生成的 Java 字节码的优化程度要求不高。
公开
同步至部落
取消
完成
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
《深入拆解 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-157 - simple_孙Polyglot是不是类似于mmap技术,在虚拟机的堆空间上只有一份,但是可以映射到不同语言的对象上2021-09-25
- 宋世通这招叫做釜底抽薪2021-08-27
- zzj想问下对于没有垃圾回收的语言,如 C++,经过 Truffle 解释后,在 JVM 上运行的时候还有 GC 吗?是有 native 方法直接调用对象的析构吗?2019-03-27
收起评论