[#51834] [ruby-trunk - Bug #7780][Open] Marshal & YAML should deserialize only basic types by default. — "marcandre (Marc-Andre Lafortune)" <ruby-core@...>
[#51864] [ruby-trunk - Bug #7784][Open] [mingw] r39055 creates test failures and functionality loss — "jonforums (Jon Forums)" <redmine@...>
[#51870] [Backport93 - Backport #7786][Assigned] fix for abstract namespace — "shugo (Shugo Maeda)" <redmine@...>
[#51897] [ruby-trunk - Feature #7791][Open] Let symbols be garbage collected — "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...>
(2013/02/06 22:50), shyouhei (Shyouhei Urabe) wrote:
A slightly different idea, closer to the existing garbage collection:
I think Koichi's approach is a better one. I don't think there are any
(2013/02/07 20:25), Rodrigo Rosenfeld Rosas wrote:
On Wed, Feb 6, 2013 at 2:37 PM, rosenfeld (Rodrigo Rosenfeld Rosas)
[#51898] [ruby-trunk - Feature #7792][Open] Make symbols and strings the same thing — "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...>
On 8 February 2013 03:01, jeremyevans0 (Jeremy Evans) <
Em 07-02-2013 19:15, Matthew Kerwin escreveu:
Hi,
Em 07-02-2013 21:58, Yukihiro Matsumoto escreveu:
You don't need to hijack any code for it, you'd just use it as
Em 06-02-2013 12:36, Yorick Peterse escreveu:
I don't think I'm following you, can you explain what's supposedly
Em 06-02-2013 13:25, Yorick Peterse escreveu:
> What I'm trying to say is that the main reason why symbols exist in
Em 06-02-2013 16:22, Yorick Peterse escreveu:
> And "growing until you hit your memory limit" is actually only valid
On 7 February 2013 20:46, rosenfeld (Rodrigo Rosenfeld Rosas) wrote:
Em 07-02-2013 10:04, Matthew Kerwin escreveu:
On 7 February 2013 23:09, Rodrigo Rosenfeld Rosas wrote:
On Feb 7, 2013, at 10:43, David MacMahon <davidm@astro.berkeley.edu> wrote:
Issue #7792 has been updated by dsferreira (Daniel Ferreira).
[#51965] [ruby-trunk - Feature #7795][Open] Symbol.defined? and/or to_existing_symbol — "Student (Nathan Zook)" <blogger@...>
[#51977] [ruby-trunk - Feature #7797][Open] Hash should be renamed to StrictHash and a new Hash should be created to behave like AS HashWithIndifferentAccess — "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...>
[#52042] [ruby-trunk - Bug #7805][Open] ruby 2.0rc2 core on solaris — "groenveld@... (John Groenveld)" <groenveld@...>
[#52048] [ruby-trunk - Bug #7806][Open] inconsistency between Method#inspect and Method#name — "Hanmac (Hans Mackowiak)" <hanmac@...>
[#52073] [ruby-trunk - Bug #7815][Open] Backport: Warning about TracePoint events to 2.0.0 — "zzak (Zachary Scott)" <zachary@...>
[#52075] [ruby-trunk - Feature #7816][Open] Don't invalidate method caches when defining a new method on a class without subclasses — "charliesome (Charlie Somerville)" <charlie@...>
[#52077] [ruby-trunk - Bug #7817][Open] (Unable to compile Ruby 2.0.0-rc2 on OSX (clang version 2.1) — "injekt (Lee Jarvis)" <ljjarvis@...>
[#52087] [ruby-trunk - Bug #7820][Assigned] Let's decide Ruby 2.0 supported platform list — "mame (Yusuke Endoh)" <mame@...>
Dne 10.2.2013 13:01, mame (Yusuke Endoh) napsal(a):
[#52130] [ruby-trunk - Bug #7829][Open] Rounding error in Ruby Time — "loirotte (Philippe Dosch)" <loirotte@...>
2013/2/22 David MacMahon <davidm@astro.berkeley.edu>:
2013/4/4 David MacMahon <davidm@astro.berkeley.edu>:
2013/4/5 David MacMahon <davidm@astro.berkeley.edu>:
[#52131] [ruby-trunk - Bug #7830][Open] Ruby packages should not build with -Werror when distributed — "kremenek (Ted Kremenek)" <kremenek@...>
[#52165] [ruby-trunk - Feature #7839][Open] Symbol.freeze_symbols — "tenderlovemaking (Aaron Patterson)" <aaron@...>
[#52206] [ruby-trunk - Bug #7842][Assigned] An alias of a "prepend"ed method skips the original method when calling super — "mame (Yusuke Endoh)" <mame@...>
[#52215] [ruby-trunk - Bug #7845][Open] Strip doesn't handle unicode space characters in ruby 1.9.2 & 1.9.3 (does in 1.9.1) — "timothyg56 (Timothy Garnett)" <timothyg@...>
[#52254] p385 breaks bakward compatibility — V咜 Ondruch <v.ondruch@...>
Hi,
On 02/14 06:06, V?t Ondruch wrote:
[#52267] [ruby-trunk - Feature #7854][Open] New method Symbol[string] — "Student (Nathan Zook)" <blogger@...>
[#52371] Broken email notification from Redmine? — =?ISO-8859-2?Q?V=EDt_Ondruch?= <v.ondruch@...>
Hi,
[#52492] Redmine & utf in title bug — Marc-Andre Lafortune <ruby-core-mailing-list@...>
I notice a lot of
[#52495] [ruby-trunk - Bug #7879][Open] File.readable? fails when ruby runs as root — "balbi (Feliple Balbi)" <balbif@...>
[#52508] Should I document refinements in a PickAxe update? — Dave Thomas <dave@...>
Gentle core folk:
On Feb 18, 2013, at 19:58, Dave Thomas <dave@pragprog.com> wrote:
> I think a document in a PickAxe update with appropriate warnings would
2013/2/19 Dave Thomas <dave@pragprog.com>:
[#52581] Fwd: Fixnum: freeze status on ruby 2.0.0 rc2 — Ryan Davis <ryand-ruby@...>
[#52596] [CommonRuby - Feature #7895][Open] Exception#backtrace_locations to go with Thread#backtrace_locations and Kernel#caller_locations — "headius (Charles Nutter)" <headius@...>
(2013/02/21 6:02), headius (Charles Nutter) wrote:
On Thu, Feb 21, 2013 at 8:36 AM, SASADA Koichi <ko1@atdot.net> wrote:
[#52701] [ruby-trunk - Feature #7914][Open] Case for local class methods — "trans (Thomas Sawyer)" <transfire@...>
[#52704] Feature Request w/ Patch: CSV::Row, adds ".each_pair" as an alias for ".each" — Ryan Dowell <ssstarduster@...>
A very simple patch. Adds ".each_pair" as an alias to ".each" in
[#52722] [ruby-trunk - Bug #7917][Open] Can't write to a Logger in a signal handler — "mperham (Mike Perham)" <mperham@...>
"mperham (Mike Perham)" <mperham@gmail.com> wrote:
[#52723] Improving order of NEWS — Marc-Andre Lafortune <ruby-core-mailing-list@...>
I feel the NEWS are in the wrong order: C API, builtin classes, std-lib,
[#52727] [ruby-trunk - Feature #7918][Open] Create Signal.in_trap?() — "kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...>
(2013/02/23 11:31), kosaki (Motohiro KOSAKI) wrote:
[#52737] What's the *right* way to build Ruby from source on a Linux system that doesn't yet have Ruby? — Paul Sherwood <paul.sherwood@...>
We'd like to add Ruby support in a clean Linux environment which has
On Sat, Feb 23, 2013 at 9:38 AM, Paul Sherwood
On 23/02/2013 13:16, Luis Lavena wrote:
> On 23/02/2013 13:16, Luis Lavena wrote:
[#52876] [ruby-trunk - Bug #7957][Open] rb_str_modify() does not prevent shared string from rb_str_set_len() — "normalperson (Eric Wong)" <normalperson@...>
[#52877] Any documentation about debugging in Ruby 2.0.0 — Rodrigo Rosenfeld Rosas <rr.rosas@...>
Hi, I couldn't find how to debug Ruby 2.0.0 programs, but only a few
On Monday, February 25, 2013, Rodrigo Rosenfeld Rosas wrote:
Em 25-02-2013 10:47, Jeremy Kemper escreveu:
(2013/02/26 0:22), Rodrigo Rosenfeld Rosas wrote:
(2013/02/26 2:34), SASADA Koichi wrote:
Em 26-02-2013 15:14, SASADA Koichi escreveu:
(2013/02/27 4:19), Rodrigo Rosenfeld Rosas wrote:
Em 26-02-2013 17:23, SASADA Koichi escreveu:
I rewrite a debugger for Ruby 2.0.
Thank you very much, Koichi, but I couldn't get it to work yet:
[#52997] [ruby-trunk - Feature #7978][Open] boolean to_i — "alexeymuranov (Alexey Muranov)" <redmine@...>
[#53017] [ruby-trunk - Bug #7982][Open] rb_raise segfaults on %lli format with (0xffffffff + 1) — "erik.s.chang (Erik Chang)" <erik.s.chang@...>
[#53035] [ruby-trunk - Feature #7986][Open] Custom case statement comparison method — "trans (Thomas Sawyer)" <transfire@...>
[ruby-core:51828] [ruby-trunk - Bug #7158] require is slow in its bookkeeping; can make Rails startup 2.2x faster
Issue #7158 has been updated by lzap (Lukas Zapletal).
Ok the above looks like bug in lib/irb/locale.rb:
LC_ALL=C strace irb < /dev/null 2>&1 | grep ENOENT | wc -l
293
It not only triples amount of stat/open calls, it is like 17.5x faster. I am filling new bugreport for this.
----------------------------------------
Bug #7158: require is slow in its bookkeeping; can make Rails startup 2.2x faster
https://bugs.ruby-lang.org/issues/7158#change-35813
Author: gregprice (Greg Price)
Status: Closed
Priority: High
Assignee: h.shirosaki (Hiroshi Shirosaki)
Category: core
Target version: 2.0.0
ruby -v: ruby 1.9.3p194 (2012-04-20 revision 35409) [i686-linux]
=begin
Starting a large application in Ruby is slow. Most of the startup
time is not spent in the actual work of loading files and running Ruby
code, but in bookkeeping in the 'require' implementation. I've
attached a patch series which makes that bookkeeping much faster.
These patches speed up a large Rails application's startup by 2.2x,
and a pure-'require' benchmark by 3.4x.
These patches fix two ways in which 'require' is slow. Both problems
have been discussed before, but these patches solve the problems with
less code and stricter compatibility than previous patches I've seen.
* Currently we iterate through $LOADED_FEATURES to see if anything
matches the newly required feature. Further, each iteration
iterates in turn through $LOAD_PATH. Xavier Shay spotted this
problem last year and a series of patches were discussed
(in Issue #3924) to add a Hash index alongside $LOADED_FEATURES,
but for 1.9.3 none were merged; Masaya Tarui committed Revision r31875,
which mitigated the problem. This series adds a Hash index,
and keeps it up to date even if the user modifies $LOADED_FEATURES.
This is worth a 40% speedup on one large Rails application,
and 2.3x on a pure-'require' benchmark.
* Currently each 'require' call runs through $LOAD_PATH and calls
rb_file_expand_path() on each element. Yura Sokolov (funny_falcon)
proposed caching this last December in Issue #5767, but it wasn't
merged. This series also caches $LOAD_PATH, and keeps the cache up
to date with a different, less invasive technique. The cache takes
34 lines of code, and is worth an additional 57% speedup in
starting a Rails app and a 46% speedup in pure 'require'.
== Staying Compatible
With both the $LOADED_FEATURES index and the $LOAD_PATH cache,
* we exactly preserve the semantics of the user modifying $LOAD_PATH
or $LOADED_FEATURES;
* both $LOAD_PATH and $LOADED_FEATURES remain ordinary Arrays, with
no singleton methods;
* we make just one semantic change: each element of $LOAD_PATH and
$LOADED_FEATURES is made into a frozen string. This doesn't limit
the flexibility Ruby offers to the programmer in any way; to alter
an element of either array, one simply reassigns it to the new
value. Further, normal path-munging code which only adds and
removes elements shouldn't have to change at all.
These patches use the following technique to keep the cache and the
index up to date without modifying the methods of $LOADED_FEATURES or
$LOAD_PATH: we take advantage of the sharing mechanism in the Array
implementation to detect, in O(1) time, whether either array has been
mutated. We cause $LOADED_FEATURES to be shared with an Array we keep
privately in load.c; if anything modifies it, it will break the
sharing and we will know to rebuild the index. Similarly for
$LOAD_PATH.
== Benchmarks
First, on my company's Rails application, where $LOAD_PATH.size is 207
and $LOADED_FEATURES.size is 2126. I measured the time taken by
'bundle exec rails runner "p 1"'.
. Rails startup time,
version best of 5 speedup
v1_9_3_194 12.197s
v1_9_3_194+index 8.688s 1.40x
v1_9_3_194+index+cache 5.538s 2.20x
And now isolating the performance of 'require', by requiring
16000 empty files.
version time, best of 5 speedup
trunk (at r36920) 10.115s
trunk+index 4.363s 2.32x
trunk+index+cache 2.984s 3.39x
(The timings for the Rails application are based on the latest release
rather than trunk because a number of gems failed to compile against
trunk for me.)
== The Patches
I've attached four patches:
(1) Patch 1 changes no behavior at all. It adds comments and
simplifies a bit of code to help in understanding why patch 3 is
correct. 42 lines, most of them comments.
(2) Patch 2 adds a function to array.c which will help us tell when
$LOAD_PATH or $LOADED_FEATURES has been modified. 17 lines.
(3) Patch 3 adds the $LOADED_FEATURES index. 150 lines.
(4) Patch 4 adds the $LOAD_PATH cache. 34 lines.
Reviews and comments welcome -- I'm sure there's something I could do
to make these patches better. I hope we can get some form of them
into trunk before the next release. My life has been happier since I
switched to this version because commands in my Rails application all
run faster now, and I want every Ruby programmer to be happier in the
same way with 2.0 and ideally with 1.9.4.
=end
--
http://bugs.ruby-lang.org/