Rhino 1.7R1pre

ftp://ftp.mozilla.org/pub/js/rhino1_7R1pre.zip
試してみた。

Generator
print(primes = (function(){
  yield 2;
  for(var n = 3;; n += 2){
    for(var d = 3, m = Math.sqrt(n), f; d < m && n % d; d += 2);
    if(d >= m) yield n;
  }
})(), uneval(primes));
print((1e19+'').split('').map(function(){ return primes.next() }));
[object Generator] ({})
2,3,5,7,9,11,13,17,19,23,25,29,31,37,41,43,47,49,53,59

ふむふむ。

Array comprehension
primes = function(max){
  yield 2;
  for(var n = 3; n < max; n += 2){
    for(var d = 3, m = Math.sqrt(n), f; d < m && n % d; d += 2);
    if(d >= m) yield n;
  }
};
print([i for(i in primes(67)) if(i >= 23)]);
23,25,29,31,37,41,43,47,49,53,59,61,67

おおー。

let
x = 5, y = 0;
let(x = x + 10, y = 12) print(x + y);
print(x + y);
27
5

微妙。

x = 5, y = 0;
with({x: x + 10, y: 12}) print(x + y);
print(x + y);

こう書いても同じだし。

Destructuring assignment
print([a, b, c, d, e] = (function(min, max){
  function fib(max) {
    for(var i = 1, j = 1; i <= max;){
      yield i;
      [i, j] = [j, i + j];
    }
  }
  return [f for(f in fib(max)) if(f >= min)];
})(100, 1000));
print(a, b, c, d, e);
144,233,377,610,987
144 233 377 610 987

これは素晴らしい。