--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&#39;t it be a little confusing to remember that __FILE__ is uppercase and __dir__ is downcase? Doesn&#39;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">&lt;redmine / ruby-lang.org&gt;</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&#39;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 &#39;File.dirname&#39; 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--