title: Why are autoload, load_all! and require all used in active_support.rb?
body: <p>I was looking at <code>active_support.rb</code> to try to understand the load process it uses. It uses three loading methods: <code>load_all!</code>, <code>autoload</code> and <code>require</code>. 
  Why use three different ways of loading in the same file?</p>
  
  <pre><code>module ActiveSupport
    def self.load_all!
      [Dependencies, Deprecation, Gzip, MessageVerifier, Multibyte, SecureRandom, TimeWithZone]
    end
  
    autoload :BacktraceCleaner, 'active_support/backtrace_cleaner'
    autoload :Base64, 'active_support/base64'
    autoload :BasicObject, 'active_support/basic_object'
    autoload :BufferedLogger, 'active_support/buffered_logger'
    autoload :Cache, 'active_support/cache'
    autoload :Callbacks, 'active_support/callbacks'
    autoload :Deprecation, 'active_support/deprecation'
    autoload :Duration, 'active_support/duration'
    autoload :Gzip, 'active_support/gzip'
    autoload :Inflector, 'active_support/inflector'
    autoload :Memoizable, 'active_support/memoizable'
    autoload :MessageEncryptor, 'active_support/message_encryptor'
    autoload :MessageVerifier, 'active_support/message_verifier'
    autoload :Multibyte, 'active_support/multibyte'
    autoload :OptionMerger, 'active_support/option_merger'
    autoload :OrderedHash, 'active_support/ordered_hash'
    autoload :OrderedOptions, 'active_support/ordered_options'
    autoload :Rescuable, 'active_support/rescuable'
    autoload :SecureRandom, 'active_support/secure_random'
    autoload :StringInquirer, 'active_support/string_inquirer'
    autoload :TimeWithZone, 'active_support/time_with_zone'
    autoload :TimeZone, 'active_support/values/time_zone'
    autoload :XmlMini, 'active_support/xml_mini'
  end
  
  require 'active_support/vendor'
  require 'active_support/core_ext'
  require 'active_support/dependencies'
  require 'active_support/json'
  
  I18n.load_path &lt;&lt; "#{File.dirname(__FILE__)}/active_support/locale/en.yml"
  </code></pre>