D言語 Part14at TECH
D言語 Part14 - 暇つぶし2ch1:デフォルトの名無しさん
07/07/19 10:10:24
プログラミング言語 D について語るスレッドです。
過去スレは >>2

■本家
URLリンク(www.digitalmars.com)
URLリンク(www.kmonos.net) (和訳)

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

■参考URL
URLリンク(f17.aaa.livedoor.jp) (D言語研究)
URLリンク(dsource.org) (dsource)
URLリンク(www.sun-inet.or.jp)
URLリンク(wisdom.sakura.ne.jp)


2:デフォルトの名無しさん
07/07/19 10:12:05
■過去スレ
Part13 スレリンク(tech板)
Part12 スレリンク(tech板)
Part11 スレリンク(tech板)
Part10 スレリンク(tech板)
Part 9 スレリンク(tech板)
Part 8 スレリンク(tech板)
Part 7 スレリンク(tech板)
Part 6 スレリンク(tech板)
Part 5 スレリンク(tech板)
Part 4 スレリンク(tech板)
Part 3 スレリンク(tech板)
Part 2 URLリンク(f3.aaacafe.ne.jp)
Part 1 URLリンク(pc5.2ch.net)


3:デフォルトの名無しさん
07/07/19 10:12:45
関連スレ

D言語なら俺に聞け
スレリンク(tech板)

D言語を広めるスレ
スレリンク(tech板)

D言語は多分コケると思っている人の数→
スレリンク(tech板)

【次世代言語】D言語でOSを作ろう【Monaの移植?】
スレリンク(tech板)

バイナリをゲロる言語の魅力って何?
スレリンク(tech板)

その他リンク
【Java/C/PHP/Perl/Ruby/Python/TeX】Eclipse M22
スレリンク(tech板)

eclipseってそんなに良いか?【エクリプス】
スレリンク(tech板)

統合開発環境Eclipseプラグイン開発QA
スレリンク(tech板)

"Code of the Nerds" Digital Mars C/C++
スレリンク(tech板)

4:デフォルトの名無しさん
07/07/19 10:13:48
前々スレに貼られていたリンクなど

URLリンク(www.digitalmars.com)
URLリンク(ddbg.mainia.de)
URLリンク(video.google.com)
URLリンク(d.puremagic.com)
URLリンク(www.kmonos.net)
URLリンク(www.kmonos.net)
URLリンク(www.kmonos.net)
URLリンク(www.kmonos.net)
URLリンク(www.kmonos.net)
URLリンク(www.kmonos.net)
URLリンク(shinh.skr.jp)
URLリンク(www.prowiki.org)
URLリンク(www.dsource.org)
URLリンク(www.dsource.org)
URLリンク(www.dprogramming.com)
URLリンク(www.dsource.org)
URLリンク(d.hatena.ne.jp)
URLリンク(ja.wikipedia.org)
URLリンク(www.wikiroom.com)
URLリンク(forums.codeblocks.org)
URLリンク(www.google.co.jp)
URLリンク(www.javaroad.jp)


5:デフォルトの名無しさん
07/07/19 11:57:14
超乙

6:デフォルトの名無しさん
07/07/19 13:10:40
(tyou >> 1).otu();

7:デフォルトの名無しさん
07/07/19 13:13:56
日本語使えたなそういえば

(超>>1)乙;

8:デフォルトの名無しさん
07/07/19 13:14:36
ドット抜けた/(^o^)\

9:デフォルトの名無しさん
07/07/19 13:17:37
乙 ~= cast(void*)1;

10:デフォルトの名無しさん
07/07/19 13:23:38
int いちおつ;

いちおつ;

^^

11:デフォルトの名無しさん
07/07/19 13:29:03
>>10
副作用のない式文は不正じゃね

12:デフォルトの名無しさん
07/07/19 13:37:21
\ ^o^ /;

13:デフォルトの名無しさん
07/07/19 16:11:00
オブジェクト初期化構文使えるようにならんかなあ。

var foo = new Class { bar = 1, baz = 2 };

14:デフォルトの名無しさん
07/07/19 16:37:47
そういうような使い方はclassじゃなくてstructでやるべきなんじゃないかと思う。
構造体リテラルがそういうようなのをサポートしてくれたらいいんだけどね。

15:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/19 16:58:47
イニシャライザは代用にならんだろ。

17:デフォルトの名無しさん
07/07/19 18:11:58
これって国内で実際にビジネスに使われたことある?
言語の使われるか否かは、その仕様よりIDEって印象があるので気になる。

18:デフォルトの名無しさん
07/07/19 18:15:52
あるわけがない。

