[#58120] [ruby-trunk - Feature #9070][Open] Introduce `---` as synonym of `end` keyword — "alexeymuranov (Alexey Muranov)" <redmine@...>
5 messages
2013/11/01
[#58149] [ruby-trunk - Feature #9076][Open] New one-argument block syntax: &. — "asterite (Ary Borenszweig)" <ary@...>
23 messages
2013/11/04
[#58259] [ruby-trunk - Feature #9099][Open] Train emoji lambda operator — "charliesome (Charlie Somerville)" <charliesome@...>
9 messages
2013/11/10
[#58312] [ruby-trunk - Feature #9107][Open] Introduce YES and NO as aliases of true and false — "gsamokovarov (Genadi Samokovarov)" <gsamokovarov@...>
5 messages
2013/11/13
[#58350] [ruby-trunk - Feature #9113][Open] Ship Ruby for Linux with jemalloc out-of-the-box — "sam.saffron (Sam Saffron)" <sam.saffron@...>
59 messages
2013/11/15
[#60851] Re: [ruby-trunk - Feature #9113][Open] Ship Ruby for Linux with jemalloc out-of-the-box
— Eric Wong <normalperson@...>
2014/02/19
Btw, I also hope to experiment with a slab allocator since many internal
[#62721] [ruby-trunk - Feature #9113] Ship Ruby for Linux with jemalloc out-of-the-box
— nobu@...
2014/05/24
Issue #9113 has been updated by Nobuyoshi Nakada.
[#62735] [ruby-trunk - Feature #9113] Ship Ruby for Linux with jemalloc out-of-the-box
— normalperson@...
2014/05/25
Issue #9113 has been updated by Eric Wong.
[#58391] [ruby-trunk - Bug #9119][Assigned] TestTime#test_marshal_broken_offset broken under MinGW — "luislavena (Luis Lavena)" <luislavena@...>
10 messages
2013/11/17
[#58396] [ruby-trunk - Bug #9121][Open] [PATCH] Remove rbtree implementation of SortedSet due to performance regression — "xshay (Xavier Shay)" <contact@...>
15 messages
2013/11/18
[#58404] [ruby-trunk - Feature #9123][Open] Make Numeric#nonzero? behavior consistent with Numeric#zero? — "sferik (Erik Michaels-Ober)" <sferik@...>
40 messages
2013/11/18
[#58411] [ruby-trunk - Bug #9124][Open] TestSocket errors in test-all on Arch 64-bit — "jonforums (Jon Forums)" <redmine@...>
14 messages
2013/11/18
[#58515] [ruby-trunk - Bug #9124] TestSocket errors in test-all on Arch 64-bit
— "jonforums (Jon Forums)" <redmine@...>
2013/11/23
[#58841] [ruby-trunk - Bug #9124] TestSocket errors in test-all on Arch 64-bit
— "jonforums (Jon Forums)" <redmine@...>
2013/12/04
[#58842] Re: [ruby-trunk - Bug #9124] TestSocket errors in test-all on Arch 64-bit
— Eric Wong <normalperson@...>
2013/12/04
"jonforums (Jon Forums)" <redmine@ruby-lang.org> wrote:
[#58452] [ruby-trunk - Bug #9133][Open] logger rotates log files more than expected — "no6v (Nobuhiro IMAI)" <nov@...>
8 messages
2013/11/21
[#58473] Object identity for string hash keys — Andrew Vit <andrew@...>
I'm not sure if this is a bug. I'm creating a hash like this:
5 messages
2013/11/21
[#58490] Re: [ruby-cvs:50910] drbrain:r43767 (trunk): * lib/rubygems: Update to RubyGems master 50a8210. Important changes — Tanaka Akira <akr@...>
2013/11/22 <drbrain@ruby-lang.org>:
4 messages
2013/11/22
[#58492] Re: [ruby-cvs:50910] drbrain:r43767 (trunk): * lib/rubygems: Update to RubyGems master 50a8210. Important changes
— Eric Wong <normalperson@...>
2013/11/22
Tanaka Akira <akr@fsij.org> wrote:
[#58496] [ruby-trunk - Feature #9140][Open] Allow each_with_index to get start index — "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...>
8 messages
2013/11/22
[#58545] [ruby-trunk - Feature #9145][Open] Queue#pop(true) return nil if empty instead of raising ThreadError — "jsc (Justin Collins)" <redmine@...>
9 messages
2013/11/24
[#58599] [ruby-trunk - Bug #9159][Open] [patch] use rb_fstring for internal strings — "tmm1 (Aman Gupta)" <ruby@...1.net>
5 messages
2013/11/26
[#58653] [ruby-trunk - Bug #9170][Open] Math.sqrt returns different types when mathn is included; breaks various gems - this bug can be reproduced in Ruby 1.8 as well — "kranzky (Jason Hutchens)" <JasonHutchens@...>
7 messages
2013/11/28
[#58719] [ruby-trunk - Feature #5446] at_fork callback API — "tmm1 (Aman Gupta)" <ruby@...1.net>
6 messages
2013/11/30
[ruby-core:58173] [ruby-trunk - Feature #9076] New one-argument block syntax: &.
From:
"alexeymuranov (Alexey Muranov)" <redmine@...>
Date:
2013-11-05 21:39:30 UTC
List:
ruby-core #58173
Issue #9076 has been updated by alexeymuranov (Alexey Muranov).
Ary,
as far as i understand, the ampersand is used with symbols and not with strings because method names and identifiers are symbols and not strings. What follows after the colon is not the symbol's "content," but the symbol's "label" or "name." Replacing a symbol's name with any other unique name should not change the "meaning" of the program.
Arbitrarily named variables are always "noise," they are price for intuitive and notational simplicity. IMO, the only alternatives to using arbitrarily named variables are the following.
1. Use predefined implicitly bound variables, or "placeholders," similar to the meaning of `&` in you proposal. To go further, why not to introduce `&1` or `a1` for the first argument, `&2` or `a2` for the second, etc.? Then you would also be able to do, with your proposal:
[1, 2, 3, 4].reduce &1 + &2
I do not think this would be a great idea. But i agree that one-argument functions are in some sense special.
Your proposal seems to break existing rules for block syntax: curly braces or do..end, which always designate a block, are absent in your case.
Using "implicitly bound variable &" would not generalize well to more complicated situations and would be confusing: how to be with
[1, 2, 3, 4].map 2 * &
[1, 2, 3, 4].map &.foo(&)
[1, 2, 3, 4].map &.foo([5, 6].map &.bar)
?
2. Use combinators like in combinatory logic (http://plato.stanford.edu/entries/logic-combinatory/). It should be possible to introduce various operations of composition on procs and methods (see #6284 for example) to avoid using variables at all, but it will be verbose and not syntactic sugar at all. This is clearly not what you are proposing.
3. Instead of writing text, draw graphs and represent argument bindings by arrows.
It looks to me like you are suggesting to use a random syntactic sugar for a random special case. Apart from using `&` instead of an arbitrarily named variable, the main difference you introduce seems to be the absence of curly braces. This looks to me more like an inconsistency than like an advantage.
----------------------------------------
Feature #9076: New one-argument block syntax: &.
https://bugs.ruby-lang.org/issues/9076#change-42760
Author: asterite (Ary Borenszweig)
Status: Feedback
Priority: Low
Assignee:
Category: core
Target version: Next Major
Hello,
I'd like to introduce a new syntax for blocks that have one argument.
Currently you can do this:
[1, 2, 3].map &:to_s
With the proposed syntax this will be written as:
[1, 2, 3].map &.to_s
Instead of ":" we use a ".".
The idea is that this new syntax is just syntax sugar that is expanded by the parser to this:
[1, 2, 3].map { |arg| arg.to_s }
This new syntax allows passing arguments:
[1, 2, 3, 4].map &.to_s(2) #=> ["1", "10", "11", "100"]
It also allows chaining calls:
[1, 10, 100].map &.to_s.length #=> [1, 2, 3]
You can also use another block:
[[1, -2], [-3, -4]].map &.map &.abs #=> [[1, 2], [3, 4]]
Pros:
- Doesn't conflict with any existing syntax, because that now gives a syntax error, so it is available.
- Allows passing arguments and chaining calls
- It's *fast*: it's just syntax sugar. The "&:to_s" is slower because the to_proc method is invoked, you have a cache of procs, etc.
- It looks ok (in my opinion) and allows very nice functional code (like the last example).
Cons:
- Only supports one (implicit) argument. But this is the same limitation of "&:to_s". If you want more than one argument, use the traditional block syntax.
- It's a new syntax, so users need to learn it. But to defend this point, users right now need to understand the &:to_s syntax, which is hard to explain (this calls the "to_proc" method of Symbol, which creates a block... vs. "it's just syntax sugar for")
What do you think?
We are using this syntax in a new language we are doing, Crystal, which has a syntax very similar to Ruby, and so far we think it's nice, simple and powerful. You can read more about it here: http://crystal-lang.org/2013/09/15/to-proc.html
--
http://bugs.ruby-lang.org/