Feature #16994
closed
Updated by marcandre (Marc-Andre Lafortune) almost 5 years ago
- Related to : Sets: need ♥️ added
Updated by Dan0042 (Daniel DeLorme) almost 5 years ago
+1
I think this is more important than having a general Set syntax as discussed in . Being able to use %ws[foo bar].include?(str)
is a double-plus of not creating a new object each time and having O(1) efficiency.
Updated by Dan0042 (Daniel DeLorme) almost 5 years ago
I just thought of something...
In the same way that "str".freeze
is optimized to be deduplicated, %w[a b].include?(obj)
could be optimized so it becomes equivalent to obj == -"a" || obj == -"b"
, or something around those lines. This would have the advantage that all existing ruby code that uses this pattern would automatically become faster, without having to convert to a new literal syntax.
Updated by Eregon (Benoit Daloze) almost 5 years ago
Dan0042 (Daniel DeLorme) wrote in #note-3:
I just thought of something...
In the same way that"str".freeze
is optimized to be deduplicated,%w[a b].include?(obj)
could be optimized so it becomes equivalent toobj == -"a" || obj == -"b"
, or something around those lines.
That already works on TruffleRuby (and for more than this specific case), it needs a JIT, inlining (also through builtins like #include?) and escape analysis.
Updated by matz (Yukihiro Matsumoto) over 4 years ago
- Status changed from Open to Feedback
We are going to introduce built-in set, but not in 3.0 (too little time to implement it before 3.0 release).
After merging built-in set, we will seriously consider this proposal.
Remaining issues:
- Name?
%ws
would be the first two character specifier after%
. Is it reasonable? Or should we seek another name? - Frozen?
%w
returns non frozen array of non frozen strings. How should%ws
behave?
Matz.
Updated by normalperson (Eric Wong) over 4 years ago
[email protected] wrote:
Remaining issues:
- Name?
%ws
would be the first two character specifier after%
. Is it reasonable? Or should we seek another name?- Frozen?
%w
returns non frozen array of non frozen strings. How should%ws
behave?
How about suffix notation similar to Regexp modifiers?
[ 'foo', 'bar' ]s
Or with ability to specify ordering:
[ 'foo', 'bar' ]os # ordered set
[ 'foo', 'bar' ]us # unordered set
Fwiw, I sometimes wish I could use unordered hash to save space:
{ 'foo' => 'bar' }u
And maybe 'f' modifier for frozen strings of values