やっちゃった!

パスワードがどれか判らなくなってgithubのパスワード試行上限超えてしまった!
また後で試しなさいとのことなのでいつまでか分からないけどしばらくpushできない。
SSHキー登録してるんだからSSHアクセスに変えておこう。

rhino forkの今後について

Rhinoのes6対応は色々大変なので一から書き直します。シンボルとかモジュールとか今のrhinoでは一から書き直さないと対応できない部分が多いためです。

Rhino forkそのものの開発は続けます。今のところR4から1.3倍程度速いのと余分なconvenience/relay methodの削除といくつかのrewriteが行われているのでoriginalのrhinoより速く・小さいなっています。

es6の仕様書

es6で変更された/追加された範囲にバグが多いよバカヤロー!

rev 22 から rev 24への変更について

ソースコードrewriteに伴い、実装対象をrev 22からrev 24へと更新してrev 22に合ったいくつかのバグが修正されたのですが9.1.12 [[OwnPropertyKeys]] ( ) について余計な仕様が追加されてしまったので考えものです。

rev 22


When the [[OwnPropertyKeys]] internal method of O is called  the following steps are taken: 
1.  Let keys be a new empty List. 
2.  For each own property key P of O 
a.  Add P as the last element of keys. 
3.  Return CreateListIterator(keys). 

rev 24


When the [[OwnPropertyKeys]] internal method of O is called the following steps are taken: 
1.  Let keys be a new empty List. 
2.  For each own property key P of O that is an integer index, in ascending numeric index order 
a.  Add P as the last element of keys. 
3.  For each own property key P of O that is a String but is not an integer index, in property creation 
order 
a.  Add P as the last element of keys. 
4.  For each own property key P of O that is a Symbol, in property creation order 
a.  Add P as the last element of keys. 
5.  Return CreateArrayFromList(keys). 

step 2のループの詳細が明文化されたのですが、整数インデックスは昇順のインデックス・オーダーでStringキーとSymbolキーはプロパティの作成順・オーダーと新たに自然順序付けの定義まで加わりました。問題はここです。jsの実装者でなくとも順序を保証したハッシュテーブルが高コストになるのはお判りでしょう。さらにもう一つ、高コストの原因となるのがP of O that is an integer index, in ascending numeric index orderの部分です。

jsのobjectの内部構造はkey-value pearのlist──つまり、ハッシュテーブルなわけですがP of O that is an integer index, in ascending numeric index orderの要件があることによってさらにシーケンシャルなlist(linked listにあらず)も必要になります。なぜならキーが整数インデックスの場合にもハッシュテーブルに入れてしまうと一部の最適化に適しません、ついでに配列の最適化を考えるとこっちの方が都合がいいです。しかし、ハッシュテーブルとlistを別々に持つとその他の部分のコードが複雑になってしまい面倒です。ですが実際にはその他の部分のコードの方が全体量としては多いので結局のところ手間が増えるだけです。加えてこの仕様は順序付きハッシュテーブルを要求します。仕様の一部では列挙と反復のオーダーは実装依存であると注釈されているにもかかわらずこの要求があるので結果的にプロパティの操作に対するコストは高くなります。

しかし、戻り値は変更されました。[[OwnPropertyKeys]] internal methodの戻り値は暗黙的に動的なlistでなければならなかったにも関わらず、rev 22ではiterator objectを返していたので色々と面倒でした。しかし、rev 24ではjsの配列(つまり、動的なlist)が返されることになったのでこのバグは修正されました。ここら辺に関して詳しくはまた今度にでも。

開発再開

環境構築が終わりました。
CPUがphenom II X6 1550TからpenGの3420に変わったのでベンチマークのスコアが少し変わりました。3420の方が1055Tよりシングルスレッド性能が1.5倍くらいあるのでそれがそのままスコアに現れています。今後掲載するスコアにはそのような事情が考慮されますのであしからず。

それといい機会なので仕様はrev.24でいきます(というかバグが修正されているのでそれが望ましい)。

お気の毒ですがHDD0は消えてしまいました……

破損した挙句、M/Bが巻き込まれました。これにより、開発環境とリモートにpushしていなかったコミットとリポジトリが失われました。
modren_implのコミット2つとClassyLayoutを用いた新しいruntimeの実装の開発途中のソースコードが影響を受けました。コードをリライトするのでまたしばらく黙ります。