<html><head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
</head><body text="#000000" bgcolor="#FFFFFF">
<blockquote style="border: 0px none;" 
cite="mid:CAOjLovigRr=iM9fk6HsZYPC2nxOtH--siLf+Q-pBLvjq+HBWdg@mail.gmail.com"
 type="cite">
  <div style="margin:30px 25px 10px 25px;" class="__pbConvHr"><div 
style="display:table;width:100%;border-top:1px solid 
#EDEEF0;padding-top:5px">       <div 
style="display:table-cell;vertical-align:middle;padding-right:6px;"><img
 photoaddress="esdiscuss@grant.x43.net" photoname="Grant Husbands" 
src="cid:part1.03020804.06080802@mozilla.org" 
name="compose-unknown-contact.jpg" width="25px" height="25px"></div>   <div
 
style="display:table-cell;white-space:nowrap;vertical-align:middle;width:100%">
        <a moz-do-not-send="true" href="mailto:esdiscuss@grant.x43.net" 
style="color:#737F92 
!important;padding-right:6px;font-weight:bold;text-decoration:none 
!important;">Grant Husbands</a></div>   <div 
style="display:table-cell;white-space:nowrap;vertical-align:middle;">   
  <font color="#9FA2A5"><span style="padding-left:6px">January 16, 2012 
5:33 PM</span></font></div></div></div>
  <div style="color: rgb(136, 136, 136); margin-left: 24px; 
margin-right: 24px;" __pbrmquotes="true" class="__pbConvBody"><pre wrap="">Brendan Eich wrote:
</pre><blockquote type="cite"><pre wrap="">2. Variation on empty label: support "do" as a reserved-identifier label

  do: arr.forEach {|o|
    if (...) break;
    ...
  }
</pre></blockquote><pre wrap=""><!---->
This seems like a sound way of doing it, indeed (I omitted your first
one because I prefer this one).</pre></div>
</blockquote>
<br>
Me too. Had to throw the shorter one out to give it its due.<br>
<br>
<blockquote style="border: 0px none;" 
cite="mid:CAOjLovigRr=iM9fk6HsZYPC2nxOtH--siLf+Q-pBLvjq+HBWdg@mail.gmail.com"
 type="cite">
  <div style="color: rgb(136, 136, 136); margin-left: 24px; 
margin-right: 24px;" __pbrmquotes="true" class="__pbConvBody">
    <pre wrap=""> It avoids the more egregious syntax
conflicts and is indicative of being interesting to break/continue.
Combined with the break-with and continue-with statements, elsewhere
in this thread, it makes block lambdas better than anonymous functions
currently are in nearly all cases, along with making it easier to
replace loops with callback-based iteration.</pre>
  </div>
</blockquote>
<br>
I will add strawman sections for these extensions to block_lamda_revival
 in a bit.<br>
<blockquote style="border: 0px none;" 
cite="mid:CAOjLovigRr=iM9fk6HsZYPC2nxOtH--siLf+Q-pBLvjq+HBWdg@mail.gmail.com"
 type="cite">
  <div style="color: rgb(136, 136, 136); margin-left: 24px; 
margin-right: 24px;" __pbrmquotes="true" class="__pbConvBody">
    <pre wrap="">
</pre>
<blockquote type="cite"><pre wrap="">To complete the Smalltalk homage we would want this in expressions, and
we'd also want do: to take a block-lambda directly, in addition to a
CallWithBlockArguments.
</pre></blockquote><pre wrap=""><!---->
Would it call that block-lambda with no arguments?</pre></div>
</blockquote>
<br>
If the block-lambda takes no arguments, yes. But I'm thinking of 
CoffeeScript's do operator, which passes lexical references of the same 
name as the block-lambda's parameters:<br>
<br>
<a class="moz-txt-link-freetext" href="http://coffeescript.org/#try:list%20%3D%20">http://coffeescript.org/#try:list%20%3D%20</a>[1%2C%202%2C%203]%0Afor%20x%20in%20list%0A%20%20do%20%28x%29%20-%3E%0A%20%20%20%20alert%20x<br>
<br>
<span style="font-family: monospace;">list = [1, 2, 3]</span><br 
style="font-family: monospace;">
<span style="font-family: monospace;">for x in list</span><br 
style="font-family: monospace;">
<span style="font-family: monospace;">  do (x) -></span><br 
style="font-family: monospace;">
<span style="font-family: monospace;">    alert x</span><br 
style="font-family: monospace;">
<br>
<span>which for example translates to:</span><br>
<span><meta http-equiv="content-type" content="text/html; 
charset=ISO-8859-1"><pre id="repl_results">var list, x, _fn, _i, _len;

list = [1, 2, 3];

