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

D言語 Part26

■ このスレッドは過去ログ倉庫に格納されています
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)
0655デフォルトの名無しさん2011/03/25(金) 00:13:20.59
>>654
読みました�d
ライブラリ使用者側としては「DWTを使ってるけど何かあってもDWT作成者には責任はないです」
っていうのをDWTのリンクに添えて書いておけばソース開示なしで商用利用も可能って感じかな
間違ってたら突っ込みお願いします
0656デフォルトの名無しさん2011/03/25(金) 01:08:41.32
Cのソースを手っ取り早くDに書き直すとき、
exit(0)とかはとりあえずthrow new Exception("exit(0)")してるんですが、
もっとそれっぽいのありますか。
0657デフォルトの名無しさん2011/03/25(金) 01:39:29.24
std.c.stdlib.exit(0);
0658デフォルトの名無しさん2011/03/25(金) 05:51:23.20
// s.d
struct S { private int n; }

// main.d
import s;
void main() { S s; s.tupleof[0] = 10; }

が通っちゃうらめえ。
0659デフォルトの名無しさん2011/03/25(金) 07:03:40.65
tupleofでprivateメンバにアクセスできるのかー
またバグなのか仕様なのかよくわからない動作なのか
0660デフォルトの名無しさん2011/03/25(金) 09:35:56.30
private とか static とか deprecated とか この辺はバグ満載な感じ
修正優先度も低そうだし
0661デフォルトの名無しさん2011/03/25(金) 10:53:28.69
-m64であえなく玉砕。
リンカが通らないorz
0662デフォルトの名無しさん2011/03/26(土) 05:03:56.50
これ何か間違ったことしてます?
http://ideone.com/OHI9o
0663デフォルトの名無しさん2011/03/26(土) 06:05:47.20
テンプレート関数はまだオーバーロードできなかった気がする
0664デフォルトの名無しさん2011/03/26(土) 08:07:10.82
>>658見て気づいたが、構造体リテラルでprivateメンバも設定できるのな。
privateメンバあるなら大抵コンストラクタもあるだろうから問題はないだろうけど、なんか微妙に気持ち悪い感じ。
0665デフォルトの名無しさん2011/03/26(土) 12:17:31.60
>>664
>>658の場合は

auto s = S(42);

ができるんだよなぁ
privateは見えない建前だから、その42はどこ行くの?っていう
0666デフォルトの名無しさん2011/03/26(土) 13:51:32.38
単に代入するだけのコンストラクタが自動的に定義されてるだけと考えるとわりといける
リテラルだと思うときもいけど
0667デフォルトの名無しさん2011/03/26(土) 15:54:24.70
privateは読み飛ばしたらいいかな
0668デフォルトの名無しさん2011/03/26(土) 16:10:55.89
not accessibleでコンパイルエラーが自然じゃね。
0669デフォルトの名無しさん2011/03/26(土) 19:50:41.91
opCall()をオーバーロードすればいいんじゃね?
0670デフォルトの名無しさん2011/03/26(土) 21:22:10.38
a += b;
と
a =+ b;
を間違えて30分くらいハマった
こういう文法を持つC言語は邪悪すぎる
みんなでDに移行しようぜ
0671デフォルトの名無しさん2011/03/26(土) 22:53:51.65
>>666
privateと指定することができないじゃん
0672デフォルトの名無しさん2011/03/26(土) 22:58:34.30
>>669
なんの為?
0673デフォルトの名無しさん2011/03/27(日) 00:02:46.84
半年ぶりに戻ってきてdmdのバージョンを上げてコンパイルしたらエラーが沢山
イヒヒイイヒヒ
0674デフォルトの名無しさん2011/03/27(日) 00:19:54.40
半年くらいならCとBASIC程度の違いで済むのかな
0675デフォルトの名無しさん2011/03/27(日) 00:45:38.95
修正ではなく移植と申したか。
0676デフォルトの名無しさん2011/03/27(日) 09:59:11.22
Lua使ってる人がいるみたいだけど、squirrel.dってどっかにあるのかな
Bindingsにあるのかと思ったら古かったんで自分で書こうかと思ってるんだが
0677デフォルトの名無しさん2011/03/27(日) 11:47:13.40
importファイルだけならhtod使えば30分くらいでできたよ
0678デフォルトの名無しさん2011/03/27(日) 12:49:10.03
自動変換して30分とかDさんぱねぇっす

