https://bugs.ruby-lang.org/
https://bugs.ruby-lang.org/favicon.ico?1711330511
2010-10-14T21:07:17Z
Ruby Issue Tracking System
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=13733
2010-10-14T21:07:17Z
akr (Akira Tanaka)
akr@fsij.org
<ul></ul><p>=begin<br>
2010年10月14日15:36 Yui NARUSE <a href="mailto:redmine@ruby-lang.org" class="email">redmine@ruby-lang.org</a>:</p>
<blockquote>
<p>Feature <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: Array#packのqQ指定子に機種依存サイズフラグ!を追加 (Closed)" href="https://bugs.ruby-lang.org/issues/3946">#3946</a>: Array#packのqQ指定子に機種依存サイズフラグ!を追加<br>
<a href="http://redmine.ruby-lang.org/issues/show/3946" class="external">http://redmine.ruby-lang.org/issues/show/3946</a></p>
<p>起票者: Yui NARUSE<br>
ステータス: Open, 優先度: Normal<br>
Target version: 1.9.3</p>
<p>Ruby の伏魔殿 Array#pack ですが、機種依存な部分をいじる際にはしばしば強力かつ唯一の手段になる事があります。<br>
具体的には RubySpec 書く時とか。</p>
<p>さて、q/Q は 64bit signed/unsigned int なのですが、機種依存の long long (厳密には LONG_LONG) のサイズが必要な場合、<br>
現状 Ruby レベルから取る手段が一切ありません。<br>
すでに s/S/i/I/l/L (16bit/32bit/32bit) は、! をつけることでその機種の short/int/long のサイズになるため、<br>
これを q/Q に拡張すると唯一の手段が提供される事になります。</p>
</blockquote>
<h2>おそらく long long がない場合にはエラーになるべきだと思うんですが、<br>
その場合のエラーを決めないといけないんじゃないでしょうか。</h2>
<p>[田中 哲][たなか あきら][Tanaka Akira]</p>
<p>=end</p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=13734
2010-10-14T21:29:29Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul></ul><p>=begin<br>
(2010/10/14 21:07), Tanaka Akira wrote:</p>
<blockquote>
<blockquote>
<p>さて、q/Q は 64bit signed/unsigned int なのですが、機種依存の long long (厳密には LONG_LONG) の<br>
サイズが必要な場合、現状 Ruby レベルから取る手段が一切ありません。<br>
すでに s/S/i/I/l/L (16bit/32bit/32bit) は、! をつけることでその機種の short/int/long の<br>
サイズになるため、これを q/Q に拡張すると唯一の手段が提供される事になります。</p>
</blockquote>
<p>おそらく long long がない場合にはエラーになるべきだと思うんですが、<br>
その場合のエラーを決めないといけないんじゃないでしょうか。</p>
</blockquote>
<p>ふむ。<br>
現実的には 64bit 以上の整数型がない環境ですよね。<br>
rb_raise(rb_eArgError, "this machine doesn't have long long int");<br>
あたりになりますかねぇ。</p>
<p>--<br>
NARUSE, Yui <a href="mailto:naruse@airemix.jp" class="email">naruse@airemix.jp</a></p>
<p>=end</p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=13745
2010-10-15T16:27:18Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul></ul><p>=begin<br>
2010年10月15日9:28 KOSAKI Motohiro <a href="mailto:kosaki.motohiro@jp.fujitsu.com" class="email">kosaki.motohiro@jp.fujitsu.com</a>:</p>
<blockquote>
<blockquote>
<p>(2010/10/14 21:07), Tanaka Akira wrote:</p>
<blockquote>
<blockquote>
<p>さて、q/Q は 64bit signed/unsigned int なのですが、機種依存の long long (厳密には LONG_LONG) の<br>
サイズが必要な場合、現状 Ruby レベルから取る手段が一切ありません。<br>
すでに s/S/i/I/l/L (16bit/32bit/32bit) は、! をつけることでその機種の short/int/long の<br>
サイズになるため、これを q/Q に拡張すると唯一の手段が提供される事になります。</p>
</blockquote>
<p>おそらく long long がない場合にはエラーになるべきだと思うんですが、<br>
その場合のエラーを決めないといけないんじゃないでしょうか。</p>
</blockquote>
<p>ふむ。<br>
現実的には 64bit 以上の整数型がない環境ですよね。<br>
rb_raise(rb_eArgError, "this machine doesn't have long long int");<br>
あたりになりますかねぇ。</p>
</blockquote>
<p>あんまりRubyのexceptionのルールを知らないんですが、</p>
<p>・引数が間違っている</p>
<p>だと、暗黙にプログラムがバグっているというニュアンスを持つので</p>
<p>・そのプラットフォームは未対応</p>
<p>ってのは、違うエラーが一般的な気がします。Unix errnoルールでいうと</p>
<p>EINVAL: 引数が待ちガットル<br>
ENOSYS: 未実装システムコール</p>
<p>みたいな。</p>
<p>余談に走りますがglibc関係者がkernel開発者に以前この件で苦情を言ってきた<br>
事があって、それは</p>
<p>・ユーザが引数を間違えて渡してきた時はエラーを返したい<br>
・カーネルが古くて、新しめのシステムコールが未実装の時は<br>
代替処理にfallbackしたい</p>
<p>という事はわりとありがちなので混同しないで、とかいう話でした。<br>
今回の件に当てはまるかどうかは分かりませんが。</p>
</blockquote>
<p>一理あるとは思うのですが、</p>
<ul>
<li>packは後述の通り間違った指定子は無視する</li>
<li>NotImplementedError が一見それに見えて確か違う……と見せかけてrdocみるとこれっぽいな</li>
</ul>
<p>というわけで、rb_eNotImpError かも。</p>
<blockquote>
<p>ああ、でもこのへんもperlにあわせたほうがいいのかな?</p>
</blockquote>
<p>Perl を見ると、</p>
<blockquote>
<pre><code>(Quads are available only if your system supports 64-bit
integer values _and_ if Perl has been compiled to support those.
Raises an exception otherwise.)
</code></pre>
<p><a href="http://perldoc.perl.org/functions/pack.html" class="external">http://perldoc.perl.org/functions/pack.html</a><br>
などとあり、実際試しても以下の通りエラーですね。<br>
% perl -e'print pack("q",1)'<br>
Invalid type 'q' in pack at -e line 1.</p>
</blockquote>
<p>ちなみに、全く非対応な文字を食わせた場合、<br>
% perl -e'print pack("o",1)'<br>
Invalid type 'o' in pack at -e line 1.<br>
% ruby -e'p [1].pack("O")'<br>
""<br>
すごく……仕様変更したいです……</p>
<p>--<br>
NARUSE, Yui<br>
<a href="mailto:naruse@airemix.jp" class="email">naruse@airemix.jp</a></p>
<p>=end</p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=13802
2010-10-18T13:17:05Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Closed</i></li><li><strong>% Done</strong> changed from <i>0</i> to <i>100</i></li></ul><p>=begin<br>
This issue was solved with changeset r29527.<br>
Yui, thank you for reporting this issue.<br>
Your contribution to Ruby is greatly appreciated.<br>
May Ruby be with you.</p>
<p>=end</p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=13803
2010-10-18T13:26:40Z
akr (Akira Tanaka)
akr@fsij.org
<ul></ul><p>=begin<br>
2010年10月14日21:29 NARUSE, Yui <a href="mailto:naruse@airemix.jp" class="email">naruse@airemix.jp</a>:</p>
<blockquote>
<blockquote>
<p>おそらく long long がない場合にはエラーになるべきだと思うんですが、<br>
その場合のエラーを決めないといけないんじゃないでしょうか。</p>
</blockquote>
<p>ふむ。<br>
現実的には 64bit 以上の整数型がない環境ですよね。</p>
</blockquote>
<p>64bit 以上の整数型なら何でもいいんですか?</p>
<a name="それならなんで現状の-q-Q-ではいけないんですか"></a>
<h2 >それなら、なんで現状の q, Q ではいけないんですか?<a href="#それならなんで現状の-q-Q-ではいけないんですか" class="wiki-anchor">¶</a></h2>
<p>[田中 哲][たなか あきら][Tanaka Akira]</p>
<p>=end</p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=13806
2010-10-18T14:05:26Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul></ul><p>=begin<br>
2010年10月18日13:26 Tanaka Akira <a href="mailto:akr@fsij.org" class="email">akr@fsij.org</a>:</p>
<blockquote>
<p>2010年10月14日21:29 NARUSE, Yui <a href="mailto:naruse@airemix.jp" class="email">naruse@airemix.jp</a>:</p>
<blockquote>
<blockquote>
<p>おそらく long long がない場合にはエラーになるべきだと思うんですが、<br>
その場合のエラーを決めないといけないんじゃないでしょうか。</p>
</blockquote>
<p>ふむ。<br>
現実的には 64bit 以上の整数型がない環境ですよね。</p>
</blockquote>
<p>64bit 以上の整数型なら何でもいいんですか?</p>
<p>それなら、なんで現状の q, Q ではいけないんですか?</p>
</blockquote>
<p>以下の通り、64bit 整数型が無い場合と、long long が 64bit 超な場合に差が出ますね。<br>
MSVC の場合に __int64 を使わず例外にするというパターンもありますが、<br>
現実的には CRuby は常に LONG_LONG でラップしている訳で、<br>
ラップ後を用いた方が現実に即していると考えています。</p>
<p>= long long がある<br>
== long long が 64bit<br>
q: 64bit<br>
q!: 64bit<br>
== long long が 64bit 超<br>
q: 64bit<br>
q!: 64bit超 128bitとか</p>
<p>= long long がない<br>
== 64bit 整数型がある<br>
→ LONG_LONG はたぶん 64bit (eg. MSVC++)<br>
q: 64bit<br>
q!: どうあるべきか (現状: LONG_LONGに追従)</p>
<p>== 64bit 整数型はないが64bit 超はある<br>
q: 64bit (自力で頑張る)<br>
q!: どうあるべきか (LONG_LONGに追従、無ければ例外)</p>
<p>== 64bit 以上の型が無い<br>
q: 64bit (自力で頑張る)<br>
q!: 例外 (LONG_LONGもないはずである)</p>
<p>--<br>
NARUSE, Yui<br>
<a href="mailto:naruse@airemix.jp" class="email">naruse@airemix.jp</a></p>
<p>=end</p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=13807
2010-10-18T14:25:48Z
akr (Akira Tanaka)
akr@fsij.org
<ul></ul><p>=begin<br>
2010年10月18日14:04 NARUSE, Yui <a href="mailto:naruse@airemix.jp" class="email">naruse@airemix.jp</a>:</p>
<blockquote>
<blockquote>
<p>64bit 以上の整数型なら何でもいいんですか?</p>
<p>それなら、なんで現状の q, Q ではいけないんですか?</p>
</blockquote>
<p>以下の通り、64bit 整数型が無い場合と、long long が 64bit 超な場合に差が出ますね。<br>
MSVC の場合に __int64 を使わず例外にするというパターンもありますが、<br>
現実的には CRuby は常に LONG_LONG でラップしている訳で、<br>
ラップ後を用いた方が現実に即していると考えています。</p>
</blockquote>
<p>違うときに、q でなく q! が (あるいは Q でなく Q! が) 役に立つということを、<br>
具体的な例を使って説明してほしいんですが、そういう説明はないんでしょうか。</p>
<h2>私は、LONG_LONG というのは CRuby 固有なものなので、<br>
一般のアプリケーションには役に立たないのではないか、という点を疑っています。</h2>
<p>[田中 哲][たなか あきら][Tanaka Akira]</p>
<p>=end</p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=13809
2010-10-18T15:27:35Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul></ul><p>=begin<br>
衝突してるのはよくないのでとりあえず revert します。</p>
<p>--<br>
NARUSE, Yui<br>
<a href="mailto:naruse@airemix.jp" class="email">naruse@airemix.jp</a></p>
<p>=end</p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=13810
2010-10-18T15:33:04Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul></ul><p>=begin<br>
2010年10月18日15:26 NARUSE, Yui <a href="mailto:naruse@airemix.jp" class="email">naruse@airemix.jp</a>:</p>
<blockquote>
<p>衝突してるのはよくないのでとりあえず revert します。</p>
</blockquote>
<p>あれ、本文が消えてる……。<br>
Bignum 絡みで使おうと思っていたが、一方でFFI などは素の long long が欲しい気もする。<br>
つまり、矛盾するユースケースが予想されるので却下とする、という趣旨の事を書いていました。</p>
<p>--<br>
NARUSE, Yui<br>
<a href="mailto:naruse@airemix.jp" class="email">naruse@airemix.jp</a></p>
<p>=end</p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=14294
2010-11-25T10:57:39Z
usa (Usaku NAKAMURA)
usa@garbagecollect.jp
<ul><li><strong>Status</strong> changed from <i>Closed</i> to <i>Open</i></li></ul><p>=begin<br>
ユースケース1件発生しました。r29925を参照。</p>
<p>というわけで、q!(Q!)をLONG_LONGとして扱うという仕様を希望します。<br>
LONG_LONGがないプラットフォームは現状サポート外だと思いますが、<br>
その場合はArgumentErrorあたりでしょうか。<br>
=end</p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=14462
2010-12-02T21:32:38Z
akr (Akira Tanaka)
akr@fsij.org
<ul></ul><p>=begin<br>
2010年11月25日10:57 Usaku NAKAMURA <a href="mailto:redmine@ruby-lang.org" class="email">redmine@ruby-lang.org</a>:</p>
<blockquote>
<p>チケット <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: Array#packのqQ指定子に機種依存サイズフラグ!を追加 (Closed)" href="https://bugs.ruby-lang.org/issues/3946">#3946</a> が更新されました。 (by Usaku NAKAMURA)</p>
</blockquote>
<blockquote>
<p>ユースケース1件発生しました。r29925を参照。</p>
<p>というわけで、q!(Q!)をLONG_LONGとして扱うという仕様を希望します。<br>
LONG_LONGがないプラットフォームは現状サポート外だと思いますが、<br>
その場合はArgumentErrorあたりでしょうか。</p>
</blockquote>
<p>あまりよくわかっていないんですが、これって Q! で生成したデータを<br>
受けとるのは Ruby 内部なんじゃないでしょうか。</p>
<p>もしそうなら、CRuby 固有のものだから一般のアプリケーションには<br>
役に立たない、という私の懸念は晴れないのですが、実際はどうなんでしょう?</p>
<p>CRuby 固有のものを扱うのは pack にはいままでない (と思う) ので<br>
気に入らないのですが、CRuby 固有のものが役に立たないというわけではありません。<br>
実際、CRuby を相手にする時には役に立つでしょう。</p>
<p>なんとなく rbconfig あたりに LONG_LONG の有無やサイズ (やアラインメント) を<br>
記録しておくあたりで済ますのがいい気がするんですが、どうですかね。<br>
(他の型についても記録しておくことも考えられるでしょう。)</p>
<a name="記録してある情報から-pack-に使える形式に変換するのが面倒かもしれませんが"></a>
<h2 >記録してある情報から pack に使える形式に変換するのが面倒かもしれませんが。<a href="#記録してある情報から-pack-に使える形式に変換するのが面倒かもしれませんが" class="wiki-anchor">¶</a></h2>
<p>[田中 哲][たなか あきら][Tanaka Akira]</p>
<p>=end</p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=18583
2011-06-28T06:18:01Z
nahi (Hiroshi Nakamura)
nakahiro@gmail.com
<ul><li><strong>Assignee</strong> set to <i>naruse (Yui NARUSE)</i></li></ul><p>1.9.X?</p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=19029
2011-07-10T15:38:29Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul><li><strong>Target version</strong> changed from <i>1.9.3</i> to <i>2.0.0</i></li></ul>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=23657
2012-02-09T17:23:13Z
akr (Akira Tanaka)
akr@fsij.org
<ul></ul><p>2012年2月9日16:47 U.Nakamura <a href="mailto:usa@garbagecollect.jp" class="email">usa@garbagecollect.jp</a>:</p>
<blockquote>
<p>古いチケットですが、r34507でまた踏んだので蒸し返します。</p>
<p>In message "<a href="https://blade.ruby-lang.org/ruby-dev/42671">[ruby-dev:42671]</a> Re: [Ruby 1.9-Feature#3946][Open] Array#packのqQ指定子に機種依存サイズフラグ!を追加"<br>
on Dec.02,2010 21:30:53, <a href="mailto:akr@fsij.org" class="email">akr@fsij.org</a> wrote:</p>
<blockquote>
<p>あまりよくわかっていないんですが、これって Q! で生成したデータを<br>
受けとるのは Ruby 内部なんじゃないでしょうか。</p>
</blockquote>
<p>質問に質問で返すのはよくないですが、「Ruby内部」ってどこまで<br>
を想定しておられますか。<br>
前回も今回も踏んでるのはDLですが、DLはつまりRubyの外のコード<br>
を呼ぶためにこの辺のデータをごにょごにょしているので、外部の<br>
ような気がします。</p>
</blockquote>
<p>前回の r29925 を見直してみたのですが、</p>
<ul>
<li>ext/dl/callback/mkcallback.rb (gencallback): shouldn't assume that<br>
VALUE is the same size with long.</li>
</ul>
<p>と書いてあって、VALUE のサイズが問題だったのではないでしょうか。<br>
VALUE っていうのは Ruby 内部だと思います。</p>
<p>今回の r34507 は、みたところあまり内部っぽい感じはしませんね。</p>
<blockquote>
<p>LONG_LONGという言葉を使うとCRuby固有に聞こえますけど、要する<br>
にlong longのデータをどう扱いますか、ということなので、あまり<br>
LONG_LONGという字面にとらわれて考える必要はないと思います。</p>
</blockquote>
<h2>純粋に C の long long を実現するもので、<br>
long long が存在しないときの挙動に合意が取れるなら<br>
それはとくに問題ないんじゃないでしょうか。</h2>
<p>[田中 哲][たなか あきら][Tanaka Akira]</p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=23658
2012-02-09T17:23:13Z
usa (Usaku NAKAMURA)
usa@garbagecollect.jp
<ul></ul><p>こんにちは、なかむら(う)です。</p>
<p>In message "<a href="/issues/3946">[ruby-dev:45216]</a> Re: [Ruby 1.9-Feature#3946][Open] Array#packのqQ指定子に機種依存サイズフラグ!を追加"<br>
on Feb.09,2012 17:03:19, <a href="mailto:akr@fsij.org" class="email">akr@fsij.org</a> wrote:</p>
<blockquote>
<blockquote>
<p>質問に質問で返すのはよくないですが、「Ruby内部」ってどこまで<br>
を想定しておられますか。<br>
前回も今回も踏んでるのはDLですが、DLはつまりRubyの外のコード<br>
を呼ぶためにこの辺のデータをごにょごにょしているので、外部の<br>
ような気がします。</p>
</blockquote>
<p>前回の r29925 を見直してみたのですが、</p>
<ul>
<li>ext/dl/callback/mkcallback.rb (gencallback): shouldn't assume that<br>
VALUE is the same size with long.</li>
</ul>
<p>と書いてあって、VALUE のサイズが問題だったのではないでしょうか。<br>
VALUE っていうのは Ruby 内部だと思います。</p>
<p>今回の r34507 は、みたところあまり内部っぽい感じはしませんね。</p>
</blockquote>
<p>あー、確かに、前回はそんな感じだったかもしれません。</p>
<blockquote>
<blockquote>
<p>LONG_LONGという言葉を使うとCRuby固有に聞こえますけど、要する<br>
にlong longのデータをどう扱いますか、ということなので、あまり<br>
LONG_LONGという字面にとらわれて考える必要はないと思います。</p>
</blockquote>
<p>純粋に C の long long を実現するもので、<br>
long long が存在しないときの挙動に合意が取れるなら<br>
それはとくに問題ないんじゃないでしょうか。</p>
</blockquote>
<p>ふむ。</p>
<p>では、以前も述べたように存在しないときの挙動はArgumentErrorで<br>
よいと思いますが、誰か異論がある人はいますでしょうか?</p>
<a name="それでは"></a>
<h2 >それでは。<a href="#それでは" class="wiki-anchor">¶</a></h2>
<p>U.Nakamura <a href="mailto:usa@garbagecollect.jp" class="email">usa@garbagecollect.jp</a></p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=23667
2012-02-10T02:53:16Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul></ul><blockquote>
<blockquote>
<blockquote>
<p>LONG_LONGという言葉を使うとCRuby固有に聞こえますけど、要する<br>
にlong longのデータをどう扱いますか、ということなので、あまり<br>
LONG_LONGという字面にとらわれて考える必要はないと思います。</p>
</blockquote>
<p>純粋に C の long long を実現するもので、<br>
long long が存在しないときの挙動に合意が取れるなら<br>
それはとくに問題ないんじゃないでしょうか。</p>
</blockquote>
<p>ふむ。</p>
<p>では、以前も述べたように存在しないときの挙動はArgumentErrorで<br>
よいと思いますが、誰か異論がある人はいますでしょうか?</p>
</blockquote>
<p>現実的な範囲ではどのコンパイラもソフトウェアエミュレーションでint64_t を<br>
サポートできているようなので細かい話ですがプラットフォームの都合で<br>
失敗するときに ArgumentError にするのはあまり好きではありません。</p>
<p>この状況で失敗したときってアプリ側でfallbackが書けるケースはまれで<br>
そのまま終了するのですが、ArgumentError だとアプリケーションにバグが<br>
あることを暗に言っているのでミスリーディングだと思うのです。</p>
<p>また、逆にfallbackが書けるケースでいうとプラットフォームが非対応のときは<br>
fallbackしたいけど、それ以外のときはfallback したくないはずなのです。<br>
それ以外というのは、よばだし側がライブラリでさらに上位のアプリケーションが<br>
間違った引数をわたしてきた場合、ということですが。</p>
<p># だけど NotImpErrorは %s() funcsion is unimplemented だから関数にしか使えないんだよねえ。使えない奴・・</p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=23668
2012-02-10T04:23:14Z
usa (Usaku NAKAMURA)
usa@garbagecollect.jp
<ul></ul><p>こんにちは、なかむら(う)です。</p>
<p>In message "<a href="/issues/3946">[ruby-dev:45219]</a> Re: [Ruby 1.9-Feature#3946][Open] Array#packのqQ指定子に機種依存サイズフラグ!を追加"<br>
on Feb.10,2012 02:45:01, <a href="mailto:kosaki.motohiro@gmail.com" class="email">kosaki.motohiro@gmail.com</a> wrote:</p>
<blockquote>
<blockquote>
<p>では、以前も述べたように存在しないときの挙動はArgumentErrorで<br>
よいと思いますが、誰か異論がある人はいますでしょうか?</p>
</blockquote>
<p>現実的な範囲ではどのコンパイラもソフトウェアエミュレーションでint64_t を<br>
サポートできているようなので細かい話ですがプラットフォームの都合で<br>
失敗するときに ArgumentError にするのはあまり好きではありません。</p>
</blockquote>
<p>64bit整数のpack/unpackを意味するフォーマット指定子 "q" "Q" は<br>
既にあって、int64_tがあろうがなかろうが動作するようになってい<br>
ます。<br>
今している話はこれをArgumentErrorにする、という話ではありませ<br>
ん。</p>
<p>このticketはlong long(Rubyソースコード上ではLONG_LONG)を意味<br>
するフォーマット指定子 "q!" "Q!" を追加しましょう、という提案<br>
であり、「存在しないとき」云々はlong longがない場合はどーしま<br>
しょーか、という話なので、int64_tがあるかどうかとは理論上は関<br>
係がございません。</p>
<a name="現実問題として今はどこでも両者は同じなんでしょうけど"></a>
<h1 >現実問題として今はどこでも両者は同じなんでしょうけど。<a href="#現実問題として今はどこでも両者は同じなんでしょうけど" class="wiki-anchor">¶</a></h1>
<blockquote>
<p>この状況で失敗したときってアプリ側でfallbackが書けるケースはまれで<br>
そのまま終了するのですが、ArgumentError だとアプリケーションにバグが<br>
あることを暗に言っているのでミスリーディングだと思うのです。</p>
</blockquote>
<p>なお、long longがないプラットフォームで "q!" "Q!" を使おうと<br>
するのはどう考えてもバグなので、お前のバグだろゴルァと例外を<br>
投げるのは完全に真っ当なエラー指摘だと思います。</p>
<a name="それでは"></a>
<h2 >それでは。<a href="#それでは" class="wiki-anchor">¶</a></h2>
<p>U.Nakamura <a href="mailto:usa@garbagecollect.jp" class="email">usa@garbagecollect.jp</a></p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=23672
2012-02-10T05:29:09Z
kosaki (Motohiro KOSAKI)
kosaki.motohiro@gmail.com
<ul></ul><p>(2/9/12 2:19 PM), U.Nakamura wrote:</p>
<blockquote>
<p>こんにちは、なかむら(う)です。</p>
<p>In message "<a href="/issues/3946">[ruby-dev:45219]</a> Re: [Ruby 1.9-Feature#3946][Open] Array#packのqQ指定子に機種依存サイズフラグ!を追加"<br>
on Feb.10,2012 02:45:01,<a href="mailto:kosaki.motohiro@gmail.com" class="email">kosaki.motohiro@gmail.com</a> wrote:</p>
<blockquote>
<blockquote>
<p>では、以前も述べたように存在しないときの挙動はArgumentErrorで<br>
よいと思いますが、誰か異論がある人はいますでしょうか?</p>
</blockquote>
<p>現実的な範囲ではどのコンパイラもソフトウェアエミュレーションでint64_t を<br>
サポートできているようなので細かい話ですがプラットフォームの都合で<br>
失敗するときに ArgumentError にするのはあまり好きではありません。</p>
</blockquote>
<p>64bit整数のpack/unpackを意味するフォーマット指定子 "q" "Q" は<br>
既にあって、int64_tがあろうがなかろうが動作するようになってい<br>
ます。<br>
今している話はこれをArgumentErrorにする、という話ではありませ<br>
ん。</p>
<p>このticketはlong long(Rubyソースコード上ではLONG_LONG)を意味<br>
するフォーマット指定子 "q!" "Q!" を追加しましょう、という提案<br>
であり、「存在しないとき」云々はlong longがない場合はどーしま<br>
しょーか、という話なので、int64_tがあるかどうかとは理論上は関<br>
係がございません。</p>
<a name="現実問題として今はどこでも両者は同じなんでしょうけど"></a>
<h1 >現実問題として今はどこでも両者は同じなんでしょうけど。<a href="#現実問題として今はどこでも両者は同じなんでしょうけど" class="wiki-anchor">¶</a></h1>
</blockquote>
<p>うーん、int64と書いたのがよくなかったのかな。意図は LONG_LONGであって<br>
「long longっぽい何か」のつもりで使っていました。</p>
<blockquote>
<blockquote>
<p>この状況で失敗したときってアプリ側でfallbackが書けるケースはまれで<br>
そのまま終了するのですが、ArgumentError だとアプリケーションにバグが<br>
あることを暗に言っているのでミスリーディングだと思うのです。</p>
</blockquote>
<p>なお、long longがないプラットフォームで "q!" "Q!" を使おうと<br>
するのはどう考えてもバグなので、お前のバグだろゴルァと例外を<br>
投げるのは完全に真っ当なエラー指摘だと思います。</p>
</blockquote>
<p>いや、それは違います。やってみるまでそういう環境かどうかは分からないので。</p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=24295
2012-03-05T11:49:52Z
usa (Usaku NAKAMURA)
usa@garbagecollect.jp
<ul></ul><p>こんにちは、なかむら(う)です。</p>
<p>古いチケットですが、r34507でまた踏んだので蒸し返します。</p>
<p>In message "<a href="https://blade.ruby-lang.org/ruby-dev/42671">[ruby-dev:42671]</a> Re: [Ruby 1.9-Feature#3946][Open] Array#packのqQ指定子に機種依存サイズフラグ!を追加"<br>
on Dec.02,2010 21:30:53, <a href="mailto:akr@fsij.org" class="email">akr@fsij.org</a> wrote:</p>
<blockquote>
<p>あまりよくわかっていないんですが、これって Q! で生成したデータを<br>
受けとるのは Ruby 内部なんじゃないでしょうか。</p>
</blockquote>
<p>質問に質問で返すのはよくないですが、「Ruby内部」ってどこまで<br>
を想定しておられますか。<br>
前回も今回も踏んでるのはDLですが、DLはつまりRubyの外のコード<br>
を呼ぶためにこの辺のデータをごにょごにょしているので、外部の<br>
ような気がします。</p>
<blockquote>
<p>もしそうなら、CRuby 固有のものだから一般のアプリケーションには<br>
役に立たない、という私の懸念は晴れないのですが、実際はどうなんでしょう?</p>
</blockquote>
<p>LONG_LONGという言葉を使うとCRuby固有に聞こえますけど、要する<br>
にlong longのデータをどう扱いますか、ということなので、あまり<br>
LONG_LONGという字面にとらわれて考える必要はないと思います。</p>
<a name="それでは"></a>
<h2 >それでは。<a href="#それでは" class="wiki-anchor">¶</a></h2>
<p>U.Nakamura <a href="mailto:usa@garbagecollect.jp" class="email">usa@garbagecollect.jp</a></p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=24876
2012-03-18T18:46:39Z
shyouhei (Shyouhei Urabe)
shyouhei@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Assigned</i></li></ul>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=27103
2012-06-09T00:20:17Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul><li><strong>Assignee</strong> changed from <i>naruse (Yui NARUSE)</i> to <i>akr (Akira Tanaka)</i></li></ul>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=27150
2012-06-11T10:38:04Z
usa (Usaku NAKAMURA)
usa@garbagecollect.jp
<ul></ul><p>なんかもう争点がわからないので整理しますが、</p>
<ul>
<li>Q!、q!は必要か?<br>
→どうやら必要らしい(ユースケースがある)</li>
<li>問題点はなんぞ?<br>
→LONG_LONG(≒long long)がないプラットフォームでどうするか未定<br>
(1) 他のpack内エラーと同様にArgumentErrorでいいんじゃね?<br>
(2) 他のpack内エラーと区別するために別の例外であるべき<br>
(a) NotImplementedError<br>
(b) 新規例外クラス</li>
</ul>
<p>ということのようです。<br>
ぶっちゃけると、LONG_LONGがないコンパイラは現時点でサポートされてる気がしないので本当にどうでもいいのですが、どうせ誰も踏まないなら何でもいいわけなのでNotImplementedErrorで妥協したく思います。</p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=27152
2012-06-11T13:23:17Z
akr (Akira Tanaka)
akr@fsij.org
<ul></ul><p>2012年6月11日 10:38 usa (Usaku NAKAMURA) <a href="mailto:usa@garbagecollect.jp" class="email">usa@garbagecollect.jp</a>:</p>
<blockquote>
<ul>
<li>Q!、q!は必要か?<br>
→どうやら必要らしい(ユースケースがある)</li>
<li>問題点はなんぞ?<br>
→LONG_LONG(≒long long)がないプラットフォームでどうするか未定<br>
(1) 他のpack内エラーと同様にArgumentErrorでいいんじゃね?<br>
(2) 他のpack内エラーと区別するために別の例外であるべき<br>
(a) NotImplementedError<br>
(b) 新規例外クラス</li>
</ul>
<p>ということのようです。<br>
ぶっちゃけると、LONG_LONGがないコンパイラは現時点でサポートされてる気がしないので本当にどうでもいいのですが、どうせ誰も踏まないなら何でもいいわけなのでNotImplementedErrorで妥協したく思います。</p>
</blockquote>
<p>私が気になっている点は、LONG_LONG と long long の違いです。<br>
<a href="https://blade.ruby-lang.org/ruby-dev/42380">[ruby-dev:42380]</a> や <a href="/issues/3946">[ruby-dev:45216]</a> でも書きましたが、<br>
純粋に long long が存在する場合の機能であれば、賛成です。</p>
<p>しかし、「LONG_LONG(≒long long)」と書いてあることから、それらが同一視されており、<br>
LONG_LONG はあるが long long がない、というプラットフォームについて、<br>
Q!, q! が LONG_LONG として動作するのは、pack の他のものと異なり、<br>
Ruby の実装内部の定義が現れてしまっているのではないかと懸念しています。</p>
<h2>なお、例外については ArgumentError でも NotImplementedError でもかまいません。<br>
個人的には ArgumentError だろうと思っていました。</h2>
<p>[田中 哲][たなか あきら][Tanaka Akira]</p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=27155
2012-06-11T13:53:11Z
usa (Usaku NAKAMURA)
usa@garbagecollect.jp
<ul></ul><p>こんにちは、なかむら(う)です。</p>
<p>In message "<a href="/issues/3946">[ruby-dev:45716]</a> Re: [ruby-trunk - Feature <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: Array#packのqQ指定子に機種依存サイズフラグ!を追加 (Closed)" href="https://bugs.ruby-lang.org/issues/3946">#3946</a>] Array#packのqQ指定子に機種依存サイズフラグ!を追加"<br>
on Jun.11,2012 13:19:28, <a href="mailto:akr@fsij.org" class="email">akr@fsij.org</a> wrote:</p>
<blockquote>
<p>私が気になっている点は、LONG_LONG と long long の違いです。<br>
<a href="https://blade.ruby-lang.org/ruby-dev/42380">[ruby-dev:42380]</a> や <a href="/issues/3946">[ruby-dev:45216]</a> でも書きましたが、<br>
純粋に long long が存在する場合の機能であれば、賛成です。</p>
<p>しかし、「LONG_LONG(≒long long)」と書いてあることから、それらが同一視されており、<br>
LONG_LONG はあるが long long がない、というプラットフォームについて、<br>
Q!, q! が LONG_LONG として動作するのは、pack の他のものと異なり、<br>
Ruby の実装内部の定義が現れてしまっているのではないかと懸念しています。</p>
</blockquote>
<p>じゃあlong longの場合だけ定義でも別にいいです。<br>
(影響するのは古いVC++で、2.0では公式サポート外なので)</p>
<a name="それでは"></a>
<h2 >それでは。<a href="#それでは" class="wiki-anchor">¶</a></h2>
<p>U.Nakamura <a href="mailto:usa@garbagecollect.jp" class="email">usa@garbagecollect.jp</a></p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=31885
2012-10-28T23:11:07Z
akr (Akira Tanaka)
akr@fsij.org
<ul><li><strong>Target version</strong> changed from <i>2.0.0</i> to <i>2.6</i></li></ul><p>読み直してみましたが、決着していないのは例外をどれにするかでしょうか。</p>
<p>私は、新規の例外を定義するのは大げさ過ぎると思っています。<br>
ArgumentError と NotImplementedError のどちらにするかは、とくに意見はありません。</p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=38110
2013-04-02T20:53:12Z
akr (Akira Tanaka)
akr@fsij.org
<ul></ul><p>2012年10月28日 23:11 akr (Akira Tanaka) <a href="mailto:akr@fsij.org" class="email">akr@fsij.org</a>:</p>
<blockquote>
<p>読み直してみましたが、決着していないのは例外をどれにするかでしょうか。</p>
<p>私は、新規の例外を定義するのは大げさ過ぎると思っています。<br>
ArgumentError と NotImplementedError のどちらにするかは、とくに意見はありません。</p>
</blockquote>
<a name="ArgumentError-にして入れてみました"></a>
<h2 >ArgumentError にして入れてみました。<a href="#ArgumentError-にして入れてみました" class="wiki-anchor">¶</a></h2>
<p>[田中 哲][たなか あきら][Tanaka Akira]</p>
Ruby master - Feature #3946: Array#packのqQ指定子に機種依存サイズフラグ!を追加
https://bugs.ruby-lang.org/issues/3946?journal_id=38111
2013-04-02T21:06:48Z
akr (Akira Tanaka)
akr@fsij.org
<ul><li><strong>Status</strong> changed from <i>Assigned</i> to <i>Closed</i></li></ul><p>committed at r40067 & r40068.</p>