aviatorscript

A high performance scripting language hosted on the JVM.

Stars
4.5K
Committers
21

Bot releases are visible (Hide)

aviatorscript - AviatorScript 5.4.3 Latest Release

Published by killme2008 4 months ago

What's Changed

Full Changelog: https://github.com/killme2008/aviatorscript/compare/aviator-5.4.2...aviator-5.4.3

aviatorscript - AviatorScript 5.4.2

Published by killme2008 4 months ago

What's Changed

  • Fix: NPE for bigint/double/long function by @shuailung in https://github.com/killme2008/aviatorscript/pull/615
  • Feat: adds new option Options.EVAL_TIMEOUT_MS to set the execution timeout value in milliseconds. #629
    For example, set the execution timeout to be 100 milliseconds:
    AviatorEvaluator.setOption(Options.EVAL_TIMEOUT_MS, 100);

Throw the TimeoutException when it exceeds. It's not precise and may hurt a little performance.

Breaking changes

  • Upgrade the JDK compiler version to 1.8

New Contributors

Full Changelog: https://github.com/killme2008/aviatorscript/compare/aviator-5.4.1...aviator-5.4.2

aviatorscript - AviatorScript 5.4.1

Published by killme2008 about 1 year ago

What's Changed

New Contributors

Full Changelog: https://github.com/killme2008/aviatorscript/compare/aviator-5.3.3...aviator-5.4.1

aviatorscript - AviatorScript 5.4.0

Published by killme2008 about 1 year ago

Recommend using v5.4.1.

What's Changed

New Contributors

Full Changelog: https://github.com/killme2008/aviatorscript/compare/aviator-5.3.3...aviator-5.4.0

aviatorscript - AviatorScript 5.3.3

Published by killme2008 almost 2 years ago

Main changes:

  • Fixed memory leak in lambda function caching #494 #481
  • Fixed wrong value captured by function #496
  • Adds seq.add_all(seq1, seq2) to add all elements of seq2 to seq1. #500
aviatorscript - AviatorScript 5.3.2

Published by killme2008 about 2 years ago

Several bugs fixed:

  • #466 constant folding do not work when operator is overrided
  • #484 Stackoverflow in ArrayUtils
  • #483 A corner case in parser.
  • #476 Expression#getVariableFullNames() returns the class names when the script has a new statement.

Thank you for all these bug reports.

It's recommended to upgrade.

aviatorscript - AviatorScript 5.3.1

Published by killme2008 over 2 years ago

Main changes:

  • Adds new method AviatorEvaluatorInstance.aliasOperator(OperatorType, String) to set an alias token for logical && and || operator, read the doc.
  • Improve [] index operator and seq functions performance when processing arrays.
  • Fixed #431 Expression#getVariableNames returns wrong result in nested scope.
  • Fixed AviatorEvaluator.execute(String, Map) not work with global caching.

主要改动:

  1. 增加 AviatorEvaluatorInstance.aliasOperator(OperatorType, String) 方法用于给 &&|| 逻辑运算符定义别名,比如定义成 and 或者 or,参见文档
  2. 改进对数组的访问性能。
  3. 修复 #431 , Expression#getVariableNames 在处理嵌套范围的时候返回错误结果
  4. 修复 AviatorEvaluator.execute(String, Map) 方法不支持全局缓存的 bug
aviatorscript - AviatorScript 5.3.0

Published by killme2008 almost 3 years ago

Release 5.3.0 officially, main changes:

  • Supports interpreter mode, you can use aviatorscript on android(or other not-standard JVM) right now. See InterpreterExample and doc. #403 #334 #29
  • Fixed assign and define operator can't work when enable TRACE_EVAL. #408
  • Implements ApplicationContextAware for SpringContextFunctionLoader. Now SpringContextFunctionLoader can be managed by spring container.
aviatorscript - AviatorScript 5.2.7

Published by killme2008 about 3 years ago

Main changes:

  • Fixed a concurrent issue in Expression#getVariableNames and Expression#getVariableFullNames.
  • Should throw no such property exception if property not found when using variable a.b.c dot syntax.
aviatorscript - AviatorScript 5.2.6

Published by killme2008 over 3 years ago

A strongly recommended upgrading version if you are using 5.x versions.