というかhtodってメンテされてんの?
0679デフォルトの名無しさん2011/03/27(日) 12:51:29.44
いやある程度自動変換させといてエラー出るところだけ自分で修正するんだけどね・・・
0680デフォルトの名無しさん2011/03/27(日) 14:49:57.93
htodはconst char*をchar*に変換してくれるのを初めだいぶ使えない子
「エラー出るとこだけ修正」だと↑とかマクロがっつりコメントアウトしちゃうとことか修正できないし
ぶっちゃけ手書きとあんま変わらん
0681デフォルトの名無しさん2011/03/28(月) 19:46:38.75
ttps://github.com/Rayerd/dfl
期待sage
0682デフォルトの名無しさん2011/03/29(火) 06:43:10.90
exportってどういうときに使うんでしょうか?
なんだか無くても動いてるような気がするんですが。
0683デフォルトの名無しさん2011/03/29(火) 17:41:55.15
dmd2.052 -m64にてコンパイル…

struct st_list {
alias st_list *prev;
alias st_list *next;
void *data;
};
assert(st_list.sizeof == 8); // safe

どういうことだってばよ?
0684デフォルトの名無しさん2011/03/29(火) 18:20:48.38
aliasを何だと思ってるんだ?
0685デフォルトの名無しさん2011/03/29(火) 18:31:18.33
prevというメンバがいるんじゃなくて、prevというalias型を定義しただけだから問題ない
0686デフォルトの名無しさん2011/03/29(火) 19:28:09.21
ごめん、古いソースだったもんでこうなってたんだ。
こりゃ32bitでもダメっぽいな。失礼しました。
0687デフォルトの名無しさん2011/03/29(火) 19:43:05.63
gtkDも生きてたか
0688デフォルトの名無しさん2011/03/29(火) 19:47:41.95
dflの中の人が動き出したんですか?
0689デフォルトの名無しさん2011/03/29(火) 20:22:11.67
>>686
いやなんか完璧に勘違いしてない?
0690デフォルトの名無しさん2011/03/29(火) 20:26:09.64
>>688
上のリンクは本家とは無関係
0691デフォルトの名無しさん2011/03/29(火) 20:35:16.44
auto f = to!float("0"); // 落ちる

えええ・・
0692デフォルトの名無しさん2011/03/29(火) 21:55:02.69
>>691
落ちない
Ubuntu 10.10 64 bit
0693デフォルトの名無しさん2011/03/29(火) 21:57:08.17
落ちない
win7-64bit dmd 2.052

ちゃんと落ちないなんてどうしちゃったのうちのdmd…
0694デフォルトの名無しさん2011/03/30(水) 00:33:41.18
struct Foo(T){
 T i;
 this(T i) pure
 {
  this.i = i;
 }
}

を-Hスイッチでdiファイルにするとpureが消えますが、これはdmd2.052の仕様ですか。


Foo!(T) bar(T)(T i) pure
{
 return typeof(return)(i);
}

とか出来なくなる。SciDやろうとしてハマった。
06956942011/03/30(水) 00:37:02.76
ちなみに
>>691は落ちなかった。
ubuntu 10.04 64bit
0696デフォルトの名無しさん2011/03/30(水) 02:00:53.73
>>691
2.048で落ちた小数点を探しに行ってなんとなく落ちるぽい動作だな
最新版だと直ってる
0697デフォルトの名無しさん2011/03/30(水) 10:42:05.11
>>689
http://www.steinmole.de/d/
こいつの中の人に言ってくれよ・・。
少し前まで(32bitで)12になって動いてて、そのまま気づかなかったんだよ。

-m64で構造体のサイズがmysql.hの定義とズレまくって
大変だったと言いたかっただけなんだorz
0698デフォルトの名無しさん2011/03/31(木) 23:33:20.05
void main(){
 int i;
 int* p = &i;
 writeln(i.sizeof); //-m32でも-64でも4
 writeln(p.sizeof); //-m32だと4で-m64だと8
}

