[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 03/03 02:04 / Filesize : 146 KB / Number-of Response : 879
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

D言語 Part28



1 名前:デフォルトの名無しさん mailto:sage [2011/08/24(水) 06:02:12.35 ]
プログラミング言語 D (D Programming Language) について語るスレッドです。

■前スレ
D言語 Part27
hibari.2ch.net/test/read.cgi/tech/1303022487/

■本家
www.digitalmars.com/d/
www.d-programming-language.org/ (ドキュメント)
www.kmonos.net/alang/d/ (和訳)

■コンパイラ
www.digitalmars.com/d/dcompiler.html (DMD, 本家)
dgcc.sourceforge.net/ (GDC, gccフロントエンド)
www.dsource.org/projects/ldc (LDC, バックエンドにLLVM)

■参考URL
f17.aaa.livedoor.jp/~labamba/ (D言語研究)
f17.aaa.livedoor.jp/~labamba/?D%B8%C0%B8%ECBOF (D言語BOF)
dsource.org/ (dsource)
tinyurl.com/candcpp2d2 (C/C++に疲れた人のD言語2.0)
www.kmonos.net/alang/wnd/ (わかったつもりになるD言語)
shinh.skr.jp/d/ (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか)
shoo.s20.xrea.com/shoo/programing (D言語とTangoの入門講座)
www.nicovideo.jp/mylist/4453698 (D言語で作られた芝ゲー niconico動画)
www.asahi-net.or.jp/~cs8k-cyu/ (ABA Games)
dusers.dip.jp (D言語友の会)
www.wish.sakura.ne.jp/desuno/game/Drawing (PrincessDrawing! D言語で作られた横スクロールSTG)

759 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 02:14:38.17 ]
>>756
foreachをコンパイル時に回す(=展開する)なら、
配列ではなくタプルを渡すとうまく行く

import std.traits;
foreach(s;TypeTuple!("abc","def"))
 writeln(mixin(s));

760 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 02:25:29.44 ]
>>751-755
型Aのオブジェクトaから型Bへの変換を行わせたい時、std.conv.toは
1. a.opCast!B()
2. a.to!B() // deprecated
3. B(a) // Bはstruct
または new B(a) // Bはclass
を試そうとする。但し B==string の場合はa.toString()が優先される。

761 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 02:51:27.28 ]
>>757-759
聞いてみるもんだなありがとう!
>>759がまんまだったよ
でもstd.traitsじゃなくてstd.typetupleだった

762 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 02:56:10.51 ]
俺はなんて遠まわしな事をしているんだ。
ideone.com/dUPb6

763 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 07:35:04.36 ]
>>759
おおすばらしい
この辺いつか文法的に整理されると信じてる

764 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 11:52:28.16 ]
>>761
正直言ってTypeTupleという名前は混乱の元だと思ってる。
(型だけではなく式やシンボルも受け取れるので)
Seq!(...)より抽象的でいいと思うんだけどなあ

765 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 22:38:12.57 ]
ところでRangeって便利ですか?

766 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 22:54:46.75 ]
Ranger

767 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 00:04:41.28 ]
便利さが実感できない



768 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 00:45:12.66 ]
かゆいところに手が届かない

769 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 14:33:09.60 ]
auto cap = std.regex.match( ... ).captures;

cap.length == 0 と cap.empty の結果が違うのはなんでなん?

770 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 16:30:51.49 ]
間違えた
前は cap.empty を見なくても length だけで行けてたのに、何で変えてしまったん?

771 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 16:31:16.51 ]
違わないけどどういう時?

772 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 16:41:52.41 ]
公式じゃないdflってドラッグドロップしたら落ちるバグって治ってますか


773 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 17:05:25.62 ]
確かこのスレの人が直したはず

774 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 18:12:29.32 ]
Application.autoCollect = false;

公式見解のこの方法じゃなくて?


775 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 18:18:14.98 ]
>>769-771
auto cap = std.regex.match( ... ).captures;
if (cap.length == M+1) {
// マッチしたときの処理
// 2.057 だとマッチしなくても入ってくる
}

こんな風に書いてたのが全滅して泣いた

776 名前:デフォルトの名無しさん mailto:sage [2012/01/24(火) 23:07:56.06 ]
スコープの外に出てないローカルオブジェクトってスコープの終わりで自動的にGCとかされます?