Main changes:

  • Fixed:
    • Anonymous function can't support variadic arguments.
    • continue statement not work with if/else or nested if statements #394
    • LambdaFunction ThreadLocal caching may leak environment context #392
  • New features:
    • New function: partial(f, &args) that takes a function f and fewer than the normal arguments to f, and returns a fn that takes a variable number of additional args. When called, the returned function calls f with args + additional args.
    • Use soft reference for caching reflection result #386
    • Added key info to exception message when sequence is null in seq.get function.
aviatorscript - [Deprecated] AviatorScript 5.2.5

Published by killme2008 over 3 years ago

Main changes:

  • Auto convert java boxing types into aviator number types when invoking java methods #369
  • Adds a calcuator example which evaluate arithmetic expression in string.
  • Bug fixes: can't call overload getter/setter by reflection #368
  • Used array-based hashmap for internal env to reduce memory consumption.
aviatorscript - [Deprecated] AviatorScript 5.2.4

Published by killme2008 over 3 years ago

New features:

  • Define anonymous function by fn syntax (instead of lambda ... -> ... end), let add = fn(x, y) { x + y); add(1, 2) for example.
  • Unpacking arguments(as sequence) by *args syntax like python, for example:
fn test(a, b, c, d) {
  a * b + c * d
}
let a = tuple(1, 2);
let list = seq.list(3, 4);
p(test(*a, *list));
  • Adds AVIATOR_DEPS environment variable to point third-party jar files directory for aviator shell command-line, default is $HOME/.aviatorscript/deps , all jar files under this directory will be added to JVM CLASSPATH .
  • Improve for statement, supports index( List/Array sequence etc.) and key/value(Map) iterating:
let a = tuple(1, 2, 3, 4, 5, 6, 7, 8, 9);
for i, x in a {
  assert(i + 1 == x);
}
let m = seq.map("a", 1, "b", 2, "c", 3);
for k, v in m {
    if k == "a" {
      assert(v == 1);
    }elsif k == 'b' {
      assert(v == 2);
    }elsif k == 'c' {
      assert(v == 3);
    }else {
      throw "should not happen";
    }
}
  • seq.array_of(Class, dimension1, dimension2, ...dimensions) to create a multidimensional array.
  • New functions to add/retrieve/remove object's metadata:
let a = 1;
## retrieve meta ,null if not found
p(meta(a)); 

## associate key/value metadata to any objects by with_meta(obj, key, value)
a = with_meta(a, "key", tuple(1, 2, 3));
p(meta(a));  ## {"key" => [1, 2, 3]}
p(meta(a, "key")); ## [1, 2, 3]

## remove metadata by without_meta(obj, key)
a = without_meta(a, "key");
p(meta(a));  
  • Bugs fixed:
    • Wrong size number of Range .
    • JUnit dependency issue, Thanks to DQinYuan

Change log details.

aviatorscript - [Deprecated] AviatorScript 5.2.3

Published by killme2008 over 3 years ago

Main changes:

  • Removed commons-beanutils #340
  • Fixed AviatorString#toString() may print warning message.
  • Fixed missing source file and line number in string interpolation expression when throws exception.
  • New function is_distinct(seq) returns true when a sequence doesn't have duplicated elements.
  • Focus on performance turning
Aviator 5.2.3:
Benchmark                           Mode  Cnt       Score      Error   Units
PerfBenchmark.testArith            thrpt    5  108126.155 ± 6304.752  ops/ms
PerfBenchmark.testArithByAviator   thrpt    5    2565.933 ±  105.076  ops/ms
PerfBenchmark.testArithByBeetl     thrpt    5    1625.887 ±  291.247  ops/ms
PerfBenchmark.testArithByScript    thrpt    5    7050.305 ±   69.529  ops/ms
PerfBenchmark.testCond             thrpt    5   93099.759 ± 8554.585  ops/ms
PerfBenchmark.testCondByAviator    thrpt    5    1667.093 ±  112.807  ops/ms
PerfBenchmark.testCondByBeetl      thrpt    5    1617.045 ±   93.373  ops/ms
PerfBenchmark.testCondByScript     thrpt    5    6926.106 ±  267.292  ops/ms
PerfBenchmark.testObject           thrpt    5    8537.937 ±  272.512  ops/ms
PerfBenchmark.testObjectByAviator  thrpt    5    1025.725 ±   30.846  ops/ms
PerfBenchmark.testObjectByBeetl    thrpt    5     860.873 ±   33.559  ops/ms
PerfBenchmark.testObjectByScript   thrpt    5    4552.307 ±  199.507  ops/ms

