Ruby-dev summary 20519-20714

Hi all,

This is a summary of ruby-dev ML in these days.

[ruby-dev:20392] [BigDecimal] proposal to change specification
[ruby-dev:20447] [BigDecimal] renaming proposal
[ruby-dev:20525] [BigDecimal] changing rule of coerce
[ruby-dev:20637] [BigDecimal] bundling issues
[ruby-dev:20644] [BigDecimal] dup and to_f
(contd.)

Tadashi Saito and many people proposed numerous enhancement about
BigDecimal. Their proposals and responses:
(Some entries are duplicated with a previous summary, [ruby-talk:74878])

  • adding new method BigDecimal#** (alias of #power)

-> Accepted.

  • BigDecimal#infinite? should return 1/-1/nil instead of true/false.
    (1 for INF, -1 for -INF, nil for non-INF)

-> Accepted.

  • BigDecimal#nonzero? should return self/nil instead of true/false,
    to be consistent with Numeric#nonzero?.

    % ruby -e ‘p 3.nonzero?’ #=> 3
    % ruby -e ‘p 0.nonzero?’ #=> nil

-> Accepted.

  • removing BigDecimal#sign. Reasons:
    1. It does not exist on other Numeric classes.
    2. #sign returns 7 constants for NaN/+0/-0/+/-/+INF/-INF,
      but the method name “sign” is not appropriate for such aim.

-> Accepted.

  • renaming BigDecimal#to_parts to #split.
    The name “to_parts” is not appropriate.

    % ruby -rbigdecimal -e ‘p BigDecimal.new(“12.34”).to_parts’
    [1, “123400”, 10, 2]

-> Accepted.

  • renaming/removing BigDecimal#assign

-> Accepted (removed).

  • requiring rational.rb and bigdecimal-rational.rb in bigdecimal.
    Otherwise users must write:

    require 'bigdecimal’
    require 'rational’
    require ‘bigdecimal-rational’ # BigDecimal<->Rational conversion utility

-> Rejected. Converting BigDecimal and Rational is rare case.
Also, bigdecimal-rational.rb/bigdecimal-math.rb are just for samples.

  • BigDecimal#E/#PI are methods, so their names should be in lower case.

-> Rejected. They are mathematic constants.
Also, Shigeo Kobyashi noted that he is thinking
to remove these methods (see below).

  • removing BigDecimal#dup because BigDecimal is not a mutable object.
    FYI: BigDecimals were mutable in the past.

-> Accepted.

  • adding new method String#to_d
  • adding new method Kernel#BigDecimal(str)

-> Rejected but add these methods in bigdecimal-misc.rb or so.

  • renaming bigdecimal-.rb to bigdecimal/.rb.

-> Accepted.

[ruby-dev:20491] [Oniguruma] explicit capture
[ruby-dev:20514] [Oniguruma] Version 1.9.1
(contd.)

K.Kosako and TANAKA Akira proposed Oniguruma’s semantics about
named/numbered capture. FYI, “named/numbered capture” means

named capture:     p /(?<tag>aa)/.match("xaax")['tag']  #=> "aa"
numbered capture:  p /(aa)/.match("xaax")[1]            #=> "aa"

Summary of the proposal:

1. Keeps all backward compatibility if we do not use named capture.

2. If we use named capture, (...) works as (?:...).
   We cannot use named capture and numbered capture in one regexp.

   m = /xx(?<n>aaa)xxx/.match('xxxaaaxxx')
   p m['n']   #=> "aaa"

   /xx(?<n>aaa)xx(x)/    # maybe RegexpError

3. If we use named capture with "c" option, (...) works as numbered
   capture.  We can use named and numbered capture in one regexp.

   m = /xxx(?<n>aaa)xx(x)/c.match('xxxaaaxxx')
   p m['n']   #=> "aaa"
   p m[1]     #=> "x"

4. If "C" option used, (...) works as (?:...).

   m = /xxx(aaa)xxx/C.match('xxxaaaxxx')
   p m[1]   #=> nil

Reasons:

1. Users may not use named and numbered capture at the same time.
   If this is true, we does not need c/C options so much.