_fn = function(x) {
  return alert(x);
};
for (_i = 0, _len = list.length; _i < _len; _i++) {
  x = list[_i];
  _fn(x);

</pre></span><br>
Apologies for the CoffeeScript if it's not your thing, readers. Here's 
the block-lambda with do: version:<br>
<br>
<span><span style="font-family: monospace;">let list = [1, 2, 3]</span><br
 style="font-family: monospace;"><span style="font-family: monospace;">
for (let x of list) {</span><br style="font-family: monospace;"><span 
style="font-family: monospace;">
  do: { |x|</span><br style="font-family: monospace;"><span 
style="font-family: monospace;">
    alert x</span><br style="font-family: monospace;">
  <span style="font-family: monospace;">  }</span><br 
style="font-family: monospace;">
  <span style="font-family: monospace;">} </span><br style="font-family:
 monospace;">
  <br style="font-family: monospace;">
  <br>
But of course, Harmony for-let-of and for-let-in loops provide a fresh 
binding per iteration, so this do: is not needed to capture each 
iteration's i value. Let's use old-style for:<br>
  <br>
</span><span><span><span style="font-family: monospace;">let x;<br>
for (x = 1; x < 4; x++) {</span><br style="font-family: monospace;">
  <span style="font-family: monospace;">  do: { |x|</span><br 
style="font-family: monospace;"><span style="font-family: monospace;">
    alert x</span><br style="font-family: monospace;">
  <span style="font-family: monospace;">
  }</span><br style="font-family: monospace;">
  <span style="font-family: monospace;">} </span><br style="font-family:
 monospace;"><span style="font-family: monospace;"></span></span></span><br>
Here the single let x binding is prone to being captured with its final 
value, 4. The do: calls its block-lambda argument with each x value in 
turn, so (e.g.) the block-lambda can safely close over its parameter x 
and get each value in [1, 2, 3].<br>
<br>
<blockquote style="border: 0px none;" 
cite="mid:CAOjLovigRr=iM9fk6HsZYPC2nxOtH--siLf+Q-pBLvjq+HBWdg@mail.gmail.com"
 type="cite">
  <div style="color: rgb(136, 136, 136); margin-left: 24px; 
margin-right: 24px;" __pbrmquotes="true" class="__pbConvBody"><blockquote
 type="cite"><pre wrap="">This variation is future-hostile to leading-colon as statement- or
expression-starting special forms (see <a class="moz-txt-link-rfc2396E" href="http://wiki.ecmascript.org/doku.php?id=strawman:return_to_label"><http://wiki.ecmascript.org
/doku.php?id=strawman:return_to_label></a>). I think that this is
acceptable but I could be missing something.
</pre></blockquote><pre wrap=""><!---->
I think I'm misreading, but I'm not seeing how "do:" and "return :"
conflict.</pre></div>
</blockquote>
<br>
You're right, I was mis-remembering the return-to-label details.<br>
<br>
<blockquote style="border: 0px none;" 
cite="mid:CAOjLovigRr=iM9fk6HsZYPC2nxOtH--siLf+Q-pBLvjq+HBWdg@mail.gmail.com"
 type="cite">
  <div style="color: rgb(136, 136, 136); margin-left: 24px; 
margin-right: 24px;" __pbrmquotes="true" class="__pbConvBody">
    <pre wrap="">If break-with and continue-with get specced, they would
cover the same use case, anyway.
</pre>
  </div>
</blockquote>
<br>
Return-to-label has been fading for a while, it dates from an earlier 
lambda proposal era. I agree break/continue-with do the job. I'll talk 
to Allen about those a bit tomorrow.<br>
<blockquote style="border: 0px none;" 
cite="mid:CAOjLovigRr=iM9fk6HsZYPC2nxOtH--siLf+Q-pBLvjq+HBWdg@mail.gmail.com"
 type="cite">
  <div style="color: rgb(136, 136, 136); margin-left: 24px; 
margin-right: 24px;" __pbrmquotes="true" class="__pbConvBody">
    <pre wrap="">

I don't know how the process works, but I'd be happy to assist in the
creation of additional strawmen to cover these (potentially later)
additions to block lambdas and other blocks, if consensus is reached.
I don't want to jump the gun, though.</pre>
  </div>
</blockquote>
<br>
I thought about new strawmen but still think it better to add do: and 
possibly break/continue-with to block-lambda revival to avoid too many 
little wiki pages. b/c-with, perhaps, deserve their own page but it's 
easy to split if necessary.<br>
<br>
Thanks for the offer to help, I may take you up on it yet. And thanks 
for the discussion.<br>
<br>
/be<br>
<br>
<div style="color:#888888;margin-left:24px;margin-right:24px;" 
__pbrmquotes="true" class="__pbConvBody"><div><br></div></div>
</body></html>