[#45906] ' failures. — Tanaka Akira <akr@...>
' の扱いが変化したことで、テストが失敗しているようです。
9 messages
2012/07/04
[#45910] [ruby-trunk - Bug #6694][Open] Thread.new without block. — "ko1 (Koichi Sasada)" <redmine@...>
24 messages
2012/07/04
[#45928] Re: [ruby-cvs:43524] kosaki:r36348 (trunk): * include/ruby/ruby.h: Removed RUBY_GLOBAL_SETUP complely. It is — SASADA Koichi <ko1@...>
ささだです.
3 messages
2012/07/09
[#45973] [ruby-trunk - Bug #6751][Assigned] remove tempfiles early. — "akr (Akira Tanaka)" <akr@...>
4 messages
2012/07/18
[#45976] [ruby-trunk - Bug #6756][Open] FileUtils.rm_rf がアクセス権のない空ディレクトリを削除しない — "fumiyas (Fumiyasu SATOH)" <fumiyas@...>
9 messages
2012/07/20
[#45977] [ruby-trunk - Feature #6757][Open] [PATCH] Add Process.getsid — "fumiyas (Fumiyasu SATOH)" <fumiyas@...>
6 messages
2012/07/20
[#46012] [ruby-trunk - Feature #6812][Open] Refactor gc.c — "authorNari (Narihiro Nakamura)" <authorNari@...>
13 messages
2012/07/30
[ruby-dev:45987] [ruby-trunk - Feature #6694] Thread.new without block.
From:
"brixen (Brian Ford)" <brixen@...>
Date:
2012-07-20 16:27:48 UTC
List:
ruby-dev #45987
Issue #6694 has been updated by brixen (Brian Ford).
ko1 (Koichi Sasada) wrote:
> (2012/07/20 22:42), brixen (Brian Ford) wrote:
> > I don't think I understand your question. To summarize my objection to this proposed API change: Thread stack size should be something set at the VM level completely outside of Ruby code. Ruby code should not be coupled with implementation details.
>
> I think I understand your question. And your question should be
> discussed on ticket 6695 <https://bugs.ruby-lang.org/issues/6695>.
>
> My proposal is *not* adding "initial stack size parameter for thread
> creation".
> It is only "configurable thread parameters". More general framework.
>
> I propose "stack size parameter" at next ticket (using this ticket):
> <https://bugs.ruby-lang.org/issues/6695>
>
>
> This ticket (6694):
> Change Thread.new() API to accept any initial parameters.
>
> Next ticket (6695):
> New parameters including stack size (machine stack size and VM
> stack size).
> Not only stack size, but also "name" and others.
> I think "name" is killer usage of this ticket (6694).
Thread#name doesn't require a new API for Thread.new. Thread#name makes sense as something that can be set any time.
The pthread_create() design rationale referenced by Urabe-san is relevant to this proposed API. For the same reasons discussed there, I would object to this API change. I don't see any real need for this API if stack size is not one of the things being set. Hence, this API proposal really looks like just a thin rationale for that proposal.
Cheers,
Brian
----------------------------------------
Feature #6694: Thread.new without block.
https://bugs.ruby-lang.org/issues/6694#change-28233
Author: ko1 (Koichi Sasada)
Status: Assigned
Priority: Normal
Assignee: ko1 (Koichi Sasada)
Category: core
Target version: 2.0.0
=begin
= Abstract
Support Thread.new() without block.
Before: Thread.new(params...){|thread_local_params| ...}
After: Thread.new(proc: lambda{|tl_params...| ...}, args: params..., other_thread_config...)
= Background
Thread.new creates new Thread object and run passed block in another thread immediately. Thread.new can receive parameters and pass all parameters to block.
Thread.new(a, b, c) do |ta, tb, tc|
# ta, tb, tc is thread local
}
There are some request to specify thread configurations such as stack size described in [Ruby 1.9 - Feature #3187] (in this case, stack size for Fiber.new). However, we have no way to pass such thread configuration on the Thread.new().
= Proposal
Allow Thread.new() without block. A block will be passed with proc parameter. Passed arguments will be passed with args parameter.
# ex1
Thread.new(){...}
#=>
Thread.new(proc: -> {...})
# ex2
Thread.new(a, b, c){|ta, tb, tc| ...}
#=>
Thread.new(proc: ->(ta, tb, tc){ ... }, params: [a, b, c])
If you want to specify stack size, then:
Thread.new(stack_size: 4096, proc: proc{...}, args: [a, b, c])
Note that I'll make another ticket for thread (and fiber) creation parameters.
This change can be described with the following pseudo code:
def Thread.new(*args, &block)
if block
Thread.new_orig(*args, &block)
else
config = args[0] || raise ArgumentError
stack_size = config[:stack_size]
# ... and process another parameters
Thread.new_orig(*config[:args], &config[:proc])
end
end
= Another proposal
On the [ruby-core:43385], Nahi-san proposed that if no block given on Thread.new(), then create "waiting" thread. Thread#run kicks waiting thread with parameters.
th = Thread.new(thread_config_params)
...
th.run(params){|thread_local_params|
...
}
We can combine with proc: parameter and this proposal. If Thread.new() doesn't have block and proc: parameter, then making a waiting thread.
NOTE: Because we have already Thread#run, Thread#start is better than Thread#run?
= Note
I don't make any survey on other languages. Please give us your comments.
=end
--
http://bugs.ruby-lang.org/