777 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 00:06:00.07 ]
>>776
つttp://kmonos.net/alang/d/2.0/garbage.html
されない。明示的にdeleteしても、scope属性を付けても保証されるのはデストラクタの実行まで。
core.memory.GC.collect()を呼んでも動かないかも?
ttp://bm98.yaneu.com/dlang/Chapter-06.html
↑ちょっと古いけど、この辺の実装今はどうなってるんだろう?



778 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 00:07:04.54 ]
いえーい!777ゲット!

779 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 00:07:22.76 ]
oh…

780 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 00:16:29.13 ]
>>778
777オメw

781 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 07:49:24.19 ]
>>740-744
PullRequest投げました
d.puremagic.com/issues/show_bug.cgi? id=7359
https://github.com/D-Programming-Language/dmd/pull/637

782 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 07:58:58.20 ]
>781
もうマージされてた
https://github.com/D-Programming-Language/dmd/commit/c9f0d0646ad3dde8a383f6f195763459e5d9a35b

783 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 02:00:58.42 ]
すぐバグ修正されるのは素晴らしいね

784 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 18:00:14.63 ]
if ( DialogResult.YES == msgBox( msg, caption, MsgBoxButtons.YES_NO), MsgBoxIcon.QUESTION )
doSomething();


785 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 01:07:17.94 ]
しまった、オカルト板と間違えた

786 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 11:32:26.21 ]
闇言語だからだいたいあってる

787 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 15:33:27.90 ]
いつから出来なくなったん・・
auto f = FILE("test.txt", "w");



788 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 16:42:32.13 ]
>>784
ついった見ててやっとわかったけど `, MsgBoxIcon.QUESTION` の位置を間違えてるせいで
毎回doSomething()が実行されてナニコレ、って言いたかったんだな

789 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 20:35:04.94 ]
auto f = File("test.txt", "w");

790 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 01:19:23.20 ]
>>789
その考えは盲点でした。すばらしい!!

791 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 16:33:18.48 ]
Add new => lambda syntax.
なにこれ
つーかアップデートのたびBug直されまくってるのな

792 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 16:38:36.32 ]
これかな
www.d-programming-language.org/expression.html#Lambda

793 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 16:51:09.63 ]
dmdやphobosのバグに対処するのは楽しいがoptlinkだけはダメだ
血管が切れそうになる

794 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 17:24:14.36 ]
d.puremagic.com/issues/show_bug.cgi?id=6831
RESOLVED WONTFIX だと・・・? orz

795 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 20:08:19.93 ]
ラムダ式って => になんの?
既存の演算子を使い回すのやめてくれよ

796 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 20:11:30.02 ]
既存?
Dの外の話でもしてるのか?

797 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 20:11:32.91 ]
新しい文法だそうで
=>これまで使われてたか?



798 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 20:26:31.18 ]
未使用

799 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 21:06:53.00 ]
Haskell とかで別の意味の演算子として使われてるとかそういう話か?

800 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 21:30:41.51 ]
C#とかでも=>だから合わせた方がいいんだろな

801 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 21:56:29.10 ]
久しぶりにD言語スレ見てみたが相変わらず破壊的変更はあるようで
Rangeについて詳しい資料公式に転がってないか?

802 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 22:17:51.92 ]
ここが最近の詳しく解説しているページ。公式かどうかは知らない。
ddili.org/ders/d.en/ranges.html

803 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 01:02:10.04 ]
class A{void f(){}}
class B: A{override void f(){}}

のとき、Bを継承したクラスがfをオーバーライドしてるか判断する方法ってありますか?


804 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 01:08:55.00 ]
Bをさらに継承したクラスCがあった場合
(&B.f is &C.f) で判断できる
これがtrueの場合オーバーライドしていない

805 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 01:31:01.79 ]
import std.stdio;
class A{void f(){}}
class B:A
{
  void p(B b){
    if(&b.f is &f){
      writeln("---");
    }else{
      writeln("override!");
    }
  }
  override void f(){}
}
class C:B{}
class D:C{override void f(){}}

void main()
{
  auto b = new B;
  b.p(new C);
  b.p(new D);
}

実行結果
override!
override!


なぜ・・・orz

