[表示 : 全て 最新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)

721 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 02:12:35.95 ]
uniform!("[]")(0.0, 1.0, generator);

722 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 09:33:38.41 ]
なんだその指定方法(笑)

723 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 10:53:52.75 ]
>>721
ありがとうございました。

724 名前:デフォルトの名無しさん [2012/01/09(月) 11:27:03.86 ]
おまえらバンドのDは好き?
www.d-gcr.com/

725 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 16:41:13.84 ]
今はじめて知ったから好きも嫌いもない

726 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 17:06:04.89 ]
知ってたけど話題にするほどいいバンドじゃないからあえて書き込まなかったのに…

727 名前:デフォルトの名無しさん [2012/01/10(火) 06:38:59.55 ]
すみません。教えてください。

可変個関数引数に、ポインタを指定するにはどうすれば良いですか?

void die( ... )
{
real* foo = cast( real* )_argptr;
*foo = 0.0;
}

void main()
{
real evil = 666.0;
die( &evil );
}

こんな感じなのですが、上手く渡せません。

すいません。よろしくお願いします。

728 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 10:15:31.56 ]
import core.vararg;
...
real* foo = va_arg!( real* )( _argptr );
...

phobos のソースを _argptr でgrepした (w


729 名前:デフォルトの名無しさん mailto:sage [2012/01/11(水) 02:01:31.34 ]
それポインタ?



730 名前:デフォルトの名無しさん mailto:sage [2012/01/11(水) 11:51:42.81 ]
_argptrは、渡された引数へのポインタなんだから。
ideone.com/j4fL9

でも、もっといいのは、可変個引数関数を使うのではなくて、テンプレートのタプルを使う方法。
ideone.com/oNAbZ

もっと言うなら、ポインタを渡さずに、ref引数や、参照型のクラスを使う方が安全。

731 名前:デフォルトの名無しさん mailto:sage [2012/01/11(水) 15:05:14.13 ]
Internal error: ..\ztc\cgcs.c 354
ってなんぞ?

732 名前:デフォルトの名無しさん mailto:sage [2012/01/11(水) 16:45:47.49 ]
自己解決しますた
配列を返す関数を呼んでその戻り値に直接[]で添え字指定してたのが問題のようですた

733 名前:デフォルトの名無しさん mailto:sage [2012/01/11(水) 17:38:51.29 ]
Deimos楽しそうだね

734 名前:デフォルトの名無しさん mailto:sage [2012/01/11(水) 19:39:44.49 ]
なにせDでアプリ書くにはCのライブラリが必sゲルンゲフン

735 名前:デフォルトの名無しさん mailto:sage [2012/01/11(水) 20:26:50.36 ]
githubから消えてるんだけどdeimosってどこにあるんだ
あとVisualDがインテリセンス的なもの載せてさらに凄くなってやがる

736 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 01:00:24.65 ]
github.com/d-programming-deimos

737 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 01:11:09.31 ]
Dもrubyみたいにブラッシュアップしてくれる中学生(ただし美少女に限る)どこかにいないかな

738 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 20:10:17.09 ]
スタックやキューなどのデータ構造のコレといったライブラリはありますか?
なければ自分で作るのでいいんですが、一応……。

739 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 20:58:39.02 ]
dcollectionsなのかなあ、コレというのは
個人的には配列が強力すぎて必要性を感じない



740 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 11:28:39.23 ]
bool foo(T)(T[] a ...){
return true;
}
void main(){
assert(foo(1,1,1,1,1,1));//OK
assert(foo("abc","abc","abc","abc"));//コンパイルエラー
}

これをコンパイルしようとしたら
test.d(6): Error: expected 1 function arguments, not 4
って怒られる


741 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 12:09:07.55 ]
foo(1,1,1,1,1,1);
のほうは実は
foo([1,1,1,1,1,1]);
でも呼び出せる。
2番目のもこれだと解釈されてる

742 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 12:09:27.16 ]
import std.stdio;

bool foo(T)(T[] a ...){
  foreach(i; a)
    write(i);
  return true;
}
void main(){
  foo([1,2,3]); // 出力: 123
}

SomeType[] a ...
という可変個引数の場合、可変部分ナシで配列を一つ渡すことでaに直接配列を渡せる。
だから、文字列(char[])に限らずfooに最初配列を渡した時点でaに対して配列を渡したことになって、複数渡すとエラーになる。

配列自体を可変個引数として渡したい場合は
foo!(string)("abc", "abc", "abc")
foo!(int[])([1,2,3], [4,5,6])
みたいにTが何であるか教えてやらないといけない。

743 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:03:58.75 ]
>>741-742
Tをちゃんと指定しないといけないんですね。
ありがとうございました。

744 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:07:31.14 ]
いやまあ、引数が配列複数な時点でコンパイラがTを配列として扱うべきな気もするけど……

745 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 12:38:20.34 ]
std.container.Array!(char) str;
が通らないんですけどどうすればいいんでしょう
ちょっとgcから切り離されたstringが欲しかっただけなんですけど

746 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 14:28:21.70 ]
>>745
malloc/freeを直接つかうとか

747 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 19:07:59.01 ]
@property void push(int[] arr, int val) { arr ~= val; }
void main() {
 int[] arr;
 arr.push = 42;
}

UFCSとか見てて、どうせだからこういうことしたくなるけど
さすがに無茶だよなぁ

748 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 19:11:08.92 ]
>>745
Array!(dchar) にしないとだめみたいだな
いいんだか、悪いんだか

749 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 19:41:50.36 ]
>>747
後でソース読むときが大変だと思う



750 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 20:35:15.76 ]
interfaceにGUID付けられるようにならないかな
RTTIからGUID取れるようにしてObjectのQIだけですべてのパターンに対応できる感じで
まあDelphiのパクリなんだけど
ちなみにこんな感じでできたら最高
ideone.com/GspW0

751 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 04:40:49.62 ]
昆布のtoってオブジェクトに対してかけるとobj.to!Tに転送されるんだね
ソース見るまで気づかなかった

752 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 08:25:24.26 ]
class A{
T to(T:string)(){
return "";
}
}
toStringより特殊化の方がいいってこと?

753 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 10:53:58.40 ]
最近は
T to(T)() if (is(T == string)) {
のほうだな

754 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 11:09:13.49 ]
しかし class の to は deprecate で cast 使うようになりそう?
www.d-programming-language.org/phobos/std_conv.html#toImpl
Scheduled for deprecation in January 2012. Please define opCast for user-defined types instead of a to function. to will now use opCast.

755 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 11:42:27.25 ]
to は双方向で
toString は一方通行のイメージ

756 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 23:04:37.08 ]
foreachでmixinって出来ない?
foreachを展開してmixinしかないかな
こんな感じにしたい
int abc, def;
foreach(s; ["abc", "def"])
writeln(mixin(s));

757 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 00:59:55.47 ]
mixinの中身はコンパイル時に確定しないといけないから無理じゃないかな
今CTFEでループさせるなら再帰しか無いけどstatic foreachって入る予定あるの?

758 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 01:55:05.17 ]
>>756
こういう事じゃないんだろうな、と思いつつ。
ideone.com/iZWxL

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() ];
こっちじゃね?なら暗黙変換できるよーと言う事です。






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

前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