これが原因でSDLでセグメンテーションエラーとか出る。
具体的には-m64で
auto screen = SDL_SetVideoMode(640,480,32,SDL_SWSURFACE);
すると、screen.format以降がずれずれ。
こういうのってどうしようもないの?
0699デフォルトの名無しさん2011/03/31(木) 23:47:30.12
そもそもDのintはCと連動してない。ビット数固定だったはず。
0700デフォルトの名無しさん2011/03/31(木) 23:47:51.89
言語側にint_ptrみたいな汎用整数型が欲しかったな
というかなんでないんだろう
0701デフォルトの名無しさん2011/04/01(金) 00:06:09.10
よくわからんけどSDLが64ビット対応してないんじゃね?
0702デフォルトの名無しさん2011/04/01(金) 06:58:37.29
alias std.traits.Signed!size_t int_ptr;
extern(C) SDL_Surface* SDL_SetVideoMode(int_ptr, int_ptr, int_ptr, Uint32);

auto screen = SDL_SetVideoMode(640,480,32,SDL_SWSURFACE);

これでどうだろ?
まあSDLが64bit対応してなかったらどっちにしろ詰むわけだが
0703デフォルトの名無しさん2011/04/01(金) 08:30:33.81
intptr_tとかの型ならstd.stdintにあるよん
0704デフォルトの名無しさん2011/04/01(金) 15:26:57.53
// c/c++ -m64
printf("%d", sizeof(MYSQL)); => 1248

// D MySQL Driver + DMD2.052 -m64
writeln(MYSQL.sizeof); => 1040

( ゚д゚)…

  !
(゚д゚ )

version(X86_64) {
struct MYSQL { byte[1248] a; }
}

今は反省してない。
0705デフォルトの名無しさん2011/04/01(金) 19:28:24.07
>>703
おおマジか…
sizediff_tとかhash_tみたいな意味不明の型は何もimportしないでも使えるというのにどうしてそんな差別を
0706デフォルトの名無しさん2011/04/01(金) 21:06:04.68
>>698
構造体の定義を全部64bit用に調整してやるしかないんじゃないかな
大丈夫だSDLの構造体はそんなにいっぱいない
0707デフォルトの名無しさん2011/04/01(金) 21:28:07.78
64bit対応に詳しくないんだけどそもそもSDLのDLLを64bitでコンパイルしちゃえばサイズ合う、なんてことはないの?
0708デフォルトの名無しさん2011/04/01(金) 21:34:09.12
言語以前のことで悩んでるとしか
0709デフォルトの名無しさん2011/04/01(金) 21:49:54.34
そもそも64bitなんて必要あるのかから議論をしようか
マーケティングに踊らされていないか
オール電化に似た負のイメージしかない
0710デフォルトの名無しさん2011/04/01(金) 21:53:43.46
いや、その議論は他所でやろうぜ。
0711デフォルトの名無しさん2011/04/01(金) 22:00:23.80
単にメモリが増えるという意味での64bit化は要らんけど、
x86の場合はレジスタ数が増える恩恵のほうがでかいし、各プラットフォームともにここぞとばかりにABIを改良してたりするからなあ

……という話をしようと思えば他所にいくべきですねわかりましたごめんなさい
0712デフォルトの名無しさん2011/04/01(金) 23:02:45.40
>>698
64bit対応のことはよくわからんけど
・SDLのバイナリが64bitで構築されているか?
・ヘッダが64bitのラッパーになっているか?(htodは対応してないはず)
・import libが64bit用で生成されているか?(またOMF変換とか一手間かかるの?)
・Dアプリを64bitで記述・コンパイルしているか?( -m64の部分 )

あとWinでSDL使ったらSDL_ImageだのSDL_mixerだのさらにzlibだの
依存が多くてうんざりしたがそいつらみんな64bitなの? とか
derelictは対応してるの? とか

1つ1つ潰してみては
0713デフォルトの名無しさん2011/04/01(金) 23:06:14.43
いや、ここまで読む限り、単にD版ヘッダーがおかしいだけでしょ
0714デフォルトの名無しさん2011/04/01(金) 23:49:35.03
linuxならいいんだろうけどwinだと64bit版のDLLそろえるのがめんどくさそうだなー
0715デフォルトの名無しさん2011/04/02(土) 00:04:31.05
いや、自分でコンパイルしようとしたら面倒だけど、どっかにあるのを取ってくるならそうでもないだろ。
一応Windowsはバイナリ互換性が保証されてるわけだし。
0716デフォルトの名無しさん2011/04/02(土) 09:54:52.90
当方ubuntu 10.04 64bit。
デフォルトのリポジトリにあったlibsdlを入れてるから、64bit版で間違いはないはず。