806 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 01:44:59.45 ]
auto v1 = &b.f;
auto v2 = &f;
(v1.funcptr is v2.funcptr)
これで判断できました。ありがとうございます。

807 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 21:27:54.19 ]
scopedってもう使ってもいい系?



808 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 22:02:42.96 ]
なんか悪い噂とかあったっけ?

809 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 22:19:17.76 ]
scope記憶クラスの代用品として仮実装中ってどっかで見たような記憶があるようなないような

810 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 01:21:12.60 ]
class A { }

void main() {
Object[] a = new A[2];
}

これ暗黙変換できなくなったの?

811 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 02:11:51.89 ]
それ元からできないと思う

812 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 02:25:44.57 ]
>>810
それを許すと以下のような問題が起きる

class A { } 
class C { } 

void main() { 
Object[] a = new A[2]; 
a[0] = new C; // Aしか入らない所にCを入れている


813 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 02:34:58.93 ]
いやその理屈はおかしい

814 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 02:41:46.52 ]
Javaでもできたお

815 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 02:42:33.29 ]
動的に静的の問題じゃないの?

816 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 18:27:31.78 ]
>>810
>Object[] a = new A[2];
これと
Object[] a = [ new A(), new A() ];
これは違うよね。上は暗黙変換出来なくていいと思う。


817 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 19:00:50.88 ]
A[2] b;
pragma(msg, typeof(new A[2]));
pragma(msg, typeof( [new A(),new A()] ));
pragma(msg, typeof(b));

A[]
A[]
A[2u]



818 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 19:06:16.22 ]
>>817
ほお…知らなかった
Dの静的配列と動的配列の値渡し/参照渡しとかの仕様が頭の中でこんがらがる

819 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 20:56:50.02 ]
前から気になってたんだけど
static if(...) {
} else static if(...) { ← ここのstaticってなんで必要なの?
}

820 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 21:20:36.45 ]
static if(...) {
} else {
  static if(...) {
   ...
  }
}
の略だから

821 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 21:28:43.30 ]
>>817
816で言いたかったのは、動的か静的かではなく、
>Object[] a = new A[2];
は配列長を確保してるだけなので必要な場面が思いつかない。
暗黙変換できなくていいと思う。
でも810がやりたかったのはエスパーすると
Object[] a = [ new A(), new A() ];
こっちじゃね?なら暗黙変換できるよーと言う事です。

822 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 21:52:58.62 ]
new A[2];の結果は各要素(参照)がnullである長さ2の動的配列ってことか

new A[2];はnew A[](2);に読み替えられてるのかな

823 名前:821 mailto:sage [2012/02/02(木) 22:02:22.30 ]
あ、「先祖クラスの配列へのcastは例外的に暗黙でいいやん」と言う話だったならたしかにそう思います。

824 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 22:10:09.59 ]
>>822
Error: cannot implicitly convert expression (new A[](2u)) of type A[] to Object[]

と出てるからまさにその通りだと思う。

825 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 22:20:34.66 ]
>>822
C++感覚で new A[2] と書くとドツボにはまりそう。

826 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 23:53:54.57 ]
静的配列
サイズがコンパイル時に決定
値渡し、返り値にも使える
静的配列の代入は複製
動的配列はサイズが同じなら代入できる、違えば例外、この場合も複製されるはず(うろ覚え)

動的配列
参照型
int[]にint[10]とかを代入できるはずだがどうなるかは忘れた

827 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 01:53:58.80 ]
>>826
int[10] a;
int[] b;
b = a; // 複製されない
assert( b.ptr == a.ptr );
b = a.dup; // 複製される
assert( b.ptr != a.ptr );
b[] = a; // 複製される
assert( b.ptr != a.ptr );



828 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 19:48:53.28 ]
$ type reg.d
import std.regex;
import std.stdio;
void main() {
writeln(match("他"d, regex("バ"d)));
writeln(match("他"d, regex("ビ"d)));
writeln(match("他"d, regex("ブ"d)));
}
$ dmd -run reg.d
[]
[]
core.exception.AssertError@D:\devtools\dlang\dmd2\windows\bin\..\..\src\phobos\std\utf.d(800): Attempted to decode past the end of a string


偶然踏んでしまった

829 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 22:41:57.52 ]
056->057間のstd.regexの変更っぷりに吹いた

