トップページ⇒tech
1001コメント253KB

D言語 Part26

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん2010/12/28(火) 10:49:05
プログラミング言語 D (D Programming Language) について語るスレッドです。

■前スレ
http://hibari.2ch.net/test/read.cgi/tech/1281826764/

■本家
ttp://www.digitalmars.com/d/
ttp://www.kmonos.net/alang/d/ (和訳)

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

■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://f17.aaa.livedoor.jp/~labamba/?D%B8%C0%B8%ECBOF (D言語BOF)
ttp://dsource.org/ (dsource)
ttp://tinyurl.com/candcpp2d2 (C/C++に疲れた人のD言語2.0)
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の入門講座)
ttp://www.nicovideo.jp/mylist/4453698 (D言語で作られた芝ゲー niconico動画)
ttp://www.asahi-net.or.jp/~cs8k-cyu/ (ABA Games)
ttp://dusers.dip.jp (D言語友の会)
ttp://www.wish.sakura.ne.jp/desuno/game/Drawing (PrincessDrawing! D言語で作られた横スクロールSTG)
0809デフォルトの名無しさん2011/04/09(土) 02:44:36.44
やはりDはだめな子なのか!?
誰かナイスなGC実装してくれよ
0810デフォルトの名無しさん2011/04/09(土) 03:02:25.37
モダンなGCにはオブジェクトの移動が不可欠で、オブジェクトを移動するにはある値がDオブジェクトのポインタ(移動可)なのか数値やC由来のポインタ(移動不可)なのか区別できる必要があり、その情報をコンパイラが吐いてくれないことにはライブラリだけでは実装できない
0811デフォルトの名無しさん2011/04/09(土) 03:20:37.89
>>809
ぶっちゃけるとネイティブでかつランタイムに大きな負担をかけずに
JavaレベルのGCを搭載するのはかなり厳しい(実際そんなGC見た事無い)
コンパイラを弄ってランタイムとの関係をもっと密にすれば行けるかもしれないけど
そうするとJavaみたいに環境の差を吸収する基盤のないD言語だとそこで死ぬ
勿論タスクを分解して,処理の並列度を上げるという逃げ道はあるけども

region inference的なものを入れれるのであれば新しい道が開ける可能性もあるが
どこまで実用で使えるのか分からんしなぁ
0812デフォルトの名無しさん2011/04/09(土) 03:42:49.04
>>810
immutableの仲間が増えそうな気がするな

fixed(char *) c = malloc(10);
char *d = new char[10]; //movable

c = d; // error!
d = c; // ok
0813デフォルトの名無しさん2011/04/09(土) 04:16:51.30
よく知らんのだけど、ポインタがありながらexact GCを許すために
C#はそんなようなトリックを使ってるんだっけ?
0814デフォルトの名無しさん2011/04/09(土) 04:36:14.83
C#はunsafeを明示してポインタを使うと、そのブロック内では対象オブジェクトは移動をロックされる。
>>812はそうではなくて、D言語風に、素のポインタはいつの間にか移動するポインタ、
fixedを付けると移動しないポインタ、ぐらいのつもりで書いた。細かいことは考えてない。

今思ったんだがポインタ演算中に別スレッドでgc走ってポインタが移動すると結果が狂うんじゃ……
0815デフォルトの名無しさん2011/04/09(土) 08:45:26.93
>>808
ソースの場所おしえてくれ〜
0816デフォルトの名無しさん2011/04/09(土) 09:49:33.49
質問なんだけど
interface A{}
class foo{}
class bar: foo , A{}
class baz: foo, A {}
があって
foo[] array
に、fooとbarとbazが混在してるとして
arrayのうちinterface Aを継承してるものをピックアップなんてできないよね?
書いてるうちに、出来るわけねーじゃんって思ったけど一応質問してみる・・・
0817デフォルトの名無しさん2011/04/09(土) 10:29:58.53
Is式は全能
0818デフォルトの名無しさん2011/04/09(土) 10:55:09.91
immutableとconstは統一してほしい、inoutがダサい
Cとのインターフェイスでもこの辺りや文字列でイラっとくることがある
0819デフォルトの名無しさん2011/04/09(土) 12:16:41.32
GCのやり方はプログラマがえらべるよってのがDのスタンスのはずだ
仮想マシンもないのにGCにごりごり依存してる標準ライブラリの存在がネック
だとすると・・・ピコーン

