At Sun, 4 Aug 2013 10:01:31 +0900,
KOSAKI Motohiro wrote:
> 
> 2013/7/30 knu (Akinori MUSHA) <knu / ruby-lang.org>:
> >
> > Issue #8696 has been updated by knu (Akinori MUSHA).

私が言いたかったことを整理すると、

 1. $0 のgetter/setterは非対称であり、「$0の別名を作る」という発想でそ
    の歪みを引き継ぐのは好ましくない。つまり、 setproctitle() するAPIと
    オリジナルの $0 を返すAPIは別個に用意し、前者の呼出によって後者の値
    が影響を受けないようにすべき。

 2. 前者はCのAPI上は setter のみなので setproctitle のままでいいし、後
    者は setter なしの Process.argv0 でいいのではないか。

という感じです。

1について補足すると、 setproctitle() のない環境では argv をいじっている
わけですが、その場合も ARGV は影響を受けませんし、同様に常にオリジナル
の $0 の値を返すAPIがあっていいと思います。

> > getproctitle() というAPIはないので、 Process.setproctitle() でいいんじゃないかと思います。
> > $0はベタに Process.argv0 でどうでしょう。argv0という名前はTclに先例があります。
> 
> 現在すでに $PROGRAM_NAME があるわけですが、argv0はそれより分かりやすさが一段落ちる感じ。
> C言語は当然知ってるよねという前提はいいのかなあ

ARGV があるので、少なくとも検索の手がかりがないということはなさそう。

> getproctitle()というAPIはないというご指摘ですが、Rubyで最後に設定した文字列を覚えておくだけなので
> あまり障害になるとは考えていません。
> すごい長い文字列を与えた時にsetproctitle()側で勝手に切り詰める仕様があったりすると不一致になりますが
> 実用上は問題にならないでしょう。それともFreeBSDのような頭にprefix勝手につけるようなsetproctitle()実装を
> 心配している?

そうですね。不可逆な操作であるということが見えなくなるというのは懸念と
してはあります。

しかしそれよりも、 getproctitle() がないということはまず初期値をどうす
るか、プログラムの他の部分で setproctitle() されたらその値を反映すべき
か(主に Ruby を組み込んだプログラムを想定しています)というところも考
える必要がありますね。