脚本语言
本插件采用两种脚本语言,分别是基于 Nashorn 的 JavaScript,和 Groovy,使用者可以自由选择,甚至是相互调用
信息
插件中的高级扩展功能只能通过 Groovy 实现,Groovy 要强大很多
语言区别
JavaScript 依赖其他框架,并非传统字节码,不是原生 JVM 语言,但更容易上手
Groovy 是标准的 JVM 语言,和 Java 看上去很像,可以无缝调用 Java 类、继承、异常、泛型等,且支持一些 Java 没有的语法糖,但是我觉得这个语言有些设计非常邪门(所以学习成本略高)
Groovy 才是真是的 Java Script(直译)!
性能区别
进行 1000 轮,每轮 1000000 次加算的相对 Java 性能(越高越好)原生 Java: 100%Groovy (动态): 2% ~ 3%,极差,非必要不建议用Groovy (静态): 95% 左右,非常接近原生 JavaJDK 8 Nashorn (预编译): 55 ~ 60%,仅一半左右 Java 性能JDK 8 Nashorn: 60%左右,仅一半左右 Java 性能
提示
测试前已充分预热 20 轮
测试结果不代表真实性能,测试内容仅循环计算,结果仅供参考,结论自己斟酌
Groovy (动态) 和 Groovy (静态) 性能区别极大,所以一定要使用 Groovy (静态)
点我查看代码
加一个 @groovy.transform.CompileStatic 即可表示为静态
import groovy.transform.CompileStatic //注意需要导入
@CompileStatic
class Test {
...
}不加则是动态
class Test {
...
}已知BUG
Nashorn 可能存在不可修复的内存泄露问题,具体表现为越重载越卡,不重载则没问题
Groovy 在高版本 Bukkit 中使用 CommandSender#sendMessage(String message) 时无法编译,推测是高版本 Bukkit API 使用了更加复杂的泛型等复杂机制导致 Groovy 无法检测参数类型,可去掉 @CompileStatic 或使用 "${''}原字符串" 解决。
