Custom Search
|
Date: November 30, 2005
From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx>
In-reply-to:
<E1EhVcx-0001Uy-00@emperor
>
References:
<E1EhVcx-0001Uy-00@emperor
>
まつもと ゆきひろです
In message "Re: [ruby-dev:27906] Re: Numeric とComplex"
on Thu, 1 Dec 2005 02:20:57 +0900, keiju@xxxxxxxxxxxxx (石塚圭樹) writes:
|現行文字列の時には, 順序の定義が2つあるわけですよね.
|
|* 辞書式順序 String#<=>
|* succ式順序 String#succ
その通りです。
|で, 現行は
|
|* 辞書式順序 Range#===, Range#include?
|* succ式順序 Range#each
|
|で, これを,
|
|* 辞書式順序 Range#===
|* succ式順序 Range#each, Range#include?
|
|にしたいってことなんですね?
辞書式順序というよりは、連続的範囲と離散的範囲って感じですか
ね(文字列の場合には要素が違ったものになってしまっているので
すが)。数値では連続的範囲として扱って問題ないと思うのですが、
文字列はねえ。
|ですので, 1つのクラスで両方を表現しようとするのが無理があるのでは?
いや、その通りです。基本的にどっちか一方を追い出すのでも構わ
ないのですが、
* Rangeは../...演算子で作られるがそれはどっちなの
* どちらかを追い出すとして、それはどっち
* 新設するクラスの名前は
* 残るクラスの各メソッドはどう振る舞うのか
などを全部決めないといけないので頭の痛い話です。で、まあ、実
際の使用例を見てみるとどうやら離散的に使われるときと連続的に
使われるときで使われるメソッドが違うことが多いんで(文字列
Rangeで辞書的順序を使った例はあまり見ないような気がする)、あ
る程度はなんとかできないかと考えているんですが...。
|class Range
|
|class EnumerableRange<Range
| include Enumerable
|
|を用意し, 順序および次を指定するブロックをしていいできるnewを用意する:
|
| Range.new(first, end, exclude_end){|e1, e2| e1.cmp(e2)}
| EnumerableRange.new(first, end){|e| e.succ}
|
|で, さらに, forで主に使われるために存在するfirst..end は
|EnumerableRange の意味にし, 各々のメソッドも指定されたブロックで評価す
|るようにするとか?
「forで主に使われるために存在する」かどうかは自信がないです。
Rangeってけっこういろいろなところで使われてますし。ほとんど
は両端が数値だけど。
まつもと ゆきひろ /:|)
Date: November 30, 2005
From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx>
In-reply-to:
<20051201030042.C93F1548.ocean@xxxxxxxxxxxxxxx>
References:
<20051201030042.C93F1548.ocean@xxxxxxxxxxxxxxx>
まつもと ゆきひろです
In message "Re: [ruby-dev:27907] Re: ruby 1.8 dumps core"
on Thu, 1 Dec 2005 03:00:47 +0900, H.Yamamoto <ocean@xxxxxxxxxxxxxxx>
writes:
|私のところでも通るようになりました。なるほど、こういう場合は
|rb_gc_mark_maybe を使わなきゃいけないんですね。手元でうまく
|いかなかったのはこれが原因かな・・・
いや、わかんないですよ。実際にはマークする場合には必ずRubyの
オブジェクトが入っていることが確実だったら要らないわでせ。で
も、_why以外の人には(もしかしたら_whyにも)わかんないわけです
から今かいは安全側に倒しました。
|# 実はもうひとつ気になっていることがあって、SyckNode の
|# メンバ shortcut は void* になってますが、実は別のノードを
|# 保持しているみたいなので、もしかするとこれもマークしなくて
|# はいけないかもしれません。
そうなんですか。うーむ。
Date: November 30, 2005
From: H.Yamamoto <ocean@xxxxxxxxxxxxxxx>
In-reply-to:
<1133370845.945901.12247.nullmailer@xxxxxxxxxxxxxxxxxx>
References:
<20051130210645.7228E2B0.ocean@xxxxxxxxxxxxxxx> <1133370845.945901.12247.nullmailer@xxxxxxxxxxxxxxxxxx>
山本です。 >これでテストは通るようになるようです。SYMIDにVALUEを突っ込む >のはいかがなものかと思いますが。 私のところでも通るようになりました。なるほど、こういう場合は rb_gc_mark_maybe を使わなきゃいけないんですね。手元でうまく いかなかったのはこれが原因かな・・・ # 実はもうひとつ気になっていることがあって、SyckNode の # メンバ shortcut は void* になってますが、実は別のノードを # 保持しているみたいなので、もしかするとこれもマークしなくて # はいけないかもしれません。
Date: November 30, 2005
From: keiju@xxxxxxxxxxxxx (石塚圭樹)
In-reply-to:
Yukihiro Matsumoto message of Wed, 30 Nov 2005 22:59:01 JST <1133359135.835252.30814.nullmailer@xxxxxxxxxxxxxxxxxx>
References:
<1133359135.835252.30814.nullmailer@xxxxxxxxxxxxxxxxxx>
けいじゅ@いしつかです.
In [ruby-dev:27898] the message: "[ruby-dev:27898] Re: Numeric と
Complex", on Nov/30 22:59(JST) Yukihiro Matsumoto writes:
>まつもと ゆきひろです
>|(1) "a" <= s and s <= "z"
>|(2) Range("a", "z").include?(s)
>|は同じではないんですね?
>
>そうなりますね。そのような動作をするメソッドも用意するつもり
>ですが(名前が...)。
>|case s
>|when "a".."z"
>|は(1)の動作を期待する人が続出しそうですが?
>
>これは(たまたま)動作します。
そうか, Range#=== のていぎですからね.
>どうするのが一番良いかはなかなか
>悩ましいところです。
うーん.
現行文字列の時には, 順序の定義が2つあるわけですよね.
* 辞書式順序 String#<=>
* succ式順序 String#succ
文字列として扱っているときには, 特に問題は発生してないわけですが,
# ほんとうは, succから <=>を定義できるので矛盾していますが...
Rengeを考えたときには, その矛盾が鮮明になる. つまり,
Range(st1, st2)
が
Range(st1, st2, :<=>)
なのか,
Range(st1, st2, :succ)
の意味なのか?
で, 現行は
* 辞書式順序 Range#===, Range#include?
* succ式順序 Range#each
で, これを,
* 辞書式順序 Range#===
* succ式順序 Range#each, Range#include?
にしたいってことなんですね?
でも, 辞書式順序では
* 辞書式順序 Range#===, Range#include?
は意味があるし, よく使うと思いますし, succ式順序でも
* succ式順序 Range#each, Range#include?, Range#===
は意味があると思います.
ですので, 1つのクラスで両方を表現しようとするのが無理があるのでは?
それに, 順序はsortと同じように<=>/succ決まらないわけでもないので,
たとえば, 2つのクラス
class Range
class EnumerableRange<Range
include Enumerable
を用意し, 順序および次を指定するブロックをしていいできるnewを用意する:
Range.new(first, end, exclude_end){|e1, e2| e1.cmp(e2)}
EnumerableRange.new(first, end){|e| e.succ}
で, さらに, forで主に使われるために存在するfirst..end は
EnumerableRange の意味にし, 各々のメソッドも指定されたブロックで評価す
るようにするとか?
__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju@xxxxxxxxxxxxx <<---
Date: November 30, 2005
From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx>
In-reply-to:
<20051130210645.7228E2B0.ocean@xxxxxxxxxxxxxxx>
References:
<20051130210645.7228E2B0.ocean@xxxxxxxxxxxxxxx>
まつもと ゆきひろです
In message "Re: [ruby-dev:27895] Re: ruby 1.8 dumps core"
on Wed, 30 Nov 2005 21:06:50 +0900, H.Yamamoto <ocean@xxxxxxxxxxxxxxx>
writes:
|で、調べてみたのですが、syck ってかなり mark し忘れがありますね。
|あんまり多くて、まだ動くところまで至っていません。少なくともこれは
|要るんじゃないかと思いますが、他にも怪しい部分がたくさんあります。--;;
これでテストは通るようになるようです。SYMIDにVALUEを突っ込む
のはいかがなものかと思いますが。
Index: ext/syck/rubyext.c
===================================================================
RCS file: /var/cvs/src/ruby/ext/syck/rubyext.c,v
retrieving revision 1.54
diff -p -u -1 -r1.54 rubyext.c
--- ext/syck/rubyext.c 1 Nov 2005 13:04:33 -0000 1.54
+++ ext/syck/rubyext.c 30 Nov 2005 17:12:07 -0000
@@ -597,2 +597,4 @@ yaml_org_handler( n, ref )
+static void syck_node_mark( SyckNode *n );
+
/*
@@ -617,3 +619,4 @@ rb_syck_load_handler(p, n)
*/
- obj = rb_funcall( resolver, s_node_import, 1, Data_Wrap_Struct( cNode,
NULL, NULL, n ) );
+ obj = rb_funcall( resolver, s_node_import,
+ 1, Data_Wrap_Struct( cNode, syck_node_mark, NULL, n ) );
@@ -713,4 +716,4 @@ syck_mark_parser(parser)
struct parser_xtra *bonus;
- rb_gc_mark(parser->root);
- rb_gc_mark(parser->root_on_error);
+ rb_gc_mark_maybe(parser->root);
+ rb_gc_mark_maybe(parser->root_on_error);
if ( parser->bonus != NULL )
@@ -720,2 +723,3 @@ syck_mark_parser(parser)
rb_gc_mark( bonus->proc );
+ rb_gc_mark( bonus->resolver );
}
@@ -1382,2 +1386,4 @@ syck_node_mark( n )
int i;
+ if (!n) return;
+ rb_gc_mark_maybe( n->id );
switch ( n->kind )
@@ -1385,2 +1391,3 @@ syck_node_mark( n )
case syck_seq_kind:
+ if (!n->data.list) return;
for ( i = 0; i < n->data.list->idx; i++ )
@@ -1392,2 +1399,3 @@ syck_node_mark( n )
case syck_map_kind:
+ if (!n->data.pairs) return;
for ( i = 0; i < n->data.pairs->idx; i++ )
@@ -1806,2 +1814,3 @@ syck_node_transform( self )
Data_Get_Struct(self, SyckNode, orig_n);
+ t = Data_Wrap_Struct( cNode, syck_node_mark, NULL, 0 );
@@ -1812,3 +1821,3 @@ syck_node_transform( self )
int i;
- n = syck_alloc_map();
+ DATA_PTR(t) = n = syck_alloc_map();
for ( i = 0; i < orig_n->data.pairs->idx; i++ )
@@ -1824,3 +1833,3 @@ syck_node_transform( self )
int i;
- n = syck_alloc_seq();
+ DATA_PTR(t) = n = syck_alloc_seq();
for ( i = 0; i < orig_n->data.list->idx; i++ )
@@ -1833,3 +1842,3 @@ syck_node_transform( self )
case syck_str_kind:
- n = syck_new_str2( orig_n->data.str->ptr, orig_n->data.str->len,
orig_n->data.str->style );
+ DATA_PTR(t) = n = syck_new_str2( orig_n->data.str->ptr,
orig_n->data.str->len, orig_n->data.str->style );
break;
@@ -1845,3 +1854,2 @@ syck_node_transform( self )
}
- t = Data_Wrap_Struct( cNode, NULL, NULL, n );
n->id = t;
@@ -1948,2 +1956,3 @@ syck_mark_emitter(emitter)
bonus = (struct emitter_xtra *)emitter->bonus;
+ rb_gc_mark( bonus->oid );
rb_gc_mark( bonus->data );
Date: November 30, 2005
From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx>
Hi, Try this, if you please. ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.4-preview2.tar.gz e5a48054fb34f09da17e8e8f04b8c706 matz.
Date: November 30, 2005
From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx>
In-reply-to:
<200511301525.jAUFPe5i014662@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
References:
<200511301525.jAUFPe5i014662@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
まつもと ゆきひろです
In message "Re: [ruby-dev:27901] Re: 1.8.4 preview2?"
on Thu, 1 Dec 2005 00:25:44 +0900, nobu@xxxxxxxxxxxxx writes:
|[ruby-dev:24781]のスクリプトを、最初にタグを打つように改造して
|みました。
ありがとうございます。実際には失敗が恐いので自動で打つのはど
うかと思うのですが、参考にします。
Date: November 30, 2005
From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx>
In-reply-to:
<TYOMLEM04FRaqbC8wSA00000046@xxxxxxxxxxxxxxxxxxxxxxxx>
References:
<TYOMLEM04FRaqbC8wSA00000046@xxxxxxxxxxxxxxxxxxxxxxxx>
まつもと ゆきひろです
In message "Re: [ruby-dev:27892] Re: rb_funcall2() for protected method"
on Wed, 30 Nov 2005 18:59:23 +0900, nobuyoshi nakada
<nobuyoshi.nakada@xxxxxx> writes:
|抜け道がほしいというか、少なくとも今のrb_call()でのprotectedに
|対するチェックはrb_funcall2()に関しては不適切ではないかと思うの
|ですが。Cレベルで別のオブジェクトのコンテキストで評価していても、
|ruby_frameに反映されるわけではないので。
なるほど。でも、その場合でもscopeを流用するのは違うんじゃな
いかなあ。あー、でも関数的呼び出しの場合にはprotectedの呼び
出しは必ず成功するわけだし問題ないのか...。
納得しました。コミットしてください。1.8にも。
Date: November 30, 2005
From: nobu@xxxxxxxxxxxxx
In-reply-to:
<1133310145.542908.13177.nullmailer@xxxxxxxxxxxxxxxxxx>
References:
<438C7476.3070603@xxxxxxxxxxx> <1133310145.542908.13177.nullmailer@xxxxxxxxxxxxxxxxxx>
なかだです。
At Wed, 30 Nov 2005 09:22:30 +0900,
Yukihiro Matsumoto wrote in [ruby-dev:27878]:
> |>>25日か28日かどちらかに出しましょう。
> |>>
> |>どうなってますか?
> |>
> |どうなってますか?
> |とりあえず純粋に予定を知りたいだけなのですけれど。
>
> えーと、今晩、かな。だれか代わりにパックしてくれてもいいんですけど。
[ruby-dev:24781]のスクリプトを、最初にタグを打つように改造して
みました。
#! /bin/sh
: ${RUBYHOME=$HOME/work/ruby}
: ${ARCHDIR=$RUBYHOME/archive}
export RUBY=${RUBY-ruby}
: ${RUBY_CVSROOT=":pserver:anonymous@xxxxxxxxxxxxxxxxx:/src"}
workdir="/tmp/ppack$$"
tmpfiles="$workdir"
trap 'cd /; /bin/rm -rf $tmpfiles; exit' 0 1 2 13 15
rev=`expr "$1" : '-r\(.*\)'` && shift
tag=$1
if [ -n "$tag" ]; then
if [ -z "$rev" ]; then
rev=`expr "$tag" : 'v\([1-9]_[0-9]\)'` && rev=ruby_$rev
fi
cvs -d "$RUBY_CVSROOT" rtag ${rev:+-r $rev} "$tag" ruby > /dev/null 2>&1
fi
mkdir $workdir
cd $workdir
cvs -d "$RUBY_CVSROOT" export ${rev:+-r $rev} ruby > /dev/null 2>&1
ver=`sed '/.*"\([0-9]\.[0-9]\.[0-9]\)".*/!d;s//\1/;q' ruby/version.h`
arch=ruby-$ver
mv ruby $arch
tar=${arch}.tar.gz
(cd $arch
autoconf 2> /dev/null
rm -rf autom4te.cache aclocal.m4
bison -o parse.c parse.y
[ -d ext/ripper ] && make -C ext/ripper -f depend hdrdir=../.. srcdir=.
)
mkdir -p $ARCHDIR
tar cf - $arch | gzip -9 > $ARCHDIR/$tar
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦
Date: November 30, 2005
From: nobu@xxxxxxxxxxxxx
In-reply-to:
<871x0y7328.fsf@xxxxxxxx>
References:
<871x0y7328.fsf@xxxxxxxx>
なかだです。
At Wed, 30 Nov 2005 21:07:14 +0900,
Tanaka Akira wrote in [ruby-dev:27896]:
> というところで、xmalloc で GC が起こると、u1 が 0 の状態で
> GC が起動してしまうのはよろしくないんじゃないでしょうか。
たしかに。gc_mark_children()ではu1が0かどうかまではチェックして
ませんね。
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦
Date: November 30, 2005
From: Hidetoshi NAGAI <nagai-iKxUiVHJP4pSXnIrXG/8Ww@xxxxxxxxxxxxxxxx>
永井@知能.九工大です.
# このメールは ruby-dev ML と ruby-list ML との両方に流していますが,
# 広く協力者を求めるため,ご容赦ください.
MacOS X のことは全くと言っていいほど知らないので,
もしユーザがいらっしゃいましたら御協力願えないでしょうか?
MacOS X で X11 用ではなく Aqua 用に tcltklib を make したい場合,
'ext/tk/extconf.rb' への下記のようなパッチは必要でしょうか?
それともこれは無意味でしょうか?
もしこのパッチが無意味というわけではなく,かつ,
協力してもいいという方がいらっしゃいましたら,
1.9 か 1.8.4 の preview 版かの 'ext/tk/extconf.rb' に
添付のパッチをあてて,Tcl/TkAqua がインストールされた環境で
./configure --enable-pthread --enable-tcltk-framework --enable-macosx-aqua
とすることで,X11 に依存せずに make できるかどうか,
そしてきちんと動くかどうかを試してみていただけないでしょうか.
ダメならダメで,どこがダメだったのかの報告いただけると助かります.
# より適切な対応パッチを作っていただけるなら,もっと嬉しいですが.(^_^)
当方で調べることができる範囲には MacOS X 機がないもので,
ぜひ協力をお願い致します.
Index: extconf.rb
===================================================================
RCS file: /var/cvs/src/ruby/ext/tk/extconf.rb,v
retrieving revision 1.2.8.4
diff -u -r1.2.8.4 extconf.rb
--- extconf.rb 2 Nov 2005 11:28:40 -0000 1.2.8.4
+++ extconf.rb 30 Nov 2005 05:45:16 -0000
@@ -32,6 +32,14 @@
tcltk_framework = find_framework(tcl_framework_header, tk_framework_header)
+def use_macosx_aqua
+ if /darwin/ =~ RUBY_PLATFORM
+ enable_config("macosx-aqua", true)
+ else
+ false
+ end
+end
+
unless is_win32
have_library("nsl", "t_open")
have_library("socket", "socket")
@@ -280,6 +288,11 @@
$CPPFLAGS += ' -DUSE_TCL_STUBS -DUSE_TK_STUBS' if stubs
$CPPFLAGS += ' -D_WIN32' if /cygwin/ =~ RUBY_PLATFORM
+ if use_macosx_aqua
+ $CPPFLAGS += ' -DMAC_OSX_TK=1'
+ $LDFLAGS += ' -framework CoreFoundation -framework Carbon'
+ end
+
if tcltk_framework
if tcl_framework_header
$CPPFLAGS += " -I#{tcl_framework_header}"
--
永井 秀利 (九工大 知能情報)
nagai-iKxUiVHJP4pSXnIrXG/8Ww@xxxxxxxxxxxxxxxx
Date: November 30, 2005
From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx>
In-reply-to:
<E1EhPOB-0000lK-00@emperor
>
References:
<E1EhPOB-0000lK-00@emperor
>
まつもと ゆきひろです
In message "Re: [ruby-dev:27894] Re: Numeric とComplex"
on Wed, 30 Nov 2005 19:41:15 +0900, keiju@xxxxxxxxxxxxx (石塚圭樹) writes:
|>それに、たとえば両端が文字列だったりした場合にはeach以外の動
|>作はあまりよろしくないと思います。eachで辞書順の文字列を生成
|>しないので。
|
|すると, 逆に言えば:
|
|sを文字列として
|
|(1) "a" <= s and s <= "z"
|
|と
|
|(2) Range("a", "z").include?(s)
|
|は同じではないんですね?
そうなりますね。そのような動作をするメソッドも用意するつもり
ですが(名前が...)。
|これって, 非常にわかりづらいですねぇ...
|
|case s
|when "a".."z"
|
|は(1)の動作を期待する人が続出しそうですが?
これは(たまたま)動作します。どうするのが一番良いかはなかなか
悩ましいところです。
Date: November 30, 2005
From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx>
In-reply-to:
<20051130210645.7228E2B0.ocean@xxxxxxxxxxxxxxx>
References:
<20051130210645.7228E2B0.ocean@xxxxxxxxxxxxxxx>
まつもと ゆきひろです
In message "Re: [ruby-dev:27895] Re: ruby 1.8 dumps core"
on Wed, 30 Nov 2005 21:06:50 +0900, H.Yamamoto <ocean@xxxxxxxxxxxxxxx>
writes:
|rb_funcall で GC が走るようにしたところ、私の環境でも test/yaml が
|落ちるようになりました。逆に、GC を無効にするとメモリエラーも出なく
|なります。
ふむ。
|で、調べてみたのですが、syck ってかなり mark し忘れがありますね。
|あんまり多くて、まだ動くところまで至っていません。少なくともこれは
|要るんじゃないかと思いますが、他にも怪しい部分がたくさんあります。--;;
とりあえずこの二ヶ所はコミットしていただけませんか?
_whyには私から伝えておきます。
Date: November 30, 2005
From: Tanaka Akira <akr@xxxxxxxx>
NEWHEAP ですが、たとえば、
#define NEWHEAP(cnt) rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parserp->heap, cnt)
#define ADD2HEAP(n, ptr) ((parserp->heap = (n))->u1.node = (ptr))
void *
rb_parser_malloc(struct parser_params *parserp, size_t size)
{
NODE *n = NEWHEAP(HEAPCNT(1, size));
return ADD2HEAP(n, xmalloc(size));
}
というところで、xmalloc で GC が起こると、u1 が 0 の状態で
GC が起動してしまうのはよろしくないんじゃないでしょうか。
--
[田中 哲][たなか あきら][Tanaka Akira]
Date: November 30, 2005
From: H.Yamamoto <ocean@xxxxxxxxxxxxxxx>
In-reply-to:
<87d5kjkic9.fsf@xxxxxxxx>
References:
<20051128190225.14D66C20.ocean@xxxxxxxxxxxxxxx> <87d5kjkic9.fsf@xxxxxxxx>
山本です。
>> test/yaml/test_yaml.rb を実行してメモリ解析ソフトを走らせたところ、怪しげなエラーが
>> 出ていました。まだよくわかりませんが、これが原因かもしれません。
>
>試さずに述べるのでなんですが、GC が起こりうる全てのタイミン
>グで GC が起こるように ruby を細工して yaml をテストするとど
>うなるでしょう?
rb_funcall で GC が走るようにしたところ、私の環境でも test/yaml が
落ちるようになりました。逆に、GC を無効にするとメモリエラーも出なく
なります。
Index: eval.c
===================================================================
RCS file: /src/ruby/eval.c,v
retrieving revision 1.846
diff -u -r1.846 eval.c
--- eval.c 11 Nov 2005 17:11:05 -0000 1.846
+++ eval.c 30 Nov 2005 11:26:48 -0000
@@ -5871,6 +5871,12 @@
{
VALUE *argv;
va_list ar;
+
+ if (ruby_running && getenv("DEBUG_RUBY")) {
+ puts("run gc....");
+ rb_gc();
+ }
+
va_start(ar, n);
if (n > 0) {
Index: signal.c
===================================================================
RCS file: /src/ruby/signal.c,v
retrieving revision 1.70
diff -u -r1.70 signal.c
--- signal.c 8 Nov 2005 08:49:45 -0000 1.70
+++ signal.c 30 Nov 2005 11:33:58 -0000
@@ -947,7 +947,7 @@
install_sighandler(SIGBUS, sigbus);
#endif
#ifdef SIGSEGV
- install_sighandler(SIGSEGV, sigsegv);
+// install_sighandler(SIGSEGV, sigsegv);
#endif
#ifdef SIGPIPE
install_sighandler(SIGPIPE, sigpipe);
で、調べてみたのですが、syck ってかなり mark し忘れがありますね。
あんまり多くて、まだ動くところまで至っていません。少なくともこれは
要るんじゃないかと思いますが、他にも怪しい部分がたくさんあります。--;;
Index: rubyext.c
===================================================================
RCS file: /src/ruby/ext/syck/rubyext.c,v
retrieving revision 1.54
diff -u -r1.54 rubyext.c
--- rubyext.c 1 Nov 2005 13:04:33 -0000 1.54
+++ rubyext.c 30 Nov 2005 11:56:34 -0000
@@ -718,6 +718,7 @@
bonus = (struct parser_xtra *)parser->bonus;
rb_gc_mark( bonus->data );
rb_gc_mark( bonus->proc );
+ rb_gc_mark( bonus->resolver );
}
}
@@ -1946,6 +1947,7 @@
if ( emitter->bonus != NULL )
{
bonus = (struct emitter_xtra *)emitter->bonus;
+ rb_gc_mark( bonus->oid );
rb_gc_mark( bonus->data );
rb_gc_mark( bonus->port );
}
Date: November 30, 2005
From: keiju@xxxxxxxxxxxxx (石塚圭樹)
In-reply-to:
Yukihiro Matsumoto message of Wed, 30 Nov 2005 13:42:11 JST <1133325726.977113.18281.nullmailer@xxxxxxxxxxxxxxxxxx>
References:
<1133325726.977113.18281.nullmailer@xxxxxxxxxxxxxxxxxx>
けいじゅ@いしつかです.
In [ruby-dev:27885] the message: "[ruby-dev:27885] Re: Numeric と
Complex", on Nov/30 13:42(JST) Yukihiro Matsumoto writes:
>それに、たとえば両端が文字列だったりした場合にはeach以外の動
>作はあまりよろしくないと思います。eachで辞書順の文字列を生成
>しないので。
すると, 逆に言えば:
sを文字列として
(1) "a" <= s and s <= "z"
と
(2) Range("a", "z").include?(s)
は同じではないんですね?
これって, 非常にわかりづらいですねぇ...
case s
when "a".."z"
は(1)の動作を期待する人が続出しそうですが?
__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju@xxxxxxxxxxxxx <<---
Date: November 30, 2005
From: keiju@xxxxxxxxxxxxx
In-reply-to:
Shin-ichiro HARA message of Wed, 30 Nov 2005 12:12:09 JST <6.2.3.4.2.20051130105035.03113450@localhost
>
References:
<6.2.3.4.2.20051130105035.03113450@localhost
>
けいじゅ@いしつかです. In [ruby-dev:27882] the message: "[ruby-dev:27882] Re: Numeric と Complex", on Nov/30 12:12(JST) Shin-ichiro HARA writes: >原です。 >>Complex#<=>を削除というかundefしちゃうというのもあると思いますが? >もう一つの提案です。クラスの構造はそのままで、 > Complex(a, b) <= Complex(c, d) >を > a <= c && b <= d >と同値になるようにしてしまう、というのはどうでしょう。 >これだと実軸と虚軸の大小関係とコンパチになるので。 > >そうすると、 > > Complex(a, b) .. Complex(c, d) > >は、両端を対角線にもつ矩形と解釈することになります。 それは, わたしも考えました. ですが, それほど明確と言うわけではないというか, そもそもComplexには大 小関係はないと中学校から教わっている(?)ので, 無理して定義することはな いのではないでしょうか? それに, よく考えると上記定義は, true, false, nil(比較不能) になります. Complex#<=>は定義しないで, Complex#include_region?(complex) のようなものを定義するのは意味があるとは思います(名前がちょっとですが). __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@xxxxxxxxxxxxx <<---
Date: November 30, 2005
From: nobuyoshi nakada <nobuyoshi.nakada@xxxxxx>
In-reply-to:
<1133341447.255952.23990.nullmailer@xxxxxxxxxxxxxxxxxx>
References:
<TYOMLEM041XvpFVjCRG00000045@xxxxxxxxxxxxxxxxxxxxxxxx> <1133341447.255952.23990.nullmailer@xxxxxxxxxxxxxxxxxx>
なかだです。
At Wed, 30 Nov 2005 18:04:11 +0900,
Yukihiro Matsumoto wrote in [ruby-dev:27891]:
> protectedに抜け道がないから欲しいというのではあれば分からな
> いでもないですが...。それってfuncallで呼べるようにすればよい
> のかっていうとよくわかんないです。
抜け道がほしいというか、少なくとも今のrb_call()でのprotectedに
対するチェックはrb_funcall2()に関しては不適切ではないかと思うの
ですが。Cレベルで別のオブジェクトのコンテキストで評価していても、
ruby_frameに反映されるわけではないので。
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦
Date: November 30, 2005
From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx>
In-reply-to:
<TYOMLEM041XvpFVjCRG00000045@xxxxxxxxxxxxxxxxxxxxxxxx>
References:
<TYOMLEM041XvpFVjCRG00000045@xxxxxxxxxxxxxxxxxxxxxxxx>
まつもと ゆきひろです
In message "Re: [ruby-dev:27890] rb_funcall2() for protected method"
on Wed, 30 Nov 2005 17:18:16 +0900, nobuyoshi nakada
<nobuyoshi.nakada@xxxxxx> writes:
|rb_funcall2()を使うとprivate methodも呼べるのに、protected
|methodは呼べないというのは、ちょっとヘンな感じがします。
そうですか?
C++と違ってprivateとprotectedはそれぞれ別のもので段階的に制
約が厳しくなっているわけではないので、こんなものじゃないかと
思います。
public: デフォルト、制限ナシ
private: 関数スタイルでしか呼べない
funcallやinstance_evalを抜け道にできる
protected: selfがメソッドを定義しているクラスのサブクラス
でなければならない。抜け道ナシ
protectedに抜け道がないから欲しいというのではあれば分からな
いでもないですが...。それってfuncallで呼べるようにすればよい
のかっていうとよくわかんないです。
まつもと ゆきひろ /:|)
Date: November 30, 2005
From: nobuyoshi nakada <nobuyoshi.nakada@xxxxxx>
なかだです。
rb_funcall2()を使うとprivate methodも呼べるのに、protected
methodは呼べないというのは、ちょっとヘンな感じがします。
Index: eval.c
===================================================================
RCS file: /cvs/ruby/src/ruby/eval.c,v
retrieving revision 1.846
diff -U2 -p -u -r1.846 eval.c
--- eval.c 11 Nov 2005 17:11:05 -0000 1.846
+++ eval.c 30 Nov 2005 08:03:26 -0000
@@ -5769,11 +5769,11 @@ rb_call(VALUE klass, VALUE recv, ID mid,
}
- if (mid != missing) {
+ if (mid != missing && scope == 0) {
/* receiver specified form for private method */
- if ((noex & NOEX_PRIVATE) && scope == 0)
+ if (noex & NOEX_PRIVATE)
return method_missing(recv, mid, argc, argv, CSTAT_PRIV);
/* self must be kind of a specified form for protected method */
- if ((noex & NOEX_PROTECTED)) {
+ if (noex & NOEX_PROTECTED) {
VALUE defined_class = klass;
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦
Date: November 30, 2005
From: "URABE Shyouhei aka. mput" <root@xxxxxxxxxxx>
In-reply-to:
<1133311469.727960.13646.nullmailer@xxxxxxxxxxxxxxxxxx>
References:
<1133311469.727960.13646.nullmailer@xxxxxxxxxxxxxxxxxx>
卜部です。 Yukihiro Matsumoto wrote: >数学的にはともかく、一般人の感覚としてはInteger のスーパーク >ラスの名前としてのRealはあんまり嬉しくないですねえ(コンピュー >タ業界ではRealはFloatの別名として使われることがあまりに多い >から)。 > > そうですかねぇ、32bit整数とIEEEな浮動小数という一般的なCの環境では、int の変数はすべての情報を失うことなくdoubleにキャストできる(けど逆は情報の 欠損が起こる)わけで、intがdoubleの部分集合であるという主張がもしあるとし たら、私はあまり違和感は感じません。 # じゃあ集合と型がどう違うの?というのは哲学的問題を含んでそうですが。
Date: November 30, 2005
From: Shin-ichiro HARA <sinara@xxxxxxxxxxxxxxxxxxxxx>
In-reply-to:
<1133325726.977113.18281.nullmailer@xxxxxxxxxxxxxxxxxx>
References:
<6.2.3.4.2.20051130105620.03cba330@localhost
> <1133325726.977113.18281.nullmailer@xxxxxxxxxxxxxxxxxx>
References:
<6.2.3.4.2.20051130105620.03cba330@localhost
> <1133325726.977113.18281.nullmailer@xxxxxxxxxxxxxxxxxx>
原です。 >まつもと ゆきひろです >|私はRangeの本質はinclude?であって、eachはオマケというイメージ >|があります。include?をeachで定義するのはちょっと違和感がありま >|す。 > >基本的にEnumerableの機能を提供するRangeは範囲というよ >りもその範囲内の値の集合を代表するオブジェクトしての性質が強 >く、「include?が本質」とは言えないと思います。 そうでしたか。私がちょっとズレてたんだなあ。 >| Range(配列, 配列) >| >|も不等号で定義せざるを得ないですよね? > >えーと、そんな使い方してたんですか? それは予想外だ。 あり得ると思っていただけで、実際には使ったことはないのです。 (^^;
Date: November 30, 2005
From: Shin-ichiro HARA <sinara@xxxxxxxxxxxxxxxxxxxxx>
In-reply-to:
<87veyaagz2.wl%zn@xxxxxxxxxxxxx>
References:
<1133275062.257057.7124.nullmailer@xxxxxxxxxxxxxxxxxx> <E1Eh88Q-0005j1-00@emperor
> <6.2.3.4.2.20051130105035.03113450@localhost
> <87veyaagz2.wl%zn@xxxxxxxxxxxxx>
References:
<1133275062.257057.7124.nullmailer@xxxxxxxxxxxxxxxxxx> <E1Eh88Q-0005j1-00@emperor
> <6.2.3.4.2.20051130105035.03113450@localhost
> <87veyaagz2.wl%zn@xxxxxxxxxxxxx>
原です。 >西山和広です。 >> Complex(a, b) <= Complex(c, d) >> >> を >> >> a <= c && b <= d >> >> と同値になるようにしてしまう、というのはどうでしょう。 >> これだと実軸と虚軸の大小関係とコンパチになるので。 > >その案だと >Complex(1, 2) <= Complex(2, 1) >と >Complex(2, 1) <= Complex(1, 2) >の両方がfalseになるのは良いのでしょうか? そうですね。「x >= y または x <= y のどちらかが成り立つ」 は言えないことになります。 本当は x >= y も x <= y も成り立たない場合は false で なくて nil にしたいところなんですが。
Date: November 30, 2005
From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx>
In-reply-to:
<438C0720.70006@xxxxxxxxxxx>
References:
<438C0720.70006@xxxxxxxxxxx>
まつもと ゆきひろです
In message "Re: [ruby-dev:27868] ruby-mode.el indentation bug in rescue-else"
on Tue, 29 Nov 2005 16:45:55 +0900, "URABE Shyouhei aka. mput"
<root@xxxxxxxxxxx> writes:
|卜部です。 CVS trunk の ruby-mode.el で話題(?)の "rescue に対する else" を使おうとして
|
|def foo
| bar
|rescue
| raise $! if $DEBUG
| else # ここね
| $stderr.puts 'ok' if $DEBUG
| end
|
|とかしてしまうと、 if 修飾子が else で連続していると思われるのか、 else
|以降の行のインデントが深くなってしまいます。
以下のパッチで直るのではないかと思います。確認してくださいま
せんか。
--- misc/ruby-mode.el 24 Sep 2005 16:47:07 -0000 1.94
+++ misc/ruby-mode.el 30 Nov 2005 04:42:48 -0000
@@ -320,3 +320,3 @@ The variable ruby-indent-level controls
(bolp)
- (save-excursion (forward-char -1) (looking-at "\\Sw"))))
+ (save-excursion (forward-char -1) (looking-at "\\Sw$"))))
(and (looking-at ruby-symbol-re)
Date: November 30, 2005
From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx>
In-reply-to:
<6.2.3.4.2.20051130105620.03cba330@localhost
>
References:
<6.2.3.4.2.20051130105620.03cba330@localhost
>
まつもと ゆきひろです
In message "Re: [ruby-dev:27883] Re: Numeric とComplex"
on Wed, 30 Nov 2005 12:16:10 +0900, Shin-ichiro HARA
<sinara@xxxxxxxxxxxxxxxxxxxxx> writes:
|>|Rangeって, Stringとかも要素になり得ると思いますが?
|>
|>これらはeachを使ってチェックします。今回対象にしたいのは(リ
|>ニアな)数だけです。
|
|私が何か勘違いしているような気もするのですが、Rangeがincludeし
|ているEnumerableのeachを使う、という意味でしょうか。
はい。
|私はRangeの本質はinclude?であって、eachはオマケというイメージ
|があります。include?をeachで定義するのはちょっと違和感がありま
|す。
基本的にEnumerableの機能を提供するRangeは範囲というよ
りもその範囲内の値の集合を代表するオブジェクトしての性質が強
く、「include?が本質」とは言えないと思います。
それに、たとえば両端が文字列だったりした場合にはeach以外の動
作はあまりよろしくないと思います。eachで辞書順の文字列を生成
しないので。
ただ、数値に対しては今まで通り動作は変わりませんから、原さん
の困る事態はあまり発生しないのではないかと思います。
|それから、
|
| Rage(配列, 配列)
|
|も不等号で定義せざるを得ないですよね?
えーと、そんな使い方してたんですか? それは予想外だ。
まつもと ゆきひろ /:|)
Date: November 30, 2005
From: Kazuhiro NISHIYAMA <zn@xxxxxxxxxxxxx>
In-reply-to:
<6.2.3.4.2.20051130105035.03113450@localhost
>
References:
<1133275062.257057.7124.nullmailer@xxxxxxxxxxxxxxxxxx> <E1Eh88Q-0005j1-00@emperor
> <6.2.3.4.2.20051130105035.03113450@localhost
>
西山和広です。 >>> Wed, 30 Nov 2005 12:12:09 +0900 の刻に >>> sinara@xxxxxxxxxxxxxxxxxxxxx(Shin-ichiro HARA) 氏曰く > > >Complex#<=>を削除というかundefしちゃうというのもあると思いますが? > > もう一つの提案です。クラスの構造はそのままで、 > > Complex(a, b) <= Complex(c, d) > > を > > a <= c && b <= d > > と同値になるようにしてしまう、というのはどうでしょう。 > これだと実軸と虚軸の大小関係とコンパチになるので。 その案だと Complex(1, 2) <= Complex(2, 1) と Complex(2, 1) <= Complex(1, 2) の両方がfalseになるのは良いのでしょうか? -- |ZnZ(ゼット エヌ ゼット) |西山和広(Kazuhiro NISHIYAMA)
Date: November 30, 2005
From: Shin-ichiro HARA <sinara@xxxxxxxxxxxxxxxxxxxxx>
In-reply-to:
<1133275062.257057.7124.nullmailer@xxxxxxxxxxxxxxxxxx>
References:
<E1Eh4MQ-0004hB-00@emperor
> <1133275062.257057.7124.nullmailer@xxxxxxxxxxxxxxxxxx>
References:
<E1Eh4MQ-0004hB-00@emperor
> <1133275062.257057.7124.nullmailer@xxxxxxxxxxxxxxxxxx>
原です。 >まつもと ゆきひろです >|Rangeって, Stringとかも要素になり得ると思いますが? > >これらはeachを使ってチェックします。今回対象にしたいのは(リ >ニアな)数だけです。 私が何か勘違いしているような気もするのですが、Rangeがincludeし ているEnumerableのeachを使う、という意味でしょうか。 私はRangeの本質はinclude?であって、eachはオマケというイメージ があります。include?をeachで定義するのはちょっと違和感がありま す。 それから、 Rage(配列, 配列) も不等号で定義せざるを得ないですよね?
Date: November 30, 2005
From: Shin-ichiro HARA <sinara@xxxxxxxxxxxxxxxxxxxxx>
In-reply-to:
<E1Eh88Q-0005j1-00@emperor
>
References:
<1133275062.257057.7124.nullmailer@xxxxxxxxxxxxxxxxxx> <E1Eh88Q-0005j1-00@emperor
>
References:
<1133275062.257057.7124.nullmailer@xxxxxxxxxxxxxxxxxx> <E1Eh88Q-0005j1-00@emperor
>
原です。 >けいじゅ@いしつかです. >Complex#<=>を削除というかundefしちゃうというのもあると思いますが? もう一つの提案です。クラスの構造はそのままで、 Complex(a, b) <= Complex(c, d) を a <= c && b <= d と同値になるようにしてしまう、というのはどうでしょう。 これだと実軸と虚軸の大小関係とコンパチになるので。 そうすると、 Complex(a, b) .. Complex(c, d) は、両端を対角線にもつ矩形と解釈することになります。
Date: November 30, 2005
From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx>
In-reply-to:
<E1Eh88Q-0005j1-00@emperor
>
References:
<E1Eh88Q-0005j1-00@emperor
>
まつもと ゆきひろです
In message "Re: [ruby-dev:27875] Re: Numeric と Complex"
on Wed, 30 Nov 2005 01:15:46 +0900, keiju@xxxxxxxxxxxxx (石塚圭樹) writes:
|>具体的にはRange#include?で数についてはチェックに大小比較を用
|>いたい(それ以外のオブジェクトはeachを使ってチェックする)とい
|>うことです。
|
|現行はどっちも大小比較していますよね? それを変えるということ?
|わざわざ, Numeric以外をeachにするうれしさがわかりませんが?
Range#eachはsuccをベースに実装されているのでかならずしも大小
関係が成立するとは限らないからです。具体的にはStringを両端と
する場合、大小比較だけでは不十分です。
|上の回答次第なのかもしれませんが,
|
|Complex#<=>を削除というかundefしちゃうというのもあると思いますが?
|
|そうすれば, Complex要素の時にはエラーが返る.
それはそれで納得できます。というか、他の対応とは独立にこれは
やってもよさそうです。1.9でやっといてもいいですか?
Date: November 30, 2005
From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx>
In-reply-to:
<20051130.033250.74743703.masahiro.tanaka@xxxxxxxxx>
References:
<20051130.033250.74743703.masahiro.tanaka@xxxxxxxxx>
まつもと ゆきひろです
In message "Re: [ruby-dev:27877] Re: Numeric と Complex"
on Wed, 30 Nov 2005 03:32:08 +0900, Masahiro TANAKA <masa@xxxxxxxxxxxxx>
writes:
|Rangeを範囲とみなすときに不便と思うのは、
|
| * 半開区間を自然に定義できない (あえてやるとすれば 0..1.0/0.0)
| * 区間の始まりを含まない区間を定義できない (1<x<3 とか)
|
|ということですが、将来的にこういうことができるようには
|ならないでしょうか?
どういう仕様が良いのか決まればできるようになるかもしれません。
が、今のRangeはEnumerableとしての性質が強いので、別のクラス
を用意した方が良いかもしれません。
Date: November 30, 2005
From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx>
In-reply-to:
<56838ac20511290856h6caf1021j@xxxxxxxxxxxxxx>
References:
<56838ac20511290856h6caf1021j@xxxxxxxxxxxxxx>
まつもと ゆきひろです
In message "Re: [ruby-dev:27876] Re: Numeric と Complex"
on Wed, 30 Nov 2005 01:56:57 +0900, GOTO Kentaro <gotoken@xxxxxxxxx> writes:
|> Complex#<=>を削除というかundefしちゃうというのもあると思いますが?
|>
|> そうすれば, Complex要素の時にはエラーが返る.
|
|これが一番わかりやすいと思います。
ふむ。
|どっちかというと Complex を組み込みにして、Python のように
|リテラルも用意して、さらに抽象クラス Real を用意して、
| Numeric > Complex
| Complex > Real
| Comparable > Real
| Real > Integer
| Real > Float
|とする手もあるかと。
数学的にはともかく、一般人の感覚としてはInteger のスーパーク
ラスの名前としてのRealはあんまり嬉しくないですねえ(コンピュー
タ業界ではRealはFloatの別名として使われることがあまりに多い
から)。
Date: November 30, 2005
From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx>
In-reply-to:
<438C7476.3070603@xxxxxxxxxxx>
References:
<438C7476.3070603@xxxxxxxxxxx>
まつもと ゆきひろです
In message "Re: [ruby-dev:27874] Re: 1.8.4 preview2?"
on Wed, 30 Nov 2005 00:32:41 +0900, "URABE Shyouhei aka. mput"
<root@xxxxxxxxxxx> writes:
|>>25日か28日かどちらかに出しましょう。
|>>
|>どうなってますか?
|>
|どうなってますか?
|とりあえず純粋に予定を知りたいだけなのですけれど。
えーと、今晩、かな。だれか代わりにパックしてくれてもいいんですけど。
Date: November 29, 2005
From: Masahiro TANAKA <masa@xxxxxxxxxxxxx>
In-reply-to:
<1133254770.210232.1483.nullmailer@xxxxxxxxxxxxxxxxxx>
References:
<1133254770.210232.1483.nullmailer@xxxxxxxxxxxxxxxxxx>
|Subject: [ruby-dev:27871] Numeric と Complex |From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx> > * NumericのӠ