で、使ってるDインポートファイルの抜粋↓

align(4)
struct SDL_Surface
{
 Uint32 flags;
 SDL_PixelFormat* format;
 int w, h;
 Uint16 pitch;
 void* pixels;
 int offset;
 private_hwdata* hwdata;
 SDL_Rect clip_rect;
 Uint32 unused1;
 Uint32 locked;
 SDL_BlitMap* map;
 uint format_version;
 int refcount;
}

extern(C) SDL_Surface* SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags);

これをどうすれば
0717デフォルトの名無しさん2011/04/02(土) 10:03:48.10
sage忘れた

if (SDL_Init(SDL_INIT_VIDEO) < 0)
 throw new Error("SDL_Init failed.");
scope(exit) SDL_Quit();

SDL_Surface* screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);
if (screen is null)
 throw new Error("SDL_SetVideoMode failed.");

writeln(screen.fags);// 0
writeln(screen.format);// XXXXXXXXFFFFFFFF ← !!
writeln(screen.w);// 0 ← あー
writeln(screen.h);// 640 ← はいズレたー
0718デフォルトの名無しさん2011/04/02(土) 10:04:22.21
すまんまた忘れた
0719デフォルトの名無しさん2011/04/02(土) 10:08:00.02
ちなみに、Dソース中でscreen.??を呼ばない限りははうまく動く。(ように見える)
0720デフォルトの名無しさん2011/04/02(土) 10:31:22.49
あ!! alignか?
くそー、今試せない
0721デフォルトの名無しさん2011/04/02(土) 11:03:15.36
>>720
たぶんそう
SDLの構造体はVC、CodeWarrior、Borlandだと4Byteアライメントが指定されてるけど他はないっぽい
ubuntuならたぶんGCCだろうからalign(4)だとずれるかもしれない。特に64bit

SDLのヘッダに、「ディスクからロードした時の為に4Byteで揃えてます」みたいに書いてあるけど
これは嘘ってことだな

