Jactl:适合嵌入式的JVM脚本语言


Jactl 是一种功能强大的脚本语言,适用于基于 Java 的应用程序,其语法是从 Java 和 Groovy 借用的位的组合,并添加了一些 Perl 以实现良好的效果。

这是一种用于嵌入实时 Java 应用程序(例如游戏引擎、数据库引擎、支付引擎等)的脚本语言。

  • 永远不会阻塞事件循环线程
  • 基于 Java/Groovy 的语法(带有一点 Perl)
  • 支持在失败后在其他地方恢复/恢复检查点执行状态
  • 开源(Apache 许可证 2.0)
  • 安全的
  • 易于通过脚本使用的应用程序特定功能进行扩展
  • 编译为字节码

Jactl 旨在集成到 Java 应用程序中,为客户/用户提供一种安全、锁定的方式来定制应用程序行为。
它特别适合事件循环/反应式应用程序,因为它基于连续性的内置挂起/恢复机制确保它永远不会阻塞正在运行的执行线程。

这是一些简单的 Jactl 代码:

int fib(int x) {
  return x <= 2 ? 1 : fib(x-1) + fib(x-2);
}
println 'fib(20) = ' + fib(20);

由于在 Jactl 中分号是可选的,输入是可选的,return对于函数的最后一个表达式是可选的,并且双引号字符串允许嵌入表达式,所以前面的示例也可以这样写:

def fib(x) { x <= 2 ? 1 : fib(x-1) + fib(x-2) }
println "fib(20) = ${fib(20)}"

这是一个更高级的示例,它将输入作为行进行流式传输,搜索 Markdown 标题并生成目录:

// Sanitise text to make suitable for a link
def linkify = { s/ /-/g;  s/[^\w-]
//g }

// Find all top level headings in input and generate markdown for table of contents:
stream(nextLine).filter{ /^# /r }
                .map{ s/#
// }
                .map{
"* [$it](#${ linkify(it.toLowerCase()) })" }
                .each{ println it }