最近のキーワード
2006年12月12日
RubyにおけるDSLとAnnotation(アノテーション)
今年始めから半ばに書いたものだが、
ということを考えた時期があった。
このあたりのプロトタイプと現在の考え、さらに、Martin FowlerのRubyAnnotations(あまり多くは書いてないけど)などを参考に考えと実装(時間があれば)を洗練させてみようかと思った。
(続きを読む…)
2006年11月21日
Method#where
「メソッドがどこで定義されているか」をすこし改良。
class Method
def where
to_s =~ /#<Method: ([\w:]+)(\(([\w:]+)\))?#/
if $3
name = $3
else
name = $1
end
name.split("::").inject(Object){|o,s|o.const_get(s)}
end
end
module Foo
module Rubymod
def m
end
end
end
module Bar
class Rubyco
include Foo::Rubymod
def c
end
end
end
r = Bar::Rubyco.new
p r.method(:m).where #=> Foo::Rubymod
p r.method(:c).where #=> Bar::Rubyco
2006年11月12日
Ruby Conference 2006
最近気づいたのだけど、出張期間中の金土日に、Ruby Conference 2006 がコロラド州であったらしい。すっかり忘れてたけど、土日だけ寄っていければよかったかも。
まぁたぶん出不精なのが主な理由で無理だったかもしれないが…
2006年07月23日
2006年07月22日
Juggernaut (Rails + Flash)
http://rubyforge.org/projects/juggernaut
Flashの機能を利用したのか。Rails+AJAX+Flashではなくて、Flex2とかOpenLaszloとかもっと気楽に作れるといいなぁ。Railsのクライアントサイド用のコードはOpenLaszloへ対応させるとか…
Flashの機能を利用したのか。Rails+AJAX+Flashではなくて、Flex2とかOpenLaszloとかもっと気楽に作れるといいなぁ。Railsのクライアントサイド用のコードはOpenLaszloへ対応させるとか…
ポーランド記法<->逆ポーランド記法
http://jp.rubyist.net/magazine/?0015-EditorsNote
injectを使った実装と、tdp4rを使ったものを並べてみた。この程度なら構文解析使うと面倒になる。(続きを読む…)
injectを使った実装と、tdp4rを使ったものを並べてみた。この程度なら構文解析使うと面倒になる。(続きを読む…)
2006年07月20日
TDP4R: Packrat Parsing
TDP4Rの高速化に関連して、Packrat Parsingの論文を少し眺めてみた。やりたいことは、バックトラッキングの抑止で、その手段として、lazy evaluationとmemoizationという新しい道具を使ったという感じだ。(続きを読む…)
2006年07月19日
2006年07月18日
TDP4R 1.3.3: chainlで四則演算
TDP4R 1.3.3でようやく四則演算くらいは楽に記述できるようになった。これは、HaskellのParsecなどのchainl/chainrに相当するものに、中置演算子の優先度も考慮して実装したもの。(続きを読む…)
2006年07月17日
injectでProcを取り扱うことの利点
(1..10).inject(0,&b) 以上に何かやりたいことがあると考えると、それはブロック(Proc)を合成することだと思うので、ブロックを合成する方法を考えるのも良いかもしれない。
2006年07月15日
tdp4rでXMLの変換
tdp4rのサンプルで、XMLの変換を行ってみた。REXMLのパーサを少し利用している。(続きを読む…)
Array#===, Hash#===
Array#=== や Hash#=== を以下のように定義しておくと不都合がおきることは多いだろうか?
(続きを読む…)
2006年07月14日
2006年07月13日
tdp4rにラベルと参照を導入
休憩のついでに、カップラーメン食いながら、こんなのが書けるようにしてみた。
buff = ["a","b","a"]
rule = token(/\w/)/:x - token("b") - backref(:x) >> proc{|x| x}
assert_equal(["a","b","a"], rule.parse(buff))
より文法っぽく書くとこんな感じ。
parser = TDParser.define{|g|
g.char = /\w/
g.word = g.char/:x - g.char - backref(:x) >> proc{|x| x}
}
parser.parse(buff)
2006年07月06日
テストコードの埋め込み
2006年06月27日
XTemplate再開発
XTemplateをどうすべきか少し考えた。で、ひとまず以前思っていたことを列挙する。
(続きを読む…)
2006年06月19日
上限を決めずに素数を生成の高速化(Ruby版)
「上限を決めずに素数を生成」を高速化。(追記あり 6/21)(続きを読む…)
2006年06月18日
上限を決めずに素数を生成(Ruby版)
というわけで、現在の形はこう(↓)。1000000個目はまだやってないが、100000個目くらいなら最近のノートPCであれば数分内に求めることはできる。でも、古典的なアルゴリズムをちょっと変形させただけだから、あまり面白くないし、見た目もカッコ悪い。
もう少し何かを加えよう。当然、時間的にも空間的にも悪くないような実装が好ましい。
(続きを読む…)