Aviator 5.2.2:
Benchmark                           Mode  Cnt       Score      Error   Units
PerfBenchmark.testArith            thrpt    5  105095.308 ± 3861.646  ops/ms
PerfBenchmark.testArithByAviator   thrpt    5    2405.785 ±   78.325  ops/ms
PerfBenchmark.testArithByBeetl     thrpt    5    1628.726 ±   45.332  ops/ms
PerfBenchmark.testArithByScript    thrpt    5    7513.704 ±  286.090  ops/ms
PerfBenchmark.testCond             thrpt    5   92518.914 ± 1961.141  ops/ms
PerfBenchmark.testCondByAviator    thrpt    5     952.022 ±   32.184  ops/ms
PerfBenchmark.testCondByBeetl      thrpt    5    1647.736 ±   19.300  ops/ms
PerfBenchmark.testCondByScript     thrpt    5    7631.465 ±  404.298  ops/ms
PerfBenchmark.testObject           thrpt    5    8847.069 ±  261.799  ops/ms
PerfBenchmark.testObjectByAviator  thrpt    5     873.944 ±   26.327  ops/ms
PerfBenchmark.testObjectByBeetl    thrpt    5     826.758 ±   30.071  ops/ms
PerfBenchmark.testObjectByScript   thrpt    5    4647.178 ±  237.783  ops/ms
• Benchmark improvements:
    • testArithByAviator 6.7%
    • testCondByAviator 75%
    • testObjectByAviator 17.4%
aviatorscript - [Deprecated] AviatorScript 5.2.2

Published by killme2008 almost 4 years ago

Main changes:

  • Fixed Expression#getVariableNames() and Expression#getVariableFullNames(), they will return the global uninitialized variable names. #277 #335
  • Adds AviatorEvaluatorInstance#setCachedExpressionByDefault(boolean) to configure whether to cache the compiled expression by default when invoke compile(string), execute(string, [env]) methods etc, default value is false. #330
  • Adds a new option Options.ALLOWED_CLASS_SET with a Set<Class> value to control the allowed class list in new statement and static method/field invocation. #325
  • Adds new features Feature.StaticFields and Feature.StaticMethods. #326

changelog https://www.yuque.com/boyan-avfmj/aviatorscript/bggwx2

aviatorscript - [Deprecated] AviatorScript 5.2.1

Published by killme2008 almost 4 years ago

The change log.

If you are trying 5.2.0, please upgrade to this version, sorry.

aviatorscript - [Deprecated] AviatorScript 5.2.0

Published by killme2008 almost 4 years ago

See the 5.2.0 changelog.

Deprcated, please use 5.2.1

aviatorscript - [Deprecated] AviatorScript 5.1.4

Published by killme2008 about 4 years ago

Main changes:

  • Fixed memory leak when compiling string interpolation lexeme.Warn when compling lexeme without caching.
  • Check function name when using fn syntax to define functions.
  • Adds AviatorEvaluatorInstance#removeModule(String) to remove java module, and adds an example JavaModuleExample.
aviatorscript - [Deprecated] AviatorScript 5.1.3

Published by killme2008 about 4 years ago

Main changes:

  • Supports exponenent operator **(like ruby), for example:
p(2**3);  ## 8
p(2**-3);  ## 0.125

The detail rule is in doc.

  • Adds EnvProcessor to process env before or after executing expression, #224
  • Bug fixes, #278 , #272
aviatorscript - [Deprecated] AviatorScript 5.1.2

Published by killme2008 about 4 years ago

A minor change:

  • Don't override __exp___ internal var to user pass-in env.
aviatorscript - [Deprecated] AviatorScript 5.1.1

Published by killme2008 about 4 years ago

  • Fixed ==/!= operator can't work with variable syntax suger such as a.b.c, it may returns wrong result.

It's a recommended version to upgrade if you are using 5.x versions.