--20cf304275c861663504b026347b
Content-Type: text/plain; charset=UTF-8

On Tue, Oct 25, 2011 at 5:16 PM, Charles Oliver Nutter
<headius / headius.com>wrote:

> > Does anyone have statistics on how often binding is used and what the
> costs
> > is for not optimizing those portions?
> >
> > Binding in Ruby is used by debuggers or other dynamic introspection tools
> to
> > give access to call stack objects. There are dynamic languages such as
> Perl
> > and some of the POSIX shells (bash and zsh but not more recent ksh) that
> > don't have something like binding; therefore debuggers in those languages
> > can't provide reliable info regarding certain variables on the call stack
> > other than the top-most frame.
> >
> > Does it matter? Some probably would argue it doesn't. I think access to
> > locals on the call stack in a debugger is nice to have.
>
> That is neither here nor there. I am not proposing removing bindings.
>
> What I am proposing is removal of the ability to use an arbitrary Proc
> as a binding. Right now, millions of Ruby developers are passing
> blocks around, blissfully unaware that they are exposing *all* state
> that surrounds the block to the called code. Please read my example
> again.
>

This was the subject matter of my RubyConf talk. You can view the video
here: http://confreaks.net/videos/671-rubyconf2011-keeping-ruby-reasonable .
If you skip to 19:33, I presented a very real example of how this property
of Proc#bindings can have an impact on performance.

--20cf304275c861663504b026347b
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div class="gmail_quote">On Tue, Oct 25, 2011 at 5:16 PM, Charles Oliver Nutter <span dir="ltr">&lt;headius / headius.com&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">&gt; Does anyone have statistics on how often binding is used and what the costs</div><div class="im">
&gt; is for not optimizing those portions?<br>
&gt;<br>
&gt; Binding in Ruby is used by debuggers or other dynamic introspection tools to<br>
&gt; give access to call stack objects. There are dynamic languages such aserl<br>
&gt; and some of the POSIX shells (bash and zsh but not more recent ksh) that<br>
&gt; don&#39;t have something like binding; therefore debuggers in those languages<br>
&gt; can&#39;t provide reliable info regarding certain variables on the call stack<br>
&gt; other than the top-most frame.<br>
&gt;<br>
&gt; Does it matter? Some probably would argue it doesn&#39;t. I think access to<br>
&gt; locals on the call stack in a debugger is nice to have.<br>
<br>
</div>That is neither here nor there. I am not proposing removing bindings.<br>
<br>
What I am proposing is removal of the ability to use an arbitrary Proc<br>
as a binding. Right now, millions of Ruby developers are passing<br>
blocks around, blissfully unaware that they are exposing *all* state<br>
that surrounds the block to the called code. Please read my example<br>
again.<br></blockquote><div><br></div><div>This was the subject matter of my RubyConf talk. You can view the video here: http://confreaks.net/videos/671-rubyconf2011-keeping-ruby-reasonable . If you skip to 19:33, Iresented a very real example of how this property of Proc#bindings can have an impact on performance.</div>
</div><br>

--20cf304275c861663504b026347b--