--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'd like to make more ¨Âõããéîã¤Â ¨Âèå éíðïòôáîðïéîïæ ÷èáô ÷òïôâåìï÷º áääòåóèáîäìéîç óïõòãå ìïãáôéïîãïòòåãôìéî Òõâù éíðìåíåîôáôéïîó¬îä ùïóèïõìä îïåöåò îååä ôèæéìå áîìéîå ðáòáíåôåòó ïî åöáì®âò¾¼âò¾ <div class="gmail_quote">On Wed, Feb 2, 2011 at 11:21 AM, Rocky Bernsteinspan dir="ltr"><rockyb / rubyforge.org></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"><<a href="mailto:mame / tsg.ne.jp" target="_blank">mame / tsg.ne.jp</a>></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 <<a href="mailto:redmine / ruby-lang.org" target="_blank">redmine / ruby-lang.org</a>>:<br> > Thank you for that detailed explanation. The problem for me is the<br> > 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'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 "anti-pattern" 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't see why a templating system couldn'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'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 <<a href="mailto:mame / tsg.ne.jp" target="_blank">mame / tsg.ne.jp</a>><br> <br> </div></div></div></blockquote></div><br> </blockquote></div><br> --000e0cd59d264eec1f049b4f5e01--