Forum: Ruby-core [ruby-trunk - Feature #7835][Open] autoload will be dead

2abdb50caf0dc5b510330f68b02db8e4?d=identicon&s=25 rosenfeld (Rodrigo Rosenfeld Rosas) (Guest)
on 2013-02-12 14:26
(Received via mailing list)
Issue #7835 has been reported by rosenfeld (Rodrigo Rosenfeld Rosas).

----------------------------------------
Feature #7835: autoload will be dead
https://bugs.ruby-lang.org/issues/7835

Author: rosenfeld (Rodrigo Rosenfeld Rosas)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:


A while ago matz declared his intention to remove the autoload feature
from the Ruby language. It was sent to the ruby-core mailing list but no
ticket has been created for it.

I'm creating the ticket now so that we could discuss the idea here.

----
Posted by Yukihiro Matsumoto on 2011-11-19 08:12
Hi,

Today, I talked with NaHi about enhancing const_missing to enable
autoload-like feature with nested modules.  But autoload itself has
fundamental flaw under multi-thread environment.  I should have remove
autoload when I added threads to the language (threads came a few
months after autoload).

So I hereby declare the future deprecation of autoload.  Ruby will
keep autoload for a while, since 2.0 should keep compatibility to 1.9.
But you don't expect it will survive further future, e.g. 3.0.

I strongly discourage the use of autoload in any standard libraries.

              matz.
----
2abdb50caf0dc5b510330f68b02db8e4?d=identicon&s=25 rosenfeld (Rodrigo Rosenfeld Rosas) (Guest)
on 2013-02-12 14:27
(Received via mailing list)
Issue #7835 has been updated by rosenfeld (Rodrigo Rosenfeld Rosas).


+1 for removing autoload. It not only has troubles with thread safety,
which I believe is fixable (although I confess I haven't thought much
about it).

There is a more serious issue in my opinion that is unfixable with
current specs.

For a while I've been experiencing a subtle bug in my Rails application
that only happened on development mode (when autoload is enabled) and
only for the first request. Recently I decided to understand what was
happening and Xavier Noria showed me what was happening.

The problem is that I had some custom classes that relied on
ActionView::Helpers::NumberHelper. Since all code in number_helper.rb
was self-contained and it had no extra dependencies on ActionView, I
just used it directly and my unit tests passed and my application always
worked except for the first request when my custom class was used by the
controller.

The problem is that once Rails is loaded it will declare an auto-load
dependency on ActionView. Then when I "require
'action_view/helpers/number_helper'" that file will be something like:

module ActionView
  module Helpers
    module NumberHelper

But since Helpers is set up to use autoload, once "module Helpers" is
found, it will load "action_view/helpers.rb". And this file will then
require "action_view/helpers/number_helper.rb" which causes a circular
dependency problem.

Here is a complete Ruby-only code exemplifying the issue:

./test.rb:
autoload :A, 'a'
require 'a/b'

./lib/a.rb:
require 'a/b'

./lib/a/b.rb:
module A
  module B
  end
end

ruby -I lib test.rb

This kind of bug may be hard to track, so I agree with Matz that
autoload should be dead.

----------------------------------------
Feature #7835: autoload will be dead
https://bugs.ruby-lang.org/issues/7835#change-36169

Author: rosenfeld (Rodrigo Rosenfeld Rosas)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:


A while ago matz declared his intention to remove the autoload feature
from the Ruby language. It was sent to the ruby-core mailing list but no
ticket has been created for it.

I'm creating the ticket now so that we could discuss the idea here.

----
Posted by Yukihiro Matsumoto on 2011-11-19 08:12
Hi,

Today, I talked with NaHi about enhancing const_missing to enable
autoload-like feature with nested modules.  But autoload itself has
fundamental flaw under multi-thread environment.  I should have remove
autoload when I added threads to the language (threads came a few
months after autoload).

So I hereby declare the future deprecation of autoload.  Ruby will
keep autoload for a while, since 2.0 should keep compatibility to 1.9.
But you don't expect it will survive further future, e.g. 3.0.

I strongly discourage the use of autoload in any standard libraries.

              matz.
----
F24ff61beb80aa5f13371aa22a35619c?d=identicon&s=25 mame (Yusuke Endoh) (Guest)
on 2013-02-12 14:33
(Received via mailing list)
Issue #7835 has been updated by mame (Yusuke Endoh).

Status changed from Open to Rejected

Matz created #5653 by himself.  Please reply into that ticket :-)

--
Yusuke Endoh <mame@tsg.ne.jp>
----------------------------------------
Feature #7835: autoload will be dead
https://bugs.ruby-lang.org/issues/7835#change-36170

Author: rosenfeld (Rodrigo Rosenfeld Rosas)
Status: Rejected
Priority: Normal
Assignee:
Category:
Target version:


A while ago matz declared his intention to remove the autoload feature
from the Ruby language. It was sent to the ruby-core mailing list but no
ticket has been created for it.

I'm creating the ticket now so that we could discuss the idea here.

----
Posted by Yukihiro Matsumoto on 2011-11-19 08:12
Hi,

Today, I talked with NaHi about enhancing const_missing to enable
autoload-like feature with nested modules.  But autoload itself has
fundamental flaw under multi-thread environment.  I should have remove
autoload when I added threads to the language (threads came a few
months after autoload).

So I hereby declare the future deprecation of autoload.  Ruby will
keep autoload for a while, since 2.0 should keep compatibility to 1.9.
But you don't expect it will survive further future, e.g. 3.0.

I strongly discourage the use of autoload in any standard libraries.

              matz.
----
2abdb50caf0dc5b510330f68b02db8e4?d=identicon&s=25 rosenfeld (Rodrigo Rosenfeld Rosas) (Guest)
on 2013-02-12 14:41
(Received via mailing list)
Issue #7835 has been updated by rosenfeld (Rodrigo Rosenfeld Rosas).


Thanks, Yusuke! I tried to search it on Redmine but I couldn't easily
find it nor I could filter for issues created by matz, for instance...
----------------------------------------
Feature #7835: autoload will be dead
https://bugs.ruby-lang.org/issues/7835#change-36171

Author: rosenfeld (Rodrigo Rosenfeld Rosas)
Status: Rejected
Priority: Normal
Assignee:
Category:
Target version:


A while ago matz declared his intention to remove the autoload feature
from the Ruby language. It was sent to the ruby-core mailing list but no
ticket has been created for it.

I'm creating the ticket now so that we could discuss the idea here.

----
Posted by Yukihiro Matsumoto on 2011-11-19 08:12
Hi,

Today, I talked with NaHi about enhancing const_missing to enable
autoload-like feature with nested modules.  But autoload itself has
fundamental flaw under multi-thread environment.  I should have remove
autoload when I added threads to the language (threads came a few
months after autoload).

So I hereby declare the future deprecation of autoload.  Ruby will
keep autoload for a while, since 2.0 should keep compatibility to 1.9.
But you don't expect it will survive further future, e.g. 3.0.

I strongly discourage the use of autoload in any standard libraries.

              matz.
----
This topic is locked and can not be replied to.