GraalVM是Oracle的一个新的开源项目,它试图使Java虚拟机成为运行所有主要语言的通用虚拟机。在GraalVM之前,已经很少有像Scala、Closure这样的语言将JVM作为其运行时。这对于这些语言来说是非常成功的。GraalVM进一步扩展了这一思想,使得以JVM为目标变得很容易,从而使更多的语言可以在JVM上共存。
GraalVM是从2014年开始的一个研究项目。推特从2017年开始就在制作中使用它。但对于普通公众来说,它在2019年下半年就已经准备好了。
在本系列文章中,我将探讨GraalVM可以为JVM生态系统带来什么。这是本系列的第三篇文章,探讨了从Scala调用JS中定义的函数。
使用Scala中的JavaScript函数
在上一篇文章中,我们看到了如何评估Scala中的JavaScript代码。如果我们想混合和匹配不同的语言,仅仅评估代码是不够的。要使用这两种语言,我们应该能够在它们之间发送和返回值。在本文中,我们将看到如何从JS返回函数并从Scala使用它。
以下是实现相同目标的步骤。
JavaScript代码中的返回函数
下面的代码从JS返回一个函数。
val context = Context.create()
val function = context.eval("js","x => 'hello '+x")
Scala中函数变量的类型为类型值。此类型表示计算任何代码段后的返回值。使用此返回类型,我们可以调用函数。
执行代码
下面的代码使用Value
类上的execute
方法运行返回的函数。
println(function.execute("world").asString())
asString
方法将执行结果转换为Java类型。
结果如下所示:
hello world
通过使用简单的执行函数,我们能够在两种语言之间进行通信,而不需要任何开销。这就是格拉尔文的力量。
您可以在github上访问完整的代码:https://github.com/phatak-dev/GraalVMExperiments/blob/master/src/main/scala/com/madhukaraphatak/graalvm/CallingFunctions.scala
小结
GraalVM的多语言特性使得在同一个VM上混合和匹配不同的语言非常有吸引力。在本文中,我们看到了如何从Scala调用JS中定义的函数。语言之间的这种零开销交互使得GraalVM非常强大。
除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/2205.html
暂无评论