alias std!FooGC std;
0820デフォルトの名無しさん2011/04/09(土) 12:19:22.67
void* p = std!fooGC.stdlib.mallloc();
std!barGC.stdlib.free(p);

('A`)
0821デフォルトの名無しさん2011/04/09(土) 12:19:37.15
>>816
出来る
0822デフォルトの名無しさん2011/04/09(土) 13:34:50.45
SDLつかえねええええええ

SDL\SDL_audio.d(45): C-style function pointer and pointer to array syntax is dep
recated. Use 'function' to declare function pointers
SDL\SDL_audio.d(77): C-style function pointer and pointer to array syntax is dep
recated. Use 'function' to declare function pointers
SDL\SDL_rwops.d(31): C-style function pointer and pointer to array syntax is dep
recated. Use 'function' to declare function pointers
0823デフォルトの名無しさん2011/04/09(土) 13:56:39.00
>>822
int (*fp)(int, int); //C-Style
↓
int function(int, int) fp; //D-Style
0824デフォルトの名無しさん2011/04/09(土) 14:09:50.10
つ DerelictSDL

main() の頭でDLL初期化が必要なので注意
DerelictSDL.load(); // SDLのそれぞれのDLLに対してこういう初期化文を追加
0825デフォルトの名無しさん2011/04/09(土) 14:53:10.39
構造体のinitのオーバーライドどうやってやります?
0826デフォルトの名無しさん2011/04/09(土) 15:39:35.07
>>823,824

thx!
とりあえず>>823の変換をちまちまやってみるが
うまい正規表現とかないですか
おとなしくDerelictSDLにしといたほうがいいですか
0827デフォルトの名無しさん2011/04/09(土) 15:43:51.46
$1とか使って置換すればそんな難しくないと思われる
0828デフォルトの名無しさん2011/04/09(土) 15:46:20.24
undefined indentifer bitとか\(^o^)/
bitって廃止になったんじゃなかったか
DerelictSDLしてくる
0829デフォルトの名無しさん2011/04/09(土) 16:16:02.17
ttp://www.ku6.jp/keyword6/1.html
ちょっと前にURL載ってるけどここのじゃじゃダメなん?
日付見る限りCスタイルの関数宣言とかbit使ってるってことなさそうだが……
0830デフォルトの名無しさん2011/04/09(土) 16:28:59.65
>>825
継承関連はクラスでどうぞ。
0831デフォルトの名無しさん2011/04/09(土) 19:09:39.90
>>830
Cとのインターフェースで使う構造体で初期値が固定なものがあって
それを使うたびに自前で毎回全メンバーに決まった値入れたり
initXXX()みたいな関数呼び出したりするのが自明すぎだし書き忘れたらバグの元だしで嫌なんだ
initを使えれば見た目もすっきりしていいんだけど・・・
0832デフォルトの名無しさん2011/04/09(土) 19:25:35.91
struct S { int i=10; }
とかするとS.init.iは10になった気がするんだけど、使えそう?
0833デフォルトの名無しさん2011/04/09(土) 20:00:57.47
今日からDはじめました
勉強のためにほかの人が書いたプログラムを写経しようと思ってます
初心者でも理解できるような物があれば教えてください
0834デフォルトの名無しさん2011/04/09(土) 20:43:25.94
>>832
�dほんとだできますた
0835デフォルトの名無しさん2011/04/09(土) 21:39:09.69
>>832, 834
それホントに出来た?
自分は出来なかった・・・。
例えばこんな。

struct Hoge
{
int a = 30;
unittest
{
static assert(Hoge.a.init == 30); // 0 == 30 となり失敗する
}
}

ttp://www.kmonos.net/alang/d/2.0/property.html#init
には書いてあるけど、あるときを境にこれが出来なくなったと理解してる。
いつかの更新履歴に書いてあったような・・・。
08368352011/04/09(土) 21:41:55.63
ごめん、Hoge.a.init ではなく Hoge.init.a と書けばいいのか!
できたー!サンクス!
0837デフォルトの名無しさん2011/04/09(土) 22:08:28.85
>>833
D公式のトップにあるやつとか?
ただ、もしあなたがプログラミング自体の初心者なら、別の言語から始めることをお勧めする。(とりあえずjavaでいい)
0838デフォルトの名無しさん2011/04/09(土) 22:09:00.89
>>832
http://ideone.com/ggfoA

('A`)
0839デフォルトの名無しさん2011/04/09(土) 22:17:15.95
えと、何か言いたい?
0840デフォルトの名無しさん2011/04/09(土) 22:21:26.23
T.init.s.a とか?
0841デフォルトの名無しさん2011/04/09(土) 22:36:24.84
http://ideone.com/C0MPB

(゚∀゚)!
0842デフォルトの名無しさん2011/04/09(土) 23:09:05.26
そーいや今日の会議はどうだったのかなっと
0843デフォルトの名無しさん2011/04/09(土) 23:17:48.86
会議行った人、感想ちょーだい
0844デフォルトの名無しさん2011/04/10(日) 00:06:23.65
#dkaigiの要約
ttp://twitter.com/nalto32/status/56624705855176704
0845デフォルトの名無しさん2011/04/10(日) 10:15:34.11
>>844
把握
0846デフォルトの名無しさん2011/04/10(日) 12:08:58.76
>>844
FU○K
0847デフォルトの名無しさん2011/04/10(日) 12:12:03.79
実際Phobosは妙な機能は充実してるけど基本的な機能が足りない気がするんだよね
Locale周りとか…dwt2使ってて国別のリソース取るところではたと困ったし
0848デフォルトの名無しさん2011/04/10(日) 13:06:48.26
そういえばちょっとまえに、テンプレートの型推論で、静的配列の要素数もちゃんと推論してくれる事に感動した俺。
http://ideone.com/em1tO
0849デフォルトの名無しさん2011/04/10(日) 17:14:21.43
こっちがまとめとしてふさわしい
ttp://twitter.com/mono_shoo/statuses/56567451500023808
0850デフォルトの名無しさん2011/04/10(日) 17:36:51.97
「こんなに沢山いたのか」「非実在D言語er」「僕は一人じゃなかったんだ」
とかお前ら人数に感動しすぎww
0851デフォルトの名無しさん2011/04/10(日) 17:39:54.89
>>848
こんなこと出来たのかw
テンプレートとか苦手なロートルだけどこういうの見るとやってみたくなるな
0852デフォルトの名無しさん2011/04/10(日) 18:13:51.39
動画撮ってたりしないのかな?
0853デフォルトの名無しさん2011/04/10(日) 18:51:47.78
動画を撮るプログラムをDで書くのが間に合わなかったらしい
0854デフォルトの名無しさん2011/04/10(日) 19:31:20.55
完成してたはずなのに、当日コンパイルできなくなってたんですね、わかります
0855デフォルトの名無しさん2011/04/10(日) 19:44:21.19
昨日はpushがあったからな(笑)
破壊的なのかはしらんが
0856デフォルトの名無しさん2011/04/11(月) 02:40:00.43
いやースコープガード文スタイリッシュだー。
最新dmdにスリルを求めてしまう事の次にD言語使ってる感が出る。
0857デフォルトの名無しさん2011/04/11(月) 08:09:51.69
一応いっとくとDのGCが特にクソな訳ではなく
rubyとかのスクリプト言語のもたいていクソなんだが
メインの実行が遅いので、メインとGCの比率で見ると目立たないだけ
0858デフォルトの名無しさん2011/04/11(月) 08:10:57.23
>>815
>>807
0859デフォルトの名無しさん2011/04/11(月) 16:48:24.40
すみません、>>794のGCのパッチは何処にあるでしょう?
GCも何とかなるなら何とかしたい。
0860デフォルトの名無しさん2011/04/11(月) 17:08:40.34
ttp://www.digitalmars.com/d/2.0/struct.html#ConstStruct
t = s; // ok, t.a is now 3 -> ウソ、cannot modify const (dmd2.052 win)

ドキュメントの方がおかしいような気がしなくもないがどうなんだろう
0861デフォルトの名無しさん2011/04/11(月) 20:42:09.42
大量のバグをかかえているdmdよりも、ドキュメントを疑うのかよ
0862デフォルトの名無しさん2011/04/11(月) 20:45:40.30
dmdは常に正しい
0863デフォルトの名無しさん2011/04/11(月) 21:13:27.77
値型がconstなら初期化以外変更不可
そう、貴様は同じ場所に留まって、もがき続けるしかないのだ!
0864デフォルトの名無しさん2011/04/11(月) 22:02:27.30
言語仕様書は、dmdの挙動の説明書ではない
0865デフォルトの名無しさん2011/04/12(火) 01:50:14.40
dmdの挙動が言語仕様を決定する
0866デフォルトの名無しさん2011/04/12(火) 02:08:02.14
つまり、挙動不審なんですね、わかります。
0867デフォルトの名無しさん2011/04/12(火) 04:28:06.83
なあ、いいこと思いついたんだ聞いてくれ

scope class を、scope class のメンバ変数としても存在出来るようにするんだ。
で、scope class はデストラクタ終了後に自分の scope class メンバ変数を delete する。

ちょっと突破口の香りしね?
0868デフォルトの名無しさん2011/04/12(火) 07:57:51.76
面白いと思うけど、何に対する突破口?
光魔術に対する突破口?
0869デフォルトの名無しさん2011/04/12(火) 12:49:44.82
闇プログラマーとしての突破口か。
0870デフォルトの名無しさん2011/04/12(火) 13:14:39.46
↓こういうのを一つにまとめて
if (nodeSrc == node.parent
|| nodeRes == node.parent
|| nodeExt == node.parent) { 〜以下省略

↓みたいに書けそうな気がするけどなにか簡単な書き方ないかな?
if (node.parent in [nodeSrc,nodeRes,nodeExt]) { 〜以下省略
0871デフォルトの名無しさん2011/04/12(火) 14:16:10.25
つ template
0872デフォルトの名無しさん2011/04/12(火) 14:43:23.48
http://ideone.com/l5ee8
こんな感じ?
0873デフォルトの名無しさん2011/04/12(火) 15:05:48.32
てかこれでいいわ。
void*[T] include(T)(T[] a...)
{
void*[T] bar;
foreach(o;a)
{
bar[o] = null;
}
return bar;
}

を定義しといて

if(node.parent in include(nodeSrc,nodeRes,nodeExt) ){〜以下略
0874デフォルトの名無しさん2011/04/12(火) 17:10:33.22
>>873
なかなか。ありがと
0875デフォルトの名無しさん2011/04/12(火) 20:19:12.98
C/C++でいう、
〜前略〜
int i;
int a[256];
char b[1024];
〜中略〜
int *ap = a;
char *abp = (char *)ap;

for(i = 0; i < 1024; i++) abp[i] = b[i];
〜後略〜

とか、

struct test_s{
int a;
char b[16];
};
〜中略〜
test_s a;
char b[20];
〜中略〜
test_s *ap = a;
char *abp = (char *)ap;

for(i = 0; i < 20; i++) abp[i] = b[i];
〜後略〜

とか、できますか?
0876デフォルトの名無しさん2011/04/12(火) 21:35:03.91
つ asm
0877デフォルトの名無しさん2011/04/12(火) 21:37:45.40
相変わらず、趣味で遊ぶにはいいね、ってとこから進んでないのなw
0878デフォルトの名無しさん2011/04/12(火) 21:43:17.91
どゆこと?普通にできるでしょ
0879デフォルトの名無しさん2011/04/12(火) 21:55:15.65
>>875
int[256] a;
char[1024] b;
(cast(char*)a.ptr)[0 .. 1024] = b[];

test_s a;
char[20] b;
(cast(char*)&a)[0 .. 20] = b[];
0880デフォルトの名無しさん2011/04/12(火) 21:57:16.66
え、バイト列から構造体や型の違うデータを取り出すのに、アセンブラが必要なわけ・・・?
0881デフォルトの名無しさん2011/04/12(火) 21:59:40.10
>>879
おぉ、これはずいぶん簡潔に・・・・。
こうすれば出来るんですね。ありがとうございます。
0882デフォルトの名無しさん2011/04/12(火) 22:07:38.87
int[256] a;
char[1024] b;
(cast(char[])a)[] = b[];

これでもいける
0883デフォルトの名無しさん2011/04/12(火) 22:30:46.95
D2 + DFL のサンプルコード探しているのですが
GUI部分とメイン処理を別スレッドでやるのに、参考になるもの何処かにないでしょうか?
0884デフォルトの名無しさん2011/04/13(水) 00:16:37.15
可変個引数 (...) な関数の内部で、可変個引数 (...) な関数に
引数をまるまるスルーパスすることってできます?
0885デフォルトの名無しさん2011/04/13(水) 01:29:03.82
>>883
C#(というか.net)で、やりたい事書いているサンプル探して、それと同じ様な
クラスやメソッドがDFLにないか、探してみるといいよ
enticeのヘルプにクラスの一覧みたいなのがあったと思う
0886デフォルトの名無しさん2011/04/13(水) 01:34:36.08
>>883
サンプルじゃないけどココがひっかかる所かもしれない(コメント欄)
ttp://d.hatena.ne.jp/haru-s/20090716/1247730305
0887デフォルトの名無しさん2011/04/13(水) 02:09:41.01
>>884
void f(T...)(T args){ g(t); }
void g(T...)(T args){}
0888デフォルトの名無しさん2011/04/13(水) 02:16:04.24
>>883
http://bit.ly/hlAaZG どうぞ。
0889デフォルトの名無しさん2011/04/13(水) 02:43:09.07
>>884
C/Dスタイル可変個引数だと出来そうにない。
代わりに、テンプレートのタプルパラメタを使えば出来るはず。(>>887と同じ方法)
void foo(...) を void foo(T...)(T t)に変えて、tをそのまま渡す。(渡す先はC/Dスタイル可変個引数でもおkなはず)

型安全可変個引数だと、受け取った配列(またはクラス)をそのまま渡せばよさそうだ。
0890デフォルトの名無しさん2011/04/13(水) 03:09:43.10
WindowsのコマンドプロンプトでもPowerShellでも、標準出力でascii外の文字
を使うと、正しく表示されないのが困ったもんだ。何でUTF-8なんか使うんだ。
08918842011/04/13(水) 03:09:52.72
>>887, 889

なるほどなるほど。試してみます。
ありがとうございました。
0892デフォルトの名無しさん2011/04/13(水) 03:36:25.52
D言語コンパイラをCentOSにインストール出来ない・・・。
0893デフォルトの名無しさん2011/04/13(水) 04:20:56.19
なんかニューカマー多い?
0894デフォルトの名無しさん2011/04/13(水) 06:53:46.58
CentOSでDMDがなぜ動かないのかと思ったら、gccが4.1.2に巻き戻っていた・・・。
make長げー・・・。
0895デフォルトの名無しさん2011/04/13(水) 07:01:37.88
ついにD言語が一大流行をはじめたか
0896デフォルトの名無しさん2011/04/13(水) 07:48:38.19
>>890
コマンドプロンプトの文字コードは変えられる
0897デフォルトの名無しさん2011/04/13(水) 08:08:21.50
>>895
多分、流行ってない。
けど、思ったよりだいぶマトモな仕様だし、
有名なソフトに使われればその日も近いかも。
0898デフォルトの名無しさん2011/04/13(水) 08:09:10.54
本来ならPhobosがOSのロケールを見て出力(入力もか)文字コードを変えるべきなんだよな
内部UTF-8と決め打って、なおかつ他の箇所では適切に(なるまで時間かかった気もするけど)変換してるんだから
0899デフォルトの名無しさん2011/04/13(水) 08:35:56.80
>>895,897に見る新参と古参の温度差
0900デフォルトの名無しさん2011/04/13(水) 11:10:31.87
むう、std.encodingを拡張して、SHIFT-JISに変換するプログラムを組めないだろうか?

http://www.kmonos.net/alang/d/2.0/phobos/std_encoding.html
http://site.icu-project.org/

・・・もしかしたら出来るかもしれない。
0901デフォルトの名無しさん2011/04/13(水) 13:36:09.00
>>900
頼んだぞ
0902デフォルトの名無しさん2011/04/13(水) 13:38:02.95
や、やっぱり俺なのか!?
0903デフォルトの名無しさん2011/04/13(水) 14:37:28.23
ライブラリじゃなくてフィルタ(SJIS->UTF, UTF->SJISの2つ)があれば
パイプであれこれ柔軟にできるんじゃないかと思うが
探してもうまく見つけられなかった
0904デフォルトの名無しさん2011/04/13(水) 16:17:38.71
nkfとか?
0905デフォルトの名無しさん2011/04/13(水) 17:56:48.00
本家につながらないー
0906デフォルトの名無しさん2011/04/13(水) 18:03:36.46
ホントだ。
0907デフォルトの名無しさん2011/04/13(水) 18:52:02.07
節電のためサーバを落とします
0908デフォルトの名無しさん2011/04/13(水) 19:06:14.63
東電エリアなのかよ
レス数が900を超えています。1000を超えると表示できなくなるよ。