Closed charlie closed 8 years ago
Development on Ruby 3.0 has not yet started. Matz is quick at changing his opinion (see Module#prepend
).
I don't see a threading issue, tbh, as the autoloads should be triggered at load time.
I'm not sure what "should be triggered at load time" means. The docs about Kernel#autoload say:
Registers filename to be loaded (using Kernel::require) the first time that module (which may be a String or a symbol) is accessed.
Last I heard, Kernel#require
was not threadsafe. Has that changed? If not, I still question whether deferred non-threadsafe lazy-loading is correct for a core library like rack-protection, whether or not development on Ruby 3.0 has started.
But you won't lazy load anywhere but the main thread.
I guess I don't understand something about autoload/require. There is some guarantee that 2 threads can't/won't call require
at the same time?
No. But that does not have anything to do with autoload.
JRuby and Ruby 2.0 autoload is thread-safe and Rubinius autoload is going to be.
@rkh can you cite a source for that (particularly Ruby 2)? I've been trying to chase this answer down and don't see evidence for that, especially given what Matz said in the post that started this thread.
I'm also curious about it. Since I started coding with ruby, I see people talking about the autoload not being thread-safe, but I could'nt find a workaround or a official statement about that.
@joshjordan see http://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/33078 (linked in the headius/thread_safe) issue
<3
I think its safe to close this issue, autoload should be threadsafe so we won't change the design of rack-protection
for this.
http://www.ruby-forum.com/topic/3036681