C++のObject Slicingとオブジェクト指向言語の引数の評価戦略の話

TLで流れていた、オブジェクト指向での引数の云々の話をまとめました。 分量があるので、抜けているところがあったらお知らせください。
2
前へ 1 2 ・・ 9 次へ
Ryusei @mandel59

x += a は x = x + a と解釈できるけど、 x++ を x = x + 1 と解釈するのは、空中から1が降ってくるからダメとか、そういう理由で?

2015-02-07 18:31:01
Ryusei @mandel59

あー、ていうかインクリメントしたいのは別に数値とは限らないから、x++をx = x + 1 にはできないのか

2015-02-07 18:31:48
Ryusei @mandel59

いやインクリメントしたいのは数値だけか?

2015-02-07 18:32:51
Ryusei @mandel59

なくても困らないから入れません

2015-02-07 18:33:13
Yukihiro Matz @yukihiro_matz

@mandel59 C++でいうリファレンス型という概念が好きではないので。特に動的型言語と相性が悪いと思います

2015-02-07 18:33:34
Ryusei @mandel59

C++11とかでlvalue, rvalueの概念はもっと細分化されて複雑になったし、あれは嫌だなーって思うけど

2015-02-07 18:36:34
Ryusei @mandel59

リファレンス型って、動的型言語と相性が悪いんですか?

2015-02-07 18:39:45
Ryusei @mandel59

C++的なリファレンスの筋の悪さってのはあるが

2015-02-07 18:41:02
Fadis @fadis_

型を出来るだけ明記したくないから動的型付け言語してるのに値渡しか参照かを区別する為に型を書いてたら意味ないもんな。こういう言語では代入の挙動を参照のコピーにして、値のコピーのために特別な関数を用意することが多い

2015-02-07 18:42:02
Ryusei @mandel59

C++のリファレンス型は筋が悪いけど、リファレンスって概念は僕は好きです。まあポインターとかリファレンスとか、ゴチャゴチャしてるせいで嫌われがちなのは分かる

2015-02-07 18:43:25
Ryusei @mandel59

Matzが嫌うかどうかじゃなくて、全体的な印象として嫌われそうだなって思うってこと

2015-02-07 18:44:01
Ryusei @mandel59

あーえーよく分からない

2015-02-07 18:45:00
Ryusei @mandel59

Rubyにはリファレンスとかいう概念がない代わりにシンボルがあるから、リファレンスがなくてもシンボルで代替できるってのがある。僕はシンボルで代替するのは欠点があると思いますけど

2015-02-07 18:46:02
Fadis @fadis_

だからPerl、Python、Rubyといった言語がC++のように「何も言わなかったら値渡し」しないのは理解できる。だが Java おまえは理解不能だ

2015-02-07 18:46:56
Ryusei @mandel59

@yukihiro_matz 「C++でいうリファレンス型」は筋が悪いとは思いますけど、リファレンスという概念そのものが、動的型言語と相性が悪いということはないと思います。

2015-02-07 18:51:03
Fadis @fadis_

@kaorin_linux 静的型付け と 代入は参照のコピー の夢のコラボレーション(

2015-02-07 18:52:25
Ryusei @mandel59

リファレンスと相性が悪いことがあるとして、それは動的型付けをするところではないと思う。

2015-02-07 18:55:38
Ryusei @mandel59

オブジェクト指向との相性が悪いかどうかで言うと、変数がオブジェクトじゃないってのが問題なんじゃないのかってことになる

2015-02-07 19:02:12
Ryusei @mandel59

Rubyの場合、オブジェクトのフィールドはオブジェクトじゃないっていう

2015-02-07 19:02:46
Ryusei @mandel59

あー、Rubyの場合は全部メソッドだからメソッドって言ったほうがいいのか

2015-02-07 19:04:11
SODA Noriyuki @n_soda

@fadis_ 僕は全然逆の印象で、オブジェクト指向言語では、オブジェクトの値渡しには切り裂きコピー問題があるので、許さないのが自然であり、C++ が異端だと思ってたりします。まあ C++ は今や(昔から?)マルチパラダイム言語ですが…

2015-02-07 19:07:04
Ryusei @mandel59

リファレンス型って概念がなくて、そもそも全部の値がオブジェクトへのリファレンスなわけだけど、Rubyの場合はオブジェクトのメソッドがオブジェクトでないから、メソッドへのリファレンスが取れない。ただ、オブジェクトとシンボルのペアを、メソッドへのリファレンスとかんがえることができる。

2015-02-07 19:08:37
SODA Noriyuki @n_soda

@fadis_ Java はオブジェクト指向言語として生まれましたから、オブジェクトの値渡しは許さない(オブジェクトではない int とかなら OK)というのは自然ですし、Lisp に始まるがガベージコレクタつき高級言語の伝統に沿った言語という印象が。

2015-02-07 19:12:11
前へ 1 2 ・・ 9 次へ