--000e0cd59d264eec1f049b4f5e01
Content-Type: text/plain; charset=ISO-8859-1

I'd like to make more succinct the important point of what I wrote below:
address handling source locations correctly in Ruby implementations, and you
should not ever need the file and line parameters on eval.

On Wed, Feb 2, 2011 at 11:21 AM, Rocky Bernstein <rockyb / rubyforge.org>wrote:

>
>
> On Wed, Feb 2, 2011 at 10:47 AM, Yusuke ENDOH <mame / tsg.ne.jp> wrote:
>
>> Hi,
>>
>> 2011/2/2 James M. Lawrence <redmine / ruby-lang.org>:
>> > Thank you for that detailed explanation. The problem for me is the
>> > connection to source_location, which should be usable by tools.
>>
>> What kind of tools are you talking about?
>> Even if a binding location is discarded, we can still fake __FILE__
>> and __LINE__ without using a binding:
>>
>>  eval <<-END, nil, "/etc/passwd", 1
>>    def foo
>>    end
>>  END
>>  p method(:foo).source_location  #["/etc/passwd", 1]
>>
>> So, source_location user should know and accept the fact that the
>> information is not trustable.
>>
>
> Sigh. The main use of setting the file and line in an eval() call is to get
> around the fact that the location is not what folks expect.
>
> In fact, that's why you yourself used that form to suggest how to rewrite
> the code to do what James M. Lawrence seems to want.
>
> See also
> http://ola-bini.blogspot.com/2008/01/ruby-antipattern-using-eval-without.html.
> It is called an "anti-pattern" there which I guess is used in a derogatory
> fashion.
>
> A place where setting the file and line is used is in template systems like
> merb or erb  where the file the user works on is not a Ruby file but a
> template file that expands to a Ruby file. In that situation, disregarding
> the expanded Ruby file is convenient since there can only be one location
> attached in the Ruby implementation.
>
> However I don't see why a templating system couldn't also provide an
> expanded Ruby file for debugging problems much as one can get the
> C-preprocessed output for a C program when one wants.
>
> In the trepanning debuggers (http://github.com/rocky/rb-trepanning and
> http://github.com/rbx-trepanning) I allow similar types of filename
> remapping to go on in the debugger. But in reporting a location I always try
> to report both locations; and it is done automatically in showing an eval
> location.
>
> But shouldn't we try to address the location problem head on in the Ruby
> implementation? I suspect it too late to try to change Ruby MRI 1.x, but
> perhaps in Ruby 2.x some thought could be given to how to address.
>
> If the fact that source_location is not trustable is a a concern, then
> perhaps setting the file and line parameters on eval can be disallowed at
> some level greater than 0 and less than 4 which is where eval() is
> disallowed totally.
>
>
>
>
>> Why do you think only a binding location as a problem?
>>
>>
>> --
>> Yusuke Endoh <mame / tsg.ne.jp>
>>
>>
>

--000e0cd59d264eec1f049b4f5e01
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

I&#39;d like to make more                  
<div class="gmail_quote">On Wed, Feb 2, 2011 at 11:21 AM, Rocky Bernsteinspan dir="ltr">&lt;rockyb / rubyforge.org&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br><br><div class="gmail_quote"><div class="im">On Wed, Feb 2, 2011 at0:47 AM, Yusuke ENDOH <span dir="ltr">&lt;<a href="mailto:mame / tsg.ne.jp" target="_blank">mame / tsg.ne.jp</a>&gt;</span> wrote:<br></div><div class="im">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
2011/2/2 James M. Lawrence &lt;<a href="mailto:redmine / ruby-lang.org" target="_blank">redmine / ruby-lang.org</a>&gt;:<br>
&gt; Thank you for that detailed explanation. The problem for me is the<br>
&gt; connection to source_location, which should be usable by tools.<br>
<br>
What kind of tools are you talking about?<br>
Even if a binding location is discarded, we can still fake __FILE__<br>
and __LINE__ without using a binding:<br>
<br>
         
  ļ
   䨺﩮 ۦݼ
<br>
So, source_location user should know and accept the fact that the<br>
information is not trustable.<br></blockquote><div><br></div></div><div class="im"><div>Sigh. The main use of setting the file and line in an eval()all is to get around the fact that the location is not what folks expect.</div>
<div><br></div>
<div>In fact, that&#39;s why you yourself used that form to suggest how to rewrite the code to do what James M. Lawrence seems to want./div><div><br></div>
<div>See also <a href="http://ola-bini.blogspot.com/2008/01/ruby-antipattern-using-eval-without.html" target="_blank">http://ola-bini.blogspot.com/2008/01/ruby-antipattern-using-eval-without.html</a>. It is called an &quot;anti-pattern&quot; there which I guess is used in a derogatory fashion.</div>

<div><br></div><div>A place where setting the file and line is used is in template systems like merb or erb                             
<div><br></div><div>However I don&#39;t see why a templating system couldn&#39;t also provide an expanded Ruby file for debugging problems much as onean get the C-preprocessed output for a C program when one wants.</div>

<div><br></div><div>In the trepanning debuggers (<a href="http://github.com/rocky/rb-trepanning" target="_blank">http://github.com/rocky/rb-trepanning</a> and <a href="http://github.com/rbx-trepanning" target="_blank">http://github.com/rbx-trepanning</a>) I allow similar types of filename remapping to go on in the debugger. But in reporting a location I always try to report both locations; and it is done automatically in showing an eval location.</div>

<div><br></div><div>But shouldn&#39;t we try to address the location problem head on in the Ruby implementation? I suspect it too late to try to change Ruby MRI 1.x, but perhaps in Ruby 2.x some thought could be given to how to address./div>

<div><br></div><div>If the fact that source_location is not trustable is a a concern, then perhaps setting the file and line parameters on eval can beisallowed at some level greater than 0 and less than 4 which is where eval() is disallowed totally./div>

<div><br></div><div><br></div><div>/div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Why do you think only a binding location as a problem?<div class="im"><br>
<div><div></div><div><br>
--<br>
Yusuke Endoh &lt;<a href="mailto:mame / tsg.ne.jp" target="_blank">mame / tsg.ne.jp</a>&gt;<br>
<br>
</div></div></div></blockquote></div><br>
</blockquote></div><br>

--000e0cd59d264eec1f049b4f5e01--