こんにちは、なかむら(う)です。

In message "[ruby-dev:45219] Re: [Ruby 1.9-Feature#3946][Open]  Array#packのqQ指定子に機種依存サイズフラグ!を追加"
    on Feb.10,2012 02:45:01, <kosaki.motohiro / gmail.com> wrote:
> > では、以前も述べたように存在しないときの挙動はArgumentErrorで
> > よいと思いますが、誰か異論がある人はいますでしょうか?
> 
> 現実的な範囲ではどのコンパイラもソフトウェアエミュレーションでint64_t を
> サポートできているようなので細かい話ですがプラットフォームの都合で
> 失敗するときに ArgumentError にするのはあまり好きではありません。

64bit整数のpack/unpackを意味するフォーマット指定子 "q" "Q" は
既にあって、int64_tがあろうがなかろうが動作するようになってい
ます。
今している話はこれをArgumentErrorにする、という話ではありませ
ん。

このticketはlong long(Rubyソースコード上ではLONG_LONG)を意味
するフォーマット指定子 "q!" "Q!" を追加しましょう、という提案
であり、「存在しないとき」云々はlong longがない場合はどーしま
しょーか、という話なので、int64_tがあるかどうかとは理論上は関
係がございません。
# 現実問題として今はどこでも両者は同じなんでしょうけど。


> この状況で失敗したときってアプリ側でfallbackが書けるケースはまれで
> そのまま終了するのですが、ArgumentError だとアプリケーションにバグが
> あることを暗に言っているのでミスリーディングだと思うのです。

なお、long longがないプラットフォームで "q!" "Q!" を使おうと
するのはどう考えてもバグなので、お前のバグだろゴルァと例外を
投げるのは完全に真っ当なエラー指摘だと思います。


それでは。
-- 
U.Nakamura <usa / garbagecollect.jp>