2. (?:...) is too long.  Mixing (?:...) with (?<n>...) makes matter
   even worse.

Note that “c” is the temporal one. Matz suggested “g” for the
same sake.

[ruby-dev:20570] Marshal upgrade
[ruby-talk:75439] Re: Marshaling objects partially

Matz noted that he is thinking to update the minor version of marshal
format in 1.8.0.

[ruby-dev:20580] add library
[ruby-talk:75961] Re: [Ann] OSSL 0.2.0-pre3

TAMURA Ken’ichi proposed making WEBrick a standard library.
* WEBrick: http://raa.ruby-lang.org/list.rhtml?name=webrick

Matz proposed bundling OSSL2 as a standard library, and this thread
is continued to [ruby-talk:75961].
* OSSL2: http://raa.ruby-lang.org/list.rhtml?name=openssl

Matz also proposed bundling SOAP4R, but NAKAMURA Hiroshi, the author
of SOAP4R, said that dead line is too close.
* SORP4R: http://raa.ruby-lang.org/list.rhtml?name=soap4r

[ruby-dev:20655] frozen ThreadGroup

Current implementation of ThreadGroup#freeze prohibits modifying
thread group members on only $SAFE>4. Hidetoshi NAGAI proposed
to change this feature, to prohibits modifying members always.
He needs this function for implementing safeTk package.

Matz took his intention into account, pointed out that the method name
"freeze" is not appropriate because we can add new threads to a frozen
ThreadGroup, by forking child threads from its member threads.

Then, here’s the new scheme to limit functions of ThreadGroup:

* ThreadGroup#enclose
  disallows adding/removing threads to/from ThreadGroup.

* ThreadGroup#freeze
  disallows modifying thread group members.
  (disallow creating new child threads of members)
  disallows defining new (singleton) methods to ThreadGroup, etc.
  (normal "freeze" semantics)

[ruby-dev:20703] MatchData#groups

TANAKA Akira suggested to rename MatchData#groups to #captures,
because not of all groups are captured in Ruby. e.g.

/xxx(?:This is a group but not captured)xxx/

[ruby-dev:20680] 1.8.0 on IA64 etc.

It is known that ruby 1.8.0 preview3 “make test” crashes on IA64,
x86-64, and PPC64 platforms. Matz is calling for testers/debuggers
before releasing forthcoming 1.8.0.

[ruby-dev:20690] portable(?) UserID/GroupID control
[ruby-talk:76218] portable(?) UserID/GroupID control

Hidetoshi NAGAI proposed highly portable APIs to control uid/gid.
He also provided a patch for CVS main trunk in these messages.

– Minero Aoki

Hello, all.

Recently, I’m working on BigDecimal. My main purpose is not to extend it,
but to be become friendly with other numerical classes.

“Minero Aoki” aamine@loveruby.net wrote in message
news:20030721215538P.aamine@loveruby.net

  • removing BigDecimal#sign. Reasons:
    1. It does not exist on other Numeric classes.
    2. #sign returns 7 constants for NaN/+0/-0/+/-/+INF/-INF,
      but the method name “sign” is not appropriate for such aim.

→ Accepted.

This might be slip. It was rejected.
In [ruby-dev:20559], Shigeo Kobayashi, the maintainer of BigDecimal,
said BigDecimal#sign will be remain because it returns sign exactly.
When a receiver is a positive number, #sign returns positive number,
or a receiver is negative number, #sign returns negative,
otherwise it returns zero.

My anxiety is that only few people mentioned BigDecimal in ruby-talk.
I hope you know about BigDecimal, and use it practically.
The document can be found at “ext/bigdecimal/bigdecimal_en.html” in a
package of 1.8.0-previews. If you want to browse the latest version,
you can get it here:
http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/~checkout~/ruby/ext/bigdecimal/bigdecimal_en.html?rev=HEAD

If you have any idea to brush up the specification of BigDecimal,
please shout at here :slight_smile:

almost, we don’t have any time, however.

···


Tadashi Saito

PS
I know about Minero Aoki’s great work on “ruby-dev summary” only
lately. I thank his translation.

PPS
sorry for my silly English ;(