Bug #402

default_external depends on the order of -K and -E

Added by Takashi Tamura about 7 years ago. Updated over 4 years ago.

[ruby-dev:35745]
Status:Closed
Priority:Normal
Assignee:Yui NARUSE
ruby -v: Backport:

Description

=begin
こんにちは sheepman です。

Encoding.default_external は -K オプションと -E オプションの
順番に依存するようですが、こういうものなんでしょうか。

$ ruby-1.9 -v
ruby 1.9.0 (2008-08-03 revision 17593) [i686-linux]

$ ruby-1.9 -Ke -Eutf-8 -e 'p Encoding.default_external'
#Encoding:UTF-8

$ ruby-1.9 -Eutf-8 -Ke -e 'p Encoding.default_external'
#Encoding:EUC-JP

--
sheepman / TAMURA Takashi
=end

History

#1 Updated by Yui NARUSE about 7 years ago

=begin
成瀬です。

sheepman wrote:

こんにちは sheepman です。

Encoding.default_external は -K オプションと -E オプションの
順番に依存するようですが、こういうものなんでしょうか。

$ ruby-1.9 -v
ruby 1.9.0 (2008-08-03 revision 17593) [i686-linux]

$ ruby-1.9 -Ke -Eutf-8 -e 'p Encoding.default_external'
#Encoding:UTF-8

$ ruby-1.9 -Eutf-8 -Ke -e 'p Encoding.default_external'
#Encoding:EUC-JP

わたしの理解では、
* -K と -E の優先度は同一
* ゆえに、後のもので上書き
です。

ただ、-K と -E は本来同時指定するものではないように思うので、
「仕様」としては、同時指定の場合の動作は未定義、でもいいかもしれませんが。

--
NARUSE, Yui naruse@airemix.jp

=end

#2 Updated by Yuki Sonoda about 7 years ago

=begin
Yuguiです。

NARUSE, Yui さんは書きました:

ただ、-K と -E は本来同時指定するものではないように思うので、
「仕様」としては、同時指定の場合の動作は未定義、でもいいかもしれませんが。

同時に指定した場合と複数回指定した場合は「未定義」に一票

--
Yugui yugui@yugui.jp
http://yugui.jp
私は私をDumpする

=end

#3 Updated by Kouji Takao about 7 years ago

=begin
高尾宏治です。

On 2008/08/03, at 17:59, Yugui (Yuki Sonoda) wrote:

NARUSE, Yui さんは書きました:

ただ、-K と -E は本来同時指定するものではないように思うので、
「仕様」としては、同時指定の場合の動作は未定義、でもいいかもしれませんが。

同時に指定した場合と複数回指定した場合は「未定義」に一票

どちらを優先するとかいう意見はないのですが、
rubyの仕様として未定義とする場合、Rubyのユーザへの説明が面倒とか、
テストが書けないという問題はないでしょうか。
私のこれまでの経験だと定義しておいたほうが楽という認識があります。

=end

#4 Updated by Yui NARUSE about 7 years ago

=begin
成瀬です。

Takao Kouji wrote:

高尾宏治です。

On 2008/08/03, at 17:59, Yugui (Yuki Sonoda) wrote:

NARUSE, Yui さんは書きました:

ただ、-K と -E は本来同時指定するものではないように思うので、
「仕様」としては、同時指定の場合の動作は未定義、でもいいかもしれませんが。
同時に指定した場合と複数回指定した場合は「未定義」に一票

どちらを優先するとかいう意見はないのですが、
rubyの仕様として未定義とする場合、Rubyのユーザへの説明が面倒とか、
テストが書けないという問題はないでしょうか。
私のこれまでの経験だと定義しておいたほうが楽という認識があります。

ふーむ、それだととりあえず例外ですかねぇ。

--- ruby.c (revision 18324)
+++ ruby.c (working copy)
@@ -792,6 +792,8 @@ proc_options(int argc, char *argv, stru
}
if (enc_name) {
opt->src.enc.name = rb_str_new2(enc_name);
+ if (opt->ext.enc.name)
+ rb_raise(rb_eRuntimeError, "duplicate argument for default external");
opt->ext.enc.name = opt->src.enc.name;
}
s++;
@@ -878,6 +880,8 @@ proc_options(int argc, char *
argv, stru
}
}
encoding:
+ if (opt->ext.enc.name)
+ rb_raise(rb_eRuntimeError, "duplicate argument for default external");
opt->ext.enc.name = rb_str_new2(s);
}
else if (strcmp("version", s) == 0)

