これが実現すれば現代の複合的な技術の融合体であるWebシステムを、非常にシンプルにできるので、期待しています。
ただ、まだ仕様が色々と変化するので少々没頭出来なかったのですが、なんと2013/11/14に1.0仕様が出来上がり、今はECMAが標準化を開始しています。
標準化がなされれば、安心してシステムに採用でき、今までよりシンプルとなれば、爆発的に普及する可能性もありますね。
(現行システムは残るでしょうから、全部が一新というわけには行きませんが)
ということで最近触っているのですが、DartはDartVMとJavaScriptの両方で動くということで、JavaScriptの浮動小数点演算をどう乗りこなしているかなぁと。
疑問があったら早速やってみようということで、やって見ました。
なんと残念なことに、DartVMとJavaScriptで差が出ました。これって演算を行うシステムでは致命的に思われます。
検証内容と結果
JavaScriptの浮動小数点は指数部(12ビット)、仮数部(52ビット)なので、2の52乗の値と、それに1を加えたものを表示してみます。2の52乗 =9007199254740992
2の52乗+1=9007199254740993
プログラムは、DartEditorで作成されるひな形を簡単に加工して表示してみます。
以下のものです。
import 'dart:html'; void main() { querySelector("#sample_text_id") ..text = (9007199254740992).toString() + " [" + (9007199254740993).toString() + "]" ..onClick.listen(reverseText); } void reverseText(MouseEvent event) { var text = querySelector("#sample_text_id").text; var buffer = new StringBuffer(); for (int i = text.length - 1; i >= 0; i--) { buffer.write(text[i]); } querySelector("#sample_text_id").text = buffer.toString(); }DartVMでの実行結果が以下のもの。2の52乗+1=9007199254740993がきちんとそのままの値で表示されています。([]内の値ですよ)
JavaScriptでの実行結果が以下のもの。2の52乗+1=9007199254740993が9007199254740992と違う値が表示されています。([]内の値ですよ)
DartVMがブラウザ側で動くのは当分の間は無理だと思います。ということなので少々無駄ですが、重要な演算はサーバ側のDartVMで動作させて転送するしかないようです。
Dartでは整数のintと浮動小数点のdoubleの2種類がありますが、JavaScriptは浮動小数点演算しかありません。このことを注意した方がよさそうです。
0 コメント:
コメントを投稿