Rhino 1.6R4RC1

まだ試していないけど, 多分今度は JavaScript 1.7の機能カナーなんて。
つか, ソレもアレだけど, いろんな記事に Rhinoが紹介されてたりして, ついにメジャーになっちゃうのか? みたいな。

追記

Rhino 1.6R4RC1を downloadして動かしてみたけど, JavaScript 1.7の機能のかけらも入ってなさそげ。つーことで, Rhinoディレクトリ内容比較スクリプト作って調べてみた。
ドキュメント以外は JavaMembers.javaしか変わってないよーな ・・・ ってバグ修正だったっぽい

/* ディレクトリを辿って比較してみる */
importPackage(java.lang, java.io, java.security)
var newArray = java.lang.reflect.Array.newInstance

function dtree(path, func) {
  var list = [], idx = list.length
  for each (var f in path.listFiles())
    if (f.file)
      func(f)
    else if (f.directory)
      list[idx++] = f

  for each (var f in list)
    dtree(f, func)
}

function fileDigest(algorithm) {
  var md = MessageDigest.getInstance(algorithm)
  return function (file) {
    var ba = newArray(Byte.TYPE, file.length())
    var ins = new DigestInputStream(new FileInputStream(file), md)
    try {
      ins.read(ba)
    }
    finally {
      if (ins)
        ins.close(), ins = null
    }
    return md.digest()
  }
}

var source = new File('/usr/local/rhino1_6r4')
var target = new File('/usr/local/rhino1_6r3')
var re = new RegExp('^'+String(source.path).replace(/\\/g, '\\\\'))

var fdmd5 = fileDigest('MD5')

dtree(source, function(f) {
  var npath = String(f).replace(re, target.path)
  var nfile = new File(npath)
  if (!nfile.exists())
    print('ファイルがない:', f)
  else if (!cmp(fdmd5(f), fdmd5(nfile)))
    print('違う:', f)
})

function cmp(ba, tba) {
  for (var i = 0; i < ba.length; i++) {
    if (ba[i] != tba[i])
      return false
  }
  return true
}

後で気付いたけど, MD5をアレする必要なかったカモ。