[#57574] [ruby-trunk - Feature #8976][Open] file-scope freeze_string directive — "akr (Akira Tanaka)" <akr@...>
70 messages
2013/10/02
[#57579] [ruby-trunk - Feature #8977][Open] String#frozen that takes advantage of the deduping — "sam.saffron (Sam Saffron)" <sam.saffron@...>
25 messages
2013/10/02
[#57633] [ruby-trunk - Bug #8983][Open] [PATCH] GC.stat[:heap_free_num] returns number of unused slots on heap — "tmm1 (Aman Gupta)" <ruby@...1.net>
8 messages
2013/10/03
[#57667] [ruby-trunk - Feature #8985][Open] xwillfree - promise to free memory — "funny_falcon (Yura Sokolov)" <funny.falcon@...>
5 messages
2013/10/04
[#57679] [ruby-trunk - Feature #8987][Open] map/collect extension which handles arguments — "sowieso (So Wieso)" <sowieso@...>
16 messages
2013/10/05
[#57680] [ruby-trunk - Feature #8987] map/collect extension which handles arguments
— "sawa (Tsuyoshi Sawada)" <sawadatsuyoshi@...>
2013/10/05
[#57693] [PATCH 0/2] Fix strptime '%s' — Felipe Contreras <felipe.contreras@...>
Hi,
7 messages
2013/10/07
[#57694] [PATCH 1/2] time: fix strptime '%s'
— Felipe Contreras <felipe.contreras@...>
2013/10/07
'%s' is meant to imply UTC, however:
[#57703] Re: [PATCH 1/2] time: fix strptime '%s'
— Tanaka Akira <akr@...>
2013/10/07
2013/10/7 Felipe Contreras <felipe.contreras@gmail.com>:
[#57711] Re: [PATCH 1/2] time: fix strptime '%s'
— Felipe Contreras <felipe.contreras@...>
2013/10/07
On Mon, Oct 7, 2013 at 10:17 AM, Tanaka Akira <akr@fsij.org> wrote:
[#57705] [ruby-trunk - Feature #8992][Open] Use String#freeze and compiler tricks to replace "str"f suffix — "headius (Charles Nutter)" <headius@...>
43 messages
2013/10/07
[#57840] [ruby-trunk - Feature #8992] Use String#freeze and compiler tricks to replace "str"f suffix
— "sam.saffron (Sam Saffron)" <sam.saffron@...>
2013/10/13
[#57727] [ruby-trunk - Feature #8998][Open] string keys for hash literals should use fstrings — "normalperson (Eric Wong)" <normalperson@...>
17 messages
2013/10/08
[#57743] [ruby-trunk - Feature #8998] string keys for hash literals should use fstrings
— "normalperson (Eric Wong)" <normalperson@...>
2013/10/08
[#57756] Re: [ruby-trunk - Feature #8998] string keys for hash literals should use fstrings
— Eric Wong <normalperson@...>
2013/10/09
I think my failed patch exposes a bug with lazy sweep + rb_fstring.
[#57771] [ruby-trunk - Bug #9008][Open] TestProcess#test_clock_getres_constants and TestProcess#test_clock_gettime_constants fails on ARM — "vo.x (Vit Ondruch)" <v.ondruch@...>
15 messages
2013/10/09
[#57852] [ruby-trunk - Bug #9008] TestProcess#test_clock_getres_constants and TestProcess#test_clock_gettime_constants fails on ARM
— "kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...>
2013/10/14
[#57884] [ruby-trunk - Bug #9008] TestProcess#test_clock_getres_constants and TestProcess#test_clock_gettime_constants fails on ARM
— "kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...>
2013/10/15
[#57794] [ruby-trunk - Bug #9011][Open] rb_fstring unsafe to use in general case — "normalperson (Eric Wong)" <normalperson@...>
4 messages
2013/10/10
[#57812] [ruby-trunk - Bug #9013][Open] Crash on start — "lemonez (Dmitry Popov)" <lemon@...>
6 messages
2013/10/10
[#57849] [ruby-trunk - Feature #9020][Open] Net::HTTPResponse predicate/query methods — "timcraft (Tim Craft)" <redmine@...>
7 messages
2013/10/14
[#57862] [CommonRuby - Feature #9023][Open] Array#tail — "fuadksd (Fuad Saud)" <fuadksd@...>
9 messages
2013/10/15
[#57888] [ruby-trunk - Feature #9025][Open] Clarify the error message when calling a method with the wrong number of arguments — Nerian (Gonzalo Rodríguez) <siotopo@...>
11 messages
2013/10/15
[#57913] cxxflags for C++ library bindings not working for Ruby 1.9.x and 2.0? — Stefan Salewski <mail@...>
Dear Sirs,
4 messages
2013/10/17
[#57916] Re: cxxflags for C++ library bindings not working for Ruby 1.9.x and 2.0?
— Nobuyoshi Nakada <nobu@...>
2013/10/17
(13/10/17 22:03), Stefan Salewski wrote:
[#57950] [ruby-trunk - Bug #9039][Open] [PATCH] socket: avoid unnecessary ppoll/select on Linux (part 3) — "normalperson (Eric Wong)" <normalperson@...>
8 messages
2013/10/21
[#57951] [ruby-trunk - Bug #9040][Open] Readline duplicate file descriptors but doesn't close them — "eweb (Eamonn Webster)" <eamonn.webster@...>
8 messages
2013/10/21
[#57986] [ruby-trunk - Bug #9040] Readline duplicate file descriptors but doesn't close them
— "akr (Akira Tanaka)" <akr@...>
2013/10/23
[#57967] [ruby-trunk - Feature #9043][Open] Add String#f method as shortcut for #freeze — "headius (Charles Nutter)" <headius@...>
8 messages
2013/10/22
[#58007] [ruby-trunk - Feature #9049][Open] Shorthands (a:b, *) for inclusive indexing — "mohawkjohn (John Woods)" <john.o.woods@...>
25 messages
2013/10/24
[#58011] [ruby-trunk - Feature #9049] Shorthands (a:b, *) for inclusive indexing
— "boris_stitnicky (Boris Stitnicky)" <boris@...>
2013/10/24
[#58012] Re: [ruby-trunk - Feature #9049] Shorthands (a:b, *) for inclusive indexing
— David MacMahon <davidm@...>
2013/10/24
[#58013] Re: [ruby-trunk - Feature #9049] Shorthands (a:b, *) for inclusive indexing
— Fuad Saud <fuadksd@...>
2013/10/24
How is a:b better than a..b? two dots are straightforward, unambiguous, well known.
[#58080] [ruby-trunk - Feature #9064][Open] Add support for packages, like in Java — "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...>
23 messages
2013/10/30
[#58083] [ruby-trunk - Feature #9064] Add support for packages, like in Java
— "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...>
2013/10/30
[#58114] [ruby-trunk - Feature #9068][Open] [PATCH (trivial)] thread.c: reduce rb_mutex_t size by 8 bytes on x86_64 — "normalperson (Eric Wong)" <normalperson@...>
5 messages
2013/10/31
[#58115] Re: [ruby-trunk - Feature #9068][Open] [PATCH (trivial)] thread.c: reduce rb_mutex_t size by 8 bytes on x86_64
— KOSAKI Motohiro <kosaki.motohiro@...>
2013/10/31
(10/31/13 3:42 PM), normalperson (Eric Wong) wrote:
[#58116] Re: [ruby-trunk - Feature #9068][Open] [PATCH (trivial)] thread.c: reduce rb_mutex_t size by 8 bytes on x86_64
— Eric Wong <normalperson@...>
2013/10/31
KOSAKI Motohiro <kosaki.motohiro@gmail.com> wrote:
[ruby-core:57974] [CommonRuby - Feature #8556] MutexedDelegator as a trivial way to make an object thread-safe
From:
"ko1 (Koichi Sasada)" <redmine@...>
Date:
2013-10-22 14:55:48 UTC
List:
ruby-core #57974
Issue #8556 has been updated by ko1 (Koichi Sasada).
Sorry for late.
----
Summary: I believe we need more experience before including this library as standard.
(1) Try gem first
Basically, libraries written in Ruby can be provided by a gem easilly.
We can prove the usefulness with real experiece by this approach.
In other words, we shouldn't provide any libraries without such proof.
(2) Misleading design
I'm afraid that this library introduce bugs under misunderstanding.
For example, people consider that this object is without worry about
synchronization, people may write the following program.
# In fact, *I* wrote this program first without any question!!
####
require 'delegate'
require 'monitor'
class SynchronizedDelegator < SimpleDelegator
def initialize(*)
super
@monitor = Monitor.new
end
def method_missing(m, *args, &block)
begin
monitor = @monitor
monitor.mon_enter
super
ensure
monitor.mon_exit
end
end
end
sdel_ary = SynchronizedDelegator.new([0])
ary = [0]
m = Mutex.new
ts = (1..2).map{
Thread.new{
100_000.times{
sdel_ary[0] += 1 # -> 1
sdel_ary[0] -= 1 # -> 0
m.synchronize{
ary[0] += 1
ary[0] -= 1
}
}
}
}
ts.each{|t| t.join}
p sdel_ary #=> [40] # or something wrong result
p ary #=> [0]
####
At first I see this result, I can't understand why.
Of course, this program is completely bad program.
It is completely my mistake.
But I think this design will lead such misunderstanding and bugs easily.
To avoid a such bug, I define the inc() and sub() method in Array.
####
class Array
def inc; self[0] += 1; end
def sub; self[0] -= 1; end
end
sdel_ary = SynchronizedDelegator.new([0])
ts = (1..2).map{
Thread.new{
100_000.times{
sdel_ary.inc
sdel_ary.sub
}
}
}
ts.each{|t| t.join}
p sdel_ary[0] #=> 200000
####
This works completely.
But a person who assumes sdel_ary is free from consideration about locking,
can write the following program:
####
class << sdel_ary
def inc; self[0] += 1; end
def sub; self[0] -= 1; end
end
ts = (1..2).map{
Thread.new{
100_000.times{
sdel_ary.inc
sdel_ary.sub
}
}
}
ts.each{|t| t.join}
p sdel_ary[0] #=> 229
####
This doesn't work correctly (different from the person expect).
I feel we can find other cases.
Maybe professional about concurrency program can avoid such silly bugs.
But if we introduce it as standard library, I'm afraid they are not.
(3) Lock based thraed programming
This is my opinion. So it is weak objection for this proposal.
I believe lock based thread programming introduced many bugs.
(Synchronized) Queue or more high-level structures should be used.
Or use Mutex (or monitor) explicitly for fing-grain locking.
It bothers programmers, so programmers use other approachs such as Queue (I hope).
Summary:
Mainly, my objection is based on (1) and (2).
Concurrency is a very difficult theme.
I feel 2.1 is too early to include this feature.
At least, we need more experience about this feature to introduce.
I'm not against that professionals use this libarary.
----------------------------------------
Feature #8556: MutexedDelegator as a trivial way to make an object thread-safe
https://bugs.ruby-lang.org/issues/8556#change-42550
Author: headius (Charles Nutter)
Status: Assigned
Priority: Normal
Assignee: ko1 (Koichi Sasada)
Category:
Target version: Ruby 2.1.0
=begin
I propose adding (({MutexedDelegator})) as a simple way to wrap any object with a thread-safe wrapper, via existing delegation logic in ((%delegate.rb%)).
(({Delegator})) provides a way to pass method calls through to a wrapped object. (({SimpleDelegator})) is a trivial implementation that just holds the object in an instance variable. (({MutexedDelegator})) would extend (({SimpleDelegator})) and only override initialize and (({method_missing})) as follows:
class MutexedDelegator < SimpleDelegator
def initialize(*)
super
@mutex = Mutex.new
end
def method_missing(m, *args, &block)
target, mutex = self.__getobj__, @mutex
begin
mutex.lock
target.__send__(m, *args, &block)
ensure
mutex.unlock
end
end
end
The only changes here are:
* (({Mutex#lock})) and (({unlock})) logic wrapping the send
* No (({respond_to?})) check; I'm not sure why it's there to begin with, since if we're in (({method_missing})) the (({super()})) call will fail just like a normal (({method_missing})) failure anyway
* No backtrace manipulation. This does not work on JRuby and Rubinius anyway, and in this case I feel that the delegator should not hide itself, since there's real behavior change happening.
This is a trivial addition to stdlib that would make it simple to synchronize all calls to a given object in the same way as the JDK's (({Collections.synchronizedSet}))/(({Map}))/(({List})) calls.
=end
--
http://bugs.ruby-lang.org/