[#46930] [ruby-trunk - Bug #6825][Open] forking and pthread_cond_timedwait: Invalid argument (EINVAL) on OS X / 1.9.3-p194 — "xentronium (Mark A)" <markizko@...>

29 messages 2012/08/02

[#46974] [ruby-trunk - Bug #6830][Assigned] test failure test_constants(OpenSSL::TestConfig) [/ruby/test/openssl/test_config.rb:27] on Mac + homebrew — "kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...>

17 messages 2012/08/04

[#46975] [ruby-trunk - Bug #6831][Assigned] test_getpwuid() on Mountain Lion — "kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...>

12 messages 2012/08/04

[#46996] [ruby-trunk - Bug #6836][Assigned] Improve File.expand_path performance in Windows — "luislavena (Luis Lavena)" <luislavena@...>

15 messages 2012/08/04

[#47036] [ruby-trunk - Feature #6841][Open] Shorthand for Assigning Return Value of Method to Self — "wardrop (Tom Wardrop)" <tom@...>

18 messages 2012/08/07

[#47108] [ruby-trunk - Feature #6852][Open] [].transpose should behave specially — "boris_stitnicky (Boris Stitnicky)" <boris@...>

13 messages 2012/08/10

[#47138] [ruby-trunk - Bug #6861][Open] ERB::Util.escape_html is not escaping single quotes — "spastorino (Santiago Pastorino)" <santiago@...>

14 messages 2012/08/12

[#47163] [ruby-trunk - Bug #6865][Open] GC::Profiler.report might create a huge String and invoke a few GC cycles — "Eregon (Benoit Daloze)" <redmine@...>

9 messages 2012/08/13

[#47189] [ruby-trunk - Feature #6868][Open] Make `do` in block syntax optional when the block is the last argument of a method and is not an optional argument — "alexeymuranov (Alexey Muranov)" <redmine@...>

8 messages 2012/08/14

[#47243] [ruby-trunk - Feature #6895][Open] TracePoint API — "ko1 (Koichi Sasada)" <redmine@...>

27 messages 2012/08/20

[#47267] [ruby-trunk - Bug #6903][Open] [[Ruby 1.9:]] --enable-load-relative broken on systems with /lib64 — "mpapis (Michal Papis)" <mpapis@...>

11 messages 2012/08/22

[#47309] [ruby-trunk - Bug #6929][Open] Documentation for Ripper — "zzak (Zachary Scott)" <zachary@...>

16 messages 2012/08/25

[#47345] [ruby-trunk - Feature #6946][Open] FIPS support? — "vo.x (Vit Ondruch)" <v.ondruch@...>

35 messages 2012/08/28

[ruby-core:46961] [ruby-trunk - Feature #1961][Closed] Kernel#__dir__

From: "matz (Yukihiro Matsumoto)" <matz@...>
Date: 2012-08-03 11:07:00 UTC
List: ruby-core #46961
Issue #1961 has been updated by matz (Yukihiro Matsumoto).

Description updated
Status changed from Assigned to Closed


----------------------------------------
Feature #1961: Kernel#__dir__
https://bugs.ruby-lang.org/issues/1961#change-28625

Author: yhara (Yutaka HARA)
Status: Closed
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: 2.0.0


=begin
 = Proposal
 
   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 
 
 = Problem
 
 File.dirname(__FILE__) is frequently used and too long.
 
 = Analysis
 
 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
 
 = Solutions
 
 (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__.
 
 = Conclusion
 
 I think (3) (Kernel#__dir__) is the best.
 
 Thanks,
 -- 
 yhara (Yutaka HARA)
 http://route477.net/
=end



-- 
http://bugs.ruby-lang.org/

In This Thread

Prev Next