--
NARUSE, Yui naruse@airemix.jp

=end

#5 Updated by Martin Dürst about 7 years ago

=begin
At 17:59 08/08/03, you wrote:

Yuguiです。

NARUSE, Yui さんは書きました:

ただ、-K と -E は本来同時指定するものではないように思うので、
「仕様」としては、同時指定の場合の動作は未定義、でもいいかもしれませんが。

同時に指定した場合と複数回指定した場合は「未定義」に一票

こちらも一票ですが、最近の RubySpec の「何でもはっきり決める」
にはどうやって伝えればいいでしょうか。

宜しくお願いします。 Martin.

#-#-# Martin J. Du"rst, Assoc. Professor, Aoyama Gakuin University
#-#-# http://www.sw.it.aoyama.ac.jp mailto:duerst@it.aoyama.ac.jp

=end

#6 Updated by Nobuyoshi Nakada about 7 years ago

=begin
なかだです。

At Sun, 3 Aug 2008 21:13:27 +0900,
NARUSE, Yui wrote in :

On 2008/08/03, at 17:59, Yugui (Yuki Sonoda) wrote:

NARUSE, Yui さんは書きました:

ただ、-K と -E は本来同時指定するものではないように思うので、
「仕様」としては、同時指定の場合の動作は未定義、でもいいかもしれませんが。
同時に指定した場合と複数回指定した場合は「未定義」に一票

最後を優先に一票。

現在-Iのように複数回指定したものがすべて有効になるオプション以外
はすべて最後のみが有効です。あえて-Kと-Eだけを互換性を捨てて違う
動作を追加する必然はないように思います。

どちらを優先するとかいう意見はないのですが、
rubyの仕様として未定義とする場合、Rubyのユーザへの説明が面倒とか、
テストが書けないという問題はないでしょうか。
私のこれまでの経験だと定義しておいたほうが楽という認識があります。

ふーむ、それだととりあえず例外ですかねぇ。

RUBYOPTをコマンドラインで上書きできなくなります。

--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦

=end

#7 Updated by Yui NARUSE about 7 years ago

=begin
Nobuyoshi Nakada wrote:

なかだです。

At Sun, 3 Aug 2008 21:13:27 +0900,
NARUSE, Yui wrote in :

On 2008/08/03, at 17:59, Yugui (Yuki Sonoda) wrote:

NARUSE, Yui さんは書きました:

ただ、-K と -E は本来同時指定するものではないように思うので、
「仕様」としては、同時指定の場合の動作は未定義、でもいいかもしれませんが。
同時に指定した場合と複数回指定した場合は「未定義」に一票

最後を優先に一票。

これって、-K euc-jp -E utf-8 の時には、
* script encoding のデフォルトは EUC-JP
* default external は UTF-8
になるんですかね。

-E の意味が増えた場合にこのあたりのルールが複雑化するのが少し怖いのです。
まぁ、-E が入出力しか含まない分は安心なのですが。

現在-Iのように複数回指定したものがすべて有効になるオプション以外
はすべて最後のみが有効です。あえて-Kと-Eだけを互換性を捨てて違う
動作を追加する必然はないように思います。

どちらを優先するとかいう意見はないのですが、
rubyの仕様として未定義とする場合、Rubyのユーザへの説明が面倒とか、
テストが書けないという問題はないでしょうか。
私のこれまでの経験だと定義しておいたほうが楽という認識があります。
ふーむ、それだととりあえず例外ですかねぇ。

RUBYOPTをコマンドラインで上書きできなくなります。

なるほど。

--
NARUSE, Yui naruse@airemix.jp

=end

#8 Updated by Koichi Sasada about 7 years ago

  • Assignee set to Yui NARUSE

=begin

=end

#9 Updated by Yui NARUSE about 7 years ago

=begin
-K は default source encoding と default_external を上書き、
-E は default_external を上書き、
後のものが優先、で行きましょう。
=end

#10 Updated by Yui NARUSE about 7 years ago

  • Category set to M17N
  • Status changed from Open to Closed

=begin

=end

Also available in: Atom PDF