2008-08-01から1ヶ月間の記事一覧

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等の参照…

Meteorの現状の問題点その7

混合内容の要素((X)HTMLのtrタグ等)をループさせる (その1のtest_xml.rbの)場合、findElementメソッドの 結果をキャッシュすることを思いつく。 あとで試してみよう。 その3のロジックとも整合することに気づいた。

Meteorの現状の問題点その5

混合内容でない要素((X)HTMLのoptionタグ等)をループさせる場合の 処理ロジックを変更し、このロジックでの正規表現の使用回数を 減らしました。

Meteorの現状の問題点その4

Meteorは正規表現での検索、置換が処理の大半を占めています。 内部の正規表現は正規表現メモやPerl正規表現雑技等のサイトを 参考にして、書きました。 正規表現の本等を読み込んで正規表現を把握して書いたわけではなく、意図した 挙動を実現することが先…

Meteorを改造

test_xml.rbを次のようにも書けるようにしてみました。 #!bin ruby # -* coding: UTF-8 -*- require 'meteor' pf = Meteor::ParserFactory.build(Meteor::Parser.XML,"test.xml", "UTF-8") ps = pf.getParser #puts ps.document elm1 = ps.element("test","m…

Meteorの現状の問題点その3

その1に書いた改善案(1)の脳内検証が完了、現行のロジックと 整合性のとれたロジックに変換できたので、実際に実装し処理速度の 向上が見込めるかテストしてみます。

Meteorの不具合修正

改造中に不具合がみつかったので修正しました。 詳細はこちら。

正規表現のキャッシュクラス on Ruby

# # 正規表現キャッシュクラス # class PatternCache @@regexCache = Hash.new # # イニシャライザ # def initialize end # # コンパイル済み正規表現を取得する # @param [String] regex 正規表現 # @return [Regexp] コンパイル済み正規表現 # def self.ge…

Ruby処理系の識別

「puts RUBY_VERSION」するとJRuby1.1では「1.8.6」と表示される。 JRuby1.1では「puts JRUBY_VERSION」とすると「1.1」と表示される。 調べてみた感じではスクリプト中で(C)RubyかJRubyかを判定して、 処理を分岐させる手段はない。 (C)Rubyの他にRubinius…

Meteorの現状の問題点その2

以前掲載したtest_xml.rbの10000ループがCore2 Duo 2.5GHzのマシンで 約1322秒(単純計算でいくと1ループ約1.32.2ミリ秒)、同じ環境で test_xml.rbを1000ループにすると約1秒(単純計算では10000ループで 10〜15秒くらいになるはず)。 スクリプトの改善では…

Rubyでのオブジェクトの識別

全てのクラスの親であるObjectクラスのObject#object_idメソッドが オブジェクト毎に一位な整数を返します。 このメソッドはRuby1.8.x、Ruby1.9.0で同じ挙動をします。 JavaのObjectクラスに同様の機能を持つメソッドはありません。 Javaでのオブジェクトの…

Meteorの現状の問題点その1

test_xml.rbにあるような1万回のループではパフォーマンスが十分でない (1000回程度のループでは問題ない)ので、パフォーマンスの改善のために 内部のロジックを見直すことにしました。 現状の改善案は次の2つです。 (1)内部で行っている正規表現での検索…

Ruby1.9.0_2のバグ(プラットホーム固有かも)その3

MacPortsにないので、この記事を参考にしてMacOSX10.5.4にRuby1.9.0_3 (ruby 1.9.0 (2008-07-25 revision 18217))を導入。 問題のtest_xml.rbを再テストしたところ、正常に動作。 1.9.0_2でバグっていた箇所が1.9.0_3までに修正された模様、一件落着。

Ruby1.9.0_2のバグ(プラットホーム固有かも)その2

Meteorをいじったら、今度はi=1334でその1と同様のエラーが発生するようになった。 何故か「#(コメント)」あるいは空行のみをループ中に追記しておくと正常に動作する。 「puts i」をループ中に追記した場合と追記しない場合ではエラーの内容が異なる。 「p…

MacPortsにRuby1.9.0_3、登場

先程、ふと「sudo port -d sync」「sudo port search ruby19」してみると バージョンに「1.9.0-3」と表示。自前のソースビルドからMacPortsの パッケージに移行しました。

Ruby1.9.0_2のバグ(プラットホーム固有かも)その1

Leopard上のMac Portsのruby1.9.0_2でMeteor(自作ライブラリ)のRuby移植版meteor.rb をテストしていると下記のスクリプトの10000回ループのi=7643で「内部で組み立 てている正規表現が間違っている」とString#sub!がエラーをはく。 同じスクリプトをLeopard…

Rubyにおけるオブジェクトのディープコピー

new_obj = Marshal.load(Marshal.dump(obj)) でオブジェクトのディープコピーを行えます。 RubyのinitializeメソッドにC++・Javaの コピーコンストラクタに相当する機能は ありません。 initialize_copyメソッドは浅い(shallow) コピー になります。 initial…

NetBeans IDE6.1のRubyサポートにおける問題点その2

Rubyではsuper.メソッド名がエラーになるにも関わらず、 NetBeans IDEのエディタではエラー扱いとならない。 JRubyではsuper.メソッド名を許しているのかもしれないが、 (C)Rubyを実行環境として選択していることは検出できるのだから エディターでエラー(ま…

Rubyにおけるsuper

Rubyではsuperはsuperを呼び出したメソッドと同名(・同引数)の親クラスの メソッドを指します、super(引数...)で呼び出します。 Javaではsuperは親クラス自体を指し、親クラスのメソッドを呼び出したい場合、 super.メソッド名で呼び出せます、子クラスのコ…

YARD - Code Metadata And Documentation Generation for Ruby

ここ(和訳)。RDocと同タイプのドキュメント生成ツール。RDocのフォーマットに上位互換。 Javadocのようにコメントにメタ情報を記述できる。RDocではできない 引数・返り値のクラスのコメントへのメタ情報としての埋め込みをできる (@param、@returnが使える)…