Project

General

Profile

Feature #12639

Speed up require in RubyGems by 5x

Added by segiddins (Samuel Giddins) about 3 years ago. Updated about 1 year ago.

Status:
Assigned
Priority:
Normal
Target version:
-
[ruby-core:76625]

Description

This patch makes requiring an already-loaded file approximated 5x faster when the RubyGems mixin for require is present.
Benchmarked via the following script:

require "rubygems"
require "benchmark/ips"

Benchmark.ips do |x|
    x.report("ruby") { gem_original_require "rubygems" }
    x.report("rubygems") { require "rubygems" }

    x.compare!
end

I understand that it's not ideal to add new global functions, and I'd appreciate guidance on where else I could expose this functionality to ruby code.

Thanks :)


Files

feature_loaded.patch (1.85 KB) feature_loaded.patch segiddins (Samuel Giddins), 07/31/2016 01:04 AM

History

Updated by nobu (Nobuyoshi Nakada) about 3 years ago

I'm not sure if it is acceptable for rubygems to skip loaded features.

+VALUE
+rb_f_loaded_feature(VALUE obj, VALUE fname)
+{
+  return rb_provided(RSTRING_PTR(rb_str_encode_ospath(fname))) ? Qtrue : Qfalse;
+}

Why is this function global?
And the argument of RSTRING_PTR should not have side effects.

Updated by hsbt (Hiroshi SHIBATA) about 1 year ago

  • Assignee set to hsbt (Hiroshi SHIBATA)
  • Status changed from Open to Assigned

Also available in: Atom PDF