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

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が使える)…

リファレンスマニュアル刷新計画

ここ。お世話になってます。Ruby1.9のドキュメント、工事中。

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

文字列A+文字列Bの連結A+Bを、Rubyは内部で「A.+(B)」と解釈し、 Java(5.0以降)では「new StringBuilder(A).append(B)」と解釈する。 また、Javaでnullはオブジェクトではないが、Rubyでnilはオブジェクト。Javaでは「null + "A"」はOKだが、Rubyで「nil + "…

Rubyの正規表現の使用感

基本的にはJava標準の正規表現APIと同等。 Regexp#new("正規表現")が/正規表現/と違い、エスケープにおいて バックスラッシュを重ねないといけないのもJavaと同じ。 Rubyの入門本では/正規表現/の記述しか載っていないので 少し迷ってしまった。 /正規表現/…

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

Rubyではメソッドのオーバーロードができないにも関わらず、 NetBeans IDEのエディタはメソッドのオーバーロードを用いた コードに警告を出さない。 メソッドに英字の大文字が含まれている場合に警告するよりも こちらを先に改善すべきだったのでは。 コード…

Rubyではオーバーロードができない

随分前にMatz氏がRuby MLで可変長引数やオプショナル引数を使ってメソッドを定義し、 メソッド内部でKernel#type、、defined?、Object#kind_of?を用いて処理を分岐すると、 クラスの外部からはオーバーロードしたかのようにそのメソッドを扱えると書いていま…

Rubyを本格的に勉強中

勉強がてら、自作の簡易(X)HTML&XMLパーサMeteorを JavaからRubyに移植しています。移植中に気づいた点等 をここに書いていきます。