1 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 23:00:35 ] プログラミング言語 D (D Programming Language) について語るスレッドです。 過去スレは >>2 ■本家 ttp://www.digitalmars.com/d/ ttp://www.kmonos.net/alang/d/ (和訳) ■コンパイラ ttp://www.digitalmars.com/d/dcompiler.html (DMD, 本家) ttp://dgcc.sourceforge.net/ (GDC, gccフロントエンド) ttp://gdcmac.sourceforge.net/ (GDCのmac用バイナリ) ■参考URL ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究) ttp://dsource.org/ (dsource) ttp://tinyurl.com/3da5oa (C/C++に疲れた人のD言語) ttp://www.kmonos.net/alang/wnd/ (わかったつもりになるD言語) ttp://shinh.skr.jp/d/ (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか) ttp://shoo.s20.xrea.com/shoo/programing (D言語とTangoの入門講座)
56 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 19:47:20 ] つかえるよ
57 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 02:22:46 ] version (D_Version2) invariant(char)[] X = "ver2"; else char[] X = "ver1"; これがD1でコンパイルできない D_Version2 って意味あるのかな…
58 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 03:12:36 ] マジかよww
59 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 03:45:10 ] ここにきてTangoのtoUtf8がtoStringに変更とかすごい今更だがでかい変更だな。 ……ちょっとわくわくした。
60 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 06:22:12 ] コンストラクタの引数ってどうにかタプルで取れないかな
61 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 06:23:03 ] 引数の型リストか。 traitsのParameterTypeTupleにthis渡したくてもどうすればいいかわからん/(^o^)\
62 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 12:51:18 ] >>60 Class._ctorでおk
63 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 15:23:54 ] トンクス! でもthisオーバーロードしてたらどうも動きがうまくない・・・
64 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 16:34:59 ] >>57 minx(""); でかこむ
65 名前:64 mailto:sage [2007/11/25(日) 16:57:38 ] あ・・・ mixinだって>をれ
66 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 16:58:33 ] そういうときこそ、q{}の出番… って思ったが、v1でq{}つかえねえんだな
67 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 17:43:08 ] おお D1とD2の両方に対応できる書き方初めて見た。なるほどね。 それってinvariant()の括弧ありなしもカバーできるの? 今出先なので確認できない
68 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 18:05:39 ] version(D_Version2) const ClassInvariant = "invariant(){_invariant();}"; else const ClassInvariant = "invariant{_invariant();}"; class C { private void _invariant(){ assret(false); } mixin(ClassInvariant); }
69 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 19:38:49 ] そうまでコードをわけわかめにしてまで 二つのバージョンに対応する価値はあるのだろうか
70 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 21:32:49 ] 俺なら、モジュールで分けてversionでimportを変えるかな。
71 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 22:23:32 ] D2ならCTFEでinvariantをinvariant()に置換してmixinすればいいんじゃね?
72 名前:57 mailto:sage [2007/11/25(日) 22:24:03 ] >>64 ,>>70 なるほど…ありがとう。参考にする。 でも、>>69 の言うとおりそこまでして分けるくらいならD1対応版とD2対応版の2つを別物として作ったほうがいいような気がするな。 そうなるとやっぱりD_Version2の使いどころがわからん… そもそもversion(D_Version2)の内容も文法的に正しくないとコンパイルが通らないあたりは問題にならないのかな。
73 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 00:10:10 ] v2以前の文法のコンパイラ機能がdmd.exeにまるごと載ってて versionで切り替わってくれるとかでもない限り、 ほんとに使いどころは無い気がする。 D_Version2ってタダのversion識別子だよね?
74 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 01:15:46 ] >>73 だよ。 そもそも、V2なってからもかなり変更ある気がするが、気のせいだろうな。うん
75 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 02:41:32 ] Version3への布石なことはあきらか。
76 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 02:52:54 ] DMDって無償で商用に使っていいコンパイラですか?
77 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 04:48:29 ] 2chでライセンス関係の情報訊いて動ける商用って一体…
78 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 05:26:36 ] license.txt を嫁
79 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 18:49:52 ] dsssむじい budが気楽でいい
80 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 21:34:08 ] >Phobos is now on dsource (゚д゚)ポカーン
81 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 21:43:36 ] それよりも2.008まだー
82 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 21:44:52 ] dmd2.007だとopengl32.libをちゃんと読んでくれないのはどういうことか dmd2.000だと大丈夫なのに
83 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 22:10:44 ] kokoro ga oreta
84 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 22:21:31 ] >>80 ttp://dsource.org/projects/phobos ttp://tinyurl.com/2h4tuj なんだこれとうとう放棄したのか?w ユーザがPhobosを開発できるなら文字コード周りを何とか・・・
85 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 22:22:53 ] じゃあこれで心置きなくTangoに移れそうだね
86 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 00:53:14 ] 伝説のIDEができるまでにこけそうな勢いだなこりゃ
87 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 00:56:57 ] ここのみんなで日本語化しちゃおうか
88 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 01:21:29 ] >>86 >>49
89 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 02:26:37 ] >>87 やりたいんだがなあ
90 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 13:03:57 ] NewsGroup盛り上がってるな 直前の流れは知らないんだがTangoとPhobosを統合するのかな? 「両方のコーディングスタイルの違いはどうするの?」とか言ってるし あとまだ運用がよくわからないから 「誰が全体の設計の管理を受け持つの?」とか話しているようだ
91 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 13:37:11 ] > 「誰が全体の設計の管理を受け持つの?」 今までのTangoの人じゃ駄目なの?
92 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 18:26:33 ] TangoってDっぽくないんだよなあ。そこがあまり好きになれない。
93 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 18:27:48 ] 俺に十分な時間があればもっと素晴らしいライブラリ作って見せるんだが
94 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 19:03:28 ] 俺も俺も ニートでやってくれる人いないのかな?
95 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 19:54:31 ] >>94 よんだ? っと冗談はおいといて、スレようにレンタルのWikiでも取る?
96 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 20:11:20 ] 既にある奴で足りてるだろ。 情報が分散するだけだから何個もいらんよ
97 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 20:17:58 ] それもそうか。
98 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 22:05:29 ] つまりboostがやってるみたいに新規ライブラリを受け付けて acceptしたりrejectしたりする機構があればいいのか はてなスターが積み上がる光景が見えたが 母体が2chじゃ投票制にしたら破綻するかなw
99 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 22:08:15 ] >>92 俺はconduitの概念がしっくりこないんだよね ようはstreamなのか? だったらstreamでいいだろ条項とか思っちゃって
100 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 22:43:06 ] >>98 創始者のカリスマ性によると思う
101 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 00:36:08 ] static foreachまだかなあ それとCTFEでForeachRangeが使えないのを早く直して欲しい
102 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 00:38:19 ] >>99 streamというよりstreambufのような感じなんじゃないかな。 streamはstreamで別にあるし…
103 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 13:06:35 ] Phobosのtrunkが熱すぎる件について std.functional std.algorithm その他もろもろ
104 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 13:39:35 ] まじかよwww
105 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 13:44:26 ] >>103 ちょ、これから落としてくるw 2.0専用? 1系列でも使えると嬉しいんだが……。
106 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 13:45:07 ] Phobosはじまったな
107 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 13:46:43 ] >>103 見たとこあんまり面白い変更無いような…。
108 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 16:37:13 ] 1.024/2.008
109 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 16:57:50 ] バグフィックスとphobosの拡張がメインか。 typeof(return)とか実際使う場面なさそうだし
110 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 18:55:22 ] Assertion failure: 't->deco' on line 608 in file 'mtype.c' abnormal program termination コンパイラバグってるな。@2.008
111 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 22:57:41 ] >>36 ってdsss.confあたりから設定できない? budだと-Xあたり? が似たようなオプションになってるっぽいんだけども。
112 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 01:04:03 ] なんか今回のバージョンアップ微妙に反応少ないけど Added const and invariant to IsExpressions これはなんか嬉しい。 あと、 Added const/invariant structs, classes and interfaces. これが気になっている。何に使えるんだろう?
113 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 01:07:19 ] budだと version(build) pragma(nolink); でobj作らないようにして version(build) pragma(lib, "tx.lib"); などとする
114 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 07:34:05 ] wxDでかすぎwwwwwww わなDのテストやってみたら3.12MB^q^ これは・・・
115 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 09:12:21 ] >>112 おれも気になった。 迷走って言葉が頭をよぎった
116 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 16:27:53 ] たしか、constメンバってstaticに配置されるんだよな?
117 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 16:47:51 ] structとclassでは使い道が思い浮かばんけど、 interfaceなら使いどころもあるんじゃなかろうか。 const interface ICountable { size_t count(); } みたいな。
118 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 17:55:18 ] インターフェースって頭にIつけたほうがいいの?
119 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 18:24:38 ] MSハンガリアンだよね。頭にIつけるの。 でも、Iつけてる人は多いねえ。
120 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 18:48:41 ] 俺は、インターフェイス名と同名でインターフェイスの標準の実装を 作りたくなることが結構あるから、名前重ならないようにIつけてる。
121 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 19:04:36 ] 同名のプロパティ作りたいからプライベート変数の尻にアンダースコアつけてるけど、似たようなもんか。
122 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 19:49:31 ] 俺もそのへんなやみつつハンガリアン的とか尻_とかしてるけど、 一般的になにがいいのかねぇ
123 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 20:06:51 ] メンバーならm
124 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 20:21:16 ] 個人的に@インスタンス変数は好き
125 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 23:59:55 ] Dじゃ@は使えないからなぁ。 VC++だと$使えたりする。使わんけど。
126 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 02:23:22 ] const変数にコンパイル時に決定されない値を入れられるんだけど、 これって仕様に適ってるの? const l = readln;
127 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 07:18:24 ] digital marsのサイトからの引用だけど int x = 3; const int *p = &x; *p = 4; // error, read-only view const int *q = &x; int z = *q; // z is set to 3 x = 5; // ok int y = *q; // y is set to 5 ってなコードがある、仕様だと思う。 Cでもローカルのconst変数宣言時にコンパイル時に決定されない値入れれるし、 その辺の仕様を引き継いでるんじゃない?
128 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 16:24:13 ] >>127 そっかー phobos見てても本来ならfinal使うべきところでconstって書いてたりするから仕方ないのかな。
129 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 17:18:10 ] 数カ月おきにやる気を補充した所で細かい仕様が変わってるから困る
130 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 19:09:58 ] へ?finalあるのにconstがその仕様なんだw そのうちreadonlyとかできたりして
131 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 19:16:20 ] initonlyマダァ-? (・∀・ )っ/凵⌒☆チンチン
132 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 19:39:36 ] constって型がconst型になるfinalだろ?
133 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 22:49:36 ] D1.0のconstはコンパイルタイム定数だったよなあ D2.0のconstはそれプラスreadonlyなのかな?とか漠然と思ったまま放置してた俺 D2.0になってconstがどういう意味なのかがわかりにくくない?
134 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 23:18:47 ] >>133 おれもそう思う。>>132 の解釈でいいのかな? あとinvariant型とconst型の使い分けがよくわからん。 関数の引数にconst型を使ったとして、「俺は書き換えない」と宣言しても、その関数を実行しているときに 誰かに書き換えられちゃったら読み込んだりとかした時に予期しないエラー起こさない?マルチスレッドのときとか。 関数の戻り値は「書き換えるな」という意味でconst型でいいような気もするけど。
135 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 23:30:14 ] www.kmonos.net/alang/d/const.html ここ読んでから書き込もうよ。
136 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 23:40:22 ] 昔はconst変数をコンパイル時定数以外で初期化しようとしたらエラーなってた気がするんだが
137 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 00:59:27 ] >>135 を改めて読み直してみたのだが C++のconstにはコンパイル時定数とreadonlyの2つの意味があって, C++とD1.0のコンパイル時定数としてのconstはD2.0ではinvariantが請け負って, C++のreadonlyのconstをD2.0ではconstが請け負うってことかな /* D2.0 コンパイル時定数 => invariant readonly => const */
138 名前:127 mailto:sage [2007/12/01(土) 01:06:50 ] >>135 トン >>126 ごめん、これC++の場合のコードですね、>>127 のレスは忘れてください。 そして7時の俺、目を覚ませ。
139 名前:134 mailto:sage [2007/12/01(土) 01:07:51 ] >>135 そこは読んだよ。結構前だけど。 それでなお、具体的にはconst型とinvariant型の引数の使い分けがわからん。 たとえばPhobosのstd.string.splitの引数がconst型じゃないのは何でだ? その辺の明確な指針がほしい。
140 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 04:59:17 ] void func(D)(in D dg) { dg(); } void main() { func({printf("test");}); } //(7): Error: cannot implicitly convert expression (__dgliteral1) of type void delegate() to const void delegate() あれ?私何か間違えたましたか>< inにconstが入るからダメっぽいんだけどinってこういう使い方じゃないの?
141 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 05:24:21 ] どうして readonly なのに書き込めるのはなぜ?
142 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 08:06:15 ] 1.020でコンパイルできてたSHA512のライブラリが2.007でコンパイルしたらフリーズした semantic2で止まってるらしいけどsemantic2が何かわからね
143 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 13:41:05 ] >>139 splitは文字列のスライスの配列を返すから、 もとの文字列が変更されてしまうと、結果がおかしくなる。
144 名前:143 mailto:sage [2007/12/01(土) 13:49:14 ] コードであらわすとこんな感じ。 import std.stdio, std.string; void main() { auto s = "aaa bbb ccc".dup; auto a = split(cast(invariant)s); // 危険なキャスト writeln(a.join("-")); s[0..5] = "ddddd"; writeln(a.join("-")); }
145 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 13:52:09 ] それは危険なのはキャストであってidupを使えば解決ってことにはならないの?
146 名前:デフォルトの名無しさん [2007/12/01(土) 13:59:59 ] >>126 たしかに www.kmonos.net/alang/d/final-const-invariant.html >const 宣言は、以下の違いを除いて、 invariant とほぼ同じです: >const宣言された変数を通してデータを書き換えることはできないが、 同じデータを参照する別の箇所がデータを書き換えることは あるかもしれない >const宣言された変数の型は、const とあるから、この文章から判断するとconstもinvariantと同様にコンパイル時決定変数なはず。 だからその式が通るならおかしいと思う。
147 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 14:07:04 ] >>143-145 もしsplitの引数の型がin char[]だったら、普通に auto a = split(s); とできてしまう。 invariant(char)[]だからこそ、危険なキャストのような無茶をしない限り安全。 と言ったほうが分かりやすいかな。
148 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 14:10:43 ] >>142 semantic2はsemanticが全て呼び出された後呼び出されるフェーズ。 詳しくはソース嫁
149 名前:デフォルトの名無しさん [2007/12/01(土) 14:21:36 ] >>141 >const宣言された変数を通してデータを書き換えることはできないが、 同じデータを参照する別の箇所がデータを書き換えることは あるかもしれない constからはreadonlyだから書き込めない。だけど、他のconstでない参照からは書き込める。
150 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 14:36:38 ] 今までinvariant,const,finalの違いや使い道が分からなかったんだけど、理解できたかも。 まとめると invariant->コンパイル時定数,書き換え不可 const->readonly,他の参照から書き換え可能 final->初期化以降は書き換え不可,invariantやconstと違ってfinalな変数の指す値は書き換え可能 あれ、じゃあ"初期化以降は書き換え不可"かつ"指している値も書き換え不可"はどう表現するんだ?
151 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 14:40:37 ] >>150 final constでok
152 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 14:43:34 ] >>151 サンクス 自分のレベルの低さを痛感したorz
153 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 14:47:53 ] >>150 こういうことかな? import std.stdio; void main(){ int a = 1; int b = 2; final const int* p = &a; *p = 10;//a.d(8): Error: *p is not mutable p = &b;//a.d(9): variable a.main.p cannot modify const/invariant variable 'p' }
154 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 14:48:43 ] あれ被ったか
155 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 14:52:17 ] final const(int)* p;と書くべき。
156 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 15:10:50 ] 普通にconst int* p = &a;でいいんじゃないの?