William_Shi
众所周知,在最新的JDK15当中,Nashorn已经被彻底移除。
然而,由于MineCraft的大部分用户都在使用Java15以下的版本
所以加载JavaScript的Bukkit插件仍然可以使用
这些插件我想大部分都在使用JDK自带的Nashorn引擎

然而这带来了一个问题
Nashorn当中加载这样的JavaScript代码
Java.type("")
在Java8当中,它返回一个jdk.internal.dynalink.beans.StaticClass
在Java9当中,不存在jdk.internal.dynalink.beans.StaticClass,只有jdk.dynalink这个包(JDK9实现模块化)
那么就会导致不兼容

之后我针对Graal引擎进行了测试,代码如下
package test;

import 省略

public class Test {

public static void main(String... args) throws Exception {
try (Context context = Context.newBuilder().allowAllAccess(true).build()) {
context.eval("js", "Java.type(\"test.Test\").test(Java.type(\"test.Test\"))");
}
}

public static void test(Object obj){
System.out.println(obj.getClass());
}

}
也就是说我执行了这么一段js
Java.type("test.Test").test(Java.type(xxxxxx))
第一个Java.type是拿到了我测试所用的类,test.Test
第二个则是调用这个类的静态方法test,传入的参数是Java.type返回的玩意
输出的是class java.lang.Class
也就是说,并没有jdk internal的东西了
取而代之的就是普普通通的java.lang.class,不存在版本兼容性的问题


那么我希望做一个小调查
如果你正在使用JavaScript写Bukkit插件,你的JS开发前置采用的是Nashorn还是Graal 还是Rhino等其他引擎?
如果你有意愿写一个加载JavaScript的插件(js runtime),你希望采用哪种引擎?


2021.12 数据,可能有更多内容众所周知,在最新的JDK15当中,Nashorn已经被彻底移除。
然而,由于MineCraft的大部分用户都在使用Java15以下的版本
所以加载JavaScript的Bukkit插件仍然可以使用
这些插件我想大部分都在使用JDK自带的Nashorn引擎


然而这带来了一个问题
Nashorn当中加载这样的JavaScript代码
Java.type("")
在Java8当中,它返回一个jdk.internal.dynalink.beans.StaticClass
在Java9当中,不存在jdk.internal.dynalink.beans.StaticClass,只有jdk.dynalink这个包(JDK9实现模块化)
那么就会导致不兼容


之后我针对Graal引擎进行了测试,代码如下
package test;


import 省略


public class Test {


public static void main(String... args) throws Exception {
try (Context context = Context.newBuilder().allowAllAccess(true).build()) {
context.eval("js", "Java.type(\"test.Test\").test(Java.type(\"test.Test\"))");
}
}


public static void test(Object obj){
System.out.println(obj.getClass());
}


}
也就是说我执行了这么一段js
Java.type("test.Test").test(Java.type(xxxxxx))
第一个Java.type是拿到了我测试所用的类,test.Test
第二个则是调用这个类的静态方法test,传入的参数是Java.type返回的玩意
输出的是class java.lang.Class
也就是说,并没有jdk internal的东西了
取而代之的就是普普通通的java.lang.class,不存在版本兼容性的问题


那么我希望做一个小调查
如果你正在使用JavaScript写Bukkit插件,你的JS开发前置采用的是Nashorn还是Graal 还是Rhino等其他引擎?
如果你有意愿写一个加载JavaScript的插件(js runtime),你希望采用哪种引擎?



bleake
萌新表示看不懂

阿哲。
我用的 虚幻4引擎

William_Shi

我说的是JavaScript加载引擎。。。

洞穴夜莺
Rhino吧
Graal的javascript好像还没稳定吧

William_Shi
洞穴夜莺 发表于 2020-10-25 15:55
Rhino吧
Graal的javascript好像还没稳定吧

还没用过Rhino,它好用吗?

洞穴夜莺
William_Shi 发表于 2020-10-25 15:58
还没用过Rhino,它好用吗?

没用过,不过听说很nb

猖09.
bleake 发表于 2020-10-25 15:49
萌新表示看不懂

我也是啊,压根没写过插件

阿哲。
William_Shi 发表于 2020-10-25 15:52
我说的是JavaScript加载引擎。。。

对呀我用的虚幻4引擎加载(doge)

洞穴夜莺
猖09 发表于 2020-10-25 16:14
我也是啊,压根没写过插件

跟插件没啥关系吧

洞穴夜莺
Nashorn是肯定不能要的,都0202年了还es5

William_Shi
猖09 发表于 2020-10-25 16:14
我也是啊,压根没写过插件

说插件主要是因为要和mc有一点关系
其实主要是想要调查一下哪种引擎用的人多

huzpsb
William_Shi 发表于 2020-10-25 15:58
还没用过Rhino,它好用吗?

想一想WE用的就是它,它不好用吗?

迫害妄想症
哇,进来了一个不得了的贴,全是看不懂的代码

William_Shi
2119590076 发表于 2020-10-25 23:57
哇,进来了一个不得了的贴,全是看不懂的代码

只是一些简单的测试而已

RINNDA
今天在群里还看到你和别人讨论这个