From: "Haase, Konstantin" Date: 2011-11-07T20:02:37+09:00 Subject: [ruby-core:40812] Re: [ruby-trunk - Feature #5478] import Set into core, add syntax I don't think it's impossible to parse. Ruby also manages to parse `p /a/m` as regexp rather than `p / a / m`. Konstantin On Nov 6, 2011, at 17:05 , George Koehler wrote: > > Issue #5478 has been updated by George Koehler. > > > =begin > Ruby stdlib already has Set::[], a method that creates a literal set. > > irb(main):001:0> require 'set' > => true > irb(main):002:0> Set[1, 2, 3] > => # > > The proposed syntax <1, 2, 3> might be impossible to parse, because it conflicts with < and > operators. Consider this example: > > def c(*args); args.length; end > > p c <1, 2, 3> > 4 > > Current Ruby (with no set literal syntax) parses this example like so: > > p(c() < 1, 2, (3 > > 4)) > > If <1, 2, 3> became a set literal, then this example would become ambiguous. No parser would know whether this code has a set literal, or calls < and > operators. > =end > > ---------------------------------------- > Feature #5478: import Set into core, add syntax > http://redmine.ruby-lang.org/issues/5478 > > Author: Konstantin Haase > Status: Open > Priority: Normal > Assignee: > Category: > Target version: 3.0 > > > =begin > A set is a central data structure. However, a lot of Ruby developers use arrays for situations where it would be more reasonable to use a set. One reason for that is that it is way easier to use Array then Set at the moment, another one is that developers are simply not aware it exists. > > I propose moving Set from the stdlib to core and possibly add a syntax or a method on array for creating Set literals. > > First class syntax suggestions: > > <1, 2, 3> # might be tricky to parse > #[1, 2, 3] # would collide with comments > $[1, 2, 3] > ${1, 2, 3} > > Method suggestions: > > ~[1, 2, 3] > +[1, 2, 3] > > Whitespace separated String Sets could look like this: > > %w # creates an array at the moment > #w[foo bar blah] # would collide with comments > $w[foo bar blah] # would collide with sending :[] to $w > $w{foo bar blah} > > ~%w[foo bar blah] # not really shorter than using an array with strings > +%w[foo bar balh] # not really shorter than using an array with strings > > Maybe it's ok to not have a whitespace separated syntax, I'm just brainstorming here. > > The issue with the method approach is that it would create an Array to send the message to first. > > I favor the <1, 2, 3> syntax, possibly without the ability to create a whitespace separated version. > > I'd be willing to work on a patch not only for MRI but also for JRuby and Rubinius if you would consider this to be useful. > Although I would need help with the parser. > =end > > > > -- > http://redmine.ruby-lang.org >