2009-09-11
■ [event] RubyConfのproposalに落ちるなどした
RubyKaigiとほぼ同ネタで応募していました。
通ると今年秋はちょっと忙しすぎるなぁと思ってたのでほっとした。けど悔しい。
今回は家でゆっくりすることにします。
■ [opera] Opera 10 重くね?
大きなページをバックグラウンドで開くと、現在のページのスクロールとかも重くなる。
前からこうだっけ?9より、重くなる閾値がだいぶ下がってしまってる気がするんだが。
■ [ruby] Rackは仕様であり実装である
Perl は今どうなってるかというと(中略)仕様と実装は明確に分離している必要があるのです。分離してないと、実装のくだらねーdetailで揉める。だから、Spec は PSGI で、reference Impl は Plack と名付けられています。
[Rack は困っていない - TokuLog 改めB日記より引用]
この視点は面白い。
■ [prog] IEEE754を読む
浮動小数点の規格があることは知ってたけど、中身をみたことは無かったので。なんかNaNのビットパターンって一意じゃないらしいね。
http://en.wikipedia.org/wiki/IEEE_754-2008#External_links からドラフトのPDFが手に入る。
- 1章:概要
- 2章:参照文献
- 3章:用語定義
- 4章:略語定義(LSB, MSB, NaN, qNaN, sNaN)
- quiet NaN と signalling NaNがあるらしい (違いは http://ja.wikipedia.org/wiki/NaN に)
ここから本体:
- 5章:Formats
- Level1 : 実数(-∞から+∞)。
- Level2 : 不動小数点データ(-0, +0, NaNを含む)。要素どうしの演算がこの集合内に閉じている
- Level3 : 不動小数点の「表現(representation)」。ふつうの数(=符号・指数部・基数部の組)、正負の無限大、qNaNおよびsNaN。
- Level4 : 実際のビットパターン (0111000...)
- 6章:Modes and rounding
- 丸めモード?
- 7章:演算
- 演算は、「(仮想的に)無限精度で計算する」→「丸める」という動作になる
- Homogeneous general-computational operations [引数と返り値が同じ型] [返り値がflonum、例外発生あり]
- nextUp(x)とかminNum(x,y)とか
- formatOf general-computational operations [引数と返り値が違う型] [〃]
- *-addition(x,y)とか*-squareRoot(x)とか
- Homogeneous quiet-compuutational operations [引数と返り値が同じ型][返り値がflonum、例外発生なし]
- negate(x)とかabs(x)とか
- Signaling-computational operations [返り値がflonum以外、例外発生あり]
- compareEqual(x,y)とか
- Non-computational operations [返り値がflonum以外、例外発生なし]
- isFinite(x)とか
- 8章:無限、NaN、符号ビット
- 9章:デフォルトの例外的状況の処理
- 不正な操作、0除算、オーバー/アンダーフロー、不正確
■ [biwascheme] トレーサを作ろう
BiwaSchemeにはtest/browser_test.htmlという、インタプリタの実行状態を全部記録して表示するデバッガもどきがあるんだけど、 これを動かすためにはconsole_test.jsファイルを編集して動かしたいスクリプトを書かないといけなかった。 よく考えたら、REPLみたいにフォームで入力させるようにしたらいいわけで。なんで思いつかなかったんだろう。とりあえずやってみよう。
まず、全部Schemeで書いたら楽なんじゃね?という発想。
<script type="text/javascript" src="../src/development_loader.js"> // for browsers var dumper = new BiwaScheme.Dumper(); var show_error = function(e){ puts("Error: "+e.message); }; (new BiwaScheme.Interpreter(show_error).evaluate( '(define (stop-trace) \ (js-eval "BiwaScheme.Interpreter.dumper = null;") #t) \ (define (start-trace) \ (js-eval "BiwaScheme.Interpreter.dumper = dumper;")) \ (define (with-trace thunk) \ (start-trace) (thunk) (stop-trace)) \ \ (add-handler! ($ "eval_btn") "click" \ (lambda (e) \ (let1 source (get-content ($ "bs-input")) \ (print source) \ (display ";=> ") \ (print (with-trace \ (lambda () (eval (read-from-string source)))))) \ (js-eval "dumper.dump_move(1)")))' )); </script>
楽は楽だった…んだけど、これだと「対象ブログラムを動かすときだけトレーサをONにする」ことがうまくできず、余計なものが 出力されてしまう。
悔しかったのでブログに貼ってみた。
結局JavaScriptで実装した。これで処理系のデバッグが楽になるな。
> <