[#28395] [Bug #2830] Some methods raise ArgumentError instead of TypeError — Marc-Andre Lafortune <redmine@...>
Bug #2830: Some methods raise ArgumentError instead of TypeError
[#28405] [Feature #2832] Vector#each and Enumerable — Marc-Andre Lafortune <redmine@...>
Feature #2832: Vector#each and Enumerable
[#28452] Watched issues on redmine — Caleb Clausen <vikkous@...>
Is there a page on redmine that will show me the list of issues that
[#28482] Question on scoped constant resolution Class vs Module — Peter McLain <peter.mclain@...>
I asked this on ruby-talk, but didn't get anywhere. Someone suggested
[#28505] [Bug #2838] Ruby 1.8.7 (2009-06-12 patchlevel 174) strange round behaviour — P K <redmine@...>
Bug #2838: Ruby 1.8.7 (2009-06-12 patchlevel 174) strange round behaviour
[#28552] [Bug #2945] Regexp#=== is failed by an exception when the exception is occurred in method_missing — Kenta Murata <redmine@...>
Bug #2945: Regexp#=== is failed by an exception when the exception is occurred in method_missing
Hi,
Hi,
Hi,
Hi,
[#28561] Ruby::DL vs Ruby::FFI — Aston <blackapache512-ticket@...>
Ruby.DL and FFI libraries are great for programmers like me who are not internet programmers, but are more interested in scientific and number processing etc.
On Mon, Mar 8, 2010 at 4:56 PM, Aston <blackapache512-ticket@yahoo.com> wrote:
[#28576] "rake not found" error on a rubygems test — Yusuke ENDOH <mame@...>
Hi Eric Hodel,
[#28583] build failure on 26861 using msys/mingw — Jon <jon.forums@...>
Can anyone replicate? I've recently updated both binutils and the mingw runtime so this may very well be my configuration.
[#28602] [Bug #2952] Time.strftime format %N — Russell Penney <redmine@...>
Bug #2952: Time.strftime format %N
[#28643] [Bug #2957] IO.print emits field separator after each object, rather than between — Daniel Kelley <redmine@...>
Bug #2957: IO.print emits field separator after each object, rather than between
[#28665] [ANN] 1.9.2 release plan — Yusuke ENDOH <mame@...>
Hi,
[#28686] trunk (26947) build fail with msys/mingw/vista — Jon <jon.forums@...>
I get the following build failure when msysgit's "c:\git\cmd" dir is on PATH.
On Tue, Mar 16, 2010 at 5:50 AM, Jon <jon.forums@gmail.com> wrote:
[#28712] When a trace hook raises an exception, should it terminate the program? — Rocky Bernstein <rockyb@...>
In Ruby 1.8 and the Ruby 1.9 trunk when running a trace hook that raises an
On Wed, Mar 17, 2010 at 5:42 AM, Rocky Bernstein <rockyb@rubyforge.org> wrote:
Let me clarify a bit because I think some of the facts (some by me) may have
On Thu, Mar 18, 2010 at 5:52 AM, Rocky Bernstein <rockyb@rubyforge.org> wrote:
[#28724] [Feature:trunk] Array#repeated_(permutation|combination) — "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp>
New methods Array#repeated_(permutation|combination).
[#28735] [Bug #2982] Ruby tries to link with both openssl and readline — Lucas Nussbaum <redmine@...>
Bug #2982: Ruby tries to link with both openssl and readline
Issue #2982 has been updated by caleb clausen.
Hi,
[#28783] [Feature #2065] An ancestors iterator — Simon Chiang <redmine@...>
Issue #2065 has been updated by Simon Chiang.
Hi,
[#28837] [Bug #2993] Module#instance_methods' flag seems to be ignored in singleton classes — Xavier Noria <redmine@...>
Bug #2993: Module#instance_methods' flag seems to be ignored in singleton classes
[#28859] st.c: pool allocator for tables and entries — Eric Wong <normalperson@...>
Hi all,
[#28865] Can DRb be used across a fork() — Chris Schlaeger <cschlaeger@...>
I'm trying to use DRb to communicate between a parent and child
[#28871] WeakRef extending Delegator is a bug waiting to happen? — Charles Oliver Nutter <headius@...>
Hopefully this doesn't contradict my other email too much :)
[#28902] [Bug #2998] gets fails in mingw — Roger Pack <redmine@...>
Bug #2998: gets fails in mingw
[#28907] [Bug #3000] Open SSL Segfaults — Christian Höltje <redmine@...>
Bug #3000: Open SSL Segfaults
Issue #3000 has been updated by Hiroshi NAKAMURA.
Hi,
Hi,
Hi,
[#28924] [Bug #3005] Ruby core dump - [BUG] rb_sys_fail() - errno == 0 — Sebastian YEPES <redmine@...>
Bug #3005: Ruby core dump - [BUG] rb_sys_fail() - errno == 0
[#28954] [Feature #3010] slow require gems in ruby 1.9.1 — Miao Jiang <redmine@...>
Feature #3010: slow require gems in ruby 1.9.1
[#29019] [Bug #3015] NetBSD vs test/dl — Michael Graff <redmine@...>
Bug #3015: NetBSD vs test/dl
On Fri, Mar 26, 2010 at 11:49:59AM +0900, Michael Graff wrote:
[#29031] [Feature #1395](Open) Steppable Kernel::eval — Yusuke Endoh <redmine@...>
Issue #1395 has been updated by Yusuke Endoh.
[#29045] [Feature #3021] Array#product should accept a block. — Marc-Andre Lafortune <redmine@...>
Feature #3021: Array#product should accept a block.
[#29092] merged psych to trunk — Aaron Patterson <aaron@...>
Hey everyone,
[#29118] [Bug #3051] psych is too osx-specifc — Michael Graff <redmine@...>
Bug #3051: psych is too osx-specifc
[#29128] [Bug #3052] DRb::start_service fails to detect used port — Chris Schlaeger <redmine@...>
Bug #3052: DRb::start_service fails to detect used port
Issue #3052 has been updated by Yusuke Endoh.
[#29131] [trunk:bug] Many rubygems tests fail with psych tests. — Tanaka Akira <akr@...>
Many rubygems tests fail with psych tests.
(2010/03/30 17:55), Tanaka Akira wrote:
On Tue, Mar 30, 2010 at 07:13:32PM +0900, NARUSE, Yui wrote:
[#29161] [Bug #3058] Inconsistent eol conversion of IO#read on Windows — Heesob Park <redmine@...>
Bug #3058: Inconsistent eol conversion of IO#read on Windows
[#29167] [Feature #3067] complex.c : Question: why Complex#~ is disabled? It's in the doc — Benoit Daloze <redmine@...>
Feature #3067: complex.c : Question: why Complex#~ is disabled? It's in the doc
[#29179] [Bug #3071] Convert rubygems and rdoc to use psych — Aaron Patterson <redmine@...>
Bug #3071: Convert rubygems and rdoc to use psych
Doesn't this mean the the RubyGems codevase would now be forked
Issue #3071 has been updated by Nobuyoshi Nakada.
[#29186] [Bug #3072] Classes Inheriting from Data — Run Paint Run Run <redmine@...>
Bug #3072: Classes Inheriting from Data
[ruby-core:28767] Re: [Feature #2065] An ancestors iterator
Hi Simon,
2010/3/19 Simon Chiang <redmine@ruby-lang.org>:
> This is for 100k iterations, so no it's not a bottleneck but likewise that's not why I make this request. I make the request because it would be significantly faster to not generate the ancestors array each time (~20% in this case, which illustrates what is probably the maximum increase for getting an each_ancestor iterator).
I cannot get your point. If you admit it is not bottleneck, I wonder
why you hope it faster.
You should know adding a method is not free in terms of maintenance.
> Ok, I attached a benchmark that is designed to measure the time required for generating the ancestors array.
Thanks, I could understand what you want to do.
If you want speed at any rate, how about manual search by using
Class#superclass?
It is probably faster than each_ancestor because it does not
yield a block.
module Dsl2
def self.extended(base)
base.registry ||= {}
end
def inherited(base)
base.registry ||= {}
end
attr_accessor :registry
def set(key, value)
registry[key] = value
end
def value(key)
klass = self
while klass
if klass.registry.has_key?(key)
return klass.registry[key]
end
klass = klass.superclass
end
end
end
Benchmark without cache
user system total real
A.value(:one) 0.340000 0.000000 0.340000 ( 0.340906)
B.value(:two) 0.340000 0.000000 0.340000 ( 0.349000)
C.value(:three) 0.360000 0.000000 0.360000 ( 0.357215)
Benchmark with cache
user system total real
A.value(:one) 0.240000 0.000000 0.240000 ( 0.235161)
B.value(:two) 0.230000 0.000000 0.230000 ( 0.236722)
C.value(:three) 0.240000 0.000000 0.240000 ( 0.233931)
Array.new 0.080000 0.000000 0.080000 ( 0.084003)
Benchmark with manual search
user system total real
A2.value(:one) 0.130000 0.000000 0.130000 ( 0.122530)
B2.value(:two) 0.120000 0.000000 0.120000 ( 0.120361)
C2.value(:three) 0.110000 0.000000 0.110000 ( 0.119009)
--
Yusuke ENDOH <mame@tsg.ne.jp>
Attachments (1)
require 'benchmark'
# A basic version of a dsl that registers key-value pairs onto a Class. When
# looking up a key-value pair, Classes that use the dsl will check the
# registry of each ancestor in order, as if looking up a method.
#
# Call cache_ancestors! to cache the ancestry and speedup lookup.
module Dsl
def self.extended(base)
base.registry ||= {}
base.cache = nil
end
def inherited(base)
base.registry ||= {}
base.cache = nil
end
attr_accessor :registry
attr_accessor :cache
def set(key, value)
registry[key] = value
end
def value(key)
each_ancestor do |ancestor|
if ancestor.registry.has_key?(key)
return ancestor.registry[key]
end
end
end
def cache_ancestors!
@cache = ancestors
end
def each_ancestor
(cache || ancestors).each {|ancestor| yield(ancestor)}
end
end
# Now the benchmarks, first without caching (ie regenerate ancestors each
# time), then with caching to model performance with an each_ancestor method.
puts "Benchmark without cache"
class A
extend Dsl
set(:one, 1)
end
class B < A
set(:two, 2)
end
class C < B
set(:three, 3)
end
Benchmark.bm(20) do |x|
n = 100000
x.report "A.value(:one)" do
n.times { A.value(:one) }
end
x.report "B.value(:two)" do
n.times { B.value(:two) }
end
x.report "C.value(:three)" do
n.times { C.value(:three) }
end
end
puts
puts "Benchmark with cache"
A.cache_ancestors!
B.cache_ancestors!
C.cache_ancestors!
Benchmark.bm(20) do |x|
n = 100000
x.report "A.value(:one)" do
n.times { A.value(:one) }
end
x.report "B.value(:two)" do
n.times { B.value(:two) }
end
x.report "C.value(:three)" do
n.times { C.value(:three) }
end
x.report "Array.new" do
n.times { Array.new }
end
end
module Dsl2
def self.extended(base)
base.registry ||= {}
end
def inherited(base)
base.registry ||= {}
end
attr_accessor :registry
def set(key, value)
registry[key] = value
end
def value(key)
klass = self
while klass
if klass.registry.has_key?(key)
return klass.registry[key]
end
klass = klass.superclass
end
end
end
puts
puts "Benchmark with manual search"
class A2
extend Dsl2
set(:one, 1)
end
class B2 < A2
set(:two, 2)
end
class C2 < B2
set(:three, 3)
end
Benchmark.bm(20) do |x|
n = 100000
x.report "A2.value(:one)" do
n.times { A2.value(:one) }
end
x.report "B2.value(:two)" do
n.times { B2.value(:two) }
end
x.report "C2.value(:three)" do
n.times { C2.value(:three) }
end
end