D言語 Part14

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
プログラミング言語 D について語るスレッドです。
過去スレは >>2

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

■コンパイラ
ttp://www.digitalmars.com/d/dcompiler.html (DMD, 本家)
ttp://dgcc.sourceforge.net/ (GDC, gccフロントエンド)
ttp://gdcmac.sourceforge.net/ (GDCのmac用バイナリ)

■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://dsource.org/ (dsource)
ttp://www.sun-inet.or.jp/~yaneurao/dlang/
ttp://wisdom.sakura.ne.jp/programming/d/
2デフォルトの名無しさん:2007/07/19(木) 10:12:05
3デフォルトの名無しさん:2007/07/19(木) 10:12:45
関連スレ

D言語なら俺に聞け
http://pc11.2ch.net/test/read.cgi/tech/1108172110/

D言語を広めるスレ
http://pc11.2ch.net/test/read.cgi/tech/1175432606/

D言語は多分コケると思っている人の数→
http://pc11.2ch.net/test/read.cgi/tech/1136288019/

【次世代言語】D言語でOSを作ろう【Monaの移植?】
http://pc11.2ch.net/test/read.cgi/tech/1128794438/

バイナリをゲロる言語の魅力って何?
http://pc11.2ch.net/test/read.cgi/tech/1160869311/

その他リンク
【Java/C/PHP/Perl/Ruby/Python/TeX】Eclipse M22
http://pc11.2ch.net/test/read.cgi/tech/1168166588/

eclipseってそんなに良いか?【エクリプス】
http://pc11.2ch.net/test/read.cgi/tech/1099300344/

統合開発環境Eclipseプラグイン開発QA
http://pc11.2ch.net/test/read.cgi/tech/1081517094/

"Code of the Nerds" Digital Mars C/C++
http://pc11.2ch.net/test/read.cgi/tech/1044210976/
4デフォルトの名無しさん:2007/07/19(木) 10:13:48
5デフォルトの名無しさん:2007/07/19(木) 11:57:14
超乙
6デフォルトの名無しさん:2007/07/19(木) 13:10:40
(tyou >> 1).otu();
7デフォルトの名無しさん:2007/07/19(木) 13:13:56
日本語使えたなそういえば

(超>>1)乙;
8デフォルトの名無しさん:2007/07/19(木) 13:14:36
ドット抜けた/(^o^)\
9デフォルトの名無しさん:2007/07/19(木) 13:17:37
乙 ~= cast(void*)1;
10デフォルトの名無しさん:2007/07/19(木) 13:23:38
int いちおつ;

いちおつ;

^^
11デフォルトの名無しさん:2007/07/19(木) 13:29:03
>>10
副作用のない式文は不正じゃね
12デフォルトの名無しさん:2007/07/19(木) 13:37:21
\ ^o^ /;
13デフォルトの名無しさん:2007/07/19(木) 16:11:00
オブジェクト初期化構文使えるようにならんかなあ。