19:デフォルトの名無しさん
07/07/19 18:18:32
>>4
リンク集つくるなら、タイトルぐらい書け('A`)

20:デフォルトの名無しさん
07/07/19 18:25:10
自分でやれよ

21:デフォルトの名無しさん
07/07/19 18:36:17
>>17-18

なにげに使ってる

22:デフォルトの名無しさん
07/07/19 18:37:51
すいません質問です
std.file.getAttributes の戻り値の意味はどこかに書いてありますか?

23:デフォルトの名無しさん
07/07/19 18:45:38
Linuxならman statでst_modeの説明のところ。
WindowsならMSDNのGetFileAttributesのところ。

24:デフォルトの名無しさん
07/07/19 18:56:48
>>23
ありがとうございます!

25:デフォルトの名無しさん
07/07/19 19:22:51
>>16
正直言うと、12が何に使うものなのか分からんかった。
無名構造体みたいなものだろうか

26:デフォルトの名無しさん
07/07/19 19:24:51
オブジェクトのリテラルみたいなもんだろう。
newと同時にプロパティを設定することができる。
C#3.0にあるらしい。

27:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/19 21:46:16
先に前スレ埋めようぜ。

30:デフォルトの名無しさん
07/07/19 22:22:29
980を超えたスレは一定期間で勝手に落ちるよ。
なんか不都合あったっけ?

31:デフォルトの名無しさん
07/07/19 22:24:29
ないな

32:デフォルトの名無しさん
07/07/19 22:37:49
DMDなら不具合だらけですが><

33:デフォルトの名無しさん
07/07/20 05:11:44
無名クラスってマイナーなのか、DIとかってこのスレ住人にはあまり普及してない?

34:デフォルトの名無しさん
07/07/20 06:08:17
Dに無名クラスがありませんから

DIってなに?

35:デフォルトの名無しさん
07/07/20 06:09:13
dependency injection でしょ。>>33 は誤爆じゃないの?

36:デフォルトの名無しさん
07/07/20 06:11:00
うおレスはえー
>>13が無名クラスでは


37:デフォルトの名無しさん
07/07/20 07:10:21
ネットからD言語のコンパイラをダウンロードして解凍して環境変数にpathを通すバッチファイルです
あったら楽しいなと思って趣味で作ったので、何か改良の余地があれば行ってください。

Installer of D Compilor for win2000/XP
URLリンク(2sen.dip.jp:81)

38:デフォルトの名無しさん
07/07/20 11:43:18
>>36
Dにも無名クラス自体はあるからなあ。
auto x = new class{
/*クラス定義*/
};

39:デフォルトの名無しさん
07/07/20 13:30:30
>>37
既存のsc.iniを残す機能が欲しいような

40:デフォルトの名無しさん
07/07/20 13:44:07
Dの無名クラスマイナーだNE!( ^ω^)

41:デフォルトの名無しさん
07/07/20 16:14:57
俺はマイナー好き

42:デフォルトの名無しさん
07/07/20 16:32:28
メジャー好きがここにいる時点でおかしいだろ

43:デフォルトの名無しさん
07/07/20 16:48:22
Java の無名クラスみたいに基底を指定することはできないの?

44:デフォルトの名無しさん
07/07/20 16:53:35
できるよ。マニュアル読んできな。

45:デフォルトの名無しさん
07/07/21 01:49:16
(new Otsu()).res(1);

前スレ>>1000
そうだといいな・・・

46:デフォルトの名無しさん
07/07/21 02:03:50
>>45 いやちょっと待て
世界が沈むとかどう考えても不吉な表現すぐるだろ

47:デフォルトの名無しさん
07/07/21 04:58:15
キン肉すぐる

48:デフォルトの名無しさん
07/07/21 11:39:10
>>46
そうか?

49:デフォルトの名無しさん
07/07/21 14:09:27
そりゃだって世界を支えるあるいは盛り上げてゆくためのツールだろ
沈めてどうするんだよw

50:デフォルトの名無しさん
07/07/21 15:07:31
今更な話だけど、>>45みたいにnew Otsu()をカッコで括らないと
すぐにメンバにアクセス出来ないのは少しだけメンドイなぁ、と思う。
Javaだと不要だから余計……。C++とかC#じゃどうだっけ。

51:デフォルトの名無しさん
07/07/21 15:18:48
Javascriptも括弧でくくる必要ある。C++とC#も同じだったはず。
個人的にはOtsu.new()ってすべきだと思うけど、new() Otsu()が表現できなくなるしなぁ。

52:デフォルトの名無しさん
07/07/21 15:21:01
ありゃ、
>Javascriptも括弧でくくる必要ある。
は勘違いだったっぽ。スレ汚しスマソ。

53:デフォルトの名無しさん
07/07/21 15:32:03
>>50
C#は new Class().Memberでいけたと思う。
でも、視覚的に気持ち悪いから括弧つけてる。

54:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/21 16:32:55
CTFE時にassert(0);が無視されるのはバグ? (DMDv2.002)

56:デフォルトの名無しさん
07/07/21 20:01:49
URLリンク(www.kmonos.net)
> コンパイラーはassert式を全く評価しないことも許されています。
> コンパイラは、最適化やコード生成の段階で、 実行がassert(0)
> の部分には到達しないことを仮定してよいものとします。
だとさ。

でもこっちではassertに引っかかるコードで
> Error: assert(0) failed
> Error: cannot evaluate f() at compile time
って言われた。2.002。

57:デフォルトの名無しさん
07/07/22 18:04:15
更新こないね
修正箇所、機能追加箇所ともに期待が
たかまってしまう

58:50
07/07/22 19:37:55
>>51-54
どもども。
俺もOtsu.new()としたい派でつ。出来ればnew()以外の名前にも出来れば最高ネ。

> new() Otsu()が表現できなくなるしなぁ。
これ何のことだか全然知らないのだけど、どういう意味でしょか?
俺、なんか言語仕様見逃してる?

59:デフォルトの名無しさん
07/07/22 19:43:52
 new(/*アロケータの引数*/) Otsu(/*コンストラクタの引数*/)
という構文だから、
 Otsu.new(/*コンストラクタの引数*/)
とやっちゃうと、アロケータの引数は指定できなくなっちゃう、という話だと思う。

60:58
07/07/22 19:47:46
>>58に自己レス。自己解決しました。スレ汚しすいません。

アロケータに引数なんて渡せたのね……不勉強ですた。
なるほどそう簡単にはstaticメソッドと同じ呼び出し構文に出来ないわけだ。

61:58
07/07/22 19:51:46
なんというリロードしろ俺。
>>59 ありがとです。まさにその話でした。

62:デフォルトの名無しさん
07/07/22 19:54:27
>俺もOtsu.new()としたい派でつ。出来ればnew()以外の名前にも出来れば最高ネ。

勝手にそう定義すればいいんじゃないの?

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

個人的には ObjC 風に Otsu.alloc(argForAllocator).init(argForConstructor);
にすれば良いと思うのだけど。

64:デフォルトの名無しさん
07/07/22 20:15:50
それは、変な中間オブジェクトができるから好きじゃないなあ。

65:デフォルトの名無しさん
07/07/22 20:23:30
じゃあ Otsu.newWithCustomeAllocator(argAlloc, ArgConst) ならみんな納得なのかな。

66:デフォルトの名無しさん
07/07/22 20:25:16
Otsu.new!!(argAlloc)(argCtor)
でいいよ。

67:65
07/07/22 20:25:48
名前が長いと typo するな...
そこら辺は Omni Complete で

68:デフォルトの名無しさん
07/07/22 20:30:07
カスタムアロケータを使うケースがそんなにあるとは思えない。
明示的にnew(allocator) Obj(construction);
とすればいいだけじゃね?

でなけりゃ、ファクトリクラスを作るとか。

69:デフォルトの名無しさん
07/07/22 20:40:13
これ何の話してんの

70:デフォルトの名無しさん
07/07/22 20:42:16
あまり無いケースの為に特殊な構文を付け加えるのもなんだかなあ…

71:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/22 22:16:27
C#はnew C()の()の省略が認められてない。
Javaは白根。

73:デフォルトの名無しさん
07/07/23 03:27:23
DMD 1.019

74:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/23 11:40:01
大きいのか小さいのか微妙な変化だな…
個人的には __traits よりも、デバッグ時に関数の隠し引数にでも _caller とか入れてくれたらと思う。

78:デフォルトの名無しさん
07/07/23 11:48:57
ええい、たった今初めてversion2系をちょっと試してみて速攻1系に戻したところだというのにw

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

traitsはメタプログラミング関係か?


79:デフォルトの名無しさん
07/07/23 12:09:07
これは強力・・なのか?


80:デフォルトの名無しさん
07/07/23 12:44:30
>>77
debugブロック?内でしか使えないとか

81:デフォルトの名無しさん
07/07/23 15:59:38
ForeachRangeキタ━━━(゚∀゚)━━━ !!!!!

これを待ってたんだよ。ウォルタたん大好き!

82:デフォルトの名無しさん
07/07/23 16:23:34
perlは、
for (0..3){print $_;}
0123なんだけど

D 2.003 だと
foreach (i; 0 .. 3){writef(i);}
012なのね


83:デフォルトの名無しさん
07/07/23 16:28:12
それは配列のスライスと一緒だな。

84:77
07/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:デフォルトの名無しさん
07/07/23 17:34:10
flectionedとか

86:77
07/07/23 18:24:49
flectionedって、そこまで詳細な情報って得られるの?
呼び出し元のファイル名の取り出し方とか。
軽く見聞きした程度だからどこまでできるかよくわかってないのだけど…
でもまぁ、とりあえず標準でそういう機能がほしいところですね…

87:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/23 20:05:49
ヲルターは日曜日にDつくってんのかな

89:デフォルトの名無しさん
07/07/23 20:56:51
__traitsのallMembersやgetMemberは列挙体にも対応してるのか。
願って止まなかった機能追加キタコレ。

90:デフォルトの名無しさん
07/07/23 21:20:17
なんで 1.x にはForeachRangeStatementが追加されていないんだああああああああああああああああああああああああ

91:デフォルトの名無しさん
07/07/23 21:25:45
あわてるな これはヲルターの罠だ

92:デフォルトの名無しさん
07/07/23 23:41:47
更新まだー

93:デフォルトの名無しさん
07/07/24 08:27:24
>>87
ほおお

94:デフォルトの名無しさん
07/07/24 15:06:03
>>39
sc.iniが分からないから
どうやればいいか分からないですけど

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

URLリンク(sakuratan.ddo.jp)

①プロクシの有無
②①が有ならプロクシ接続先の入力
③環境変数の登録
のみ確認します

95:デフォルトの名無しさん
07/07/24 15:12:51
まぁこんなの全然必要無いですけどね…

96:デフォルトの名無しさん
07/07/24 16:41:26
やっとForeachRangeStatementきたか。

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

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


あんまり使い道なさそうだけど

97:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/24 22:09:18
['a' .. 'z'] とかなら使いようもあるかも。

99:デフォルトの名無しさん
07/07/24 22:10:02
と思ったが、['a' .. 'z' + 1] か。汚いな。

100:デフォルトの名無しさん
07/07/24 22:24:32
Ruby みたいに .. と ... の使い分けがあれば

101:デフォルトの名無しさん
07/07/24 22:50:18
しかし今更 .. が末尾を含むことにされても困る

102:デフォルトの名無しさん
07/07/24 23:12:39
+1でよくねwww

103:デフォルトの名無しさん
07/07/24 23:15:32
どっちかというと使い分けするほうが俺的にはめんどい
だいたい..と...とか似すぎで読み違え頻発wwするかは知らないけど

104:デフォルトの名無しさん
07/07/25 00:28:16
いまどきキーワードで色分け出来ないエディタを使ってる人は
なかなかいないだろうから .. と ... で色を変えりゃいい

そういう問題でもないか

105:デフォルトの名無しさん
07/07/25 01:24:54
直感的に反するだろうね

106:デフォルトの名無しさん
07/07/25 02:28:42
=== がなくなって is になったときって
間違いやすいから変わったのかな

rubyで .. と ... が使われているなら
使い勝手はどうかリサーチしてみればいいんじゃね

107:デフォルトの名無しさん
07/07/25 06:23:46
VSPluginD アップデートしてくれないかなぁ

108:デフォルトの名無しさん
07/07/25 06:25:00
What's New for D 1.020
Jul 23, 2007
New/Changed Features
Bugs Fixed
Fixed extern (System)

109:デフォルトの名無しさん
07/07/25 07:52:30
久々にみてみたら、更新に古いバグジラ番号のFixが結構多い気がする
これはそろそろか・・・?

110:デフォルトの名無しさん
07/07/25 13:33:03
>>106
ruby 使ってるけど .. と ... でどっちが末尾含むのか毎回混乱してる.

111:デフォルトの名無しさん
07/07/25 14:22:20
>>110
.が、一つ多いのだから
含むと覚えればよい

112:デフォルトの名無しさん
07/07/25 16:10:00
... は含まない方だよ。

113:デフォルトの名無しさん
07/07/25 16:47:02
>>110-112
おいもう結論が出たのか
と思ったがDは>>111の考えでおkというだけだな

114:デフォルトの名無しさん
07/07/25 16:51:03
余計どっちがどっちかわかんなくなるがなw

115:デフォルトの名無しさん
07/07/25 17:12:02
$[a,b) とかいう表記でもあればなあ。

116:デフォルトの名無しさん
07/07/25 17:31:57
Unicode使って含む表記を a~b にするとか


117:デフォルトの名無しさん
07/07/25 18:42:39
1 to 5 とか。
予約語を増やす方向には行かなさそうだけど・・・
(というか、toは変数名に多く使われてそうだから余計可能性ないか)

118:デフォルトの名無しさん
07/07/25 19:31:09
3項演算子 in.. の追加まだー

if(n in 2..4) writefln(n);

119:デフォルトの名無しさん
07/07/25 19:39:14
between演算子か。

クエリ言語でしか見たことないけど、
assert(index in 0 .. array.length);
とか書ければ便利そうだな。

120:デフォルトの名無しさん
07/07/25 20:03:29
前から if (2 <= x < 4) とか書きたかったんだよ

121:デフォルトの名無しさん
07/07/25 20:17:05
python キタ━━━(゚∀゚)━━━ !!!!

122:デフォルトの名無しさん
07/07/25 23:17:54
ICFPの国際プログラミング・コンテストで日本のチーム「kuma-」が2位に

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

Dが国際プログラミングコンテストの日本人チームで使われたとか。
メジャーになった…のか?


123:デフォルトの名無しさん
07/07/25 23:35:25
検索してみたらそれ去年の記事ジャマイカ
今年のコンテストが終わったばかりだからややこしい

それはそれとして去年のkuma-はk.inaba氏含めたチームなんだから
メジャーになったと言われてもちょっと納得できない罠

124:デフォルトの名無しさん
07/07/25 23:39:56
今年はk.inaba氏とshinh氏しか使ってないに100ガバス

125:デフォルトの名無しさん
07/07/25 23:45:13
今年はrope(C++)とHaskelあたりが主力だったのかね
Dは残念でした

126:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/26 12:15:42
phobosを使って作ったアプリを配布するときはソースを公開すべき?
phobosのライセンスはZlibライセンスに似ていますが、GPLとは
書いてないし、LGPLと解釈すれば自分で書いたソースは公開しなくても
よいような気がする


128:デフォルトの名無しさん
07/07/26 12:49:20
>>127
>公開
そんなことないでしょ


129:デフォルトの名無しさん
07/07/26 18:05:22
>>126
なんか最適化を阻害しそうじゃね?

(x in a .. b) が
(x >= a && x < b) や
(x.opCmp(a) >= 0 && x.opCmp(b) < 0)
と見なされれば十分だと思う。

130:デフォルトの名無しさん
07/07/27 17:48:45
みんなデバッグどうしてるの?
flectioned 使えば落ちたときのスタックトレースを見ることはできるけど

ブレークポイント設定してステップ実行とかしたいのに
windbg は不安定すぎて使い物にならないんだけど・・・


131:デフォルトの名無しさん
07/07/27 17:57:13
>>130
俺はwindbgでそんなに困ったことなかった…
ddbgはどう?使ったことないけど

132:デフォルトの名無しさん
07/07/27 18:38:41
>>130
参考にならないかもしれないけど、俺はVC++2003使ってる。
これだけで、ステップ実行、落ちたときの呼び出し履歴、リソースエディタと、
今のDに足りないものが補えてる。

133:デフォルトの名無しさん
07/07/27 18:49:35
>>131
thx ddbgというのもあるんだね 今度試してみるよ

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

行ブレイクポイントを設定しても「このドキュメントのシンボルが読込まれていません。」と表示されて
ブレークポイントが無効化されてしまう
これは設定でなんとかなるのかな?

134:デフォルトの名無しさん
07/07/27 21:27:04
コンパイラに-opがあるのをつけてみたらどうかな

あとasm{int 3;}がブレイクポイントになる。
過去スレにあった

135:デフォルトの名無しさん
07/07/27 23:02:56
>>132
VS がシンボル情報を認識できているってこと?
どうやるんだろう

>>134
-op をやるだけではダメだった
シンボル情報がないから対応するソースを表示できないって怒られた
asm はちゃんとブレークポイントになったよ

136:デフォルトの名無しさん
07/07/27 23:12:44
_Dmain に関数ブレークポイントを設定したらうまくソースとの対応を認識してくれるので
map ファイルに出てくる他のシンボル名で関数ブレークポイントを設定したらどの関数でもうまくいった
VS に map ファイルの内容をシンボル情報として使ってもらう方法をどなたかご存じないですか?

137:デフォルトの名無しさん
07/07/28 00:53:33
やっぱりリンカが PDB ファイルを出力してくれないと
VS ではどうしようもない気がしてきたんですが・・・ orz
オブジェクトファイルの形式が違うからなあ・・・

138:デフォルトの名無しさん
07/07/28 03:31:24
何度も書き込んですまん
ddbg 試してみたけど出力に多バイト文字含んでると落ちるね
ddbg を実行するディレクトリ名とか・・・

ddbg は Code::Blocks をフロントエンドとして動作できるらしいからそっちに期待してみる
前スレの人は失敗に終わったようだが・・・

139:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/28 19:59:14
コンパイラのバグくさい気がするのでテケトーに回避策を試した結果。

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

でOK

141:デフォルトの名無しさん
07/07/28 20:17:53
>>140
素敵な回避策だ。
トンクス!

142:デフォルトの名無しさん
07/07/28 21:45:04
            ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ <こいつ最高にアホ
 彡、   |∪|  /
/ __  ヽノ /
(___)   /
   ∩___∩
   | ノ      ヽ !
  /  ●   ● |   こいつも最高にアホ
  |    ( _●_)  ミ
 彡、   |∪|   / .\
/ __  ヽノ / \ ...\
(___)   /   .│ ..│
            /  ヽ
            l..lUUU
            .U

143:デフォルトの名無しさん
07/07/28 23:02:35
うけけめけ

144:名無しさん@そうだ選挙に行こう
07/07/29 15:24:36
ばーじょんあっぷまだー?

145:名無しさん@そうだ選挙に行こう
07/07/29 18:26:52
>>129
考えてみたけど、インライン化やメンバをfinalにする、Rangeオブジェクトをスタックに置く等が行われれば、
案外いい感じに最適化されるんじゃなかろーかという気がした。
あとRangeクラスはあると実際便利なので、標準で入ってて欲しいなーという願望もあったり。

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

ところでForeachRangeStatementの箇所がまだ翻訳されてないんで自信無いけど、
Rangeとして書けるのは整数だけ?
いくつかの演算子が適用できればオブジェクトでも行けるようにも読める気がするけど。

146:名無しさん@そうだ選挙に行こう
07/07/29 18:30:25
>>145
イテレータにも使えるとWalter氏が言ってたような…

147:名無しさん@そうだ選挙に行こう
07/07/29 18:45:36
>>145
ForeachRangeStatementは今のところスカラーな数値(整数/実数/虚数)だけ。
ただ、構造体/クラスに対応する考えはあるみたい。

news://news.digitalmars.com:119/f817uv$aqd$2@digitalmars.com

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

ポインタ型にも適用できるけど、型の大きさにかかわらず1刻みになるようだな。

149:デフォルトの名無しさん
07/07/30 14:53:19
Cのdmcでdll作りたいんだけど、どこで聞けばいい?

150:デフォルトの名無しさん
07/07/30 15:01:13
DMCスレ落ちたんか

151:デフォルトの名無しさん
07/07/30 15:14:15
クラウザーさん

152:デフォルトの名無しさん
07/08/03 00:01:06
アップデートまだー?

153:デフォルトの名無しさん
07/08/03 16:57:55
関数が複数の値を返せたらいいのになあ・・・

154:デフォルトの名無しさん
07/08/03 17:04:45
Dにインデクサないの?

155:デフォルトの名無しさん
07/08/03 20:25:18
opIndex?

156:デフォルトの名無しさん
07/08/03 22:47:10
だよね

157:デフォルトの名無しさん
07/08/03 22:48:31
>>153
Tupleを返せたらいいんだけどな
なんでできないんだ

158:デフォルトの名無しさん
07/08/04 01:21:34
Tupleはコンパイルタイムにしか存在しないデータ型だから無理じゃね?

159:デフォルトの名無しさん
07/08/04 03:43:07
Dには集合型ないの?

160:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/08/04 04:19:57
早くタプルリテラルを追加してほしい。

162:デフォルトの名無しさん
07/08/04 04:24:44
$(int, char[]) だの @(int, char[]) だの、
まだ使ってない記号を導入するつもりはないんだろうかね。

163:デフォルトの名無しさん
07/08/04 04:42:07
それより、変数宣言以外での、式で使うカンマ構文をナシにして、
a,b,c = f();
で済むようにすりゃ簡潔でいいと思う。
f(x,y,z)とかf((x,y),z)とかやるときも構文の不整合起こさないで済みそうだし。

164:デフォルトの名無しさん
07/08/04 11:01:11
>>163
それ、不整合を起こさないためには必須だけど代わりの構文が無いと困る。

165:デフォルトの名無しさん
07/08/04 11:07:02
>>163
Luaでそんなことやってたけど、
便利だわな

166:デフォルトの名無しさん
07/08/04 13:40:38
カンマ演算子もタプルを生成するようにして、タプルをスカラーで評価したら一番最後の値が返されるようにするとか。

167:デフォルトの名無しさん
07/08/04 15:18:03
今のところはこういうやつでお茶を濁すしかないのかね。
これは C++ だが。
URLリンク(www7b.biglobe.ne.jp)

168:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/08/04 17:18:08
alias ST!(int) STI;
STI = 1;

とすれば通るけどね

170:デフォルトの名無しさん
07/08/04 17:42:19
前にもそんな感じのテンプレートの挙動があったな。
まあ仕様じゃなくてバグだろう。

171:デフォルトの名無しさん
07/08/05 01:13:41
>>165
むちゃくちゃ好きだったLuaとSquirrelだけど
D言語にはまった以降いらなくなってしまった・・・



172:デフォルトの名無しさん
07/08/05 01:16:16
和訳の中の人はなんであんなにマメなんだ?

173:デフォルトの名無しさん
07/08/05 07:11:48
まあ、なんにしろありがたいことは確かだ。

174:デフォルトの名無しさん
07/08/05 11:56:59
FAQかもしれませんがGTK+ってDからも使えますか?

175:デフォルトの名無しさん
07/08/05 12:03:28
っ gtkD

176:デフォルトの名無しさん
07/08/05 12:22:53
Duit
URLリンク(www5.ocn.ne.jp)


177:デフォルトの名無しさん
07/08/05 12:24:50
>>175-176
ありがとうございます
調べたら色々出てきたので
いくつか比較してみたいと思います
URLリンク(www.autla.com)


178:デフォルトの名無しさん
07/08/06 11:56:11
URLリンク(d.hatena.ne.jp)
これってどうなんじゃろ? 仕様外?

179:デフォルトの名無しさん
07/08/06 12:50:22
inが通るなら、outも通らなきゃねとおも

180:デフォルトの名無しさん
07/08/06 13:09:37
コンパイラ自身がassertion failureって言ってるなら
間違いなくコンパイラのバグだと思うけど。

181:デフォルトの名無しさん
07/08/06 13:11:52
どっちが?
inが通るのが?
それともoutが通らないのが?

182:デフォルトの名無しさん
07/08/06 14:26:28
コンパイラのコード(.cファイル)内でassertion failureを起こしてるから
コンパイラにバグがあるのは確定。

関数リテラルでは"FunctionBody"が書ける仕様になってる。
これはin、out、bodyが書ける構文要素のことなので、
outを書けないのはバグ。
inが書けるのは仕様通り。
delegateを省略した場合に事前・事後条件が書けないのはバグ。

183:デフォルトの名無しさん
07/08/06 14:57:24
ところでWin32APIを軽くラップしようとしたら、
char[]をnullに出来ないので困っていたりする。

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

とするとnullが""に暗黙変換されちゃって、funcにnullが持ち込めない。
nullableみたいのって無かったっけ?

184:デフォルトの名無しさん
07/08/06 15:16:56
str is null ? null : toStringz(str) では

185:183
07/08/06 15:31:32
>>184
func()と同じ理由でtoStringz()もnullを受け取ることはできないので、あまり意味はないかと。
toStringz(null)はtoStringz("")として呼び出される事になるので。

って、そう考えるとtoStringz()も使っちゃダメってことじゃないか。
めんどくせーなー。

186:デフォルトの名無しさん
07/08/06 15:41:08
void main() { int[3] a = [1,2,3]; }

実行時に "Error: Stack Overflow" ってなるんだけど、何が悪いのでしょうか?
DMD 2.003を使ってます。

187:184
07/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:デフォルトの名無しさん
07/08/06 16:06:30
>>184じゃないが
str is null ? null : toStringz(str)
なのに
toStringz(null)
が出てくる理由がわからんし、
ポインタ型にnullを渡すと(p==0)になるでしょ常考。

189:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/08/06 16:15:23
$の方値がぶっこわれてるな

>>186
DMDのバグ

191:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/08/06 16:50:58
ちなみに、こういう気持ち悪いことにもなってるから注意が必要。

import std.stdio;
void main() {
string a = "";
writefln(a is null); // false
writefln(a == null); // true
}

193:デフォルトの名無しさん
07/08/06 17:41:04
win32api(str.length ? toStringz(str) : null); で良くね?

194:デフォルトの名無しさん
07/08/06 21:06:38
>>191-192
なるほど

195:デフォルトの名無しさん
07/08/06 21:52:03
win32api(str.ptr ? toStringz(str) : null);
とかどうよ

196:183
07/08/06 21:58:03
ウッヒョー。今まで仕様を勘違いして覚えてたのか俺は。
・配列はnull値を取れない
・nullは長さ0の配列に暗黙変換される
とばかり思ってました。

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

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

でも("".dup is null)がtrueになる理由だけよく分からない……。

197:デフォルトの名無しさん
07/08/06 22:44:21
あれ? URLリンク(www.kmonos.net)
の配列のデフォルト初期化の項には
>  動的配列は要素数0に初期化されます
て書いてある。

198:デフォルトの名無しさん
07/08/06 23:00:28
>>196
・要素数が0になった場合、変数自体がnullに書き換えられる場合がある。

199:デフォルトの名無しさん
07/08/06 23:20:21
大昔にも同じ議論をみたな。
結局なんかうやむやなまま今日に至るわけだけれども。

URLリンク(yaneu.com)
news://news.digitalmars.com:119/bu5gub$13kh$1@digitaldaemon.com

200:デフォルトの名無しさん
07/08/07 05:20:19
URLリンク(d.hatena.ne.jp)
うむむやはりこれはバグでしたか...
もやもやがすっきりしました
ありがとう賢い人たち

201:デフォルトの名無しさん
07/08/07 05:47:18
って、あげてしまった
(ご迷惑おかけしてすいません)

202:デフォルトの名無しさん
07/08/07 05:48:21
あげたら迷惑なの?

203:デフォルトの名無しさん
07/08/07 08:00:22
>>200-201
D言語をいじくる夏休みとはうらやましいかぎりだぞ


204:デフォルトの名無しさん
07/08/07 08:30:08
gdcはどうなってるんだい?

205:デフォルトの名無しさん
07/08/07 09:42:02
DFL 0.9.6 リリース

206:デフォルトの名無しさん
07/08/07 12:18:16
>>205
ちょっとコントロールが追加されたくらいかな

207:デフォルトの名無しさん
07/08/07 22:30:28
コンパイラにコンテンツアシストの支援機能を早く組み込め。
そしたらあっという間に普及するから。

208:デフォルトの名無しさん
07/08/07 22:36:51
こんな言語仕様が不安定な言語は普及しないよ。
D が流行るのは言語仕様が安定してからでいい。

209:デフォルトの名無しさん
07/08/08 02:16:30
つまりヲルターが死ぬまで流行ることはないということか

210:デフォルトの名無しさん
07/08/08 02:28:35
つまり、Rubyは、Matzが死ぬまで流行ることはないのだろうか

211:デフォルトの名無しさん
07/08/08 02:41:25
デリゲートリテラルの引数の型を推論できるようにならんかなあ。

void func(int delegate(int) dg);

func( (i) { return i * 2; } );
とか、願わくば
func(i => i * 2);
とか書きたい。

212:デフォルトの名無しさん
07/08/08 05:41:35
後のほうの記法がきもい

213:デフォルトの名無しさん
07/08/08 07:00:49
素人乙

214:デフォルトの名無しさん
07/08/08 08:36:05
ラムダ記法はほしい

215:デフォルトの名無しさん
07/08/08 08:47:55
>>211
現状の戻り値推論だけなら、要求されているdelegate型と
生成したdelegate型が異なれば型エラー出るけど、
なんかその推論をやっちゃうとエラーの元になりそうだな。

むしろ仮引数名の方を省略したい。
(int){return @int * 2;}
みたいな。
普通の関数でも省略できるとなおよし。

216:デフォルトの名無しさん
07/08/08 12:05:43
今のままでいいよ
下手に省略すると、人間もコードから内容を推論しなきゃならなくなるからめんどい

217:デフォルトの名無しさん
07/08/08 12:31:20
DとObjective-Cを混ぜてみたいな。スクリプト言語より強力になりそうな気がしてね。

218:デフォルトの名無しさん
07/08/08 17:10:17
Objective-C++は失敗作だったけどな

219:デフォルトの名無しさん
07/08/08 18:54:09
開発環境>>ライブラリ>>>>>言語仕様
って感じで、D言語は3.0になったとしてもはやらなそう

220:デフォルトの名無しさん
07/08/08 20:14:16
ヲルタータンが「言語仕様はこれにて平定!」って言わない限り無理ぽ

221:デフォルトの名無しさん
07/08/08 23:38:42
これにて閉廷!

222:デフォルトの名無しさん
07/08/08 23:59:34
これにて閉経!

223:デフォルトの名無しさん
07/08/09 00:00:11
はたして、進化をやめたDに使う価値はあるのだろうか。

224:デフォルトの名無しさん
07/08/09 00:05:11
せめて処理系がほぼ下位互換でないと使う気にはなれんね

225:デフォルトの名無しさん
07/08/09 03:31:04
>>223
価値ないな…
D言語は変り続けることが美しいのさ…

226:デフォルトの名無しさん
07/08/09 04:00:04
罷り間違ってD言語が普及してしまったら
下位互換性を重要視するようになると思うよ

227:デフォルトの名無しさん
07/08/09 04:00:49
それは困る

228:デフォルトの名無しさん
07/08/09 04:02:15
そんときゃE言語作ればいいじゃない

229:デフォルトの名無しさん
07/08/09 04:03:32
それはいい言語になりそうだな。

230:デフォルトの名無しさん
07/08/09 04:05:05
>>229

231:デフォルトの名無しさん
07/08/09 04:24:35
>>230は尊敬しているようです

232:デフォルトの名無しさん
07/08/09 04:31:07
E言語はもうあるけどな

233:デフォルトの名無しさん
07/08/09 04:34:54
かなりのものは既に使われてるよな。
何か昔一覧を載せてるサイト(不正確に見えたが)があったけど、見つからない。

234:デフォルトの名無しさん
07/08/09 07:05:25
scope File("hoge.txt") s;
なんていう表現があったら時々便利そうだなあ
いらんけど

235:デフォルトの名無しさん
07/08/09 13:15:47
>233
URLリンク(www.kmonos.net)
これか?

236:デフォルトの名無しさん
07/08/09 13:49:49
>>234
scope s = File("hoge.txt");
でいいと思うよ。

237:デフォルトの名無しさん
07/08/10 18:18:19
更新マダー

238:デフォルトの名無しさん
07/08/10 18:22:54
こっちのスレは1年以上待って、もっと待つつもりで、実装はさらに待つつもりなのにおまいらときたら
スレリンク(tech板)

239:デフォルトの名無しさん
07/08/10 23:08:43
>>238
なんだか誠に申し訳ないw
でもDはDで……仕様確定マダー?

そいやDの仕様もだいぶ増えてきた感があるけど、
まだコンパイラの実装はC++ほど大変でもないんかな?
だとしたらどっかに決定的な違いがあるんだろーか。
教えてC++の偉い人ー。

240:デフォルトの名無しさん
07/08/10 23:14:38
ウォルタたんがDの理念の一つに掲げているのに
「処理系の作りやすさ」があるから、そうなんだと思うよ。知らないけど。

241:デフォルトの名無しさん
07/08/11 02:22:03
だれかDコンパイラを自分で作ってる人とかいないのかな

242:デフォルトの名無しさん
07/08/11 02:25:12
少し前にd.D.announceに自分で作ってみたとかいう人がいたような

243:デフォルトの名無しさん
07/08/11 15:01:01
>>227
なんかわろたw

244:デフォルトの名無しさん
07/08/11 17:28:29
>>238
もうD言語使えよと言いたくなる場面ばっかりでわろた

245:デフォルトの名無しさん
07/08/11 18:00:30
DもC++0xも永遠に完成しない

246:デフォルトの名無しさん
07/08/11 18:05:45
C++ユーザがもっとDに流れてくれたらいいのに
似たような言語に人的資源が分散してるのがもったいない

247:デフォルトの名無しさん
07/08/11 18:09:41
やはりここは「ぼくらの」形式で間引きだな

248:デフォルトの名無しさん
07/08/11 18:14:44
C++用のライブラリ作ってるけど、
Dポーティングを念頭に書き換え始めてる
というかDで類似の仕様設計を書き始めてる
でも.NET用のポーティングもありかなと思い始めたり
D#マダー

249:デフォルトの名無しさん
07/08/11 18:36:03
普及するしないの分かれ目は
もはや言語がどうこうってところじゃなくなってるんだけどね


250:デフォルトの名無しさん
07/08/11 18:39:05
ちゃんと標準がTangoに置き換わるまで実質ライブラリさえ作れないような状況だろ。
今作ってもどうせ作り直しになるし。

251:デフォルトの名無しさん
07/08/11 18:54:19
本当に完全にTangoに置き換わるのなら、もうTangoでライブラリ作ればいいだけの話のような。
……本当に標準がTangoに置き換わるって信じてもいいのか?

252:デフォルトの名無しさん
07/08/11 19:01:02
>>251
それが信じられないから困る

phobosがダメなところとTangoの良いところってどんなのがある?
phobosはダメだダメだと聞くがあまり具体的には出てこなくて
まずは文字コード周りかな

253:デフォルトの名無しさん
07/08/11 19:07:14
みんなエディタなに使ってるの?

254:デフォルトの名無しさん
07/08/11 19:28:40
個人的には入出力関係はTangoの方が好きかなぁ
コンテナ(コレクション)についてもTangoがほしいね
あと、ゆくゆくはTangoでXMLもいじれるようになりそう

255:デフォルトの名無しさん
07/08/11 19:31:31
ようやくTango1.0が出そうかなっていうときにもうD2.0だもんなぁ・・・・

256:デフォルトの名無しさん
07/08/11 19:47:39
D2.0ってなにそれはおいしいの?
と思う俺とForeachRangeStatementが2.0だけってことはそろそろ対応お願いしますという
Walterタンの無言の意思表示なのではと思う俺と…

257:デフォルトの名無しさん
07/08/11 21:09:52
もうv1はバグフィックスだけだろ。
美味しい機能《えさ》はv2にしか提供されない。

258:デフォルトの名無しさん
07/08/11 21:52:10
そもそもTangoが標準になるって発言元はどこなんだぜ?

259:デフォルトの名無しさん
07/08/11 22:17:02
>>258
Tango製作陣からじゃないの

260:デフォルトの名無しさん
07/08/11 23:43:00
まぁTangoのほうがモノが良いなら自然に置き換わっていくんじゃね?

261:デフォルトの名無しさん
07/08/12 00:04:50
どっちかが完全に上位互換ならうれしいんだけどね。
混在できたっけ?

262:デフォルトの名無しさん
07/08/12 00:23:12
>>261
無理じゃなかったっけ。前に似た話出てた気がする。
もともと置換を目的に作られてるしなあ。

つか本当に>>255に同意。
なんでここで互換性ないバージョンとか出して既存ライブラリぶっちぎれるのかと。
Phobosお話になんねー、みたいな声はウォルたんに届いてないんだろうか。

263:デフォルトの名無しさん
07/08/12 00:51:04
ウォルタ「いや、他にやりたいことあるし…」

264:デフォルトの名無しさん
07/08/12 01:17:57
ウォルタ「ライブラリのためにDを止めたくないのくらいわかってくれるだろ」

265:デフォルトの名無しさん
07/08/12 01:29:21
ウォルタ「ライブラリが追随すればいいだろwwwww更新おせーんだよwwww」

266:デフォルトの名無しさん
07/08/12 01:41:46
ウォルタ「俺の勝手だろwwwwwwwwwwef9swccnj3」


267:デフォルトの名無しさん
07/08/12 01:44:39
普遍条件にinvariant()って括弧がいるのはどうにかならんかなあ。
見た目が悪すぐる

268:デフォルトの名無しさん
07/08/12 08:36:17
>>267
気にしすぎじゃね?
>>240あたりの理由で()付じゃないとダメだという可能性は?

269:デフォルトの名無しさん
07/08/12 11:03:23
ウ「本来のあるべき姿を追い求めた結果だから仕方ないだろ」


270:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/08/12 12:25:29
unittestにあわせて、ちょっと長いけどinvarianttestとかにしてくれりゃいいのに。

272:デフォルトの名無しさん
07/08/12 19:05:21
ちょっとD触ってみたんだけど試してみたいことがあってサンプルコード探して動かしてみようとしたら動かない、とかデフォ?
メッセージボックスに日本語出力するだけですげー時間かかって泣きそうだったわ

あとみんなは開発環境何使ってるの?
Eclipse+Descentでやってたらソースにエラーの赤線引いてあるけど見た目どこも問題ないしコンパイル通るし動作するしで微妙だった

273:デフォルトの名無しさん
07/08/12 19:11:49
>>272 D2.0系だとサンプルコードってほとんどないんじゃないかな
今公開されてるサンプルコードって大半がD1.0時代のものだと思う(しかも今のD1.0系で動くとも限らない)
少なくとも日本語の文書においては

274:デフォルトの名無しさん
07/08/12 19:22:34
>>272
まだまともなIDEはないから、俺は普通のテキストエディタで書いて、コマンドラインからビルドしとるよ。

275:デフォルトの名無しさん
07/08/12 19:24:11
俺も>>274と同じくコマンドライン(というかバッチファイル作ってダブルクリック)
ポセイドンとかどうなんだろ?

276:デフォルトの名無しさん
07/08/12 19:47:28
>>273
そーなんか
とりあえず1.0系インスコしたんだけどみんな2.0系使ってるの?
2.0系って正式リリースされてないよね?

>>274-275
そーかー
Code::BlocksとPoseidonも使ってみるよ
コード補完がないとソース書いててだるい気がするしね

277:デフォルトの名無しさん
07/08/12 20:00:11
>>276
正式リリースなんて飾り。

278:デフォルトの名無しさん
07/08/12 20:09:37
>>276
バージョンが0.001増えるだけで、大幅な書き直しを余儀なくさせられる言語。それがD

279:デフォルトの名無しさん
07/08/12 20:31:15
バージョンアップしたらHello, woldさえコンパイル通らなくなったときは泣きそうになった

280:デフォルトの名無しさん
07/08/12 20:31:53
書きまつがえた

281:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/08/12 22:15:35
cout << "Hello, World!" << endl;
とC++みたいに出力できるのを作ったことがあるがマニピュレータ周りでモチベーションが切れて終了

283:デフォルトの名無しさん
07/08/12 22:24:48
coutなんて飾りです

284:デフォルトの名無しさん
07/08/12 22:46:27
doutとかs(td)outとかじゃないのか

285:デフォルトの名無しさん
07/08/12 23:12:09
>>282
C++のストリームの記法が便利だと思ったことは一度も無いな

286:デフォルトの名無しさん
07/08/12 23:28:32
つかC++形式の利点って何なの?
たぶんCのprintfが非型安全だから作られたんだと思うんだが、Dだと型安全な可変個引数関数が作れるわけで。

287:デフォルトの名無しさん
07/08/13 00:18:06
型安全、拡張可能、フォーマット文字列の解析が不要ってとこか
その代償として、寄せ、桁、精度、基数等の指定が必要な場合の
記述が面倒くさすぎ

ぶっちゃけ拡張可能性という面でもstreambufが継承可能であることが
重要で、入出力演算子なんてただのオモチャだと思ってる

288:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/08/13 05:32:21
Coutキタナッ

290:デフォルトの名無しさん
07/08/13 06:20:23
tx好きー。

291:デフォルトの名無しさん
07/08/13 06:44:43
Code:Blocks使ってみた
入力補完させよーとするとC++かなんかの予約語を補完してくださった

Poseidon使ってみた
日本語表示もできるし予約語の補完もできるし自分で書いたメソッドの入力補完もできるっぽい ちょっと幸せ
でもエディタの挙動とか配色がキモい たぶん変更できるんだろうけどまだあんまし触ってない

292:デフォルトの名無しさん
07/08/13 07:24:56
writefln で十分だな。

293:デフォルトの名無しさん
07/08/13 08:07:31
printfで十分だ

294:デフォルトの名無しさん
07/08/13 08:33:23
うむ
C++ ライクな入出力ストリーム表記はどうにも好きになれん

295:デフォルトの名無しさん
07/08/13 09:13:18
型安全であることと、色んなもんに出力できるという点は評価できるが、
printf ライクにそれを行うことも可能なわけで。

296:デフォルトの名無しさん
07/08/13 15:42:56
>>288
tangoはこれならstd::coutのほうがましだな

297:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/08/13 18:26:37
結局型安全にした printf ライクなものが一番だよね。

299:デフォルトの名無しさん
07/08/13 19:43:44
writeflnに慣れすぎて手放せなくなってる

300:デフォルトの名無しさん
07/08/13 21:48:15
誰かD1.0を擬人化してみてくれ

301:デフォルトの名無しさん
07/08/13 21:52:16
>>300
スレリンク(tech板)

302:デフォルトの名無しさん
07/08/13 22:08:16
>>297
それでprintf("%08X", n);
とかはどうやりますか?

303:デフォルトの名無しさん
07/08/14 00:20:21
>>300
1.0限定かよ


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch