2008-01-01から1年間の記事一覧

Ruby1.9.1 preview2の導入

mac portsでRuby1.9.1 preview2のパッケージが更新されたので更新。

Ruby1.9.1 preview1の導入

Ruby1.9.1 preview1を自前ビルドからmac portsのパッケージに変更。

Meteorの修正

パーサのエンティティ参照のエスケープ処理を改良。 #0.9.0.5としてgithubで公開

Meteorとは

http://d.hatena.ne.jp/asipruby/99990101/1241120689

Meteorの修正

Meteor::Core::Kernel::attributeの処理に問題があったので修正。#0.9.0.4としてgithubで公開

Meteorの修正

Meteor::Element#[]がバグっていたので修正。 Meteor::Core::Kernel::attributeのエンティティ参照の処理に問題があったので修正。#0.9.0.3としてgithubで公開

Ruby1.9.0_5導入

macportsにないので手動インストール。 以前掲載したtest_xml.rbの10000ループがCore2 Duo 2.5GHzのマシン で約0.83秒->約0.82秒(Ruby1.9.0_5)。(OSはMacOS X 10.5) 微妙に速くなった。

Meteorの現状の問題点その11の2

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版)

Meteor公開

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に向け…

Meteorの現状の問題点その11

その3の時点で検証済みのロジックを実際に実装。Ruby1.8.6では同一要素の属性の変更回数+内容の変更回数の合計 が3より少ない場合、既存の実装のほうが今回の実装よりも微妙 に速い、合計が4以上の場合には今回の実装のほうが速くなる。 以前掲載したtest_…

Meteorの現状の問題点その10の4

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とJavaの文字列連結の違いその3

Rubyの文字列結合処理ではRuby1.8.xまでとRuby1.9.0以降とで 結合方法による処理速度の優劣に違いが出てくる。 Ruby1.8.xでは 式展開による結合 >「Array#push」&「Array#join」による結合 >「> 「+」による結合 Ruby1.9.xでは 式展開による結合 >「 「Arra…

Meteorの現状の問題点その10の3

Ruby1.8.xの場合のMeteor::Core::Kernel#print及びflushメソッドの文字列結合処理を分岐。 以前掲載したtest_xml.rbの10000ループがCore2 Duo 2.5GHzのマシンで 約2.0秒 -> 約1.3秒(Ruby1.8.6)。

Meteorの修正

elementメソッドのロジックにおいて要素の検索順序を変更。 (XMLとXHTMLに影響)

Meteorの現状の問題点その10の2

全体的に文字列結合処理を修正。 以前掲載したtest_xml.rbの10000ループがCore2 Duo 2.5GHzのマシンで 約20秒 -> 約2秒(Ruby1.8.6)、約1.1秒(Ruby1.9.0_4)。

RubyとJavaの文字列連結の違いその2

RubyでStringは変更可能(mutable)なクラス。 「+」メソッドは非破壊的なメソッド、呼び出すと毎回 新規オブジェクトを生成し、それに変更を適用する。 「 を直接変更する。 (「 「 文字列連結は「+」ではなく「 但し、短い文字列では式展開で文字列連結する…

Rubyにおけるメソッド

"破壊的なメソッド"はレシーバを変更するが 、"非破壊的なメソッド"はレシーバを変更しない。 非破壊的なメソッドでは新規オブジェクトが生成され、 生成したオブジェクトに対して変更が適用される。 破壊的なメソッドではメソッドのレシーバに対して 変更が…

RubyGems パッケージの作り方 by cutagem

cho45さん作のgem作成支援ツールcutagemを使います。 cutagemのオフィシャルでは前版0.0.7のgemしか入手できないので、 genki(瀧内元気)さんがcho45さんのgithubリポジトリから フォークしたgithubリポジトリ経由で cutagemの最新版+αの0.0.8.3のgemを取得。…

Meteorのgem化

cutagemを使って、meteor.gem、meteor.gemspecを作成。

Meteorの更新

Meteorの現状の問題点その7でelementメソッドの結果を キャッシュする方向を考えていたけれど、方針を変更。 混合内容の要素((X)HTMLのtrタグ等)をループさせる場合、 elementの返り値をElement#newでコピーして利用する。以前掲載したtest_xml.rbは次のよう…

Meteorの現状の問題点その10

ふと思いついて、テストしてみたところ、printメソッド内部の文字列結合処理が パフォーマンス上の最大のネックとなっていることが判明。 ググってみて、解決法を発見。 以前掲載したtest_xml.rbの10000ループがCore2 Duo 2.5GHzのマシンで 約20秒 -> 約2秒…

Meteorの修正

JQueryのメソッド名にあてられて、メソッド名を変更。 findElement -> element findCXTag -> cxtag getAttributeValue + setAttribute -> attribute getAttributeMap -> attributeMap getContent + setContent -> content この変更はRuby版のみ、Java版には…

Meteorの修正

eraseAttributeメソッドのロジックを修正。#開発超初期の非効率なロジックがそのままになっていた、orz...。

Meteorの現状の問題点その9

正規表現でパターンマッチしているロジックのうち、 正規表現である必要のないロジックを書き換え中。 ...ほぼ完了。 単純なロジックに書き換えられるケースでは 正規表現でパターンマッチするよりも書き換えたほうが ローコスト。(当たり前だというツッコミ…

ruby1.9.0_4、導入

勿論、MacPortsのツリーにはあがっていないので、ソースからのビルドで。 MacPortsのツリーが更新されたら、そちらに切り換え。

Meteorの修正

パーサ共通クラスのsetAttributeメソッド及びsetContentメソッドのロジック内で 呼んでいるString#gsub及びString#subに渡す置換文字列で「バックスラッシュ+数字」 の扱いに問題があったので修正。 関連して、パーサ共通クラスのreplaceメソッドを修正。 #J…

Rubyでの値渡しの実現方法

オブジェクトのディープコピーが値渡しの代わり。 new_obj = Marshal.load(Marshal.dump(obj))で行えます。 オブジェクトの参照関係を辿り、ディープコピーを 行い、ディープコピーしたオブジェクトのアドレス(場所) がnew_objに入ります。 ※String等一部の…

Meteorの改修

getChildParserメソッド及びprintメソッドのロジックを 見直し、参照渡ししていた箇所の一部を値渡しするように 修正。

Meteorの現状の問題点その8

自前で行っていた正規表現のメタ文字エスケープ処理を Regexp#quoteに変更。この変更に伴い、パーサの 基底クラスを修正。 Regexpクラスのquoteメソッドはネイティブのコードが 実行されるので、Rubyで記述した自前の処理よりも 高速に動作します。 #JAVAの…

Rubyにおける変数の扱い

Rubyの変数は全てがオブジェクトであり、全ての代入は参照渡し、Pythonも同様。 Javaの場合はプリミティブ型(int,float,boolean等)は値渡し、それ以外は参照渡し。 JavascriptはJavaと同じ、C#もJavaと同じだったはず。 (厳密にいうと、RubyやJava等の参照…