前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >全栈虚拟机GraalVM初体验

全栈虚拟机GraalVM初体验

作者头像
老钱
发布2018-08-14 17:42:08
1.5K0
发布2018-08-14 17:42:08
举报
文章被收录于专栏:码洞码洞码洞

官方介绍

近日Oracle开源了一个实验性的产品GraalVM,官方称之为Universal GraalVM。它打通了不同语言之间的鸿沟,让我们可以进行混合式多语言编程。 在GraalVM之上,我们可以编写Java、Python、Ruby、R、Scala、Kotlin,甚至是C、C++语言。

你可能会当心不同语言之间的互操作会不会带来性能上的问题。GraalVM说不会,你可以随意在多种不同语言之间窜来窜去,性能都不是问题。它完全不同于JVM里面的JRuby、Jython这些library。

看到这里,你须明白,GraalVM可能不止是一个玩具,它能真得跑起来大型应用。

图中的例子同时用了NodeJS、Java和R语言,拿node平台的express框架跑起了一个简单的web服务器。

GraalVM支持镜像加速,类似于Android的Ahead-Of-Time编译,将程序编译为原生的二进制程序,加速程序启动过程。

我们看到这性能至少提速了一个数量级。Spring启动蜗牛慢的问题有可能首先被GraalVM解决。

GraalVM可以内置到不同的运行环境。目前已经可以内置到Node、Java、Oracle和MySQL这几个产品中。

下载安装

接下来我们亲自体验一下GraalVM的神奇魅力。

首先进入下载页面,OMG,竟然同时提供了社区版和企业版,看来GraalVM真不止是个玩具。

糟糕,社区版目前不支持mac,还得在龟慢的github上下载。

企业版支持mac,还好,可以试用,但是下载要注册Oracle账号,国外的网站访问真是龟慢。耐心!耐心!耐心!

填写了一番冗长的注册表单后,总算可以下载了,又是龟速啊。

改用迅雷,迅雷快,也就快了一小会,迅速从500k/s降低到50k/s,又回到了100k/s。还是喝杯咖啡先。

总算下完了,大概花了1个小时。

图中的紫色命令是GraalVM提供的比较特殊的命令

  1. js 运行在GraalVM之上的javascript命令行
  2. node 跟普通的node一样,区别是运行在GraalVM之上
  3. java 跟普通的java一样,区别是运行在GraalVM之上
  4. lli 运行在GraalVM之上的llvm字节码执行器,C和C++代码会编译成llvm字节码,然后通过它来运行
  5. native-image 预编译程序文件生成快速二进制文件,用于加速启动程序
  6. gu 其它的语言像Python、Ruby和R的支持都是通过gu进行安装的

因为小编此时无法访问外国网站,所以只好放弃ruby和python的安装了。

版本信息

可以看到这些命令的版本信息里除了node之外都携带了Graal单词。

运行

使用native-image进行预编译之后会生成一个二进制文件,然后对比前后运行时间发现预编译前后执行性能明显提升。native-image耗时较长,因为要做大量的代码静态分析,大约耗时1分钟。

C语言需要先编译成llvm的字节码程序hello.bc,然后才能让lli命令执行。

javascript解释器,全局对象console、Math、Date都有了。

不可思议,npm可以直接安装第三方包,使用GraalVM提供的node能正常运行。npm也是GraalVM内置的程序。

解决了哪些痛点

GraalVM的混合式多语言编程可以解决开发者的以下常见问题

  1. 那个库我这个语言没有,我TM得自己撸一个
  2. 那个语言最适合解决我这个问题,但是我这个环境下跑不起来
  3. 这个问题已经被我的语言解决了,但是我的语言跑起来太慢了

通过使用Polyglot API,GraalVM要给开发者带来真正的语言级自由。

Polyglot工作原理

GraalVM提供了一种在不同语言之间可以无缝传值的方法,而不需要像其它虚拟机一样进行序列化和反序列化。这样就保证了跨语言也能继续保持高性能。

GraalVM开发了「跨语言互操作协议」,它是一种特殊的接口协议,每种运行在GraalVM之上的语言都要实现这种协议,这样就能保证跨语言的互操作性。 语言和语言之间无须了解对方就可以高效传值。该协议还在不断改进中,未来会支持更多特性。

弱化主语言

GraalVM开发了一个实验性的启动器「polyglot」。在polyglot里面不存在主语言的概念,每种语言都是平等的,可以使用polyglot运行任意语言编写的程序,而不需要前面的每种语言单独一个启动器。polyglot会通过文件的扩展名来自动分类语言。

Shell

GraalVM还开发了一个动态语言的Shell,该Shell默认使用js语言,可以使用命令切换到任意其它语言进行解释操作。

最后

不幸的是,GraalVM是Oracle的产品,它要是能像Google这样节操多点,GraalVM也许会是一个非常完美的产品。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码洞 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档