[#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:46907] Re: (Half-baked DRAFT) new `require' framework

From: Clifford Heath <clifford.heath@...>
Date: 2012-08-01 01:25:29 UTC
List: ruby-core #46907
Happy that the discussion is started. Pull requests are welcome, of course.
I'm not trying to divert people's efforts, just to direct them to the seat of the fire.
One good integrated system would be better than five partial solutions!

Sorry I can't comment further on your questions yet - at work. But I'm sure that
the 60 LOC of Polyglot is not preventing you to answer your questions by
yourself either :).

Clifford Heath.

On 01/08/2012, at 10:38 AM, Eric Hodel wrote:

> On Jul 31, 2012, at 14:02, Clifford Heath <clifford.heath@gmail.com> wrote:
>> My "polyglot" gem is already a very widely-used solution to this problem
>> as well, with over 8 million downloads - the 11th most-downloaded gem.
>> It's used by Treetop, which is pulled in by Cucumber and Rails' mailer.
>> Far from being complicated and big, it's just 60 lines of Ruby. No C
>> extension is needed.
> 
> RubyGems is even more widely used and downloaded than polyglot.  After my years of experience with altering ruby's ability to load features I can only conclude that the current API is highly inadequate.
> 
> Here's the entire API we have:
> 
> https://github.com/cjheath/polyglot/blob/1197a108/lib/polyglot.rb#L60
> 
> Sure, this works, but it's difficult to define a #require override that occurs at a specific point relative to other overrides.  Polyglot wants to defer to $LOAD_PATH and $LOADED_FEATURES and only invoke its custom loader after everyone else.  This is the easiest way to implement a require override, but it's also only one, narrow use case.
> 
> Unlike polyglot, RubyGems needs to decide whether to load from the existing $LOAD_PATH or to activate a gem.  Unlike polyglot, RubyGems needs to check $LOADED_FEATURES to decide whether to activate a gem or not.  The current API does not make this easy or simple to do.
> 
> There are also common pitfalls with the current API, and polyglot is a victim of one of the most common pitfall.
> 
> With polyglot, the behavior of a program may change depending upon whether files are missing or not.  Koichi's proposals can help eliminate this through a proper API.
> 
> Consider:
> 
> a.rb:
> require 'b'
> 
> b.rb:
> require 'missing'
> 
> $ ruby -d -I. -rpolyglot -ra -e0 2>&1 | grep Polyglot
> Exception `Polyglot::PolyglotLoadError' at /Users/drbrain/tmp/gems/gems/polyglot-0.3.3/lib/polyglot.rb:53 - Failed to load missing using extensions rb
> Exception `Polyglot::PolyglotLoadError' at /Users/drbrain/tmp/gems/gems/polyglot-0.3.3/lib/polyglot.rb:53 - Failed to load b using extensions rb
> Exception `Polyglot::PolyglotLoadError' at /Users/drbrain/tmp/gems/gems/polyglot-0.3.3/lib/polyglot.rb:53 - Failed to load a using extensions rb
> 
> Why is polyglot trying to load features that were already loaded?
> 
> $ touch missing.rb
> $ ruby -d -I. -rpolyglot -ra -e0 2>&1 | grep Polyglot
> $
> 
> Why doesn't polyglot attempt to load b.rb or a.rb in this case?
> 
> One of these behaviors is wrong, likely the first.  Polyglot should check load_error on line 65 to see if it matches the feature the user was trying to require like RubyGems does:
> 
> https://github.com/rubygems/rubygems/blob/c1fd10db/lib/rubygems/custom_require.rb#L102-103
> 
> Polyglot is not the only require override that has fallen victim to this problem.  I hope a better API than an alias will eliminate the possibility.


In This Thread