もう1時か、
2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50 [PR]女性必見!ネットで高収入バイト[PR]  

D言語なら俺に聞け

1 :デフォルトの名無しさん:05/02/12 10:35:10
D言語一筋で10年ほど勉強しました。
D言語のことなら知らないこと意外ならすべてわかる。
だからなんでも聞いてくれ。
ただし、プライベートなことには答えられねーぞ

223 :デフォルトの名無しさん:2008/01/19(土) 11:50:36
この言語ちゃんと実装できるの?
在任中には業務で使わない気がして来た

224 :デフォルトの名無しさん:2008/01/19(土) 21:17:04
コンパイラが実装できた部分が言語仕様として公開されてる。

バグが結構あるし、何より仕様がころころ変わるから、業務には使わないほうが賢明だが。

225 :デフォルトの名無しさん:2008/01/19(土) 21:19:44
D 3.0 で const 関連がなかった事にされたりして

226 :デフォルトの名無しさん:2008/01/19(土) 23:15:52
20年後ぐらいには実用言語になってないかな。

227 :デフォルトの名無しさん:2008/01/19(土) 23:26:49
C++1xが出る頃にはある程度使えるようになってるんじゃね。

228 :デフォルトの名無しさん:2008/01/20(日) 00:00:10
で、その x は 36 進(hexatrigesimal)の略なんだよね

229 :デフォルトの名無しさん:2008/01/20(日) 00:22:43
いいえ,hexatetragesimalです。

230 :デフォルトの名無しさん:2008/01/21(月) 08:40:41
コンパイラのバグで生成されたネイティブコードで不具合とかいう事象報告されてる?
不具合をアセンブリで追わなきゃならないんだったら趣味的にも使う気になれんのだが

231 :デフォルトの名無しさん:2008/01/21(月) 08:45:38
この言語GCいらんくね?

232 :デフォルトの名無しさん:2008/01/21(月) 12:58:59
配列を連結するとコピーが作られるし、
配列のスライスも配列として扱えるから、
GCは必要不可欠。

233 :デフォルトの名無しさん:2008/01/22(火) 01:34:15
>>230
何はともあれ再現コードplz

昔四則演算だったかとても基本の部分にバグがあって計算間違ったりしてたなあw
さすがに発見後すぐ対応されたみたいだけども

234 :デフォルトの名無しさん:2008/01/22(火) 08:55:29
>>232
スタックに積んだら?
スコープアウト後も保持が無くなるからアウトかいな

235 :デフォルトの名無しさん:2008/01/22(火) 13:34:08
標準ライブラリからして配列のコピーやスライスをどんどん返してくるから、
GCなしではかなり生産性落ちると思う。

236 :デフォルトの名無しさん:2008/01/22(火) 19:05:54
教えてくれ
const char*を帰すconstメンバ関数ってどーやって書くの?

237 :デフォルトの名無しさん:2008/01/22(火) 19:18:19
class C {
const const(char)* f() {
return "D万歳!";
}
}

238 :デフォルトの名無しさん:2008/01/23(水) 08:40:48
>>237
テンキュー
やってみる

あと
class C{
}

const C c[10];

void foo(const C[] a){
c[3..6]=a[0];
}

こういうんが通らない

cはconstだっつわれたから
C[10]c;

で宣言したら
Cからconst Cに出来んよ猿みたいに怒られた

cast(C)(a[0])とすれば通るが不細工すぎる

良い解をplz

239 :デフォルトの名無しさん:2008/01/23(水) 08:46:27
>>237
ついでに教えてくれ
C(++)では関数内のリテラルはスタックを指すけどGCのあるDでは例に上げてくれた書き方が許される?

240 :デフォルトの名無しさん:2008/01/23(水) 08:51:01
>>238

const CからCに出来んよ、って怒られるんだっちゃ

241 :デフォルトの名無しさん:2008/01/23(水) 13:32:12
>>238
C[10] c;

