[#14185] ruby on Linux/m68k — akira yamada / やまだあきら <akira@...>
[#14196] fork() on MacOS — nobu.nakada@...
なかだです。
[#14206] undef_method :method_missing — Kenichi Komiya <kom@...1.accsnet.ne.jp>
なかだです。
なかだです。
金光です。
むらけんです.
金光です。
楠です
金光です。
金光です。
金光です。どもっ。
なかだです。
金光です。どもっ。
金光です。
岩月と申します。
金光です。どもっ。
有馬です。
金光です。
有馬です。
金光です。どもっ。
とみたです。
金光です。
とみたです。
金光です。
まつもと ゆきひろです
金光です。(^_^;
あづみです。
有馬です。
金光です。
有馬です。
金光です。どもっ。
有馬です。
むらけんです.
むらけんさん wrote:
むらけんです.
長沢です。
まつもと ゆきひろです
金光です。どもっ。
有馬です。
金光です。どもどもっ。
むらけんです.
金光です。いちおうフォローだけ
ふなばです。
一応フォローだけ、ほんとにちょっとだけっすよ
岩月と申します。
むらけんです.
楠です
むらけんです.
金光です。FOXとかもあるのかぁ。すげぇなぁ。
まつもと ゆきひろです
金光です。御大、待ってましたっ。
なかだです。
金光です。どもどもっ。
なかだです。
さくです。
まつもと ゆきひろです
金光です。どもっ。
まつもと ゆきひろです
金光です。どもどもっ。
[#14229] [BUG] segv on [str].pack("p") — Koji Arai <JCA02266@...>
新井です。
なかだです。
新井です。
なかだです。
[#14338] setup.rb (Re: Common GUI framework) — Minero Aoki <aamine@...>
あおきです。
[#14382] [BUG] segv on regex matching with long string — TAKAHASHI Masayoshi <maki@...>
高橋征義です。
[#14390] [Patch] pp.rb and debug.rb — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです。
なひです。書き忘れ。
なかだです。
nobu.nakada@nifty.ne.jpさんの
なひです。
なかだです。
In article <DJEGJLCFNEIMKDNMLFPHMEAHCBAA.nakahiro@sarion.co.jp>,
なひです。
In article <DJEGJLCFNEIMKDNMLFPHEEAICBAA.nakahiro@sarion.co.jp>,
なひです。
まつもと ゆきひろです
In article <997774251.527258.14423.nullmailer@ev.netlab.jp>,
まつもと ゆきひろです
In article <997783083.657819.14685.nullmailer@ev.netlab.jp>,
なひです。
In article <DJEGJLCFNEIMKDNMLFPHEEALCBAA.nakahiro@sarion.co.jp>,
なひです。
In article <DJEGJLCFNEIMKDNMLFPHEEAPCBAA.nakahiro@sarion.co.jp>,
なひです。
In article <DJEGJLCFNEIMKDNMLFPHMEBACBAA.nakahiro@sarion.co.jp>,
あづみです。
なひです。
In article <DJEGJLCFNEIMKDNMLFPHIEBBCBAA.nakahiro@sarion.co.jp>,
うぅむ。ぼーっとしてたら意味もなく Subject を変えてしまった。
In article <20010817205051.UAZHC0A8274C.C78F0C8A@mail.biglobe.ne.jp>,
あづみです。
In article <hvo66bnxe4b.fsf_-_@flux.etl.go.jp>,
古い話題で恐縮ですが…
なかだです。
In article <200109290948.f8T9mbh12942@sharui.nakada.kanuma.tochigi.jp>,
なかだです。
まつもと ゆきひろです
In article <1001945748.240863.24023.nullmailer@ev.netlab.jp>,
なかだです。
In article <200110020334.f923YLb08299@sharui.nakada.kanuma.tochigi.jp>,
なかだです。
In article <200110021010.f92AAIb13474@sharui.nakada.kanuma.tochigi.jp>,
なかだです。
まつもと ゆきひろです
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
In article <1002080461.740444.11187.nullmailer@ev.netlab.jp>,
In article <DJEGJLCFNEIMKDNMLFPHCEPJCAAA.nakahiro@sarion.co.jp>,
なひです。
まつもと ゆきひろです
In article <DJEGJLCFNEIMKDNMLFPHCEPJCAAA.nakahiro@sarion.co.jp>,
あおきです。
In article <20010809221751J.aamine@mx.edit.ne.jp>,
[#14406] typo in ruby 1.7 — Koji Arai <JCA02266@...>
新井です。
[#14413] 1.7.1 2001-08-06: if true && /match/ — WATANABE Tetsuya <tetsu@...>
渡辺哲也です。
[#14465] Ruby/Bsearch — akira yamada / やまだあきら <akira@...>
まつもと ゆきひろです
At Wed, 15 Aug 2001 18:01:50 +0900,
"Akinori MUSHA" <knu@iDaemons.org> wrote:
At Thu, 16 Aug 2001 00:15:05 +0900,
In article <20010816001456V.satoru@namazu.org>,
Tanaka Akira <akr@m17n.org> wrote:
In article <20010816130056C.satoru@namazu.org>,
[#14480] avoid compile warning of tcltklib with VC5 — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
なかだです。
こんにちは、なかむら(う)です。
[#14505] BUG: ruby 1.6.4 cannot use threads on Sparc (segv) — akira yamada / やまだあきら <akira@...>
[#14530] restore terminal mode even if readline interrupted. — Koji Arai <JCA02266@...>
新井です。
新井です。
新井です。
新井です。
At Wed, 5 Sep 2001 00:19:51 +0900,
まつもと ゆきひろです
[#14552] read in IO#eof? — nobu.nakada@...
なかだです。
[#14575] infinite loop on Dir.glob("*/**/*") — nobu.nakada@...
なかだです。
[#14577] option nodynamic — Daisuke Aoki <dai@...>
青木@横浜です。
[#14595] SEGV at `$0 = "long long string"' — nobu.nakada@...
なかだです。
なかだです。
まつもと ゆきひろです
[ruby-dev:14582] Re: marshal API (was Re: [Patch] pp.rb and debug.rb)
咳といいます。
投稿しないとサボってすすまないので、やりかけのものをポストします。
> > なひは、marshalおよびunmarshalの実装は、一行も書きたくないです。
> > traverseしてdumpする/loadしてネットワークを構築するという機能は
> > Ruby本体が既に持っており、また今後も提供していくだろう機能なので、
> > そのカスタマイズ用界面(API)をうまく定義することによって、
> > custom marshal/unmarshalで流用したい。
> > custom marshal/unmarshalをする人たちで共有したい(10個あったら3000行)。
>
> すばらしいです。オブジェクト群からの情報抽出・再構成と外部フォーマット
> の定義を完全に分離しようという決意のあらわれですね。うむうむ。まったく
> もってそういうふうにモジュール化されるべきですね。
* トラバーズする層
* その結果を外部フォーマットの出力層
にわかれるんでしょうね。
機能で層がわかれるというか、情報の層がちがうのかな。
[Rubyオブジェクトのネットワーク]
|
traverser
|
[抽象化したネットワーク] → オブジェクトを再構成する情報の 列 ができる。
|
formatter
|
[任意のフォーマット]
んで、いまそういうのを書きはじめてみました。
気持ちとしては、marshal.cのw_objectがバッファを出力する代わりに、
オブジェクトを再構成する情報(BMarshal::Ref)を出力します。
フォーマッタはそれを任意の形、順序で外部フォーマットに出力できます。
とりあえず、うそSOAPっぽい出力をさせてみました。
marshal.cの出力と同じものを出すのも簡単だと思います。
---------
class BTraverser
I32 = (-2147483647-1)..2147483647
class Ref
def initialize
@klass = nil
@primary = nil
@ivars = {}
@custom_loader = false
end
attr_accessor :klass, :custom_loader
attr_reader :ivars, :primary
# primaryってヘンだな。bodyのがいいかも
def push_primary(it)
@primary = [] unless @primary
@primary.push(it)
end
end
def initialize
@map = {}
@limit = nil
@stream = []
@cur = nil
end
attr_accessor :map, :limit, :stream
# w_objectというメソッド、呼ばれてないっす。@limitも見てない
def w_object(obj)
raise(ArgError, 'exeed depth limit') if @limit == 0
case obj
when nil, true, false
@stream.push(obj)
when Fixnum
if I32 === obj
@stream.push(obj)
else
make_ref(obj)
end
else
make_ref(obj)
end
end
def make_ref(obj)
ref = @map[obj.__id__]
if ref
@stream.push ref
return ref
end
ref = Ref.new
@map[obj.__id__] = ref
@stream.push ref
begin
stack = @cur
@cur = ref
ref.klass = obj.class
if obj.respond_to? (:__load)
ref.custom_loader = true
end
obj.__dump(self)
ensure
@cur = stack
end
return ref
end
def put_class(klass)
@cur.klass = klass
end
def put_primary(v)
@cur.push_primary(v)
end
def put_ivar(n, v)
@cur.ivars[n] = v
end
def put_all_ivars(obj)
obj.instance_variables.each do |var|
value = obj.instance_eval var
@cur.ivars[var] = self.put(value)
end
end
def put(obj)
# w_object(obj)
make_ref(obj)
end
end
class Fixnum
def __dump(dumper)
dumper.put_primary(to_i)
end
end
class Object
def __dump(dumper)
dumper.put_all_ivars(self)
end
end
class Symbol
def __dump(dumper)
dumper.put_primary(self.id2name)
end
end
class Module
def __dump(dumper)
dumper.put_primary(name)
end
end
class Float
def __dump(dumper)
dumper.put_primary(to_f)
end
end
class Bignum
def __dump(dumper)
dumper.put_primary(to_i)
end
end
class String
def __dump(dumper)
dumper.put_primary(to_s)
end
end
class Regexp
def __dump(dumper)
dumper.put_primary(source)
dumper.put_primary(options)
end
end
class Array
def __dump(dumper)
self.each do |v|
dumper.put_primary(dumper.put(v))
end
end
end
class Hash
def __dump(dumper)
dumper.put_primary(dumper.put(self.default))
self.each do |k, v|
dumper.put_primary(dumper.put(k))
dumper.put_primary(dumper.put(v))
end
end
end
class Struct
def __dump(dumper)
dumper.members.each do |m|
dumper.put_primary(dumper.put(m))
dumper.put_primary(dumper.put(self[m]))
end
end
end
class Foo
def initialize(it)
@foo = self
@bar = it
end
end
class BXmlDumper
def initialize(output=[])
@cur = 1
@map = {}
@child = []
@output = output
end
attr_reader :output
def feed(obj)
return if @map[obj.id]
@map[obj.id] = @cur
@cur += 1
@child.push(obj)
end
def finish
@child.each do |r|
begin_obj(r)
primary_value(r)
ivars(r)
end_obj(r)
end
end
def dump(stream)
stream.each do |obj|
feed(obj)
end
finish
end
def put(s)
@output.push s
end
def begin_obj(r)
put %Q!<obj xsi:type="myns:#{r.klass}" id="id#{@map[r.id]}">!
end
def ivars(r)
r.ivars.each do |k, v|
name = k.sub(/^@/, '')
put %Q! <#{name} href="#id#{@map[v.id]}">!
end
end
def primary_value(r)
case r.klass.name
when 'Fixnum', 'Bignum'
put r.primary[0]
when 'Symbol'
put r.primary[0].dump
when 'String'
put r.primary[0].dump
when 'Array'
r.primary.each do |e|
put %Q! <item href="#id#{@map[e.id]}">!
end
when 'Hash'
it = r.primary[0]
put %Q! <default href="#id#{@map[it.id]}">!
ary = r.primary[1..-1]
while (ary.size > 0) do
put ' <pair>'
put %Q! <key href="#id#{@map[ary.shift.id]}">!
put %Q! <value href="#id#{@map[ary.shift.id]}">!
put ' </pair>'
end
end
end
def end_obj(r)
put '</obj>'
end
end
def test_dump(obj)
puts
p obj
puts
p Marshal.dump(obj)
puts
t = BTraverser.new
t.put(obj)
xml = BXmlDumper.new
xml.dump(t.stream)
xml.output.each do |line|
puts line
end
end
hello = Foo.new("Hello")
complex = Foo.new([:string, 2, 3, hello, :string, {hello=>:string}])
test_dump(complex)
test_dump(hello)