// dot 前缀变量 + 箭头函数
var.greet = -> {
return "Hello, " + args[0] + "!"
}
// Java 互操作
val.HashMap = use('java.util.HashMap')
val.map = HashMap()
map.put('msg', greet('Aria'))
print(map.get('msg')) // Hello, Aria!
Features
没有分号,没有访问修饰符,没有接口。只有你需要的。
var、val、global、server、client — 五种命名空间通过 dot 前缀分发到不同存储层。
所有函数使用 -> {} 定义。一等公民,闭包捕获,高阶函数,统一而简洁。
内置 ES6+ 解析器,.js 文件自动识别。共享同一套 IR / VM / JIT 管线。
四种编译路径:整数特化、浮点循环、递归记忆化、标准路径。热点代码编译为 JVM 字节码。
use() 加载 JVM 类,Java.extend() 实现接口,注解驱动注册,完整双向互操作。
一行代码执行脚本,沙箱安全控制,预编译例程复用,模块系统与增量编译。
Dual Syntax
Aria 原生语法与 JavaScript 共享同一套编译管线。
var.fib = -> {
if (args[0] <= 1) {
return args[0]
}
return fib(args[0] - 1) + fib(args[0] - 2)
}
print(fib(10)) // 55
function fib(n) {
if (n <= 1) {
return n;
}
return fib(n - 1) + fib(n - 2);
}
console.log(fib(10)); // 55
.js 文件自动识别 · this → self · null → none · === → == · continue → next
JMH Benchmark
下面是 Aria 与同类 JVM 脚本引擎及 Java 原生的 JMH 实测数据(ms/op,越小越好)。
| Workload | Aria | Rhino | Nashorn | Groovy | GraalJS | Java 原生 |
|---|---|---|---|---|---|---|
| Loop Arithmetic 1M | 0.231 ms | 25.47 ms | 14.46 ms | 5.42 ms | 79.78 ms | 0.232 ms |
| Float Arithmetic 1M | 1.85 ms | 25.32 ms | 14.04 ms | 5.10 ms | 84.73 ms | 0.923 ms |
| String Concat 100K | 0.782 ms | 2.68 ms | 1.97 ms | 0.945 ms | 8.43 ms | 0.098 ms |
| Array/List Ops 10K | 0.108 ms | 0.363 ms | 0.146 ms | 0.056 ms | 1.20 ms | 0.041 ms |
| Object/Map Ops 10K | 0.303 ms | 1.44 ms | 0.264 ms | 0.678 ms | 1.67 ms | 0.243 ms |
| Branch Intensive 100K | 0.082 ms | 8.76 ms | 6.19 ms | 3.68 ms | 9.97 ms | 0.061 ms |
| Fibonacci(25) | 0.184 ms | 2.01 ms | 0.633 ms | 3.78 ms | 13.10 ms | 0.182 ms |
| Function Call 100K | 1.61 ms | 2.97 ms | 1.45 ms | 1.60 ms | 11.37 ms | ~0 ms |
注:数值循环(Loop / Fibonacci)Aria 与 Java 原生持平;Branch / Object 接近。
注:Float / String 慢于 Java 原生 2-8×(IValue 包装开销),但仍快于同类脚本引擎。
注:Array/List Ops 10K Aria 0.108 ms:JIT hot path 跳过名称切分/scope 解析,命中后直接 INVOKEVIRTUAL ListValue.add,仅次于 Groovy。
注:Function Call 100K Java 原生的 x = x+1 100k 次被 C2 识别为常量消除,数据接近零;Aria 与 Nashorn / Groovy 处在同一量级。
注:GraalJS 在 OpenJDK 17 上以解释模式运行,用 GraalVM JDK 跑能显著提速。
注:Java Float Arithmetic 采用 double 循环变量;用 int 循环变量测得 2.80 ms。