void foo(C[] a){
c[3..6]=a[0];
}

242 :デフォルトの名無しさん:2008/01/23(水) 13:33:51
>>239
文字列リテラルはinvariant(char)[N]型の配列だからどこかから参照してる限りは生きてる。

243 :デフォルトの名無しさん:2008/01/23(水) 16:54:48
>>241
引数にはconstで渡したいんよ…

244 :デフォルトの名無しさん:2008/01/23(水) 17:17:13
_

245 :デフォルトの名無しさん:2008/01/23(水) 17:56:50
>>243
コピーして渡せばいいじゃん。

しかし、オブジェクトでない限りサイズ取得方法が・・・sizeofで取れるんだっけ。


246 :デフォルトの名無しさん:2008/01/23(水) 20:28:57
Dの配列は長さと先頭ポインタの組だから常にlengthプロパティで長さを取得できるよ

247 :デフォルトの名無しさん:2008/01/24(木) 08:30:06
>>244
_か、そうか、d

>>245
まあそうなんだが静的解決させたい


どーでもいいが
const C c[10];
とかって宣言したらcは触れんよね?
コンパイラにはconstに初期値がないエラーを吐いて欲しいゾ

248 :デフォルトの名無しさん:2008/01/24(木) 08:37:10
んでもう一点

class C{}

C[] c=new C[10];

とした場合
個々のインスタンスは
for(int i;i<c.length;++i)
c[i]=new C;

で割り当てるしかない?
それともなんか工夫して書ける?

249 :デフォルトの名無しさん:2008/01/24(木) 13:48:30
>>248
C[] c = new C[10];
foreach(ref e; c) e = new C;

250 :デフォルトの名無しさん:2008/01/24(木) 14:51:30
>>249
refか、なるほど
愛してる

251 :デフォルトの名無しさん:2008/01/27(日) 00:39:35
なんか new C[10] で
個々のインスタンスは生成されないのって
違和感あるんだよなあ・・・
そんなことない?

252 :デフォルトの名無しさん:2008/01/27(日) 00:45:24
勝手に生成される C++ は
デフォルトコンストラクタしか呼べないから不便。
まあ boost::ptr_vector とかつかやええんやけども。

253 :デフォルトの名無しさん:2008/01/27(日) 00:57:46
ポインタ用の領域を確保しただけなのに、勝手に実体まで作られてるほうが気持ち悪いと思う。

254 :デフォルトの名無しさん:2008/01/27(日) 01:41:54
>>251
構造体使えばok

255 :デフォルトの名無しさん:2008/01/28(月) 00:00:22
オブジェクトのインスタンスと配列が区別ついてないだけじゃねーか

256 :デフォルトの名無しさん:2008/01/28(月) 00:44:37
>>255
C++ではclassとstructの違いがないから、
new C[10]はCの大きさの10倍の領域を確保して、
10回デフォルトコンストラクタが呼ばれるの。

一方、Dではclassは常に参照型だから、
new C[10]はポインタ10個分の領域しか確保しないの。

ok?

257 :251:2008/01/30(水) 02:25:37
>>252
なるほど確かに不便だ
言われてみればそれで困ったことあった気がする

258 :デフォルトの名無しさん:2008/02/06(水) 16:33:50
http://builder.japan.zdnet.com/news/story/0,3800079086,20366701,00.htm

259 :デフォルトの名無しさん:2008/02/07(木) 08:27:18
>>258
MSやめてくれ。


260 :デフォルトの名無しさん:2008/03/01(土) 03:34:01
if文の条件式で宣言した変数ってelse節から参照できないの?

261 :デフォルトの名無しさん:2008/03/01(土) 11:41:00
できないよ
ifブロックで使う必要ないんだったら条件式を逆転すれば?
ifとelse両方で使いたいならその書き方するもんじゃないし

