[#70977] [Ruby trunk - Feature #11473] Immutable String literal in Ruby 3 — arai@...
Issue #11473 has been updated by Shunichi Arai.
3 messages
2015/10/04
[#71062] [Ruby trunk - Bug #10892] Deadlock in autoload — eregontp@...
Issue #10892 has been updated by Benoit Daloze.
4 messages
2015/10/12
[#71090] Re: [Ruby trunk - Bug #10892] Deadlock in autoload
— Eric Wong <normalperson@...>
2015/10/14
eregontp@gmail.com wrote:
[#71127] [Ruby trunk - Feature #11607] [PATCH] fiddle: release GVL for ffi_call — normalperson@...
Issue #11607 has been updated by Eric Wong.
3 messages
2015/10/20
[#71164] [Ruby trunk - Feature #11614] [Open] [RFC] use id_table for constant tables — normalperson@...
Issue #11614 has been reported by Eric Wong.
3 messages
2015/10/22
[#71211] [Ruby trunk - Feature #11607] [PATCH] fiddle: release GVL for ffi_call — naruse@...
Issue #11607 has been updated by Yui NARUSE.
6 messages
2015/10/27
[#71212] Re: [Ruby trunk - Feature #11607] [PATCH] fiddle: release GVL for ffi_call
— Eric Wong <normalperson@...>
2015/10/27
Yes, user must check if the function is MT-safe. Probably fine
[#71246] Re: [Ruby trunk - Feature #11607] [PATCH] fiddle: release GVL for ffi_call
— Aaron Patterson <tenderlove@...>
2015/10/28
On Tue, Oct 27, 2015 at 08:54:07AM +0000, Eric Wong wrote:
[#71254] Re: [Ruby trunk - Feature #11607] [PATCH] fiddle: release GVL for ffi_call
— Eric Wong <normalperson@...>
2015/10/28
Aaron Patterson <tenderlove@ruby-lang.org> wrote:
[#71230] [Ruby trunk - Feature #11625] Unlock GVL for SHA1 calculations — tenderlove@...
Issue #11625 has been updated by Aaron Patterson.
5 messages
2015/10/27
[#71236] Re: [Ruby trunk - Feature #11625] Unlock GVL for SHA1 calculations
— Юрий Соколов <funny.falcon@...>
2015/10/28
What's about other hashsum algos? MD5, SHA2, etc
[#71242] Re: [Ruby trunk - Feature #11625] Unlock GVL for SHA1 calculations
— Eric Wong <normalperson@...>
2015/10/28
Юрий Соколов <funny.falcon@gmail.com> wrote:
[#71239] [Ruby trunk - Bug #11384] multi-threaded autoload sometimes fails — shugo@...
Issue #11384 has been updated by Shugo Maeda.
4 messages
2015/10/28
[ruby-core:71134] [Ruby trunk - Feature #11415] autoload with a Proc
From:
matz@...
Date:
2015-10-21 12:53:58 UTC
List:
ruby-core #71134
Issue #11415 has been updated by Yukihiro Matsumoto.
> I hate autoload. autoload is one of things I regret. I'm not positive about enhancing something I hate.
-- matz in https://speakerdeck.com/skade/the-dark-side-of-matz-1
How about using `const_missing`?
Matz.
----------------------------------------
Feature #11415: autoload with a Proc
https://bugs.ruby-lang.org/issues/11415#change-54506
* Author: Matthew Draper
* Status: Open
* Priority: Normal
* Assignee:
----------------------------------------
`autoload` currently allows you to run arbitrary code when a constant is referenced, as long as that code is written to a file.
I propose extending `autoload` to also accept a Proc in place of the string filename.
Usage:
autoload :Foo, -> { ::Object.const_set :Foo, 42 }
autoload :Bar, -> { require "bar_1"; require "bar_2" }
autoload :Baz, -> { with_special_lock { require "baz" } }
No built-in concurrency protection is provided: if a second thread encounters a constant reference before the first one sets the constant, the second thread will also enter the Proc.
Under simple usage, the proc will still call require at some point -- then require's locking will take effect. A more advanced user can apply their own locking.
I believe this is sufficient to allow the Rails dependency loader to use autoload instead of const_missing, and fix the "nested constants" problem.
The implementation is quite small, and it doesn't seem to make the dangers of autoload any worse than they already are. Hopefully, it can provide an easier place for users to experiment in ways to save autoload by making it more generally safe.
*Alternatives*
For Rails's purposes, nested constants could also be solved by a `missing_constant` (or similar) macro:
module Foo; end
module Bar; end
Foo::Bar # => returns ::Bar
module Foo; missing_constant :Bar; end
module Bar
Foo::Bar # => invokes Foo.const_missing(:Bar)
More directly, instead of passing a Proc to autoload, a caller can write the code to a tempfile, and then specify that tempfile's path.
---Files--------------------------------
autoload-proc.patch (5.83 KB)
--
https://bugs.ruby-lang.org/