[#31143] m {|(*,(*)),|} — Tanaka Akira <akr@...>
m {|(*,(*)),|} で SEGV します。
[#31164] ruby_set_current_source remains in intern.h — Masahiro Sakai (酒井政裕) <masahiro.sakai@...>
酒井です。
[#31166] is_ruby_native_thread() — Masahiro Sakai (酒井政裕) <masahiro.sakai@...>
酒井です。
なかだです。
永井@知能.九工大です.
なかだです。
永井@知能.九工大です.
ささだです。
[#31168] 構造体オブジェクトのcloneメソッド呼び出しでメモリリーク発生 — m-ohkubo@... (Mitsuhiko OHKUBO)
大久保といいます。はじめまして。
なかだです。
大久保です。よろしくお願いします。
[#31190] 0x3fffffffffffffff.succ — Tanaka Akira <akr@...>
LP64 環境で 0x3fffffffffffffff.succ が -4611686018427387904
[#31214] Warning: OpenSSL::PKCS7::PKCS7 is deprecated after Ruby 1.9; use OpenSSL::PKCS7 instead — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#31222] trunk: バグを指摘している警告 — pegacorn <subscriber.jp@...>
trunk で -Wall を付けてコンパイルしてみると、バグを指摘している警告が
From: pegacorn <subscriber.jp@gmail.com>
[#31242] p(65536**(1<<29)) stalls — "Yusuke ENDOH" <mame@...>
遠藤と申します。
[#31244] shift — Tanaka Akira <akr@...>
-O0 で、以下のようにすると SEGV になります。
なかだです。
In article <200707180743.l6I7hXic031558@sharui.nakada.kanuma.tochigi.jp>,
[#31285] p()#=>[] — eklerni <eklerni@...>
松尾といいます。
[#31292] ParseDate.parsedate("Tuesday, July 6th, 2007, 18:35:20 UTC") — Tanaka Akira <akr@...>
ParseDate のマニュアルにある以下の例を動かすと、示された結果
[#31298] retryの使い方 — eklerni <eklerni@...>
松尾といいます。
ささだです。
松尾です、返信ありがとうございます。
Yuguiといいます。
松尾といいます。
In article <46A909DD.1070405@for.mail-box.ne.jp>,
Tanaka Akira さんは書きました:
In article <46A92530.80507@for.mail-box.ne.jp>,
Tanaka Akira さんは書きました:
In article <46AD7A16.8080509@for.mail-box.ne.jp>,
松尾です。
ささだです。
From:eklerni
まつもと ゆきひろです
In article <E1ILDTi-0005T6-Be@x31>,
まつもと ゆきひろです
In article <E1ILKn6-0003Nv-0f@x31>,
まつもと ゆきひろです
In article <E1ILVN9-0006xJ-7I@x31>,
In article <E1ILq4x-0002Bs-Lg@x31>,
まつもと ゆきひろです
In article <E1ILweZ-00008I-Tu@x31>,
まつもと ゆきひろです
In article <E1ILyGa-0000ug-Qd@x31>,
まつもと ゆきひろです
In article <E1IM1W9-0001uC-Bz@x31>,
まつもと ゆきひろです
[ruby-dev:31117] Re: $&;[] dumps core
In article <4688FAEC.5090603@atdot.net>,
SASADA Koichi <ko1@atdot.net> writes:
>> そのせいか、^C 一発で止まらないのですが、そんなことはありませんか?
>
> 止まりません。
>
> で、これは誰も返事をしていない [ruby-dev:31007] の話だとは思
> いますが、これはどうするべきなんでしょうか。私は、1.8 がこうい
> う挙動なので、こういうもんだと思っていました。どうすると幸せな
> 人が増えるのかは、経験不足でわかりません。実装についてもよくわ
> かりません。
止めようと思って ^C を入力しているのに、止まらないのは不幸です。
> ruby 1.8:
> perl:
> python:
うぅむ。ruby 以外にもあったのか。
In article <E1I5MXU-0006WF-3w@x31>,
Yukihiro Matsumoto <matz@ruby-lang.org> writes:
> rb_syswait()がSIGHUP, SIGQUIT, SIGINTをSIG_IGNに設定している
> からですね。で、これがなぜそうしているかというと、実は私にも
> わからないのですが、直接的な理由はPerlの真似をしたからだった
> と思います。
予想外にあったので、起源をたどってみると、どうも、C の
system からして止まらないようですね。
SUS の system の項に解説があって以下のように書いてあります。
http://www.opengroup.org/onlinepubs/007904975/functions/system.html#tag_03_757_07
Note that, while system() must ignore SIGINT and SIGQUIT and block SIGCHLD
while waiting for the child to terminate, the handling of signals in the
executed command is as specified by fork() and exec. For example, if SIGINT
is being caught or is set to SIG_DFL when system() is called, then the
child is started with SIGINT handling set to SIG_DFL.
Ignoring SIGINT and SIGQUIT in the parent process prevents coordination
problems (two processes reading from the same terminal, for example) when
the executed command ignores or catches one of the signals. It is also
usually the correct action when the user has given a command to the
application to be executed synchronously (as in the '!' command in many
interactive applications). In either case, the signal should be delivered
only to the child process, not to the application itself. There is one
situation where ignoring the signals might have less than the desired
effect. This is when the application uses system() to perform some task
invisible to the user. If the user typed the interrupt character ( "^C",
for example) while system() is being used in this way, one would expect the
application to be killed, but only the executed command is killed.
Applications that use system() in this way should carefully check the
return status from system() to see if the executed command was successful,
and should take appropriate action when the command fails.
つまり、
* 子プロセスだけが生き残って、端末を取り合うとかのことを避ける
* vi の ! みたいなものでユーザが実行した時には ^C は子プロセスだけが死ぬべき
という理由があるようです。
しかし、この扱いがよろしくないケースもあることがあげられてい
ます。これは具体的にはユーザからは見えないところで system を
使う、というケースで、bootstraptest はまさにその例と考えられ
ます。そして、そのケースではアプリケーションが注意深く
system の返り値を検査すべきである、とも書かれています。
ということは、Ruby の system (や ``) が C の system の仕様を
引き継いでいるとすると、bootstraptest で、system の返り値
(というか、`` だから $?) を適切に検査していないのが問題であ
る、ということになります。
なんで検査しないんですか?
あるいは、C や Perl のように例外がない世界から Ruby のように
例外がある世界に移った時点で、API を変えるべきなのではないか、
ということも考えられます。
子プロセスだけが生き残るのはたしかにあまりよろしくないように
思いますが、vi の ! みたいなのは system の用法としてあまり多
いとは思えないので気にしないことにして、子プロセス実行中に
SIGINT がきたら、子プロセスが死んだ後に Interrupt 例外が発生
するとかはどうでしょうか。
でも、C の system を使って実装するのは無理かな...
--
[田中 哲][たなか あきら][Tanaka Akira]