262 :デフォルトの名無しさん:2008/03/01(土) 12:18:43
> ifとelse両方で使いたいならその書き方するもんじゃないし
ifがelse節含め全域を覆っていると考えるか、
if節、else節、って感じで分かれてると考えるか、の違いだろな。

Dは後者だから、全域を覆いたいならそういうブロック文を書かないといけない、
ってところか。

263 :デフォルトの名無しさん:2008/03/01(土) 20:03:57
C++ だと else から見れるから
単なる設計思想の違いじゃないかな。
特に検討したことがなかっただけ、なんてオチだったらおもろいが。

264 :デフォルトの名無しさん:2008/03/01(土) 23:22:24
C++ではスコープというか生存期間がelse終了まで含まれるので

class synchronizer {
 LockObject& lock;
 explicit synchronizer(LockObject& lock) : lock(lock) {
  lock.lock();
 }
 ~synchronizer() {
  lock.unlock();
 }
 operator bool() const {
  return false;
 }
};
#define Synchronized(x) if (synchronizer ___locker = synchronizer(x)) ; else

なんてのが出来たりした。(これが有用かはともかく)

265 :デフォルトの名無しさん:2008/05/03(土) 22:42:49
てす

266 :デフォルトの名無しさん:2008/07/10(木) 13:15:34
D1.0.3を使っています。

ある文字列に整数以外が入っているかどうかチェックしたいのですが
標準ライブラリで何かできますか?

toIntを使うと整数以外が入っている場合には例外を投げてくれるのですが
動作が止まってしまうので何か解決策が無いかと考えています。

何か良い方法があればよろしくお願いします。

267 :デフォルトの名無しさん:2008/07/10(木) 13:18:36
書きそびれましたが、現在はstd.regexpのfindを使って正規表現で振り分けをしています。

string reg = "12345";
std.regexp.find(reg, "[^(0-9)]"); // false

reg = "1235b3323s";
std.regexp.find(ptn, "[^(0-9)]") // true

というようにやっています。

268 :デフォルトの名無しさん:2008/07/10(木) 13:28:40
済みません、解決しました
std.stringにisNumericという関数が存在しました。

269 :デフォルトの名無しさん:2008/07/20(日) 22:14:27
簡単な動作をするCUIのプログラムを作りました。

これを Linux と Windows の両方で動かしたいのですが、

main.exe: main.d header.d
  dmd main.d header.d
とすると Windows では動くものの Linux では更新チェックが働いてくれません。

逆に
main: main.d header.d
  dmd main.d header.d
とすると今度は Windows で更新チェックがなされません。

Makefileをどのように工夫すれば両方で正常にコンパイルが終了するのでしょうか。
Windows では Digital Mars Make Version 5.05 を
Linux では GNU Make 3.81 を使っています。

270 :デフォルトの名無しさん:2008/08/09(土) 03:11:34
D言語で作っていたプログラムが
WinXPなら動くのにVistaでは動かないのですが
の仕様とかが変わっているのでしょうか?

271 :デフォルトの名無しさん:2008/08/09(土) 03:12:10
>>270
× の仕様
○ APIの仕様

272 :デフォルトの名無しさん:2008/08/09(土) 03:27:29
Win32APIの使い方間違えてるだけだろ。どうせ

53 KB [ 2ちゃんねる 3億PV/日をささえる レンタルサーバー \877/2TB/100Mbps]

■ おすすめ2ちゃんねる 開発中。。。 by FOX ★
このスレを見ている人はこんなスレも見ています。(ver 0.20)
お前らのCドライブとDドライブの容量を言え! [デスクトップ]
OCN規制 No.4 [2ch規制情報]
■ 看板ロゴ・背景・名無し変更依頼スレッド 15.1 [2ch運用情報]
MP3はLAMEでエンコしてくれ Ver11 [Download]
yahoo:オークション[スレッド削除] [削除整理]

新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.0.7.3 2008/07/26
FOX ★ DSO(Dynamic Shared Object)