5.3.0

Main changes:

  • Interpreter mode to run on Android or other not-standard JVM.
  • 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.

    5.2.7

    Fixed:

  • A concurrent issue in Expression#getVaraibleNamesand Expression#getVaraibleFullNames.

  • Should throw no such property exception if propert not found when using variable a.b.c dot syntax.

    5.2.6

    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.

      5.2.5

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.

    5.2.4

    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: ```javascript 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));

  1. - 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` .
  2. - Improve `for` statement, supports index( List/Array sequence etc.) and key/value(Map) iterating:
  3. ```javascript
  4. let a = tuple(1, 2, 3, 4, 5, 6, 7, 8, 9);
  5. for i, x in a {
  6. assert(i + 1 == x);
  7. }
  8. let m = seq.map("a", 1, "b", 2, "c", 3);
  9. for k, v in m {
  10. if k == "a" {
  11. assert(v == 1);
  12. }elsif k == 'b' {
  13. assert(v == 2);
  14. }elsif k == 'c' {
  15. assert(v == 3);
  16. }else {
  17. throw "should not happen";
  18. }
  19. }
  • seq.array_of(Class, dimension1, dimension2, ...dimensions) to create a multidimensional array.
  • New functions to add/retrieve/remove object’s metadata: ```javascript let a = 1; p(meta(a)); ## retrieve meta ,null if not found

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));

  1. - Bugs fixed:
  2. - Wrong size number of `Range` .
  3. - JUnit dependency issue, Thanks to [DQinYuan](https://github.com/DQinYuan)
  4. <a name="GvBuB"></a>
  5. ## 5.2.3
  6. Main changes:
  7. - Removed commons-beanutils [#340](https://github.com/killme2008/aviatorscript/issues/340)
  8. - Fixed `AviatorString#toString()` may print warning message.
  9. - Fixed missing source file and line number in string interpolation expression when throws exception.
  10. - New function `is_distinct(seq)` returns true when a sequence doesn't have duplicated elements.
  11. - 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

  1. - Benchmark improvements:
  2. - testArithByAviator 6.7%
  3. - testCondByAviator 75%
  4. - testObjectByAviator 17.4%
  5. <a name="Km984"></a>
  6. ## 5.2.2
  7. Main changes:
  8. - Fixed `Expression#getVariableNames()` and `Expression#getVariableFullNames()`, they will return the global uninitialized variable names. [#277](https://github.com/killme2008/aviatorscript/issues/277) [#335](https://github.com/killme2008/aviatorscript/issues/335)
  9. - 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](https://github.com/killme2008/aviatorscript/issues/330)
  10. - 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](https://github.com/killme2008/aviatorscript/issues/325)
  11. - Adds new features `Feature.StaticFields` and `Feature.StaticMethods`. [#326](https://github.com/killme2008/aviatorscript/issues/326)
  12. <a name="VyeqF"></a>
  13. ## 5.2.1
  14. If you are trying 5.2.0, please upgrade to this verson.
  15. 1. New Features:
  16. - [Access java class's static methods by reflection,](https://www.yuque.com/boyan-avfmj/aviatorscript/xbdgg2#rjNeD) `Long.parseLong("3")` for example. You must `use` the class at first.
  17. 2. Breaking changes:
  18. - String interpolation only works on **literal string in script**. Runtime string will not work.
  19. 3. Fixed:
  20. - Weak reference queue memory leak in reflector.
  21. - String interpolation compile error in some corner cases.
  22. - Locked `commons-beanutils` version to 1.9.4
  23. <a name="OA0z5"></a>
  24. ## 5.2.0
  25. **Deprecated, please use 5.2.1**
  26. 1. **New Features:**
  27. - function overloading by parameter count, see [function_overload.av](https://github.com/killme2008/aviatorscript/blob/master/examples/function_overload.av).
  28. - variadic function by define variable parameter by prefixed with `&` , see [function_varargs.av](https://github.com/killme2008/aviatorscript/blob/master/examples/function_varargs.av).
  29. - use statement to import java classes, such as `use java.util.Date;` , see [use.av](https://github.com/killme2008/aviatorscript/blob/master/examples/use.av).
  30. - access class static variables by `.` , for example `Math.PI` , see [static_vars.av](https://github.com/killme2008/aviatorscript/blob/master/examples/static_vars.av).
  31. - access or assign map's value by `m[key]` syntax, the key can be a object or expression.
  32. - when use [aviator commandline](https://www.yuque.com/boyan-avfmj/aviatorscript/ma3zs3), there is a new internal variable `__MODULE__.dir` represents the file's current directory absolute path.You may use it in `require` for example:
  33. ```javascript
  34. ## examples/test_qsort.av
  35. let q = require(__MODULE__.dir + '/qsort.av');
  36. fn rand_list(n) {
  37. let a = seq.list();
  38. for i in range(0, n) {
  39. seq.add(a, rand(n));
  40. }
  41. return a;
  42. }
  43. let a = rand_list(20);
  44. println("before sorting: " + a);
  45. q.sort(a);
  46. println("after sorting: " + a);

The you can run the script by command aviator examples/test_qsort.av , you don’t need to change the work directory into examples as before.

  1. New Functions:

    • more sequence functions:
      • take_while(seq, pred) to take elements in sequence with pred(x) is true.
      • drop_while(seq, pred) to drop elements in sequence with pred(x) is true.
      • concat(list1, list2) to concat two sequences.
      • group_by(seq, keyfn) to group elements by keyfn(x) .
      • distinct(seq) to return a sequence of the elements of coll with duplicates removed.
      • sort(seq, comparator) to sort sequence with a java.util.Comparator .
      • reverse(seq) to return a seq of the items in coll in reverse order.
      • seq.keys(map) to return the key set of map.
      • seq.vals(map) to return the value set of map.
      • zipmap(keys, vals) to return a map with the keys mapped to the corresponding vals.
    • more math functions:
      • math.atan(x)
      • math.acos(x)
      • math.asin(x)
      • math.ceil(x)
      • math.floor(x)
    • more internal functions:
      • is_a(val, class) Returns true when the value is a intance of the class, for example is_a("a", String) returns true.
      • comparator(pred) Returns an implementation of java.util.Comparator based upon predicate.
      • repeat(n, x) Returns a list of x which it’s lenght n.
      • repeatedly(n, fn) the fn function takes no args, and returns a sequence of calls to it in n times.
      • constantly(x) Returns a function that takes any number of arguments and returns x.
  2. Improvements:

    • improve error reporting, adds source file and source line number.
    • performance tweak for variable syntax suger such as a.b.c or a.b[10].c etc, replace the commons-beanutils by default, almost 2x speed up.
    • Checking if function name is reserved when parsing script.
    • Reduce memory consumption.