2008-01-01から1年間の記事一覧
mac portsでRuby1.9.1 preview2のパッケージが更新されたので更新。
Ruby1.9.1 preview1を自前ビルドからmac portsのパッケージに変更。
パーサのエンティティ参照のエスケープ処理を改良。 #0.9.0.5としてgithubで公開
http://d.hatena.ne.jp/asipruby/99990101/1241120689
Meteor::Core::Kernel::attributeの処理に問題があったので修正。#0.9.0.4としてgithubで公開
Meteor::Element#[]がバグっていたので修正。 Meteor::Core::Kernel::attributeのエンティティ参照の処理に問題があったので修正。#0.9.0.3としてgithubで公開
macportsにないので手動インストール。 以前掲載したtest_xml.rbの10000ループがCore2 Duo 2.5GHzのマシン で約0.83秒->約0.82秒(Ruby1.9.0_5)。(OSはMacOS X 10.5) 微妙に速くなった。
XMLパーサのattributesメソッドのロジックを修正。以前掲載したtest_xml.rbの10000ループがCore2 Duo 2.5GHzのマシン で約1.37秒->約1.32秒(Ruby1.8.6)、約0.89秒->約0.83秒 (Ruby1.9.0_4)。(OSはMacOS X 10.5) #0.9.0.1としてGithubでリリース(Ruby版)
http://github.com/asip/meteor/tree/master でRuby版を公開しました。 gem sources -a http://gems.github.com sudo gem install asip-meteorでインストールできます。 ライセンスはひとまず、GPL V2です。 ライセンスはLGPL V2.1です。 現在は0.9.1に向け…
その3の時点で検証済みのロジックを実際に実装。Ruby1.8.6では同一要素の属性の変更回数+内容の変更回数の合計 が3より少ない場合、既存の実装のほうが今回の実装よりも微妙 に速い、合計が4以上の場合には今回の実装のほうが速くなる。 以前掲載したtest_…
Ruby1.8.xの場合のMeteor::Core::Kernel#print及びflushメソッドの文字列結合処理の分岐を 廃止、文字結合処理を「 以前掲載したtest_xml.rbの10000ループがCore2 Duo 2.5GHzのマシンで約1.3秒 -> 約1.3秒(Ruby1.8.6)、1.1秒 -> 約1.1秒(Ruby1.9.0_4)。 微妙…
Rubyの文字列結合処理ではRuby1.8.xまでとRuby1.9.0以降とで 結合方法による処理速度の優劣に違いが出てくる。 Ruby1.8.xでは 式展開による結合 >「Array#push」&「Array#join」による結合 >「> 「+」による結合 Ruby1.9.xでは 式展開による結合 >「 「Arra…
Ruby1.8.xの場合のMeteor::Core::Kernel#print及びflushメソッドの文字列結合処理を分岐。 以前掲載したtest_xml.rbの10000ループがCore2 Duo 2.5GHzのマシンで 約2.0秒 -> 約1.3秒(Ruby1.8.6)。
elementメソッドのロジックにおいて要素の検索順序を変更。 (XMLとXHTMLに影響)
全体的に文字列結合処理を修正。 以前掲載したtest_xml.rbの10000ループがCore2 Duo 2.5GHzのマシンで 約20秒 -> 約2秒(Ruby1.8.6)、約1.1秒(Ruby1.9.0_4)。
RubyでStringは変更可能(mutable)なクラス。 「+」メソッドは非破壊的なメソッド、呼び出すと毎回 新規オブジェクトを生成し、それに変更を適用する。 「 を直接変更する。 (「 「 文字列連結は「+」ではなく「 但し、短い文字列では式展開で文字列連結する…
"破壊的なメソッド"はレシーバを変更するが 、"非破壊的なメソッド"はレシーバを変更しない。 非破壊的なメソッドでは新規オブジェクトが生成され、 生成したオブジェクトに対して変更が適用される。 破壊的なメソッドではメソッドのレシーバに対して 変更が…
cho45さん作のgem作成支援ツールcutagemを使います。 cutagemのオフィシャルでは前版0.0.7のgemしか入手できないので、 genki(瀧内元気)さんがcho45さんのgithubリポジトリから フォークしたgithubリポジトリ経由で cutagemの最新版+αの0.0.8.3のgemを取得。…
cutagemを使って、meteor.gem、meteor.gemspecを作成。
Meteorの現状の問題点その7でelementメソッドの結果を キャッシュする方向を考えていたけれど、方針を変更。 混合内容の要素((X)HTMLのtrタグ等)をループさせる場合、 elementの返り値をElement#newでコピーして利用する。以前掲載したtest_xml.rbは次のよう…
ふと思いついて、テストしてみたところ、printメソッド内部の文字列結合処理が パフォーマンス上の最大のネックとなっていることが判明。 ググってみて、解決法を発見。 以前掲載したtest_xml.rbの10000ループがCore2 Duo 2.5GHzのマシンで 約20秒 -> 約2秒…
JQueryのメソッド名にあてられて、メソッド名を変更。 findElement -> element findCXTag -> cxtag getAttributeValue + setAttribute -> attribute getAttributeMap -> attributeMap getContent + setContent -> content この変更はRuby版のみ、Java版には…
eraseAttributeメソッドのロジックを修正。#開発超初期の非効率なロジックがそのままになっていた、orz...。
正規表現でパターンマッチしているロジックのうち、 正規表現である必要のないロジックを書き換え中。 ...ほぼ完了。 単純なロジックに書き換えられるケースでは 正規表現でパターンマッチするよりも書き換えたほうが ローコスト。(当たり前だというツッコミ…
勿論、MacPortsのツリーにはあがっていないので、ソースからのビルドで。 MacPortsのツリーが更新されたら、そちらに切り換え。
パーサ共通クラスのsetAttributeメソッド及びsetContentメソッドのロジック内で 呼んでいるString#gsub及びString#subに渡す置換文字列で「バックスラッシュ+数字」 の扱いに問題があったので修正。 関連して、パーサ共通クラスのreplaceメソッドを修正。 #J…
オブジェクトのディープコピーが値渡しの代わり。 new_obj = Marshal.load(Marshal.dump(obj))で行えます。 オブジェクトの参照関係を辿り、ディープコピーを 行い、ディープコピーしたオブジェクトのアドレス(場所) がnew_objに入ります。 ※String等一部の…
getChildParserメソッド及びprintメソッドのロジックを 見直し、参照渡ししていた箇所の一部を値渡しするように 修正。
自前で行っていた正規表現のメタ文字エスケープ処理を Regexp#quoteに変更。この変更に伴い、パーサの 基底クラスを修正。 Regexpクラスのquoteメソッドはネイティブのコードが 実行されるので、Rubyで記述した自前の処理よりも 高速に動作します。 #JAVAの…
Rubyの変数は全てがオブジェクトであり、全ての代入は参照渡し、Pythonも同様。 Javaの場合はプリミティブ型(int,float,boolean等)は値渡し、それ以外は参照渡し。 JavascriptはJavaと同じ、C#もJavaと同じだったはず。 (厳密にいうと、RubyやJava等の参照…