* [ruby-dev:51154] [Ruby master Feature#18573] Object#pack1
@ 2022-02-06 16:33 os (Shigeki OHARA)
2022-02-07 2:49 ` [ruby-dev:51155] " knu (Akinori MUSHA)
` (8 more replies)
0 siblings, 9 replies; 10+ messages in thread
From: os (Shigeki OHARA) @ 2022-02-06 16:33 UTC (permalink / raw)
To: ruby-dev
Issue #18573 has been reported by os (Shigeki OHARA).
----------------------------------------
Feature #18573: Object#pack1
https://bugs.ruby-lang.org/issues/18573
* Author: os (Shigeki OHARA)
* Status: Open
* Priority: Normal
----------------------------------------
# 概要
String#unpack1 の逆の Object#pack1 が欲しい。
# 背景
Array#pack というメソッドがありますが、レシーバーの Array の要素数が 1 つしかないことが良くあります。
``` ruby
[codepoint].pack('U')
[digest].pack('m0')
[mail_body].pack('M')
[ip_address].pack('N')
```
標準添付ライブラリーなどを眺めてみてもチラホラあるようです。
ですが、このようなケースで変換対象のオブジェクトをわざわざ Array でくるまなくてはいけないというのは面倒な気もします。
# 提案
String#unpack に対して String#unpack1 というメソッドがありますが、
Array#pack に対する Object#pack1 というメソッドを提案します。
イメージとしては以下のコードのような感じです。
``` ruby
class Object
def pack1(template, option = {})
[self].pack(template, **option)
end
end
```
# 議論・課題
* Object で良いかどうかは議論の余地があろうかと思います
* メソッド名が pack1 で良いかはわかりませんが、他とかぶる可能性は低いかと思います
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 10+ messages in thread
* [ruby-dev:51155] [Ruby master Feature#18573] Object#pack1
2022-02-06 16:33 [ruby-dev:51154] [Ruby master Feature#18573] Object#pack1 os (Shigeki OHARA)
@ 2022-02-07 2:49 ` knu (Akinori MUSHA)
2022-02-07 3:02 ` [ruby-dev:51156] " knu (Akinori MUSHA)
` (7 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: knu (Akinori MUSHA) @ 2022-02-07 2:49 UTC (permalink / raw)
To: ruby-dev
Issue #18573 has been updated by knu (Akinori MUSHA).
packしたいもの(のclass)はすごく限定的なので、Objectに生やすのはどうかなあと思いました。
----------------------------------------
Feature #18573: Object#pack1
https://bugs.ruby-lang.org/issues/18573#change-96398
* Author: os (Shigeki OHARA)
* Status: Open
* Priority: Normal
----------------------------------------
# 概要
String#unpack1 の逆の Object#pack1 が欲しい。
# 背景
Array#pack というメソッドがありますが、レシーバーの Array の要素数が 1 つしかないことが良くあります。
``` ruby
[codepoint].pack('U')
[digest].pack('m0')
[mail_body].pack('M')
[ip_address].pack('N')
```
標準添付ライブラリーなどを眺めてみてもチラホラあるようです。
ですが、このようなケースで変換対象のオブジェクトをわざわざ Array でくるまなくてはいけないというのは面倒な気もします。
# 提案
String#unpack に対して String#unpack1 というメソッドがありますが、
Array#pack に対する Object#pack1 というメソッドを提案します。
イメージとしては以下のコードのような感じです。
``` ruby
class Object
def pack1(template, option = {})
[self].pack(template, **option)
end
end
```
# 議論・課題
* Object で良いかどうかは議論の余地があろうかと思います
* メソッド名が pack1 で良いかはわかりませんが、他とかぶる可能性は低いかと思います
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 10+ messages in thread
* [ruby-dev:51156] [Ruby master Feature#18573] Object#pack1
2022-02-06 16:33 [ruby-dev:51154] [Ruby master Feature#18573] Object#pack1 os (Shigeki OHARA)
2022-02-07 2:49 ` [ruby-dev:51155] " knu (Akinori MUSHA)
@ 2022-02-07 3:02 ` knu (Akinori MUSHA)
2022-02-07 3:19 ` [ruby-dev:51157] " knu (Akinori MUSHA)
` (6 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: knu (Akinori MUSHA) @ 2022-02-07 3:02 UTC (permalink / raw)
To: ruby-dev
Issue #18573 has been updated by knu (Akinori MUSHA).
String#format / String#% のような感じで書式の方をレシーバにする方がよさそうですが、unpackとの対称性を考えると名前が難しいかも。
----------------------------------------
Feature #18573: Object#pack1
https://bugs.ruby-lang.org/issues/18573#change-96400
* Author: os (Shigeki OHARA)
* Status: Open
* Priority: Normal
----------------------------------------
# 概要
String#unpack1 の逆の Object#pack1 が欲しい。
# 背景
Array#pack というメソッドがありますが、レシーバーの Array の要素数が 1 つしかないことが良くあります。
``` ruby
[codepoint].pack('U')
[digest].pack('m0')
[mail_body].pack('M')
[ip_address].pack('N')
```
標準添付ライブラリーなどを眺めてみてもチラホラあるようです。
ですが、このようなケースで変換対象のオブジェクトをわざわざ Array でくるまなくてはいけないというのは面倒な気もします。
# 提案
String#unpack に対して String#unpack1 というメソッドがありますが、
Array#pack に対する Object#pack1 というメソッドを提案します。
イメージとしては以下のコードのような感じです。
``` ruby
class Object
def pack1(template, option = {})
[self].pack(template, **option)
end
end
```
# 議論・課題
* Object で良いかどうかは議論の余地があろうかと思います
* メソッド名が pack1 で良いかはわかりませんが、他とかぶる可能性は低いかと思います
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 10+ messages in thread
* [ruby-dev:51157] [Ruby master Feature#18573] Object#pack1
2022-02-06 16:33 [ruby-dev:51154] [Ruby master Feature#18573] Object#pack1 os (Shigeki OHARA)
2022-02-07 2:49 ` [ruby-dev:51155] " knu (Akinori MUSHA)
2022-02-07 3:02 ` [ruby-dev:51156] " knu (Akinori MUSHA)
@ 2022-02-07 3:19 ` knu (Akinori MUSHA)
2022-02-08 8:51 ` [ruby-dev:51158] " byroot (Jean Boussier)
` (5 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: knu (Akinori MUSHA) @ 2022-02-07 3:19 UTC (permalink / raw)
To: ruby-dev
Issue #18573 has been updated by knu (Akinori MUSHA).
今日のOffice Hourで話したんですが、レシーバごとにそれにふさわしい書式って限定されるはずなので、何でも屋のpackではなく、たとえばIntegerならビット幅とエンディアンを指定してバイナリ表現を得るメソッド、StringならNUL-terminatedなバイナリを得るメソッド、などをそれぞれ用意すべきかも、と思いました。
----------------------------------------
Feature #18573: Object#pack1
https://bugs.ruby-lang.org/issues/18573#change-96401
* Author: os (Shigeki OHARA)
* Status: Open
* Priority: Normal
----------------------------------------
# 概要
String#unpack1 の逆の Object#pack1 が欲しい。
# 背景
Array#pack というメソッドがありますが、レシーバーの Array の要素数が 1 つしかないことが良くあります。
``` ruby
[codepoint].pack('U')
[digest].pack('m0')
[mail_body].pack('M')
[ip_address].pack('N')
```
標準添付ライブラリーなどを眺めてみてもチラホラあるようです。
ですが、このようなケースで変換対象のオブジェクトをわざわざ Array でくるまなくてはいけないというのは面倒な気もします。
# 提案
String#unpack に対して String#unpack1 というメソッドがありますが、
Array#pack に対する Object#pack1 というメソッドを提案します。
イメージとしては以下のコードのような感じです。
``` ruby
class Object
def pack1(template, option = {})
[self].pack(template, **option)
end
end
```
# 議論・課題
* Object で良いかどうかは議論の余地があろうかと思います
* メソッド名が pack1 で良いかはわかりませんが、他とかぶる可能性は低いかと思います
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 10+ messages in thread
* [ruby-dev:51158] [Ruby master Feature#18573] Object#pack1
2022-02-06 16:33 [ruby-dev:51154] [Ruby master Feature#18573] Object#pack1 os (Shigeki OHARA)
` (2 preceding siblings ...)
2022-02-07 3:19 ` [ruby-dev:51157] " knu (Akinori MUSHA)
@ 2022-02-08 8:51 ` byroot (Jean Boussier)
2023-10-05 21:21 ` [ruby-dev:52050] " jeremyevans0 (Jeremy Evans) via ruby-dev
` (4 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: byroot (Jean Boussier) @ 2022-02-08 8:51 UTC (permalink / raw)
To: ruby-dev
Issue #18573 has been updated by byroot (Jean Boussier).
(using Google Translate to understand the discussion, sorry if I misunderstood or missed things).
Since `Object#pack1` might be deemed a bit too invasive, an alternative could be `String.pack1(format, arg)`, or even `String.pack(format, *args)`.
----------------------------------------
Feature #18573: Object#pack1
https://bugs.ruby-lang.org/issues/18573#change-96419
* Author: os (Shigeki OHARA)
* Status: Open
* Priority: Normal
----------------------------------------
# 概要
String#unpack1 の逆の Object#pack1 が欲しい。
# 背景
Array#pack というメソッドがありますが、レシーバーの Array の要素数が 1 つしかないことが良くあります。
``` ruby
[codepoint].pack('U')
[digest].pack('m0')
[mail_body].pack('M')
[ip_address].pack('N')
```
標準添付ライブラリーなどを眺めてみてもチラホラあるようです。
ですが、このようなケースで変換対象のオブジェクトをわざわざ Array でくるまなくてはいけないというのは面倒な気もします。
# 提案
String#unpack に対して String#unpack1 というメソッドがありますが、
Array#pack に対する Object#pack1 というメソッドを提案します。
イメージとしては以下のコードのような感じです。
``` ruby
class Object
def pack1(template, option = {})
[self].pack(template, **option)
end
end
```
# 議論・課題
* Object で良いかどうかは議論の余地があろうかと思います
* メソッド名が pack1 で良いかはわかりませんが、他とかぶる可能性は低いかと思います
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 10+ messages in thread
* [ruby-dev:52050] [Ruby master Feature#18573] Object#pack1
2022-02-06 16:33 [ruby-dev:51154] [Ruby master Feature#18573] Object#pack1 os (Shigeki OHARA)
` (3 preceding siblings ...)
2022-02-08 8:51 ` [ruby-dev:51158] " byroot (Jean Boussier)
@ 2023-10-05 21:21 ` jeremyevans0 (Jeremy Evans) via ruby-dev
2023-10-06 14:12 ` [ruby-dev:52051] " Eregon (Benoit Daloze) via ruby-dev
` (3 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: jeremyevans0 (Jeremy Evans) via ruby-dev @ 2023-10-05 21:21 UTC (permalink / raw)
To: ruby-dev; +Cc: jeremyevans0 (Jeremy Evans)
Issue #18573 has been updated by jeremyevans0 (Jeremy Evans).
I developed a patch for this that implemented the feature using `Array.pack1` and was going to create a new feature request for it, but I'm glad to see there already is an existing feature request for it. Here's my pull request for it: https://github.com/ruby/ruby/pull/8598
----------------------------------------
Feature #18573: Object#pack1
https://bugs.ruby-lang.org/issues/18573#change-104824
* Author: os (Shigeki OHARA)
* Status: Open
* Priority: Normal
----------------------------------------
# 概要
String#unpack1 の逆の Object#pack1 が欲しい。
# 背景
Array#pack というメソッドがありますが、レシーバーの Array の要素数が 1 つしかないことが良くあります。
``` ruby
[codepoint].pack('U')
[digest].pack('m0')
[mail_body].pack('M')
[ip_address].pack('N')
```
標準添付ライブラリーなどを眺めてみてもチラホラあるようです。
ですが、このようなケースで変換対象のオブジェクトをわざわざ Array でくるまなくてはいけないというのは面倒な気もします。
# 提案
String#unpack に対して String#unpack1 というメソッドがありますが、
Array#pack に対する Object#pack1 というメソッドを提案します。
イメージとしては以下のコードのような感じです。
``` ruby
class Object
def pack1(template, option = {})
[self].pack(template, **option)
end
end
```
# 議論・課題
* Object で良いかどうかは議論の余地があろうかと思います
* メソッド名が pack1 で良いかはわかりませんが、他とかぶる可能性は低いかと思います
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 10+ messages in thread
* [ruby-dev:52051] [Ruby master Feature#18573] Object#pack1
2022-02-06 16:33 [ruby-dev:51154] [Ruby master Feature#18573] Object#pack1 os (Shigeki OHARA)
` (4 preceding siblings ...)
2023-10-05 21:21 ` [ruby-dev:52050] " jeremyevans0 (Jeremy Evans) via ruby-dev
@ 2023-10-06 14:12 ` Eregon (Benoit Daloze) via ruby-dev
2023-10-12 4:21 ` [ruby-dev:52052] " matz (Yukihiro Matsumoto) via ruby-dev
` (2 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Eregon (Benoit Daloze) via ruby-dev @ 2023-10-06 14:12 UTC (permalink / raw)
To: ruby-dev; +Cc: Eregon (Benoit Daloze)
Issue #18573 has been updated by Eregon (Benoit Daloze).
`Array.pack1(obj, format) -> String` sounds weird since there is nothing about Array in there.
I think `String.pack1(format, obj)` is the best option.
(`String#pack1(obj)` is confusing because of existing `Array#pack(format)` which has the reverse order).
(IMO this is something a JIT should optimize but I understand that's hard on CRuby).
----------------------------------------
Feature #18573: Object#pack1
https://bugs.ruby-lang.org/issues/18573#change-104830
* Author: os (Shigeki OHARA)
* Status: Open
* Priority: Normal
----------------------------------------
# 概要
String#unpack1 の逆の Object#pack1 が欲しい。
# 背景
Array#pack というメソッドがありますが、レシーバーの Array の要素数が 1 つしかないことが良くあります。
``` ruby
[codepoint].pack('U')
[digest].pack('m0')
[mail_body].pack('M')
[ip_address].pack('N')
```
標準添付ライブラリーなどを眺めてみてもチラホラあるようです。
ですが、このようなケースで変換対象のオブジェクトをわざわざ Array でくるまなくてはいけないというのは面倒な気もします。
# 提案
String#unpack に対して String#unpack1 というメソッドがありますが、
Array#pack に対する Object#pack1 というメソッドを提案します。
イメージとしては以下のコードのような感じです。
``` ruby
class Object
def pack1(template, option = {})
[self].pack(template, **option)
end
end
```
# 議論・課題
* Object で良いかどうかは議論の余地があろうかと思います
* メソッド名が pack1 で良いかはわかりませんが、他とかぶる可能性は低いかと思います
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 10+ messages in thread
* [ruby-dev:52052] [Ruby master Feature#18573] Object#pack1
2022-02-06 16:33 [ruby-dev:51154] [Ruby master Feature#18573] Object#pack1 os (Shigeki OHARA)
` (5 preceding siblings ...)
2023-10-06 14:12 ` [ruby-dev:52051] " Eregon (Benoit Daloze) via ruby-dev
@ 2023-10-12 4:21 ` matz (Yukihiro Matsumoto) via ruby-dev
2023-10-12 19:11 ` [ruby-dev:52053] " tenderlovemaking (Aaron Patterson) via ruby-dev
2023-10-13 13:00 ` [ruby-dev:52054] " mame (Yusuke Endoh) via ruby-dev
8 siblings, 0 replies; 10+ messages in thread
From: matz (Yukihiro Matsumoto) via ruby-dev @ 2023-10-12 4:21 UTC (permalink / raw)
To: ruby-dev; +Cc: matz (Yukihiro Matsumoto)
Issue #18573 has been updated by matz (Yukihiro Matsumoto).
Array.pack1 is unlikely because there is no connection between the responsibilities of the method and the Array class. I also disagree with String.pack1 for the same reason.
The most natural candidate is Object#pack1, but I question the need to pollute the namespace for this trivial method.
Matz.
----------------------------------------
Feature #18573: Object#pack1
https://bugs.ruby-lang.org/issues/18573#change-104876
* Author: os (Shigeki OHARA)
* Status: Open
* Priority: Normal
----------------------------------------
# 概要
String#unpack1 の逆の Object#pack1 が欲しい。
# 背景
Array#pack というメソッドがありますが、レシーバーの Array の要素数が 1 つしかないことが良くあります。
``` ruby
[codepoint].pack('U')
[digest].pack('m0')
[mail_body].pack('M')
[ip_address].pack('N')
```
標準添付ライブラリーなどを眺めてみてもチラホラあるようです。
ですが、このようなケースで変換対象のオブジェクトをわざわざ Array でくるまなくてはいけないというのは面倒な気もします。
# 提案
String#unpack に対して String#unpack1 というメソッドがありますが、
Array#pack に対する Object#pack1 というメソッドを提案します。
イメージとしては以下のコードのような感じです。
``` ruby
class Object
def pack1(template, option = {})
[self].pack(template, **option)
end
end
```
# 議論・課題
* Object で良いかどうかは議論の余地があろうかと思います
* メソッド名が pack1 で良いかはわかりませんが、他とかぶる可能性は低いかと思います
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 10+ messages in thread
* [ruby-dev:52053] [Ruby master Feature#18573] Object#pack1
2022-02-06 16:33 [ruby-dev:51154] [Ruby master Feature#18573] Object#pack1 os (Shigeki OHARA)
` (6 preceding siblings ...)
2023-10-12 4:21 ` [ruby-dev:52052] " matz (Yukihiro Matsumoto) via ruby-dev
@ 2023-10-12 19:11 ` tenderlovemaking (Aaron Patterson) via ruby-dev
2023-10-13 13:00 ` [ruby-dev:52054] " mame (Yusuke Endoh) via ruby-dev
8 siblings, 0 replies; 10+ messages in thread
From: tenderlovemaking (Aaron Patterson) via ruby-dev @ 2023-10-12 19:11 UTC (permalink / raw)
To: ruby-dev; +Cc: tenderlovemaking (Aaron Patterson)
Issue #18573 has been updated by tenderlovemaking (Aaron Patterson).
matz (Yukihiro Matsumoto) wrote in #note-7:
> Array.pack1 is unlikely because there is no connection between the responsibilities of the method and the Array class. I also disagree with String.pack1 for the same reason.
> The most natural candidate is Object#pack1, but I question the need to pollute the namespace for this trivial method.
>
> Matz.
Feature #18897 introduced a specialized instruction for Array#hash, but it created a new instruction called `opt_newarray_send`. I think we could leverage that instruction for the case of an array literal + pack. That would avoid the array creation. I will try to make a patch.
----------------------------------------
Feature #18573: Object#pack1
https://bugs.ruby-lang.org/issues/18573#change-104894
* Author: os (Shigeki OHARA)
* Status: Open
* Priority: Normal
----------------------------------------
# 概要
String#unpack1 の逆の Object#pack1 が欲しい。
# 背景
Array#pack というメソッドがありますが、レシーバーの Array の要素数が 1 つしかないことが良くあります。
``` ruby
[codepoint].pack('U')
[digest].pack('m0')
[mail_body].pack('M')
[ip_address].pack('N')
```
標準添付ライブラリーなどを眺めてみてもチラホラあるようです。
ですが、このようなケースで変換対象のオブジェクトをわざわざ Array でくるまなくてはいけないというのは面倒な気もします。
# 提案
String#unpack に対して String#unpack1 というメソッドがありますが、
Array#pack に対する Object#pack1 というメソッドを提案します。
イメージとしては以下のコードのような感じです。
``` ruby
class Object
def pack1(template, option = {})
[self].pack(template, **option)
end
end
```
# 議論・課題
* Object で良いかどうかは議論の余地があろうかと思います
* メソッド名が pack1 で良いかはわかりませんが、他とかぶる可能性は低いかと思います
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 10+ messages in thread
* [ruby-dev:52054] [Ruby master Feature#18573] Object#pack1
2022-02-06 16:33 [ruby-dev:51154] [Ruby master Feature#18573] Object#pack1 os (Shigeki OHARA)
` (7 preceding siblings ...)
2023-10-12 19:11 ` [ruby-dev:52053] " tenderlovemaking (Aaron Patterson) via ruby-dev
@ 2023-10-13 13:00 ` mame (Yusuke Endoh) via ruby-dev
8 siblings, 0 replies; 10+ messages in thread
From: mame (Yusuke Endoh) via ruby-dev @ 2023-10-13 13:00 UTC (permalink / raw)
To: ruby-dev; +Cc: mame (Yusuke Endoh)
Issue #18573 has been updated by mame (Yusuke Endoh).
If we introduce a new method for this, I think it would be better to design a more descriptive API instead of reusing a hacky pack format directive, such as `0x1234.to_binary_string(4, endian: :big) #=> "\x00\x00\x12\x34"`.
----------------------------------------
Feature #18573: Object#pack1
https://bugs.ruby-lang.org/issues/18573#change-104913
* Author: os (Shigeki OHARA)
* Status: Open
* Priority: Normal
----------------------------------------
# 概要
String#unpack1 の逆の Object#pack1 が欲しい。
# 背景
Array#pack というメソッドがありますが、レシーバーの Array の要素数が 1 つしかないことが良くあります。
``` ruby
[codepoint].pack('U')
[digest].pack('m0')
[mail_body].pack('M')
[ip_address].pack('N')
```
標準添付ライブラリーなどを眺めてみてもチラホラあるようです。
ですが、このようなケースで変換対象のオブジェクトをわざわざ Array でくるまなくてはいけないというのは面倒な気もします。
# 提案
String#unpack に対して String#unpack1 というメソッドがありますが、
Array#pack に対する Object#pack1 というメソッドを提案します。
イメージとしては以下のコードのような感じです。
``` ruby
class Object
def pack1(template, option = {})
[self].pack(template, **option)
end
end
```
# 議論・課題
* Object で良いかどうかは議論の余地があろうかと思います
* メソッド名が pack1 で良いかはわかりませんが、他とかぶる可能性は低いかと思います
--
https://bugs.ruby-lang.org/
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2023-10-13 13:01 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-06 16:33 [ruby-dev:51154] [Ruby master Feature#18573] Object#pack1 os (Shigeki OHARA)
2022-02-07 2:49 ` [ruby-dev:51155] " knu (Akinori MUSHA)
2022-02-07 3:02 ` [ruby-dev:51156] " knu (Akinori MUSHA)
2022-02-07 3:19 ` [ruby-dev:51157] " knu (Akinori MUSHA)
2022-02-08 8:51 ` [ruby-dev:51158] " byroot (Jean Boussier)
2023-10-05 21:21 ` [ruby-dev:52050] " jeremyevans0 (Jeremy Evans) via ruby-dev
2023-10-06 14:12 ` [ruby-dev:52051] " Eregon (Benoit Daloze) via ruby-dev
2023-10-12 4:21 ` [ruby-dev:52052] " matz (Yukihiro Matsumoto) via ruby-dev
2023-10-12 19:11 ` [ruby-dev:52053] " tenderlovemaking (Aaron Patterson) via ruby-dev
2023-10-13 13:00 ` [ruby-dev:52054] " mame (Yusuke Endoh) via ruby-dev
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).