var foo = new Class { bar = 1, baz = 2 };
14デフォルトの名無しさん:2007/07/19(木) 16:37:47
そういうような使い方はclassじゃなくてstructでやるべきなんじゃないかと思う。
構造体リテラルがそういうようなのをサポートしてくれたらいいんだけどね。
15デフォルトの名無しさん:2007/07/19(木) 16:57:46
struct X { int a; int b; int c; int d = 7;}
static X x = { a:1, b:2}; // c は 0, d は 7
16デフォルトの名無しさん:2007/07/19(木) 16:58:47
イニシャライザは代用にならんだろ。
17デフォルトの名無しさん:2007/07/19(木) 18:11:58
これって国内で実際にビジネスに使われたことある?
言語の使われるか否かは、その仕様よりIDEって印象があるので気になる。
18デフォルトの名無しさん:2007/07/19(木) 18:15:52
あるわけがない。
19デフォルトの名無しさん:2007/07/19(木) 18:18:32
>>4
リンク集つくるなら、タイトルぐらい書け('A`)
20デフォルトの名無しさん:2007/07/19(木) 18:25:10
自分でやれよ
21デフォルトの名無しさん:2007/07/19(木) 18:36:17
>>17-18

なにげに使ってる
22デフォルトの名無しさん:2007/07/19(木) 18:37:51
すいません質問です
std.file.getAttributes の戻り値の意味はどこかに書いてありますか?
23デフォルトの名無しさん:2007/07/19(木) 18:45:38
Linuxならman statでst_modeの説明のところ。
WindowsならMSDNのGetFileAttributesのところ。
24デフォルトの名無しさん:2007/07/19(木) 18:56:48
>>23
ありがとうございます!
25デフォルトの名無しさん:2007/07/19(木) 19:22:51
>>16
正直言うと、12が何に使うものなのか分からんかった。
無名構造体みたいなものだろうか
26デフォルトの名無しさん:2007/07/19(木) 19:24:51
オブジェクトのリテラルみたいなもんだろう。
newと同時にプロパティを設定することができる。
C#3.0にあるらしい。
27デフォルトの名無しさん:2007/07/19(木) 21:25:29
25で言いたかったのは12じゃなくて13だった。

>>26
auto x = new class("foo", 3, "bar"){
char[] a; int n; char[] s;
this(...){
foreach(int i, v; this.tupleof){
this.tupleof[i] = va_arg!(typeof(v))(_argptr);
}
}
};
という感じのを、プロパティ名も指定可能にしたようなもの?
28デフォルトの名無しさん:2007/07/19(木) 21:34:35
C#の、
 var foo = new Class { bar = 1, baz = 2 };
は、Dだと
 Class __tmp = new Class;
 with(__tmp) { bar = 1; baz = 2 }
 auto foo = __tmp;
と等価。

>>27と等価なのはC#だと、
 var x = new { a = "foo", n = 3, s = "bar" };
だね。同じ型・名前のプロパティを同じ順番で並べた匿名型は同じ型になるという優れもの。
29デフォルトの名無しさん:2007/07/19(木) 21:46:16
先に前スレ埋めようぜ。
30デフォルトの名無しさん:2007/07/19(木) 22:22:29
980を超えたスレは一定期間で勝手に落ちるよ。
なんか不都合あったっけ?
31デフォルトの名無しさん:2007/07/19(木) 22:24:29
ないな
32デフォルトの名無しさん:2007/07/19(木) 22:37:49
DMDなら不具合だらけですが><
33デフォルトの名無しさん:2007/07/20(金) 05:11:44
無名クラスってマイナーなのか、DIとかってこのスレ住人にはあまり普及してない?
34デフォルトの名無しさん:2007/07/20(金) 06:08:17
Dに無名クラスがありませんから

DIってなに?
35デフォルトの名無しさん:2007/07/20(金) 06:09:13
dependency injection でしょ。>>33 は誤爆じゃないの?
36デフォルトの名無しさん:2007/07/20(金) 06:11:00
うおレスはえー
>>13が無名クラスでは
37デフォルトの名無しさん:2007/07/20(金) 07:10:21
ネットからD言語のコンパイラをダウンロードして解凍して環境変数にpathを通すバッチファイルです
あったら楽しいなと思って趣味で作ったので、何か改良の余地があれば行ってください。

Installer of D Compilor for win2000/XP
http://2sen.dip.jp:81/cgi-bin/upgun/up1/source/up6740.lzh
38デフォルトの名無しさん:2007/07/20(金) 11:43:18
>>36
Dにも無名クラス自体はあるからなあ。
auto x = new class{
/*クラス定義*/
};
39デフォルトの名無しさん:2007/07/20(金) 13:30:30
>>37
既存のsc.iniを残す機能が欲しいような
40デフォルトの名無しさん:2007/07/20(金) 13:44:07
Dの無名クラスマイナーだNE!( ^ω^)
41デフォルトの名無しさん:2007/07/20(金) 16:14:57
俺はマイナー好き
42デフォルトの名無しさん:2007/07/20(金) 16:32:28
メジャー好きがここにいる時点でおかしいだろ
43デフォルトの名無しさん:2007/07/20(金) 16:48:22
Java の無名クラスみたいに基底を指定することはできないの?
44デフォルトの名無しさん:2007/07/20(金) 16:53:35
できるよ。マニュアル読んできな。
45デフォルトの名無しさん:2007/07/21(土) 01:49:16
(new Otsu()).res(1);

前スレ>>1000
そうだといいな・・・
46デフォルトの名無しさん:2007/07/21(土) 02:03:50
>>45 いやちょっと待て
世界が沈むとかどう考えても不吉な表現すぐるだろ
47デフォルトの名無しさん:2007/07/21(土) 04:58:15
キン肉すぐる
48デフォルトの名無しさん:2007/07/21(土) 11:39:10
>>46
そうか?
49デフォルトの名無しさん:2007/07/21(土) 14:09:27
そりゃだって世界を支えるあるいは盛り上げてゆくためのツールだろ
沈めてどうするんだよw
50デフォルトの名無しさん:2007/07/21(土) 15:07:31
今更な話だけど、>>45みたいにnew Otsu()をカッコで括らないと
すぐにメンバにアクセス出来ないのは少しだけメンドイなぁ、と思う。
Javaだと不要だから余計……。C++とかC#じゃどうだっけ。
51デフォルトの名無しさん:2007/07/21(土) 15:18:48
Javascriptも括弧でくくる必要ある。C++とC#も同じだったはず。
個人的にはOtsu.new()ってすべきだと思うけど、new() Otsu()が表現できなくなるしなぁ。
52デフォルトの名無しさん:2007/07/21(土) 15:21:01
ありゃ、
>Javascriptも括弧でくくる必要ある。
は勘違いだったっぽ。スレ汚しスマソ。
53デフォルトの名無しさん:2007/07/21(土) 15:32:03
>>50
C#は new Class().Memberでいけたと思う。
でも、視覚的に気持ち悪いから括弧つけてる。
54デフォルトの名無しさん:2007/07/21(土) 16:02:02
class X{
int a = 3;
static X opCall(){
return new X;
}
}
void main(){
printf("%d\n", X().a);
}

これなら外側の括弧どころかnewもいらないよ!
55デフォルトの名無しさん:2007/07/21(土) 16:32:55
CTFE時にassert(0);が無視されるのはバグ? (DMDv2.002)
56デフォルトの名無しさん:2007/07/21(土) 20:01:49
http://www.kmonos.net/alang/d/expression.html
> コンパイラーはassert式を全く評価しないことも許されています。
> コンパイラは、最適化やコード生成の段階で、 実行がassert(0)
> の部分には到達しないことを仮定してよいものとします。
だとさ。

でもこっちではassertに引っかかるコードで
> Error: assert(0) failed
> Error: cannot evaluate f() at compile time
って言われた。2.002。
57デフォルトの名無しさん:2007/07/22(日) 18:04:15
更新こないね
修正箇所、機能追加箇所ともに期待が
たかまってしまう
5850:2007/07/22(日) 19:37:55
>>51-54
どもども。
俺もOtsu.new()としたい派でつ。出来ればnew()以外の名前にも出来れば最高ネ。

> new() Otsu()が表現できなくなるしなぁ。
これ何のことだか全然知らないのだけど、どういう意味でしょか?
俺、なんか言語仕様見逃してる?
59デフォルトの名無しさん:2007/07/22(日) 19:43:52
 new(/*アロケータの引数*/) Otsu(/*コンストラクタの引数*/)
という構文だから、
 Otsu.new(/*コンストラクタの引数*/)
とやっちゃうと、アロケータの引数は指定できなくなっちゃう、という話だと思う。
6058:2007/07/22(日) 19:47:46
>>58に自己レス。自己解決しました。スレ汚しすいません。

アロケータに引数なんて渡せたのね……不勉強ですた。
なるほどそう簡単にはstaticメソッドと同じ呼び出し構文に出来ないわけだ。
6158:2007/07/22(日) 19:51:46
なんというリロードしろ俺。
>>59 ありがとです。まさにその話でした。
62デフォルトの名無しさん:2007/07/22(日) 19:54:27
>俺もOtsu.new()としたい派でつ。出来ればnew()以外の名前にも出来れば最高ネ。

勝手にそう定義すればいいんじゃないの?
63デフォルトの名無しさん:2007/07/22(日) 20:12:31
>>59
>Otsu.new(/*コンストラクタの引数*/)
>とやっちゃうと、アロケータの引数は指定できなくなっちゃう、という話だと思う。

個人的には ObjC 風に Otsu.alloc(argForAllocator).init(argForConstructor);
にすれば良いと思うのだけど。
64デフォルトの名無しさん:2007/07/22(日) 20:15:50
それは、変な中間オブジェクトができるから好きじゃないなあ。
65デフォルトの名無しさん:2007/07/22(日) 20:23:30
じゃあ Otsu.newWithCustomeAllocator(argAlloc, ArgConst) ならみんな納得なのかな。
66デフォルトの名無しさん:2007/07/22(日) 20:25:16
Otsu.new!!(argAlloc)(argCtor)
でいいよ。
6765:2007/07/22(日) 20:25:48
名前が長いと typo するな...
そこら辺は Omni Complete で
68デフォルトの名無しさん:2007/07/22(日) 20:30:07
カスタムアロケータを使うケースがそんなにあるとは思えない。
明示的にnew(allocator) Obj(construction);
とすればいいだけじゃね?

でなけりゃ、ファクトリクラスを作るとか。
69デフォルトの名無しさん:2007/07/22(日) 20:40:13
これ何の話してんの
70デフォルトの名無しさん:2007/07/22(日) 20:42:16
あまり無いケースの為に特殊な構文を付け加えるのもなんだかなあ…
71デフォルトの名無しさん:2007/07/22(日) 22:11:44
>>50,53
そういうとき、
 class C{ static class C_{ int n=3-1; } }
 void main(){ printf("%d\n", (new C.C_).n); }
とかしたいときどうなるの?
new (C.C_).n とかいう感じ?
72デフォルトの名無しさん:2007/07/22(日) 22:16:27
C#はnew C()の()の省略が認められてない。
Javaは白根。
73デフォルトの名無しさん:2007/07/23(月) 03:27:23
DMD 1.019
74デフォルトの名無しさん:2007/07/23(月) 07:28:49
What's New for D 1.019
Jul 21, 2007
New/Changed Features
Added 0x78 Codeview extension for type dchar.
Added extern (System)
Bugzilla 345: updated std.uni.isUniAlpha to Unicode 5.0.0


System?
75デフォルトの名無しさん:2007/07/23(月) 07:42:58
> System is the same as Windows on Windows platforms,
> and C on other platforms.
'System'はWindowsプラットフォームでは'Windows'と同じであり、
それ以外では'C'と同じです。

要するにプラットフォーム依存のLinkageを指定できるってことだな。
76デフォルトの名無しさん:2007/07/23(月) 09:09:04
What's New for D 2.003
Jul 21, 2007
New/Changed Features

* Added 0x78 Codeview extension for type dchar.
* Moved next member from Object.Error to Object.Exception
* Added ForeachRangeStatement
* . Added extern (System)
* Added std.traits
* Bugzilla 345: updated std.uni.isUniAlpha to Unicode 5.0.0
77デフォルトの名無しさん:2007/07/23(月) 11:40:01
大きいのか小さいのか微妙な変化だな…
個人的には __traits よりも、デバッグ時に関数の隠し引数にでも _caller とか入れてくれたらと思う。
78デフォルトの名無しさん:2007/07/23(月) 11:48:57
ええい、たった今初めてversion2系をちょっと試してみて速攻1系に戻したところだというのにw

しかし何だろう、このforeach周りの不自然な強力さは。
RangeクラスとRangeリテラルを作ろうとは思わなかったんだろうか。
あと範囲を表す関係の演算子って最後を含むか含まないかで".."と"..."あたり二つ用意しないとどことなくメンドイのよね。

traitsはメタプログラミング関係か?
79デフォルトの名無しさん:2007/07/23(月) 12:09:07
これは強力・・なのか?
80デフォルトの名無しさん:2007/07/23(月) 12:44:30
>>77
debugブロック?内でしか使えないとか
81デフォルトの名無しさん:2007/07/23(月) 15:59:38
ForeachRangeキタ━━━━━━(゚∀゚)━━━━━━ !!!!!

これを待ってたんだよ。ウォルタたん大好き!
82デフォルトの名無しさん:2007/07/23(月) 16:23:34
perlは、
for (0..3){print $_;}
0123なんだけど

D 2.003 だと
foreach (i; 0 .. 3){writef(i);}
012なのね
83デフォルトの名無しさん:2007/07/23(月) 16:28:12
それは配列のスライスと一緒だな。
8477:2007/07/23(月) 17:23:02
>>80

import std.stdio;
struct Caller{ string fileName; int line; }
debug void func(Caller _caller, int x){
writefln("%s(%d) : x = %d", _caller.fileName, _caller.line, x);
writefln(x);
}
else void func(int x){ writefln(x); }
void main(){
debug func(Caller(__FILE__, __LINE__), 10);
else func(10);
}

こういうようなのを、

import std.stdio;
void func(int x){
debug writefln("%s(%d) : x = %d", _caller.fileName, _caller.line, x);
return x;
}
void main(){
func(10);
}

っていう風に書けたらいいなって思って。
これでは省いたけど、モジュール名とか呼び出し元の関数名とかモジュール名とか
呼び出し元の関数の_callerとかもあるとさらにいいかも?
長文で申し訳ない。
85デフォルトの名無しさん:2007/07/23(月) 17:34:10
flectionedとか
8677:2007/07/23(月) 18:24:49
flectionedって、そこまで詳細な情報って得られるの?
呼び出し元のファイル名の取り出し方とか。
軽く見聞きした程度だからどこまでできるかよくわかってないのだけど…
でもまぁ、とりあえず標準でそういう機能がほしいところですね…
87デフォルトの名無しさん:2007/07/23(月) 18:47:15
>>66
// Otsu.new!!(argAlloc)(argCtor)
class Otsu{
template New_(aA...){
static typeof(this) New_(TaC...)(TaC aC){
return new(aA) typeof(this)(aC);
}
}
template New(aA...){
alias New_!(aA) New;
}
int n;
this(int n){ this.n = n; }
}
//任意のクラスに対応できる版
template niw_(T,aA...){
T niw_(TaC...)(TaC aC){
return new(aA) T(aC);
}
}
template niw(T, aA...){
alias niw_!(T,aA) niw;
}
void main(){
printf("%d\n", Otsu.New!()(3).n);
printf("%d\n", niw!(Otsu)(5).n);
}

とかどうだろう
88デフォルトの名無しさん:2007/07/23(月) 20:05:49
ヲルターは日曜日にDつくってんのかな
89デフォルトの名無しさん:2007/07/23(月) 20:56:51
__traitsのallMembersやgetMemberは列挙体にも対応してるのか。
願って止まなかった機能追加キタコレ。
90デフォルトの名無しさん:2007/07/23(月) 21:20:17
なんで 1.x にはForeachRangeStatementが追加されていないんだああああああああああああああああああああああああ
91デフォルトの名無しさん:2007/07/23(月) 21:25:45
あわてるな これはヲルターの罠だ
92デフォルトの名無しさん:2007/07/23(月) 23:41:47
更新まだー
93デフォルトの名無しさん:2007/07/24(火) 08:27:24
>>87
ほおお
94デフォルトの名無しさん:2007/07/24(火) 15:06:03
>>39
sc.iniが分からないから
どうやればいいか分からないですけど

前回のはプロクシの部分で不味かったみたいなので修正

http://sakuratan.ddo.jp/uploader/source/date45550.lzh

@プロクシの有無
A@が有ならプロクシ接続先の入力
B環境変数の登録
のみ確認します
95デフォルトの名無しさん:2007/07/24(火) 15:12:51
まぁこんなの全然必要無いですけどね…
96デフォルトの名無しさん:2007/07/24(火) 16:41:26
やっとForeachRangeStatementきたか。

.. 演算子でタプルを作れたら面白そう。

void f(int[] a ...);
f(0 .. 2); // == f(0, 1)
auto x = [3 .. 6]; // == [3, 4, 5]


あんまり使い道なさそうだけど
97デフォルトの名無しさん:2007/07/24(火) 17:15:44
>>96
template t(T...){ alias T t; }
template range(int s, int e){
static if(s<e){ alias t!(s, range!(s+1,e)) range; }
else{ alias t!() range; }
}
import std.stdio;
void main(){
writefln((int x,int y){return x+y;}(range!(0,2))); // 1
writefln([range!(3,6)]); // [3,4,5]
}

とかテンプレートで
98デフォルトの名無しさん:2007/07/24(火) 22:09:18
['a' .. 'z'] とかなら使いようもあるかも。
99デフォルトの名無しさん:2007/07/24(火) 22:10:02
と思ったが、['a' .. 'z' + 1] か。汚いな。
100デフォルトの名無しさん:2007/07/24(火) 22:24:32
Ruby みたいに .. と ... の使い分けがあれば
101デフォルトの名無しさん:2007/07/24(火) 22:50:18
しかし今更 .. が末尾を含むことにされても困る
102デフォルトの名無しさん:2007/07/24(火) 23:12:39
+1でよくねwww
103デフォルトの名無しさん:2007/07/24(火) 23:15:32
どっちかというと使い分けするほうが俺的にはめんどい
だいたい..と...とか似すぎで読み違え頻発wwするかは知らないけど
104デフォルトの名無しさん:2007/07/25(水) 00:28:16
いまどきキーワードで色分け出来ないエディタを使ってる人は
なかなかいないだろうから .. と ... で色を変えりゃいい

そういう問題でもないか
105デフォルトの名無しさん:2007/07/25(水) 01:24:54
直感的に反するだろうね
106デフォルトの名無しさん:2007/07/25(水) 02:28:42
=== がなくなって is になったときって
間違いやすいから変わったのかな

rubyで .. と ... が使われているなら
使い勝手はどうかリサーチしてみればいいんじゃね
107デフォルトの名無しさん:2007/07/25(水) 06:23:46
VSPluginD アップデートしてくれないかなぁ
108デフォルトの名無しさん:2007/07/25(水) 06:25:00
What's New for D 1.020
Jul 23, 2007
New/Changed Features
Bugs Fixed
Fixed extern (System)
109デフォルトの名無しさん:2007/07/25(水) 07:52:30
久々にみてみたら、更新に古いバグジラ番号のFixが結構多い気がする
これはそろそろか・・・?
110デフォルトの名無しさん:2007/07/25(水) 13:33:03
>>106
ruby 使ってるけど .. と ... でどっちが末尾含むのか毎回混乱してる.
111デフォルトの名無しさん:2007/07/25(水) 14:22:20
>>110
.が、一つ多いのだから
含むと覚えればよい
112デフォルトの名無しさん:2007/07/25(水) 16:10:00
... は含まない方だよ。
113デフォルトの名無しさん:2007/07/25(水) 16:47:02
>>110-112
おいもう結論が出たのか
と思ったがDは>>111の考えでおkというだけだな
114デフォルトの名無しさん:2007/07/25(水) 16:51:03
余計どっちがどっちかわかんなくなるがなw
115デフォルトの名無しさん:2007/07/25(水) 17:12:02
$[a,b) とかいう表記でもあればなあ。
116デフォルトの名無しさん:2007/07/25(水) 17:31:57
Unicode使って含む表記を a〜b にするとか
117デフォルトの名無しさん:2007/07/25(水) 18:42:39
1 to 5 とか。
予約語を増やす方向には行かなさそうだけど・・・
(というか、toは変数名に多く使われてそうだから余計可能性ないか)
118デフォルトの名無しさん:2007/07/25(水) 19:31:09
3項演算子 in.. の追加まだー

if(n in 2..4) writefln(n);
119デフォルトの名無しさん:2007/07/25(水) 19:39:14
between演算子か。

クエリ言語でしか見たことないけど、
assert(index in 0 .. array.length);
とか書ければ便利そうだな。
120デフォルトの名無しさん:2007/07/25(水) 20:03:29
前から if (2 <= x < 4) とか書きたかったんだよ
121デフォルトの名無しさん:2007/07/25(水) 20:17:05
python キタ━━━━━━(゚∀゚)━━━━━━ !!!!
122デフォルトの名無しさん:2007/07/25(水) 23:17:54
ICFPの国際プログラミング・コンテストで日本のチーム「kuma-」が2位に

>プログラミング言語としてはRuby,C,C++,D,Java,Perlを使用した。

Dが国際プログラミングコンテストの日本人チームで使われたとか。
メジャーになった…のか?
123デフォルトの名無しさん:2007/07/25(水) 23:35:25
検索してみたらそれ去年の記事ジャマイカ
今年のコンテストが終わったばかりだからややこしい

それはそれとして去年のkuma-はk.inaba氏含めたチームなんだから
メジャーになったと言われてもちょっと納得できない罠
124デフォルトの名無しさん:2007/07/25(水) 23:39:56
今年はk.inaba氏とshinh氏しか使ってないに100ガバス
125デフォルトの名無しさん:2007/07/25(水) 23:45:13
今年はrope(C++)とHaskelあたりが主力だったのかね
Dは残念でした
126デフォルトの名無しさん:2007/07/26(木) 09:40:49
>>118
Rangeクラス化で二項を推すぜー

class Range(ValueType : Comparable){
  ValueType min, max;
  bool opIn_r(ValueType lhs){ return (min <= value) && (value < max); }
}

if(n in 2..4) writefln(n);
127デフォルトの名無しさん:2007/07/26(木) 12:15:42
phobosを使って作ったアプリを配布するときはソースを公開すべき?
phobosのライセンスはZlibライセンスに似ていますが、GPLとは
書いてないし、LGPLと解釈すれば自分で書いたソースは公開しなくても
よいような気がする
128デフォルトの名無しさん:2007/07/26(木) 12:49:20
>>127
>公開
そんなことないでしょ
129デフォルトの名無しさん:2007/07/26(木) 18:05:22
>>126
なんか最適化を阻害しそうじゃね?

(x in a .. b) が
(x >= a && x < b) や
(x.opCmp(a) >= 0 && x.opCmp(b) < 0)
と見なされれば十分だと思う。
130デフォルトの名無しさん:2007/07/27(金) 17:48:45
みんなデバッグどうしてるの?
flectioned 使えば落ちたときのスタックトレースを見ることはできるけど

ブレークポイント設定してステップ実行とかしたいのに
windbg は不安定すぎて使い物にならないんだけど・・・
131デフォルトの名無しさん:2007/07/27(金) 17:57:13
>>130
俺はwindbgでそんなに困ったことなかった…
ddbgはどう?使ったことないけど
132デフォルトの名無しさん:2007/07/27(金) 18:38:41
>>130
参考にならないかもしれないけど、俺はVC++2003使ってる。
これだけで、ステップ実行、落ちたときの呼び出し履歴、リソースエディタと、
今のDに足りないものが補えてる。
133デフォルトの名無しさん:2007/07/27(金) 18:49:35
>>131
thx ddbgというのもあるんだね 今度試してみるよ

VS2005でうまくいけば一番いいんだけども
_Dmainに関数ブレイクポイントを設定して頭からステップ実行するしかできてなくて不便

行ブレイクポイントを設定しても「このドキュメントのシンボルが読込まれていません。」と表示されて
ブレークポイントが無効化されてしまう
これは設定でなんとかなるのかな?
134デフォルトの名無しさん:2007/07/27(金) 21:27:04
コンパイラに-opがあるのをつけてみたらどうかな

あとasm{int 3;}がブレイクポイントになる。
過去スレにあった
135デフォルトの名無しさん:2007/07/27(金) 23:02:56
>>132
VS がシンボル情報を認識できているってこと?
どうやるんだろう

>>134
-op をやるだけではダメだった
シンボル情報がないから対応するソースを表示できないって怒られた
asm はちゃんとブレークポイントになったよ
136デフォルトの名無しさん:2007/07/27(金) 23:12:44
_Dmain に関数ブレークポイントを設定したらうまくソースとの対応を認識してくれるので
map ファイルに出てくる他のシンボル名で関数ブレークポイントを設定したらどの関数でもうまくいった
VS に map ファイルの内容をシンボル情報として使ってもらう方法をどなたかご存じないですか?
137デフォルトの名無しさん:2007/07/28(土) 00:53:33
やっぱりリンカが PDB ファイルを出力してくれないと
VS ではどうしようもない気がしてきたんですが・・・ orz
オブジェクトファイルの形式が違うからなあ・・・
138デフォルトの名無しさん:2007/07/28(土) 03:31:24
何度も書き込んですまん
ddbg 試してみたけど出力に多バイト文字含んでると落ちるね
ddbg を実行するディレクトリ名とか・・・

ddbg は Code::Blocks をフロントエンドとして動作できるらしいからそっちに期待してみる
前スレの人は失敗に終わったようだが・・・
139デフォルトの名無しさん:2007/07/28(土) 19:34:22
enum Foo : ushort
{ HAGE = 11, HIGE = 22, HUGE = 33, HOGE = 999, }

template Bar(T)
{ const char[] Bar = T.stringof; }

void main()
{
   /* ちゃんとHAGE HIGE HUGE HOGEが表示される */
   foreach (str; __traits(allMembers, Foo))
   {
      printf("%.*s\n", str);
   }

   Foo foo;
   printf("%.*s\n", Foo.stringof); //"ushort"が表示される
   printf("%.*s\n", (Foo).stringof); //"ushort"が表示される
   printf("%.*s\n", foo.stringof); //"ushort"が表示される
   printf("%.*s\n", Bar!(Foo)); //"ushort"が表示される
}


どうすればFooという型から(コンパイル時評価可能な)文字列"Foo"を取得できるんだ?
140デフォルトの名無しさん:2007/07/28(土) 19:59:14
コンパイラのバグくさい気がするのでテケトーに回避策を試した結果。

template Bar(T)
{invariant Bar = (T[]).stringof[0..$-2]; }

でOK
141デフォルトの名無しさん:2007/07/28(土) 20:17:53
>>140
素敵な回避策だ。
トンクス!
142デフォルトの名無しさん:2007/07/28(土) 21:45:04
            ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ <こいつ最高にアホ
 彡、   |∪|  /
/ __  ヽノ /
(___)   /
   ∩___∩
   | ノ      ヽ !
  /  ●   ● |   こいつも最高にアホ
  |    ( _●_)  ミ
 彡、   |∪|   / .\
/ __  ヽノ / \ ...\
(___)   /   .│ ..│
            /  ヽ
            l..lUUU
            .U
143デフォルトの名無しさん:2007/07/28(土) 23:02:35
うけけめけ
144名無しさん@そうだ選挙に行こう:2007/07/29(日) 15:24:36
ばーじょんあっぷまだー?
145名無しさん@そうだ選挙に行こう:2007/07/29(日) 18:26:52
>>129
考えてみたけど、インライン化やメンバをfinalにする、Rangeオブジェクトをスタックに置く等が行われれば、
案外いい感じに最適化されるんじゃなかろーかという気がした。
あとRangeクラスはあると実際便利なので、標準で入ってて欲しいなーという願望もあったり。

パフォーマンスを気にしてクラス作るのを敬遠しちゃって、
コードの可読性とかで大きく損をしてるケースを沢山見るのよねぇ。かなり歯がゆい気分になる。
D言語には是非とも、クラス化のリスクを徹底的に減らすような最適化を推進してもらいたいデス。

ところでForeachRangeStatementの箇所がまだ翻訳されてないんで自信無いけど、
Rangeとして書けるのは整数だけ?
いくつかの演算子が適用できればオブジェクトでも行けるようにも読める気がするけど。
146名無しさん@そうだ選挙に行こう:2007/07/29(日) 18:30:25
>>145
イテレータにも使えるとWalter氏が言ってたような…
147名無しさん@そうだ選挙に行こう:2007/07/29(日) 18:45:36
>>145
ForeachRangeStatementは今のところスカラーな数値(整数/実数/虚数)だけ。
ただ、構造体/クラスに対応する考えはあるみたい。

news://news.digitalmars.com:119/[email protected]
148デフォルトの名無しさん:2007/07/29(日) 22:10:51
void main() {
int[5] a;
foreach(p; &a[0] .. &a[$-1])
writefln(p);
}

ポインタ型にも適用できるけど、型の大きさにかかわらず1刻みになるようだな。
149デフォルトの名無しさん:2007/07/30(月) 14:53:19
Cのdmcでdll作りたいんだけど、どこで聞けばいい?
150デフォルトの名無しさん:2007/07/30(月) 15:01:13
DMCスレ落ちたんか
151デフォルトの名無しさん:2007/07/30(月) 15:14:15
クラウザーさん
152デフォルトの名無しさん:2007/08/03(金) 00:01:06
アップデートまだー?
153デフォルトの名無しさん:2007/08/03(金) 16:57:55
関数が複数の値を返せたらいいのになあ・・・
154デフォルトの名無しさん:2007/08/03(金) 17:04:45
Dにインデクサないの?
155デフォルトの名無しさん:2007/08/03(金) 20:25:18
opIndex?
156デフォルトの名無しさん:2007/08/03(金) 22:47:10
だよね
157デフォルトの名無しさん:2007/08/03(金) 22:48:31
>>153
Tupleを返せたらいいんだけどな
なんでできないんだ
158デフォルトの名無しさん:2007/08/04(土) 01:21:34
Tupleはコンパイルタイムにしか存在しないデータ型だから無理じゃね?
159デフォルトの名無しさん:2007/08/04(土) 03:43:07
Dには集合型ないの?
160デフォルトの名無しさん:2007/08/04(土) 04:12:09
>>158
タプル自体の構成を変更したりはできないけど、
タプルの各要素を実行時に変更するのはOK。

ので、
 int n; char[] str;
 Tuple!(int,char[]) retTupleFunc(){ return Tuple!(3,"hoge".dup); }
 Tuple!(n,str) = retTupleFunc();
というような感じのが、もっとマシな構文で実現される整合性の余地はある。
161デフォルトの名無しさん:2007/08/04(土) 04:19:57
早くタプルリテラルを追加してほしい。
162デフォルトの名無しさん:2007/08/04(土) 04:24:44
$(int, char[]) だの @(int, char[]) だの、
まだ使ってない記号を導入するつもりはないんだろうかね。
163デフォルトの名無しさん:2007/08/04(土) 04:42:07
それより、変数宣言以外での、式で使うカンマ構文をナシにして、
a,b,c = f();
で済むようにすりゃ簡潔でいいと思う。
f(x,y,z)とかf((x,y),z)とかやるときも構文の不整合起こさないで済みそうだし。
164デフォルトの名無しさん:2007/08/04(土) 11:01:11
>>163
それ、不整合を起こさないためには必須だけど代わりの構文が無いと困る。
165デフォルトの名無しさん:2007/08/04(土) 11:07:02
>>163
Luaでそんなことやってたけど、
便利だわな
166デフォルトの名無しさん:2007/08/04(土) 13:40:38
カンマ演算子もタプルを生成するようにして、タプルをスカラーで評価したら一番最後の値が返されるようにするとか。
167デフォルトの名無しさん:2007/08/04(土) 15:18:03
今のところはこういうやつでお茶を濁すしかないのかね。
これは C++ だが。
http://www7b.biglobe.ne.jp/~robe/pf/pf011.html
168デフォルトの名無しさん:2007/08/04(土) 15:54:29
テンプレート型にstaticな演算子が適用できないのは仕様?

struct S {
static void opAssign(int a) { writefln(a); }
}
struct ST(T) {
static void opAssign(int a) { writefln(a); }
}
void main() {
S = 1; // ok
ST!(int) = 1; // error
ST!(int).opAssign(1); // ok
}
169デフォルトの名無しさん:2007/08/04(土) 17:18:08
alias ST!(int) STI;
STI = 1;

とすれば通るけどね
170デフォルトの名無しさん:2007/08/04(土) 17:42:19
前にもそんな感じのテンプレートの挙動があったな。
まあ仕様じゃなくてバグだろう。
171デフォルトの名無しさん:2007/08/05(日) 01:13:41
>>165
むちゃくちゃ好きだったLuaとSquirrelだけど
D言語にはまった以降いらなくなってしまった・・・

172デフォルトの名無しさん:2007/08/05(日) 01:16:16
和訳の中の人はなんであんなにマメなんだ?
173デフォルトの名無しさん:2007/08/05(日) 07:11:48
まあ、なんにしろありがたいことは確かだ。
174デフォルトの名無しさん:2007/08/05(日) 11:56:59
FAQかもしれませんがGTK+ってDからも使えますか?
175デフォルトの名無しさん:2007/08/05(日) 12:03:28
っ gtkD
176デフォルトの名無しさん:2007/08/05(日) 12:22:53
177デフォルトの名無しさん:2007/08/05(日) 12:24:50
>>175-176
ありがとうございます
調べたら色々出てきたので
いくつか比較してみたいと思います
ttp://www.autla.com/news/index.php?GUI%B3%AB%C8%AF%A4%CB%A4%C4%A4%A4%A4%C6
178デフォルトの名無しさん:2007/08/06(月) 11:56:11
ttp://d.hatena.ne.jp/misky/20070806
これってどうなんじゃろ? 仕様外?
179デフォルトの名無しさん:2007/08/06(月) 12:50:22
inが通るなら、outも通らなきゃねとおも
180デフォルトの名無しさん:2007/08/06(月) 13:09:37
コンパイラ自身がassertion failureって言ってるなら
間違いなくコンパイラのバグだと思うけど。
181デフォルトの名無しさん:2007/08/06(月) 13:11:52
どっちが?
inが通るのが?
それともoutが通らないのが?
182デフォルトの名無しさん:2007/08/06(月) 14:26:28
コンパイラのコード(.cファイル)内でassertion failureを起こしてるから
コンパイラにバグがあるのは確定。

関数リテラルでは"FunctionBody"が書ける仕様になってる。
これはin、out、bodyが書ける構文要素のことなので、
outを書けないのはバグ。
inが書けるのは仕様通り。
delegateを省略した場合に事前・事後条件が書けないのはバグ。
183デフォルトの名無しさん:2007/08/06(月) 14:57:24
ところでWin32APIを軽くラップしようとしたら、
char[]をnullに出来ないので困っていたりする。

func(char[] str){
  win32api(toStringz(str));
}
func(null);

とするとnullが""に暗黙変換されちゃって、funcにnullが持ち込めない。
nullableみたいのって無かったっけ?
184デフォルトの名無しさん:2007/08/06(月) 15:16:56
str is null ? null : toStringz(str) では
185183:2007/08/06(月) 15:31:32
>>184
func()と同じ理由でtoStringz()もnullを受け取ることはできないので、あまり意味はないかと。
toStringz(null)はtoStringz("")として呼び出される事になるので。

って、そう考えるとtoStringz()も使っちゃダメってことじゃないか。
めんどくせーなー。
186デフォルトの名無しさん:2007/08/06(月) 15:41:08
void main() { int[3] a = [1,2,3]; }

実行時に "Error: Stack Overflow" ってなるんだけど、何が悪いのでしょうか?
DMD 2.003を使ってます。
187184:2007/08/06(月) 16:05:29
>>185
いやいやいや、toStringzにnull渡してないから。こう。
 void func(char[] str){
  win32api(str is null ? null : toStringz(str));
 }
実際には何回もつかうだろうから関数化すりゃいいと思う。

> toStringz(null)はtoStringz("")として呼び出される事になるので。
違う。nullはnull。toStringzの実装が特に""とnullを区別してないだけで
188デフォルトの名無しさん:2007/08/06(月) 16:06:30
>>184じゃないが
str is null ? null : toStringz(str)
なのに
toStringz(null)
が出てくる理由がわからんし、
ポインタ型にnullを渡すと(p==0)になるでしょ常考。
189デフォルトの名無しさん:2007/08/06(月) 16:10:06
>>182
writefln(array[out(i) { assert(i<a.length); } body { return 4; }()]);
仕様によれば、こういう変態的なコードもありなんだな

これ試してて気づいたんだが、
writefln(array[{ return $-1; }()]); が、
writefln(array[{ return array.length-1; }()]); と等価になってないっぽい。
190デフォルトの名無しさん:2007/08/06(月) 16:15:23
$の方値がぶっこわれてるな

>>186
DMDのバグ
191デフォルトの名無しさん:2007/08/06(月) 16:24:44
>>185
空のchar[]とnullは区別できないよ。

import std.stdio;
void main() {
writefln("" is null); // false
// 文字列リテラルはNULターミネータを持っている。
char[] s;
writefln(s is null); // true
// 配列の初期値はnull
s = "".dup;
writefln(s is null); // true
// NULターミネータは複製されない。
s = "aa".dup; s.length = 0;
writefln(s is null);
// 長さを 0 にしても再利用のため(?)に同じ場所を指し続けている
}
192デフォルトの名無しさん:2007/08/06(月) 16:50:58
ちなみに、こういう気持ち悪いことにもなってるから注意が必要。

import std.stdio;
void main() {
string a = "";
writefln(a is null); // false
writefln(a == null); // true
}
193デフォルトの名無しさん:2007/08/06(月) 17:41:04
win32api(str.length ? toStringz(str) : null); で良くね?
194デフォルトの名無しさん:2007/08/06(月) 21:06:38
>>191-192
なるほど
195デフォルトの名無しさん:2007/08/06(月) 21:52:03
win32api(str.ptr ? toStringz(str) : null);
とかどうよ
196183:2007/08/06(月) 21:58:03
ウッヒョー。今まで仕様を勘違いして覚えてたのか俺は。
・配列はnull値を取れない
・nullは長さ0の配列に暗黙変換される
とばかり思ってました。

えーと、正しくはこういうこと、でいいんでしょうか?
・配列はnull値を取れる
・null配列はほとんどの場面で長さ0の配列と同じ挙動をする
・両者はis nullの結果で区別できる

>>184さんごめんなさい。正しくその書き方で事足りました。
みんなもありがとう。おかげでアホな誤解から解放されました。

でも("".dup is null)がtrueになる理由だけよく分からない……。
197デフォルトの名無しさん:2007/08/06(月) 22:44:21
あれ? http://www.kmonos.net/alang/d/arrays.html
の配列のデフォルト初期化の項には
>  動的配列は要素数0に初期化されます
て書いてある。
198デフォルトの名無しさん:2007/08/06(月) 23:00:28
>>196
・要素数が0になった場合、変数自体がnullに書き換えられる場合がある。
199デフォルトの名無しさん:2007/08/06(月) 23:20:21
大昔にも同じ議論をみたな。
結局なんかうやむやなまま今日に至るわけだけれども。

http://yaneu.com/cgi/yanebbs/dobbsr.cgi?a=view&topic_id=1069952491&res_id=542-600
news://news.digitalmars.com:119/[email protected]
200デフォルトの名無しさん:2007/08/07(火) 05:20:19
ttp://d.hatena.ne.jp/misky/20070806
うむむやはりこれはバグでしたか...
もやもやがすっきりしました
ありがとう賢い人たち
201デフォルトの名無しさん:2007/08/07(火) 05:47:18
って、あげてしまった
(ご迷惑おかけしてすいません)
202デフォルトの名無しさん:2007/08/07(火) 05:48:21
あげたら迷惑なの?
203デフォルトの名無しさん:2007/08/07(火) 08:00:22
>>200-201
D言語をいじくる夏休みとはうらやましいかぎりだぞ
204デフォルトの名無しさん:2007/08/07(火) 08:30:08
gdcはどうなってるんだい?
205デフォルトの名無しさん:2007/08/07(火) 09:42:02
DFL 0.9.6 リリース
206デフォルトの名無しさん:2007/08/07(火) 12:18:16
>>205
ちょっとコントロールが追加されたくらいかな
207デフォルトの名無しさん:2007/08/07(火) 22:30:28
コンパイラにコンテンツアシストの支援機能を早く組み込め。
そしたらあっという間に普及するから。
208デフォルトの名無しさん:2007/08/07(火) 22:36:51
こんな言語仕様が不安定な言語は普及しないよ。
D が流行るのは言語仕様が安定してからでいい。
209デフォルトの名無しさん:2007/08/08(水) 02:16:30
つまりヲルターが死ぬまで流行ることはないということか
210デフォルトの名無しさん:2007/08/08(水) 02:28:35
つまり、Rubyは、Matzが死ぬまで流行ることはないのだろうか
211デフォルトの名無しさん:2007/08/08(水) 02:41:25
デリゲートリテラルの引数の型を推論できるようにならんかなあ。

void func(int delegate(int) dg);

func( (i) { return i * 2; } );
とか、願わくば
func(i => i * 2);
とか書きたい。
212デフォルトの名無しさん:2007/08/08(水) 05:41:35
後のほうの記法がきもい
213デフォルトの名無しさん:2007/08/08(水) 07:00:49
素人乙
214デフォルトの名無しさん:2007/08/08(水) 08:36:05
ラムダ記法はほしい
215デフォルトの名無しさん:2007/08/08(水) 08:47:55
>>211
現状の戻り値推論だけなら、要求されているdelegate型と
生成したdelegate型が異なれば型エラー出るけど、
なんかその推論をやっちゃうとエラーの元になりそうだな。

むしろ仮引数名の方を省略したい。
(int){return @int * 2;}
みたいな。
普通の関数でも省略できるとなおよし。
216デフォルトの名無しさん:2007/08/08(水) 12:05:43
今のままでいいよ
下手に省略すると、人間もコードから内容を推論しなきゃならなくなるからめんどい
217デフォルトの名無しさん:2007/08/08(水) 12:31:20
DとObjective-Cを混ぜてみたいな。スクリプト言語より強力になりそうな気がしてね。
218デフォルトの名無しさん:2007/08/08(水) 17:10:17
Objective-C++は失敗作だったけどな
219デフォルトの名無しさん:2007/08/08(水) 18:54:09
開発環境>>ライブラリ>>>>>言語仕様
って感じで、D言語は3.0になったとしてもはやらなそう
220デフォルトの名無しさん:2007/08/08(水) 20:14:16
ヲルタータンが「言語仕様はこれにて平定!」って言わない限り無理ぽ
221デフォルトの名無しさん:2007/08/08(水) 23:38:42
これにて閉廷!
222デフォルトの名無しさん:2007/08/08(水) 23:59:34
これにて閉経!
223デフォルトの名無しさん:2007/08/09(木) 00:00:11
はたして、進化をやめたDに使う価値はあるのだろうか。
224デフォルトの名無しさん:2007/08/09(木) 00:05:11
せめて処理系がほぼ下位互換でないと使う気にはなれんね
225デフォルトの名無しさん:2007/08/09(木) 03:31:04
>>223
価値ないな…
D言語は変り続けることが美しいのさ…
226デフォルトの名無しさん:2007/08/09(木) 04:00:04
罷り間違ってD言語が普及してしまったら
下位互換性を重要視するようになると思うよ
227デフォルトの名無しさん:2007/08/09(木) 04:00:49
それは困る
228デフォルトの名無しさん:2007/08/09(木) 04:02:15
そんときゃE言語作ればいいじゃない
229デフォルトの名無しさん:2007/08/09(木) 04:03:32
それはいい言語になりそうだな。
230デフォルトの名無しさん:2007/08/09(木) 04:05:05
231デフォルトの名無しさん:2007/08/09(木) 04:24:35
>>230は尊敬しているようです
232デフォルトの名無しさん:2007/08/09(木) 04:31:07
E言語はもうあるけどな
233デフォルトの名無しさん:2007/08/09(木) 04:34:54
かなりのものは既に使われてるよな。
何か昔一覧を載せてるサイト(不正確に見えたが)があったけど、見つからない。
234デフォルトの名無しさん:2007/08/09(木) 07:05:25
scope File("hoge.txt") s;
なんていう表現があったら時々便利そうだなあ
いらんけど
235デフォルトの名無しさん:2007/08/09(木) 13:15:47
236デフォルトの名無しさん:2007/08/09(木) 13:49:49
>>234
scope s = File("hoge.txt");
でいいと思うよ。
237デフォルトの名無しさん:2007/08/10(金) 18:18:19
更新マダー
238デフォルトの名無しさん:2007/08/10(金) 18:22:54
こっちのスレは1年以上待って、もっと待つつもりで、実装はさらに待つつもりなのにおまいらときたら
ttp://pc11.2ch.net/test/read.cgi/tech/1149440647/
239デフォルトの名無しさん:2007/08/10(金) 23:08:43
>>238
なんだか誠に申し訳ないw
でもDはDで……仕様確定マダー?

そいやDの仕様もだいぶ増えてきた感があるけど、
まだコンパイラの実装はC++ほど大変でもないんかな?
だとしたらどっかに決定的な違いがあるんだろーか。
教えてC++の偉い人ー。
240デフォルトの名無しさん:2007/08/10(金) 23:14:38
ウォルタたんがDの理念の一つに掲げているのに
「処理系の作りやすさ」があるから、そうなんだと思うよ。知らないけど。
241デフォルトの名無しさん:2007/08/11(土) 02:22:03
だれかDコンパイラを自分で作ってる人とかいないのかな
242デフォルトの名無しさん:2007/08/11(土) 02:25:12
少し前にd.D.announceに自分で作ってみたとかいう人がいたような
243デフォルトの名無しさん:2007/08/11(土) 15:01:01
>>227
なんかわろたw
244デフォルトの名無しさん:2007/08/11(土) 17:28:29
>>238
もうD言語使えよと言いたくなる場面ばっかりでわろた
245デフォルトの名無しさん:2007/08/11(土) 18:00:30
DもC++0xも永遠に完成しない
246デフォルトの名無しさん:2007/08/11(土) 18:05:45
C++ユーザがもっとDに流れてくれたらいいのに
似たような言語に人的資源が分散してるのがもったいない
247デフォルトの名無しさん:2007/08/11(土) 18:09:41
やはりここは「ぼくらの」形式で間引きだな
248デフォルトの名無しさん:2007/08/11(土) 18:14:44
C++用のライブラリ作ってるけど、
Dポーティングを念頭に書き換え始めてる
というかDで類似の仕様設計を書き始めてる
でも.NET用のポーティングもありかなと思い始めたり
D#マダー
249デフォルトの名無しさん:2007/08/11(土) 18:36:03
普及するしないの分かれ目は
もはや言語がどうこうってところじゃなくなってるんだけどね
250デフォルトの名無しさん:2007/08/11(土) 18:39:05
ちゃんと標準がTangoに置き換わるまで実質ライブラリさえ作れないような状況だろ。
今作ってもどうせ作り直しになるし。
251デフォルトの名無しさん:2007/08/11(土) 18:54:19
本当に完全にTangoに置き換わるのなら、もうTangoでライブラリ作ればいいだけの話のような。
……本当に標準がTangoに置き換わるって信じてもいいのか?
252デフォルトの名無しさん:2007/08/11(土) 19:01:02
>>251
それが信じられないから困る

phobosがダメなところとTangoの良いところってどんなのがある?
phobosはダメだダメだと聞くがあまり具体的には出てこなくて
まずは文字コード周りかな
253デフォルトの名無しさん:2007/08/11(土) 19:07:14
みんなエディタなに使ってるの?
254デフォルトの名無しさん:2007/08/11(土) 19:28:40
個人的には入出力関係はTangoの方が好きかなぁ
コンテナ(コレクション)についてもTangoがほしいね
あと、ゆくゆくはTangoでXMLもいじれるようになりそう
255デフォルトの名無しさん:2007/08/11(土) 19:31:31
ようやくTango1.0が出そうかなっていうときにもうD2.0だもんなぁ・・・・
256デフォルトの名無しさん:2007/08/11(土) 19:47:39
D2.0ってなにそれはおいしいの?
と思う俺とForeachRangeStatementが2.0だけってことはそろそろ対応お願いしますという
Walterタンの無言の意思表示なのではと思う俺と…
257デフォルトの名無しさん:2007/08/11(土) 21:09:52
もうv1はバグフィックスだけだろ。
美味しい機能《えさ》はv2にしか提供されない。
258デフォルトの名無しさん:2007/08/11(土) 21:52:10
そもそもTangoが標準になるって発言元はどこなんだぜ?
259デフォルトの名無しさん:2007/08/11(土) 22:17:02
>>258
Tango製作陣からじゃないの
260デフォルトの名無しさん:2007/08/11(土) 23:43:00
まぁTangoのほうがモノが良いなら自然に置き換わっていくんじゃね?
261デフォルトの名無しさん:2007/08/12(日) 00:04:50
どっちかが完全に上位互換ならうれしいんだけどね。
混在できたっけ?
262デフォルトの名無しさん:2007/08/12(日) 00:23:12
>>261
無理じゃなかったっけ。前に似た話出てた気がする。
もともと置換を目的に作られてるしなあ。

つか本当に>>255に同意。
なんでここで互換性ないバージョンとか出して既存ライブラリぶっちぎれるのかと。
Phobosお話になんねー、みたいな声はウォルたんに届いてないんだろうか。
263デフォルトの名無しさん:2007/08/12(日) 00:51:04
ウォルタ「いや、他にやりたいことあるし…」
264デフォルトの名無しさん:2007/08/12(日) 01:17:57
ウォルタ「ライブラリのためにDを止めたくないのくらいわかってくれるだろ」
265デフォルトの名無しさん:2007/08/12(日) 01:29:21
ウォルタ「ライブラリが追随すればいいだろwwwww更新おせーんだよwwww」
266デフォルトの名無しさん:2007/08/12(日) 01:41:46
ウォルタ「俺の勝手だろwwwwwwwwwwef9swccnj3」
267デフォルトの名無しさん:2007/08/12(日) 01:44:39
普遍条件にinvariant()って括弧がいるのはどうにかならんかなあ。
見た目が悪すぐる
268デフォルトの名無しさん:2007/08/12(日) 08:36:17
>>267
気にしすぎじゃね?
>>240あたりの理由で()付じゃないとダメだという可能性は?
269デフォルトの名無しさん:2007/08/12(日) 11:03:23
ウ「本来のあるべき姿を追い求めた結果だから仕方ないだろ」
270デフォルトの名無しさん:2007/08/12(日) 11:19:19
まぁdmd2.0のFinal Const Invariantの導入があるから整合性のために仕方がないよ。
struct{
final    {int     final_hoge = 0;}
const    {int     const_hoge = 0;}
invariant{int invariant_hoge = 0;}
}
これでinvariantだけ定数の宣言じゃなくて不変条件になると違和感が漂いすぎるし。
271デフォルトの名無しさん:2007/08/12(日) 12:25:29
unittestにあわせて、ちょっと長いけどinvarianttestとかにしてくれりゃいいのに。
272デフォルトの名無しさん:2007/08/12(日) 19:05:21
ちょっとD触ってみたんだけど試してみたいことがあってサンプルコード探して動かしてみようとしたら動かない、とかデフォ?
メッセージボックスに日本語出力するだけですげー時間かかって泣きそうだったわ

あとみんなは開発環境何使ってるの?
Eclipse+Descentでやってたらソースにエラーの赤線引いてあるけど見た目どこも問題ないしコンパイル通るし動作するしで微妙だった
273デフォルトの名無しさん:2007/08/12(日) 19:11:49
>>272 D2.0系だとサンプルコードってほとんどないんじゃないかな
今公開されてるサンプルコードって大半がD1.0時代のものだと思う(しかも今のD1.0系で動くとも限らない)
少なくとも日本語の文書においては
274デフォルトの名無しさん:2007/08/12(日) 19:22:34
>>272
まだまともなIDEはないから、俺は普通のテキストエディタで書いて、コマンドラインからビルドしとるよ。
275デフォルトの名無しさん:2007/08/12(日) 19:24:11
俺も>>274と同じくコマンドライン(というかバッチファイル作ってダブルクリック)
ポセイドンとかどうなんだろ?
276デフォルトの名無しさん:2007/08/12(日) 19:47:28
>>273
そーなんか
とりあえず1.0系インスコしたんだけどみんな2.0系使ってるの?
2.0系って正式リリースされてないよね?

>>274-275
そーかー
Code::BlocksとPoseidonも使ってみるよ
コード補完がないとソース書いててだるい気がするしね
277デフォルトの名無しさん:2007/08/12(日) 20:00:11
>>276
正式リリースなんて飾り。
278デフォルトの名無しさん:2007/08/12(日) 20:09:37
>>276
バージョンが0.001増えるだけで、大幅な書き直しを余儀なくさせられる言語。それがD
279デフォルトの名無しさん:2007/08/12(日) 20:31:15
バージョンアップしたらHello, woldさえコンパイル通らなくなったときは泣きそうになった
280デフォルトの名無しさん:2007/08/12(日) 20:31:53
書きまつがえた
281デフォルトの名無しさん:2007/08/12(日) 21:54:14
>>276
予約語以外までまともにコード補完できるIDEなんてまだないかと

>>279
これのことかな s/stdout/dout/g
import std.cstream;
void main() {
stdout.writefln("Hello, world!"); // 古いコード
}

歴史は繰り返す(Tango)
Cout(Hello, world!").newline;
282デフォルトの名無しさん:2007/08/12(日) 22:15:35
cout << "Hello, World!" << endl;
とC++みたいに出力できるのを作ったことがあるがマニピュレータ周りでモチベーションが切れて終了
283デフォルトの名無しさん:2007/08/12(日) 22:24:48
coutなんて飾りです
284デフォルトの名無しさん:2007/08/12(日) 22:46:27
doutとかs(td)outとかじゃないのか
285デフォルトの名無しさん:2007/08/12(日) 23:12:09
>>282
C++のストリームの記法が便利だと思ったことは一度も無いな
286デフォルトの名無しさん:2007/08/12(日) 23:28:32
つかC++形式の利点って何なの?
たぶんCのprintfが非型安全だから作られたんだと思うんだが、Dだと型安全な可変個引数関数が作れるわけで。
287デフォルトの名無しさん:2007/08/13(月) 00:18:06
型安全、拡張可能、フォーマット文字列の解析が不要ってとこか
その代償として、寄せ、桁、精度、基数等の指定が必要な場合の
記述が面倒くさすぎ

ぶっちゃけ拡張可能性という面でもstreambufが継承可能であることが
重要で、入出力演算子なんてただのオモチャだと思ってる
288デフォルトの名無しさん:2007/08/13(月) 00:32:35
tangoの方間違ってたらすまん
phobosのwriteflnの方がピンと来るのは俺だけ?
tangoのはどうなんだこれ
CoutとStdoutの使い分けとか必要なのか?

string hoge = "hoge", HOGE = "HOGE";
int a = 10, b = 20;
//phobos
writefln(hoge, a, "[%s%d]", HOGE, b);
//tango
Cout(hoge)(a)("[")(HOGE)(b)("]").newline;
Stdout.formatln("{}{}[{}{}]", hoge, a, HOGE, b);
289デフォルトの名無しさん:2007/08/13(月) 05:32:21
Coutキタナッ
290デフォルトの名無しさん:2007/08/13(月) 06:20:23
tx好きー。
291デフォルトの名無しさん:2007/08/13(月) 06:44:43
Code:Blocks使ってみた
入力補完させよーとするとC++かなんかの予約語を補完してくださった

Poseidon使ってみた
日本語表示もできるし予約語の補完もできるし自分で書いたメソッドの入力補完もできるっぽい ちょっと幸せ
でもエディタの挙動とか配色がキモい たぶん変更できるんだろうけどまだあんまし触ってない
292デフォルトの名無しさん:2007/08/13(月) 07:24:56
writefln で十分だな。
293デフォルトの名無しさん:2007/08/13(月) 08:07:31
printfで十分だ
294デフォルトの名無しさん:2007/08/13(月) 08:33:23
うむ
C++ ライクな入出力ストリーム表記はどうにも好きになれん
295デフォルトの名無しさん:2007/08/13(月) 09:13:18
型安全であることと、色んなもんに出力できるという点は評価できるが、
printf ライクにそれを行うことも可能なわけで。
296デフォルトの名無しさん:2007/08/13(月) 15:42:56
>>288
tangoはこれならstd::coutのほうがましだな
297デフォルトの名無しさん:2007/08/13(月) 18:23:02
正直、これ位の簡易な実装で俺は良いんだけどなぁ。
void main(){
  println(2,' ',3,' ',4);
}

static import std.string,std.stdio;
alias std.string.toString toString;
string toString(string x){return x;}
string toString(Object o){return o.toString;}
//構造体とか配列とか連想配列とかも同じノリで定義

void println(T...)(T x){
  foreach(v;x){
    string r = toString(v);
    std.stdio.fwrite(r.ptr,1,r.length,std.stdio.stdout);
  }
  std.stdio.putc('\n',std.stdio.stdout);
}
298デフォルトの名無しさん:2007/08/13(月) 18:26:37
結局型安全にした printf ライクなものが一番だよね。
299デフォルトの名無しさん:2007/08/13(月) 19:43:44
writeflnに慣れすぎて手放せなくなってる
300デフォルトの名無しさん:2007/08/13(月) 21:48:15
誰かD1.0を擬人化してみてくれ
301デフォルトの名無しさん:2007/08/13(月) 21:52:16
302デフォルトの名無しさん:2007/08/13(月) 22:08:16
>>297
それでprintf("%08X", n);
とかはどうやりますか?
303デフォルトの名無しさん:2007/08/14(火) 00:20:21
>>300
1.0限定かよ
304297:2007/08/14(火) 06:54:07
>>302
自分の書いた奴だと残念だけど不可能。
個人的にはそういう豪華な書式機能はいらないから、
安全で読みやすい出力用関数が欲しいという立場。
writefもprintfも書式文字列をコンパイル時に検証できないのが微妙。
305デフォルトの名無しさん:2007/08/14(火) 15:00:17
ttp://shinh.skr.jp/d/porting.html
のOpenGL使おうとするとリンクエラーになる(dmd1.020)んだけども、修正方法わかる人いる?
Derelictはやたらでかいんであんま使いたくないんだけど。

implib使ってopengl32.libを自分で吐かせたりしたけども、駄目だった。
306デフォルトの名無しさん:2007/08/14(火) 17:10:36
opengl.d
/*
version (Win32) {
private import std.c.windows.windows;
extern(Windows):
}
else {
extern(C):
}
*/
private import std.c.windows.windows;
extern(Windows):

linuxは手元にないからわからない
307デフォルトの名無しさん:2007/08/14(火) 18:11:46
>>306
ありがとうおかげで動いた。
関係ないがstd.c.windows.windowsのインポートは消しても別にエラーにならないな。

当該部分全消しでextern(System):にしておけば他環境でも元のコードと意味変わらんと思うので、とりあえずこれでいきます。
308デフォルトの名無しさん:2007/08/15(水) 15:44:03
入出力に関しては、Java1.5のInput/OutputStreamあたりが
一番エレガントで高性能に思える。printf的な書式指定も可能になったし。
ただ標準出力ストリームはSystem.outなんてのじゃなくて変数stdoutとかにして欲しいところ。

あとTangoって、モジュール名がUpperCamelなのが解せないのよね。tango.core.Arrayとか。
Dのスタイルガイドからすればtango.core.arrayが推奨なのに。

それとtanto.util.foo.Barはほとんどtango.foo.Barで良いと思う……。
309デフォルトの名無しさん:2007/08/15(水) 23:21:16
Dならprintf!("%d %s")(n, str);って具合にフォーマット文字列から動的に関数を生成すべきだろ。
310デフォルトの名無しさん:2007/08/15(水) 23:28:02
それは面白いかも
311デフォルトの名無しさん:2007/08/16(木) 01:06:34
>>309 なにか利点があるの?
312デフォルトの名無しさん:2007/08/16(木) 01:22:05
むしろコンパイル時に生成するんなら意味があるかな
printf()の非効率とおさらばできる(かもしれない)
313デフォルトの名無しさん:2007/08/16(木) 01:51:30
>>311
・フォーマット文字列からメソッドシグネチャを生成するため、
 コンパイラが引数の型や数をチェックをできる
・フォーマット文字列の解釈やコードの生成がコンパイル時に行われるため、
 コンパイラによる高度な最適化が期待できる。

こんなところか。
314デフォルトの名無しさん:2007/08/16(木) 01:56:25
>>313
そか サンクス

誰か実装してくれないかなぁ・・・・
315デフォルトの名無しさん:2007/08/16(木) 02:31:18
import package.*; まだー?
316デフォルトの名無しさん:2007/08/16(木) 02:37:51
>>313
バイナリのサイズが増えるのが欠点か。
あと文字列の出力って、たぶん出力先のほうがネックになると思うから、フォーマット文字列をノーコストで解釈しても速度面がそれほど期待できるとは思えない。
(これはまあ、まあもちろん出力先によるんだろうが)

でも引数のチェックは魅力的。
317デフォルトの名無しさん:2007/08/16(木) 02:38:53
なんでまあって二回言ってるの俺orz
318デフォルトの名無しさん:2007/08/16(木) 02:48:56
>>309なのとか、Dでboostレベルのライブラリが実装される時の事を考えると
なんだか非常にわくわくしてくるのだよな。

あと何年わくわくし続ければいいですか。
319デフォルトの名無しさん:2007/08/16(木) 08:22:22
作ってもバージョン変われば動かなくなると思うと、
あまり大規模なライブラリは作る気がしない。
320デフォルトの名無しさん:2007/08/16(木) 10:06:25
>>381
Dを使っているかぎりずっとわくわくしていられるよ…
321デフォルトの名無しさん:2007/08/16(木) 10:15:33
>>319
俺は泣いた
322デフォルトの名無しさん:2007/08/16(木) 10:30:07
>>320
それは永遠に実装されないという(ry
323デフォルトの名無しさん:2007/08/16(木) 19:01:44
>>316
DでもC++でテンプレート使いまくった時のような
code bloatが多少問題になったりするんだろーか。
あんま気にしなくても、とは思うが。

あと、フォーマット後に外部出力が必ず伴うとも限るまい……と思ったけど、
フォーマットってだいたい出力のために行う作業なんだな、考えてみると。
やっぱそれより型安全の魅力か。
324デフォルトの名無しさん:2007/08/17(金) 01:16:55
更新まだー?
325デフォルトの名無しさん:2007/08/17(金) 01:18:57
カンファレンス前に一度はあるかなと思ってたが
これはもうカンファレンス後だろうな・・・・・
326デフォルトの名無しさん:2007/08/17(金) 04:14:09
>>323
format使ってみたけどバッファサイズ気にしなくて済む利点の方が大きいと思ったよ
327デフォルトの名無しさん:2007/08/17(金) 04:15:00
>>320

>>381 にどんなレスが付くのか
わくわくして待つことにするよ
328デフォルトの名無しさん:2007/08/17(金) 07:51:06
329デフォルトの名無しさん:2007/08/17(金) 08:20:02
なんというか、打ち水のようなレスだよな
330デフォルトの名無しさん:2007/08/17(金) 13:24:41
立て板に水のようなレス
横板にペンキのようなレス
331デフォルトの名無しさん:2007/08/18(土) 10:57:57
ばーじょんうpまだ?
332デフォルトの名無しさん:2007/08/18(土) 15:31:25
ネタがないので

>>309 やってみてる人いるのかな
TMP慣れてないから難しいや
最終的にどういう関数(群)に展開したらいいのかわかってないからなおさらだけど

試しにこんな感じでやってみたが構造体使ってていまいち・・・

Writef!("[%s](%d)<%f>")("hoge", 1, 0.5);

template Writef(string fmt) {
 struct Writef {
  static Writef opCall(U...)(U u) {
   ...
333デフォルトの名無しさん:2007/08/18(土) 15:34:44
ふと、「コンパイル時実行」という仕様を生かせばもっとすっきり出来るのではと思った
334デフォルトの名無しさん:2007/08/18(土) 16:46:48
template Writef(string fmt) {
mixin("void Writef(arguments){...}");
}
でいいんじゃないかな。
335デフォルトの名無しさん:2007/08/18(土) 22:19:00
template tprintf(char[] fmt){
void tprintf(FormatToTypeTuple!(fmt) arg){
printf(fmt, arg);
}
}

あとはFormatToTypeTupleを別途定義すれば、たぶんOK。
336デフォルトの名無しさん:2007/08/18(土) 22:26:11
printfに渡すときはtoStringzしないとだめだじょ。
337デフォルトの名無しさん:2007/08/18(土) 23:14:49
てか、printfの型を間違ったバグなんて、発見も修正も容易なんだから、型厳密にする必要性がねぇ。
338デフォルトの名無しさん:2007/08/18(土) 23:36:23
>>337
ダウト!
339デフォルトの名無しさん:2007/08/19(日) 11:01:22
tprintf!("h%do%dge")(1,2);
alias tprintf!("h%do%dge") p;
p(3,4);
340デフォルトの名無しさん:2007/08/19(日) 11:36:21
>>338
お前がダウトだよ。

printfに違う型渡したバグで、何回悩んだんだよ。お前の人生は。
341デフォルトの名無しさん:2007/08/19(日) 11:39:46
>>337
コンパイル時に型が分かるなら、
リアルタイムでコンパイルすればコード編集時にも型が分かる。
ならオートコンプリートも効くし、コード打ってる最中に赤線引いて指摘もできるべ。
まぁ、そんな贅沢なIDEが利用できるとこまで行くかという悲しい疑問もあるけれど(´・ω・`)

それに外部入出力のテストって、他に比べてややこしい性質があると思う。
コンソール出力なら人間の目でチェックするのがまずデフォだし、
リダイレクトとかして自動化するにも
少しだけ設計を工夫する必要があったり、手間がかかったり。
発見や修正が容易とは言えないんじゃねーかな。
342デフォルトの名無しさん:2007/08/19(日) 16:33:04
(´◕ω◕`)
343デフォルトの名無しさん:2007/08/19(日) 19:34:16
>>342
カワエエ...
344デフォルトの名無しさん:2007/08/19(日) 19:37:09
>>343 かわいいだろ あれお前を狙ってるんだぜ・・・・
345デフォルトの名無しさん:2007/08/19(日) 20:47:13
>>341
> 上4行
だから、printfでそれがなされても大してうれしくねーだろ。

> 下5行
>コンソール出力なら人間の目でチェックするのがまずデフォだし、
はーん?なら型厳密になっても発見や修正が容易とはいえねーだろ。何が言いたいの?
346デフォルトの名無しさん:2007/08/19(日) 22:23:50
嬉しいか嬉しくないかは人それぞれだろうが。
フォーマット文字列に合わせて、補完候補が絞り込まれるなら俺は便利だと思う。
347デフォルトの名無しさん:2007/08/19(日) 23:48:22
人それぞれとも限らんからそれぞれの考えの理が問われてるんだろ。
348デフォルトの名無しさん:2007/08/20(月) 03:11:35
Mango って名前がエロいが良く出来てるな
349デフォルトの名無しさん:2007/08/20(月) 09:25:05
そいや昔から「printfはよろしくない」って言われてるのよく聞くけど、
そのよろしくない点を考察してまとめたページとかってどっかにない?
型安全でないとかはわかるけど、他にどういう問題があるのか
ちゃんと知っておきたくなってしまった。
350デフォルトの名無しさん:2007/08/20(月) 09:35:16
>>349
デバッグ出力のためにあちこちにprintfが散乱してて、リリース時に取り除くのが面倒になるから・・・とか言う話を聞いたことが。
まともなデバッグトレースの処理用意してないのが悪いんでしょうけど。
351デフォルトの名無しさん:2007/08/20(月) 09:59:05
debug printf("hoge:%d, hige:%d\n", hoge, hige);
352デフォルトの名無しさん:2007/08/20(月) 10:56:15
printfのフォーマットがコンパイル時にコードに展開されるって事は、
動的に出力内容を帰る事ができないって事?
353デフォルトの名無しさん:2007/08/20(月) 11:00:37
文字列渡せば変えられるんじゃね?
354デフォルトの名無しさん:2007/08/20(月) 11:51:17
mixin Printf!("%s %s", hoge, hoge2);
ここまでいったら逆に楽しそうだな
355デフォルトの名無しさん:2007/08/20(月) 11:53:16
mixin Printf!("%1 %2", hoge, hoge2);
356デフォルトの名無しさん:2007/08/20(月) 14:54:31
DMDは writefln(user_input); みたいなのを警告しないから、
この手の実行時にしか気づかない欠陥を生み出さないような機構はほしい。
357デフォルトの名無しさん:2007/08/20(月) 19:56:05
誰かPoseidonの使い方書いてあるページ知ってる?
英語読まないとダメ?
358デフォルトの名無しさん:2007/08/20(月) 20:12:00
使い方いうてもほとんどコマンドないじゃん。
359デフォルトの名無しさん:2007/08/20(月) 20:19:00
コマ…ンド…?
360デフォルトの名無しさん:2007/08/20(月) 22:13:18
>>354は普通の関数テンプレートより退化してて、
>>356はどこもおかしくないんじゃね
361デフォルトの名無しさん:2007/08/20(月) 22:20:06
>>360
string user_input = "%d";
362デフォルトの名無しさん:2007/08/20(月) 22:43:43
>>361
エスケープし忘れか
関数定義のすぐそばにちゃんとunittestを書くのがD言語流じゃね
363デフォルトの名無しさん:2007/08/20(月) 23:10:37
%を特殊処理しないwriteflnつーか、文字列以外も可変長引数もとれるwriteLineつーか
そういうものが用意されてりゃ問題ない気がするな
364デフォルトの名無しさん:2007/08/20(月) 23:40:30
txのprintlnか。
365デフォルトの名無しさん:2007/08/21(火) 00:14:52
俺だったら、最初からwrite, writef, writeln, writeflnの4つ用意するのになあ。
366デフォルトの名無しさん:2007/08/21(火) 00:56:58
マッタクダー
367デフォルトの名無しさん:2007/08/21(火) 14:38:01
とりあえず object.d の中にtchar型がほしいなぁ…
あるいはwcharとdcharを廃止してversion(Unicode)とかでUTF8/UTF16/UTF32が切り替わるcharオンリーにするか…
368デフォルトの名無しさん:2007/08/21(火) 14:51:50
tcharってなにに使うんだ?
369デフォルトの名無しさん:2007/08/21(火) 15:20:18
俺はchar型を抽象化して、コンパイル時のスイッチでUTF-8/16/32選ぶようにして欲しい。
それぞれ明示的に扱いたいときはcchar, wchar, dcharを使うようにして。
370デフォルトの名無しさん:2007/08/21(火) 15:32:13
>>368
コンパイル時の-versionスイッチに応じてchar/wchar/dcharと定義が変わる文字列型
要はWindowsプログラミングをしてるとLPCTSTRとかでてくるあれ…
371デフォルトの名無しさん:2007/08/21(火) 15:40:30
LPCTSTRはubyte[]かdchar[]だげん。
372デフォルトの名無しさん:2007/08/21(火) 15:43:38
const(ubyte)[]かconst(dchar)[]だな。
373デフォルトの名無しさん:2007/08/21(火) 15:45:53
TCHARはWindows以外では要らんだろし
Windowsでもそろそろ要らん気がする
もう9xとかどうでもよくね?
374デフォルトの名無しさん:2007/08/21(火) 16:05:59
version+aliasでいいじゃん。
375デフォルトの名無しさん:2007/08/21(火) 16:08:42
versionにdebugみたいに数値を与えられるようにならんかなあ。

version(Library > 3) {`}else{ }

とかできたらよさそうなのに。
376デフォルトの名無しさん:2007/08/21(火) 17:33:28
そういうのって今できないの?
constに暗黙キャストできるものをコンパイル時に参照っていうの?
377デフォルトの名無しさん:2007/08/21(火) 17:44:05
static if(Library > 3){ }else{ }
かな?
378デフォルトの名無しさん:2007/08/21(火) 19:10:54
charやめれば?
日本のDのソースは全部wchar^^
379デフォルトの名無しさん:2007/08/21(火) 19:22:34
charをやめたいがObject.toStringの戻り値がwcharにできないあたりで挫折しそうだぜ…
380デフォルトの名無しさん:2007/08/21(火) 20:22:59
toWString やら toDString やらが必要だな。
381デフォルトの名無しさん:2007/08/21(火) 20:54:46
wchar[] toWString() { return cast(wchar[])toString(); }
はダメなの?
382デフォルトの名無しさん:2007/08/21(火) 20:57:51
キャストはマズいでしょ。
383デフォルトの名無しさん:2007/08/21(火) 21:24:21
v1.016ぐらいのときはWindowsアプリを非UNICODEビルドすると
全角パスが上手く処理できなかったりした。モノによるんだろうけど全角パスで起動しなかったり

最近はWindowsプログラム書いてないから判らないけど


384デフォルトの名無しさん:2007/08/21(火) 22:37:12
DにもLINQくれ。
385デフォルトの名無しさん:2007/08/21(火) 23:48:34
>>381
wchar[] toWString(char[] src) {
wchar[] dst = new wchar[0];
foreach(dchar ch;src){
dst~=cast(wchar)ch;
}
return dst.dup;
}

こういうのは?
foreachで渡ってくる各要素をdcharで受け取るとUNICODE文字単位に分解してくれるらしいっす。
そこから目的の文字型にキャストして連結してやれば変換できるんじゃないかな……と。試してないけど。
386デフォルトの名無しさん:2007/08/22(水) 00:04:12
普通にstd.utf使えよ。
387デフォルトの名無しさん:2007/08/22(水) 00:05:55
>>385
サロゲートペアが必要なときにおかしくなる。
388デフォルトの名無しさん:2007/08/22(水) 01:02:56
すいません
しょうもない質問で申し訳ないです
std.string.succが出力する26進数(A,...,Z,AA,AB,...)を10進数に変換したいんですけどうまく書けません orz
どういうコードになるんでしょうか
389デフォルトの名無しさん:2007/08/22(水) 01:24:03
import std.stdio, std.string;

uint 二十六進数(in string src)
in {
assert(countchars(src, uppercase) == src.length);
}
body {
uint r;
foreach(c; src)
r = r * uppercase.length + find(uppercase, c) + 1;
return r;
}

void main()
{
string s = "A";
foreach(i; 1..100) {
assert(i == 二十六進数(s));
s = s.succ();
}
}
390デフォルトの名無しさん:2007/08/22(水) 02:39:42
短い・・・><
ありがとうございます!
391デフォルトの名無しさん:2007/08/22(水) 20:14:39
ちょっとお前らDはじめたばっかの俺様にやらしく教えてください

extern(Windows){
  int MessageBoxW(void*, wchar*, wchar*, uint);
}

void main()
{
  //MessageBoxW(null, (cast(wchar[])("メッセージ")).ptr, (cast(wchar[])("タイトル")).ptr, 0);
  MessageBoxW(null, "メッセージ"w.ptr, "タイトル"w.ptr, 0);
}

コメントアウトしてる方だと通るけど下のだと通らないんだが何かこれ違うのか?
392デフォルトの名無しさん:2007/08/22(水) 21:29:15
どっちでもコンパイルできるが?
utf-8, dmd1.020, Windows
393デフォルトの名無しさん:2007/08/22(水) 21:29:22
>>391
"メッセージ"w の型は invariant(wchar)[] だから、
"メッセージ"w.ptr の型は invariant(wchar)*
これを wchar* に暗黙的にキャストすることはできない。

LPCWSTR は const(wchar)* にするのがいいよ。
これなら wchar* からも、invariant(wchar)* からも暗黙的にキャストできる。
394デフォルトの名無しさん:2007/08/22(水) 21:41:02
>>391
それから、invariant型の文字列リテラルを普通の配列にキャストするのはオススメできない。
どこかで書き換えようとしてしまった場合に、わけのわからんエラーが発生する可能性がある。
書き換え可能な配列が必要な場合は "メッセージ"w.dup を使うようにするといいよ。
395デフォルトの名無しさん:2007/08/22(水) 21:41:53
>>392
スマンコ 俺dmd2.003だった

>>393
ご教授の通り
int MessageBoxW(void*, const(wchar)*, const(wchar)*, uint);
にしてみたらどっちでも通るようになったよ ありがとー
今までGUIプログラムはJavaでしか作ったことないからWindowsのことはサパーリすぎて
LPCWSTRとかなんのことか分らんけどジリジリ勉強していくよ
396デフォルトの名無しさん:2007/08/22(水) 21:43:30
LPCWSTRはLong Pointer Const Wide STRingのことだべ。
397デフォルトの名無しさん:2007/08/22(水) 21:53:18
>>394
把握
MessageBoxW(null, "メッセージ"w.dup.ptr, "タイトル"w.dup.ptr, 0);
とかしろってことか?

>>396
ヒントさんくす ぐぐってみるよ
398デフォルトの名無しさん:2007/08/22(水) 21:54:08
MessageBoxWはLPCWSTRを要求してるから、invariantな文字列渡して問題ないよ。
399デフォルトの名無しさん:2007/08/23(木) 03:16:53
GDC 0.24 release
400デフォルトの名無しさん:2007/08/23(木) 14:12:48
いつの間にかDescentが進化してるし・・・かなり感動した。
○デバッガが動くようになった(Ddbgと正しく同期が取れるようになったよう)←私だけか?
○フォーマッターが実装されたみたい
○アウトラインが実装されてる
○コードテンプレートが実装されてる
×コンパイラ選択できるのにコンパイルしてくれない
 出力先まで指定できるのに・・・(もう少しで実装されるのかも)
×コードアシストできない
×メソッドの宣言先を開けない、参照を検索できない

かなり良い感じで進化しているようです。
401デフォルトの名無しさん:2007/08/23(木) 15:10:45
誰かカンファレンスに行ってるひといないー?
402デフォルトの名無しさん:2007/08/23(木) 15:12:43
え、そんなのあったのか
行きたかった・・・
403デフォルトの名無しさん:2007/08/23(木) 15:42:26
>>402
シアトルだよ

日本でやってほしいなぁ。
404デフォルトの名無しさん:2007/08/23(木) 15:58:11
だれか日本にウォルタたん招待してくれ。
405デフォルトの名無しさん:2007/08/23(木) 16:00:47
>>400
うをを。DescentてEclipseプラグインのアレだよね。
俺もちょっと入れてみよう。
デバッガが動くのか……
406デフォルトの名無しさん:2007/08/23(木) 16:18:27
なんだ日本じゃないのか・・・
せめて北海道〜九州くらいなら考えるんだがシアトルなんか行けないや
407デフォルトの名無しさん:2007/08/23(木) 17:48:45
>>406 公式ページくらい見ろw
日本で開催されるわけないだろw
408デフォルトの名無しさん:2007/08/23(木) 17:51:32
そう言わずに開催しようぜ!
409デフォルトの名無しさん:2007/08/23(木) 18:03:47
日本ってユーザー数は結構世界的な割合で見ても多いはずなんだけどな
英語できる人少ないから開発やデバッグへの貢献度が低いと見なされてそう

日本でミニカンファレンス開催して意見や要望や成果等をまとめてウォルタンに提出したりするのは良いアイデアかもしれん
先立つものがないけどな
410デフォルトの名無しさん:2007/08/23(木) 18:32:44
このスレの議論まとめればいいんじゃね?
411デフォルトの名無しさん:2007/08/23(木) 18:35:46
ここで出たバグって誰か本家に報告してる?
412デフォルトの名無しさん:2007/08/23(木) 18:37:32
このスレの議論のまとめ英語版をWikiとかで作ればいいんだよな

じゃ あとはまかせた

>>411 報告しといたってレスついてるのは報告されてるけど
それ以外は質問者が報告してないのなら誰も報告してないんじゃね
413デフォルトの名無しさん:2007/08/23(木) 20:12:44
まとめWikiか。
既存のwikiにうんざりして自前でDのWikiを実装しようと計画して何もしてない俺。
k.inabaたんのdikiでも荒らしてくるか
414デフォルトの名無しさん:2007/08/23(木) 20:24:49
DのCGIフレームワークとか作ってくれたら神
415デフォルトの名無しさん:2007/08/23(木) 20:55:27
CGIってももどうかと…
いっそWebサーバとWebアプリケーションフレームワークを作ってくれ
416デフォルトの名無しさん:2007/08/23(木) 20:57:49
そして完成を目前にしてD3.0が出てうわああああああって
417デフォルトの名無しさん:2007/08/23(木) 21:26:28
>>416
そんなのいつものことじゃんw
418デフォルトの名無しさん:2007/08/23(木) 21:41:08
>>415
よく考えたら通信ライブラリも碌なのがないんだよな。
Tangoのもちゃちっぽいし。
419デフォルトの名無しさん:2007/08/23(木) 23:21:36
DにWebサーバ系は期待してないんだよなぁ〜。Javaでいいじゃん。
どちらかといえば、パッケージウェア作るための強力な言語になってもらいたいなぁ。
420デフォルトの名無しさん:2007/08/24(金) 00:35:17
確かMangoにHTTPサーバやサーブレットのライブラリがあった希ガス
大部分のMangoはTangoに吸収されたけど、プラスアルファなライブラリとして
こっち系に特化してくらしい。ちなみにMangoに入ってる文字コード変換のICUも
お手軽で便利だよ。(ICU本体のサイズは馬鹿デカイが)
421デフォルトの名無しさん:2007/08/24(金) 00:54:17
ICUのDバインディングを提供してんのか
それいいな

あれのC++インタフェースはダサダサだからな……
422デフォルトの名無しさん:2007/08/24(金) 17:29:13
Dにもannotationほしいなー

bool nonNull(T : object)(T x) { return x !is null; }
bool lessThan(T)(T max, T x) { return x < max; }

class C {
object getObject(object[] a, uint i @ lessThan(a.length)) @ nonNull { return a[i]; }
int a @ lessThan(5);
}

これが、
class C {
object getObject(object[] a, uint i)
in { assert(i < a.length); }
out(o) { assert(o !is null); }
body { return a[i]; }

int a;
invariant(){ assert(a < 5);}
}
みたいになるの。

定義と契約を近い位置に書けて、結構いいと思うんだけどなあ。
423デフォルトの名無しさん:2007/08/24(金) 19:34:44
それあったら使いたいなあ
契約のテンプレートみたいな?
424デフォルトの名無しさん:2007/08/24(金) 20:26:07
>>422
上と下でそんなに書き易さが違うとも思えないのだが…
425デフォルトの名無しさん:2007/08/24(金) 22:32:35
>>424
何いってんの?
426デフォルトの名無しさん:2007/08/24(金) 22:47:31
Javaのannotationの事だとしたら、アレは契約とは関係ないと思うが。
Dにゃ.classみたいな独自のコンパイル形式無いし(ああ欲しい)。
ん? それも込みでってことか?

でもDの契約に関しては、確かに>>422くらいのが欲しいって気はする。
特にIDEとかddocとかに優しくない。

たとえばこう書いたら、

bool nonNull(T : object)(T x) { return x !is null; } /// nullではない。
bool lessThan(T)(T max, T x) { return x < max; } /// @{max}未満。

ddocとか、IDEでgetObjectをポイントしたときのツールチップには
こう出てきて欲しいなぁって。

object getObject(object[] a, uint i)
 (中略)
 契約:
  a: nullではない。[nonNullへのリンク]
  i: a.length未満。[lessThanへのリンク]
  戻り値: nullではない。[nonNullへのリンク]
427デフォルトの名無しさん:2007/08/24(金) 23:19:24
>>426
すまね。Javaは知らんわ。
428デフォルトの名無しさん:2007/08/24(金) 23:57:52
昨日と今日のDカンファレンスはなんか面白いことなかったんかいのぅ?
429デフォルトの名無しさん:2007/08/25(土) 00:00:50
あったはずなんじゃがのぅ 誰も行ってないのかもしれないのぅ
430426:2007/08/25(土) 00:17:48
>>427
あり? 違うのか。ごめん。
だとしたら何のannotation?
431デフォルトの名無しさん:2007/08/25(土) 01:00:25
>>430
そのまんまJavaのアノテーションとは関係なくて
DbCの構文糖が欲しいという話じゃねーの
in-out-body構文はちょっと異端すぎるからな

>>428
どっかに報告上がってないのかな
432デフォルトの名無しさん:2007/08/25(土) 02:34:29
わちきみたいなジャパニーズにはニュースグループの英語とか碌に読めんしのぅ
くやしいのぅくやしいのぅ

公式とWalterたんのサイトとWiki4Dとdigitalmars.Dには情報出てない気がする
英語読めないからもしかしたら書いてあるのかもしんないけど
433デフォルトの名無しさん:2007/08/25(土) 03:42:15
どうやら参加したらしい人
ttp://larsivi.net/blog/
どうやら参加できなかった人
ttp://dblog.aldacron.net/2007/08/23/the-2007-d-programming-language-conference/
まぁ、大した情報はない。結構オフ会的な雰囲気っぽいし。FAQによれば、
* Will the conference be video taped?
Yes, though it will take some time to process them.
とのことなので、そのうちどっかに動画がアップロードされるかもね。
434デフォルトの名無しさん:2007/08/25(土) 18:57:42
オフ会的な雰囲気ならなおさらジャパニーズの存在をアピールせならぬというのに・・・
435デフォルトの名無しさん:2007/08/25(土) 19:20:03
どう書く?orgでのDの不人気は異常
436デフォルトの名無しさん:2007/08/25(土) 19:50:19
いつかのウォルたんのプレゼンでも置いときますね
ttp://video.google.com/videoplay?docid=-7073020265668105471
437デフォルトの名無しさん:2007/08/25(土) 21:49:28
>>435 なんで不人気なの?
438デフォルトの名無しさん:2007/08/25(土) 21:58:20
泥臭い実用言語系なのにちっとも実用的じゃないからじゃね?
439デフォルトの名無しさん:2007/08/25(土) 22:23:21
実用的じゃん
440デフォルトの名無しさん:2007/08/25(土) 23:07:23
言語仕様だけは実用的なんだがな・・・
441デフォルトの名無しさん:2007/08/25(土) 23:11:14
ころころ変わらなければな
442デフォルトの名無しさん:2007/08/25(土) 23:19:33
言語仕様は実用性を目指してるんだが、
その言語仕様が ころころ変わるので実用にむいてない。
443デフォルトの名無しさん:2007/08/26(日) 00:02:42
でもver 1.xxの範囲はある程度fixされるんじゃないのかな?
そのためにブランチしたんだと思っていたけど・・・
444デフォルトの名無しさん:2007/08/26(日) 00:11:15
そんな焦んなよー
445デフォルトの名無しさん:2007/08/26(日) 00:36:58
>>443
1.xにはもう大きな変更はないと思うよ
変更するメリットないだろ

遊ぶなら2.xなんだけど今のwin32.windowsをimportして
Ansi/UnicodeスイッチできるようにTCHAR[]を使って
Windowsプログラミングをすると.dup.ptrの嵐になってひどいことに

TCHAR[]相当の型を考え直さないといけないな
446デフォルトの名無しさん:2007/08/26(日) 01:14:30
Win32のラッパライブラリ書けばいいんじゃね?
447デフォルトの名無しさん:2007/08/26(日) 04:15:26
windowsが糞なだけだろそれにDあわせるひつようねえ

実用性の話はしらんけど
448デフォルトの名無しさん:2007/08/26(日) 11:14:16
windowsなら素直にC#使っとけって話だ
449デフォルトの名無しさん:2007/08/26(日) 11:23:54
>>435
Haskellが意外に使われててびっくりした
スレの過疎ぶりから、てっきり終わった言語だと思ってたのだが
450デフォルトの名無しさん:2007/08/26(日) 11:42:48
同じ関数型でLispの系列が人気あるのは分かるけど
ML系列とかはそれほどでもないね
PythonはRubyより人気高いね

勿論投稿者の層が偏っているというのはあるだろう
多分学術系寄りに(というか情報科の学生に)
そう思えば大して意外な結果でもないな
451デフォルトの名無しさん:2007/08/26(日) 14:15:36
452デフォルトの名無しさん:2007/08/26(日) 14:16:10
Dカンファレンスのスライド
http://d.puremagic.com/conference2007/speakers.html
453デフォルトの名無しさん:2007/08/26(日) 14:31:40
色々言いたいけどAST macroとstatic foreachだけでお腹いっぱい。
Functions & Templates OverloadingとUniform Function Call Syntaxはやっとという感じ。
って事で次verまだー?
454デフォルトの名無しさん:2007/08/26(日) 15:03:01
写真見たけど思った以上に参加人数少なめだな
455デフォルトの名無しさん:2007/08/26(日) 15:56:18
今DirectX使ってちまちまなんか作ろうとしたら参考になるサイトある?
456デフォルトの名無しさん:2007/08/26(日) 21:00:51
>>451-452
これは・・・
どこかのエロい人がいくつかピックアップして
どこかでコメントしてくれるのを期待
457デフォルトの名無しさん:2007/08/26(日) 21:48:00
alias thisって委譲っぽい機能があるね。
COMプログラミングが楽になりそう。これは期待

struct M { int a; }
struct S {
 M m;
 alias m this;
 int b;
}
S s;
s.a; // refers to s.m.a
s.b; // refers to s.b
458デフォルトの名無しさん:2007/08/26(日) 21:51:48
ちょっと誰か助けてくれプログラムをコンパイルしようとすると怒られるんだ
なんかリンクできねーよボケって怒られてるんだけど user32.libと一緒に投げてみても怒られるしどうしたものやら

>dmd test.d
C:\dmd\bin\..\..\dm\bin\link.exe test,,,user32.lib+user32+kernel32/noi;
OPTLINK (R) for Win32 Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved

test.obj(test)
Error 42: Symbol Undefined _D5win327winuser13CreateWindowAFPaPakiiiiT5win325win
nt6HANDLET5win325winnt6HANDLET5win325winnt6HANDLEPvZT5win325winnt6HANDLE
--- errorlevel 1

今見てるサイト
ttp://www.kmonos.net/alang/d/windows.html
ttp://web.kyoto-inet.or.jp/people/ysskondo/chap2.html
ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_createwindow.asp

使ったWindows.h的なもの ↓の#201
http://www.prowiki.org/wiki4d/wiki.cgi?WindowsAPI

これDスレで聞く内容じゃねーよボケとかだったら誘導してくれるとありがたい
459デフォルトの名無しさん:2007/08/26(日) 22:10:02
>>456
Kris Bellの配列スライシングの話(無理やり改変コピペ)

LV0 D言語?どうせC++にもJavaにもなれない半端な言語だろ?どうでもいいよ…
LV1 ふーん…ネイティブバイナリを吐くのか。ってかGCあるから一定のスループットが必要な用途には不適じゃないの?
LV2 malloc/freeの直接呼出しとか…ちょっといいかも…
LV3 やっべnew & deleteオーバーライドまじヤッベ
LV4 やべぇ値型structとかscope属性とかフリーリストもすげぇ使える…返り値配列の手書きcopy-on-writeだけ邪魔だ
LV5 マジこの返り値配列どうにかなんねぇのか?マジウゼェ…
LV6 配列スライシング結婚してくれ!
LV7 やべぇ配列スライシング最高!配列スライシングの参照返しさえあれば生きていける!
LV8 配列スライシングでHTTPサーバ書いた!俺はDでGCほとんどゼロのHTTPサーバ書いたぞ!!
LV9 やっぱDは最高だわ
MAX ウォルターたんとちゅっちゅしたいよぉ〜
460デフォルトの名無しさん:2007/08/26(日) 23:05:05
alias thisとな kwsk
461デフォルトの名無しさん:2007/08/26(日) 23:27:36
>>458
CreateWindowAはwinuser.dの中で普通に関数定義されている(ポーティング関数ではない)から、bud(build)などを使って一緒にコンパイルするようにするか、または前もって.libを作っておいてそれをリンクするようにしないと使えない。
急場しのぎとしては、CreateWindowExAの方を使ってみるといい。
CreateWindowExAはポーティング関数だから、ライブラリをビルドしなくても使えるよ。
462デフォルトの名無しさん:2007/08/26(日) 23:37:47
>>460
>>457 がすべて
463デフォルトの名無しさん:2007/08/27(月) 00:38:52
ttp://www.prowiki.org/wiki4d/wiki.cgi?WindowsAPI
これのtrunkを取得するアドレスってどこになるんでしょうか?

ttp://www.dsource.org/projects/bindings/browser/trunk/win32
に接続しようとしても繋がらないのですが

>>458はどうやって#201を入手したのかな
464デフォルトの名無しさん:2007/08/27(月) 02:08:46
465デフォルトの名無しさん:2007/08/27(月) 06:29:48
win32.winuser.dのコンパイル後の物体をリンクせよってこと?
test.dの中でimportしててもダメ?importってCとかでいう#include <XXXX.h>とは違う動作?
とりあえずCreateWindowExAの方使うようにしてみたらコンパイル通ってウィンドウ出せたよ!

>>463
ttp://www.dsource.org/projects/bindings/changeset/201/trunk/win32?old_path=%2F&format=zip
これ
466デフォルトの名無しさん:2007/08/27(月) 09:53:41
static foreach
について誰か悔しく
467デフォルトの名無しさん:2007/08/27(月) 10:12:49
>>459
おちゅ
配列にかたよっている気もするけど、
原文もそうなの?
俺もそんな感じで、いまLV7、9ってきがす

468デフォルトの名無しさん:2007/08/27(月) 10:18:34
>>466
名前的に、
import std.metastrings;
static foreach(i; 0..10) {
mixin("int i" ~ ToString!(i) ~ ";");
}
とかできるんでないの?、と思ってスライドみたら、
コンパイラが最適化で勝手にやってくれてもよさそうな例しかのっとらんな。
469461:2007/08/27(月) 11:54:33
>>465
>win32.winuser.dのコンパイル後の物体をリンクせよってこと?
基本的にはそういうこと。
例外として、 -inline付きでコンパイルすると、関数がインライン化して消えるからOK、というのがある。
-inline付きでコンパイルすれば、CreateWindowAでもコンパイル通るんじゃないかな。

>importってCとかでいう#include <XXXX.h>とは違う動作?
importはシンボルを読み込むだけだから、Cで言うと、宣言だけが書かれたヘッダファイルをインクルードした状態と同じになる。
対象モジュールに実体があるときは、コンパイルしたものをリンクしないといけない。(基本的には)
470デフォルトの名無しさん:2007/08/27(月) 18:16:13
うぉるたんのスライド見てDは難読コードコンテストで常勝できる言語になると確信したぜ
471デフォルトの名無しさん:2007/08/27(月) 18:45:40
>>470
>難読
それはヲルタンの意図と反するんだろうねw
472デフォルトの名無しさん:2007/08/27(月) 19:15:34

  <⌒/ヽ-、___ macro実装されたら起こしてクリ。
/<_/____/
473デフォルトの名無しさん:2007/08/27(月) 19:52:56
>>469
なるほど
ちゅうか公式のimportの説明読んだらシンボルうんぬんってちゃんと書いてあったわ うんこちゃんですまんこ

-inlineつけてやってみたけど相変わらず
Error 42: Symbol Undefined _D5win327winuser13CreateWindowAFPaPakiiiiT5win325win
nt6HANDLET5win325winnt6HANDLET5win325winnt6HANDLEPvZT5win325winnt6HANDLE
--- errorlevel 1
って言われる件 -inlineつけてもシンボルだけimportなら関数の中身とか展開してくれない気がするのは気のせい?
474デフォルトの名無しさん:2007/08/27(月) 20:37:28
inlineは関係ないだろ
475デフォルトの名無しさん:2007/08/27(月) 23:20:36
>>459
LV5 マジこの返り値配列どうにかなんねぇのか?マジウゼェ…
LV6 配列スライシング結婚してくれ!

え?これ何に気が付いたってことなのかな?
476デフォルトの名無しさん:2007/08/27(月) 23:59:31
>>467
偏ってるも何も配列スライシングで無駄なメモリコピーが抑制できるという話

>>475
元ネタはここ
ttp://ex20.2ch.net/test/read.cgi/gline/1175011762/
解説曰く
> レベル5で嫌いな対象を作り、レベル6でなぜかいきなり結婚とか飛躍。
> レベル8まで盛り上げたところでレベル9で本命らしきところに落ち着くというパターン。
> MAXは後から付けられたようだ。
らしい
477デフォルトの名無しさん:2007/08/28(火) 00:07:03
>>464-465
アドレスthx

>>473
bud使いなはれ
478デフォルトの名無しさん:2007/08/28(火) 00:08:22
>>476
元ネタは知ってるんだけど
配列スライシングと返値配列がどう関係あるのかわからなくて
479461:2007/08/28(火) 00:21:58
>>473
>-inlineつけてやってみたけど相変わらず
確かに-inlineだけだとだめだった。
手元で試してみたら、-releaseと-inlineがあって-gが無い場合にインライン展開してた。
中途半端なこと言ってすまん。
480デフォルトの名無しさん:2007/08/28(火) 00:22:17
>>477
dsss使ってみたら世の中のすごさに感動した
budのがいいの?
481デフォルトの名無しさん:2007/08/28(火) 00:26:03
>>480
俺はbud派だけどDSSSでもいいよ
DSSSでうまくライブラリをインストールできないことが多かったから
使い慣れたbudでいいやと思ってそのままなだけだから
482デフォルトの名無しさん:2007/08/28(火) 00:30:28
>>479
ほんとだ、-release -inlineで通ったわ なんで通るんだろ なんかキモい気がする

>>481
把握 dsssで難儀したらそっち使ってみるよ
483デフォルトの名無しさん:2007/08/28(火) 00:56:42
bud は bud なのか build なのかハッキリしる
484デフォルトの名無しさん:2007/08/28(火) 02:19:38
じゃあここではbudで
485デフォルトの名無しさん:2007/08/28(火) 16:46:10
dsssの使い方がよくわからん……。
bud更新止まってるし移った方がいいかなと思ってるんだが。

budのbuild.brfとかbuild.cfgみたいに外部ファイル参照できるんだよね?
486デフォルトの名無しさん:2007/08/29(水) 03:08:54
ポストインクリメントとプリインクリメントを使い分ける場面が思い浮かびません><
487デフォルトの名無しさん:2007/08/29(水) 03:11:47
全部前置でいいよ。
いまどき長い式の中でインクリメントの結果を使うの流行らんし。
488デフォルトの名無しさん:2007/08/29(水) 06:25:58
if(i++ == a)
くらいでしかつかわん
489デフォルトの名無しさん:2007/08/29(水) 06:31:00
俺はifよりはforの条件式で使うほうが多いけど、要するに同じ使い方だね。
490489:2007/08/29(水) 06:32:12
ってすまん、Cのスレと間違えた。
491デフォルトの名無しさん:2007/08/29(水) 11:18:03
わなD消えた?
492デフォルトの名無しさん:2007/08/29(水) 13:24:54
消えてないよ
493デフォルトの名無しさん:2007/08/29(水) 19:49:28
昼頃なんか公式の日本語訳も繋がりにくかったな
まぁなんかあったんじゃね?
494デフォルトの名無しさん:2007/08/29(水) 20:26:28
Windowsでの文字コード問題を根本から解決しそうなコードktkr
http://d.puremagic.com/issues/show_bug.cgi?id=1448
495デフォルトの名無しさん:2007/08/29(水) 20:41:53
一応文字は読めるけど表示がメタメタになるな。
496デフォルトの名無しさん:2007/08/29(水) 23:49:31
gdcでモジュールを読み込むための
デフォルトのフォルダを指定する方法ってない?
C_INCLUDE_PATHみたいなやつ。

いちいち-Iで指定しないとダメかな?
497デフォルトの名無しさん:2007/08/30(木) 01:33:40
dmdのsc.iniみたいなのはないのか?
498496:2007/08/30(木) 11:15:52
>>497
ないみたい。

また、環境変数でDFLAGSを定義しても、gdcには関係ないようだ。
499デフォルトの名無しさん:2007/08/30(木) 15:55:58
specs ファイルでできんか?
500デフォルトの名無しさん:2007/08/30(木) 16:08:43
まだかなまだかな更新まだかな
501デフォルトの名無しさん:2007/08/30(木) 18:58:34
学研のおばちゃんまだかな
502デフォルトの名無しさん:2007/08/30(木) 18:59:16
なぜ学研?
503デフォルトの名無しさん:2007/08/30(木) 19:05:24
俺ももうおっさんなのかなと思ってしまった瞬間
504デフォルトの名無しさん:2007/08/30(木) 19:06:26
そういやあのCM最近見ないな
505デフォルトの名無しさん:2007/08/30(木) 19:33:08
こんなにも俺がいる
506デフォルトの名無しさん:2007/08/30(木) 19:57:47
>>502は平成生まれ

TangoのVer.1.0もリリース近いんだっけ?
507デフォルトの名無しさん:2007/08/30(木) 20:20:39
Tangoなぜだか避けてたんだがPhobosから移るほどの価値ってある?
今は特に不自由してないんだが
508デフォルトの名無しさん:2007/08/30(木) 20:25:44
人それぞれとしか言いようが無い
Phobosは放置状態なのでバグもずっと残ったままになってる
スレッド関係とかはまったく使い物にならない感じ
509デフォルトの名無しさん:2007/08/30(木) 20:43:18
まぁうぉるたんにはD作ってほしいしなぁ
Phobosってメンテナみたいなのいないの?
あとTangoってPhobos乗っ取る!みたいなこと言ってるけど公式に置き換えられることってあるのかな?
510デフォルトの名無しさん:2007/08/30(木) 20:59:05
おれもそれ気になるわ Tangoの位置づけがいまいちよくわからん
標準ライブラリに採用されるなら安心して使いまくれるんだけど
511デフォルトの名無しさん:2007/08/30(木) 22:55:45
Tango1.0と2.0って互換性ある?
512デフォルトの名無しさん:2007/08/31(金) 00:11:53
Tango1.0とD2.0のことならないだろ
513デフォルトの名無しさん:2007/08/31(金) 00:14:25
>>512
スマンまぎわらしかった Tango1.0とTango2.0のこと
514デフォルトの名無しさん:2007/08/31(金) 03:17:12
質問いいですか?
コンストラクタ内で delete this; をすると、何か問題はありますか?
コンストラクタ内で初期化に失敗したときに、例外を発生させて、

this()
{
scope(failure) delete this;

A = new Class_A();
B = new Class_B();
C = new Class_C(); //C.this()で例外発生。
}

~this()
{
delete A; //delete.
delete B; //delete.
delete C; //C is null.
}

のようにして、例外が発生する前に生成したクラスオブジェクトを
deleteしたいのですが、どうでしょうか?
515デフォルトの名無しさん:2007/08/31(金) 06:20:14
あ、おばちゃんだ。
516デフォルトの名無しさん:2007/08/31(金) 16:04:48
this()
{
A = new Class_A();
scope(failure) delete A;
B = new Class_B();
scope(failure) delete B;
C = new Class_C();
scope(failure) delete C;
...
}
517デフォルトの名無しさん:2007/08/31(金) 21:18:50
>>514
Dはデストラクタ内でdeleteって推奨されてないみたい
ttp://www.kmonos.net/alang/d/class.html#destructors
518514:2007/09/01(土) 00:45:14
レスありがとうございます。

>>516
そういう様にしたほうがいいですかね。
delete this を使うと、メンバオブジェクトへの delete は、
デストラクタに1度書けば済むので、楽かなと思いました。

>>517
この辺はあまりしっかり読んでいませんでした。
GCがデストラクタを呼び出すときのことですね?
明示的にdeleteを実行することを鉄則とすれば、
大丈夫そうな気もしますが少し悩みますね。
519デフォルトの名無しさん:2007/09/01(土) 00:59:07
try-catch-finallyイディオムでのcatch内returnを書くのを躊躇するのと似てるな。
520デフォルトの名無しさん:2007/09/02(日) 03:18:49
更新がほしいよう
521デフォルトの名無しさん:2007/09/02(日) 05:21:48
休み明け更新あげ
522デフォルトの名無しさん:2007/09/02(日) 12:04:42
Linux版のGDCはなんで0.22で更新止まってしまったん?(´・ω・`)
523デフォルトの名無しさん:2007/09/02(日) 12:19:40
前Windowsのテーマ(ハックって)変更してるとTangoで作ったexeゲロ吐いて動かなかったけど直ってるかなぁ?
524デフォルトの名無しさん:2007/09/02(日) 12:35:24
Tangoで作ったエロゲーexeが動かなかった と読んでしまった
525デフォルトの名無しさん:2007/09/02(日) 12:46:53
それはないwwwwwwwww
526デフォルトの名無しさん:2007/09/02(日) 13:03:43
>>522
0.24あるがな。
527デフォルトの名無しさん:2007/09/02(日) 13:09:43
528デフォルトの名無しさん:2007/09/02(日) 13:30:33
>>527
D News Groups(news.digitalmars.com)のD.announceかD.gnuを見てればおk
529デフォルトの名無しさん:2007/09/02(日) 14:00:15
Tangoのphobos.lib、なんかプログラム終了時にオブジェクトのデストラクタが呼ばれない……
下はテストに使ったソースね

extern (Windows) int MessageBoxA(void*, char*, char*, int);

class A
{
~this ()
{
// Tango の phobos.lib だと呼び出されない...
MessageBoxA(null, "destruct!", "Message", 0);
}
}

extern (C) int printf(char*, ...);
void main()
{
auto o = new A;
printf("object: %p\n", o);

}
530デフォルトの名無しさん:2007/09/02(日) 14:06:03
scopeオブジェクトでないオブジェクトのデストラクタが呼ばれることは保証されてないよ。

http://www.digitalmars.com/d/class.html#Destructor
> The garbage collector is not guaranteed to run the destructor for all unreferenced objects.
531デフォルトの名無しさん:2007/09/02(日) 14:12:05
保証したければ最後に fullCollect() を呼ぶ。
532デフォルトの名無しさん:2007/09/02(日) 14:47:50
つまりGCによってメモリ開放されるのとデストラクタが呼ばれるのは別なの?
533デフォルトの名無しさん:2007/09/02(日) 14:49:45
>>530-531
保証はないのか……
「デストラクタでリソースのハンドルを閉じる」とか、そのままじゃ出来ないな
>>531 みたいな感じでやってみます
情報に感謝
534デフォルトの名無しさん:2007/09/02(日) 15:11:04
>>532
プロセスが終了すればそのプロセスが取得した記憶域はOSに返却されるわけで、
わざわざプログラムの終了時にガベッジコレクタがメモリを整理する必要はない。
535デフォルトの名無しさん:2007/09/02(日) 16:46:56
>>533
RAIIの強制はこうするのがD言語流かと
scope class A {}
scope a = new A; // OK
auto a = new A; // NG
536デフォルトの名無しさん:2007/09/02(日) 16:52:13
deleteで明示的に呼び出すよりはfinalizeとかreleaseとかdestroyとかの関数を作って呼び出す方がいいのかもしれないな。

class CLS{
private bool finalized=false;
void somethingToDo(){/* ... */}
void finalize(){ finalized = true; }
~this(){ assert(finalized == true); }
}

int main(){
auto x = new CLS;
x.somethingToDo();
x.finalize();
}
537デフォルトの名無しさん:2007/09/02(日) 17:30:39
scopeの落とし穴。

scope class A {
this(){ writefln("A.ctor"); }
~this(){ writefln("A.dtor"); }
}

void main() {
scope a = new A;
a = null;
}
538デフォルトの名無しさん:2007/09/02(日) 17:41:50
>>537
それ、バグじゃね?
…いや、バグじゃないのか…?
というか、それが落とし穴になるならデストラクタっていらなくね?
539デフォルトの名無しさん:2007/09/02(日) 17:44:59
scopeはfinalもつくべきってこと?
540デフォルトの名無しさん:2007/09/02(日) 17:45:26
http://www.digitalmars.com/d/attribute.html#scope
> Assignment to a scope, other than initialization, is not allowed.
って書いてあるから、バグだな。
541デフォルトの名無しさん:2007/09/02(日) 17:45:39
どうでもいいけどActorにみえた
542デフォルトの名無しさん:2007/09/02(日) 21:53:10
たしか、scopeの挙動がおかしいのはずっと前にも出てたな。
543デフォルトの名無しさん:2007/09/02(日) 22:14:12
Dで書いたXMLライブラリまだかよ。
544デフォルトの名無しさん:2007/09/02(日) 22:18:49
interface書いてXercesでもラップしたら?
Xercesって「ざーさす」じゃなくて「くせるせす」らしいですよ奥さん
545デフォルトの名無しさん:2007/09/03(月) 01:44:49
546デフォルトの名無しさん:2007/09/03(月) 02:31:46
>>539
finalは関係ないんじゃないかな
変数aの方ではなくて
オブジェクトそのものの方にscope性があるべきだと思う
547デフォルトの名無しさん:2007/09/03(月) 04:44:30
>>543
Mango に SAX なパーザがあるぞ
548デフォルトの名無しさん:2007/09/03(月) 06:17:59
Manco に SEX まで読んだ
549デフォルトの名無しさん:2007/09/03(月) 08:31:46
>>543
tinyxml
550デフォルトの名無しさん:2007/09/03(月) 14:25:23
>>543
俺はexpat
551デフォルトの名無しさん:2007/09/04(火) 17:51:44
dgccのD2.0の奴まだですか?
552デフォルトの名無しさん:2007/09/04(火) 18:59:22
DMD2.004まだ?
553デフォルトの名無しさん:2007/09/04(火) 21:10:17
554デフォルトの名無しさん:2007/09/04(火) 21:24:33
やった!化けない!

import smjg.libs.util.all;
void main(){
 cOut.writefln("こんにちは世界");
}

しかも cOut の関数インタフェースはこんな感じ(なんかおかしいのあるけど)
ttp://pr.stewartsplace.org.uk/d/sutil/ref/classsmjg_1_1libs_1_1util_1_1console_1_1ConsoleOutput.html

void write (dchar c)
void write (string c)
void writeLine (string c)
void write (string str)
void writeLine (string str)
void writef (...)
void writefln (...)
void writefx (TypeInfo[] arguments, void *argptr, bool newline=false)
void flush ()
555デフォルトの名無しさん:2007/09/04(火) 21:42:10
import smjg.libs.util.all;
void main(){
 while (!cIn.eof()){
  string line = cIn.readLine();
  cOut.writefln("「", line, "」");
 }
}

パイプを使うとエラー
dir | main.exe

リダイレクトならおk
dir > out.txt
a < out.txt
556デフォルトの名無しさん:2007/09/04(火) 21:42:43
最後の行を間違えた
main.exe < out.txt
557デフォルトの名無しさん:2007/09/05(水) 07:00:14
>>554こんにちは世界って書くとスクールデイズを思い出すな
558デフォルトの名無しさん:2007/09/06(木) 04:01:35
DMD 2.004 リリース

…ん?
Aug 26, 2007?
559デフォルトの名無しさん:2007/09/06(木) 04:27:41
見たとこCTFEの厄介なバグの大部分が修正されてるっぽい。
正直やっとという感じがしないでもないけど。
UTF-8関連のが入ってるのでWindowsな人感想よろ。
std.hiddenfuncはドキュメント無いけどバックエンドの変更っぽいのでユーザーは気にする必要なさそう。
560デフォルトの名無しさん:2007/09/06(木) 04:42:55
>>558
自己レス
日付修正された
561デフォルトの名無しさん:2007/09/06(木) 05:00:42
CTFE、std.string.lettersとかがまだ駄目っぽい。
562デフォルトの名無しさん:2007/09/06(木) 05:50:45
DMD 1.021 リリース
に触れるの忘れてた
563デフォルトの名無しさん:2007/09/06(木) 10:40:19
CTFEって何?
564デフォルトの名無しさん:2007/09/06(木) 11:01:00
Compile Time Function Execution
565デフォルトの名無しさん:2007/09/06(木) 11:20:56
What's New for D 2.004
Sep 5, 2007
New/Changed Features
Added command line switches -defaultlib and -debuglib
Bugzilla 1445: Add default library options to sc.ini / dmd.conf
Changed result type of IsExpression from int to bool.
Added isSame and compiles to __traits.
Added optional TemplateParameterList to IsExpression.
Added warning when override is omitted.
Added std.hiddenfunc.
Added trace_term() to object.d to fix Bugzilla 971: No profiling output is generated if the application terminates with exit
Multiple module static constructors/destructors allowed.

とりあえずはっとくね
566デフォルトの名無しさん:2007/09/06(木) 13:27:43
2.004の隠し機能
-__EOF__
-q{test}やq"!test!"など
-ClassInfoのgetMembersはまだ実装完了してないっぽい。
567デフォルトの名無しさん:2007/09/06(木) 14:41:10
ttp://www.dsource.org/projects/bindings/browser/trunk

win32/winnt.d(1454): const LUID SYSTEM_LUID = { QuadPart:999 };
がdmd2.004でコンパイルエラー
コンパイラのバグかな

>>564
thx

>>566
macroが来てしまうのか
難読コードユーザ狂喜乱舞
568デフォルトの名無しさん:2007/09/06(木) 14:54:18
最近D言語wiki更新されませんね・・
569デフォルトの名無しさん:2007/09/06(木) 14:57:54
>>567
macroはまだ来ないとおも。
リフレクションが先っぽ。
570デフォルトの名無しさん:2007/09/06(木) 16:40:41
>>566
q{test} って不要なような気がするなあ、
というか、この構文は将来の言語拡張の可能性を大きく減じるんじゃないだろうか。
個人的には構造体・クラスリテラルに使ってほしかったんだけど。
571デフォルトの名無しさん:2007/09/06(木) 17:04:28
>>570
rubyのようなイテレータを実装して且つpythonのように式で使えるようにしない限りは構文的問題は無いと思う。
でも別の理由からq{test}じゃなくてtoken("test")かもしくはtoken型として欲しいなぁ。
Delimited StringsとToken Stringsの両方が「q」では紛らわしいし、リテラルだとtoken(foo)とできないし。
572デフォルトの名無しさん:2007/09/06(木) 20:38:38
>>566
>getMembers
うっひょー、そんなのくるんだ
573デフォルトの名無しさん:2007/09/07(金) 02:32:24
Added command line switches -defaultlib and -debuglib
これって、Tangoとか使いやすくするように―とかの思惑があったりするのかな。
574デフォルトの名無しさん:2007/09/07(金) 03:53:57
>>573
リフレクションかなとおもた
例えばflectionedでスタックトレースを表示させようとしたら
-g付きでコンパイルしたphobos.libが必要だし
575デフォルトの名無しさん:2007/09/07(金) 07:20:38
__EOF__ってなんにつかうの
576デフォルトの名無しさん:2007/09/07(金) 07:22:16
ここが終わりですよとしらせるため
以降何があっても読みません






















___EOF___
577デフォルトの名無しさん:2007/09/07(金) 07:40:55
なんかちがうぞwww

__EOF__の意味自体はほかの言語から予想ついてたけど、それ自体に使いどころって思い浮かばない
578デフォルトの名無しさん:2007/09/07(金) 09:45:04
エスケープシーケンスの代わりじゃないかな
579デフォルトの名無しさん:2007/09/07(金) 11:01:33
__EOF__以降にバイナリを埋め込んで自分自身をimport(__FILE__)して扱うとか。
......どう考えても役に立ちそうにないか。
580デフォルトの名無しさん:2007/09/07(金) 13:01:26
えろい人たちに質問!
某h.Sさんのとこから字句解析パクって来てDの色付けエディタもどきつくってるんだけど、
「コメント」と「ネスト可能なコメント」と「文字列」と「WISIWYG文字列」の正規表現がよくわからないんだ。
暇だったら教えてください。お願いします。
言語はJSです。
581デフォルトの名無しさん:2007/09/07(金) 13:19:01
コード全体をコピペして、古いコードは__EOF__以下においてっと・・・
なんて事にならないといいな
582デフォルトの名無しさん:2007/09/07(金) 13:22:51
__EOF__ が来るってことは __DATA__ も来るんだろうな?
583デフォルトの名無しさん:2007/09/07(金) 17:16:34
>>580
そもそも正規表現ってネストを表現できたっけ?
584デフォルトの名無しさん:2007/09/07(金) 17:24:10
正規表現はネストを表現できないよ
perlの拡張文法とか使わんとミリ
585デフォルトの名無しさん:2007/09/07(金) 19:48:27
有限の入れ子回数のネストなら表現できるよ。
あんまりスマートじゃないけど、コメントのネストなら
実用上はそれで十分じゃね?
586デフォルトの名無しさん:2007/09/07(金) 20:11:47
__EOF__ って、コードの後ろにドキュメント書けるようにってことか?
587デフォルトの名無しさん:2007/09/07(金) 20:26:08
ドキュメントならHTML埋め込みかDDocでいいだろ。
588デフォルトの名無しさん:2007/09/07(金) 20:39:44
もっとお手軽なメモ的なものを書きたいときに使うんでしょ
589デフォルトの名無しさん:2007/09/07(金) 20:45:14
dmd v2.004にしたら今までコンパイル通ってたプログラムがコンパイル通らなくなった件
Wiki4Dのwindows.hPort#201使ってるんだけどウィンドウ表示するだけのプログラムコンパイルすよーとすると怒られる

Error: 'QuadPart' is not a member of 'const LARGE_INTEGER'

意味ワカンネ
590デフォルトの名無しさん:2007/09/07(金) 20:50:17
それ>>567でもう書いた
591デフォルトの名無しさん:2007/09/07(金) 20:52:40
>>586
import(__FILE__)で使うデータに決まってるだろ・・・
592デフォルトの名無しさん:2007/09/07(金) 20:56:10
>>590
なんということであろうか
余は大変恐縮している
2.003に戻しとくか…
593580:2007/09/07(金) 21:02:05
>>583-585
そっかー。あきらめるよ。
返信ありがとう。
594デフォルトの名無しさん:2007/09/07(金) 22:01:17
Dで使えるソース整形ツールってある?
ソース綺麗に書くのめんどくさくなってきた
595デフォルトの名無しさん:2007/09/07(金) 22:10:13
めんどくさいからソースを汚く書くというのがよくわからん
596デフォルトの名無しさん:2007/09/07(金) 22:10:38
そのうちツール使うのめんどくさくなるんじゃね?
597デフォルトの名無しさん:2007/09/07(金) 22:42:25
俺がちゃんとエディタを使いこなしてないからなんだろーがswitch文とかなんかいろいろ書いてると気持ちよくインデントつけてくんないんだけど手動でイチイチ直すのまんどくせ
598デフォルトの名無しさん:2007/09/07(金) 23:04:33
{}←EnterEnterBksp でブロック書き始める俺
599デフォルトの名無しさん:2007/09/08(土) 08:37:47
ttp://www.digitalmars.com/d/lex.html
String Literalsが滅茶苦茶増えてるな
600デフォルトの名無しさん:2007/09/08(土) 09:15:03
writefln(q"EOS
This
is a multi-line
heredoc string
EOS"
);
( ^ω^)・・・
601デフォルトの名無しさん:2007/09/08(土) 09:43:56
>594
DSciTEは?
602デフォルトの名無しさん:2007/09/08(土) 09:54:53
Eclipse+Descentで良い感じで整形できますよ。
603デフォルトの名無しさん:2007/09/08(土) 10:33:44
>>600
なんで `` があるのに q"" まで作るんだろ
なんか文字列リテラル周りの意図がわからん
604デフォルトの名無しさん:2007/09/08(土) 12:19:47
>>601
使ってみた
とりあえずProgram Files以下につっこんだらマジメに働いてくれなかった
あとソース整形機能ついてる?

>>602
できんの?
今Descent 0.3.20070507入ってるけどやり方わかんねー

これはもう丁寧に気をつけて書きなさいということか
605デフォルトの名無しさん:2007/09/08(土) 19:12:40
>604
DSciTEはちょこちょこやらないと動かない。インストール方法のVideo Flushあるから参考にしてみてくださいや
ttp://d.whosme.de/view_movie.php?movie=tutorials/4_DScite/4_DScite_en.swf&language=en
ソース整形機能って class Hoge { って打って [Enter] を押したら自動的にインデントされる。とかならついてるよ。え?ちがう?
606デフォルトの名無しさん:2007/09/08(土) 19:16:25
DSciTE環境変数自動登録されないから、登録しなきゃ動かないものもある。
607デフォルトの名無しさん:2007/09/08(土) 19:43:35
DってさほんとにLex作りやすい仕様なの?
俺さ三流以下だけどさ、発狂しそうだよ。
以下のものを自分用に作ってたけど、疲れたから打ち切り。

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4904.zip
#HTAだけどWshはまだ使ってない。HTMLとしても動くよ。結構重いよ。ちょっとバグってるよ。
608デフォルトの名無しさん:2007/09/08(土) 19:48:44
他に比べてってことなんじゃない?知らないけど
C++とかはひどいってことかな
609デフォルトの名無しさん:2007/09/08(土) 19:57:45
>>605
例えばインデントゼロのウンコソース全体をぴゃっ!って直してくれるみたいなものを想像している俺です
610デフォルトの名無しさん:2007/09/08(土) 21:14:03
>>607
DはC++と違って文脈自由文法だから、圧倒的に簡単なはず。
611デフォルトの名無しさん:2007/09/08(土) 21:50:43
レキサと文法って何か関係あんのか
612デフォルトの名無しさん:2007/09/09(日) 00:48:05
どちらかというと、パーサの方だな
613デフォルトの名無しさん:2007/09/10(月) 02:13:43
>>604
ソースを「D Editor」で開いてから、「Ctrl+Shift+F」で整形されますよ。
Javaのフォーマッターと同じ使い方です。
バージョン0.4.3.20070907で確認しました。
↑落ち着いて書いた。
614デフォルトの名無しさん:2007/09/10(月) 05:42:08
import()はデータのEXE埋め込みとデータとコードの分離をしてくれるスグレモノって解釈でおk?
615デフォルトの名無しさん:2007/09/11(火) 09:49:08
ところでおまいら的にMiniDってどうよ?カッチリしたECMAScriptみたいな、けっこう至れり尽くせりな
仕様でDのコミュニティの中でローカルな存在になってるにはもったいないくらいの出来じゃないか。
616デフォルトの名無しさん:2007/09/11(火) 14:29:40
たのしそう
617デフォルトの名無しさん:2007/09/11(火) 22:15:57
>MiniD
squirrelとの違いが全然わからないんだけど・・・
ぱくってる?
618617:2007/09/11(火) 22:23:56
ごめんなさい
中身は全部Dで書いてあったよ・・・
SquirrelをD言語に移植したって感じ
Squirrelをいじってた俺にしてみりゃ、
こりゃすげーおもしろそうです。
619デフォルトの名無しさん:2007/09/12(水) 01:58:29
だれかTangoのドキュメントのchm作ってくれーっ!!
620デフォルトの名無しさん:2007/09/12(水) 02:36:09
っ [言いだしっぺの法則]
621デフォルトの名無しさん:2007/09/12(水) 03:12:41
いい加減何回も繰り返したネタだが…Tangoは標準になりうるのか?
というか、標準にならなくてもいいからPhobosと共存できさえすればいいのに…
622デフォルトの名無しさん:2007/09/12(水) 06:23:26
miniDおもしろそー
あとでよんでみよー
623デフォルトの名無しさん:2007/09/12(水) 14:10:58
C++でデリゲートもどきやプロパティもどきを書いててDなら……と思うのだが、
C++でなければならない理由があって泣けてくる
624デフォルトの名無しさん:2007/09/12(水) 16:07:50
C++でなければならない理由ってなに?
625デフォルトの名無しさん:2007/09/12(水) 18:13:52
Direct X

Squirrelを使えればまた便利なんだろうけど……MiniDに期待
626デフォルトの名無しさん:2007/09/12(水) 19:00:48
DでもDirectX普通に使えるけど
627デフォルトの名無しさん:2007/09/12(水) 19:01:09
628デフォルトの名無しさん:2007/09/12(水) 19:57:28
>>626
dx9/dx10のSDKライブラリにリンクできましたっけ?
htodも使い方に慣れてないので勉強したいと思います。

いずれにしても、素人向けのライブラリで、OpenGL/MacOSXでも使われたり、
IDEを使わせるのが前提だったり、言語使用に変わられたりすると困ったりするので、
まだ移行できずにいる状態です。
629デフォルトの名無しさん:2007/09/12(水) 20:33:28
>>628
>dx9/dx10のSDKライブラリにリンクできましたっけ?
本格的にやろうとするとポーティング作業がめんどいことになるけど、
基本的には難しいことは無いよ。
interface IDirect3DTexture9: IDirect3DBaseTexture9{
HRESULT GetLevelDesc(UINT Level, D3DSURFACE_DESC *pDesc);
HRESULT GetSurfaceLevel(UINT Level, IDirect3DSurface9* ppSurfaceLevel);
HRESULT LockRect(UINT Level, D3DLOCKED_RECT* pLockedRect, RECT* pRect, DWORD Flags);
HRESULT UnlockRect(UINT Level);
HRESULT AddDirtyRect(RECT* pDirtyRect);
}
とか宣言しておけばCOMオブジェクト使えるし。
630デフォルトの名無しさん:2007/09/12(水) 22:13:37
>>628
PlatformSDKとMicrosoft DirectX SDK (August 2007)入れてWiki4DのWindows.hPortいれてDirectX勉強してるけど一応できるっぽいよ
今までGUIプログラミングなんかしたことねーから俺はまだ三角形描けるくらいしかできてないけど
631デフォルトの名無しさん:2007/09/13(木) 01:01:52
Iron D
だれかつくんねーかな。
632デフォルトの名無しさん:2007/09/13(木) 01:13:49
D/CLIほしい
633デフォルトの名無しさん:2007/09/13(木) 07:38:55
いらね
634デフォルトの名無しさん:2007/09/13(木) 09:32:22
dsss使ってみたら「moduleの宣言がないよ!」ってwarning出まくって鬱陶しいんだけどこれって消せないの?
635デフォルトの名無しさん:2007/09/13(木) 11:40:54
dsss「moduleの宣言をすればいいのに!なんでしないの!」
636デフォルトの名無しさん:2007/09/13(木) 12:27:46
dsss使ってみたら「Could not detect versions」って出るんだけど、どうしたらいいの?
637デフォルトの名無しさん:2007/09/13(木) 15:57:19
template TupleToArray(T, T[] ret, A...) {
static if (A.length != 0)
const TupleToArray = TupleToArray!(T, ret ~ A[0], A[1..$]);
else
const TupleToArray = ret;
}
import std.stdio;
void main() {
writefln(TupleToArray!(string, [], "hoge", "hage", "hige"));
}
こんなソースで
hoge.d(1): Error: arithmetic/string type expected for value-parameter, not T[]
こういうエラー出るんですけど、これどこかでおかしいことしてますか?
皆目見当つきません><
638デフォルトの名無しさん:2007/09/13(木) 17:44:35
>>637
文字列以外の配列は値パラメタとして使えない。

既にタプルがあるなら、[]で囲うだけで配列になるよ。
template Tuple(T...){ alias T Tuple; }
void main() {
writefln([Tuple!("hoge", "hage", "hige")]);
}
639デフォルトの名無しさん:2007/09/13(木) 20:42:08
>>635
いや、俺が書いたんじゃないソースをインポートしたらぶわーって出たんですよ。
俺はちゃんと宣言するようにしてますよ、勘弁してくださいよ。
640デフォルトの名無しさん:2007/09/13(木) 21:58:55
>>638
はー、そうだったんだ・・・
char配列がいいなら他のもなんでもいいのかと思ってた・・・
>既にタプルがあるなら、[]で囲うだけで配列になるよ。
ほーほー、これは便利ww
代用できるようなのでそっちにしますね
回答トンクス!
641デフォルトの名無しさん:2007/09/14(金) 00:07:45
世の中にエスパーはあんまりいないんだぜ?
642デフォルトの名無しさん:2007/09/14(金) 06:13:00
むしろ世の中全員がエスパーだと思う
643デフォルトの名無しさん:2007/09/14(金) 07:11:35
パーには事欠かないんだけどな。
644デフォルトの名無しさん:2007/09/14(金) 17:20:01
switch文のcaseに .. を使えるようになるのはいつ?

switch(i) {
case 20..100: writefln("20 <= i < 100");
}

ついでに不等号も使えるようにしちくり。

switch(i) {
case is > 100: writefln("i is greater than 100");
}
645デフォルトの名無しさん:2007/09/14(金) 18:48:03
>>644
ifでよくね?
646デフォルトの名無しさん:2007/09/14(金) 21:07:33
if (i in 20..100)
 writefln("20 <= i < 100");
647デフォルトの名無しさん:2007/09/14(金) 21:11:12
switch(i) {
case 1,3..6,7: writefln("i is 1, 3, 4, 5, or 7"); break;
}

終端が含まれないのがやはり気持ち悪いな。
648デフォルトの名無しさん:2007/09/14(金) 22:21:24
いや、でも、スライスするとき
array[0..length-1];
ってやる方が気持ち悪い。
649デフォルトの名無しさん:2007/09/14(金) 22:39:48
俺もそう思う。
rubyみたいに..と...に分けてもいい気がするけどって既出ですねー
650デフォルトの名無しさん:2007/09/15(土) 20:40:01
なんかお前ら面白い話題ないのかよー
651デフォルトの名無しさん:2007/09/15(土) 20:49:23
HSPの代わりになる環境が一式揃った
All-in-Oneインストーラみたいなのがあれば普及するかも。
テンプレートメソッドパターンで、
後はゲームループの中を書くだけみたいな感じで。
652デフォルトの名無しさん:2007/09/15(土) 22:16:09
>>651
じゃあ俺が気長に開発してみるわ
miniDとの連携が取れるといろいろよさそうだな
653デフォルトの名無しさん:2007/09/16(日) 00:11:35
そこまでしなくてもtxとかwin32あたりの(ゲーム用途ならSDLも?)使いそうなライブラリ集めたインストーラあるだけでだいぶ違う気がする。
(とか言うけどもしかし>>652にはwktkが止まらない)
HSPあたり使うような層にはインストールは環境変数設定してインクルードパスもiniファイル編集して……っていうのはちょっと敷居高いかもしれないよね。
しかもデフォだと日本語通らないから文字コード周りの知識必須だし。使用するための敷居を下げるのは結構いいんじゃないかと思った。

そろそろC/C++/Javaあたりの経験を前提にしない入門記事があってもいいのかもしれないとも思うんだけども他言語未経験者がDに魅力を感じるのか? っていうのがちょっと微妙かなあ。
654デフォルトの名無しさん:2007/09/16(日) 00:13:19
Dはnerdにしか受けんよ。
655デフォルトの名無しさん:2007/09/16(日) 00:45:01
>>654
たぶん売り込み方次第。優れたものが選ばれる世の中じゃないのは市場見てても明らかでは?
656デフォルトの名無しさん:2007/09/16(日) 00:48:41
>>652 超ガンガッテくれ
>>653 まだ仕様も固まってない現状だとちょっと書きにくいんじゃなかなぁ・・・・
657デフォルトの名無しさん:2007/09/16(日) 07:11:48
最新の安定版らしい1.016ならもしくは
658デフォルトの名無しさん:2007/09/16(日) 08:05:12
新機能はver2系の方だと思うし、1の方はもう結構安定期じゃね?
いや保証はないが。
659デフォルトの名無しさん:2007/09/16(日) 08:12:10
>>652
wktkが止まらない!!

>>653
Dに限らずどんな言語やろうともCの経験は必要な気がする
ちなみに俺はC++やろうとしてめんどくさくなってDやり始めた
660デフォルトの名無しさん:2007/09/16(日) 08:40:45
>>652
応援する。ある程度計画が固まったらスピンオフして別スレに誘導して欲しい。

> miniDとの連携が取れるといろいろよさそうだな
ユーザ視点だと資料の豊富さという観点でメジャーなスクリプトのが嬉しいんじゃない?
ECMAScript系かRubyか、ゲーム組み込みとしては有名なLuaあたり。

HSP並みの手軽さが手に入れば、同人ゲーム業界の新しい光になるな。
661628=652:2007/09/16(日) 10:18:44
「プログラミングなんて分かりません〜」っていう女子大生が、
1ヶ月間の勉強でアナログ三軸加速度計のデータから画像をリアルタイム制御する、
という無茶なライブラリを作るのを生業にしているので、
ド素人がキー入力を受け付けて画と音を出すというのはちょうどはまるもので。

現在はC++で書いているのですが、
「われわれのお客様はfor文のネストで挫折する人です」という状態なので、
配列が自身の大きさを知っていて気軽に関数に投げ入れられるとか、
関数の第一引数が配列だった場合、 その関数はあたかも配列のプロパティであるかのように呼び出せる機能とか、
そういうのが超重要なんで、願わくはDに行きたいんですよね。

半分税金を投入してもらってるのでこのくらいの還元はね、と。
662デフォルトの名無しさん:2007/09/16(日) 10:32:31
そういえば表計算のシートみたいなものが気軽に作れるTableが欲しいんだよねえ……
Lua, Squirrel, MiniDのいずれでもハッシュテーブルがTableという名前なのが邪魔、といってみる。
663デフォルトの名無しさん:2007/09/16(日) 10:33:12
>>661
そいつはいろいろと大変だね
超ガンガレ
664デフォルトの名無しさん:2007/09/16(日) 10:52:31
2Dスプライト(Flyweight、Prototype、Compositあたりに対応)
音楽クリップ(SE音のメモリキャッシュ、パン、ボリューム調整に対応)
後は入力インタフェース抽象化と、フルスクリーン対応

ここら辺を押えたらHSPだけじゃなくFlashユーザも食指を伸ばすだろうね。
665デフォルトの名無しさん:2007/09/16(日) 12:45:44
MiniD Tangoでできてるのかぁ・・・
666デフォルトの名無しさん:2007/09/16(日) 16:15:45
> ここら辺を押えたらHSPだけじゃなくFlashユーザも食指を伸ばすだろうね

      |
      |
      |
      |              /  ̄   ̄ \
     (=)           /、          ヽ
     J >>664       |・ |―-、       |
                   q -´ 二 ヽ      |
                 ノ_ ー  |     |
                 \. ̄`  |      /
                   O===== |
                  /          |
                   /    /      |
667デフォルトの名無しさん:2007/09/16(日) 16:16:42
アポロに夢見てる方ですか?
668デフォルトの名無しさん:2007/09/16(日) 20:46:00
ドラゴに殴り殺されて終わりだよ。
669デフォルトの名無しさん:2007/09/17(月) 07:22:42
C#が気持ち悪い方向に進化しようとしてるけど、Dはそれを取り込む気は無いのかな。
DはDで超絶気持ち悪い方向に進化してはいるけれど。

とりあえずC#3.0の拡張メソッドとかすぐにでも取り込んでほしいな。
670デフォルトの名無しさん:2007/09/17(月) 08:39:35
C++でゲーム作るのは正直しんどい…
かと言って HSP じゃ遅いし…
って思う俺は超期待してしまう
671デフォルトの名無しさん:2007/09/17(月) 11:00:52
DにObjCのカテゴリでもあればいいのに
672デフォルトの名無しさん:2007/09/17(月) 12:33:45
クロージャがほしい
C#ですらあるのに
デリゲートがクロージャじゃないのは中途半端すぎ
673デフォルトの名無しさん:2007/09/17(月) 13:27:56
デリゲート=クロージャだと思ってた。
違うんだ…
674デフォルトの名無しさん:2007/09/17(月) 13:37:49
クロージャってその時の環境を保持するんだよね?

素のデリゲートだと、外側の変数にアクセスできる、無名関数ってくらいだけど、
クロージャって、スコープから外れても、外の変数にアクセスできたりするじゃなかったけ?

Lisp由来だったと思うけど、
識者の方kwsk
675デフォルトの名無しさん:2007/09/17(月) 15:22:10
ちょっと前にD言語は多分コケると思っている人の数→のほうにその話題が出てた。

たぶん一般的にいうクロージャが実装されてると、
int delegate(int) func(int x)
{
int dg(int y)
{
return x + y;
};
return &dg;
}
void main()
{
auto plusFive = func(5);
stdout.println(plusFive(10));
}
こんなようなコードで15が出力されてくれるんだと思う。
実際今のDだとfuncの引数xがスコープ外れた時点で破棄されてるのでよくわからん値+10=よくわからん値が出力されちゃう。
676デフォルトの名無しさん:2007/09/17(月) 15:36:30
いつもインデントのことを忘れる……orz
波括弧が狙ったように一行おきに出てきて謎々みたいになってるな、ごめん。
677デフォルトの名無しさん:2007/09/17(月) 15:38:52
書き直してくれw

int delegate(int) func(int x)
{
  int dg(int y)
  {
    return x + y;
  };
  return &dg;
}

void main()
{
  auto plusFive = func(5);
  stdout.println(plusFive(10));
}

つまり、クロージャ生成した中のものを外に持ち出しても、問題なく使えるということか?
678デフォルトの名無しさん:2007/09/17(月) 16:11:30
現状だと無名クラスでむにゃむにゃするくらいしか方法がないんだよなあ
new delegate(args) { statement; } みたいな感じで出来ないかなあ
679672:2007/09/17(月) 16:30:16
>>677
>つまり、クロージャ生成した中のものを外に持ち出しても、問題なく使えるということか?
それに加えて、「ループの中でクロージャ生成したらそのときのローカル変数の値を保持する」
という特徴もある。
680672:2007/09/17(月) 16:32:52
例えばね、スレッド使うときに、デリゲート放り込めばいいようになってるけど、
スレッドごとにデータを保持させたいと思ったら、クロージャじゃないから
いちいちクラス作らないといけなくなって、なんか中途半端だなと。
681デフォルトの名無しさん:2007/09/17(月) 16:45:49
効率面では割りと保守的なんだよね。他の言語より遅くなる事が嫌なんだろうね。
682デフォルトの名無しさん:2007/09/17(月) 18:06:29
ネイティブの言語で、クロージャサポートしている言語って他にあるのかな?
683デフォルトの名無しさん:2007/09/17(月) 18:07:07
x ネイティブの言語で、
o ネイティブコンパイラの言語で、
684デフォルトの名無しさん:2007/09/17(月) 18:09:13
Common Lisp
685デフォルトの名無しさん:2007/09/17(月) 18:42:41
Haskell
686デフォルトの名無しさん:2007/09/17(月) 19:30:38
OCaml
687デフォルトの名無しさん:2007/09/17(月) 19:34:37
SML
688デフォルトの名無しさん:2007/09/17(月) 20:07:22
Dylan
689デフォルトの名無しさん:2007/09/17(月) 20:11:13
Concurrent Clean
690デフォルトの名無しさん:2007/09/17(月) 20:16:36
おまいらどれだけマニアックなの言えるかになってきてないか
691デフォルトの名無しさん:2007/09/17(月) 22:17:56
ばれた
692デフォルトの名無しさん:2007/09/17(月) 22:58:58
>>690
いやいや、カラクリはもっと単純だよ。つまり、

(1)関数型言語は大抵クロージャ持ってる
(2)多くがネイティブコンパイルできる
(3)でもユーザー人口少ない世界だから、有名なのから普通に述べていっても瞬く間にマイナー言語の出番が来る
693デフォルトの名無しさん:2007/09/17(月) 23:21:10
>>679
>ループの中でクロージャ生成したらそのときのローカル変数の値を保持する
Javascriptのアレはクロージャじゃなかったのか!!
いや、よくわからんけど。


とりあえずデリゲートと関数ポインタってのが両方あるんだから無名関数作れるようにして、
どっちかをクロージャ、どっちかを現在のデリゲートって風にすればいいとおもうんだ。
そうしたら実行効率はなんとかなる?
694デフォルトの名無しさん:2007/09/17(月) 23:28:05
Dならfunction、delegateに並ぶクロージャ用のキーワードが出てくるに一票
695デフォルトの名無しさん:2007/09/17(月) 23:28:27
特に関係ないけどローカル変数保存で思い出したからコルーチンが標準でほしいといっておく。
696デフォルトの名無しさん:2007/09/18(火) 00:09:09
そうやって何でも予約語にしてればいいんだよ…
697デフォルトの名無しさん:2007/09/18(火) 01:09:59
何でも予約語ってのは COBOL みたいなのを言うんだよ
698デフォルトの名無しさん:2007/09/18(火) 01:11:14
そろそろ終了条件なしのループも追加してくれよ。

loop { } みたいな。
699デフォルトの名無しさん:2007/09/18(火) 01:28:26
while(true)かfor(;;)でいいじゃねえか・・・
700デフォルトの名無しさん:2007/09/18(火) 01:45:48
> while(true)
while(1) でも while(4.7i) でも問題のないところが気持ち悪い。

> for(;;)
空文っぽいのが真として扱われるのが気持ち悪い。
701デフォルトの名無しさん:2007/09/18(火) 01:48:16
unless, until, do-untilのが欲しい
702デフォルトの名無しさん:2007/09/18(火) 01:54:23
unlessはたしかにほしい
703デフォルトの名無しさん:2007/09/18(火) 02:59:13
成功するまでtryする構文みたいなのもほしいかも。
try(100){
// 100回例外を投げるまで繰り返される
anythingToDo();
}while(Exception ex){
// 99回目の例外発生までここ
Sleep(10);
}catch(Exception ex){
// 100回目の例外発生はここ
writefln(ex.toString());
}
// 例外を投げなければスルー
704デフォルトの名無しさん:2007/09/18(火) 03:11:25
仕様呼んでて気づいたんだが、こんな書き方できるんだな。

for({ writefln("a"); } false; ) { }
705デフォルトの名無しさん:2007/09/18(火) 07:01:35
unlessとかいれるんならLLでおなじみの
hoge() if (fuga == "hage");
とかもほしいな
706デフォルトの名無しさん:2007/09/18(火) 11:48:45
if (fuga == "hage") hoge();
でよくね
707デフォルトの名無しさん:2007/09/18(火) 12:56:13
>>704
for({for(;;){}} false; ) {}
ほんとだ怖えぇ

for({int i=0;char c='a';} i<100; ++i) { ... }
たまに違う型の変数を2個宣言したくなることがあるので便利かなとは思った。
708デフォルトの名無しさん:2007/09/18(火) 17:43:03
>>704
うわ、始めて知った。これは凄い。
それとInitializeが; | NoScopeNonEmptyStatementになってるのが気になった。なんでNoScopeStatementじゃないんだろうか。

>>707
for(for(;;){} false; ) {} とも可能。

for(pragma(msg,"test");false;){}とかfor(mixin("int i;");i<10;i++){}とかが使えそう?
709デフォルトの名無しさん:2007/09/18(火) 17:48:03
for(scope(exit)writefln(1);false;){}

内部エラーなった
710デフォルトの名無しさん:2007/09/18(火) 18:33:46
>>707
ちゃんとスコープが昇格するんだな
711デフォルトの名無しさん:2007/09/18(火) 18:54:39
>>705
後置記法って、ifの後に、Dだと単文おいても成り立つから、
(カッコや、endなどを強制されないから)意味なくないすか?
712デフォルトの名無しさん:2007/09/18(火) 19:05:29
perlなんかだと、後置ifの()を省略できるから存在価値があるんだろう。
713デフォルトの名無しさん:2007/09/18(火) 19:42:22
後置 if と普通の if って微妙に挙動違わなかったっけ。
714デフォルトの名無しさん:2007/09/19(水) 13:01:05
if (!(key in aa)) hoge();

unless (key in aa) hoge();
ってかけたらうれしい。つーか連想配列にhasプロパティ追加してくれ
715デフォルトの名無しさん:2007/09/19(水) 13:01:54
ソース不正だ
でもまあいいか
716デフォルトの名無しさん:2007/09/19(水) 13:08:49
>>714
まったく同意
717デフォルトの名無しさん:2007/09/19(水) 19:25:52
>>713
むしろ!inが欲しい。
718717:2007/09/19(水) 19:26:34
>>717>>713>>714の間違いね。
719デフォルトの名無しさん:2007/09/19(水) 20:10:46
D言語でネットワークプレイのゲーム作ろうと思っているんですが、
チャット入力部分のためにIMEのAPIなどを叩きたいです。
(文字入力+変換 を ゲーム画面上で行いたい)
D言語のライブラリで必要な機能をサポートしているものは既にありますか?
また、チャット入力を可能にした場合、Windowsでしか動かないソースになってしまいますか?
そうであれば、違う環境にしようかな、と思っています。
720デフォルトの名無しさん:2007/09/19(水) 20:48:57
ソース一か所も変えずに色んなプラットフォームで動かすとか無理じゃね?
721デフォルトの名無しさん:2007/09/19(水) 20:51:39
良く知らないけれどチャット入力部分のためにIMEのAPI叩く必要があるの?
722デフォルトの名無しさん:2007/09/19(水) 20:52:45
>>720
DirectX使ったらMacに移植するのは大手術ですが、OpenGLだったらそうじゃないでしょ
IMEの制御はどのくらいOSに依存するのでしょう
723デフォルトの名無しさん:2007/09/19(水) 20:54:43
リロード直後にレス増えてました、連レスになってすいません。

>>721
フルスクリーンで動作させようと思うので、
ゲーム画面とは別の サブウィンドウ上でOSのGUI部品のエディットボックスを張る、
という実装にはしたくないです。
そうすると、変換するためには叩かないと無理だとおもうんです。
724デフォルトの名無しさん:2007/09/19(水) 21:17:12
英数字だけにしといたほうが身のため
725デフォルトの名無しさん:2007/09/19(水) 21:20:55
>>724
猫でも分かるC言語のIMEの項を読みつつ
DelphiでDirectX画面上での文字入力は作ってみたことがありますが
それより数倍困難だとしたら今回は諦めようと思います。
D言語で実装されてるサポート機能はどんなもんがありますかね?
726デフォルトの名無しさん:2007/09/19(水) 21:24:09
>>725
D言語に限らなければIMEを抽象的なAPIのレイヤーを介してアプリから扱えるのか?
現時点では言語に関係なくかなり大変な印象があるんだが
727デフォルトの名無しさん:2007/09/19(水) 21:28:13
>>726
MozillaのソースからIME関係の部分を取ってきてライセンスをMPLで使うとか。
728デフォルトの名無しさん:2007/09/19(水) 21:36:45
SKK使っても意味ないかな?
729デフォルトの名無しさん:2007/09/19(水) 21:37:34
>>726
カーソルキーとローマ字入力のための英数字情報のキー入力を渡してやって、
変換指示を出して 文節分割状態(と選んでる文節と)と変換候補一覧(と選んでる候補)をもらって 
確定文字列をもらって
みたいな処理だけだったと思います。
あとはバックスペースで削除とかカーソル位置の移動とかです。
変換範囲の変更(shift+→とか)はキー入力を渡せばIME側がやってくれました。
ただ、そのキー入力を渡すためにウィンドウのKeyPressをIMEリレーする部分を
OpenGL環境でどうやったものかとかが未知なんです。(あと上に上げたいろんな処理が仕様が同じかどうかとか)
delの時はonKeyPressイベントから普通にやったんですけど、
そんときはDirectXの画面はウィンドウのキャンバスがポートだったからできた(あってるか微妙)けど、
OpenGL直実行とかの場合はGUIウィンドウは出てないような気がするし・・・?
730デフォルトの名無しさん:2007/09/19(水) 21:39:37
OpenGLスレで聞いてみたほうがいいかもな
731デフォルトの名無しさん:2007/09/19(水) 21:41:14
>>728
ふーんこんなのあるのか
SKKはエンドユーザ層には使えんからダメじゃね
732デフォルトの名無しさん:2007/09/19(水) 21:50:20
>>727
既存のアプリのソース公開されてるのを見るのは盲点でした。
でも今ちょっとぐぐったけどMozillaはC++じゃ無いんですか?

>>728
初めて聞いたのでググッてみました。
Emacsってエディタですよね、ライブラリとして使えたら良さそうです。

>>730
行って来ます
733デフォルトの名無しさん:2007/09/19(水) 21:50:26
とりあえず俺はD言語で実装されてるものは見たことがない
734727:2007/09/19(水) 21:56:48
>>732
>でも今ちょっとぐぐったけどMozillaはC++じゃ無いんですか?
そう。
>D言語に限らなければ
の話ね。
D言語に限るならMozillaからの移植が一番だと思う。MPLはGPLに比べて緩いし。
735デフォルトの名無しさん:2007/09/19(水) 21:58:35
>>734
ああ、なるほど、すいません。
736デフォルトの名無しさん:2007/09/19(水) 23:36:42
たまには wxD も思い出してあげてください。
737デフォルトの名無しさん:2007/09/20(木) 00:43:30
SDL-IM使えば?
738デフォルトの名無しさん:2007/09/20(木) 08:46:14
へえ
SDL-IMを使えばDirectShowでもOpenGLのサーフェイスでも
自分で書くコードは同じにできるようだね?
wxDは後で見るけどIM関係あったっけ?
739デフォルトの名無しさん:2007/09/20(木) 20:34:20
プラットフォーム非依存のライブラリを作っているのですが、
mainとWinMainを抽象化するいい方法はないでしょうか。

DMDを使っているのですが、ライブラリ側にWinMainを混ぜようとしたらきちんとリンクしてくれませんでしたorz
740デフォルトの名無しさん:2007/09/20(木) 20:38:22
>>738
wxって基本的にはWin32ならWin32、UnixならGTKみたいにネイティブのコンポーネントを
そのまま使ってるから、下のレイヤがIME対応してりゃ自動的に動くんじゃねぇか?

逆に、IMEをプログラマが手で制御するための手段は用意されてないかも
741719:2007/09/20(木) 21:05:25
>>737
おお〜ありがとうございます。調べてみます。
742デフォルトの名無しさん:2007/09/20(木) 21:08:50
>>739
mainでいいんじゃね?
Windowsアプリ時にも別にWinMain書く必要はないってどっかでみた。
743デフォルトの名無しさん:2007/09/20(木) 21:21:50
>>742
黒い窓が出てもいいんならな
744デフォルトの名無しさん:2007/09/20(木) 21:45:44
俺も>743だと思って半信半疑でやってみたのだが、
EXETYPE NT
SUBSYSTEM WINDOWS
を含んだ.defをリンカに食わせてやったら、
MessageBoxAのみのmain関数を実行しても黒い窓が出なかった。

あとhInstanceを正しく持ってこれるかどうかにかかってる感じ
この辺はwin32apiスレで聞いたほうがよさそうなのでそっちに行ってくる

あとは初期化処理をinitializeとか書かせずに実行したり、
流れてくる例外を自動的に拾ったりが出来るかどうかだな
745デフォルトの名無しさん:2007/09/20(木) 22:05:16
もしくはリンク時に -L/su:windows:4.0 とかつければOK
746デフォルトの名無しさん:2007/09/20(木) 23:03:47
D言語で手ごろにスプライト機能が使えるライブラリってなるとSDLでしょうか?
747デフォルトの名無しさん:2007/09/20(木) 23:06:48
みんなエディタ何使ってる?
748デフォルトの名無しさん:2007/09/20(木) 23:31:07
vimだろ常識的に考えて。
749デフォルトの名無しさん:2007/09/20(木) 23:31:25
インテリセンスって響きがインテリっぽくない…
750デフォルトの名無しさん:2007/09/20(木) 23:34:59
JmEditer
751デフォルトの名無しさん:2007/09/21(金) 00:02:54
opNegの返り値にC++の一時オブジェクトみたいなものを返したいのですが、
これはnewで作っちゃっていいのでしょうか
なんとなくscopeつきで返したい気もしますが。
752デフォルトの名無しさん:2007/09/21(金) 00:30:21
>>744
>あとhInstanceを正しく持ってこれるかどうか
これでおk
HINSTANCE hInst;
static this(){
hInst = GetModuleHandle(null);
}
753デフォルトの名無しさん:2007/09/21(金) 00:32:17
>>751
scope付きだと無くなってしまうがな
754デフォルトの名無しさん:2007/09/21(金) 08:57:46
D・F・L!
755デフォルトの名無しさん:2007/09/21(金) 16:16:34
>>751
ルーク GCを信じるんだ
756デフォルトの名無しさん:2007/09/21(金) 16:25:37
>>755
おとなしくForthで書きたいと思います


というのは置いといて、
C++で行列をExpression Templateで書いていて、
演算子でExpressionの一時オブジェクトを生成し、
デストラクタで実計算をやっていたので、
さて同等品をどう実装したものかとちょいと考えておりまして。
757デフォルトの名無しさん:2007/09/22(土) 11:12:28
Dと他の言語(C/C++,C#,java)との処理速度の比較ってどこかのサイトでやってませんか?
できれば、画像処理系での比較だどうれしいです。
758デフォルトの名無しさん:2007/09/22(土) 12:10:45
759デフォルトの名無しさん:2007/09/22(土) 15:50:28
>>758
ありがとうございます。
なんかDが使えそうな気がしてきました。
760デフォルトの名無しさん:2007/09/22(土) 16:48:38
C++の
string str;
while(cin >> str)
{

}
をDで書こうと思って
foreach(str;din)
{

}
と書いたら何時まで経っても処理が終わらない。。。

パイプを使ったプログラミングは眼中に無いのか
761デフォルトの名無しさん:2007/09/22(土) 17:06:18
メチャクチャな論理
762デフォルトの名無しさん:2007/09/22(土) 17:29:56
>>760
cin >> str
ってそんなに使うか?
空白文字が字句区切りで、かつエスケープやクオートのようなものは考慮しなくても
良いようなケースでしか使えないだろう。
それって凄く稀だと思うんだが。

ただの行入力をやりたいならgetline()で、そっちはわりと使うけどな。
(のろいけど)
763デフォルトの名無しさん:2007/09/22(土) 18:26:40
std::getlineは脆弱性があるので使ってはならない
764デフォルトの名無しさん:2007/09/22(土) 18:42:27
765デフォルトの名無しさん:2007/09/22(土) 19:23:10
古いD(ver. 0.173)で作られたABAさんのTitanionを最新のD(2.004かなあ?)でビルドしようとしていました。
使えない名前とか、できなくなったキャストとかのエラーはチマチマ直したらコンパイルは通ったのですがリンクでエラーが出てしまいました。
[apply]
[apply] OPTLINK (R) for Win32 Release 8.00.1Copyright (C) Digital Mars 1989-2004 All rights reserved.
[apply] C:\work\D\ttnNewD\src\abagames\ttn\boot.obj(boot)
[apply] Error 42: Symbol Undefined _D8abagames3ttn6screen6Screen7__ClassZ
[apply] C:\work\D\ttnNewD\src\abagames\ttn\boot.obj(boot)
[apply] Error 42: Symbol Undefined _D8abagames4util3sdl3pad13RecordablePad7__ClassZ
[apply] C:\work\D\ttnNewD\src\abagames\ttn\boot.obj(boot)
[apply] Error 42: Symbol Undefined _D8abagames4util3sdl3pad13RecordablePad5_ctorMFZC8abagames4util3sdl3pad13Recorda
blePad
[apply] C:\work\D\ttnNewD\src\abagames\ttn\boot.obj(boot)
    ・
    ・ 
    ・
[apply] Error 42: Symbol Undefined __init_11TypeInfo_Aa
[apply] C:\work\D\ttnNewD\src\abagames\util\iterator.obj(iterator)
[apply] Error 42: Symbol Undefined _D6object9Exception8toStringFZAa
[apply] C:\work\D\ttnNewD\src\abagames\util\iterator.obj(iterator)
[apply] Error 42: Symbol Undefined _D6object9Exception5printFZv
[apply] C:\work\D\ttnNewD\src\abagames\util\iterator.obj(iterator)
[apply] Error 42: Symbol Undefined __Class_9Exception
[apply] C:\work\D\ttnNewD\src\abagames\util\sdl\recordableinput.obj(recordableinput)
[apply] Error 42: Symbol Undefined _D6object9Exception5_ctorFAaZC9Exception
[apply] --- errorlevel 29

BUILD FAILED
C:\work\D\ttnNewD\build.xml:45: apply returned: 29

Total time: 0 seconds

このようにError 42のSytmbol Undefinedが大量に出ているのですが、これってどういう意味ですか?意味がわからないので何をしたらいいのかさっぱりです。
766デフォルトの名無しさん:2007/09/22(土) 19:25:54
std::getlineは悪意あるユーザーが改行の無い10GBのデータを送り込んだとしても
1度に全て読み込もうとするためメモリを食い尽くしそのままプログラムが落ちる。
つまり、潜在的DoS脆弱性を含む事になる。
ifstream.getlineは引数にバイト数が指定できるため正しく使えば問題は無い。
767デフォルトの名無しさん:2007/09/22(土) 20:42:50
使えるメモリ量を制限して例外処理を正しくしてれば問題にならない。
std::getlineは使ってはならないは使ってはならない。
768デフォルトの名無しさん:2007/09/22(土) 21:11:04
列挙体の前方参照がうざすぎる
769デフォルトの名無しさん:2007/09/22(土) 21:56:39
// エラー デバッグ ブラウザ ツール
// http://www.mozilla-japan.org/
// シンプル プログミング ツール
// http://proforceone.web.fc2.com/
// 素因数分解サンプルプログラム
// Calculation processing にコピーして[RUN]

MAX=1000;br();
for(x=2;MAX>=x;x++){write(" "+x+" ⇒");
 for(i=2;x>=i;i++){if(0==x%i){k=0;
  for(j=2;(i>=j)&&(1>=k);j++){
   if(0==i%j){k++;}
  } if(1==k){write(" "+i);}
 }} br(); 
} br();
770デフォルトの名無しさん:2007/09/22(土) 22:34:27
>>767
std:getline Considered Harmful Considered Harmfulってやつか
771デフォルトの名無しさん:2007/09/22(土) 23:56:32
そうだなあ。>>766を脆弱性と言ってしまうと、配列、リスト、コレクションなどの
サイズに特に制限を設けないようなほとんど全ての言語が脆弱だということに
なるんじゃなかろうか。
今時の言語はほぼ全部ダメじゃないか?
772デフォルトの名無しさん:2007/09/23(日) 00:18:41
別にネットワークストリームを直に変換したりはしないでしょ。
ファイルサーバ内のファイルを信頼するのを脆弱性と呼ぶのは違う気がするし。
773デフォルトの名無しさん:2007/09/23(日) 01:04:23
C++ + boost > D
774765:2007/09/23(日) 01:15:25
自己解決しました。ant cleanしたあとantしたらうまくいきました。D言語仕様は関係なかったです。
結果的に直す必要があったのは、
ポインタに配列を代入しようとしているところでエラーがでているのをcast(kata *)つけていくだけでした。
775デフォルトの名無しさん:2007/09/23(日) 01:32:04
C++ < D
C++ + STL > D
C++ + STL < D + Tango
C++ + STL + IDE >>>>> 越えられない壁 >>>>> D + Tango
776デフォルトの名無しさん:2007/09/23(日) 01:35:08
>>775
そんな軟弱野郎にD言語は使って欲しくないね。むしろ使うな。
さてと、VS Expressのインストールでもするか。
777デフォルトの名無しさん:2007/09/23(日) 07:29:50
>>765
おつっす
778デフォルトの名無しさん:2007/09/23(日) 10:57:45
C++ + STL < D は譲れない
779デフォルトの名無しさん:2007/09/23(日) 12:26:44
>>778
それはないだろ
780デフォルトの名無しさん:2007/09/23(日) 16:10:51
>>775
誰かVS並の機能実装したIDE作って壁超えてくれんだろうか、
VS のD Pluginでもいいから。
781デフォルトの名無しさん:2007/09/23(日) 16:11:35
言いだしpp(ry
782デフォルトの名無しさん:2007/09/23(日) 16:23:48
VS触ったこと無い俺は幸せなのかな
783デフォルトの名無しさん:2007/09/23(日) 16:28:27
便利なツールを知らないって事では不幸せ、
便利なツールが無くてもそつなくこなせて行けてるって事では幸せ。
784デフォルトの名無しさん:2007/09/23(日) 17:31:02
どのくらい便利なんだろ
趣味レベルでメモ帳から始まった俺的にはJmEditor、Poseidonにそれはもう歓喜したんだが
785デフォルトの名無しさん:2007/09/23(日) 17:56:02
インテリセンスとデバッガが動けばどれも大差ないと思う俺はどうすれば・・・
786デフォルトの名無しさん:2007/09/23(日) 18:02:46
複雑なテンプレートマジックやCTFEを解釈できるIDEきぼん
787デフォルトの名無しさん:2007/09/23(日) 18:04:12
.打つごとに3分待たされてもいい?
788デフォルトの名無しさん:2007/09/23(日) 18:08:27
xyzzy用のメジャーモードとかある?
789デフォルトの名無しさん:2007/09/23(日) 19:21:18
>>784
そんなあなたにはぜひVisualStudio2005+C#を体験してもらいたい
790デフォルトの名無しさん:2007/09/23(日) 22:50:05
binding win32apiが最新のDMDでコンパイルエラー起こす問題対処されたっぽい
791デフォルトの名無しさん:2007/09/23(日) 23:47:16

これで但し書き消せる
792デフォルトの名無しさん:2007/09/23(日) 23:50:19
IDEから入ったゆとり世代なんだがD始めてここ一年ちょいくらいで急速にエディタに慣れた。
今はどっちもストレスなく使えるバランス状態なんだが、そろそろどっちかに偏りそうで怖いw
793デフォルトの名無しさん:2007/09/24(月) 00:01:51
そこでviですよ
794デフォルトの名無しさん:2007/09/24(月) 01:41:56
emacsとか使ってるとemacs以外でもC-Pとかやっちゃう。
しかしviなら、vi以外で「:w」とか「kkkkkkkkkkkkkk」
とか書いちゃうことは、それほど無い。
795デフォルトの名無しさん:2007/09/24(月) 01:52:08
メモ帳で C-x C-s なら何度もやったw
796デフォルトの名無しさん:2007/09/24(月) 04:07:00
確かにEmacsのほうが依存性は強い、C-aとかC-fとかを脊髄反射で押して痛い目を
みることが多いが、
viでもエスケープ連打してたり0押しちゃってたりすることは多いぞ。とくに
直前に使ってた場合とか。
797デフォルトの名無しさん:2007/09/24(月) 09:19:20
viはもともとモード意識せなあかんエディタだし
普通のエディタの入力画面はviの入力モードに見える(編集モードには見えない)んで
間違ってj連打とかはやらんな
798デフォルトの名無しさん:2007/09/24(月) 11:00:19
そもそもviユーザはエスケープを連打したりしない
というかそろそろスレ違いだな
799デフォルトの名無しさん:2007/09/24(月) 15:01:55
俺は vi ユーザだけど、MUA 付属のエディタで文章書く時は Esc 連打してしまうわ。
0 や j は押さないけど。
800デフォルトの名無しさん:2007/09/24(月) 16:34:23
俺、dosからずっとmifes使ってる・・・
801デフォルトの名無しさん:2007/09/24(月) 16:35:14
んもう!
802デフォルトの名無しさん:2007/09/24(月) 17:21:04
enumを含む循環importのやり方で躓いています。

// foo.d
import hoge;
class Foo {
enum Bar { FOO, BAR }
Hoge hoge;
}

// hoge.d
import foo;
class Hoge {
this(Foo.Bar foo) {
}
}


fooを先にすればHogeが見つからない、
Hogeを先にすればenumの前方参照といわれます。
定型的な解決法はありますでしょうか。
803デフォルトの名無しさん:2007/09/24(月) 18:04:48
そもそもファイルが違うような関係のクラス間に循環依存をさせない。
循環依存していいのはJavaのinner classのようなとっても蜜なクラス間だけ。
804デフォルトの名無しさん:2007/09/24(月) 18:30:20
なる。
プラットフォーム依存する部分を別ファイルで切り離そうと思ったんですが、
mixinにしてみます。
805デフォルトの名無しさん:2007/09/24(月) 18:51:48
すいません。だれか添削してもらえませんか?
C++はSTL使えるくらいの者なんですが、
今日からちょっと遊んでみようとおもってはじめたんですけど、
なんかエラーが英語でわからなくて困っています。

template Array.print(T) does not match any template declaration
template Array.print(T) cannot deduce template function from argument types (int[],int)

T[] print(T)(T[] Array,uint N){
    foreach(uint i,T val;Array){
        writef("%s ",Array.toString());
        if(i%N >= N-1) printf("\n");
    }
    return Array;
}

int main(char[][] args){
    int[] Array = new int[16];
    
    print(Array,8);
    
//  Array.print=8;//最終的にはこうしたい。
    return 0;
}
お願いします。
806デフォルトの名無しさん:2007/09/24(月) 19:03:27
配列のプロパティ風に代入ってできたんだっけ
最近Dいじれる環境無くしたから確認できねえ><
807デフォルトの名無しさん:2007/09/24(月) 19:15:54
>>805
仮引数Nはuintなのに、実引数がintだから型推論が上手くいってないみたいね。

>>806
Array.print(8); が限界だね。
808デフォルトの名無しさん:2007/09/24(月) 19:33:31
出来ました。型推論か〜。結構厳格なんですねぇ。
今度から気をつけます。
=で代入は記憶違いだったっぽいです。
最後に、ありがとう!!

import std.stdio;

void print(T)(T[] Array,int N){
    foreach(uint i,T val;Array){
        writef(val,' ');
        if(i%N >= N-1) printf("\n");
    }
    //return Array;
}
int main(char[][] args){
    int[] Array = new int[16];
    int single=16;
    
    Array.print(9);//最終的にはこうなった。
    return 0;
}
809デフォルトの名無しさん:2007/09/25(火) 01:17:35
dmd1.020 までは大丈夫だったテンプレートがdmd1.021ではエラーが出てしまった・・・。
ひとまず1.020に戻しとこうっと・・・。
810デフォルトの名無しさん:2007/09/25(火) 14:13:20
バージョンうpまだー
もう待ちくたびれたー
811デフォルトの名無しさん:2007/09/25(火) 15:15:18
ま、まさか 安定期にはいったのか・・・
812デフォルトの名無しさん:2007/09/25(火) 16:01:56
DがDで書かれるまでヲルタンは止めないはず
813デフォルトの名無しさん:2007/09/25(火) 16:32:33
808の物ですけど、勢い余って色々遊んでしまいました。
配列系のアルゴリズムあると便利そうですね。

しかしなー、配列をreturnできるのがこんなに便利だと思いませんでした。

以下が成果物です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4968.zip

暇だったらもっと長い一行処理をかんがえてみませんか?
814デフォルトの名無しさん:2007/09/25(火) 17:24:14
使い回す配列のインスタンスを明示せずに済む点が優れてるわけだな

perlだと、関数の引数を省略したときに
前の処理結果が自動的に渡される、
という感じの暗黙の一時変数があるんだっけ?
815デフォルトの名無しさん:2007/09/25(火) 19:38:13
$_か?
あれなかなか便利だよね
816デフォルトの名無しさん:2007/09/25(火) 20:43:40
>>811
ええ…私産むことに決めたの。
817デフォルトの名無しさん:2007/09/25(火) 21:14:11
>>814
なんかバグ呼びそうな仕様だなぁ・・・。
818デフォルトの名無しさん:2007/09/25(火) 21:57:43
while(<>){print}とかそんな。
819デフォルトの名無しさん:2007/09/25(火) 22:07:42
>>817
perlでも完全性が要求される部分ではあまり使わんねえ。
手軽にパッパと書くには重宝するが、C系言語に飼いならされると存在を忘れる
820デフォルトの名無しさん:2007/09/25(火) 22:24:16
>>818
それすごいね。説明されないと読めないけどさ。

>>819
複雑になるほど邪悪なかんじだなぁ。
俺、C系の人間だから、使うこともないけどねぇ。
821デフォルトの名無しさん:2007/09/25(火) 22:59:54
perlは昔から慣れないなぁ
ちょっと触らなくなると直ぐにカオス世界に彷徨ってしまう。
i18n周りが落ち着いたらD言語スクリプトで書きたいところだ。
822デフォルトの名無しさん:2007/09/25(火) 23:03:34
DでPythonみたいなインタプリタ誰かかかないかなあ
823デフォルトの名無しさん:2007/09/25(火) 23:42:06
char* toWstringz(const(char)[] s) {
 return toUTF16z(s); // return する前にconstを取らないといけない
}

const(char)[]の配列からconstを取り除くには.dupするだけですが
配列を.ptrしたものからconstを取り除くにはどうしたらいいでしょうか
824デフォルトの名無しさん:2007/09/25(火) 23:43:08
気合
825デフォルトの名無しさん:2007/09/25(火) 23:45:36
そのポインタがどれだけの長さの領域を指してるかわからんから、
汎用的に使える方法はないと思う。

今回の場合なら、

char* toWstringz(const(char)[] s) {
 return cast(wchar*)(toUTF16(s) ~ '\0');
}

でいいとおもう。
826デフォルトの名無しさん:2007/09/25(火) 23:52:44
あ,戻り値の型を間違えてました(連鎖してますね),すいません
今のところこういう風にしていたんですけど,やっぱりこれくらいしかないんですかね
どうもです
wchar* toWstringz(const(char)[] s) {
 return (toUTF16(s)~"\0").ptr;
}
827デフォルトの名無しさん:2007/09/26(水) 10:28:47
std.utf.toUTF16zは内部で動的に文字列を生成してるんだし、
躊躇なくcastでconst除去で良いような。
828デフォルトの名無しさん:2007/09/26(水) 11:49:27
でもcastでconst除去したとしてもそれを書き換えていいわけじゃない。
書き換えられないようにプログラマが責任持てって公式で言ってるし。
そもそもDigital Mars以外が作ったPhobosが完全に同じ実装とは限らないわけで…
.dupしても勝手に最適化でうまいことしてくれないかなぁ…
829デフォルトの名無しさん:2007/09/26(水) 15:23:01
そういやDM以外がPhobosを作るときのPhobosの仕様とかあんの?
830デフォルトの名無しさん:2007/09/26(水) 16:52:26
>>828
win32apiとかがchar*じゃなくてconst(char)*で文字列を受け取ってくれたら
当面の問題は解決するんですけども
831デフォルトの名無しさん:2007/09/26(水) 17:09:53
extern (Windows) {
//int MessageBoxW(uint, wchar*, wchar*, uint); // こうじゃなくて
int MessageBoxW(uint, const(wchar)*, const(wchar)*, uint);
}
void main() {
MessageBoxW(0, "hello", "sample", 0);
}
試しに書いてみたら配列からポインタに暗黙変換されるんだが
これは仕様と食い違うのでは・・・
832デフォルトの名無しさん:2007/09/26(水) 17:12:32
コンパイラのインストールがうまくいかない。
DMD 2.004、Ubuntu 7.04、AMD64だとダメなのかな。
no such file or directoryとかcommand not foundとか言われるんだよ。
パス通したし、dmd.confとlibphobosもちゃんとコピーしたし、
chmod u+xもやってるんだけど。

% cd ~/dmd/bin
% which dmd
/home/[ユーザ名]/dmd/bin/dmd
% dmd
zsh: command not found: dmd
% ./dmd
zsh: no such file or directory: ./dmd
% file ./dmd
./dmd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), stripped
% ldd ./dmd
not a dynamic executable
%
833デフォルトの名無しさん:2007/09/26(水) 17:50:39
>>831
invariant配列がconstポインタに暗黙変換されるのは仕様どおりだと思うけど。

http://www.digitalmars.com/d/arrays.html
> So, why does the first string literal to printf not need the cast?
> The first parameter is prototyped as a char*, and a string literal
> can be implicitly cast to a char*.

http://www.digitalmars.com/d/final-const-invariant.html
> Mutable and invariant types can be implicitly converted to const.
834デフォルトの名無しさん:2007/09/26(水) 22:25:22
会社でもD言語の利用を検討し始めたぜ!



Solarisのスクリプトのほうだけどな…
835デフォルトの名無しさん:2007/09/26(水) 23:35:35
ツールとしてバイナリエディタもどきを作ったのだが、エレガントできたのでよかった。
以下自己満足

// 配列の部分要素列を任意の比較対象とマッチしてインデックス配列を返すテンプレート
int[] listSub(T)(in T[] arr, in T[] sub) {
int[] match;
foreach( int i, T c; arr[0..$-sub.length] ) if(arr[i..i+sub.length] == sub[] ) match~=i;
return match;
}

// バイナリ配列(っぽいもの)から、C++のreinterpret_cast風の変換を行うテンプレート
void reinterpret(T, S)(ref T x, out S y) {
void* tmp = cast(void *)&x;
y = *(cast(S*)tmp);
}

// バイナリファイルから"Search Target"文字列を検索してインデックスを列挙し、
// そのインデックスから定数バイトずれた場所の値をintとして再解釈する例
void analyseREC(char[] filename) {
auto rec = cast(byte[])read(filename);
auto sub = cast(byte[])"Search Target";

auto indices = listSub(rec, sub);

int tmp;
real[] result;
foreach(i; indices) {
reinterpret(rec[i-13], tmp);
result ~= tmp*0.01;
}
}
836デフォルトの名無しさん:2007/09/26(水) 23:49:54
威勢よく書いておいて、シンプルに
*(cast(int*)&(some_pointer))
で解決することに気づいて、恥ずかしい限りです。

reinterpret_cast!(TYPE) ...
と書くC++風の構文のテンプレートを考えております……
837デフォルトの名無しさん:2007/09/27(木) 01:11:02
>>833
うは 配列はすべて.ptr必須なのかと思ってた
838デフォルトの名無しさん:2007/09/27(木) 03:30:20
>>836
なんか考えなきゃいけない問題点とかあったっけ?
template reinterpret_cast(U){
U reinterpret_cast(T)(ref T x){
return*cast(U*)&x;
}
}
839デフォルトの名無しさん:2007/09/27(木) 12:28:28
Dに安全なキャストかどうか判定するやつってあったっけ
840デフォルトの名無しさん:2007/09/27(木) 12:51:09
クラスインスタンスはキャストに失敗するとnullが返るんだっけな
841デフォルトの名無しさん:2007/09/27(木) 13:17:38
>>838
同名のテンプレートでさらにくるむというのは(個人的に)盲点でした……
ありがとうございました。

>>839
Dの警告に関するページで、
# 普通に暗黙のキャストが許される場面でのみ動作する、 と定義する implicit_cast をテンプレートで実装する。
と書かれています。
842デフォルトの名無しさん:2007/09/27(木) 19:26:47
>>840
class A {
}

class B : A {
}


int main()
{
auto b= new B;
auto a= cast(A)b;
assert( !(a is null) );
return 0;
}

うは、まじだwwwww
ごみおいときます・・
T checkcast(T)(Object o)
{
ClassInfo ci= o.classinfo;
while( 1 ) {
if( T.classinfo == ci ) return cast(T)o;
if( ci == Object.classinfo ) break;
ci= ci.base;
}
return null;
}
843デフォルトの名無しさん:2007/09/28(金) 00:27:50
ひましにperlみたいになっていってるな。
844デフォルトの名無しさん:2007/09/28(金) 01:12:02
2chも連続半角スペースとか行頭半角スペースとかタブ文字とか認識してくれるといいのにねえ
845デフォルトの名無しさん:2007/09/28(金) 01:26:04
単にHTMLの仕様そのまま持ってきただけだからな
つーか実は2ch自体は空白そのまま持ってるから
ブラウザ側で対応すれば良いんだぜ?
確かいくつかの2chブラウザは空白も表示するハズ
846デフォルトの名無しさん:2007/09/28(金) 04:57:11
フツーのブラウザもオプションで変えられるようになってればいいのにね
847デフォルトの名無しさん:2007/09/28(金) 09:20:50
void foo(T)( T as)
{
 T.keytype key;
 foreach( i, a; as) {
  key= i;
  break;
 }
}

int[string] array;
foo( array);

なんてことできないかな
連想配列のKeyTypeをとりたいのです
848デフォルトの名無しさん:2007/09/28(金) 09:25:17
でもまー、HTMLとか普通のwebブラウザ的には
コード書くならpreタグやcodeタグを使ってくれ、って立場だからねえ。
やっぱ2chや2chブラウザでなんとか処理するのが筋かと。
849デフォルトの名無しさん:2007/09/28(金) 09:36:32
まあ2chがpreにしなかったのが悪いんだよな。
今更言っても詮無いことだが。

お陰でソースコードの類は張りにくいし読みにくいわ
MS Pゴシック12ptでしかマトモに見れないプロポーショナルAAなどという代物が
流行るわ
ロクなことがない。

CGIにしても、改行だけは<br>に置換するけど空白は放置ってのも微妙に半端な仕様。
どっちかに統一しろよ。
850デフォルトの名無しさん:2007/09/28(金) 09:51:14
ってもそれで困るのは一部の板だけだと思う
ム/マとWebProg…後はUNIXとかLinux辺り?
逆にAA系の板は今の仕様が良かったんだろうし
板によってpre標準にできんものかねぇ

…まぁスレ違いの気がするが
851デフォルトの名無しさん:2007/09/28(金) 10:04:04
>>847
ふつうにis式でおk
template key_type(T){
  static if(is(T A:U[A],U))
    alias A key_type;
}
void foo(T)(T as){
  key_type!(T) key;
  foreach(i,a;as){
    key = i;
    break;
  }
}
852デフォルトの名無しさん:2007/09/28(金) 10:11:45
>>851
おお・・ありがとうございます m(_ _)m
853デフォルトの名無しさん:2007/09/28(金) 12:28:29
>>851
D2.0でしか動かないのね・・・
乗り換え時かな
854デフォルトの名無しさん:2007/09/28(金) 16:30:06
is式は1.0からあったように思うが
855デフォルトの名無しさん:2007/09/28(金) 21:10:04
851のisの中は一体どうなってるの
856デフォルトの名無しさん:2007/09/28(金) 21:17:45
C++やってたんですけど、

//stageとdoorはenum.
stageInfoAry[stage.t1].doorAry.length = 4;
stageInfoAry[stage.t1].doorAry[0] = door.r2;
stageInfoAry[stage.t1].doorAry[1] = door.y7;
stageInfoAry[stage.t1].doorAry[2] = door.y1;
stageInfoAry[stage.t1].doorAry[3] = door.y5;

これが、

with(stageInfoAry[stage.t1])
{
doorAry.length = 4;
with(door) doorAry[] = [r2, y7, y1, y5];
}

こう書けたことに感動した。
857デフォルトの名無しさん:2007/09/28(金) 22:03:34
>>856
doorAry.length = 4;
いらん気がする。
858デフォルトの名無しさん:2007/09/28(金) 22:09:56
with(stageInfoAry[stage.t1])
  with(door)
    doorAry[] = [r2, y7, y1, y5];

ってか
859デフォルトの名無しさん:2007/09/28(金) 22:11:08
[]なくてもいいよね・・・今気付いた
860デフォルトの名無しさん:2007/09/28(金) 22:37:47
with(door)
 stageInfoAry[stage.t1].doorAry = [r2, y7, y1, y5];

でおk
861デフォルトの名無しさん:2007/09/28(金) 22:48:59
enumにwithするという発想はマジでなかった
これいいね便利
862856:2007/09/28(金) 23:07:07
レスありがとうございます。
doorAry.length = 4;なしで書けますね。
勉強になりました。

因みに、
自分が最初にやっていたのは配列要素へのコピーで、
教えてもらったのは参照先の変更?みたいなことですね。
863デフォルトの名無しさん:2007/09/28(金) 23:24:23
>>855
http://www.kmonos.net/alang/d/expression.html
is式の7を参照のこと

>>854
このis式の7が、D1.0にはない
残念ながら
864デフォルトの名無しさん:2007/09/28(金) 23:42:09
>>863
thx
しかしこのis式はなんて複雑なんだ
使いこなせるようになるまで時間かかりそうだ
865デフォルトの名無しさん:2007/09/28(金) 23:50:16
しかしBoostのような変態ライブラリの開発者にしか縁のなさそうなis式だな。
866デフォルトの名無しさん:2007/09/29(土) 00:07:02
でも、変態ライブラリがかなり簡潔になるよ。
867デフォルトの名無しさん:2007/09/29(土) 01:36:38
言語の機能化phobosかtangoに関数の束縛をする方法はありますか?
boostの下記の例みたいな。
ttp://www.kmonos.net/alang/boost/classes/bind.html
868デフォルトの名無しさん:2007/09/29(土) 01:38:34
std.bind
869デフォルトの名無しさん:2007/09/29(土) 02:02:26
いつのまにかstd.bindの使い方変わってねえ?
有効だったコードが今のdmdだと通らなかったりするんだけど
正しい使い方をどこかで数種類示してくれないかなあ
870デフォルトの名無しさん:2007/09/29(土) 02:22:13
phobosにあったんですね。すいません……
テンプレート関数にデフォルト引数を使えるようにするには、とかちょいと考えていてこれが使えないものかと。
871851:2007/09/29(土) 11:36:37
そういえば書くの忘れてた
>>853
ちと泥臭いけど1.0でもOKな方法あるよ
template key_type(T){
  alias typeof(T.keys[0]) key_type;
}
個人的にはD2.0マンセーなので、
1.0でも動く書き方知ってても
ついつい2.0用の書き方してしまう。
872デフォルトの名無しさん:2007/09/29(土) 20:06:30
何度もすまない
std.bindが動かないことを話題にしている人が
どこにもいないのはなぜなんだぜ?
873デフォルトの名無しさん:2007/09/29(土) 20:44:40
std.c.locale内の定数が違っててsetlocaleに失敗したり
wcstombs関数宣言でmbs側にinが付いてたり
標準ライブラリの問題を語りだすと話題が尽きなくなる
874デフォルトの名無しさん:2007/09/29(土) 21:02:18
>>872
以前にも何度か話題に上がってるが、正直何が原因で動かないのか分からないし
ウォルタたんが直してくれないことにはどうしようもない。
875デフォルトの名無しさん:2007/09/29(土) 21:15:28
>>874 バグ報告はされてるの?
876デフォルトの名無しさん:2007/09/29(土) 23:33:38
一回報告してみたけど誰にもつつかれず流れたorz
877デフォルトの名無しさん:2007/09/29(土) 23:44:29
だから誰かもう一回報告しておくれ
878デフォルトの名無しさん:2007/09/30(日) 00:19:49
自分でやれよ・・・
879デフォルトの名無しさん:2007/09/30(日) 02:19:59
>>876 カワイソス MLに流したの? 一般用MLではなくバグ用MLだよね?
880デフォルトの名無しさん:2007/09/30(日) 09:18:22
やり方がまずかったのかもしれない
もう一度やってみた
881デフォルトの名無しさん:2007/10/01(月) 06:23:58
えらいなぁ・・・
俺もやってみようとしたけど、こわくなってやめてしまった・・・
入力後のスクショなどうpしてくれませんでしょうか
882デフォルトの名無しさん:2007/10/01(月) 07:01:13
もっと日本人のプログラマもDに対して主張していけたらいいね。
言語の壁は厚いなぁ…
883デフォルトの名無しさん:2007/10/01(月) 08:58:28
873のは報告上がってるのかな
他のphobosのバグも上がってないのあったら
ここにコード書いてくれたら報告できるかもしれない
884デフォルトの名無しさん:2007/10/01(月) 12:55:17
国際化の一歩としてヲルタァたんに日本語を習得してほしい。とか、余計なこと考えてみる。Lv4だっけね。日本語って。
885デフォルトの名無しさん:2007/10/01(月) 12:57:40
どう考えても俺らのほうが英語やるべきだろw
886デフォルトの名無しさん:2007/10/01(月) 13:14:18
残ねぇーーーーーーーーーーーーーーーーーーーーん!!
ま、それはいいか。。。
887デフォルトの名無しさん:2007/10/01(月) 17:37:34
文字コードUTF8にするだけで解決とか思ってるんだろうな
だれかうぉるたんにわかり易く説明してやる香具師はいないのかな
888デフォルトの名無しさん:2007/10/01(月) 17:46:17
OSが扱うコードがユニコードで統一された時代に
使うことを想定してるんじゃないかと思っている
889デフォルトの名無しさん:2007/10/01(月) 17:52:21
明らかにコンパイラのバグらしきものを発見したのだが、
条件の再現が面倒くさすぎて報告する気にならん
890デフォルトの名無しさん:2007/10/01(月) 18:08:22
>>884
inaba san
o tegami wo domou arigaou gozaimasu.
891デフォルトの名無しさん:2007/10/01(月) 19:19:06
返信ついでに、いじってた配列関連のソース上げてみる。STLから色々パクッた。(汗
細かいのは入れてないけど大筋は入ってると思うよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5006.zip

作ってて思ったんだけど、1ラインプログラムって可読性、非常に悪いね。自分でやってて思っちゃった。何事もほどほどが!!

あと、DTLってあったと思うけど、どんなことできるの?

>>890
I am not Mr K.Inaba. I am Tori. I am poor hobby Programmer.hehe.
ってわけで、大それたことだけど、申し訳ないが、俺は意中の人ではありません。
892デフォルトの名無しさん:2007/10/01(月) 19:40:13
実行してすらいないのだが s/inout/ref/g か
Array.d(191): private void Swap(T)(inout T A,inout T B){//i am not public. hope make good swap by others

DTLは更新されてないような
893デフォルトの名無しさん:2007/10/01(月) 20:06:56
>>892
あれ?ウチではちゃんとうごいたんだけど。。。ま、それはいい。
refってforeach専用だと思ってた。
しってたらそれ使うっていうかつぎからそうする〜!!多謝!
ってかね、そっちの失態より妖しい英語のほうが恥ずかしい!!

で。
DTLちょっと0.2.1ってのがあったからのぞいてみたけど、STLの後追いっぽいねぇ。人のことは言えないけどさ。
最終更新日が2004年あたりだったなぁ。
感想としては、Dに足りないのはList構造くらいじゃないかな。
ほかのは配列ラップすれば適当なSTL相当のはできそう。連想配列も標準でサポートしてるし。アロケータ用意しなくても良いし。
894デフォルトの名無しさん:2007/10/01(月) 20:12:33
>>891
STLとboostからのポートがあるとうれしいなあ。
random周りはジェネレータだけ移植(ってかCでコンパイルしてリンクだけ出来るように)して、分布はtangoからパチればいいかな?
そこでbindが欲しくなるんだが……


あとinabaさんは大して意味はないですw
ishidaさんが訳者なんで、マニュアルの訳者のinabaさんを選んでみたってわけですわ。
895デフォルトの名無しさん:2007/10/01(月) 20:15:42
refできたー。指摘感謝!
inoutいらない子。。。
896デフォルトの名無しさん:2007/10/01(月) 20:18:07
実は未だにinout/refどっちでも動くw
897デフォルトの名無しさん:2007/10/01(月) 20:28:30
>>894
ネタに混じれ酢しちゃったか。こりゃ申し訳ない。

俺もさ、翻訳できるくらい英語できたら原書がよめてハッピーだろうなー。とか思うわけですよ。(TT

>>896
あ、まちがってなかったか。良かった。
でも、refの方がかっこいいから次からref使う〜。
まー、C++からの感覚だとそっちのほうがリファレンス!ってかんじで覚えやすい。かも。
898デフォルトの名無しさん:2007/10/01(月) 20:40:22
ttp://shoo.s20.xrea.com/shoo/programing/
実は結構前からやってたのかもしれんが
Hにわかるならおれにもわかるはず!とTangoの解説に期待さらしage
899デフォルトの名無しさん:2007/10/01(月) 20:41:35
>>894
俺、boostはむりです。

触ったことないんで。STLが限界です。
っていうか、時間があったら、言いだしっぺの法則やってみません?(汗
900デフォルトの名無しさん:2007/10/01(月) 20:44:40
ttp://dsource.org/projects/doost
Set of libraries ported from Boost.
必要なのが全然ないから頑張って欲しい

ttp://dsource.org/projects/tangobos
Tangobos is a compatibility layer to allow most Phobos software to be compiled unmodified on Tango.
ちょっといじってみる前に宣伝
901デフォルトの名無しさん:2007/10/01(月) 20:46:42
>>897
refにウォルタたんが変なものを追加しようとしてるとの未確認情報もあるから、inout使っとけ。
902デフォルトの名無しさん:2007/10/01(月) 20:47:58
ええぇぇぇ
その未確認情報plz
903デフォルトの名無しさん:2007/10/01(月) 21:03:58
>>900
boost::any とか std.boxでいいだろとかw
random周りは個人的に必要なので適当に作りますわ。


さて、>652で予告してたライブラリですが、
現在C++版からポートしつつ、ちょびちょびいじってます。
一応簡単な表示まではできるようになってきたという程度ですが、
ちょいと説明書きをつけてどっか載せますね。
904デフォルトの名無しさん:2007/10/01(月) 21:13:40
そっかー。仕様が変わるって恐ろしいことなんだねぇ。
C89とかでやってきたから、仕様が変わるって局面に出会ったのはじめてかもしれん。C99はVCだと半端っぽいし。
強烈!の一言につきるかも。でも、よりよくなってほしいね、今のうちに。


で、>>898の解説を軽く眺めてきたけど、TangoにArrayってライブラリあるのね。
はぁ〜、また車輪の〜 か。(TT
ま、それはいい。

いい解説だねぇ。結構自分には合ってる感じだ。ワクテカしててもいいですか!?
905デフォルトの名無しさん:2007/10/01(月) 21:39:47
DでDxLib使えたらうれしそうだよね
906デフォルトの名無しさん:2007/10/01(月) 21:46:24
DDxLib ってか
ただ既にDHell2があるからportするには微妙な立ち位置かも
ttp://www5.atwiki.jp/yaruhara/pages/80.html
907デフォルトの名無しさん:2007/10/01(月) 21:47:21
あげてみました。サンプルの実行ファイル(Win2k以降)つきです(一応自前でウィルス検査はしております)
ttp://psychlops.l.u-tokyo.ac.jp/download/D/Psychlops_D_Win32_GL_Alpha_20071001.zip

取り急ぎなのでぞんざいな解説で申し訳ないのですが、
よろしければごらんください。
908デフォルトの名無しさん:2007/10/02(火) 01:50:41
portした上で戻り値を確認して例外を投げるらぱーを
909デフォルトの名無しさん:2007/10/02(火) 05:27:56
tango.text.Regex がうんこすぎて死ねる
910デフォルトの名無しさん:2007/10/02(火) 05:36:27
ああ、std.regexp も同じなのか
正規表現周りが腐ってるとか、ああああああ
911デフォルトの名無しさん:2007/10/02(火) 06:48:33
>>910
正規表現ライブラリの`鬼車`ってやつを使うことを考えては?
一応Win/Linux両方で使えたはず・・・
912デフォルトの名無しさん:2007/10/02(火) 08:50:57
>>890の元ねたってK&Rだっけ
913デフォルトの名無しさん:2007/10/02(火) 09:29:50
どううんこなのかkysk
914デフォルトの名無しさん:2007/10/02(火) 16:03:38
キラリと光るのに何かとうまくいかない言語だなぁ……もうずっとw
こうなったらもうD以外の言語を発掘するしか。

ネイティブバイナリ吐けて基本OOPでGCと構造化例外があってメタプログラミングが強力で、
さらに標準ライブラリが強力で設計もクールで文字列の扱いもIO含めて問題無しでIDE開発の相性も良くて、
できればRubyばりのクロージャなんかあって構文はC系列が良くて、

そんな言語がどっかに存在しませんか。時空のどこかに。
915デフォルトの名無しさん:2007/10/02(火) 16:26:30
>>914
自分で作ればいいんじゃね?
916デフォルトの名無しさん:2007/10/02(火) 16:45:34
標準ライブラリが非力で設計がダメダメとみんな言うが
俺には質の善し悪しはわかんねーや・・・

Dの文字列の国際化対応が微妙なのはかろうじて感じるが
Windowsのコンソールで化けなければ当面納得できるような

IOはC++のiostreamとboost::asioくらいのものがあれば納得されるのだろうか
すまんがJavaは知らないんだ
917デフォルトの名無しさん:2007/10/02(火) 16:48:06
なんというかphobosはつぎはぎ感がして使いづらい。
918デフォルトの名無しさん:2007/10/02(火) 17:24:06
ぼくはphobosでものを考えてるからTangoの良さが分かりません
919デフォルトの名無しさん:2007/10/02(火) 18:48:59
tangoはモジュール名がPascalCaseなのが気に食わない
920デフォルトの名無しさん:2007/10/02(火) 20:57:58
tangoの名前が気に食わないおれは少数派?w
phobosのときは火星の衛星だからなるほどーって思ってたのに・・・・w
921デフォルトの名無しさん:2007/10/02(火) 21:11:31
でも、Deimosってのもなあ…
922デフォルトの名無しさん:2007/10/02(火) 21:56:29
んじゃSuper Phobos
923デフォルトの名無しさん:2007/10/03(水) 00:31:40
そんな事いったら、Ultimate Phobosとか作るやつでてきそうじゃん。
924909=910:2007/10/03(水) 01:01:52
>>913
機能的には別に困らないんだが、関数のインタフェースが珍妙だなと思ったのよ
他のスクリプト言語をメインにやってる俺からすると扱いづらくてね
うんこは言い過ぎだったかもしれない
925デフォルトの名無しさん:2007/10/03(水) 03:17:17
>>920
おれもだよ
926デフォルトの名無しさん:2007/10/03(水) 03:20:42
Phobos 2.0でいいよw
927デフォルトの名無しさん:2007/10/03(水) 07:08:03
Phobosつくってるのもヲルターだよね
928デフォルトの名無しさん:2007/10/03(水) 09:26:24
929デフォルトの名無しさん:2007/10/03(水) 11:56:26
>>927
それマ(ry
930デフォルトの名無しさん:2007/10/03(水) 12:35:19
>>914
言いたかないけど言っちゃうけど、それなんてcommon lisp?
931デフォルトの名無しさん:2007/10/03(水) 13:48:05
任意のクラスTについて、要素をnewした配列を返してくるテンプレートを考えています。
C++のnew T[n]みたいな構文で書ければいいんですが、常套手段がありましたらご教示ください。
932デフォルトの名無しさん:2007/10/03(水) 16:50:46
俺、素人なんでこんなのしか思いつかないぃ。
他の人を待つ!

import std.stdio;

T[] Alloc(T)(size_t N){
    return new T[N];
}

int main(char [][]){
    auto R = Alloc!(int)(10);
    
    foreach(V;R){
        writef(V,' ');
    }
    
    return 0;
}
933デフォルトの名無しさん:2007/10/03(水) 16:52:19
Dってnew CLASS[n]できないの?
934デフォルトの名無しさん:2007/10/03(水) 16:56:31
出来ないわけないと思う。
935デフォルトの名無しさん:2007/10/03(水) 16:58:52
nullじゃなくて要素ごとにインスタンスを生成して初期化したいってこと?
936デフォルトの名無しさん:2007/10/03(水) 17:14:08
>>935
はい。そういうことです。
一度foreachをまわしてインスタンスを生成するのがちょいと面倒なもので。
937デフォルトの名無しさん:2007/10/03(水) 17:19:39
>>931
俺ならこう書くかな。

T[] alloc(T)(size_t n) {
auto ts = new T[n];
static if(is(typeof(new T) == T))
foreach(ref t; ts) t = new T;
return ts;
}
938デフォルトの名無しさん:2007/10/03(水) 17:27:31
うは、今実験して初めてわかったが、参照の配列生成するんだな。。。
Dのクラス使ったの初めてだから知らなかった。申し訳ない。
しかしなー、こんなところに穴があるとは、コレクション作りにくいなぁ。。。

import std.stdio;
import std.string;
class C{
    static int i;
    int Val;
    this(){
        Val = i++;
    }   
    char[] toString(){
        char[] str = "I am " ~ std.string.toString(Val) ~"th Class";
        return str; 
    }
}
T[] ClassAlloc(T)(size_t N){
    T[] Array = new T[N];
    foreach(ref T V;Array){
        V = new T;
    }
    return Array;
}
int main(char [][]){
    auto R = ClassAlloc!(C)(10);
    foreach(V;R){
        writefln(V,' ');
    }
    return 0;
}
939デフォルトの名無しさん:2007/10/03(水) 17:33:44
しつもーん。質問。
static if(is(typeof(new T) == T)) 
これって何やってるの?
940デフォルトの名無しさん:2007/10/03(水) 17:40:22
>>939
typeof(new int) == int*
typeof(new Struct) == Struct*
typeof(new Class) == Class
941デフォルトの名無しさん:2007/10/03(水) 17:46:45
>>940
そんな便利な!すげー。
942デフォルトの名無しさん:2007/10/03(水) 18:06:25
ところでTangoのMap系のコレクションにopIn_r関数がないのはなぜなんだぜ?
943デフォルトの名無しさん:2007/10/03(水) 18:13:08
組み込み型と辻褄合わせる為には、要素のポインタを返さないといけないからじゃね?
944デフォルトの名無しさん:2007/10/03(水) 19:32:21
要素のポインタを返すようなものがあってもいい気もするけど…
945872:2007/10/03(水) 21:05:00
ttp://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.bugs&article_id=12352
相変わらず誰も反応してくれないので(´・ω・`)
自分でやったらなんとかなった(`・ω・´)

>>881
SSしてうpとか恐ろしくてできない
946デフォルトの名無しさん:2007/10/04(木) 03:54:20
あれだよ、おまいらの意見がウォルタンの目に留まるように、Wiki かなんか立ち上げてさ、
このスレを英語に逐次翻訳して、ウォルタンの巡回コースに追加させればいいんじゃね?
947デフォルトの名無しさん:2007/10/04(木) 11:48:59
英語に逐次翻訳できるヤツがいるならそいつはそんなまだるっこしーことしないでメーリングリストに投げてるんじゃね
948デフォルトの名無しさん:2007/10/04(木) 12:15:40
やっぱ翻訳は責任が伴うし投げっぱなしってわけにもいかんだろ
向こうから返答があったら日本語訳してこっちに貼り付けるのか?w
949デフォルトの名無しさん:2007/10/04(木) 18:38:15
お前らが英語でここに書けばいいじゃん。
950デフォルトの名無しさん:2007/10/04(木) 20:18:08
Eigo de Ok
951デフォルトの名無しさん:2007/10/04(木) 20:29:49
with文の中で、withの括弧に与えてる値を貰う方法ってありますか?

hoge=getMugamugaInstance();
with( hoge ){
  val=100;
  vol=200;
  vel=300;
  fuga=hoge;
}
これを
with( getMugamugaInstance() ){
  val=100;
  vol=200;
  vel=300;
  fuga=/* ★ */;
}
て感じで書きたいのです
952デフォルトの名無しさん:2007/10/04(木) 20:43:36
  val=100;
  vol=200;
  vel=300;
  fuga=getMugamugaInstance();
953デフォルトの名無しさん:2007/10/04(木) 20:50:32
hogeに自分自身を返すプロパティを追加するとか。
954デフォルトの名無しさん:2007/10/04(木) 21:13:55
>>953
おぉ、なるほど!ありがとう!
955デフォルトの名無しさん:2007/10/04(木) 21:23:49
自分用のwindowsのフレームワーク作っててはまったこと。
switchのcase句を書き忘れてWM_DESTROYがgoto関係のラベル化してコンパイル通ったこと。
あー疲れた。。。
956デフォルトの名無しさん:2007/10/04(木) 21:23:51
そんなんでいいのかよw
957デフォルトの名無しさん:2007/10/04(木) 21:35:38
そんなんって?
フレームワークは自分用だから結構チープですよ。あ、俺の腕もねぇ・・・。
えーっと、昔、C++で作ったやつをポートしてんです。
後処理がなくなってちょっと原本よりシンプルになりそうです。
958デフォルトの名無しさん:2007/10/04(木) 21:37:25
投稿時刻見る限りは955に対するレスじゃないな
959デフォルトの名無しさん:2007/10/04(木) 21:48:30
あ、ごめん。勘違いか。
960デフォルトの名無しさん:2007/10/04(木) 21:50:27
>>956>>954へのレスだろうな。
961955,957,959:2007/10/04(木) 21:55:42
>>960
了解!!
962デフォルトの名無しさん:2007/10/04(木) 22:19:32
Dの連想配列って範囲外指定すると例外飛ぶの?
C++のマップは0返すからそのようにやってたんだけど、やっベー完成できねー。
ってか8割つくってから気づくなんて。。。Orz
963デフォルトの名無しさん:2007/10/04(木) 22:24:14
>>962
0なんか返されたら困る場合が出てくるからな。
in演算子使うのが常套句。
964デフォルトの名無しさん:2007/10/04(木) 22:32:06
たしかここで拾ったやつだけど、こんなの愛用してる。

TV get(TK, TV)(TV[TK] aa, TK key, TV _default = TV.init) {
auto p = key in aa;
return p != null ? *p : _default;
}
965デフォルトの名無しさん:2007/10/04(木) 22:51:36
in演算子ってそういう風につかうんですね。なるほど。
>>963見てネットで探したけど引っかからなくて困ってました。
とりあえず、例外捕まえるように実装したんだけど、
やっぱ例外フリーのほうが精神的に良いのですが、なんとかなりそうですねぇ。

>>963 >>964 の人たち感謝!
966デフォルトの名無しさん:2007/10/05(金) 00:39:54
if文の中だけで有効なシンボルvを介する書き方はよく使ってる
int[string] aa;
aa["hoge"] = 999;
if (int* v = "hoge" in aa){
 writefln(*v);
}
967デフォルトの名無しさん:2007/10/05(金) 01:18:34
ポインタ返すのは結構意表をつかれますねぇ。
理屈が良くわからないですけど。。。
968デフォルトの名無しさん:2007/10/05(金) 01:27:34
bool返すと値を得るのにハッシュテーブルを二回引かないとだめになるからだろう。
969デフォルトの名無しさん:2007/10/05(金) 01:37:42
>>966
それができてなぜ
with( auto hoge = getMugamugaInstance() ){
  val=100;
  vol=200;
  vel=300;
  fuga=hoge;
}
ができないのかね。。。
これができれば >>951 の苦悩もある程度晴れるかと思うのだが。
やっぱ with は TemplateInstance とかもあるから面倒くさいのかな…?
970デフォルトの名無しさん:2007/10/05(金) 01:46:51
俺は英語の勉強もかねて、バグの報告してたんだけど、
めんどくさくなってしまったというか、
なんというかで、最近サパーリですなぁ。
ウォルターたんにコメントもらえたりすると、
なんか嬉しいのでバグ気になるならどんどん、
報告してみたらいいのにと思うのでした。

英語なんて、正確じゃなくてもつたわりゃいいのよ。
伝わんないときもあったけど、大体通じてたように思ふ。

ちゃんとした、サンプルソースがあれば、英語は
半分くらいしか通じなくても、大丈夫。
ビビッてないで、報告すべし!!
971デフォルトの名無しさん:2007/10/05(金) 01:57:30
さあどれ?w

・ビビってる
・英語アレルギー
・めんどくさい/ひまがない
972デフォルトの名無しさん:2007/10/05(金) 03:22:33
ちょっと質問。
ファイルAに未実装の関数をあえて残しておいて、
ファイルBでその実装をしたいときってどうやればいいの?
できればその際のモジュール宣言とかも教えてください。
973972:2007/10/05(金) 03:40:12
ねます〜。
また明日〜。
余裕があったら、>>972おねがいします〜。
974デフォルトの名無しさん:2007/10/05(金) 05:22:49
extern
975デフォルトの名無しさん:2007/10/05(金) 07:02:40
Visual D とかないのかよ。
使いやすいIDEがほしい。
976デフォルトの名無しさん:2007/10/05(金) 07:13:59
VS 2005用のプラグインがあるよ
まじで愛用してるんだが、バージョンアップしてくれないかなぁ・・・
977デフォルトの名無しさん:2007/10/05(金) 07:48:15
>>975
VSじゃないけど、
Code Blocks、Dの設定回りがごちゃごちゃしてるけど、そこさえ終えれば結構快適
978デフォルトの名無しさん:2007/10/05(金) 13:16:21
流れぶった切って悪いけど、以下のコードがdmd2.004で通らないんだが・・・
import std.stdio;

void main()
{
  string str = "hoge";
  writefln("%s", str);
}

# dmd hoge
# ./hoge
Error: std.format formatArg

これは2.003でも使っとけって事なのか?
979デフォルトの名無しさん:2007/10/05(金) 16:33:19
とおるぽ

D:\>type d.d
import std.stdio;
void main() {
string str = "hoge";
writefln("%s", str);
}
D:\>dmd -run d
hoge

D:\>dmd -v
Digital Mars D Compiler v2.004
Copyright (c) 1999-2007 by Digital Mars written by Walter Bright
Documentation: http://www.digitalmars.com/d/index.html
980デフォルトの名無しさん:2007/10/05(金) 16:34:09
Linuxか
Windowsなら通るぜ
981デフォルトの名無しさん:2007/10/05(金) 17:33:59
Visual Dまだー?
リアルタイムに赤線引いてくれるエディタまだー?
文字列mixinの中身まで面倒見てくれるIDEまだー?
982デフォルトの名無しさん:2007/10/05(金) 17:52:52
それよか更新まだー?だろ
そろそろでかいのがきそうじゃないか
983デフォルトの名無しさん:2007/10/05(金) 18:09:26
スレ消費の方が早い
984デフォルトの名無しさん:2007/10/05(金) 18:09:35
v2になってからバグでまくってるから、ちょっくら修正して欲しいな。
985デフォルトの名無しさん:2007/10/05(金) 18:48:36
じゃあ次スレまだー?
986デフォルトの名無しさん:2007/10/05(金) 18:52:54
>>985 じゃお願い
987デフォルトの名無しさん:2007/10/05(金) 18:53:36
IDEいらね
988デフォルトの名無しさん:2007/10/05(金) 19:39:43
>>987
こういう奴がいるからD駄目駄目なんだよ
Visual Dまだー?
リアルタイムに赤線引いてくれるエディタまだー?
文字列mixinの中身まで面倒見てくれるIDEまだー?
989デフォルトの名無しさん:2007/10/05(金) 20:08:50
まぁIDEイラネー派もいるだろうけど
俺もIDEマダー?派だな
DWTでポトペタ開発できるようになったらルンルン気分で書き捨てアプリ書くんだけどなぁ

>>990
次スレよろ
990デフォルトの名無しさん:2007/10/05(金) 20:13:59
立ててくるか。
991デフォルトの名無しさん:2007/10/05(金) 20:20:18
D言語 Part15
http://pc11.2ch.net/test/read.cgi/tech/1191582990/

なんとなく>>1に "D Programming Language" 入れといた。
992デフォルトの名無しさん:2007/10/05(金) 21:08:13
なにげにうめ
993デフォルトの名無しさん:2007/10/05(金) 21:19:58
ume;
994デフォルトの名無しさん:2007/10/05(金) 21:55:41
JmEditerでコード書いて、バッチファイルにドラッグアンドドロップでコンパイルって感じにしてる。(Windowsだよ。)
込み入った開発はしてないからまだ良いけど、統合IDEはほしいねぇ。
995デフォルトの名無しさん:2007/10/05(金) 22:03:24
Dてメタプログラミングで書き方ちょっとミスると、
コンパイル時に無限ループでコンパイラが落ちたりするとか聞いたっけ。
IDE作るときに問題になったりしなかろうか。

あと亀。
>>930
サーセン、やっぱり関数型言語のひとつくらい覚えておくべきっすよね・・。
ていうか、関数型言語てそんなにいいもんでしょか。
どなたか埋めがてらに、その良さを力説してもらえないでしょか。
996デフォルトの名無しさん:2007/10/06(土) 00:33:01
確かにLispは関数型言語ではあるんだけど。

Lispの良いところは文法が簡単なことじゃないかな!
Cとかと違って!
997デフォルトの名無しさん:2007/10/06(土) 02:36:39
>>996
文法が簡単過ぎる分関数名でだまされたときの痛みはひでぇんだよな〜。(とずいぶん昔の自分のコードにだまされた俺様)
998デフォルトの名無しさん:2007/10/06(土) 02:39:54
>>995
関数型言語といってもいろいろあるから一概には言えないけど、Haskellを触ってみた感想としては、
<長所>
・共通の処理を関数でくくり出すことが、的確にできる。プログラムをぶった切ってやったって感じで結構気持ちがいい。
・処理の流れをデータに落とし込んで処理することができる。例えば、手続き型言語で乱数を扱うときはそのつど関数を呼ぶのに対して、Haskellでは乱数の無限リストを生成したりする。これの何がうれしいのかというと、複数の乱数をいじくるときに、
手続き型言語だと制御構文を使って無理やり目的のものを作らなきゃいけないのに対して、Haskellだとリストを扱う関数が使える。制御構文は使い回しがきかないから、毎回自力で書かないといけないが、リストを扱う関数は使い回しが効くから楽。
<短所>
・オブジェクトのようなもの(入れ子になったレコードを書き換え可能データとして保持したりとか)を扱うのがかなりめんどくさい。
・ちょっと遅い

総論としては、関数型言語が手続き型言語に比べて優れているかは、微妙な感じ。
関数型言語も手続き型言語もそれぞれに長所、短所があって、どちらが優れているかは、使う人が言語機能の何を重視するかで決まる気がする。
結局俺は、実行速度が要求されるアプリを作ることが多いのでDに戻ってきた。
999デフォルトの名無しさん:2007/10/06(土) 02:44:51
lispを使い始めたころ
(for (i 0 10) (print i))
って書きたいなって思ってマクロでforが簡単に作れたときは感動したな
遠い昔のことだが
1000デフォルトの名無しさん:2007/10/06(土) 03:00:12
留まることを知らないウォルターたんについていく我らはレミングス
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。