D3に入る前に値型/参照型/const/immutable/sharedとかの型の扱いに関してまとめましょう!


投稿ツリー



前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009/12/4 19:07
SHOO  管理人   投稿数: 658
[http://www.dsource.org/projects/tango/forums/topic/626#3461 Tangoのkrisさんも悩んでいるようです]

上記リンクの発言では、tangoをD2に移行するには、tango.text.Utilにある各関数ごとに3つのバリエーションを用意しなきゃいけないと語っています。
文字列操作に関する関数では、in-placeな物とそうでないものの2つ((char[]とin char[]))で十分なのではないかと思いますが、なぜ3つ((char[], const(char)[], immutable(char)[]かな?))必要になるのでしょうか?((型ごとのオーバーロードを全てするならばshared, shared constを含めた5つ必要ですよね。))
私たちがこれらのようなオーバーロードを書く場合、どのようなオーバーロードを書くべきでしょう?

また、Phobosではstd.string内ではこのあたりをかなり適当に書いているような気がするのですが、明確な使い分けはあるのでしょうか?
たとえば、 string capitalize(string s); なんかは、どうしてin-placeではダメなのでしょうか?string型に関しても、ほかの関数ではin char[]なんかを使っているものもあるにもかかわらず、なぜstringとしているのでしょうか?
ほかにも、 void tolowerInPlace(C)(ref C[] s); では、refとしていますが、in-placeならば参照型であるところの配列にrefは不要ですよね?
投票数:75 平均点:4.93
返信する
前の投稿 - 次の投稿 | 親投稿 - | 投稿日時 2009/12/16 18:13 | 最終変更
SHOO  管理人   投稿数: 658
一応型についての事なのでこちらへ…

&bitly(http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=103629);
われらがウォルター氏の発言。

最近のnewsgroupの流れで、「[http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=103410 構造体のopEqualsの引数がconst refじゃないとダメで、いちいち参照のために一時変数作の面倒なんですけど]」から、「[http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=103509 const refだったら一時変数を自動的につくってくれる機能ちょうだいよ]」に発展しています。

もともとconst refな引数は、C++では値型をとることができました。しかし、[http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=103514 Andreiは、それはC++の悪いところだとして、より慎重に対応しなければならないだろうと言っています。]

また、[http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=103609 constとかimmutableとかいろいろな型に対応させるためにオーバーロードがめちゃくちゃ多くなるんですけどなんかいい方法ないの?]という案件についても上がっています。

これらを受けてのものと思われます。
auto refにして、rvalueもlvalueもとれるようにしよう。というもの。テンプレートに限られるのかは分かりませんが。
ちなみに、ref関数として、引数に指定されているものの参照を返す関数、auto関数として関数の中身から勝手に推論するというのもあるかも?
ついでに、[http://www.dsource.org/projects/dmd/changeset/297 dmdのChangeset]をみると、なんかもう導入されてるっぽいです。
投票数:40 平均点:6.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/2/2 0:56
KU6  新米   投稿数: 5
dmd 2.038から、SHOOさんのmsg# 1.1.1の記述通りの実装になっていたようです。
投票数:23 平均点:4.78
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2010/2/2 2:27
SHOO  管理人   投稿数: 658
@property など、アノテーションの追加によってより複雑になってきていますね。

アノテーションってpureとかnothrowとかの属性?記憶域クラス?とどう違うのでしょうか?

実はAttributeとStorageClassの違いもよくわかっていない。
Attribute⊃StorageClass
とか、
Attribute⊂StorageClass
な関係なのかな?
たとえば、pureはStorageClassだけどMemberFunctionAttributeだったりするし…

http://j.mp/dm9YHc にあるような、変数の保存方法(変数がメモリ上のどこに保存され、どのように維持され、どの範囲に適用されるのかといったこと)とは、合っているような違うような、な感じですし
投票数:33 平均点:4.55
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/2/2 23:06
tama  一人前   投稿数: 111
引用:
SHOOさんは書きました:
@property など、アノテーションの追加によってより複雑になってきていますね。

アノテーションってpureとかnothrowとかの属性?記憶域クラス?とどう違うのでしょうか?
多分現状これを正確に把握してる人いないような気がしてます.MLでもpureやnothrowやoverrideはアノテーションにすべきという人達がいたり,コード生成に影響を与えるのは駄目(Walterとしては@propertyは特殊なアノテーションらしい?),などなど混沌としてるような.特に現状ユーザ定義のアノテーションをどうするのかも分からないので,この話が出てからじゃないかと.リフレクションで触れないと困るのは確かなのですが.
投票数:29 平均点:4.14
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2010/2/8 0:40
tama  一人前   投稿数: 111
http://lists.puremagic.com/pipermail/dmd-concurrency/2010-January/000604.html
色々変わるかもです.継承とか含めてどうなるか分かりませんが,synchronized/sharedの簡素化はいいなぁと思ったり.6は何もつけないで作るとTLSとして定義されてしまうということですかね.
投票数:21 平均点:5.71
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2010/2/8 2:35
SHOO  管理人   投稿数: 658
アンドレイはウォルターと話しあって次のことを決めました
+ Atomicな配列の代入を入れよう
+ Atomicなrealの代入はどうするかまだ決めてない
+ sharedとかsynchronizedとかをクラスのメンバ関数につけるのはやめよう
+ synchronizedはクラス単位にしよう
+ sharedはクラス単位、または構造体単位にしよう
+ ウォルターはsharedクラスとか用の変数には、sharedをつけることを必須にしようと言っている((けどAndreiは微妙に渋っている?))

かな?超訳すると。
個人的にはsharedとかのクラス単位、構造体単位は賛成ですね。
http://dusers.dip.jp/modules/forum/index.php?post_id=125
http://dusers.dip.jp/modules/forum/index.php?post_id=127
このへんで話したことですが。
投票数:45 平均点:5.78
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/2/14 16:59
SHOO  管理人   投稿数: 658
http://www.dsource.org/projects/dmd/changeset/383
とりあえず synchronized クラスが来たようです。
投票数:68 平均点:4.71
返信する

このトピックに投稿する

題名
ゲスト名
投稿本文

  条件検索へ


メインメニュー

ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録

Menu