$B%o%J%Y$H?=$7$^$9!#(B
fork() $B$N$J$$4D6-$G$O(B exec $B7OE}$N%a%=%C%I$O(B redirect_fds
$B$rL5;k$9$k$?$a(B
test_process.rb $B$N(B test_argv0_noarg
$B$G%F%9%H$,?J$^$J$/$J$j$^$9!#(B
$B$3$N$h$&$J4D6-$G$O%F%9%H$r%9%-%C%W$7$?J}$,$h$$$N$G$O$J$$$+$H;W$$$^$9!#(B
# $B$b$A$m$s!"%j%@%$%l%/%H$G$-$k$J$i$=$l$,0lHV$$$$$N$G$9$,!#(B
Index: test/ruby/test_process.rb
===================================================================
--- test/ruby/test_process.rb (revision 16344)
+++ test/ruby/test_process.rb (working copy)
@@ -800,6 +800,7 @@
end
def test_argv0_noarg
+ return unless respond?(:fork)
with_tmpchdir {|d|
open("t", "w") {|f| f.print "exit true" }
open("f", "w") {|f| f.print "exit false" }
on 11.05.2008 08:14
on 13.05.2008 03:00
$B$^$D$b$H(B $B$f$-$R$m$G$9(B
In message "Re: [ruby-dev:34647] fork $BIT2DG=$J4D6-$G$N(B
test_argv0_noarg"
on Sun, 11 May 2008 15:13:11 +0900, wanabe <s.wanabe@gmail.com>
writes:
|fork() $B$N$J$$4D6-$G$O(B exec $B7OE}$N%a%=%C%I$O(B redirect_fds $B$rL5;k$9$k$?$a(B
|test_process.rb $B$N(B test_argv0_noarg $B$G%F%9%H$,?J$^$J$/$J$j$^$9!#(B
|$B$3$N$h$&$J4D6-$G$O%F%9%H$r%9%-%C%W$7$?J}$,$h$$$N$G$O$J$$$+$H;W$$$^$9!#(B
|
|# $B$b$A$m$s!"%j%@%$%l%/%H$G$-$k$J$i$=$l$,0lHV$$$$$N$G$9$,!#(B
$B$^$"!"$=$&$J$s$G$9$,!#$=$N%A%'%C%/$O(Brespond?(:fork)$B$G$O$h$/(B
$B$J$$$s$G$O$J$$$G$7$g$&$+!#(Bfork$B$O$$$D$bDj5A$5$l$F$$$k$h$&$K;W(B
$B$$$^$9!#(B
on 14.05.2008 05:37
$B$3$s$K$A$O!"$J$+$`$i(B($B$&(B)$B$G$9!#(B
In message "[ruby-dev:34667] Re: fork $BIT2DG=$J4D6-$G$N(B
test_argv0_noarg"
on May.13,2008 09:58:07, <matz@ruby-lang.org> wrote:
> |fork() $B$N$J$$4D6-$G$O(B exec $B7OE}$N%a%=%C%I$O(B redirect_fds $B$rL5;k$9$k$?$a(B
> |test_process.rb $B$N(B test_argv0_noarg $B$G%F%9%H$,?J$^$J$/$J$j$^$9!#(B
> |$B$3$N$h$&$J4D6-$G$O%F%9%H$r%9%-%C%W$7$?J}$,$h$$$N$G$O$J$$$+$H;W$$$^$9!#(B
> |
> |# $B$b$A$m$s!"%j%@%$%l%/%H$G$-$k$J$i$=$l$,0lHV$$$$$N$G$9$,!#(B
>
> $B$^$"!"$=$&$J$s$G$9$,!#$=$N%A%'%C%/$O(Brespond?(:fork)$B$G$O$h$/(B
> $B$J$$$s$G$O$J$$$G$7$g$&$+!#(Bfork$B$O$$$D$bDj5A$5$l$F$$$k$h$&$K;W(B
> $B$$$^$9!#(B
$B%F%9%H$b85!9$NLdBj$b4{$K2r7h:Q$_(B($B$?$V$s(B)$B$J$N$G$=$l$O$$$$$s$G(B
$B$9$,!"(Bfork$B$,(Brespond_to?$B$GH=CG$G$-$J$$$N$OITJX$J$N$G!"(B1.9$B$G$O(B
fork$B$,(BNotImplementedError$B$K$J$k%W%i%C%H%U%)!<%`$G$O(Bfork$B<+BN$r(B
$B>C$=$&$+$H;W$&$s$G$9$,!"$I$&$G$7$g$&$+(B?
($BB>$NN`;w$N%a%=%C%I$bF1MM(B)
$B$=$l$G$O!#(B
on 14.05.2008 11:34
$B$^$D$b$H(B $B$f$-$R$m$G$9(B
In message "Re: [ruby-dev:34684] Re: fork $BIT2DG=$J4D6-$G$N(B
test_argv0_noarg"
on Wed, 14 May 2008 12:37:01 +0900, "U.Nakamura"
<usa@garbagecollect.jp> writes:
|$B%F%9%H$b85!9$NLdBj$b4{$K2r7h:Q$_(B($B$?$V$s(B)$B$J$N$G$=$l$O$$$$$s$G(B
|$B$9$,!"(Bfork$B$,(Brespond_to?$B$GH=CG$G$-$J$$$N$OITJX$J$N$G!"(B1.9$B$G$O(B
|fork$B$,(BNotImplementedError$B$K$J$k%W%i%C%H%U%)!<%`$G$O(Bfork$B<+BN$r(B
|$B>C$=$&$+$H;W$&$s$G$9$,!"$I$&$G$7$g$&$+(B?
|($BB>$NN`;w$N%a%=%C%I$bF1MM(B)
NotImplementedError$B$O$J$/$7$F!"%a%=%C%I$r:o$m$&$H$$$&J}?K$G$9(B
$B$+!)(B
$B$^$"!"(Brespond_to?$B$GH=CG$G$-$k$N$OL@$i$+$J%a%j%C%H$J$N$G!"(B
$B$`$2$KH?BP$O$7$^$;$s$,!#I8=`$N%a%=%C%I$,%W%i%C%H%U%)!<%`$4$H(B
$B$K$"$C$?$j$J$+$C$?$j$9$k$N$K$b<c43Dq93$,$"$k$N$G$9$,!#$^$"!"(B
$B$b$H$b$HDs6!$7$F$$$J$$(B($B$G$-$J$$(B)$B%W%i%C%H%U%)!<%`$,$"$k5!G=$,(B
$BI8=`$K$"$k$H$$$&;~E@$G$7$g$&$,$J$$$s$G$7$g$&$,!#(B
on 14.05.2008 11:41
In article <E1JwDMS-0005A1-FF@x61.netlab.jp>, Yukihiro Matsumoto <matz@ruby-lang.org> writes: > NotImplementedError$B$O$J$/$7$F!"%a%=%C%I$r:o$m$&$H$$$&J}?K$G$9(B > $B$+!)(B $B$^$"!"(Brespond_to?$B$GH=CG$G$-$k$N$OL@$i$+$J%a%j%C%H$J$N$G!"(B > $B$`$2$KH?BP$O$7$^$;$s$,!#I8=`$N%a%=%C%I$,%W%i%C%H%U%)!<%`$4$H(B > $B$K$"$C$?$j$J$+$C$?$j$9$k$N$K$b<c43Dq93$,$"$k$N$G$9$,!#$^$"!"(B > $B$b$H$b$HDs6!$7$F$$$J$$(B($B$G$-$J$$(B)$B%W%i%C%H%U%)!<%`$,$"$k5!G=$,(B > $BI8=`$K$"$k$H$$$&;~E@$G$7$g$&$,$J$$$s$G$7$g$&$,!#(B $B<B9T$9$k$H(B NotImplementedError $B$K$J$j!"(Brespond_to? $B$GD4$Y$k(B $B$H56$K$J$kFC<l$J%a%=%C%I$rF3F~$9$k$N$O$I$&$G$9$+$M!#(B undef $B$_$?$$$J$+$s$8$G!#(B
on 14.05.2008 11:50
$B$3$s$K$A$O!"$J$+$`$i(B($B$&(B)$B$G$9!#(B
In message "[ruby-dev:34694] Re: fork $BIT2DG=$J4D6-$G$N(B
test_argv0_noarg"
on May.14,2008 18:33:22, <matz@ruby-lang.org> wrote:
> |$B%F%9%H$b85!9$NLdBj$b4{$K2r7h:Q$_(B($B$?$V$s(B)$B$J$N$G$=$l$O$$$$$s$G(B
> |$B$9$,!"(Bfork$B$,(Brespond_to?$B$GH=CG$G$-$J$$$N$OITJX$J$N$G!"(B1.9$B$G$O(B
> |fork$B$,(BNotImplementedError$B$K$J$k%W%i%C%H%U%)!<%`$G$O(Bfork$B<+BN$r(B
> |$B>C$=$&$+$H;W$&$s$G$9$,!"$I$&$G$7$g$&$+(B?
> |($BB>$NN`;w$N%a%=%C%I$bF1MM(B)
>
> NotImplementedError$B$O$J$/$7$F!"%a%=%C%I$r:o$m$&$H$$$&J}?K$G$9(B
> $B$+!)(B
$BJ}?K$H$7$F$O!"(Bruby$B$N%3%s%Q%$%k;~$KH=CG$G$-$k$b$N$K$D$$$F$O%a(B
$B%=%C%I<+BN$r:o=|!"<B9T;~$K$7$+H=CG$G$-$J$$$b$N$O=>Mh$I$*$j$K(B
NotImplementedError$B$H$$$&0BD>$JJ}8~$r9M$($F$$$^$9!#(B
> $B$^$"!"(Brespond_to?$B$GH=CG$G$-$k$N$OL@$i$+$J%a%j%C%H$J$N$G!"(B
> $B$`$2$KH?BP$O$7$^$;$s$,!#I8=`$N%a%=%C%I$,%W%i%C%H%U%)!<%`$4$H(B
> $B$K$"$C$?$j$J$+$C$?$j$9$k$N$K$b<c43Dq93$,$"$k$N$G$9$,!#$^$"!"(B
> $B$b$H$b$HDs6!$7$F$$$J$$(B($B$G$-$J$$(B)$B%W%i%C%H%U%)!<%`$,$"$k5!G=$,(B
> $BI8=`$K$"$k$H$$$&;~E@$G$7$g$&$,$J$$$s$G$7$g$&$,!#(B
$B%a%=%C%I$@$1$"$C$F$b@dBP<B9TIT2DG=$J$i0UL#$O$J$$$o$1$G!"$=$l(B
$B$J$i(Brespond_to?$B$GH=CG$G$-$k%a%j%C%H$NJ}$,>e$@$H;W$$$^$9!#(B
$BFC$K!"2?$i$+$N;v>p$G!"<B:]$K$=$N%a%=%C%I$r;HMQ$9$kA0$K!"K\Ev(B
$B$K;H$($k$+$I$&$+$rH=CG$7$?$$>l9g!"(Bfork$B$J$s$+$O;n$7$K<B9T$7$F(B
$B$*$$$F$_$k$N$O?4M}E*Dq93$,Bg$-$$$H;W$$$^$9!#(B
$B$=$N7k2L$H$7$F(BRUBY_PLATFORM$B$J$I$GH=CG$7$A$c$&$H$$$&7y$J%3!<%I(B
$B$,$O$S$3$C$F$$$^$9$7!"$=$NJU$r$J$s$H$+$7$?$$$H$$$&;W$$$,$"$j(B
$B$^$9!#(B
$B$=$l$G$O!#(B
on 14.05.2008 11:55
$B?\F#$G$9!#(B 2008/05/14 18:49 U.Nakamura <usa@garbagecollect.jp>: > $B%a%=%C%I$@$1$"$C$F$b@dBP<B9TIT2DG=$J$i0UL#$O$J$$$o$1$G!"$=$l(B > $B$J$i(Brespond_to?$B$GH=CG$G$-$k%a%j%C%H$NJ}$,>e$@$H;W$$$^$9!#(B > $BFC$K!"2?$i$+$N;v>p$G!"<B:]$K$=$N%a%=%C%I$r;HMQ$9$kA0$K!"K\Ev(B > $B$K;H$($k$+$I$&$+$rH=CG$7$?$$>l9g!"(Bfork$B$J$s$+$O;n$7$K<B9T$7$F(B > $B$*$$$F$_$k$N$O?4M}E*Dq93$,Bg$-$$$H;W$$$^$9!#(B > $B$=$N7k2L$H$7$F(BRUBY_PLATFORM$B$J$I$GH=CG$7$A$c$&$H$$$&7y$J%3!<%I(B > $B$,$O$S$3$C$F$$$^$9$7!"$=$NJU$r$J$s$H$+$7$?$$$H$$$&;W$$$,$"$j(B > $B$^$9!#(B respond_to?$B$GH=CG$9$k$h$j$b!"(Bforkable?$B$_$?$$$J%a%=%C%I$,$"$C$?J}$,(B $B8+1I$($,NI$/$F;d$O9%$-$G$9!#(B
on 14.05.2008 12:17
$B$3$s$K$A$O!"$J$+$`$i(B($B$&(B)$B$G$9!#(B
In message "[ruby-dev:34698] Re: fork $BIT2DG=$J4D6-$G$N(B
test_argv0_noarg"
on May.14,2008 18:54:24, <kou@cozmixng.org> wrote:
> $B8+1I$($,NI$/$F;d$O9%$-$G$9!#(B
fork$B0J30$O$3$&$G$9$+(B?
Dir.tellable?
Dir.seekable?
Dir.chrootable?
File.lchmodable?
File.lchownable?
File.linkable?
File.symlinkable?
File.readlinkable?
File.truncatable?
IO.fsyncable?
IO.close_on_execable?
IO.ioctlable?
IO.fcntlable?
syscallable?
IO.pipable?
forkable?
Process.getpgrpable?
Process.setpgrpable?
Process.getpgidable?
Process.setpgidable?
Process.setsidable?
Process.getprioritiable?
Process.setprioritiable?
Process.getrlimitable?
Process.setrlimitable?
Process.setuidable?
Process.setruidable?
Process.seteuidable?
Process.setreuidable?
Process.setresuidable?
Process::UID.change_privilegable?
Process::Sys.setgidable?
Process::Sys.setrgidable?
Process::Sys.setegidable?
Process::Sys.setregidable?
Process::Sys.setresgidable?
Process::Sys.issetugidable?
Process.setgidable?
Process.getgroupsable?
Process.setgroupsable?
Process.initgroupsable?
Process.daemonable?
Process::GID.change_privilegable?
Process.setegidable?
Process::UID.re_exchangable?
Process::GID.re_exchangable?
Process.timesable?
$B$b$A$m$s$3$l$O>iCL$G$9$1$I!"$"$j$($M!<$H;W$$$^$9!#(B
$B$=$l$G$O!#(B
on 14.05.2008 18:09
In article <87ve1hmde3.fsf@fsij.org>, Tanaka Akira <akr@fsij.org> writes: > $B<B9T$9$k$H(B NotImplementedError $B$K$J$j!"(Brespond_to? $B$GD4$Y$k(B > $B$H56$K$J$kFC<l$J%a%=%C%I$rF3F~$9$k$N$O$I$&$G$9$+$M!#(B > > undef $B$_$?$$$J$+$s$8$G!#(B $B<BAu$9$k$H$3$s$J46$8$G$7$g$&$+!#(B $B8D!9$N%a%=%C%I$K$D$$$F$O$H$j$"$($:(B fork $B$H(B File.lchmod $B$@$1(B $BBP=h$7$F$"$j$^$9!#(B GNU/Linux $B$K$O(B lchmod $B$,$J$$$N$G!"(BFile.respond_to?(:lchmod) $B$O(B false $B$K$J$j!"(BFile.lchmod $B$r8F$S=P$9$H(B NotImplementedError $B$K$J$j$^$9!#(B % ./ruby -ve ' p File.respond_to?(:lchmod) File.lchmod("foo", 0777)' ruby 1.9.0 (2008-05-14 revision 16419) [i686-linux] false -e:3:in `lchmod': lchmod() function is unimplemented on this machine (NotImplementedError) from -e:3:in `<main>' Index: include/ruby/intern.h =================================================================== --- include/ruby/intern.h (revision 16419) +++ include/ruby/intern.h (working copy) @@ -252,6 +252,7 @@ int rb_method_boundp(VALUE, ID, int); VALUE rb_eval_cmd(VALUE, VALUE, int); int rb_obj_respond_to(VALUE, ID, int); int rb_respond_to(VALUE, ID); +void rb_define_notimplement_method_id(VALUE mod, ID id, int noex); void rb_interrupt(void); VALUE rb_apply(VALUE, ID, VALUE); void rb_backtrace(void); Index: include/ruby/node.h =================================================================== --- include/ruby/node.h (revision 16419) +++ include/ruby/node.h (working copy) @@ -498,6 +498,8 @@ NODE *rb_node_newnode(enum node_type,VAL NODE* rb_method_node(VALUE klass, ID id); int rb_node_arity(NODE* node); +int rb_notimplement_body_p(NODE*); + struct global_entry *rb_global_entry(ID); VALUE rb_gvar_get(struct global_entry *); VALUE rb_gvar_set(struct global_entry *, VALUE); Index: proc.c =================================================================== --- proc.c (revision 16419) +++ proc.c (working copy) @@ -935,6 +935,15 @@ method_owner(VALUE obj) return data->oclass; } +static VALUE +method_notimplemented_p(VALUE obj) +{ + struct METHOD *data; + + Data_Get_Struct(obj, struct METHOD, data); + return rb_notimplement_body_p(data->body) ? Qtrue : Qfalse; +} + /* * call-seq: * obj.method(sym) => method @@ -1763,6 +1772,7 @@ Init_Proc(void) rb_define_method(rb_cMethod, "name", method_name, 0); rb_define_method(rb_cMethod, "owner", method_owner, 0); rb_define_method(rb_cMethod, "unbind", method_unbind, 0); + rb_define_method(rb_cMethod, "notimplemented?", method_notimplemented_p, 0); rb_define_method(rb_mKernel, "method", rb_obj_method, 1); rb_define_method(rb_mKernel, "public_method", rb_obj_public_method, 1); @@ -1780,6 +1790,7 @@ Init_Proc(void) rb_define_method(rb_cUnboundMethod, "name", method_name, 0); rb_define_method(rb_cUnboundMethod, "owner", method_owner, 0); rb_define_method(rb_cUnboundMethod, "bind", umethod_bind, 1); + rb_define_method(rb_cUnboundMethod, "notimplemented?", method_notimplemented_p, 0); /* Module#*_method */ rb_define_method(rb_cModule, "instance_method", rb_mod_instance_method, 1); Index: class.c =================================================================== --- class.c (revision 16419) +++ class.c (working copy) @@ -759,25 +759,40 @@ rb_obj_singleton_methods(int argc, VALUE void rb_define_method_id(VALUE klass, ID name, VALUE (*func)(ANYARGS), int argc) { - rb_add_method(klass, name, NEW_CFUNC(func,argc), NOEX_PUBLIC); + if (func) + rb_add_method(klass, name, NEW_CFUNC(func,argc), NOEX_PUBLIC); + else + rb_define_notimplement_method_id(klass, name, NOEX_PUBLIC); } void rb_define_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc) { - rb_add_method(klass, rb_intern(name), NEW_CFUNC(func, argc), NOEX_PUBLIC); + ID id = rb_intern(name); + if (func) + rb_add_method(klass, id, NEW_CFUNC(func, argc), NOEX_PUBLIC); + else + rb_define_notimplement_method_id(klass, id, NOEX_PUBLIC); } void rb_define_protected_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc) { - rb_add_method(klass, rb_intern(name), NEW_CFUNC(func, argc), NOEX_PROTECTED); + ID id = rb_intern(name); + if (func) + rb_add_method(klass, id, NEW_CFUNC(func, argc), NOEX_PROTECTED); + else + rb_define_notimplement_method_id(klass, id, NOEX_PROTECTED); } void rb_define_private_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc) { - rb_add_method(klass, rb_intern(name), NEW_CFUNC(func, argc), NOEX_PRIVATE); + ID id = rb_intern(name); + if (func) + rb_add_method(klass, id, NEW_CFUNC(func, argc), NOEX_PRIVATE); + else + rb_define_notimplement_method_id(klass, id, NOEX_PRIVATE); } void Index: process.c =================================================================== --- process.c (revision 16419) +++ process.c (working copy) @@ -2394,10 +2394,10 @@ rb_fork(int *status, int (*chfunc)(void* * fork doesn't copy other threads. */ +#if defined(HAVE_FORK) && !defined(__NetBSD__) static VALUE rb_f_fork(VALUE obj) { -#if defined(HAVE_FORK) && !defined(__NetBSD__) rb_pid_t pid; rb_secure(2); @@ -2423,11 +2423,10 @@ rb_f_fork(VALUE obj) default: return PIDT2NUM(pid); } +} #else - rb_notimplement(); +#define rb_f_fork 0 #endif -} - /* * call-seq: Index: eval_method.c =================================================================== --- eval_method.c (revision 16419) +++ eval_method.c (working copy) @@ -18,6 +18,8 @@ struct cache_entry { /* method hash tab static struct cache_entry cache[CACHE_SIZE]; static int ruby_running = 0; +static NODE *notimplement_body = 0; + void rb_clear_cache(void) { @@ -403,6 +405,12 @@ rb_export_method(VALUE klass, ID name, I } int +rb_notimplement_body_p(NODE *method) +{ + return method == notimplement_body ? Qtrue : Qfalse; +} + +int rb_method_boundp(VALUE klass, ID id, int ex) { NODE *method; @@ -411,6 +419,8 @@ rb_method_boundp(VALUE klass, ID id, int if (ex && (method->nd_noex & NOEX_PRIVATE)) { return Qfalse; } + if (rb_notimplement_body_p(method->nd_body)) + return Qfalse; return Qtrue; } return Qfalse; @@ -645,10 +655,49 @@ rb_mod_alias_method(VALUE mod, VALUE new return mod; } +static VALUE +notimplement_cfunc(VALUE obj) +{ + rb_notimplement(); +} + +void +rb_define_notimplement_method_id(VALUE mod, ID id, int noex) +{ + rb_add_method(mod, id, notimplement_body, noex); +} + +static VALUE +rb_mod_notimplemented_method(int argc, VALUE *argv, VALUE mod) +{ + int i; + if (ruby_cbase() == rb_cObject && mod == rb_cObject) { + rb_secure(4); + } + + for (i = 0; i < argc; i++) { + ID id = rb_to_id(argv[i]); + + if (rb_safe_level() >= 4 && !OBJ_TAINTED(mod)) { + rb_raise(rb_eSecurityError, "Insecure: can't undef `%s'", + rb_id2name(id)); + } + rb_frozen_class_p(mod); + if (id == object_id || id == __send__ || id == init) { + rb_warn("notimplementing `%s' may cause serious problem", rb_id2name(id)); + } + rb_define_notimplement_method_id(mod, id, NOEX_PUBLIC); + } + return mod; +} + static void Init_eval_method(void) { rb_define_private_method(rb_cModule, "remove_method", rb_mod_remove_method, -1); rb_define_private_method(rb_cModule, "undef_method", rb_mod_undef_method, -1); rb_define_private_method(rb_cModule, "alias_method", rb_mod_alias_method, 2); + rb_global_variable(¬implement_body); + notimplement_body = NEW_CFUNC(notimplement_cfunc, -1); + rb_define_private_method(rb_cModule, "notimplemented_method", rb_mod_notimplemented_method, -1); } Index: file.c =================================================================== --- file.c (revision 16419) +++ file.c (working copy) @@ -1901,12 +1901,7 @@ rb_file_s_lchmod(int argc, VALUE *argv) return LONG2FIX(n); } #else -static VALUE -rb_file_s_lchmod(int argc, VALUE *argv) -{ - rb_notimplement(); - return Qnil; /* not reached */ -} +#define rb_file_s_lchmod 0 #endif struct chown_args { Index: test/ruby/test_notimp.rb =================================================================== --- test/ruby/test_notimp.rb (revision 0) +++ test/ruby/test_notimp.rb (revision 0) @@ -0,0 +1,33 @@ +require 'test/unit' + +class TestNotImplement < Test::Unit::TestCase + class C + notimplemented_method :n + def x() end + end + + def test_respond_to + assert_equal(false, C.new.respond_to?(:n)) + assert_equal(true, C.new.respond_to?(:x)) + end + + def test_call + assert_raise(NotImplementedError) { C.new.n } + assert_nothing_raised { C.new.x } + end + + def test_method + m = C.new.method(:n) + assert(m.notimplemented?) + m = C.new.method(:x) + assert(!m.notimplemented?) + end + + def test_umethod + m = C.instance_method(:n) + assert(m.notimplemented?) + m = C.instance_method(:x) + assert(!m.notimplemented?) + end + +end
on 15.05.2008 13:51
$B?\F#$G$9!#(B In <20080514190150.7956.C613B076@garbagecollect.jp> "[ruby-dev:34700] Re: fork $BIT2DG=$J4D6-$G$N(B test_argv0_noarg" on Wed, 14 May 2008 19:16:27 +0900, "U.Nakamura" <usa@garbagecollect.jp> wrote: > > respond_to?$B$GH=CG$9$k$h$j$b!"(Bforkable?$B$_$?$$$J%a%=%C%I$,$"$C$?J}$,(B > > $B8+1I$($,NI$/$F;d$O9%$-$G$9!#(B > > fork$B0J30$O$3$&$G$9$+(B? ... > $B$b$A$m$s$3$l$O>iCL$G$9$1$I!"$"$j$($M!<$H;W$$$^$9!#(B $B$I$&$7$F$"$j$($M!<$H;W$&$N$+$o$+$i$J$$$N$G$9$,!";d$O$J$s$G>i(B $BCL$J$s$@$m$&$H;W$$$^$7$?$7!"$"$j$($M!<$H$b;W$$$^$;$s$G$7$?!#(B $B?t$,B?$9$.$k$H$$$&$3$H$G$9$+!)$J$s$G$b(Bable$B$D$1$l$P$$$$$C$F$b(B $B$s$8$c$J$$$h$M!"$H$$$&$3$H$G$9$+!)(B $BA0$N%a!<%k$K$O=q$$$F$$$J$+$C$?$N$G=q$$$F$*$/$H!";d$O$J$+$`$i(B $B$5$s$N0F$K$O;?@.$7$F$$$^$9!#$=$N>e$G$5$i$K(Bfork$B$G$-$k$+$I$&$+(B $B$rH=CG$G$-$k%a%=%C%I$,$"$l$P4r$7$$$H;W$C$F$$$^$9!#(B respond_to?$B$@$H4V0c$C$F0z?t$K(B:folk$B$H$+=q$$$F$b$J$+$J$+5$$E$+(B $B$J$$$N$G$9$,!"(Bfolkable?$B$_$?$$$K=q$$$F$7$^$&$HNc30$,$"$,$k$N(B $B$G5$$E$-$d$9$$!"$H$$$&$N$b@lMQ%a%=%C%I$,$"$k$H4r$7$$M}M3$N(B1 $B$D$G$9!#!JFC$K;d$O(Btypo$B$,B?$$$N$G!K(B $B$H$O$$$(!";d$N9%$_$O<u$1F~$l$i$lFq$$$b$N$,B?$$$h$&$J$N$G!"$"(B $B$^$j5$$K$7$J$/$F7k9=$G$9!#(Brespond_to?$B$G$b$=$&$$$&H=CG$G$-$kJ}(B $BK!$,$"$l$P<+J,$G@lMQ%a%=%C%I$r:n$C$F;H$($P$9$_$^$9$N$G!#(B
on 15.05.2008 14:18
$B$3$s$K$A$O!"$J$+$`$i(B($B$&(B)$B$G$9!#(B
In message "[ruby-dev:34718] Re: fork $BIT2DG=$J4D6-$G$N(B
test_argv0_noarg"
on May.15,2008 20:50:40, <kou@cozmixng.org> wrote:
> > $B$b$A$m$s$3$l$O>iCL$G$9$1$I!"$"$j$($M!<$H;W$$$^$9!#(B
>
> $B$I$&$7$F$"$j$($M!<$H;W$&$N$+$o$+$i$J$$$N$G$9$,!";d$O$J$s$G>i(B
> $BCL$J$s$@$m$&$H;W$$$^$7$?$7!"$"$j$($M!<$H$b;W$$$^$;$s$G$7$?!#(B
>
> $B?t$,B?$9$.$k$H$$$&$3$H$G$9$+!)$J$s$G$b(Bable$B$D$1$l$P$$$$$C$F$b(B
> $B$s$8$c$J$$$h$M!"$H$$$&$3$H$G$9$+!)(B
$BN>J}$G$9$M!#(B
$B$5$i$K8@$&$H!"@h$K$"$2$?$b$N0J30$N%a%=%C%I$NB8:_$b3NG'$7$?$/(B
$B$J$C$?$i!"$=$l$b(B -able? $B$G3NG'$9$k$s$G$7$g$&$+(B?
systemable? $B$H$+!"(BArray.countable? $B$H$+!#(B
$B$=$&$8$c$J$/$F!"$I$N%a%=%C%I$K$OBP1~$9$k(B -able? $B$,$"$C$F!"$I(B
$B$N%a%=%C%I$K$O(B -able? $B$,$J$$!"$H$$$&$3$H$rA4It3NG'$7$F%3!<%I(B
$B$r=q$/$s$G$7$g$&$+(B?
$B$"$k%a%=%C%I$NB8:_$r3NG'$9$k$?$a$K!"?7$?$K$=$N3NG'MQ$N%a%=%C(B
$B%I$rDI2C$9$k!"$H$$$&H/A[$O!">r7o<0$NCM$r(Btrue$B$HHf3S$9$k$H$+$$(B
$B$&H/A[$HF1$8Fw$$$,$7$F!"@5D><u$1F~$l$i$l$^$;$s!#(B
> respond_to?$B$@$H4V0c$C$F0z?t$K(B:folk$B$H$+=q$$$F$b$J$+$J$+5$$E$+(B
> $B$J$$$N$G$9$,!"(Bfolkable?$B$_$?$$$K=q$$$F$7$^$&$HNc30$,$"$,$k$N(B
> $B$G5$$E$-$d$9$$!"$H$$$&$N$b@lMQ%a%=%C%I$,$"$k$H4r$7$$M}M3$N(B1
> $B$D$G$9!#!JFC$K;d$O(Btypo$B$,B?$$$N$G!K(B
$BNc$($P(B system $B$O$"$k$1$I(B systemable?
$B$O$J$$!"$H$$$&$3$H$r3NG'(B
$B$9$kI,MW$,$"$k$J$i!"$=$N3NG'$N2aDx$G(Btypo$B$,F~$k2DG=@-$O8:$k$s(B
$B$8$c$J$$$+$H$$$&5$$,$7$^$9!#(B
> $B$H$O$$$(!";d$N9%$_$O<u$1F~$l$i$lFq$$$b$N$,B?$$$h$&$J$N$G!"$"(B
> $B$^$j5$$K$7$J$/$F7k9=$G$9!#(Brespond_to?$B$G$b$=$&$$$&H=CG$G$-$kJ}(B
> $BK!$,$"$l$P<+J,$G@lMQ%a%=%C%I$r:n$C$F;H$($P$9$_$^$9$N$G!#(B
$B$^$"!";d$N8@$C$F$k$N$b;d$N9%$_$NLdBj$J$N$G!"B>$N?M$K$O$^$?B>(B
$B$N0U8+$,$"$k$s$8$c$J$$$G$7$g$&$+!#(B
# forkable?$B$"$?$j$O(BActiveSupport$B$H$+$G:NMQ$5$l$?$j$7$F(B :)
$B$=$l$G$O!#(B
on 15.05.2008 14:39
$B?\F#$G$9!#(B In <20080515210433.2577.C613B076@garbagecollect.jp> "[ruby-dev:34719] Re: fork $BIT2DG=$J4D6-$G$N(B test_argv0_noarg" on Thu, 15 May 2008 21:17:28 +0900, "U.Nakamura" <usa@garbagecollect.jp> wrote: > $B$5$i$K8@$&$H!"@h$K$"$2$?$b$N0J30$N%a%=%C%I$NB8:_$b3NG'$7$?$/(B > $B$J$C$?$i!"$=$l$b(B -able? $B$G3NG'$9$k$s$G$7$g$&$+(B? > systemable? $B$H$+!"(BArray.countable? $B$H$+!#(B $B%W%i%C%H%U%)!<%`0MB8$N%a%=%C%I$NOC$@$H;W$C$F$$$^$7$?!#(B $B%P!<%8%g%s4V$G$N8_49@-$N%A%'%C%/$H$+$O9M$($F$$$^$;$s$G$7$?!#(B > $B$=$&$8$c$J$/$F!"$I$N%a%=%C%I$K$OBP1~$9$k(B -able? $B$,$"$C$F!"$I(B > $B$N%a%=%C%I$K$O(B -able? $B$,$J$$!"$H$$$&$3$H$rA4It3NG'$7$F%3!<%I(B > $B$r=q$/$s$G$7$g$&$+(B? $B$J$s$G$b$+$s$G$b3NG'$9$k$H$O;W$($J$$$s$G$9$,!#!#!#(B fork$B$H$+$O$+$J$jFC<l$J%a%=%C%I$@$H;W$C$F$$$^$7$?!#(B > $B$"$k%a%=%C%I$NB8:_$r3NG'$9$k$?$a$K!"?7$?$K$=$N3NG'MQ$N%a%=%C(B > $B%I$rDI2C$9$k!"$H$$$&H/A[$O!">r7o<0$NCM$r(Btrue$B$HHf3S$9$k$H$+$$(B > $B$&H/A[$HF1$8Fw$$$,$7$F!"@5D><u$1F~$l$i$l$^$;$s!#(B $B$=$NF1$8Fw$$$,$9$k463P$O$A$g$C$H$o$+$j$^$;$s$G$7$?!#(B $BNc$($P!"(B if respond_to?(:fork) == true $B$H(B if forkable? $B$,F1$8$h$&$K5$;}$A0-$$$H$$$&$3$H$G$9$h$M!)(B $B;d$O$=$&$O46$8$J$$$H$$$&$@$1$J$N$G!"$&!<$s!#!#!#(B > > respond_to?$B$@$H4V0c$C$F0z?t$K(B:folk$B$H$+=q$$$F$b$J$+$J$+5$$E$+(B > > $B$J$$$N$G$9$,!"(Bfolkable?$B$_$?$$$K=q$$$F$7$^$&$HNc30$,$"$,$k$N(B > > $B$G5$$E$-$d$9$$!"$H$$$&$N$b@lMQ%a%=%C%I$,$"$k$H4r$7$$M}M3$N(B1 > > $B$D$G$9!#!JFC$K;d$O(Btypo$B$,B?$$$N$G!K(B > > $BNc$($P(B system $B$O$"$k$1$I(B systemable? $B$O$J$$!"$H$$$&$3$H$r3NG'(B > $B$9$kI,MW$,$"$k$J$i!"$=$N3NG'$N2aDx$G(Btypo$B$,F~$k2DG=@-$O8:$k$s(B > $B$8$c$J$$$+$H$$$&5$$,$7$^$9!#(B $B$3$l$b$A$g$C$H$o$+$i$J$+$C$?$G$9!#(B $B$^$:!"$I$&$7$FNc$G$O(Bsystem$B$r;H$C$F$$$k$N$+$H$$$&$3$H$,$o$+$j(B $B$^$;$s$G$7$?!#$*$=$i$/!"$3$3$i$X$s$rA0Ds$H$7$?OC$@$+$i$@$H$O(B $B;W$&$N$G$9$,!";d$O$=$&$$$&Iw$K$O;W$o$J$$$N$G$A$g$C$H0U?^$,$o(B $B$+$j$^$;$s$G$7$?!#(B > $B$=$&$8$c$J$/$F!"$I$N%a%=%C%I$K$OBP1~$9$k(B -able? $B$,$"$C$F!"$I(B > $B$N%a%=%C%I$K$O(B -able? $B$,$J$$!"$H$$$&$3$H$rA4It3NG'$7$F%3!<%I(B > $B$r=q$/$s$G$7$g$&$+(B? $B$"$H!"(Btypo$B$N2DG=@-$NOC$G$O$J$/$F!"(Btypo$B$r$7$F$7$^$C$?$H$-$K8+(B $B$D$1$d$9$$$+$I$&$+$NOC$r$7$F$$$?$D$b$j$J$N$G!"(Btypo$B$,F~$k2DG=(B $B@-1>!9$N0U?^$,$o$+$j$^$;$s$G$7$?!#!J(Btypo$B$O$J$/$J$i$J$$$H;W$C(B $B$F$$$k!K(B
on 15.05.2008 14:41
In article <20080515210433.2577.C613B076@garbagecollect.jp>, "U.Nakamura" <usa@garbagecollect.jp> writes: > $BNc$($P(B system $B$O$"$k$1$I(B systemable? $B$O$J$$!"$H$$$&$3$H$r3NG'(B > $B$9$kI,MW$,$"$k$J$i!"$=$N3NG'$N2aDx$G(Btypo$B$,F~$k2DG=@-$O8:$k$s(B > $B$8$c$J$$$+$H$$$&5$$,$7$^$9!#(B $B$$$A$P$s(B typo $B$K5$$,$D$-$d$9$$=q$-J}$O$$$-$J$jL\E*$N%a%=%C%I(B $B$r8F$s$G!"(BNotImplementedError $B$r(B rescue $B$9$k$3$H$G$O$J$$$G$7$g(B $B$&$+!#(B begin Process.setrlimit(...) rescue NotImplementedError ... end $B$J$I$H$9$l$P!"(Bsetrlimit $B$K(B typo $B$,F~$l$P!"(BNoMethodError $B$K$J(B $B$k$N$G!"(B($B$*$=$i$/(B) $B%"%W%j%1!<%7%g%s$OCfCG$5$l!"$9$0$K5$$,$D(B $B$/$3$H$,$G$-$^$9!#(B $B$b$A$m$s!"I{:nMQ$NOC$,$"$j$^$9$+$i!">o$K$3$N%9%?%$%k$G=q$1$k(B $B$o$1$G$O$J$$$G$7$g$&$,!"(Bsetrlimit $B$G@)8B$G$-$l$P@)8B$9$k$,(B setrlimit $B$,$J$1$l$P5$$K$7$J$$$GB3$1$k!"$H$$$C$?>u67$G$O$$$-(B $B$J$j8F$S=P$9$3$H$,2DG=$G$9!#(B $B$7$+$7!"(Bsetrlimit $B$,$J$$4D6-$G%a%=%C%I$rDj5A$5$l$J$/$J$k$H!"(B $B$3$N%9%?%$%k$,;H$($J$/$J$j$^$9!#$"$($FF1$8%9%?%$%k$G=q$/$H$9(B $B$l$P(B begin Process.setrlimit(...) rescue NoMethodError ... end $B$H$$$&$h$&$K(B NoMethodError $B$r(B rescue $B$9$k$3$H$K$J$j$^$9$,!"(B $B$3$&$9$k$H(B setrlimit $B$KF~$j9~$`(B typo $B$rKI$2$J$/$J$j$^$9!#(B setrlimit $B$r(B typo $B$9$k$H!"%a%=%C%I$,$J$$$N$G(B NoMethodError $B$K$J$j!"(Bsetrlimit $B$,$J$$$H$-$N=hM}$K?J$s$G$7$^$$$^$9!#(B $B=>$C$F!"4D6-0MB8$J%a%=%C%I$rDj5A$7$J$$$h$&$K$9$k$3$H$K$OH?BP(B $B$7$^$9!#(B $B$7$+$7!"$3$N%9%?%$%k$,;H$($J$$>u67$G$b0lHLE*$KH=CG$G$-$k$N$,(B $BK>$^$7$$$N$O3N$+$G!"8F$S=P$9$H(B NotImplementedError $B$K$J$k$,!"(B respond_to? $B$K$O56$rJV$9%a%=%C%I$rF3F~$9$k$H$$$&$N$rDs0F$9$k(B $B$N$O$=$&$$$&$o$1$G$9!#(B