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の入門講座)
384 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 02:15:44 ] struct A {} A a0; const A a1; a0= a1; //Error: cannot implicitly convert expression (a1) of type const(A) to A をるたん・・・
385 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 02:40:31 ] >>384 それは今まで出来たのがおかしい気がする。
386 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 02:49:24 ] >>385 >>384 じゃないけど、構造体の代入はビットコピーなんだからできないとおかしいだろう。
387 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 02:51:46 ] >>386 例えば、Aがint*型のメンバを持ってたとしたら、 const(int)*からint*への暗黙の型変換が起きてしまうと思うのだけど。
388 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 03:00:16 ] >>387 そういや、そうか。すんません。
389 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 08:53:49 ] >>387 const(int*)にならないの?? おれがわかってないのか??
390 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 09:19:51 ] >>384 Replace: > const(C) c; > c = new C(1); // error with: const(C) c = new C(1); だってさ ttp://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D.announce&artnum=10964
391 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 10:01:38 ] >>390 ん? それ>>383 のだよね。
392 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 12:27:38 ] >>387 ポインタを含む場合だけエラーってのでいいと思うんだけどなあ。
393 名前:390 mailto:sage [2008/01/02(水) 12:31:13 ] >>391 そそ、ごめん
394 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 16:11:30 ] >>377 これなおらなきゃまともに窓作れないよ・゚・(つД`)・゚・
395 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 17:28:04 ] >>392 そんな例外はかえって必要ないだろう。
396 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 22:25:48 ] budで-Xphobosつけないとphobosのソースもコンパイルされるという事実に気づいた 自動で付いてるもんだと思ってたのに・・・ひどい!
397 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 03:37:47 ] char[] hoge = new char[100]; と char[] hoge; hoge.length = 100; ってなんか違うことってある?
398 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 03:54:26 ] 意味的には違わないはず。生成されるコードは知らないけど。
399 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 23:57:30 ] 構造体をcast(const)できないんだけど、どうすればいいんだ。
400 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 01:45:20 ] >>399 コードplz あとそれどんなときに必要?
401 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 01:52:26 ] struct S {int i;} void main() { auto a = [S(0), S(1)]; auto b = [cast(const)S(0), S(1)]; // Error: no property 'opCall' for type 'const(S)' } const(S)[] 型の配列リテラルが欲しいんだ。
402 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 02:12:20 ] >>401 これじゃダメ? import std.stdio; struct S{int i;} void main(){ const x = [S(0), S(1)]; writefln(typeid(typeof(x))); // (const(const(main.S)[2]) } 配列リテラル周りはいつもバグに悩まされるから使わない方が トラブルに遭わずに済んでいいかと
403 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 02:25:51 ] const(S) a = S(0); const(S) b = cast(const(S))S(0); 確かに、暗黙に変換できるのに、明示的にキャストできないのは気持ち悪いな。
404 名前:402 mailto:sage [2008/01/04(金) 02:26:57 ] どうもconst(S)とS(0)を同時に実現できないみたいなので下のzのようにするしかないんじゃない? import std.stdio; struct S{int i;} void main(){ const x = [S(0), S(1)]; writefln(typeid(typeof(x))); // (const(const(main.S)[2]) auto y = [S(0), S(1)]; writefln(typeid(typeof(y))); // main.S[2] const s = S(0); auto z = [s, S(1)]; writefln(typeid(typeof(z))); // const(main.S)[2] }
405 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 02:33:45 ] これでおk auto a = [delegate const(S)(){return S(1);}(), S(2)];
406 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 06:02:12 ] 似たようなやり方を前にも見たような気がする
407 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 21:56:14 ] phobosに16進文字列を整数に変換する関数ないの?
408 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 22:37:09 ] と思ったけど、CTFEできないといけないから、いらないや
409 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 22:58:00 ] もしかして引数なしの関数って、() なしで名前だけで呼び出せるのか
410 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 00:47:20 ] yes. プロパティっぽく扱えるようになってる。
411 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 00:48:22 ] >>408 それくらいの関数って作れなかったっけ?
412 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 01:23:48 ] yes. プロパティのための構文糖。
413 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 01:24:57 ] リロし忘れてたごめんorz 答え方まで似てるってのが笑える。
414 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 01:31:14 ] >>411 CTFEできないとダメだから自前でこしらえるしかない、って言いたかったのさ
415 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 01:36:56 ] >>414 あーなるほど。さんくすこ
416 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 11:30:03 ] >>410 ,412 なるほど、Ruby チックでいいね
417 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 20:19:50 ] それってプロパティじゃない関数までgetterとして振舞うってことだよな。 LL好きにはいいんだろうけど、ちょっとやだな。 getter/setter相当がオーバーロードされているときと、 getterのみはローカルキーワードで対応ってならんのかな。
418 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 21:52:02 ] 引数がない関数にわざわざ()をつける必要がないってのは自然な感じがするんだけどなあ。
419 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 22:01:44 ] まあ副作用が無ければ自然に思える。
420 名前:デフォルトの名無しさん [2008/01/07(月) 22:25:16 ] その情報を取り出すことで何かが変化するのなら、それを使用するときに変化すると言うことが明確でなければならない。 つまり関数には後ろに「( )」が必要。
421 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 22:47:17 ] >>417-419 Delphiも、引数なし関数は省略できたな。 >>420 上の行としたの行がつながらん。 ()があれば、必ず副作用なるわけではないでしょう? 副作用があるかどうかは、メソッド名とドキュメントで明示すべき。
422 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 22:49:44 ] 命名をちゃんとしとけばそれほど違和感ないと思う。 process.kill thread.start window.close stream.flush something.toString
423 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 22:55:44 ] 基本的に、名詞はプロパティ、動詞はメソッドというのが一般的じゃないかな。
424 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 03:06:26 ] そういや、Rubyも括弧いらないんだよな。
425 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 07:19:29 ] Ruby で慣れてるから副作用があろうがなかろうが括弧無しで違和感ないわ
426 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 10:57:58 ] >>417 個人的には変数がクラス外部からはconstに見えるアクセス制御がほしい。 class Foo { int hoge_; int hoge() { return hoge_; } } とか書くのも冗長、最適化されるか分からないのが嫌、みたいな。 っつかそういう制御っていまできましたっけ?
427 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 12:32:09 ] >>426 constメンバ関数 class Bar {} class Foo { int hoge_; const int hoge() { return hoge_; } Bar bar_; this() { bar_ = new Bar; } const const(Bar) bar() { return bar_; } }
428 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 16:37:46 ] そういうことじゃなかろう。
429 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 21:44:09 ] readonlyにするってこと?
430 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 22:46:40 ] 話ぶったきるが、連想配列では char[][char[]] m; m["foo"] ~= "bar"; と m["foo"] が lvalue になるんだけど、自分で作ったクラスが opIindex で配列を返すと 当然のことながら lvalue にならない。どうにか関数で配列の参照を返すことってできんだろうか?
431 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 23:08:07 ] opIndexAssign? ~= みたいな複合演算子は使えないけど。
432 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 23:42:51 ] それか、プロキシオブジェクトを返すか、だね。
433 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 01:07:09 ] phobosにmap, filter, reduceとか配列操作関数が欲しいよう
434 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 01:15:26 ] >>431 代入(=)じゃなくて連結(~=)したいんだ。 いちいちプロキシオブジェクト作るのは面倒だし、困ったものだ。 あと、配列とかにも演算があるんだから opCmp とか呼べりゃ良いのに・・・ ソート用に比較するときに == と < (または > ) の2回比較しなければいけないから困る。 細かいところで融通きかんよなぁ。
435 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 01:19:52 ] >433 Lisp屋さんか?それともPython屋さんか?
436 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 01:37:02 ] >>434 インデクサやスライサの複合代入がオーバーロードしたいって要望はずっと前からあるが、 実現される兆しはないな。プロキシオブジェクト返すしかなさそう。 TypeInfo使えば、プリミティブ型を含めて任意の型の比較が汎用的に出来るよ。 int[] x = [1, 2, 3], y = [1, 2]; writeln(typeid(int[]).compare(&x, &y));
437 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 14:08:13 ] java7で言語仕様に盛り込まれるというプロパティ仕様がかなり羨ましくてしょうがない。 お決まりの実装は自動生成してくれたり……をるたんも影響受けてくれないかなぁ。
438 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 17:02:35 ] >>437 詳細ちぼん
439 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 19:34:02 ] >>438 journal.mycom.co.jp/articles/2007/05/16/java7/index.html あ、でもこれだと「フィールドとプロパティで名前がかぶるからフィールドに_つけなきゃ」 とかの悩みが解決できないなぁ……いや、内部からもプロパティでアクセスすりゃいいかな。
440 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 19:41:32 ] >>439 > 内部からもプロパティでアクセスすりゃいいかな。 継承に影響が出るから、別の意図が無ければそうすべきだよ。
441 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 20:09:00 ] >>224-226 の話だが、eBook版が現地時間の1/7からゲット可能になってるらしいぞ。 www.dsource.org/projects/tango/wiki/LearnToTangoWithD なんてのもできてた。 人柱レポ頼む。
442 名前:434 mailto:sage [2008/01/09(水) 22:58:21 ] >>436 おおお、そんな方法があったのか。ありがとう。 というか、インスタンスが同じかどうか調べる(x is y 式と同じ)ものだと思ってたよ。 opCmp は呼べないのにどういう仕組みになってんだろ。。
443 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 23:26:05 ] >>442 std.typeinfo以下に全部ソースあるから読んどくといいよ。
444 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 07:07:30 ] >>439 なるほど。 ありがとう これはいい文法砂糖
445 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 03:01:09 ] >>353 アイ ウンコ ナウ と読んでるでのは俺だけじゃないはず
446 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 09:48:44 ] お前だけだろw
447 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 05:07:50 ] ウンキングナウ!
448 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 16:06:46 ] 動きないのかなあ
449 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:04:37 ] D forum からネタ www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=64888
450 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:40:17 ] WPFでウィンドウを表示するのには成功したんだが、 イベントの受け取りをどうするか…
451 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 19:27:53 ] std.threadにsleepがないんだが、どっか別の場所にある?
452 名前:デフォルトの名無しさん [2008/01/14(月) 19:42:43 ] $ find std -name '*.d' -exec grep -H 'sleep' \{\} \; std/c/time.d:void sleep(time_t); std/c/time.d:void usleep(uint); std/c/time.d:void msleep(uint);
453 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 19:51:30 ] d 今更だがphobos手抜きすぎる気がしてきた
454 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:50:08 ] 言語仕様は素晴らしいが開発環境とライブラリが貧弱すぎて使い物にならないのがD。
455 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:52:41 ] 言語使用はC++なみに複雑で全然素晴らしくない。 C++の焼き直しに過ぎない。
456 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:55:45 ] 言語仕様が素晴らしいと思われるようにころころ言語仕様を変更してるから、 開発環境とライブラリが成熟しなくて、結局使い物にならないのがD。
457 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 22:00:35 ] C++のように現実的な限界を認めてさっさとライブラリや文法を 固めてしまった方がはるかに現実的なのに。
458 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 22:02:04 ] Dは実用言語を目指した実験言語です
459 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 22:04:47 ] こんなところでケチ付けても、をるたんは日本語の掲示板なんて見ないよ。
460 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 22:28:21 ] >>457 それはPython
461 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 22:34:55 ] 来年で10年だし そろそろ固まってもいいころだと思うんだが
462 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 22:52:40 ] Dの初心者向け解説を一通り見た感想なんだけど。 C++のキモ過ぎに絶えられない人。 英語読めない人。 せいぜい趣味の範囲。 windowsが主でパソコン(PC)しか見えてない人。 それ以外mac, linux, unixにあんまり関心ない人。 C++に抵抗があって、java, C#以外を考えるなら、 objective-cでいいかなと思うけど、英語勉強しないとねw Dなんて、いまだに実用(プロジェクト・個人でも)で使うのは怖くてできないし、 おぼえようにも仕様が複雑すぎ・リテラルが多すぎで、結局C++とかわんないw ということで、C++と同じくwindows向けのオナニー言語ってことだと思った。 この辺が一向に流行らない理由じゃないかな。 ちなみに、dmcは結構好きだけど。
463 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:00:30 ] D は Windows 以外でも使えるが・・・。
464 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:05:00 ] ニュースグループ読んでる感じだと、非Windows環境での話題のほうが多いぞ
465 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:08:46 ] つか言語がwindows向けってどういうことだ
466 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:16:04 ] windows(とlinux)がターゲットだからまずwinからサポート・実装される。次が非windows。 でもパソコンがターゲットならvmのjavaかc#でいいよ。 次世代目指すとかデスクトップ(win, gnome)とかターゲットかと思えば、 その割には、dはguiとか標準で持ってないし、一体何をしたいんだが理解に苦しむ。 dを追いかけるよりも他の言語やunixを追いかけたほうが日本人にはいいと思った。 ハードならcや分野専用のカスタマイズ言語(cgとか)があるし。 一応、嘆き。
467 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:16:36 ] >>462 日本語でおk
468 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:18:13 ] デーモンとか書くの楽になるならDもいいんだけど
469 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:19:07 ] >467 おまえ馬鹿じゃね? >>462 の言ってることはめちゃくちゃ明解
470 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:20:05 ] >>465 PCが主体で、携帯とかPDAとかじゃなくて、デスクトップ向けってことです。 ほぼwindowsの牙城というか。 C++にGCが標準で搭載されれば(bohem gcでも)、Dの存在価値は薄くなるかなってw
471 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:22:50 ] 正式版が出てから急にシェアが増えたのはどう説明するんだろ>>257 対してC++のシェアはDの伸び以上に減ってるんだよな 言語が増えた今、C++は用途が限定されたオナニー言語になりつつあるという事だ
472 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:33:07 ] C++ はプログラマのオナニー向けじゃなく、コミュニティのオナニー向けだろ。 俺は Boost のイカれ具合とそれを崇拝する信者どもに嫌気が指した。
473 名前:デフォルトの名無しさん [2008/01/14(月) 23:35:06 ] なんだ自演がはじまったのか
474 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:36:16 ] Dの目的のなさも似たようなもんじゃないか? どうせC++についていけないでDに逃げてきたんだろうし。
475 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:37:45 ] 0xスレでやれ
476 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:38:00 ] C++は標準化委員会があるからまだいいほうだろ。
477 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:43:39 ] >>476 Boost の lambda とか言われたままに採用せずに、あんなもん言語仕様のひとつに組み込めよ、と思う。 なんでもかんでも template で generic programming って間違った進化だろ。 で、こういうこと言うとパラダイムシフトできないアホグラマがどうのとか。 スレ違いだからこのへんにするが。
478 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:45:23 ] C++についていけなかった香具師らはRubyに逃げた
479 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 23:47:58 ] >>477 まあ今の言語の群雄割拠は地球の歴史でいうと先カンブリア紀のようなもんだからなぁ
480 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:04:41 ] パーサーが実質世界に一つしかなくてしかもオープンソースというのは C++ からしたら天国じゃないか
481 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:23:46 ] 同じ事が近いコーディングコストで達成できるのであれば、言語仕様は小さい程いい。 何でもかんでも言語仕様に取り込みゃいいってもんじゃない。
482 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:28:54 ] >>481 構文や意味に誤りがあった場合にまともなエラー表示ができていない。 達成できてるとは言い難い。
483 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:30:20 ] コンパイラが実装しなけりゃ絵に描いた餅。 export の二の轍を踏むだけ。
484 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:32:13 ] Dの設計・言語使用に携わっている人たちが、そもそもC++についていけなかった件について。