トップページ⇒tech
989コメント254KB

D言語 Part22

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/06/22(月) 01:38:41
プログラミング言語 D (D Programming Language) について語るスレッドです。
過去スレ、関連スレは >>2

■前スレ
http://pc12.2ch.net/test/read.cgi/tech/1234363551/

■本家
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/candcpp2d (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の入門講座)
ttp://www.nicovideo.jp/mylist/4453698 (D言語で作られた芝ゲー niconico動画)
ttp://www.asahi-net.or.jp/~cs8k-cyu/ (ABA Games)

■ IDE
ttp://dronten.googlepages.com/dscite (DSciTE)
ttp://forums.codeblocks.org/index.php?board=20.0 (Code::Blocks)
ttp://www.dprogramming.com/entice.php (Entice Designer)
ttp://www.dsource.org/projects/descent (Descent)
ttp://www.dsource.org/projects/poseidon (Poseidon)
0116デフォルトの名無しさん2009/07/05(日) 22:50:49
DWT放置プレイいつ終わるの?
0117デフォルトの名無しさん2009/07/05(日) 23:54:23
>>115
http://dsource.org/projects/tango/browser/branches/experimental/D2.0
0118デフォルトの名無しさん2009/07/06(月) 00:11:31
さっさとD2.0の仕様が固定されないとTangoも2.0に対応しないだろうよ…
branches/experimental/D2.0は何カ月も前からコンパイルできなかったと思うし
0119デフォルトの名無しさん2009/07/06(月) 14:21:27
http://www.digitalmars.com/d/2.0/changelog.html#new2_031
0120デフォルトの名無しさん2009/07/06(月) 15:42:12
case '1': .. case '9':

 ___
