[#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:14519] custom marshal (Re: Re: marshal API (was Re: [Patch] pp.rb and debug.rb))
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, 桂遊生丸)