https://redmine.ruby-lang.org/
https://redmine.ruby-lang.org/favicon.ico?1711330511
2010-10-14T18:08:41Z
Ruby Issue Tracking System
Ruby master - Feature #3947: Array#packのにエンディアン指定修飾子</>を追加
https://redmine.ruby-lang.org/issues/3947?journal_id=13728
2010-10-14T18:08:41Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<ul></ul><p>=begin<br>
まつもと ゆきひろです</p>
<p>In message "Re: <a href="/issues/3947">[ruby-dev:42376]</a> [Ruby 1.9-Feature#3947][Open] Array#packのにエンディアン指定修飾子</>を追加"<br>
on Thu, 14 Oct 2010 15:46:44 +0900, Yui NARUSE <a href="mailto:redmine@ruby-lang.org" class="email">redmine@ruby-lang.org</a> writes:</p>
<p>|さて、pack のようにバイト列を扱う場合、しばしば問題になるのがエンディアンです。<br>
|ここで、Ruby の Array#pack は 16bit/32bit 固定の整数に対してはエンディアン固定の<br>
|n/N/v/V 指定子を用意していますが、short/int/long/long long のように、<br>
|マシン依存の型をエンディアン固定で pack する手段を提供していません。<br>
|というわけで、これが欲しいです。<br>
|<br>
|ここで問題になるのがどのように指定するかなのですが、pack のネタ元である Perl さんでは既に </> 修飾子を<br>
|この目的のために提供しています。<br>
|<a href="http://perldoc.perl.org/functions/pack.html" class="external">http://perldoc.perl.org/functions/pack.html</a><br>
|というわけで、これに追従するのがよろしいと思います。<br>
|<br>
| > sSiIlLqQ Force big-endian byte-order on the type.<br>
| jJfFdDpP (The "big end" touches the construct.)<br>
| < sSiIlLqQ Force little-endian byte-order on the type.<br>
| jJfFdDpP (The "little end" touches the construct.)</p>
<p>賛成します。</p>
<p>=end</p>
Ruby master - Feature #3947: Array#packのにエンディアン指定修飾子</>を追加
https://redmine.ruby-lang.org/issues/3947?journal_id=13735
2010-10-14T21:29:55Z
akr (Akira Tanaka)
akr@fsij.org
<ul></ul><p>=begin<br>
2010年10月14日15:46 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のにエンディアン指定修飾子</>を追加 (Closed)" href="https://redmine.ruby-lang.org/issues/3947">#3947</a>: Array#packのにエンディアン指定修飾子</>を追加<br>
<a href="http://redmine.ruby-lang.org/issues/show/3947" class="external">http://redmine.ruby-lang.org/issues/show/3947</a></p>
<p>起票者: Yui NARUSE<br>
ステータス: Open, 優先度: Normal<br>
Target version: 1.9.3</p>
<p>Ruby の伏魔殿 Array#pack ですが、機種依存な部分をいじる際にはしばしば強力かつ唯一の手段になる事があります。<br>
具体的には RubySpec 書く時とか。</p>
<p>さて、pack のようにバイト列を扱う場合、しばしば問題になるのがエンディアンです。<br>
ここで、Ruby の Array#pack は 16bit/32bit 固定の整数に対してはエンディアン固定の<br>
n/N/v/V 指定子を用意していますが、short/int/long/long long のように、<br>
マシン依存の型をエンディアン固定で pack する手段を提供していません。<br>
というわけで、これが欲しいです。</p>
<p>ここで問題になるのがどのように指定するかなのですが、pack のネタ元である Perl さんでは既に </> 修飾子を<br>
この目的のために提供しています。<br>
<a href="http://perldoc.perl.org/functions/pack.html" class="external">http://perldoc.perl.org/functions/pack.html</a><br>
というわけで、これに追従するのがよろしいと思います。</p>
</blockquote>
<h2>
<a href="http://redmine.ruby-lang.org/issues/show/3491" class="external">http://redmine.ruby-lang.org/issues/show/3491</a> によく似ている?</h2>
<p>[田中 哲][たなか あきら][Tanaka Akira]</p>
<p>=end</p>
Ruby master - Feature #3947: Array#packのにエンディアン指定修飾子</>を追加
https://redmine.ruby-lang.org/issues/3947?journal_id=13736
2010-10-14T21:36:32Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul></ul><p>=begin<br>
たしかに <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: Pack missing directives for signed types with specified byte-order (Closed)" href="https://redmine.ruby-lang.org/issues/3491">#3491</a> と重複しているようなしていないような。<br>
見落としていました、ありがとうございます。</p>
<p>なお、signed とか型の大きさ可搬性絡みは、1.9 になるときに Perl を参考にしつつ<br>
もっぱら rdoc の整備という形で再定義されたと理解しています、<br>
という話を後で英語でも書きます。<br>
=end</p>
Ruby master - Feature #3947: Array#packのにエンディアン指定修飾子</>を追加
https://redmine.ruby-lang.org/issues/3947?journal_id=13737
2010-10-14T22: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 r29496.<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 #3947: Array#packのにエンディアン指定修飾子</>を追加
https://redmine.ruby-lang.org/issues/3947?journal_id=13743
2010-10-15T08:02:12Z
akr (Akira Tanaka)
akr@fsij.org
<ul></ul><p>=begin<br>
2010年10月14日21:36 Yui NARUSE <a href="mailto:redmine@ruby-lang.org" class="email">redmine@ruby-lang.org</a>:</p>
<blockquote>
<p>なお、signed とか型の大きさ可搬性絡みは、1.9 になるときに Perl を参考にしつつ<br>
もっぱら rdoc の整備という形で再定義されたと理解しています、<br>
という話を後で英語でも書きます。</p>
</blockquote>
<p>私が整理したのはもっと後だったと思いますが。</p>
<p>なお、私としては、l! などを個々に記述して、対応する C の型を<br>
それぞれに書いたのは、そちらのほうがわかりやすいだろうという思いがありました。</p>
<a name="あとi-I-の記述が消えていますね"></a>
<h2 >あと、i, I の記述が消えていますね。<a href="#あとi-I-の記述が消えていますね" class="wiki-anchor">¶</a></h2>
<p>[田中 哲][たなか あきら][Tanaka Akira]</p>
<p>=end</p>
Ruby master - Feature #3947: Array#packのにエンディアン指定修飾子</>を追加
https://redmine.ruby-lang.org/issues/3947?journal_id=13747
2010-10-15T16:35:13Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul></ul><p>=begin<br>
2010年10月15日8:01 Tanaka Akira <a href="mailto:akr@fsij.org" class="email">akr@fsij.org</a>:</p>
<blockquote>
<p>2010年10月14日21:36 Yui NARUSE <a href="mailto:redmine@ruby-lang.org" class="email">redmine@ruby-lang.org</a>:</p>
<blockquote>
<p>なお、signed とか型の大きさ可搬性絡みは、1.9 になるときに Perl を参考にしつつ<br>
もっぱら rdoc の整備という形で再定義されたと理解しています、<br>
という話を後で英語でも書きます。</p>
</blockquote>
<p>私が整理したのはもっと後だったと思いますが。</p>
</blockquote>
<p>そういえば去年か今年あたりでしたっけか。</p>
<blockquote>
<p>なお、私としては、l! などを個々に記述して、対応する C の型を<br>
それぞれに書いたのは、そちらのほうがわかりやすいだろうという思いがありました。</p>
</blockquote>
<p><, > を追加すると組み合わせが増えるので別に書いた方がわかりやすいと思ったので変えました。</p>
<blockquote>
<p>あと、i, I の記述が消えていますね。</p>
</blockquote>
<p>が、i, I を追加しようとすると別だといまいち綺麗にならない事を理解したので、<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 #3947: Array#packのにエンディアン指定修飾子</>を追加
https://redmine.ruby-lang.org/issues/3947?journal_id=13755
2010-10-15T18:43:52Z
akr (Akira Tanaka)
akr@fsij.org
<ul></ul><p>=begin<br>
2010年10月15日16:35 NARUSE, Yui <a href="mailto:naruse@airemix.jp" class="email">naruse@airemix.jp</a>:</p>
<blockquote>
<blockquote>
<p>なお、私としては、l! などを個々に記述して、対応する C の型を<br>
それぞれに書いたのは、そちらのほうがわかりやすいだろうという思いがありました。</p>
</blockquote>
<p><, > を追加すると組み合わせが増えるので別に書いた方がわかりやすいと思ったので変えました。</p>
<blockquote>
<p>あと、i, I の記述が消えていますね。</p>
</blockquote>
<p>が、i, I を追加しようとすると別だといまいち綺麗にならない事を理解したので、<br>
それぞれ書くように戻しました。</p>
</blockquote>
<p>えぇ、組み合わせ的に増えていくのを全部書くのが良くないというのもわかるのです。</p>
<p>読むのも大変ですし、全体の機能を把握するのも困難です。<br>
また、書き間違えることもあります。<br>
(実際、s!>, l!>, q!> のところはおかしいですね。)</p>
<p>でも、具体的に指定する方法が書いてあると、<br>
pack の玄人以外にとってわかりやすく便利なのだという確信もあります。<br>
常に任意の組み合わせができるわけではありませんし。</p>
<p>というわけでこんなでどうですかね。</p>
<h1>% svn diff --diff-cmd diff -x '-u -p' pack.c<br>
Index: pack.c</h1>
<p>--- pack.c (revision 29504)<br>
+++ pack.c (working copy)<br>
@@ -338,37 +338,19 @@ static unsigned long utf8_to_uv(const ch</p>
<ul>
<li>
<pre><code> i, i_, i! | Integer | signed int, native endian
</code></pre>
</li>
<li>
<pre><code> l_, l! | Integer | signed long, native endian
</code></pre>
</li>
<li>
<pre><code> | |
</code></pre>
</li>
</ul>
<ul>
<li>
<ul>
<li>
<pre><code> S> | Integer | 16-bit unsigned, big endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> L> | Integer | 32-bit unsigned, big endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> Q> | Integer | 64-bit unsigned, big endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> s> | Integer | 16-bit signed, big endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> l> | Integer | 32-bit signed, big endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> q> | Integer | 64-bit signed, big endian
</code></pre>
</li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li>
<pre><code> S> L> Q> | Integer | same as the directives without ">" except
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> s> l> q> | | big endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> S!> I!> | |
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> L!> Q!> | |
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> s!> i!> | |
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> l!> q!> | |
</code></pre>
</li>
<li>
<pre><code> | |
</code></pre>
</li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li>
<pre><code> S< | Integer | 16-bit unsigned, little endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> L< | Integer | 32-bit unsigned, little endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> Q< | Integer | 64-bit unsigned, little endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> s< | Integer | 16-bit signed, little endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> l< | Integer | 32-bit signed, little endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> q< | Integer | 64-bit signed, little endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> | |
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> S!> | Integer | unsigned short, big endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> I!> | Integer | unsigned int, big endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> L!> | Integer | unsigned long, big endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> Q!> | Integer | unsigned long long, big endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> s!> | Integer | signed, big endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> i!> | Integer | signed int, big endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> l!> | Integer | signed, big endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> q!> | Integer | signed, big endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> | |
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> S!< | Integer | unsigned short, little endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> I!< | Integer | unsigned int, little endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> L!< | Integer | unsigned long, little endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> Q!< | Integer | unsigned long long, little endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> s!< | Integer | signed short, little endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> i!< | Integer | signed int, little endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> l!< | Integer | signed long, little endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> q!< | Integer | signed long long, little endian
</code></pre>
</li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li>
<pre><code> S< L< Q< | Integer | same as the directives without "<" except
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> s< l< q< | | little endian
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> S!< I!< | |
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> L!< Q!< | |
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> s!< i!< | |
</code></pre>
</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> l!< q!< | |
</code></pre>
</li>
<li>
<pre><code> | |
</code></pre>
</li>
<li>
<pre><code> n | Integer | 16-bit unsigned, network (big-endian) byte order
</code></pre>
</li>
<li>
<pre><code> N | Integer | 32-bit unsigned, network (big-endian) byte order
</code></pre>
</li>
</ul>
</li>
</ul>
<p>--<br>
[田中 哲][たなか あきら][Tanaka Akira]</p>
<p>=end</p>
Ruby master - Feature #3947: Array#packのにエンディアン指定修飾子</>を追加
https://redmine.ruby-lang.org/issues/3947?journal_id=13756
2010-10-15T19:09:47Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul></ul><p>=begin<br>
2010年10月15日18:43 Tanaka Akira <a href="mailto:akr@fsij.org" class="email">akr@fsij.org</a>:</p>
<blockquote>
<p>2010年10月15日16:35 NARUSE, Yui <a href="mailto:naruse@airemix.jp" class="email">naruse@airemix.jp</a>:</p>
<blockquote>
<blockquote>
<p>なお、私としては、l! などを個々に記述して、対応する C の型を<br>
それぞれに書いたのは、そちらのほうがわかりやすいだろうという思いがありました。</p>
</blockquote>
<p><, > を追加すると組み合わせが増えるので別に書いた方がわかりやすいと思ったので変えました。</p>
<blockquote>
<p>あと、i, I の記述が消えていますね。</p>
</blockquote>
<p>が、i, I を追加しようとすると別だといまいち綺麗にならない事を理解したので、<br>
それぞれ書くように戻しました。</p>
</blockquote>
<p>えぇ、組み合わせ的に増えていくのを全部書くのが良くないというのもわかるのです。</p>
<p>読むのも大変ですし、全体の機能を把握するのも困難です。<br>
また、書き間違えることもあります。<br>
(実際、s!>, l!>, q!> のところはおかしいですね。)</p>
</blockquote>
<p>おぉ、たしかに。</p>
<blockquote>
<p>でも、具体的に指定する方法が書いてあると、<br>
pack の玄人以外にとってわかりやすく便利なのだという確信もあります。<br>
常に任意の組み合わせができるわけではありませんし。</p>
<p>というわけでこんなでどうですかね。</p>
<p>% svn diff --diff-cmd diff -x '-u -p' pack.c<br>
略</p>
</blockquote>
<p>なるほど、良いのではないかと思います。<br>
コミットお願いします。</p>
<p>--<br>
NARUSE, Yui<br>
<a href="mailto:naruse@airemix.jp" class="email">naruse@airemix.jp</a></p>
<p>=end</p>