/ || ̄ ̄|| ∧_∧
|.....||__|| (     )  どうしてこうなった・・・
| ̄ ̄\三⊂/ ̄ ̄ ̄/
|    | ( ./     /
 ___
/ || ̄ ̄|| ∧_∧
|.....||__|| ( ^ω^ )  どうしてこうなった!?
| ̄ ̄\三⊂/ ̄ ̄ ̄/
|    | ( ./     /

 ___ ♪ ∧__,∧.∩
/ || ̄ ̄|| r( ^ω^ )ノ  どうしてこうなった!
|.....||__|| └‐、   レ´`ヽ   どうしてこうなった!
| ̄ ̄\三  / ̄ ̄ ̄/ノ´` ♪
|    | ( ./     /

 ___        ♪  ∩∧__,∧
/ || ̄ ̄||         _ ヽ( ^ω^ )7  どうしてこうなった!
|.....||__||         /`ヽJ   ,‐┘   どうしてこうなった! 
| ̄ ̄\三  / ̄ ̄ ̄/  ´`ヽ、_  ノ    
|    | ( ./     /      `) ) ♪
0121デフォルトの名無しさん2009/07/06(月) 16:10:31
だからa..bをRangeExpressionとしろとあれほど(ry
んで後ろを含む..=とか、前後の上下をはっきりさせた.<や.<=や.>や.>=を導入すれば良かっただろうに
0122デフォルトの名無しさん2009/07/06(月) 18:48:48
enum!!
0123デフォルトの名無しさん2009/07/06(月) 19:19:46
えーと。
D 2.031
・ルートを\dmdから\dmd2に
・with文でローカルのシンボルと重複すると隠すのでエラー
・final switch(expr)
・case 1: .. case 5:
・暗黙の整数変換で符号ビットが落ちる変換はエラー
・return exp;がないのは警告じゃなくてエラー
・dmdの吐くエラーはstderrに出すように
・フロントエンド高速化のパッチ
・std.algorithm : swapの高速化、あといくつか追加
・std.array : 関数追加
・std.conv : enum値を表示/解析するコードを追加
・std.ctype : isupperとtolowerをpureに
・std.date : benchmarkの返値をuint[]からulong[]に
・std.demangle : switchとcaseの新文法に対応して変更
・std.random : randomSample追加
・std.string : find系をdeprecatedに。starstWith、endsWithを削除
・std.traits : isSomeChar と isPointer追加
・std.typetuple : indexOfをindexOfTypeに。前の名前はaliasで残してdeprecated
・std.utf : エラーメッセージ改善
0124デフォルトの名無しさん2009/07/06(月) 19:33:14
>>123
final switchは「全条件について書く」、defaultなし、CaseRangeなし、enumを受ける場合enum全条件のcase強制、か。

以前に「gotoの行き先のラベルのアドレスが欲しい」という話があったが、
final switchだとほぼ同等のことができるな。defaultがないからほぼO(1)のルーチンに最適化可能のはず。
0125デフォルトの名無しさん2009/07/06(月) 19:56:04
case 1 .. 9:

ではいけない理由がわからないんだけど誰か教えて
0126デフォルトの名無しさん2009/07/06(月) 20:22:45
>>125 それでいいよなあ
何とかしてよドラえもん
0127デフォルトの名無しさん2009/07/06(月) 21:52:19
>>125
case 1 .. 9:
だとスライスの連想から、1<=x<9のような感じがするが、
case 1: .. case 9:
だと、いかにも9を含みそうな感じがする。

という説明がNGでなされている。
0128デフォルトの名無しさん2009/07/06(月) 21:59:01
ちなみにこの構文はandreiの発案。まじきもい
0129デフォルトの名無しさん2009/07/06(月) 22:06:36
ぶっちゃけ、case 1..9: でも、case 1: .. case 9: でも、どうせ使わないからどうでもいいとか言ってみる。
0130デフォルトの名無しさん2009/07/06(月) 22:23:56
>(fainal switchの)The case expressions cannot evaluate to a run time initialized value.
と言うことは、普通の switch 文なら case j: とか…

…できるじゃあないかッ!いつからこんなことが?
0131デフォルトの名無しさん2009/07/06(月) 22:31:32
andreiか
andreiじゃあしょうがないな
0132デフォルトの名無しさん2009/07/06(月) 22:33:08
昨年の4月から
0133デフォルトの名無しさん2009/07/06(月) 22:42:54
>>130
結構前から出来たと想うけど
0134デフォルトの名無しさん2009/07/06(月) 22:44:55
>>124
ラベルのアドレスならcaseの中から直接次のcaseへジャンプするように
書けるから同等ではないかと。それでもO(1) switchはかなりうれしいけど。
0135デフォルトの名無しさん2009/07/06(月) 22:48:06
switch-case-break自体がキモいのをどうにかしてほしかった
fallthroughなんかgoto caseがあればいいじゃないか…
0136デフォルトの名無しさん2009/07/06(月) 23:28:40
>>127
1<=x<=9のような感じを出したいならcase 1..=9:とすりゃいいのに
0137デフォルトの名無しさん2009/07/06(月) 23:33:46
>>135
C言語だとfall throughは結構使われる…が、確かにD言語だとcaseに複数指定可能でgoto caseがあるから無くした方が良い気もするな。
まぁC言語使いが混乱しないようにfall through禁止の上でbreak必須にするという所が現実的な気がする。
0138デフォルトの名無しさん2009/07/06(月) 23:37:08
ngでもugly ugly言われててワロタw
0139デフォルトの名無しさん2009/07/06(月) 23:52:29
もうswitch-caseを捨ててselect-caseを新設しようぜ
fall throughなしでbreakなしにするんだ
select(n){
case 0, 1, 2:
case 3 .. 5: // 3,4
case 5 ... 7: // 5,6,7
default:
}
0140デフォルトの名無しさん2009/07/06(月) 23:58:58
>>139
case is構文の新設ですね、分かります。
0141デフォルトの名無しさん2009/07/07(火) 00:06:56
>>140 どゆこと?
0142デフォルトの名無しさん2009/07/07(火) 00:18:31
>>141
ヒント: http://www.geocities.jp/cbc_vbnet/kisuhen/bunki.html#selectbun
0143デフォルトの名無しさん2009/07/07(火) 02:00:53
>>142 VBはselect-caseなのか
0144デフォルトの名無しさん2009/07/07(火) 03:10:33
case-whenでもcondでもなんでもいい
0145デフォルトの名無しさん2009/07/07(火) 09:50:47
>>139
それでいいよ
0146デフォルトの名無しさん2009/07/07(火) 10:58:26
a..bでbを含まなくてa...bでbを含むってのはどこの言語がもとだっけ?
0147デフォルトの名無しさん2009/07/07(火) 11:01:12
rubyは逆で..で含む、...で含まないだからかなり分かりづらい
0148デフォルトの名無しさん2009/07/07(火) 11:46:31
今から..の意味を変えるのとどっちがわかりにくいかって話だな
0149デフォルトの名無しさん2009/07/07(火) 11:59:12
>>136のがいいんじゃね?
0150デフォルトの名無しさん2009/07/07(火) 12:00:44
...の方がより遠くを指しているように見えるから
a...bでbを含むでいいんじゃね?
別の言語と異なってもいいだろ別に
0151デフォルトの名無しさん2009/07/07(火) 12:03:55
CaseRangeに賛成意見述べてるのって、アンドレイとウォルたんだけなんだけど。
0152デフォルトの名無しさん2009/07/07(火) 12:12:07
>>151 テラカワイソスwww
しかし引かぬ媚びぬ
0153デフォルトの名無しさん2009/07/07(火) 12:20:27
アンドレイ「おまえらはこの構文の美しさがわからんのか。少なくとも俺はuglyとはおもわねえ!」
その他「いや、俺は汚いと思うね」

ウォルター「スライスの..は末尾を含んで、CaseRangeの..は末尾を含まないから、混乱を避けるために全く別の構文にする必要がある」
その他「だから別の演算子導入すればいいって言ってるだろ!」

こういう応酬が延々と繰り広げられてるんだが…
0154デフォルトの名無しさん2009/07/07(火) 12:53:32
さすがにコレは嫌すぎるなあ…w
なので英語圏の皆さんには頑張っていただきたい
0155デフォルトの名無しさん2009/07/07(火) 15:25:36
case '0':
..
case '9':
と複数行にすれば案外いけるかもしれん
0156デフォルトの名無しさん2009/07/07(火) 16:13:55
>>155
お前天才だろ…それならいけるわ。
0157デフォルトの名無しさん2009/07/07(火) 16:24:18
それよりそろそろ見慣れてきた俺ガイル
0158デフォルトの名無しさん2009/07/07(火) 16:42:24
一行に単独で..が現れたときは上下の行で異なっているところを変化させながら反復するマクロにしようぜ!

f!(0);
..
f!(9);

mixin("int a;");
..
mixin("int z;");
0159デフォルトの名無しさん2009/07/07(火) 16:43:37
かっけええええwwwwwwwwww
0160デフォルトの名無しさん2009/07/07(火) 16:45:39
>>158
それなら、mixinとか使わなくて、

int a;
..
int z;

でいいだろ…
0161デフォルトの名無しさん2009/07/07(火) 17:07:17
for文いらねー
writeln(1);
..
writeln(100000);
0162デフォルトの名無しさん2009/07/07(火) 17:09:01
writeln(i+0);
..
writeln(i+100000);
0163デフォルトの名無しさん2009/07/07(火) 17:35:16
goto caseなんかあったのか
0164デフォルトの名無しさん2009/07/08(水) 14:36:38
DMD2系+Eclipse+Descentで使おうと思っています。

googleで調べながら一通りインストールしてサンプルをビルドしようとしたら
「'DMDの起動'に問題が発生しました。Variable references empty selection: ${project_loc}」
というエラーが出てしまいます。

作業ディレクトリーが${project_loc}
引数が${resource_loc} -g
という設定にしているんですが、どうもここがまずそうです。
どういう設定にすればいいのでしょうか?
0165デフォルトの名無しさん2009/07/08(水) 15:23:47
エディター部分にフォーカスが無いとか?
0166デフォルトの名無しさん2009/07/08(水) 17:24:00
>>165
レスthx
プロジェクト・エクスプローラーでtest.dを選択した状態でビルドしたらうまくいきました。

ついでといってはなんですが、
ビルドしたサンプルは
ttp://www.kmonos.net/alang/d/2.0/wc.html
なんですけど、74行目でコンパイルエラーが発生してしまいます(Error: buf[0] isn't mutable)。
サンプルが間違っているんですかね?
0167デフォルトの名無しさん2009/07/08(水) 17:33:57
wcのサンプルってだいぶ古くないか・・・?
更新のたびにいちいち修正されてるのか?それならすごいけど・・・
0168デフォルトの名無しさん2009/07/08(水) 17:56:55
>>167
samplesディレクトリのは更新されてない。たぶんコンパイルとおらんだろう。
ドキュメントに書いてあるのは修正されてる。
0169デフォルトの名無しさん2009/07/08(水) 20:49:35
それはともかく>>166のは
サンプルがD2なのにstringの中身を変更してるだけかな?
0170デフォルトの名無しさん2009/07/08(水) 21:16:59
そこ直したらコンパイルは出来た
bufにstringはない罠
0171デフォルトの名無しさん2009/07/08(水) 21:39:46
>>167-170
thx
古い仕様のコードなんですね。
0172デフォルトの名無しさん2009/07/08(水) 22:46:30
サンプルは一度刷新されたはずだが、何年前だったかな。って世界。
0173デフォルトの名無しさん2009/07/08(水) 23:07:55
お薦めのIDEってなんですか?
0174デフォルトの名無しさん2009/07/09(木) 12:05:31
is(typeof(...)) ってのに新しいキーワード割り当てて欲しいなあ
0175デフォルトの名無しさん2009/07/09(木) 12:42:33
いやーそのままでいいんじゃ
0176デフォルトの名無しさん2009/07/09(木) 16:12:34
is_typo
0177デフォルトの名無しさん2009/07/09(木) 18:48:38
>>173 >>1の好きなの
0178デフォルトの名無しさん2009/07/10(金) 00:09:45
一瞬Code::Blocks使おうとしてみたけどキーワード登録が面倒になってやめた
サクラたんかわいいよサクラたん
0179デフォルトの名無しさん2009/07/10(金) 03:30:29
前スレみる限りエディタ+makeが主流という悲しい現実。
0180デフォルトの名無しさん2009/07/10(金) 03:35:23
DWTで誰か作ってくれるっていう話があったような
0181デフォルトの名無しさん2009/07/10(金) 08:17:22
omake便利っすよ
D.om書かないとダメだけど
0182デフォルトの名無しさん2009/07/10(金) 08:52:31
>>181
D向きだね
うpもなしに(ry
0183デフォルトの名無しさん2009/07/10(金) 23:00:08
>>180
むしろDWTって今誰か開発続けてるの?
0184デフォルトの名無しさん2009/07/11(土) 00:19:12
Poseidonは、DWT使ってるよね。
0185デフォルトの名無しさん2009/07/12(日) 21:33:52
むしろPoseidonって今誰か開発続けてるの?
0186デフォルトの名無しさん2009/07/12(日) 23:16:12
>>185
http://dsource.org/projects/poseidon/browser
0187デフォルトの名無しさん2009/07/13(月) 02:43:48
皆さんの使ってる統合環境って>>1のどれですか?
0188デフォルトの名無しさん2009/07/13(月) 02:50:50
emacs
0189デフォルトの名無しさん2009/07/13(月) 12:08:51
秀丸+ビルド用秀丸マクロ(やねうらおさんのがベース)+bud
0190デフォルトの名無しさん2009/07/13(月) 12:47:23
ポセイドン使ってみたんですがビルドしようとしたら
コンパイラ見つからないと出るのですが

プロジェクト生成時にパスは設定してます
0191デフォルトの名無しさん2009/07/13(月) 12:53:05
標準にシリアライズを支援する物はないですか?
C++のboost::serializationみたいなやつ。
0192デフォルトの名無しさん2009/07/13(月) 13:29:31
そういう便利な物はない。
0193デフォルトの名無しさん2009/07/13(月) 13:31:50
>>192
ないですか。どうもです。
0194デフォルトの名無しさん2009/07/13(月) 13:34:56
秀丸
0195デフォルトの名無しさん2009/07/13(月) 20:12:11
シリアライズ面倒だから全部XMLにしたわ
0196デフォルトの名無しさん2009/07/13(月) 20:37:21
ポセイドンで書いてコマンドでコンパイル・・
>>190と同じくコンパイルができない。
秀丸のファイルタイプ別の設定ファイル探すか書いてみるか
0197デフォルトの名無しさん2009/07/13(月) 22:07:44
phobosにシリアライズみたいなのなかったっけ?
0198デフォルトの名無しさん2009/07/13(月) 23:39:19
Ver1.030から1.046にかけてdmdディレクトリの構成変わってるのなんでですか?
0199デフォルトの名無しさん2009/07/13(月) 23:40:16
OSごとにバイナリとか分けたかった時期か?
0200デフォルトの名無しさん2009/07/14(火) 00:07:14
>>198
macとかfreebsdとかサポートするため。
0201デフォルトの名無しさん2009/07/14(火) 01:30:41
>>197
std.outbufferだな
0202デフォルトの名無しさん2009/07/14(火) 01:40:49
>>201 std.outbufferは割と便利

テキスト形式で書き出すならstd.file.slurp()が読み込みに使えそう
シリアライズってバイナリ限定だっけ?
0203デフォルトの名無しさん2009/07/14(火) 07:18:36
Dって依存関係吐いてくれるオプションないの?gcc -MMみたいな
0204デフォルトの名無しさん2009/07/14(火) 07:26:38
-v
0205デフォルトの名無しさん2009/07/14(火) 07:44:16
うおおありがとう
0206デフォルトの名無しさん2009/07/14(火) 16:44:45
64ビットの実装はいつ出るのかねぇ?
待ちきれなくてgdcに2.031移植しようとしたが挫折したorz
0207デフォルトの名無しさん2009/07/14(火) 18:05:45
シリアライズはstd.outbufferがあるのに、デシリアライズはなんで何もないんですか?
0208デフォルトの名無しさん2009/07/14(火) 18:17:51
昔はstd.inbufferがあった気がするんだけど思い違い?
0209デフォルトの名無しさん2009/07/14(火) 19:03:37
>>208
>>1の本家には載ってないです。
googleで検索したら
ttp://f17.aaa.livedoor.jp/~labamba/?std.outbuffer
> バイト順(エンディアン)を指定する場合は、OutBuffer? の派生クラスを使ってください。逆のbyteの配列からデータに復元するには InBuffer? を使います。
と出てきたものの、これ以外に書かれていないです。
一体どういうことなのでしょう・・・。
0210デフォルトの名無しさん2009/07/14(火) 20:54:19
import std.typecons;

interface It {}

class A {
 Rebindable!(const(It)) ireb; // ItがObjectじゃないためNG
 Rebindable!(const(A)) reb;
 const const(A) get() {
  return reb.opDot; // RebindableのopDotがconstじゃないためNG
 }
 Rebindable!(const(A))[string] assoc;
 void put(const(A) a) {
  // opAssignが呼ばれてしまい実行時エラー
  assoc["test"] = a;
 }
}

('A`) ウボァー
0211デフォルトの名無しさん2009/07/14(火) 21:27:38
最近のDはだらしねえな
0212デフォルトの名無しさん2009/07/14(火) 21:28:35
昔からphobosはこんな感じだよ
0213デフォルトの名無しさん2009/07/14(火) 22:04:06
Rebindableにgetなる無意味なaliasがあるんだけど
たぶんこれpublicにしたかったんだな
0214デフォルトの名無しさん2009/07/15(水) 00:46:08
std.outbufferとstd.inbufferを足してstd.serializeってのを作ったらどうだ
0215デフォルトの名無しさん2009/07/15(水) 07:45:33
2になった途端1時代のソースがことごとくコンパイルできない

この互換のなさ酷すぎ。。。
■ このスレッドは過去ログ倉庫に格納されています