0722デフォルトの名無しさん2011/04/02(土) 15:16:57.92
まずC/C++ 64bitと、D言語64bit、の双方で
SDL_Surface構造体の各メンバの配置位置とサイズを確認すべきじゃない?
配置位置は、構造体先頭ポインタとメンバのポインタの差から
サイズは、sizeofで
0723 ◆LLLLLLLLL. 2011/04/03(日) 08:53:57.07
| ̄:/ : : /: : : : : : : :i: : : i: :\ : :\    \
|: / : : : / : : : : :.i: : : : |: : : :|: : : |: : : i     '
: :|: : : : |: : i: : : :|: : : /i|: : :|:| : : :|: : : |     |
: :|: : : : |: :.|:斗 十‐/ i|: :∧-‐ト|: : : |     |
: :|: : : : |イ|: :|:/ |:/   |:/ |ハ: : |: : : |  \_,ノ
: :|: : : : | レヤ示ト     rテv|:./|: : : :|
ヽ|: : : : |/{:::::::i }     トイ レ: :|/|/   関東地方 
( |: : : : 代c::ノソ     レリ |: : : : |       東北地方 北海道地方
.〈.|: : : : |x`¨       、¨x.|: : : i:|    にいる
\|i: : : :|        ,   /|: : : i:|      すべての 愛すべき 国民へ 告ぐ
∨リ\: :iト 、      `´ ィ  |: : /|リ      
‐┴―\|- 〈 >rァ 爪|V  |/
:::::::::::::::::::::::ヽ \ リ
::::::::::::::::::::::::__\
:::::::::::::::/ ::r――‐へ      rっr‐-、_
:::::::::/ :://      ∧. | ̄ ̄ ̄| | | | | ̄ ̄ ̄ ̄ ̄ ̄ ̄|
:::/ ::/ /          ヽ|.    L|_|_ト'           |
/ ::::/  /         \   ただちに 逃げろ    |
. :::/ |/           |                 |.........
0724デフォルトの名無しさん2011/04/03(日) 14:09:44.24
根拠はコレ?

ttp://homepage2.nifty.com/h-shioi/Earthquake/Note/ShioiNote.htm
0725デフォルトの名無しさん2011/04/03(日) 16:30:25.07
DのIDEがあるの無いのという話を聞くたびに思う
D2でIDEを作れないことの方が問題だと

でもDFLのforkといいgtkDの復活といい状況よくなってきてるな
0726デフォルトの名無しさん2011/04/03(日) 16:47:29.73
D-IDEは.NETのポートだけじゃなくて全部C++なの?
0727デフォルトの名無しさん2011/04/03(日) 16:47:58.93
VisualDはD製だぜ
0728デフォルトの名無しさん2011/04/03(日) 17:39:48.80
PoseidonはDWTだったか
0729デフォルトの名無しさん2011/04/03(日) 18:13:22.36
むしろDMDと同じくDを使わずにIDEを作るほうが
はるかに楽な気もするが

文字列ミックスインがにくい!
CTFEがにくい!
DMDのよくわからない挙動が(ry
0730デフォルトの名無しさん2011/04/03(日) 18:14:45.21
全部愛しいですけど何か?
0731デフォルトの名無しさん2011/04/03(日) 18:50:00.48
多分 729 はツンデレ
0732デフォルトの名無しさん2011/04/03(日) 18:54:03.98
万能すぎのis文が一等こわい
0733デフォルトの名無しさん2011/04/03(日) 20:54:21.16
D言語でまどかマギカのアクションゲーム作ろうず
0734デフォルトの名無しさん2011/04/03(日) 21:00:16.87
>>733
DXlibでやるならば手伝う。
0735デフォルトの名無しさん2011/04/03(日) 21:03:21.32
絵と音楽を用意してくれるなら手伝う
0736デフォルトの名無しさん2011/04/03(日) 21:10:56.26
手伝い方教えてくれたら手伝う
0737デフォルトの名無しさん2011/04/03(日) 21:17:03.56
ええい早くgithubなりbitbucketなりのリポジトリを作るんだ
0738デフォルトの名無しさん2011/04/03(日) 21:33:27.60
DXlibってDで使えたのか
0739デフォルトの名無しさん2011/04/03(日) 21:35:14.00
dxlib4dってのがある
0740デフォルトの名無しさん2011/04/03(日) 21:38:28.52
なんか新しい流れw
0741デフォルトの名無しさん2011/04/03(日) 21:39:04.12
リポジトリまだか?
俺は本気で手伝うぞ
0742デフォルトの名無しさん2011/04/03(日) 21:42:44.84
まずシステムをどうするかだな・・
0743デフォルトの名無しさん2011/04/03(日) 21:53:12.35
2Dアクションか3Dアクションか。
2Dでいいとも思うけど。
0744デフォルトの名無しさん2011/04/03(日) 22:06:53.75
DXライブラリならニコニコのMMD使えるからフリーで短期決戦ならそっちが良くね?
0745デフォルトの名無しさん2011/04/03(日) 22:09:14.58
そういえばニコニコにも自作ゲームタグってのがあるな
芝が生えるゲームどこ行ってもうたんや…
0746デフォルトの名無しさん2011/04/03(日) 22:13:00.30
システムやジャンルを決める前に、作る側の役割を決めないと。
チームでゲームを作る上でもっとも大切なのはポジショニング。
0747デフォルトの名無しさん2011/04/03(日) 22:17:29.80
まどかマギカなんかほっとこうぜ。
それよりD言語でD言語のマスコットキャラの育成ゲーム作ろうずwww
0748デフォルトの名無しさん2011/04/03(日) 22:18:46.14
特にD使うような奴が、何もかも全部一人で決める魅力を放棄できるとは思えんw
0749デフォルトの名無しさん2011/04/03(日) 22:19:30.49
あんなマスコットを育成するくらいならC++使うほうを選ぶわ
0750デフォルトの名無しさん2011/04/03(日) 22:26:04.15
>>748
あるあ……あるあるwww
0751デフォルトの名無しさん2011/04/03(日) 22:33:01.62
じゃあ間を取って、Dのマスコットキャラのアクションゲームだな。
0752デフォルトの名無しさん2011/04/03(日) 22:41:24.16
Dマスコットアクションに清き一票を
0753デフォルトの名無しさん2011/04/03(日) 23:01:20.66
じゃあFPSでDマスコットが撃たれると
うざいポーズでよけまくるゲームを
0754デフォルトの名無しさん2011/04/03(日) 23:01:27.96
破壊的変甲グレートDのマスコットキャラ
■ このスレッドは過去ログ倉庫に格納されています