3年前 (2021-08-07)  相关技术 |   抢沙发  2092 
文章评分 1 次,平均分 5.0

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

关于

发表评论

表情 格式

暂无评论

登录

忘记密码 ?

切换登录

注册