[#39810] 2.0 feature questionnaire — SASADA Koichi <ko1@...>

I made a questionnaire "What do you want to introduce in 2.0?" in my

59 messages 2011/10/01
[#39822] Re: 2.0 feature questionnaire — Jeremy Kemper <jeremy@...> 2011/10/02

2011/10/1 SASADA Koichi <ko1@atdot.net>:

[#39827] Re: 2.0 feature questionnaire — Yukihiro Matsumoto <matz@...> 2011/10/02

Hi,

[#40324] Re: 2.0 feature questionnaire — Charles Oliver Nutter <headius@...> 2011/10/25

2011/10/1 SASADA Koichi <ko1@atdot.net>:

[#39823] Discussion results — SASADA Koichi <ko1@...>

Hi,

34 messages 2011/10/02
[#39840] Re: Discussion results — Intransition <transfire@...> 2011/10/02

I did not have the fortune of attending the discussion, but I would

[#39844] Re: Discussion results — Yukihiro Matsumoto <matz@...> 2011/10/02

Hi,

[#39851] Re: Discussion results (here documents with indents) — "Martin J. Dürst" <duerst@...> 2011/10/03

Hello Matz,

[#39862] Re: Discussion results (here documents with indents) — Yusuke Endoh <mame@...> 2011/10/03

Hello,

[#39874] Re: Discussion results (here documents with indents) — Trans <transfire@...> 2011/10/03

On Mon, Oct 3, 2011 at 8:16 AM, Yusuke Endoh <mame@tsg.ne.jp> wrote:

[#39915] [Ruby 1.9 - Feature #5400][Open] Remove flip-flops in 2.0 — Magnus Holm <judofyr@...>

29 messages 2011/10/04

[#39957] [Ruby 1.9 - Bug #5407][Open] Cannot build ruby-1.9.3-rc1 with TDM-GCC 4.6.1 on Windows XP SP3 — Heesob Park <phasis@...>

11 messages 2011/10/05

[#39993] [Ruby 1.9 - Feature #2348] RBTree Should be Added to the Standard Library — David Graham <david.malcom.graham@...>

10 messages 2011/10/06

[#40037] [Ruby 1.9 - Bug #5422][Open] File.fnmatch != Dir.glob # {no,sets} — Suraj Kurapati <sunaku@...>

14 messages 2011/10/07

[#40073] [Ruby 1.9 - Feature #5427][Open] Not complex patch to improve `require` time (load.c) — Yura Sokolov <funny.falcon@...>

31 messages 2011/10/09

[#40090] [Ruby 1.9 - Bug #5433][Open] PTY.spawn Kernel panic on macos lion — Gamaliel Toro <argami@...>

14 messages 2011/10/10

[#40188] [Ruby 2.0 - Feature #5454] keyword arguments — Yukihiro Matsumoto <matz@...>

16 messages 2011/10/17
[#40189] Re: [Ruby 2.0 - Feature #5454] keyword arguments — Evan Phoenix <evan@...> 2011/10/17

This looks very interesting! Would someone be willing to translate to english? I've only got a vague idea of what is being discussed.

[#40191] Re: [Ruby 2.0 - Feature #5454] keyword arguments — Yutaka Hara <yutaka.hara@...> 2011/10/18

Hi,

[#40192] Re: [Ruby 2.0 - Feature #5454] keyword arguments — Yukihiro Matsumoto <matz@...> 2011/10/18

Hi,

[#40259] Counseling — Perry Smith <pedzsan@...>

Ruby and I are back in counseling... Its always the same thing with her. "I'm throwing an Encoding exception!!!"

21 messages 2011/10/21
[#40263] Re: Counseling — "Haase, Konstantin" <Konstantin.Haase@...> 2011/10/21

What's your $LC_CTYPE? What OS are you on?

[#40264] Re: Counseling — Gon軋lo Silva <goncalossilva@...> 2011/10/21

Hi all,

[#40266] Re: Counseling — Bill Kelly <billk@...> 2011/10/21

Gon軋lo Silva wrote:

[#40267] Re: Counseling — Perry Smith <pedzsan@...> 2011/10/22

[#40268] Re: Counseling — Eric Hodel <drbrain@...7.net> 2011/10/22

On Oct 21, 2011, at 9:43 AM, Perry Smith wrote:

[#40269] Re: Counseling — Joshua Ballanco <jballanc@...> 2011/10/22

To try and cut to the core of the issue: in Ruby 1.8 it was common practice to use the String class to represent both "proper strings" as well as a "bag-o-bytes". In Ruby 1.9, you can only properly use the String class to represent "proper strings". For a "bag-o-bytes" we're left with Array, but there are times when Array is not the right abstraction (e.g. reading data from a socket, identifying a start and stop token, and writing the bytes between to a file on disk). Also, the "BINARY" encoding is not the right abstraction, because you still have an object which will worry about encodings and, due to Ruby always trying to do "the right thing", bugs can be very difficult to track down. Consider:

[#40271] Can rubygems save us from "binary-compatibility hell"? — Yusuke Endoh <mame@...>

Hello, rubygems developers --

17 messages 2011/10/22

[#40290] [ruby-trunk - Feature #5474][Assigned] keyword argument — Yusuke Endoh <mame@...>

36 messages 2011/10/23
[#40414] Re: [ruby-trunk - Feature #5474][Assigned] keyword argument — Charles Oliver Nutter <headius@...> 2011/10/26

More refinement below. I think we're on a good path here.

[#40416] Re: [ruby-trunk - Feature #5474][Assigned] keyword argument — Yukihiro Matsumoto <matz@...> 2011/10/26

Hi,

[#40418] Re: [ruby-trunk - Feature #5474][Assigned] keyword argument — Joshua Ballanco <jballanc@...> 2011/10/26

On Wed, Oct 26, 2011 at 2:08 PM, Yukihiro Matsumoto <matz@ruby-lang.org>wrote:

[#40425] Re: [ruby-trunk - Feature #5474][Assigned] keyword argument — Yukihiro Matsumoto <matz@...> 2011/10/27

Hi,

[#40298] Re: [ruby-trunk - Feature #5474][Assigned] keyword argument — Yukihiro Matsumoto <matz@...> 2011/10/24

Hi,

[#40311] [ruby-trunk - Feature #5478][Open] import Set into core, add syntax — Konstantin Haase <Konstantin.Haase@...>

33 messages 2011/10/24

[#40312] [ruby-trunk - Feature #5479][Open] import StringIO into core, add String#to_io — Konstantin Haase <Konstantin.Haase@...>

9 messages 2011/10/24
[#40350] [ruby-trunk - Feature #5479] import StringIO into core, add String#to_io — Charles Nutter <headius@...> 2011/10/25

[#40316] [ruby-trunk - Feature #5481][Open] Gemifying Ruby standard library — Hiroshi Nakamura <nakahiro@...>

86 messages 2011/10/24
[#40334] [ruby-trunk - Feature #5481] Gemifying Ruby standard library — Lucas Nussbaum <lucas@...> 2011/10/25

[#40322] [ruby-trunk - Feature #5482][Open] Rubinius as basis for Ruby 2.0 — Thomas Sawyer <transfire@...>

19 messages 2011/10/25

[#40356] JIT development for MRI — Carter Cheng <cartercheng@...>

Hello,

25 messages 2011/10/25
[#40390] Re: JIT development for MRI — SASADA Koichi <ko1@...> 2011/10/26

Hi,

[#40394] Re: JIT development for MRI — Carter Cheng <cartercheng@...> 2011/10/26

Dear Koichi SASADA,

[#40395] Re: JIT development for MRI — Carter Cheng <cartercheng@...> 2011/10/26

I noticed that you used context threading in YARV. Do you have some analysis

[#40417] Re: JIT development for MRI — SASADA Koichi <ko1@...> 2011/10/26

Thanks for reference.

[#40423] Re: JIT development for MRI — Carter Cheng <cartercheng@...> 2011/10/26

Thanks Koichi.

[#40412] [ruby-trunk - Bug #5486][Open] rb_stat() doesn’t respect input encoding — Nikolai Weibull <now@...>

15 messages 2011/10/26

[#40462] [ruby-trunk - Bug #5492][Open] MinGW Installation with Ruby 1.9.3rc1 Broken — Charlie Savage <cfis@...>

14 messages 2011/10/27

[#40573] [ruby-trunk - Bug #5530][Open] SEEK_SET malfunctions when used with 'append' File.open mode — "Joshua J. Drake" <ruby-lang.jdrake@...>

17 messages 2011/10/31

[#40586] [ruby-trunk - Feature #5531][Open] deep_value for dealing with nested hashes — Kyle Peyton <kylepeyton@...>

19 messages 2011/10/31

[ruby-core:40188] [Ruby 2.0 - Feature #5454] keyword arguments

From: Yukihiro Matsumoto <matz@...>
Date: 2011-10-17 22:55:44 UTC
List: ruby-core #40188
Issue #5454 has been updated by Yukihiro Matsumoto.


|細かいことはまだ気にしていませんが、キーワード引数が 2.0 に入る
|ことはかなり確定的なので、とりあえず trunk に入れて考えるという
|のはどうでしょうか。

賛成です。trunkに入れちゃっていいのかな。そういう機能の入っ
ていない1.9ブランチが欲しい人は急いで切ったほうがいいと思い
ますよ。

|以下は未実装・懸案です。
|
| - 残りのキーワード引数を受け取る方法が必要か
|
|   def foo(str: "foo", num: 424242, **h)
|     p h
|   end
|   foo(str: "bar", check: true)  #=> { :check => true }

メソッドの移譲のために必要だと思います。

| - nil が渡されたらやはり nil になるべき?
|
|   def foo(str: "foo")
|     p str
|   end
|   foo(str: nil) #=> nil ? (今は手抜きで "foo")

nilになるべきでしょう。

| - rest なしで知らないキーワードが来たら例外・警告を発して
|   欲しい?
|
|   def foo(str: "foo", num: 424242)
|   end
|   foo(check: true) #=> ArgumentError?

ここは議論の余地があるところですね。現時点では、**で受け取ら
ない限り例外にするべきだと考えていますが、実際にいろいろな局
面で使ってみると意見が変わるかもしれません。

| - Hash のように振る舞うオブジェクトもキーワード引数として
|   解釈すべき? (現在は速度重視で T_HASH だけ見ている)

とりあえずto_hashを使ってください。新設のto_kwのようなメソッ
ドを使うべきなのかもしれませんが。

| - 引数の順番はよいか
|
|   def foo(
|     a, b, c,     # mandatory arguments
|     opt = 1,     # optional arguments
|     *rest,       # rest argument
|     x, y, z,     # post mandatory arguments
|     k1: 1, k2:2, # keyword arguments
|     **kh,        # keyword rest argument
|     &blk         # block argument
|   )

これで良いと思います。

                                まつもと ゆきひろ /:|)

----------------------------------------
Feature #5454: keyword arguments
http://redmine.ruby-lang.org/issues/5454

Author: Yusuke Endoh
Status: Assigned
Priority: Normal
Assignee: Yukihiro Matsumoto
Category: 
Target version: 2.0.0


遠藤です。

キーワード引数を実装してみました。

  $ cat t.rb
  def foo(str: "foo", num: 424242)
    p [str, num]
  end
  foo(str: "bar")

  $ ./ruby t.rb
  ["bar", 424242]

細かいことはまだ気にしていませんが、キーワード引数が 2.0 に入る
ことはかなり確定的なので、とりあえず trunk に入れて考えるという
のはどうでしょうか。

一応私の環境では make check は通ります (キーワード引数のテスト
は書いてないですが) 。パーサに conflict はないです。
既存のベンチマークを見ると、一部気になる項目もありますが (vm1_
rescue とか) 、全体的には特に速度劣化しないようです。


以下は未検討・未実装の細かいことです。

  - 残りのキーワード引数を受け取る方法が必要?

    def foo(str: "foo", num: 424242, **h)
      p h
    end
    foo(str: "bar", check: true)  #=> { :check => true }

  - nil が渡されたらやはり nil になるべき?

    def foo(str: "foo")
      p str
    end
    foo(str: nil) #=> nil ? (今は手抜きで "foo")

  - rest なしで知らないキーワードが来たら例外・警告を発して
    欲しい?

    def foo(str: "foo", num: 424242)
    end
    foo(check: true) #=> ArgumentError?

  - Hash のように振る舞うオブジェクトもキーワード引数として
    解釈すべき? (現在は速度重視で T_HASH だけ見ている)

  - 引数の順番はこれでよいか?

    def foo(
      a, b, c,     # mandatory arguments
      opt = 1,     # optional arguments
      *rest,       # rest argument
      x, y, z,     # post mandatory arguments
      k1: 1, k2:2, # keyword arguments
      **kh,        # keyword rest argument
      &blk         # block argument
    )

  - 他いろいろ


benchmark results:
name    ruby 1.9.4dev (2011-10-16 trunk 33471) [i686-linux]     ruby 1.9.4dev (2011-10-16 trunk 33471) [i686-linux]     average difference
app_answer      0.259   0.131   -0.127
app_erb 2.699   2.681   -0.018
app_factorial   5.236   5.320   0.084
app_fib 1.576   1.731   0.154
app_mandelbrot  4.324   3.911   -0.413
app_pentomino   40.882  40.768  -0.114
app_raise       0.966   0.982   0.017
app_strconcat   3.143   3.102   -0.041
app_tak 2.192   2.140   -0.052
app_tarai       1.682   1.748   0.066
app_uri 1.870   1.767   -0.103
io_file_create  2.589   2.570   -0.019
io_file_read    6.169   5.838   -0.330
io_file_write   1.966   1.976   0.010
io_select       3.066   3.111   0.044
io_select2      3.647   3.623   -0.025
io_select3      0.051   0.051   0.000
loop_for        3.302   3.219   -0.082
loop_generator  1.111   1.102   -0.009
loop_times      2.959   2.960   0.001
loop_whileloop  1.437   1.422   -0.016
loop_whileloop2 0.298   0.297   -0.001
so_ackermann    1.862   1.816   -0.046
so_array        3.317   3.473   0.155
so_binary_trees 0.891   0.900   0.009
so_concatenate  9.538   8.696   -0.842
so_count_words  0.412   0.407   -0.005
so_exception    2.185   2.177   -0.008
so_fannkuch     3.338   3.334   -0.004
so_fasta        5.182   5.061   -0.121
so_k_nucleotide 3.425   3.324   -0.101
so_lists        2.239   2.312   0.073
so_mandelbrot   11.479  10.660  -0.820
so_matrix       2.206   2.177   -0.030
so_meteor_contest       11.479  11.634  0.155
so_nbody        8.006   7.925   -0.081
so_nested_loop  2.768   2.614   -0.154
so_nsieve       6.163   6.184   0.021
so_nsieve_bits  6.618   6.850   0.231
so_object       1.807   1.899   0.091
so_partial_sums 11.057  10.537  -0.520
so_pidigits     2.944   3.011   0.066
so_random       1.962   1.992   0.031
so_reverse_complement   3.136   3.036   -0.099
so_sieve        2.224   2.203   -0.021
so_spectralnorm 7.981   7.591   -0.390
vm1_block*      3.790   5.112   1.306
vm1_const*      0.756   0.757   -0.015
vm1_ensure*     0.487   0.601   0.099
vm1_ivar*       1.634   1.863   0.213
vm1_ivar_set*   1.625   1.661   0.021
vm1_length*     1.312   1.366   0.038
vm1_neq*        1.152   0.979   -0.189
vm1_not*        0.589   0.589   -0.015
vm1_rescue*     0.133   0.750   0.601
vm1_simplereturn*       2.467   3.601   1.119
vm1_swap*       1.199   1.716   0.502
vm2_array*      1.644   1.643   -0.001
vm2_case*       0.324   0.348   0.023
vm2_defined_method*     8.829   9.003   0.173
vm2_eval*       39.557  37.726  -1.832
vm2_method*     5.255   4.113   -1.142
vm2_mutex*      3.043   3.175   0.131
vm2_poly_method*        6.044   5.340   -0.705
vm2_poly_method_ov*     0.493   0.675   0.181
vm2_proc*       1.297   1.391   0.093
vm2_regexp*     2.419   2.557   0.137
vm2_send*       0.662   0.903   0.241
vm2_super*      1.107   1.016   -0.093
vm2_unif1*      0.688   0.816   0.127
vm2_zsuper*     1.210   1.068   -0.143
vm3_clearmethodcache    0.785   0.770   -0.014
vm3_gc  2.487   2.453   -0.033
vm_thread_alive_check1  0.389   0.422   0.033
vm_thread_create_join   6.064   6.181   0.118
vm_thread_mutex1        2.349   2.546   0.197
vm_thread_mutex2        10.123  7.755   -2.368
vm_thread_mutex3        4.428   5.390   0.962
vm_thread_pass  0.692   0.754   0.063
vm_thread_pass_flood    0.167   0.170   0.003
vm_thread_pipe  2.437   2.540   0.103
-----------------------------------------------------------
average total difference is -3.4518661499023438

-- 
Yusuke Endoh <mame@tsg.ne.jp>


-- 
http://redmine.ruby-lang.org

In This Thread

Prev Next