--0016e65bccf4af217a04724b88d5 Content-Type: text/plain; charset=UTF-8 Wouldn't it be a little confusing to remember that __FILE__ is uppercase and __dir__ is downcase? Doesn't sound very POLS to me... //Magnus Holm On Wed, Aug 19, 2009 at 16:57, Yutaka HARA <redmine / ruby-lang.org> wrote: > Feature #1961: Kernel#__dir__ > http://redmine.ruby-lang.org/issues/show/1961 > > Author: Yutaka HARA > Status: Open, Priority: Normal > > roposal > > Kernel#__dir__ > returns the value of File.dirname(__FILE__) > > According to the google code search, about 60% of uses of __FILE__ > are of the form File.dirname(__FILE__). Ruby 1.9.2 provides > require_relative for this problem; but File.dirname(__FILE__) is > not always used for requiring ruby scripts, but also for reading > data files. __dir__ helps these cases. > > (Note: my proposal does not include __dir_dir__ this time :-) > It should be discussed in another threads) > Related ticket: http://redmine.ruby-lang.org/issues/show/642 > > roblem > > File.dirname(__FILE__) is frequently used and too long. > > nalysis > > There are 222 uses of __FILE__ listed by the google code search, > classified into these categories: > > (A) 30.6% (68) are used with require and File.dirname. > In Ruby 1.9.2, this case is supported by require_relative. > > (B) 31.1% (69) are with File.dirname, but not with require. > For example, reading data files of unit tests. > > (C) 21.6% (48) are the idiom, $0 __FILE__. > > B is as many as A (and even more than C), so it is reasonable to > add a shortcut for File.dirname(__FILE__) in addition to require_relative. > > * code: http://gist.github.com/170336 > * result: http://route477.net/files/__file__.html > > olutions > > (1) add a toplevel constant __DIR__ > pros: looks like __FILE__ > cons: adding new keyword > > (2) add Kernel#__DIR__ > pros: no new keyword > cons: it should have a lower-case name (like 1.9's __method__), > because it is not a constant but a method. > > (3) add Kernel#__dir__ > pros: no new keyword, and it is clearer than (4) that it has > some associations with __FILE__. > > (4) make __FILE__ to the default argument of File.dirname > pros: no new keyword nor new method > cons: it is not clear that 'File.dirname' is expanded to > the path of directory of __FILE__. > > onclusion > > I think (3) (Kernel#__dir__) is the best. > > Thanks, > -- > yhara (Yutaka HARA) > http://route477.net/ > > > ---------------------------------------- > http://redmine.ruby-lang.org > > --0016e65bccf4af217a04724b88d5 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Wouldn't it be a little confusing to remember that __FILE__ is uppercase and __dir__ is downcase? Doesn't sound very POLS to me...<br clear="all"><br>//Magnus Holm<br> <br><br><div class="gmail_quote">On Wed, Aug 19, 2009 at 16:57, Yutaka HARA <span dir="ltr"><redmine / ruby-lang.org></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"> Feature #1961: Kernel#__dir__<br> <a href="http://redmine.ruby-lang.org/issues/show/1961" target="_blank">http://redmine.ruby-lang.org/issues/show/1961</a><br> <br> Author: Yutaka HARA<br> Status: Open, Priority: Normal<br> <br> = Proposal<br> <br> Kernel#__dir__<br> returns the value of File.dirname(__FILE__)<br> <br> According to the google code search, about 60% of uses of __FILE__<br> are of the form File.dirname(__FILE__). Ruby 1.9.2 provides<br> require_relative for this problem; but File.dirname(__FILE__) is<br> not always used for requiring ruby scripts, but also for reading<br> data files. __dir__ helps these cases.<br> <br> (Note: my proposal does not include __dir_dir__ this time :-)<br> It should be discussed in another threads)<br> Related ticket: <a href="http://redmine.ruby-lang.org/issues/show/642" target="_blank">http://redmine.ruby-lang.org/issues/show/642</a><br> <br> = Problem<br> <br> File.dirname(__FILE__) is frequently used and too long.<br> <br> = Analysis<br> <br> There are 222 uses of __FILE__ listed by the google code search,<br> classified into these categories:<br> <br> (A) 30.6% (68) are used with require and File.dirname.<br> In Ruby 1.9.2, this case is supported by require_relative.<br> <br> (B) 31.1% (69) are with File.dirname, but not with require.<br> For example, reading data files of unit tests.<br> <br> (C) 21.6% (48) are the idiom, $0 == __FILE__.<br> <br> B is as many as A (and even more than C), so it is reasonable to<br> add a shortcut for File.dirname(__FILE__) in addition to require_relative.<br> <br> * code: <a href="http://gist.github.com/170336" target="_blank">http://gist.github.com/170336</a><br> * result: <a href="http://route477.net/files/__file__.html" target="_blank">http://route477.net/files/__file__.html</a><br> <br> = Solutions<br> <br> (1) add a toplevel constant __DIR__<br> pros: looks like __FILE__<br> cons: adding new keyword<br> <br> (2) add Kernel#__DIR__<br> pros: no new keyword<br> cons: it should have a lower-case name (like 1.9's __method__),<br> because it is not a constant but a method.<br> <br> (3) add Kernel#__dir__<br> pros: no new keyword, and it is clearer than (4) that it has<br> some associations with __FILE__.<br> <br> (4) make __FILE__ to the default argument of File.dirname<br> pros: no new keyword nor new method<br> cons: it is not clear that 'File.dirname' is expanded to<br> the path of directory of __FILE__.<br> <br> = Conclusion<br> <br> I think (3) (Kernel#__dir__) is the best.<br> <br> Thanks,<br> <font color="#888888">--<br> yhara (Yutaka HARA)<br> <a href="http://route477.net/" target="_blank">http://route477.net/</a><br> <br> <br> ----------------------------------------<br> <a href="http://redmine.ruby-lang.org" target="_blank">http://redmine.ruby-lang.org</a><br> <br> </font></blockquote></div><br> --0016e65bccf4af217a04724b88d5--