[#46105] [ruby-trunk - Feature #6687][Open] Enumerable#with — "merborne (kyo endo)" <redmine@...>

14 messages 2012/07/02

[#46133] [ruby-trunk - Feature #6688][Open] Object#replace — "prijutme4ty (Ilya Vorontsov)" <prijutme4ty@...>

24 messages 2012/07/03

[#46160] [ruby-trunk - Feature #6693][Open] Don't warn for unused variables starting with _ — "marcandre (Marc-Andre Lafortune)" <ruby-core@...>

15 messages 2012/07/04

[#46200] [ruby-trunk - Bug #6702][Open] Date should be either required or not — "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...>

14 messages 2012/07/05

[#46296] [ruby-trunk - Feature #6717][Open] Method like #instance_eval that returns self (like #tap) — "alexeymuranov (Alexey Muranov)" <redmine@...>

10 messages 2012/07/10

[#46320] [ruby-trunk - Feature #6721][Open] Object#yield_self — "alexeymuranov (Alexey Muranov)" <redmine@...>

25 messages 2012/07/11

[#46339] [ruby-trunk - Bug #6724][Open] waaaaaaant! ( — "zenspider (Ryan Davis)" <redmine@...>

11 messages 2012/07/11

[#46377] [ruby-trunk - Feature #6727][Open] Add Array#rest (with implementation) — "duckinator (Nick Markwell)" <nick@...>

25 messages 2012/07/13

[#46492] [ruby-trunk - Feature #6737][Open] Add Hash#read and alias as #[]. — "trans (Thomas Sawyer)" <transfire@...>

12 messages 2012/07/15

[#46500] [ruby-trunk - Feature #6739][Open] One-line rescue statement should support specifying an exception class — Quintus (Marvin Gülker) <sutniuq@...>

22 messages 2012/07/15

[#46562] [ruby-trunk - Feature #6758][Open] Object#sequence — "merborne (kyo endo)" <redmine@...>

19 messages 2012/07/20

[#46574] [ruby-trunk - Feature #6762][Open] Control interrupt timing — "ko1 (Koichi Sasada)" <redmine@...>

39 messages 2012/07/20

[#46641] [ruby-trunk - Bug #6780][Open] cannot compile zlib module, when cross-compiling. — "jinleileiking (lei king)" <jinleileiking@...>

14 messages 2012/07/23

[#46659] [ruby-trunk - Bug #6783][Open] Infinite loop in inspect, not overriding inspect, to_s, and no known circular references. Stepping into inspect in debugger locks it up with 100% CPU. — "garysweaver (Gary Weaver)" <garysweaver@...>

8 messages 2012/07/23

[#46792] [ruby-trunk - Bug #6799][Open] Digest::*.hexdigest returns an ASCII-8BIT String — "Eregon (Benoit Daloze)" <redmine@...>

11 messages 2012/07/26

[#46799] [ruby-trunk - Feature #6801][Open] String#~ for a here document — "merborne (kyo endo)" <redmine@...>

12 messages 2012/07/27

[#46829] [ruby-trunk - Feature #6806][Open] Support functional programming: forbid instance/class variables for ModuleName::method_name, allow for ModuleName.method_name — "alexeymuranov (Alexey Muranov)" <redmine@...>

7 messages 2012/07/28

[#46832] [ruby-trunk - Bug #6807][Open] Can't compile ruby without ruby — "devcurmudgeon (Paul Sherwood)" <storitel@...>

13 messages 2012/07/28

[#46834] [ruby-trunk - Feature #6808][Open] Implicit index for enumerations — "trans (Thomas Sawyer)" <transfire@...>

15 messages 2012/07/28

[#46838] [ruby-trunk - Bug #6810][Open] `module A::B; end` is not equivalent to `module A; module B; end; end` with respect to constant lookup (scope) — "alexeymuranov (Alexey Muranov)" <redmine@...>

17 messages 2012/07/28

[#46896] (Half-baked DRAFT) new `require' framework — SASADA Koichi <ko1@...>

Hi,

22 messages 2012/07/31

[ruby-core:46573] Re: [ruby-trunk - Feature #6695] Configuration for Thread/Fiber creation

From: SASADA Koichi <ko1@...>
Date: 2012-07-20 17:56:15 UTC
List: ruby-core #46573
(2012/07/21 1:23), brixen (Brian Ford) wrote:
> I object to this API for setting stack size from Ruby for at least the two following reasons:
> 
> 1. Stack size is an implementation detail and coupling Ruby code to details of a particular implementation is undesirable. Applications may be developed on one implementation and deployed on another. Or details affecting stack size may change between versions of a single implementation.
> 2. Stack size may depend on code not in the application or library (eg a library using Thread.new that calls application code or application code that different versions or implementations of a library).
> 
> This setting should be a VM configuration option, not a Ruby method API.

Thank you for your comment.

This issue was started from Feature #3187 "Allow dynamic Fiber stack
size" by mperham (sorry, I had needed to show it).

mperham wants to specify fiber size per fiber because current fiber's
default size is too small to do complicated procedures and no way to
change this size.

Current default fiber's machine stack is small because of two reasons.

  1. On the 32bit CPU, there are address space restriction and
     Only a few thousand of fibers (and threads) can be made
     if we allocate 1MB per fibers.
     On the Fiber's usage, it is too small in some cases.
  2. 1MB memory allocation hit performance in little.
     (It is very weak reason for Rubyist)

To specify stack size, there are several way.

(1) VM configuration option (as Brian say)
(2) Global config by method (Thread.stack_size=) (as mperham proposed)
(3) Per-thread configuration (as I proposed)

I don't make any objection.  It is acceptable.

However, we can't mix "small" and "large" size stack size in same
program.  (2) is not perfect because it is not thread-safe.

BTW, the following API is thread-safe.  Is it acceptable?

  Thread.stack_size(size){
    # only in this block, the stack size will be `size'
    Thread.new(...){
      ...
    }
  }

On the #3187 thread, nagachika proposed more high level specifier
"factor" >https://bugs.ruby-lang.org/issues/3187#note-6>

>  Fiber.stacksize = 2.0 # => twice the size of default stack size

I think using factor is also acceptable (the method name should be
changed, I guess).  But we need to specify.

I also think more rough specifiers such as :small, :medium, :large are
also acceptable.

  Fiber.new(size: :small){...}

(for example, at VM configuration with each sizes,
 ruby -Xsmall_ss=4KB -Xmedium_ss=128KB -Xlarge_ss=1MB script
)

I don't care low-level or high-level specifier.  But I think we need per
thread/fiber specifier.


----
From developer's perspective:  We will increase default stack size for
Fiber (maybe same as Thread) after we introduce this feature.  Most
case, larger stack size doesn't make problem (small stack size makes
problems such as mperham's situation).

If application or library needs huge number of Fibers, then this will
feature help.
----


> Thread#name doesn't need a new Thread.new API.

Yes.  Thread#name and Thread#name= is enough if specify a name after
creation like:

  Thread.new{
    Thread.current.name = 'foo' # Thread.name may be also okay
    ...
  }

But I want to specify a name at or before thread creation.
Is it only for me?

-- 
// SASADA Koichi at atdot dot net

In This Thread