[#14206] undef_method :method_missing — Kenichi Komiya <kom@...1.accsnet.ne.jp>

154 messages 2001/08/04
[#14207] Re: undef_method :method_missing — nobu.nakada@... 2001/08/04

なかだです。

[#14208] Re: undef_method :method_missing — nobu.nakada@... 2001/08/05

なかだです。

[#14209] Virtual Machine — "KANEMITSU Masao" <masao-k@...> 2001/08/05

金光です。

[#14210] Re: Virtual Machine — Kenta MURATA <muraken2@...> 2001/08/05

むらけんです.

[#14212] Re: Virtual Machine — "KANEMITSU Masao" <masao-k@...> 2001/08/05

金光です。

[#14214] Re: Virtual Machine — SHIROYAMA Takayuki <psi@...> 2001/08/05

[#14220] Re: Virtual Machine — "KANEMITSU Masao" <masao-k@...> 2001/08/05

金光です。

[#14211] Common GUI framework(Re: Virtual Machine) — nobu.nakada@... 2001/08/05

なかだです。

[#14213] RE: Common GUI framework(Re: Virtual Machine) — "KANEMITSU Masao" <masao-k@...> 2001/08/05

金光です。どもっ。

[#14215] Re: Common GUI framework(Re: Virtual Machine) — akira yamada / やまだあきら <akira@...> 2001/08/05

[#14221] Re: Common GUI framework(Re: Virtual Machine) — "KANEMITSU Masao" <masao-k@...> 2001/08/05

金光です。

[#14235] Re: Common GUI framework(Re: Virtual Machine) — IWATSUKI Hiroyuki <don@...> 2001/08/05

岩月と申します。

[#14237] Re: Common GUI framework(Re: Virtual Machine) — "KANEMITSU Masao" <masao-k@...> 2001/08/05

金光です。どもっ。

[#14239] Re: Common GUI framework(Re: Virtual Machine) — ARIMA Yasuhiro <fit0298@...> 2001/08/05

有馬です。

[#14241] Re: Common GUI framework(Re: Virtual Machine) — "KANEMITSU Masao" <masao-k@...> 2001/08/05

金光です。

[#14244] Re: Common GUI framework(Re: Virtual Machine) — ARIMA Yasuhiro <fit0298@...> 2001/08/05

有馬です。

[#14247] Re: Common GUI framework(Re: Virtual Machine) — "KANEMITSU Masao" <masao-k@...> 2001/08/05

金光です。どもっ。

[#14263] Re: Common GUI framework(Re: Virtual Machine) — とみたまさひろ <tommy@...> 2001/08/05

とみたです。

[#14266] Re: Common GUI framework(Re: Virtual Machine) — "KANEMITSU Masao" <masao-k@...> 2001/08/05

金光です。

[#14269] Re: Common GUI framework(Re: Virtual Machine) — とみたまさひろ <tommy@...> 2001/08/05

とみたです。

[#14275] Re: Common GUI framework(Re: Virtual Machine) — ARIMA Yasuhiro <fit0298@...> 2001/08/05

有馬です。

[#14294] Re: Common GUI framework(Re: Virtual Machine) — "KANEMITSU Masao" <masao-k@...> 2001/08/05

金光です。

[#14317] Re: Common GUI framework(Re: Virtual Machine) — ARIMA Yasuhiro <fit0298@...> 2001/08/06

有馬です。

[#14321] Re: Common GUI framework(Re: Virtual Machine) — "KANEMITSU Masao" <masao-k@...> 2001/08/06

金光です。どもっ。

[#14332] Re: Common GUI framework(Re: Virtual Machine) — ARIMA Yasuhiro <fit0298@...> 2001/08/06

有馬です。

[#14335] Re: Common GUI framework(Re: Virtual Machine) — Kenta MURATA <muraken2@...> 2001/08/06

むらけんです.

[#14346] Re: Common GUI framework(Re: Virtual Machine) — "KANEMITSU Masao" <masao-k@...> 2001/08/06

金光です。どもっ。

[#14356] Re: Common GUI framework(Re: Virtual Machine) — ARIMA Yasuhiro <fit0298@...> 2001/08/06

有馬です。

[#14357] Re: Common GUI framework(Re: Virtual Machine) — "KANEMITSU Masao" <masao-k@...> 2001/08/06

金光です。どもどもっ。

[#14243] Re: Common GUI framework(Re: Virtual Machine) — IWATSUKI Hiroyuki <don@...> 2001/08/05

岩月と申します。

[#14258] Re: Common GUI framework(Re: Virtual Machine) — akira yamada / やまだあきら <akira@...> 2001/08/05

[#14260] Re: Common GUI framework(Re: Virtual Machine) — "KANEMITSU Masao" <masao-k@...> 2001/08/05

金光です。FOXとかもあるのかぁ。すげぇなぁ。

[#14277] Re: Common GUI framework(Re: Virtual Machine) — matz@... (Yukihiro Matsumoto) 2001/08/05

まつもと ゆきひろです

[#14295] Re: Common GUI framework(Re: Virtual Machine) — "KANEMITSU Masao" <masao-k@...> 2001/08/05

金光です。御大、待ってましたっ。

[#14390] [Patch] pp.rb and debug.rb — "NAKAMURA, Hiroshi" <nakahiro@...>

なひです。

113 messages 2001/08/09
[#14391] Re: [Patch] pp.rb and debug.rb — "NAKAMURA, Hiroshi" <nakahiro@...> 2001/08/09

なひです。書き忘れ。

[#14392] Re: [Patch] pp.rb and debug.rb — nobu.nakada@... 2001/08/09

なかだです。

[#14435] Re: [Patch] pp.rb and debug.rb — "K.Kosako" <kosako@...> 2001/08/13

nobu.nakada@nifty.ne.jpさんの

[#14437] Re: [Patch] pp.rb and debug.rb — nobu.nakada@... 2001/08/13

なかだです。

[#14449] Re: [Patch] pp.rb and debug.rb — Tanaka Akira <akr@...17n.org> 2001/08/14

In article <DJEGJLCFNEIMKDNMLFPHMEAHCBAA.nakahiro@sarion.co.jp>,

[#14450] Re: [Patch] pp.rb and debug.rb — "NAKAMURA, Hiroshi" <nakahiro@...> 2001/08/14

なひです。

[#14452] Re: [Patch] pp.rb and debug.rb — Tanaka Akira <akr@...17n.org> 2001/08/14

In article <DJEGJLCFNEIMKDNMLFPHEEAICBAA.nakahiro@sarion.co.jp>,

[#14453] Re: [Patch] pp.rb and debug.rb — "NAKAMURA, Hiroshi" <nakahiro@...> 2001/08/14

なひです。

[#14454] Re: [Patch] pp.rb and debug.rb — matz@... (Yukihiro Matsumoto) 2001/08/14

まつもと ゆきひろです

[#14455] Re: [Patch] pp.rb and debug.rb — Tanaka Akira <akr@...17n.org> 2001/08/14

In article <997774251.527258.14423.nullmailer@ev.netlab.jp>,

[#14474] Re: [Patch] pp.rb and debug.rb — "NAKAMURA, Hiroshi" <nakahiro@...> 2001/08/15

なひです。

[#14498] Re: [Patch] pp.rb and debug.rb — Tanaka Akira <akr@...17n.org> 2001/08/16

In article <DJEGJLCFNEIMKDNMLFPHEEALCBAA.nakahiro@sarion.co.jp>,

[#14499] Re: [Patch] pp.rb and debug.rb — "NAKAMURA, Hiroshi" <nakahiro@...> 2001/08/16

なひです。

[#14504] Re: [Patch] pp.rb and debug.rb — Tanaka Akira <akr@...17n.org> 2001/08/16

In article <DJEGJLCFNEIMKDNMLFPHEEAPCBAA.nakahiro@sarion.co.jp>,

[#14507] marshal API (was Re: [Patch] pp.rb and debug.rb) — "NAKAMURA, Hiroshi" <nakahiro@...> 2001/08/16

なひです。

[#14510] Re: marshal API (was Re: [Patch] pp.rb and debug.rb) — Tanaka Akira <akr@...17n.org> 2001/08/16

In article <DJEGJLCFNEIMKDNMLFPHMEBACBAA.nakahiro@sarion.co.jp>,

[#14511] Re: marshal API (was Re: [Patch] pp.rb and debug.rb) — "NAKAMURA, Hiroshi" <nakahiro@...> 2001/08/16

なひです。

[#14519] custom marshal (Re: Re: marshal API (was Re: [Patch] pp.rb and debug.rb)) — Tanaka Akira <akr@...17n.org> 2001/08/17

In article <DJEGJLCFNEIMKDNMLFPHIEBBCBAA.nakahiro@sarion.co.jp>,

[#14520] Re: marshal API (was Re: [Patch] pp.rb and debug.rb) — Tanaka Akira <akr@...17n.org> 2001/08/17

うぅむ。ぼーっとしてたら意味もなく Subject を変えてしまった。

[#14549] Re: custom marshal (Re: Re: marshal API (was Re: [Patch] pp.rb and debug.rb)) — Tanaka Akira <akr@...17n.org> 2001/08/22

In article <hvo66bnxe4b.fsf_-_@flux.etl.go.jp>,

[#14832] Re: custom marshal — GOTO Kentaro <gotoken@...> 2001/09/29

古い話題で恐縮ですが…

[#14833] Re: custom marshal — nobu.nakada@... 2001/09/29

なかだです。

[#14834] Re: custom marshal — Tanaka Akira <akr@...17n.org> 2001/10/01

In article <200109290948.f8T9mbh12942@sharui.nakada.kanuma.tochigi.jp>,

[#14835] Re: custom marshal — nobu.nakada@... 2001/10/01

なかだです。

[#14836] Re: custom marshal — matz@... (Yukihiro Matsumoto) 2001/10/01

まつもと ゆきひろです

[#14837] Re: custom marshal — Tanaka Akira <akr@...17n.org> 2001/10/02

In article <1001945748.240863.24023.nullmailer@ev.netlab.jp>,

[#14838] Re: custom marshal — nobu.nakada@... 2001/10/02

なかだです。

[#14839] Re: custom marshal — Tanaka Akira <akr@...17n.org> 2001/10/02

In article <200110020334.f923YLb08299@sharui.nakada.kanuma.tochigi.jp>,

[#14842] Re: custom marshal — nobu.nakada@... 2001/10/02

なかだです。

[#14843] Re: custom marshal — Tanaka Akira <akr@...17n.org> 2001/10/02

In article <200110021010.f92AAIb13474@sharui.nakada.kanuma.tochigi.jp>,

[#14844] Re: custom marshal — nobu.nakada@... 2001/10/02

なかだです。

[#14845] Re: custom marshal — matz@... (Yukihiro Matsumoto) 2001/10/02

まつもと ゆきひろです

[#14847] Re: custom marshal — matz@... (Yukihiro Matsumoto) 2001/10/02

まつもと ゆきひろです

[#14848] Re: custom marshal — nobu.nakada@... 2001/10/03

なかだです。

[#14852] Re: custom marshal — matz@... (Yukihiro Matsumoto) 2001/10/03

まつもと ゆきひろです

[#14465] Ruby/Bsearch — akira yamada / やまだあきら <akira@...>

16 messages 2001/08/14
[#14472] Re: Ruby/Bsearch — matz@... (Yukihiro Matsumoto) 2001/08/15

まつもと ゆきひろです

[#14595] SEGV at `$0 = "long long string"' — nobu.nakada@...

なかだです。

14 messages 2001/08/28

[ruby-dev:14519] custom marshal (Re: Re: marshal API (was Re: [Patch] pp.rb and debug.rb))

From: Tanaka Akira <akr@...17n.org>
Date: 2001-08-17 08:52:26 UTC
List: ruby-dev #14519
In article <DJEGJLCFNEIMKDNMLFPHIEBBCBAA.nakahiro@sarion.co.jp>,
  "NAKAMURA, Hiroshi" <nakahiro@sarion.co.jp> writes:

> そうですねー。custom marshalについて興味のある人が
> 行くべきコミュニティはどこでしょう?

べつに場所を移れといっているわけではなく、最初から用途・興味を明らかに
してほしい、というだけなんですが。

とゆーわけで custom marshal の話ですが、せっかくあそこまで書いたので大
雑把に仕上げてみました。

で、気がついたんですが、Range オブジェクトを含むサイクルがあるとちっと
問題ですね。

class B
  attr_accessor :v
  def succ
  end

  def <=>(other)
  end
end
b = B.new
c = B.new
a = b..c
b.v = a

というような構造を Ruby script で作るにはかならず a を後に作らなければ
ならないんですが、marshal でそれを保証するのはすこし面倒そうです。

最悪、(Marshal.load "\004\006o:\nRange\010:\010endi\a:\nbegin@\000:\texclF"
などとしてむりやり作った) Range だけからなるサイクルもありえるわけですし。

というわけで、Range#begin= や Range#end= が欲しくなった今日この頃です。

# ちなみに、Range#inspect はサイクルを検出しないようですね。

class AMarshal
  def AMarshal.load(port)
    port = port.read if port.kind_of? IO
    eval port
  end

  def AMarshal.dump(obj, port='')
    am = AMarshal.new(obj, port)
    am.print "#{am.put1(obj)}\n"
    port
  end

  def put(obj)
    traverse(obj) {|state|
      put1(obj) if state == :tree
    }
    return @name[obj.__id__]
  end

  def put1(obj)
    @name[obj.__id__] = "object#{obj.__id__}"
    obj.am_dump(self) {|name| @name[obj.__id__] = name if name; @name[obj.__id__]}
    return @name[obj.__id__]
  end

  def print(*args)
    args.each {|v| @port << v}
  end

  def initialize(obj, port)
    @curr = @number = 1
    @hash = {obj.__id__ => -1}
    @port = port
    @name = {}
  end

  def status(obj)
    id = obj.__id__
    unless @hash.include? id
      return :tree
    end

    number = @hash[id]
    if number < 0
      return :backward
    elsif @curr < number
      return :forward
    else
      return :cross
    end
  end

  def traverse(obj)
    if (s = status(obj)) == :tree
      id = obj.__id__
      number = @number += 1
      @hash[id] = -number
      prev = @curr
      @curr = number
      yield s
      @curr = prev
      @hash[id] = number
    else
      yield s
    end
  end
end

class Class
  def basic_new
    return Marshal.load(sprintf("\004\006o:%c%s\000", name.length + 5, name))
  end
end

[IO, Binding, Continuation, Data, Dir, File::Stat, MatchData, Method, Proc, Thread, ThreadGroup].each {|c|
  c.class_eval {
    def am_dump(am);
      raise TypeError.new("can't dump #{self.class}")
    end
  }
}

class Object
  def am_dump(am)
    name = yield
    am.print "#{name} = #{self.class.name}.basic_new\n"
    instance_variables.each {|var|
      value = instance_eval var
      am.print "#{name}.instance_eval {#{var} = #{am.put(value)}}\n"
    }
  end
end

class Module
  def am_dump(am)
    yield self.class.name
  end
end

class Array
  def am_dump(am)
    name = yield
    am.print "#{name} = Array.new(#{length})\n"
    self.each_index {|i|
      am.print "#{name}[#{i}] = #{am.put(self[i])}\n"
    }
  end
end

class Exception
  def am_dump(am)
    name = yield
    am.print "#{name} = Exception.new(#{am.put(self.message)})\n"
    am.print "#{name}.set_backtrace #{am.put(self.backtrace)}\n"
    # xxx: exception object is created at last.
  end
end

class Hash
  def am_dump(am)
    name = yield
    am.print "#{name} = Hash.new\n"
    self.each {|k, v|
      am.print "#{name}[#{am.put(k)}] = #{am.put(v)}\n"
    }
  end
end

class Range
  def am_dump(am)
    name = yield
    if self.exclude_end?
      dots = '...'
    else
      dots = '..'
    end
    am.print "#{name} = #{am.put(self.begin)}#{dots}#{am.put(self.end)}\n"
    # xxx: range object is created at last.
  end
end

class Regexp
  def am_dump(am)
    name = yield
    am.print "#{name} = /#{self.source}/\n"
  end
end

class String
  def am_dump(am)
    name = yield
    am.print "#{name} = #{self.dump}\n"
  end
end

class Struct
  def am_dump(am)
    name = yield
    args = (["nil"] * self.length).join(", ")
    am.print "#{name} = #{self.class}.new(#{args})\n"
    self.members.each {|m|
      am.print "#{name}[:#{m}] = #{am.put(self[m])}\n"
    }
  end
end

class Symbol
  def am_dump(am)
    yield ":#{self.to_s}"
  end
end

class Time
  def am_dump(am)
    name = yield
    if self.utc?
      am.print "#{name} = Time.utc(#{year}, #{mon}, #{day}, #{hour}, #{min}, #{sec}, #{usec})\n"
    else
      t = self.dup.utc
      am.print "#{name} = Time.utc(#{t.year}, #{t.mon}, #{t.day}, #{t.hour}, #{t.min}, #{t.sec}, #{t.usec}).localtime\n"
    end
  end
end

class Fixnum
  def am_dump(am)
    yield self.to_s
  end
end

class Bignum
  def am_dump(am)
    name = yield
    am.print "#{name} = #{self}\n"
  end
end

class Float
  def am_dump(am)
    name = yield
    am.print "#{name} = #{self}\n"
  end
end

class TrueClass
  def am_dump(am)
    yield "true"
  end
end

class FalseClass
  def am_dump(am)
    yield "false"
  end
end

class NilClass
  def am_dump(am)
    yield "nil"
  end
end

# references:
#  new marshal interface: ruby-dev:13184
#  basic_new: ruby-list:23305, ruby-list:30338
-- 
[田中 哲][たなか あきら][Tanaka Akira]
「ふえろ! わかめちゃん作戦です$(C⊇」(Little Worker, 桂遊生丸)

In This Thread