830 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 08:13:07.47 ]
typeidと.classinfoがあるのは歴史的な理由?便利さから?

831 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 08:28:41.96 ]
>>810
公式ドキュメントのArraysに暗黙変換できるって書いてんだが…

832 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 12:44:43.72 ]
きっと夢でも見たんだろう

833 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 12:49:28.15 ]
2.057ではねられるようになって首を傾げてたんだぜ
やっぱり regression か

834 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 17:44:44.34 ]
Arrayに関しては禁止するべきだと思うんだがな
動的配列に静的配列入れたときも破壊的変更するとき初めてコピーされるという奇妙な仕様になってるし明示的にdupとかキャストさせるべき

835 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 19:04:51.37 ]
っCopy-On-Write

836 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 12:32:24.51 ]
>>831-833
d.puremagic.com/issues/show_bug.cgi?id=926

なんか 「D2 では禁止!ドキュメントが古い!」とか
言ってるんすけど・・・ユルセナイ シャザイト バイショウヲ ヨウキュウシル


837 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 13:12:32.03 ]
trunk のドキュメントをのぞいて見たらこうなってた。(´・ω・`) ショボーン

○ A[] -> const(Object)[]
× A[] -> Object[]



838 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 19:16:23.41 ]
あー、うーん、まあそうか…

839 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 19:35:51.35 ]
なるほど、そうじゃないと
auto a1 = new A[](10);
Object[] a2 = a1;
a2[0] = new Object;
でバグっちゃうのか。
明示的に
Object[] a2 = a1.dup;
こうするのは今もできるってことね

840 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 20:30:19.03 ]
そういやdupでimmutable剥がせる件ってどうなったんだろ

841 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 17:22:48.20 ]
細かい仕様変更にはもうついていけないよう

842 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 00:52:17.22 ]
dupはimmutableはがせるでしょ
idupだとimmutableのまま

843 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 02:57:23.76 ]
constとimmutableの違いがよく分からないよぅ

844 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 03:03:38.39 ]
const: 不変値を関数間で共有
immutable: 不変値をスレッド間で共有

845 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 09:54:57.34 ]
2.058ダウンロードどこでできるんですか!?

846 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 12:12:21.70 ]
まだリリースされてない
どうしてもさわってみたければ github から3点セットでDLしてビルドしる

847 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 17:35:50.05 ]
>>844
間違ったこと教えちゃいかんよ・・・

const その参照から値は変えられないが、別の要因で変わることがある。
immutable いかなる要因でも値が変わらない。



848 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 17:50:05.45 ]
constの分かりやすい例。
ideone.com/sGgmK

849 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 18:46:46.08 ]
ガンダムで例えると
シールド付きがconstで
フルアーマーがimmutableってことね

この例えはとにかく、なるほど…勉強になりました。

850 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 18:52:49.18 ]
constは引数変数向けの型ってイメージがあるな
引数と関わりのないconst変数なんて作らないよね?

851 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 19:05:15.37 ]
クラスのフィールドでインスタンス初期化時に固定するものとかconstにする

852 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 19:09:39.82 ]
それってimmutableでもいけるんじゃないの?

853 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 20:19:05.10 ]
Const と Immutable
www.kmonos.net/alang/d/2.0/const3.html

>>852
static this()

854 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 16:56:02.59 ]
static thisでだとimmutable初期化できないのかーと思ったけどできるじゃん
どういうことが言いたかったの?

855 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 18:53:53.23 ]
>>854
ごめん、勘違いしてた

856 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 19:16:59.45 ]
下のコードをコンパイルするとdmdが落ちるんですが。
dmdのバージョンは2.057です。
template foo(T){
 enum foo = __traits(hasMember,T,"sizeof");
}
static assert(foo!(int)); //DMD Crash


857 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 19:33:23.96 ]
久々にGUIライブラリを見て回った
gtkD・wxD・DFL(fork)・DWT辺りは元気だけどQtDが死んでるなぁ
どこか別の所で元気にやってるのかな?



858 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 19:45:03.62 ]
>>856
trunk の最新ソースを落としてビルドしたら落ちなくなってた(WinXP 32)

859 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 19:57:57.79 ]
>>858
では、2.058では解決されているのですね
ありがとうございます






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<146KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef