D言語 Part16at TECH
D言語 Part16 - 暇つぶし2ch1:デフォルトの名無しさん
07/11/18 23:00:35
プログラミング言語 D (D Programming Language) について語るスレッドです。
過去スレは >>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リンク(tinyurl.com) (C/C++に疲れた人のD言語)
URLリンク(www.kmonos.net) (わかったつもりになるD言語)
URLリンク(shinh.skr.jp) (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか)
URLリンク(shoo.s20.xrea.com) (D言語とTangoの入門講座)

2:デフォルトの名無しさん
07/11/18 23:01:10
■過去スレ
Part15 スレリンク(tech板)
Part14 スレリンク(tech板)
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/11/18 23:01:47
■関連スレ

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/11/18 23:20:40
そういえば980超えると一定時間でdat落ちだっけ。
いちおつ

5:デフォルトの名無しさん
07/11/18 23:28:41

ちゃんと前スレ冒頭の話を覚えててくれたみたいだな
>>1

6:デフォルトの名無しさん
07/11/18 23:34:38
乙ー。

7:デフォルトの名無しさん
07/11/18 23:53:15
otsu(std.thread.Thread.getThis[1]);

8:デフォルトの名無しさん
07/11/19 00:02:01
class Otsu(int no){
   static void delegate() opCall(){
    return {writefln(">>",no,"乙");};
  }
}

Otsu!(1)()();

9:デフォルトの名無しさん
07/11/19 00:41:16
【良いとこ取り】D言語スレ【実用重視】(Part 2)
スレリンク(tech板)

10:デフォルトの名無しさん
07/11/19 02:11:37
URLリンク(www.math.sci.hiroshima-u.ac.jp)
ここのdSFMTを系列をインスタンスとするクラスとしてポートしてみたが、なんか物足りないなあ。
Boost::randomみたいな使い勝手を考えていたが……tangoにそんな実装もあった気がするが……
スレッドセーフな擬似乱数生成機って、状態に触るところをsynchronizedでくくればいいのかしら?

11:デフォルトの名無しさん
07/11/19 12:41:20
Stdout.formatlnを間に入れるとうまく動くっって
一体どういう理由なんでしょうか。

単にどこで落ちてるか調べてるだけのtest1,test2って
出力してるだけなんですが。

12:デフォルトの名無しさん
07/11/19 12:49:32
>>11
よくわからない異常終了の原因が、-Oスイッチによる最適化だったことがある。

13:デフォルトの名無しさん
07/11/19 13:03:03
dsssて奴を使ってますが、-g しか使っていません。
ImageListを自作しただけなんですが・・・・・
tango+dflでのソースです。
module imageList;
private import dfl.all;
private import tango.io.Stdout,tango.io.FilePath,tango.sys.win32.Types, tango.sys.win32.UserGdi;
class ImageList
{
HIMAGELIST list;
HANDLE cont;
this(HANDLE cont)
{this.cont = cont;
Stdout.formatln ("test");
this.list = ImageList_Create(16,16, ILC_COLOR32 | ILC_MASK ,0,0);
Stdout.formatln ("test1");
SendMessageW(cont , 4361, 0, cast(int)this.list);
}
public:
void add(char* ifile)
{
short i = 0;
Stdout.formatln ("test2");
HICON icon = ExtractAssociatedIconA(Application.getInstance(), ifile,i);
Stdout.formatln ("test3");
ImageList_ReplaceIcon( this.list ,-1, icon );
Stdout.formatln ("test4");
}
}

14:デフォルトの名無しさん
07/11/19 19:27:32
お騒がせしましました。

特に何処もいじってないんですが、
落ちなくなりました・・・・。

15:デフォルトの名無しさん
07/11/20 05:29:54
よく分からないけど直ってたっていうのは一番危ないケースだと思いますが。


16:デフォルトの名無しさん
07/11/20 06:44:09
経験からするとたいていバグが眠りについた(そしていずれ目を覚ます)ケースが多い。

17:デフォルトの名無しさん
07/11/20 12:21:10
よく分からないけど復活しました とか?

18:デフォルトの名無しさん
07/11/20 13:11:44
opAddressないのー?

19:デフォルトの名無しさん
07/11/20 16:26:40
opStarはある。

20:デフォルトの名無しさん
07/11/20 16:50:37
Starて名前はどうなんだ

21:デフォルトの名無しさん
07/11/20 17:43:27
いいんじゃない、Kleene starって用語もあるし(参照外しの*とは関係ないけど)

22:デフォルトの名無しさん
07/11/20 19:49:25
toString的なものってないんですかね。

23:デフォルトの名無しさん
07/11/20 20:03:31
std.conv.to!(string)

24:デフォルトの名無しさん
07/11/20 20:20:11
opAnus

25:デフォルトの名無しさん
07/11/20 20:34:20
string opCast

26:デフォルトの名無しさん
07/11/20 21:46:17
Tangoにはないんでしょうか

27:デフォルトの名無しさん
07/11/22 00:02:48
URLリンク(www.dsource.org)

28:デフォルトの名無しさん
07/11/22 19:16:30
Stdout("{}",Integer.itoa!(char,int)(new char[32], 1)).newline

やっとできました。
これが噂のテンプレートと言う奴ですね・・・
ありがとうございました。

29:デフォルトの名無しさん
07/11/22 20:43:05
なんでそう難しく考えるかね。

  toUtf8(123456789);

で、できるよ。

30:デフォルトの名無しさん
07/11/22 21:59:17
stableリリースみたいなのはないんすか?
変更履歴でバグフィクスばかりしてて仕事で提案もできないよ

31:デフォルトの名無しさん
07/11/22 22:06:22
1.xがstable。バグといっても致命的なバグは数えるほどしかないから大丈夫だと思う。

32:デフォルトの名無しさん
07/11/23 00:15:18
そして致命的なバグにぶつかり悩む羽目になる。

33:デフォルトの名無しさん
07/11/23 00:22:55
契約プログラミングの雄となるべき言語なのにおかしいよね

34:デフォルトの名無しさん
07/11/23 01:11:08
wxWidgetsのD版つかってるひといますか?

35:デフォルトの名無しさん
07/11/23 03:00:17
dsssを使っていて、
例えばtxはライブラリ化してあるからわざわざコンパイルしてくれなくてもいい、という時どうやってそれを教えてあげたらいいの?
別に問題になるわけじゃないんだけどなんかやたら無駄がある気がして凄く気分が悪い……。

36:デフォルトの名無しさん
07/11/23 03:52:41
>>35
dmd\etc\rebuild\phobos
をテキストエディタで開いて何か思うところはないだろうか?
…俺もよく知らないからここまでしか言えない。

37:デフォルトの名無しさん
07/11/23 04:02:41
unittestがonになってるときに定義されるversionとかある?debugでもいいし

38:デフォルトの名無しさん
07/11/23 19:02:32
根本的にミスってたらすまないんだが

dmd 2.007で
interface hoge{
int test();
}
class fuga:hoge{
int test(){return 5;}
}
void main(){
hoge[] test;
fuga[] test2;
test2.length = 1;
test2[0] = new fuga();
test = cast(hoge[])test2;//明示的にキャストしないとエラー
test[0].test();
}

ってやるとコンパイルは通るが実行時にtest.fugaって表示される。
配列だと継承の意味が無くなるのはかなり困るんだが

39:デフォルトの名無しさん
07/11/23 19:05:37
ごめんsage忘れた・・・

40:デフォルトの名無しさん
07/11/23 19:26:28
>ってやるとコンパイルは通るが実行時にtest.fugaって表示される。

?

41:デフォルトの名無しさん
07/11/23 19:29:06
>>38
根本的に間違ってるよ。

import std.stdio, std.conv;
interface I { }
class C : I { }

void main(string[] args) {
C c = new C;
I i = c;
writeln(cast(void*)c);
writeln(cast(void*)i);

C[] cc = [c];
I[] ii = cast(I[])cc;
writeln(cast(void*)cc[0]);
writeln(cast(void*)ii[0]);

ii = to!(I[])(cc);
writeln(cast(void*)ii[0]);
}

42:41
07/11/23 19:35:10
要するに配列のcast()はC++でいうところのreinterpret_cast相当

43:デフォルトの名無しさん
07/11/23 19:47:59
サンクス!!!!!!!!!!!!!!!!1111

渡すときにto使ったら実行時エラー消えた!!!!111

マジでありがとう!!!!

44:デフォルトの名無しさん
07/11/23 21:02:38
なるほど、オブジェクトの配列は1要素ずつキャストしないといけないのね。

45:デフォルトの名無しさん
07/11/23 21:32:11
別にオブジェクトに限らないよ。
例えば、int[]をbyte[]にキャストしたら要素数4倍になる。

void main() {
auto a = [1,2];
writeln(a.length);
writeln((cast(byte[])a).length);
}

46:44
07/11/23 23:24:38
>>45
基本データ型や構造体の配列については、C言語でのポインタの扱いと同じなので理解できてます。

47:デフォルトの名無しさん
07/11/23 23:48:54
Python で eclipse + PyDev とか
wxPython とか py2exe とか
色々浮気してみたら
D より Python が好きになってしまった

とりあえず D はしばらく忘れることにします
ごめんなさい

何年後かにはまた皆様にお会い出来ることを
期待してもよいのでしょうか?


48:デフォルトの名無しさん
07/11/23 23:51:54
ノシ

D言語が枯れたころにくるといいよ。
今は黎明期過ぎてexternを駆使しないと実戦投入は辛いだろうし。

49:デフォルトの名無しさん
07/11/24 00:17:26
IDEのPoseidon URLリンク(dsource.org) まだ活動してたんですね。
知らないうちに、入力補助やDdbgにも対応してるみたいです。(以前使ったのは1年以上昔)
 . ドットを入力する際にメンバのリストが表示される。
 メソッド名の後の ( カッコを入力する際、引数の型などが表示される。

10分ほど使って気になった点
 ・既存のソースはPoseidon側で保存しなおさないと、アウトライン表示と入力補助が働かない。
 ・デバッグでブレークポイントを設定する方法がわかりません。(´ω`);

50:デフォルトの名無しさん
07/11/24 01:34:07
asm{int 3;}

51:49
07/11/24 01:52:48
Ctrlキー押しながら行番号の右側クリックで、ブレークポイントの設定/解除できました。

52:デフォルトの名無しさん
07/11/24 02:11:13
>>49
それだけできるようになったのなら
そこそこ使えるのかもしれないなーとおもた

53:デフォルトの名無しさん
07/11/24 19:09:07
Cで作ったdllを使う場合ってどうやるんでしょう?
libファイルをimplibで変換したんですが、undefinedが出てしまうんですが。

54:デフォルトの名無しさん
07/11/24 19:12:49
マイクロソフトのimplib使ってるならCOFFからOMFに変換する必要がある。

55:デフォルトの名無しさん
07/11/24 19:19:07
COMは使えるんだっけ

56:デフォルトの名無しさん
07/11/24 19:47:20
つかえるよ

57:デフォルトの名無しさん
07/11/25 02:22:46
version (D_Version2) invariant(char)[] X = "ver2";
else char[] X = "ver1";

これがD1でコンパイルできない D_Version2 って意味あるのかな…

58:デフォルトの名無しさん
07/11/25 03:12:36
マジかよww

59:デフォルトの名無しさん
07/11/25 03:45:10
ここにきてTangoのtoUtf8がtoStringに変更とかすごい今更だがでかい変更だな。
……ちょっとわくわくした。

60:デフォルトの名無しさん
07/11/25 06:22:12
コンストラクタの引数ってどうにかタプルで取れないかな

61:デフォルトの名無しさん
07/11/25 06:23:03
引数の型リストか。
traitsのParameterTypeTupleにthis渡したくてもどうすればいいかわからん/(^o^)\

62:デフォルトの名無しさん
07/11/25 12:51:18
>>60
Class._ctorでおk

63:デフォルトの名無しさん
07/11/25 15:23:54
トンクス!
でもthisオーバーロードしてたらどうも動きがうまくない・・・

64:デフォルトの名無しさん
07/11/25 16:34:59
>>57
minx(""); でかこむ


65:64
07/11/25 16:57:38
あ・・・
mixinだって>をれ

66:デフォルトの名無しさん
07/11/25 16:58:33
そういうときこそ、q{}の出番…

って思ったが、v1でq{}つかえねえんだな

67:デフォルトの名無しさん
07/11/25 17:43:08
おお
D1とD2の両方に対応できる書き方初めて見た。なるほどね。
それってinvariant()の括弧ありなしもカバーできるの?
今出先なので確認できない

68:デフォルトの名無しさん
07/11/25 18:05:39
version(D_Version2) const ClassInvariant = "invariant(){_invariant();}";
else const ClassInvariant = "invariant{_invariant();}";

class C {
private void _invariant(){ assret(false); }
mixin(ClassInvariant);
}

69:デフォルトの名無しさん
07/11/25 19:38:49
そうまでコードをわけわかめにしてまで
二つのバージョンに対応する価値はあるのだろうか

70:デフォルトの名無しさん
07/11/25 21:32:49
俺なら、モジュールで分けてversionでimportを変えるかな。

71:デフォルトの名無しさん
07/11/25 22:23:32
D2ならCTFEでinvariantをinvariant()に置換してmixinすればいいんじゃね?

72:57
07/11/25 22:24:03
>>64,>>70
なるほど…ありがとう。参考にする。
でも、>>69の言うとおりそこまでして分けるくらいならD1対応版とD2対応版の2つを別物として作ったほうがいいような気がするな。
そうなるとやっぱりD_Version2の使いどころがわからん…
そもそもversion(D_Version2)の内容も文法的に正しくないとコンパイルが通らないあたりは問題にならないのかな。

73:デフォルトの名無しさん
07/11/26 00:10:10
v2以前の文法のコンパイラ機能がdmd.exeにまるごと載ってて
versionで切り替わってくれるとかでもない限り、
ほんとに使いどころは無い気がする。
D_Version2ってタダのversion識別子だよね?

74:デフォルトの名無しさん
07/11/26 01:15:46
>>73
だよ。
そもそも、V2なってからもかなり変更ある気がするが、気のせいだろうな。うん

75:デフォルトの名無しさん
07/11/26 02:41:32
Version3への布石なことはあきらか。

76:デフォルトの名無しさん
07/11/26 02:52:54
DMDって無償で商用に使っていいコンパイラですか?

77:デフォルトの名無しさん
07/11/26 04:48:29
2chでライセンス関係の情報訊いて動ける商用って一体…

78:デフォルトの名無しさん
07/11/26 05:26:36
license.txt を嫁


79:デフォルトの名無しさん
07/11/26 18:49:52
dsssむじい
budが気楽でいい

80:デフォルトの名無しさん
07/11/26 21:34:08
>Phobos is now on dsource
(゚д゚)ポカーン

81:デフォルトの名無しさん
07/11/26 21:43:36
それよりも2.008まだー

82:デフォルトの名無しさん
07/11/26 21:44:52
dmd2.007だとopengl32.libをちゃんと読んでくれないのはどういうことか

dmd2.000だと大丈夫なのに

83:デフォルトの名無しさん
07/11/26 22:10:44
kokoro ga oreta

84:デフォルトの名無しさん
07/11/26 22:21:31
>>80
URLリンク(dsource.org)
URLリンク(tinyurl.com)
なんだこれとうとう放棄したのか?w
ユーザがPhobosを開発できるなら文字コード周りを何とか・・・

85:デフォルトの名無しさん
07/11/26 22:22:53
じゃあこれで心置きなくTangoに移れそうだね

86:デフォルトの名無しさん
07/11/27 00:53:14
伝説のIDEができるまでにこけそうな勢いだなこりゃ

87:デフォルトの名無しさん
07/11/27 00:56:57
ここのみんなで日本語化しちゃおうか

88:デフォルトの名無しさん
07/11/27 01:21:29
>>86
>>49

89:デフォルトの名無しさん
07/11/27 02:26:37
>>87
やりたいんだがなあ

90:デフォルトの名無しさん
07/11/27 13:03:57
NewsGroup盛り上がってるな
直前の流れは知らないんだがTangoとPhobosを統合するのかな?
「両方のコーディングスタイルの違いはどうするの?」とか言ってるし
あとまだ運用がよくわからないから
「誰が全体の設計の管理を受け持つの?」とか話しているようだ

91:デフォルトの名無しさん
07/11/27 13:37:11
> 「誰が全体の設計の管理を受け持つの?」

今までのTangoの人じゃ駄目なの?

92:デフォルトの名無しさん
07/11/27 18:26:33
TangoってDっぽくないんだよなあ。そこがあまり好きになれない。

93:デフォルトの名無しさん
07/11/27 18:27:48
俺に十分な時間があればもっと素晴らしいライブラリ作って見せるんだが

94:デフォルトの名無しさん
07/11/27 19:03:28
俺も俺も

ニートでやってくれる人いないのかな?

95:デフォルトの名無しさん
07/11/27 19:54:31
>>94
よんだ?
っと冗談はおいといて、スレようにレンタルのWikiでも取る?

96:デフォルトの名無しさん
07/11/27 20:11:20
既にある奴で足りてるだろ。
情報が分散するだけだから何個もいらんよ

97:デフォルトの名無しさん
07/11/27 20:17:58
それもそうか。

98:デフォルトの名無しさん
07/11/27 22:05:29
つまりboostがやってるみたいに新規ライブラリを受け付けて
acceptしたりrejectしたりする機構があればいいのか
はてなスターが積み上がる光景が見えたが
母体が2chじゃ投票制にしたら破綻するかなw

99:デフォルトの名無しさん
07/11/27 22:08:15
>>92
俺はconduitの概念がしっくりこないんだよね
ようはstreamなのか?
だったらstreamでいいだろ条項とか思っちゃって

100:デフォルトの名無しさん
07/11/27 22:43:06
>>98
創始者のカリスマ性によると思う

101:デフォルトの名無しさん
07/11/28 00:36:08
static foreachまだかなあ
それとCTFEでForeachRangeが使えないのを早く直して欲しい

102:デフォルトの名無しさん
07/11/28 00:38:19
>>99
streamというよりstreambufのような感じなんじゃないかな。
streamはstreamで別にあるし…

103:デフォルトの名無しさん
07/11/28 13:06:35
Phobosのtrunkが熱すぎる件について
std.functional
std.algorithm
その他もろもろ

104:デフォルトの名無しさん
07/11/28 13:39:35
まじかよwww

105:デフォルトの名無しさん
07/11/28 13:44:26
>>103
ちょ、これから落としてくるw
2.0専用? 1系列でも使えると嬉しいんだが……。

106:デフォルトの名無しさん
07/11/28 13:45:07
Phobosはじまったな

107:デフォルトの名無しさん
07/11/28 13:46:43
>>103
見たとこあんまり面白い変更無いような…。

108:デフォルトの名無しさん
07/11/28 16:37:13
1.024/2.008

109:デフォルトの名無しさん
07/11/28 16:57:50
バグフィックスとphobosの拡張がメインか。

typeof(return)とか実際使う場面なさそうだし

110:デフォルトの名無しさん
07/11/28 18:55:22
Assertion failure: 't->deco' on line 608 in file 'mtype.c'

abnormal program termination
コンパイラバグってるな。@2.008

111:デフォルトの名無しさん
07/11/28 22:57:41
>>36ってdsss.confあたりから設定できない?
budだと-Xあたり? が似たようなオプションになってるっぽいんだけども。

112:デフォルトの名無しさん
07/11/29 01:04:03
なんか今回のバージョンアップ微妙に反応少ないけど
Added const and invariant to IsExpressions
これはなんか嬉しい。
あと、
Added const/invariant structs, classes and interfaces.
これが気になっている。何に使えるんだろう?

113:デフォルトの名無しさん
07/11/29 01:07:19
budだと
version(build) pragma(nolink);
でobj作らないようにして
version(build) pragma(lib, "tx.lib");
などとする

114:デフォルトの名無しさん
07/11/29 07:34:05
wxDでかすぎwwwwwww
わなDのテストやってみたら3.12MB^q^
これは・・・

115:デフォルトの名無しさん
07/11/29 09:12:21
>>112
おれも気になった。
迷走って言葉が頭をよぎった

116:デフォルトの名無しさん
07/11/29 16:27:53
たしか、constメンバってstaticに配置されるんだよな?

117:デフォルトの名無しさん
07/11/29 16:47:51
structとclassでは使い道が思い浮かばんけど、
interfaceなら使いどころもあるんじゃなかろうか。

const interface ICountable { size_t count(); }

みたいな。

118:デフォルトの名無しさん
07/11/29 17:55:18
インターフェースって頭にIつけたほうがいいの?

119:デフォルトの名無しさん
07/11/29 18:24:38
MSハンガリアンだよね。頭にIつけるの。
でも、Iつけてる人は多いねえ。

120:デフォルトの名無しさん
07/11/29 18:48:41
俺は、インターフェイス名と同名でインターフェイスの標準の実装を
作りたくなることが結構あるから、名前重ならないようにIつけてる。

121:デフォルトの名無しさん
07/11/29 19:04:36
同名のプロパティ作りたいからプライベート変数の尻にアンダースコアつけてるけど、似たようなもんか。

122:デフォルトの名無しさん
07/11/29 19:49:31
俺もそのへんなやみつつハンガリアン的とか尻_とかしてるけど、
一般的になにがいいのかねぇ

123:デフォルトの名無しさん
07/11/29 20:06:51
メンバーならm

124:デフォルトの名無しさん
07/11/29 20:21:16
個人的に@インスタンス変数は好き

125:デフォルトの名無しさん
07/11/29 23:59:55
Dじゃ@は使えないからなぁ。
VC++だと$使えたりする。使わんけど。

126:デフォルトの名無しさん
07/11/30 02:23:22
const変数にコンパイル時に決定されない値を入れられるんだけど、
これって仕様に適ってるの?

const l = readln;

127:デフォルトの名無しさん
07/11/30 07:18:24
digital marsのサイトからの引用だけど
int x = 3;
const int *p = &x;
*p = 4; // error, read-only view

const int *q = &x;
int z = *q; // z is set to 3
x = 5; // ok
int y = *q; // y is set to 5

ってなコードがある、仕様だと思う。
Cでもローカルのconst変数宣言時にコンパイル時に決定されない値入れれるし、
その辺の仕様を引き継いでるんじゃない?

128:デフォルトの名無しさん
07/11/30 16:24:13
>>127
そっかー
phobos見てても本来ならfinal使うべきところでconstって書いてたりするから仕方ないのかな。

129:デフォルトの名無しさん
07/11/30 17:18:10
数カ月おきにやる気を補充した所で細かい仕様が変わってるから困る

130:デフォルトの名無しさん
07/11/30 19:09:58
へ?finalあるのにconstがその仕様なんだw
そのうちreadonlyとかできたりして

131:デフォルトの名無しさん
07/11/30 19:16:20
initonlyマダァ-? (・∀・ )っ/凵⌒☆チンチン

132:デフォルトの名無しさん
07/11/30 19:39:36
constって型がconst型になるfinalだろ?

133:デフォルトの名無しさん
07/11/30 22:49:36
D1.0のconstはコンパイルタイム定数だったよなあ
D2.0のconstはそれプラスreadonlyなのかな?とか漠然と思ったまま放置してた俺
D2.0になってconstがどういう意味なのかがわかりにくくない?

134:デフォルトの名無しさん
07/11/30 23:18:47
>>133
おれもそう思う。>>132の解釈でいいのかな?
あとinvariant型とconst型の使い分けがよくわからん。
関数の引数にconst型を使ったとして、「俺は書き換えない」と宣言しても、その関数を実行しているときに
誰かに書き換えられちゃったら読み込んだりとかした時に予期しないエラー起こさない?マルチスレッドのときとか。
関数の戻り値は「書き換えるな」という意味でconst型でいいような気もするけど。

135:デフォルトの名無しさん
07/11/30 23:30:14
URLリンク(www.kmonos.net)
ここ読んでから書き込もうよ。

136:デフォルトの名無しさん
07/11/30 23:40:22
昔はconst変数をコンパイル時定数以外で初期化しようとしたらエラーなってた気がするんだが

137:デフォルトの名無しさん
07/12/01 00:59:27
>>135 を改めて読み直してみたのだが
C++のconstにはコンパイル時定数とreadonlyの2つの意味があって,
C++とD1.0のコンパイル時定数としてのconstはD2.0ではinvariantが請け負って,
C++のreadonlyのconstをD2.0ではconstが請け負うってことかな
/* D2.0
コンパイル時定数 => invariant
readonly => const
*/

138:127
07/12/01 01:06:50
>>135
トン
>>126
ごめん、これC++の場合のコードですね、>>127のレスは忘れてください。
そして7時の俺、目を覚ませ。

139:134
07/12/01 01:07:51
>>135そこは読んだよ。結構前だけど。
それでなお、具体的にはconst型とinvariant型の引数の使い分けがわからん。
たとえばPhobosのstd.string.splitの引数がconst型じゃないのは何でだ?
その辺の明確な指針がほしい。

140:デフォルトの名無しさん
07/12/01 04:59:17
void func(D)(in D dg) {
dg();
}
void main() {
func({printf("test");});
}
//(7): Error: cannot implicitly convert expression (__dgliteral1) of type void delegate() to const void delegate()
あれ?私何か間違えたましたか><
inにconstが入るからダメっぽいんだけどinってこういう使い方じゃないの?

141:デフォルトの名無しさん
07/12/01 05:24:21
どうして readonly なのに書き込めるのはなぜ?


142:デフォルトの名無しさん
07/12/01 08:06:15
1.020でコンパイルできてたSHA512のライブラリが2.007でコンパイルしたらフリーズした
semantic2で止まってるらしいけどsemantic2が何かわからね

143:デフォルトの名無しさん
07/12/01 13:41:05
>>139
splitは文字列のスライスの配列を返すから、
もとの文字列が変更されてしまうと、結果がおかしくなる。

144:143
07/12/01 13:49:14
コードであらわすとこんな感じ。

import std.stdio, std.string;

void main() {
auto s = "aaa bbb ccc".dup;
auto a = split(cast(invariant)s); // 危険なキャスト
writeln(a.join("-"));
s[0..5] = "ddddd";
writeln(a.join("-"));
}

145:デフォルトの名無しさん
07/12/01 13:52:09
それは危険なのはキャストであってidupを使えば解決ってことにはならないの?

146:デフォルトの名無しさん
07/12/01 13:59:59
>>126たしかに
URLリンク(www.kmonos.net)
>const 宣言は、以下の違いを除いて、 invariant とほぼ同じです:
>const宣言された変数を通してデータを書き換えることはできないが、 同じデータを参照する別の箇所がデータを書き換えることは あるかもしれない
>const宣言された変数の型は、const
とあるから、この文章から判断するとconstもinvariantと同様にコンパイル時決定変数なはず。
だからその式が通るならおかしいと思う。

147:デフォルトの名無しさん
07/12/01 14:07:04
>>143-145
もしsplitの引数の型がin char[]だったら、普通に
auto a = split(s);
とできてしまう。
invariant(char)[]だからこそ、危険なキャストのような無茶をしない限り安全。

と言ったほうが分かりやすいかな。

148:デフォルトの名無しさん
07/12/01 14:10:43
>>142
semantic2はsemanticが全て呼び出された後呼び出されるフェーズ。
詳しくはソース嫁

149:デフォルトの名無しさん
07/12/01 14:21:36
>>141
>const宣言された変数を通してデータを書き換えることはできないが、 同じデータを参照する別の箇所がデータを書き換えることは あるかもしれない
constからはreadonlyだから書き込めない。だけど、他のconstでない参照からは書き込める。

150:デフォルトの名無しさん
07/12/01 14:36:38
今までinvariant,const,finalの違いや使い道が分からなかったんだけど、理解できたかも。
まとめると
invariant->コンパイル時定数,書き換え不可
const->readonly,他の参照から書き換え可能
final->初期化以降は書き換え不可,invariantやconstと違ってfinalな変数の指す値は書き換え可能
あれ、じゃあ"初期化以降は書き換え不可"かつ"指している値も書き換え不可"はどう表現するんだ?

151:デフォルトの名無しさん
07/12/01 14:40:37
>>150
final constでok

152:デフォルトの名無しさん
07/12/01 14:43:34
>>151
サンクス 自分のレベルの低さを痛感したorz

153:デフォルトの名無しさん
07/12/01 14:47:53
>>150
こういうことかな?
import std.stdio;
void main(){
  int a = 1;
  int b = 2;
  final const int* p = &a;
  *p = 10;//a.d(8): Error: *p is not mutable
  p = &b;//a.d(9): variable a.main.p cannot modify const/invariant variable 'p'
}


154:デフォルトの名無しさん
07/12/01 14:48:43
あれ被ったか

155:デフォルトの名無しさん
07/12/01 14:52:17
final const(int)* p;と書くべき。

156:デフォルトの名無しさん
07/12/01 15:10:50
普通にconst int* p = &a;でいいんじゃないの?

157:デフォルトの名無しさん
07/12/01 16:42:51
>>156
多分実質はそれでもいいけど、>>146でも言ってるように仕様としてはコンパイル時未決定でもいいのか怪しいし、
finalみたいに"コンストラクタ内では何度も書き換えられる"性質を持ったものを考えてた。

ついでに初歩的なことですまんが、
final const int* p;

final const(int)* p;
の違いって?


158:134
07/12/01 17:12:18
>>143,>>147
なるほど。確かにstd.string.splitだとinvariant型のほうがいい気がするな。
もしconst型だったら、
> 必要なのは、データを絶対に書き換えないという保証のもとにモジュールから関数にデータを読み取らせるプロトコルです。
を満たすための条件(戻り値のデータに書き換えが起こらない条件)が関数の定義からだけでは読み取れず、
ドキュメントを参照して注意しなければならない、という面倒なことが起こるからな。

じゃあ、std.string.countならどうだろう?関数の実引数にしてから関数が終了するまでの間だけ
他から書き換えられないように注意すれば引数がconst型でもいいような気がするんだけど。
これならドキュメント見なくてもconst型の使い方から終了まで書き換えちゃいけないということは判断可能だし、
戻り値がuintだから関数が終了した後まで面倒を見なくてもいい。
char[]型を実引数にするために.idupによる無駄なコピーもしなくていいし、cast(invariant)みたいな無茶なキャストも使わないですむ。

159:デフォルトの名無しさん
07/12/01 17:25:31
>>157
たぶん、こうだと思うよ。

const(int*) p = &a;  //p「int*」が書き換え禁止
int x = *p; //○
*p = 10; //○
p++; //×

const(int)* p = &a;  //pの指し示す先の「int」が書き換え禁止
int x = *p; //○
*p = 10; //×
p++; //○

final const int* p = &a;  //p「int*」書き換え禁止、かつpは初期化後は固定。(冗長?)
int x = *p; //○
*p = 10; //○
p++; //×

final const(int)* p = &a;  //pの指し示す先の「int」が書き換え禁止、かつpは初期化後は固定。
int x = *p; //○
*p = 10; //×
p++; //×

160:デフォルトの名無しさん
07/12/01 17:47:53
>>159 なるほど
ところでいちいち.dupするの面倒なので
mutable to immutable(const/invariant) : deep copy
immutable to immutable(const/invariant) : shallow copy
となるのはどうだろう?

161:デフォルトの名無しさん
07/12/01 17:50:00
>>159
const(int*) は const(const(int)*) と同じ。
const Type var; は final const(Type) var; と同じ。

ただ、2.008ではfinal記憶クラスが正しく機能していない。

162:デフォルトの名無しさん
07/12/01 18:34:50
記憶クラス周りは結構複雑だなぁ。
invariantメンバ関数は、コンパイル時に定数に置き換えられそうだな。
使いこなせれば強力だけど、そこまでが大変だぁ。

163:デフォルトの名無しさん
07/12/01 19:01:19
ん?invariant void foo()で実現できる事って何があるんだろう?

164:デフォルトの名無しさん
07/12/01 19:05:15
>>161
なるほど。
URLリンク(www.kmonos.net)も読み直して理解できたかも。
「const(int)* p」は「(const(int))* p」って意味で、pの指す先は書き換え不可だけど、p自体はconstじゃなくて書き換え可能。
「const(int*) p」は「const(const(int)*) p」って意味で、pも書き換え不可になる訳か。
constの推移性って便利だけど、理解するまでは複雑だな。どこからconstなのか少しわかりにくい。
特に「const int* p」はどこにconstがかかるのか分かりにくいね。

165:デフォルトの名無しさん
07/12/01 19:17:22
>>162-163
を見て気になったけど、

>invariant メンバ関数では、 this参照経由で参照される全てのデータがinvariantであることが保証されます。
struct S
{
int x;

invariant void foo()
{
x = 4; // エラー。x は invariant
this.x = 4; // エラー。x は invariant
}
}

これはつまりS.xはコンパイル時決定変数?
そうなるとSのメンバ変数はすべてコンパイル時決定って意味になるけど、それは使い道がない気がする...

166:デフォルトの名無しさん
07/12/01 19:19:43
>>165
invariantでないメンバ関数を追加すればいいじゃない。

167:デフォルトの名無しさん
07/12/01 19:23:00
const int* p; って宣言で、constはストレージクラスのはずなのに、
typeof(const int*) が、typeof(const(int*)) と同じように働くのが気持ち悪い。

168:165
07/12/01 19:34:50
えーと、
たとえばSを
struct S{
  int x;
  int y;
  invariant void foo(){
    x = 4; //エラー、xはinvariant
  }
  void var(){
    x = 4; //これはNG?
    y = 5; //これはOK?
  }
}
とした場合どうなる?
xはfooでinvariantとして扱われているから、varで書き換えたら怒らるんじゃないかと心配してるんだけど。
で、yはfooからは参照されてないからvarからは普通に書き換え可能?
テストすれば分かることを聞いてすまん。時間あったらテストするんだけど。

169:デフォルトの名無しさん
07/12/01 19:41:32
時間あるじゃんw

170:デフォルトの名無しさん
07/12/01 19:43:55
>>168
invariantメンバ関数はinvariantな型に対してしか呼び出せないから、
fooを呼び出せる場合は、varは呼び出せない。

171:147
07/12/01 19:49:48
>>158
countについては、俺もconstでいいと思う。

172:165
07/12/01 19:54:15
>>170
"invariantな型に対してしか呼び出せない"というのはどういうこと?
invariant void foo()があることでSのメンバ変数がすべてinvariantになるという認識は間違いでしょうか。

173:デフォルトの名無しさん
07/12/01 20:02:37
static関数はインスタンスのメンバ変数にアクセスできないのと同じ理屈を書いてるだけでしょ。
invariantはコンパイル時に解決できなければならないってのを意識すれば分かりやすいかな。

174:165
07/12/01 20:09:08
>>173
つまり
S s1;
invariant S s2;
s1.foo(); //呼び出せない
s2.foo(); //呼び出せる
ということ?これなら納得できる。


175:デフォルトの名無しさん
07/12/01 20:15:25
俺の説明が悪かったのかな?時間あるんだから、テストしようね。

176:165
07/12/01 20:18:42
そうですね。すみません。
本当は今パソコンつけてる暇無い時期なんですけどね。これだけインターネットしてたら確かに同じだな;


177:デフォルトの名無しさん
07/12/01 20:33:37
つまり、

invariant変数はコンパイル時に決定され、ROMに配置される可能性があり、ポインタをとってはならない
invariant型の変数は実行時に決定でき、書き換えられることはないと保障される
invariantメンバ関数はコンパイル時に解決できる
const変数は実行時に決定できる
const型の変数は実行時に決定でき、書き換えてはならない
constメンバ関数は実行時に解決される
static変数はコンパイル時に決定され、実行時に変更することができ、スコープによらずデータが保持される

こうか?

178:デフォルトの名無しさん
07/12/01 21:06:23
>>177
> invariantメンバ関数はコンパイル時に解決できる
これが仕様呼んでる限りだとよくわからん。
普通にモジュールスコープにある関数とか呼べるし

179:デフォルトの名無しさん
07/12/01 21:26:59
invariantメンバ関数から参照できるのは、invariantなメンバのみってことでは。

180:デフォルトの名無しさん
07/12/01 21:29:38
いかん。誤解をまねく。

invariantメンバ関数から参照できるメンバは、invariantのみ。

のほうが正しい。

181:デフォルトの名無しさん
07/12/01 21:36:46
invariantメンバ関数からthisポインタを通じて参照されるオブジェクトはinvariantと仮定される、

じゃないか?

182:デフォルトの名無しさん
07/12/01 21:44:55
このエラーはいったい?
test.d(3): statement expected to be { }, not int

struct S
{ int x;
invariant int y;
}

183:デフォルトの名無しさん
07/12/01 21:46:12
ここらへん明日整理してみるか。

184:182
07/12/01 22:02:29
公式サイトの方しかDL2.0のコンパイラはないのね

185:デフォルトの名無しさん
07/12/02 01:32:52
URLリンク(d.hatena.ne.jp)

186:デフォルトの名無しさん
07/12/02 02:18:43
いまさらなんだけど
alias char[] string;で
invariant(string)ってした方がきもちよくねconst stringとか。
今char[]とstringを使い分けなきゃならんのがギモヂワルイ

187:デフォルトの名無しさん
07/12/02 03:33:33
>>186 確かに気持ち悪い
でも invariant(string) s; が invariant(char[]) s; になって
今の invariant(char)[] じゃなくなるから意味が変わっちゃうね
とはいえ他の手はこれくらいしかないんじゃなかろうか
alias char[] string;
alias const(char)[] cstring;
alias invariant(char)[] istring;

188:デフォルトの名無しさん
07/12/02 04:01:34
alias invariant(char) ichar;
とかをたくさんつくればいいのかな!

189:デフォルトの名無しさん
07/12/02 08:23:05
中途半端にstringなんてaliasを標準に入れるから面倒になった悪寒
いっそstring使わない方向でいこうかな・・・

190:デフォルトの名無しさん
07/12/02 10:04:36
↑で
final const invariant いろいろ議論していた方々ありがとうございます
おいらも理解がふかまりました

191:デフォルトの名無しさん
07/12/02 10:29:21
>>185
なるほど、メンバ関数になるとほんと複雑だな。

192:デフォルトの名無しさん
07/12/02 23:07:48
>>185
>mutable/const のメンバ関数あるいはオブジェクトを経由すると invariant メンバ関数を呼び出せない

これはなんでなんだぜ?

193:デフォルトの名無しさん
07/12/02 23:36:08
invariant メンバ関数から const メンバ関数を呼び出せないのはわかるが、
mutable から const や invariant を呼び出せないのはよく分からん。
そもそも変数なら const は invariant に昇格できるんじゃなかったっけか?

194:デフォルトの名無しさん
07/12/03 00:24:57
mutableからconstは呼び出せると思うが

195:デフォルトの名無しさん
07/12/03 02:10:47
ごめん、mutable から invariant のメンバ関数だけだった。


196:デフォルトの名無しさん
07/12/03 03:37:12
mutable/constからinvariantを呼び出せない理由は
コンパイル時/実行時の違いが関係ありそうなんだけど
よく分からないんだ・・・

197:デフォルトの名無しさん
07/12/03 07:44:56
invariant→const : ok
mutable→const : ok
あとは全部だめ

198:デフォルトの名無しさん
07/12/03 09:51:48
constさいきょう!

199:デフォルトの名無しさん
07/12/03 21:41:55
>>196
invariantメンバ関数はinvariant型のインスタンスに対してしか呼び出せないんだから、
mutableメンバ関数の呼び出せるインスタンスに対しては絶対に呼び出せないし、
constメンバ関数の呼び出せるインスタンスは、mutable型かconst型だけで、
invariantメンバ関数が必ずしも呼び出せるとは限らない。

200:デフォルトの名無しさん
07/12/03 21:47:39
            │mutable型│const型│invariant型
mutableメンバ関数 │   ○   │  ×  │  ×
constメンバ関数  │   ○   │  ○  │  ○
invariantメンバ関数│   ×   │  ×  │  ○

こういうことだろ?

201:デフォルトの名無しさん
07/12/03 21:52:01
戻り値がmutableで、関数がconstの場合はどうすればいいんだろう?

202:デフォルトの名無しさん
07/12/03 21:57:59
何も悩む必要はないと思うけど。

class C {
const C dup() { return new C; }
}

void main(){
auto c_const = new const(C);
auto c_mutable = c_const.dup;
writeln(typeid(typeof(c_const)));
writeln(typeid(typeof(c_mutable)));
}

203:デフォルトの名無しさん
07/12/03 22:56:41
使い分けはこうか
class A {
 const int a() { return 1; }
 cosnt(int) b() { return 2; }
 const const(int) c() { return 3; }
}

204:デフォルトの名無しさん
07/12/03 23:22:31
え、もしかして
const int i;と
const(int) i;ってかなり意味違う?

205:デフォルトの名無しさん
07/12/03 23:46:55
うあ、おれもいま初めてしった。

C++でいう
class C {
int foo() const;
};
ってどうやるんだろうとずっと思ってた

206:デフォルトの名無しさん
07/12/03 23:50:29
これかなり問題ある気がするんだど、どうだろう。

void main(){
invariant(int) i;
auto p = &i;
assert(is(typeof(p) == invariant(int)*));
i = 2;
writeln(*p); // 2
i = 3;
writeln(*p); // 3
}

pの指す先はinvariantのはずなのに、合法的なコードでかわってしまうという

207:デフォルトの名無しさん
07/12/03 23:53:15
>>205
>>185にはそれのことが書いてあるんだわ

208:デフォルトの名無しさん
07/12/03 23:55:50
>>206
URLリンク(www.kmonos.net)
処理系は、 実装の際にinvariant宣言の初期化子で
invariantのインスタンスを置き換えても構いません。
このため、invariant変数のアドレスを取得するのは不正となります:
invariant int i = 3;
invariant* p = &i; // error, cannot take address of invariant

とのことなので &i が不正な処理なのです
エラーにならないのならそういうバグかもしれない

209:デフォルトの名無しさん
07/12/04 00:02:08
やばい、今一理解できない orz

import std.stdio;

public class S
{
    int mutable_num = 1;
    const(int) const_num = 20;
    const int const_num2 = 21;
    invariant(int) invariant_num = 30;
    invariant int invariant_num2 = 31;
}

void main()
{
    S s = new S();
    writeln("mutable_num: ", s.mutable_num);
    writeln("const_num: ", s.const_num);
    writeln("const_num2: ", s.const_num2);
    writeln("invariant_num: ", s.invariant_num);
    writeln("invariant_num2: ", s.invariant_num2);
}

-- output ---
mutable_num: 1
const_num: 20
const_num2: 21
invariant_num: 30
invariant_num2: 4296960

210:デフォルトの名無しさん
07/12/04 00:03:25
>>208
それはinvariant記憶域クラスの変数の話で、
invariant型のauto変数のポインタの話には触れてないよね。
invariant int i; と invariant(int) i; は一応ちがうものだと思うんだけど。

211:デフォルトの名無しさん
07/12/04 00:11:29
型がinvariantなのと変数がinvariantっていう違い?

212:デフォルトの名無しさん
07/12/04 00:13:26
>>211
そう。
現在の文法では、invariant型のデータを保持するミュータブルな変数が許されてる、様な気がする。

213:208
07/12/04 00:27:32
>>210
あ そうか
型と記憶域クラスで違うんだね・・・

214:205
07/12/04 07:16:49
>>207
URLリンク(d.hatena.ne.jp)
まとめきた
超さんくす

215:デフォルトの名無しさん
07/12/04 14:22:33
const int i;
const(int) i;
が違うのは分かるけど。後者は使い道はないよね?

216:デフォルトの名無しさん
07/12/04 15:31:26
関数の引数に使えたりしない?
invariantでもmutableでも受け取れる・・・みたいな

217:デフォルトの名無しさん
07/12/04 20:02:39
メンバだと invariant int も const int もクラス変数に取られるみたいだけど
invariant int がインスタンス変数としてアクセスするとどっかのアドレス返すのは何故だろう?
constはメモリを使い、invariantは使わないという差なら、エラーにすりゃいいのに。

218:デフォルトの名無しさん
07/12/04 20:09:51
>>217
どういうこと?>>209のこれのこと?
invariant_num: 30
invariant_num2: 4296960

219:デフォルトの名無しさん
07/12/04 20:14:43
それそれ。仕様上、メモリにとられない=直値に置き換え?みたいだし、何が取れてるんだろうと。

220:デフォルトの名無しさん
07/12/04 21:31:52
それは、ただのバグじゃねえの?
俺の環境(2.008/windows)だと

mutable_num: 1
const_num: 20
const_num2: 21
invariant_num: 30
invariant_num2: 31

となったが。

221:デフォルトの名無しさん
07/12/04 21:51:59
あらら

222:デフォルトの名無しさん
07/12/04 22:02:36
2.007と008との間で対応入ってるみたいね。
const型がコンストラクタで初期化できなくなってるし、
今は使いこなそうと思わないほうがいいのかも。

223:デフォルトの名無しさん
07/12/04 23:01:33
じゃあ2.009待つか…

マダァ-? (・∀・ )っ/凵⌒☆チンチン

224:デフォルトの名無しさん
07/12/05 16:31:44
今月発売予定 (もう出てる?) の本
Learn to Tango with D
URLリンク(apress.com)


225:デフォルトの名無しさん
07/12/05 16:43:47
>>224 おお・・・すげえ

226:デフォルトの名無しさん
07/12/05 16:44:52
>>224
Amazon.co.jpによると発売日2008/1/28になってるよ。
URLリンク(www.amazon.co.jp)


227:デフォルトの名無しさん
07/12/05 17:15:50
どうせ3ヶ月くらいで古くなるんでしょ

228:デフォルトの名無しさん
07/12/05 17:17:55
Tangoまだ1.0も出てないのにw

229:デフォルトの名無しさん
07/12/05 20:43:43
枯れてwxWidgetsが対応したら、気軽にクライアントに仕えるのにな

230:デフォルトの名無しさん
07/12/05 20:59:21
Tango・・Phobosと仲良くしてほしいなぁ

231:デフォルトの名無しさん
07/12/06 17:41:03
Ultimate Tangobos まぁ~だぁ~?

232:デフォルトの名無しさん
07/12/06 17:49:48
なんかStream.readf壊れてる気がするんだけど…

233:デフォルトの名無しさん
07/12/06 21:46:57
アルティメット・タンコボキバジとな

234:デフォルトの名無しさん
07/12/06 23:22:07
タンゴボスとガバスはどっちが偉いんですか?

235:デフォルトの名無しさん
07/12/07 03:28:13
丹古母鬼馬二
ってなんだこのトンチンカンな名前。
具ぐれ化す。並の名前だなぁ。初めてきいたよ。

236:デフォルトの名無しさん
07/12/07 11:42:36
URLリンク(ja.wikipedia.org)
今日日、小学生でもこんな稚拙な文章は書かないぞw

237:デフォルトの名無しさん
07/12/07 15:41:16
void hoge(ref const real r) {
}
void main() {
real r;
hoge(r);
}
dmd止まる\(^o^)/

238:デフォルトの名無しさん
07/12/07 19:02:40
>>237
その類のバグは既に報告されている気がする

239:デフォルトの名無しさん
07/12/08 14:07:52
phobosのrepositoryが全然変化ないなあ

240:デフォルトの名無しさん
07/12/09 21:35:10
tangoでFIFOが高速に扱えるcollectionってないのかな?
最初ListSeqがそれかと思ったがこれはなんかLIFOのみ高速に扱えるみたいで…
なんかC++のSTLのlistとかに比べると使い勝手悪い感じだなぁ…

241:デフォルトの名無しさん
07/12/10 09:34:19
phobosのtrunkに単方向リストSList(T)が追加される兆しがあるよ
まだprivateらしいけど

242:デフォルトの名無しさん
07/12/10 13:31:24
SListは最新版DMDに入ってるじゃん。

243:デフォルトの名無しさん
07/12/10 21:20:38
あれ・・・編集したってだけか

244:デフォルトの名無しさん
07/12/11 12:04:30
Dがでてきて結構たつのに未だにコンテナすら整備されてないんだな
STLを置き換えられる程度には用意して欲しいもんだ

245:デフォルトの名無しさん
07/12/11 12:32:34
壮大なDTLの計画が現在進行中だが、
あまりにも壮大すぎて全く完成していないのが現状。

246:デフォルトの名無しさん
07/12/11 12:44:52
ここでなんか寄せ集めのライブラリ作ろうぜ
必要なときにdファイル落としてプロジェクトに組み込む系のやつ

247:デフォルトの名無しさん
07/12/11 13:12:01
DTLのプロジェクトってもう動いてないんじゃ・・・
スマートポインタはGCあるからいらないとして(ほんとに?)
主要なコンテナとアルゴリズムくらいでいいや
あわよくばストリーム系まであれば万万歳

248:デフォルトの名無しさん
07/12/11 13:15:03
tangoでいいじゃん

249:デフォルトの名無しさん
07/12/11 16:08:22
イテレータクラスのかわりにopApplyがあると思ってたんだけどopApply自体あんまり融通利かないんだね

250:デフォルトの名無しさん
07/12/11 19:01:08
Javaを参考にAPIのインタフェースだけ揃えりゃライブラリも揃えやすいはずだけどね。
D自体、言語を枯らそうという気が皆無だから、ライブラリなんて作れないってのもあるかも

251:デフォルトの名無しさん
07/12/11 21:01:16
>>248
Phobos上でやりたいよん

252:デフォルトの名無しさん
07/12/11 21:08:34
tangobosでおk

253:デフォルトの名無しさん
07/12/11 22:29:53
Phobosって、設計とか何も考えずに、このぐらいの機能はいるだろって感覚だけで作っていった印象があるべ。
もうちょっとスマート(に拡張できる)設計をしてくれればなあ。

254:デフォルトの名無しさん
07/12/11 22:52:54
まあ、そのためのtangoだろう

255:デフォルトの名無しさん
07/12/12 00:20:40
Dってどのへんが支持してるの?

256:デフォルトの名無しさん
07/12/12 00:28:32
このスレ

257:デフォルトの名無しさん
07/12/12 01:55:59
URLリンク(www.tiobe.com)
なかなか10位以上にはなれないが頑張ってるよ

258:デフォルトの名無しさん
07/12/12 04:33:37
(ダリオ戸田の声で)辞書猫の Tango だっす!

259:デフォルトの名無しさん
07/12/12 23:57:48
>>257
ほんとだ
もっとがんばれ。超がんばれ。

260:デフォルトの名無しさん
07/12/13 00:10:51
というかperlってpythonより下なんだ・・・早いなぁ

261:デフォルトの名無しさん
07/12/13 00:35:15
>>257
Lua上がりすぎw

262:デフォルトの名無しさん
07/12/13 00:39:29
1%未満から1.6%に増えるとか大健闘だな
やっぱいつまで経っても正式版が出ないから敬遠する人間が多かったんだな

263:デフォルトの名無しさん
07/12/13 11:54:51
Dより上になんか壁を感じるw
メジャーの壁というか。「ここからが本当の地獄だ……!」みたいな。

264:デフォルトの名無しさん
07/12/13 12:25:17
最強のライブラリと伝説のIDEが現れればC++なんて目じゃないよ。

265:デフォルトの名無しさん
07/12/13 12:42:36
俺もpythonの位置に違和感があるなあ

266:デフォルトの名無しさん
07/12/13 16:49:10
>>264
そりゃすべての言語にいえるんじゃね?

267:デフォルトの名無しさん
07/12/13 16:55:24
いずれ日本語を正しく扱うクラス要るし早めに作っとこうぜ

268:デフォルトの名無しさん
07/12/13 19:13:51
Phobosってcharsetをサポートしてないのな。
windowsのコードページ変換のみサポートしてる感じか?

269:デフォルトの名無しさん
07/12/13 20:42:09
MangoにICUのD-bindingあった気がするんだが

270:デフォルトの名無しさん
07/12/13 22:29:13
こういう特殊化できるようにならないかな。

void func(T : function)(T f) { f(); }

271:デフォルトの名無しさん
07/12/13 22:57:02
現状だと、aliasで受けるしかできないんだっけ。

272:デフォルトの名無しさん
07/12/14 01:48:32
どんなに仕様や実装が素晴らしくても>>264が駄目だと結局駄目なんだよね・・・

273:デフォルトの名無しさん
07/12/14 14:05:36
その言い回しだと>>264が駄目な人間みたいじゃないかw

274:デフォルトの名無しさん
07/12/14 14:18:51
ライブラリはともかく、IDEに頼るのは駄目ジャマイカ?

275:デフォルトの名無しさん
07/12/14 14:21:06
仕様や実装が固まらんかぎり良いIDEは出てこないんじゃね?

276:デフォルトの名無しさん
07/12/14 18:11:41
いつのまにかクラスをtypedefできるようになってた・・・orz
ついにこう書けるんだね・・・! つーかいつできるようになったんですか><
//class HogeError : Error {
// this(string msg) {
// super(msg);
// }
//}
typedef Error HogeError;

277:デフォルトの名無しさん
07/12/14 19:50:45
継承関係はどうなるの?
何か派生だとしっくりこないし、同じ実装を持つ他人になる?

278:デフォルトの名無しさん
07/12/14 21:02:38
全く同じClassInfoを持つけど、オーバーロードでは区別され、
typedefもとの型には暗黙変換できる型
になるみたい。

279:デフォルトの名無しさん
07/12/14 21:32:36
説明だけみるとなんかダウンキャストできなさそうだな。
出来なくてもいいけど。

280:デフォルトの名無しさん
07/12/15 09:04:31
同じClassInfoをもつのに、ダウンキャストできないってことある?

281:デフォルトの名無しさん
07/12/15 11:09:41
D2.008 Exceptionから、fileとlineがきえた えぇぇ・・・

282:デフォルトの名無しさん
07/12/15 11:56:33
>>281
外部にリリースするものとして、ファイル名だの行番号だのが入っているバイナリってどうなの?
と思っていたから別にそれでいいと思う。
でもデバッグ時にはほしい情報だよね。

283:デフォルトの名無しさん
07/12/15 12:13:31
VistaSP1のdfrgntfs.exeなんかはもろにソースファイルのパスとかが入ってる 
評価版だからだと思うけど

284:デフォルトの名無しさん
07/12/15 12:14:30
>>282
伝説のIDEが現れれば例外発生元を突き止めてビジュアルに表示してくれるよ!

285:デフォルトの名無しさん
07/12/15 13:54:31
罠D

286:デフォルトの名無しさん
07/12/15 19:57:09
MSがVisualStudioで出せば・・・
万が一にもありえんか

287:デフォルトの名無しさん
07/12/15 21:55:09
MSがVisualStudioで出すことになれば仕様策定の遅さに苛立って
独自拡張を続け、ライブラリもMS独自のものが出来上がるだろう。

そう思うと当初のJavaと同じ問題抱えているな・・・

288:デフォルトの名無しさん
07/12/15 22:02:25
MS Visual D# ...

それはそれでよさそうな気がしないでもない

289:デフォルトの名無しさん
07/12/15 22:10:23
ネイティブバイナリ吐かないDなんてC#でいいじゃん・・・

290:デフォルトの名無しさん
07/12/15 22:13:12
それならVisual D/CLIで…

291:デフォルトの名無しさん
07/12/15 23:15:56
>>290 /CLI の部分はいらねえー

292:デフォルトの名無しさん
07/12/15 23:23:02
>>274
IDEが何やってるのか分かる限りは、むしろIDEもライブラリも「使うべき」だと思う。
とeclipseのリファクタリング機能に味を占めたヘタレの俺が言ってみる。
強い型付けとかコンパイルの早さとか、IDEがあると生きてくる言語だと思うから余計勿体ないのよね。


しかし、年の瀬も押し迫ってきたな……
去年の1.0への期待でwktkしながら年を越したっけなぁ。
来年のDは果たしてどこへ向かうことやら。

正月にはお空の火星に向かってみんなでお祈りだ。

293:デフォルトの名無しさん
07/12/16 00:40:03
1月1日にv1.001が出たんだっけ?
あれ?

294:デフォルトの名無しさん
07/12/16 00:57:25
じゃあきっと、あと2週間で3.001がでるな。

295:デフォルトの名無しさん
07/12/16 19:16:59
もうそんなになるっけ??

296:デフォルトの名無しさん
07/12/16 19:22:03
0.99リリース

ついに1.0が来るぞー!

0.100リリース

(゚д゚)

は2004年頃だったっけ?

297:デフォルトの名無しさん
07/12/16 19:52:33
次のバージョンうpまだー

298:デフォルトの名無しさん
07/12/16 23:00:24
static foreachまだかお?

299:デフォルトの名無しさん
07/12/16 23:20:22
import std.metastrings;
pragma(msg, Format!("%s%s", 1, 2));

%sが直に出力されちゃうんだけど、使い方間違ってる?

300:デフォルトの名無しさん
07/12/16 23:33:08
>>299 2.008ではうまく動いてないように見えるなあ

301:デフォルトの名無しさん
07/12/17 01:07:23
>>299
semanticが呼ばれてないに一票

302:デフォルトの名無しさん
07/12/17 17:01:27
MC++DのアンドレイがThe D Programming Languageって本書くよってさ
URLリンク(erdani.org)
Andrei is working on "The D Programming Language" book, slated to hit the shelves in October 2008.
His interest in the D programming language stems from Andrei's active participation in the design of D 2.0
as a close collaborator of D's creator, Walter Bright.

あー 先週京都に来てたんだ
Andrei will present the paper "Graph-Based Learning for Phonetic Classification" co-authored
with Katrin Kirchhoff at The 2007 IEEE Automatic Speech Recognition and Understanding (ASRU)
Workshop, December 9-13, Kyoto, Japan.

303:デフォルトの名無しさん
07/12/17 22:26:37
これは期待

304:デフォルトの名無しさん
07/12/17 22:58:32
役に立つとか立たないとかじゃなく、好きな小説家の新作みたいに楽しみなんだけど、
これはちょっと妙な期待をしすぎかもしれんw

305:デフォルトの名無しさん
07/12/17 23:04:28
日本語訳が出る頃には半分くらいコンパイル通らなかったりして

そもそも日本語訳が出るかはさておき

306:デフォルトの名無しさん
07/12/17 23:29:16
今時ならXMLベースでリソースファイル作ればいいんだけどね

307:デフォルトの名無しさん
07/12/18 01:03:37
>>302
本が出ることも単純に楽しみだけどこの文で一番気になったのは
D2.0をOctober 2008頃には安定させるつもりだってこと

308:デフォルトの名無しさん
07/12/18 01:09:06
3.0をリリースするってことだろw

309:デフォルトの名無しさん
07/12/18 05:52:34
ペロ・・・これは思い込み・・・!

310:デフォルトの名無しさん
07/12/18 05:53:14
誤爆

311:デフォルトの名無しさん
07/12/19 22:08:33
関数のインライン展開って何か条件ある?
-inline オプションつけても全然効果無いんだけど。

312:デフォルトの名無しさん
07/12/19 22:27:27
インライン展開したら効率悪くなると判断されてるんじゃなかろうか

313:デフォルトの名無しさん
07/12/19 22:38:20
逆逆。むやみにインライン展開されて逆に遅くなってるだけ。

314:デフォルトの名無しさん
07/12/19 23:37:29
-inlineつけたらどこまでインライン展開されるの?
main以下全部ってわけじゃないよね

315:デフォルトの名無しさん
07/12/19 23:37:29
いやいや、例えば配列の境界チェックありで要素を取り出そうってので以下のような
コードでテストしたらテンプレート化したほうは確実に遅いんだよね。-inline つけてもつけなくても。
size_t at(T)(T[] a, size_t i){
  if( i < a.length ) return a[i];
  else throw new ArrayBoundsException(null, 0);
}
void main()
{
  char[] a = new char[64 * 1024 * 1024];
  auto begin = timeGetTime();
  for(size_t i = 0; i < a.length; i++)
  {
    if( i < a.length ) a[i] = a[i];
    else throw new ArrayBoundsException(null, 0);
  }
  Stdout.format("{}", timeGetTime() - begin).newline;

  begin = timeGetTime();
  for(size_t i = 0; i < a.length; i++)
  {
    a[i] = a.at(i);
  }
  auto end = timeGetTime();
  Stdout.format("{}", timeGetTime() - begin).newline;
}


316:315
07/12/19 23:40:33
で、上のコード実行すると最初のテンプレート化してないほうが 75ms ぐらいで、
下のテンプレート化したほうが 350ms ぐらいだった。-inline つけてもつけなくても一緒。
-inline つけたやつを逆汗したら当然展開されていなかった。



317:デフォルトの名無しさん
07/12/19 23:50:00
どうでも良い事でスマソ。
逆アセって事は、直接アセンブラを吐けないコンパイラなの?

318:デフォルトの名無しさん
07/12/20 00:47:37
??
もっと平易な表現でお願い。

319:デフォルトの名無しさん
07/12/20 06:44:43
マイクロソフトって単位?

320:デフォルトの名無しさん
07/12/20 10:02:05
>>317
gdcは吐けるdmdは吐かない

321:デフォルトの名無しさん
07/12/20 22:01:20
dsss + Tango でリソースファイルをリンクするのにはどうするの?
dmd-win-tangoとかdsss.confとか見たけどよくわからんかった…(´・ω・`)

322:デフォルトの名無しさん
07/12/20 22:48:22
>>320
thanx

323:デフォルトの名無しさん
07/12/20 23:09:21
dmdの場合はオブジェクトファイルをdmのobj2asmにかければ大丈夫じゃね?

324:デフォルトの名無しさん
07/12/21 13:48:13
更新まだかなぁ・・・

325:デフォルトの名無しさん
07/12/22 00:40:57
>>324
じゃあこれで。
Tango 0.99.4 Frank has been released.

326:デフォルトの名無しさん
07/12/22 18:32:51
D言語ってJavaのJFrameみたいに簡単にウインドウ出せるの?

327:デフォルトの名無しさん
07/12/22 19:14:41
AWTのD-portingのDWTを使ってみるとか。

328:デフォルトの名無しさん
07/12/23 00:04:45
DFLならこう
// URLリンク(www.dprogramming.com)
import dfl.all;
int main()
{
 Form myForm;
 Label myLabel;
 
 myForm = new Form;
 myForm.text = "DFL Example";
 
 myLabel = new Label;
 myLabel.font = new Font("Verdana", 14f);
 myLabel.text = "Hello, DFL World!";
 myLabel.location = Point(15, 15);
 myLabel.autoSize = true;
 myLabel.parent = myForm;
 
 Application.run(myForm);
 
 return 0;
}

329:デフォルトの名無しさん
07/12/23 00:43:29
tango の最新版、日付・時刻関連が少しすっきりしたけど、まだ手の入る余地がありまくってるな。


330:デフォルトの名無しさん
07/12/23 03:17:45
>>327
DWTはSWTよ
あと開発止まってるぽい

331:デフォルトの名無しさん
07/12/23 04:52:40
とりあえずTango0.99.4のtango.util.Convertの792行目あたりがあやしい。
returnで返さないっぽい

332:デフォルトの名無しさん
07/12/23 14:06:20
DFLは付属のdfl.exe使わされるのが嫌で使ってないなあ
dmd.exeだけでできたい!

333:デフォルトの名無しさん
07/12/23 14:08:07
dmdでも長ったらしいオプションつけるか、応答ファイル書くかしておけばいけるでしょ。

334:デフォルトの名無しさん
07/12/23 22:14:13
寧ろDFLのモジュールとlib以外の使い道知らんかった

335:デフォルトの名無しさん
07/12/24 21:57:56
ヲルたんからのクリスマスプレゼントwktk

336:デフォルトの名無しさん
07/12/24 22:36:16
実際もうじき約一か月たつし、先月と先々月の更新の日付から見たら夢見てもいいかも?
とりあえず全裸待機。

337:デフォルトの名無しさん
07/12/24 22:37:06
風邪ひくぞ

338:デフォルトの名無しさん
07/12/24 22:44:08
いい子にして早く寝ないとな…

をるたんのとこでは今何時かしらないけど

339:デフォルトの名無しさん
07/12/25 22:36:46
>>110でも出てるけど
Assertion failure: 't->deco' on line 608 in file 'mtype.c'
はいつなおるんだあああ

340:デフォルトの名無しさん
07/12/26 07:10:52
全裸待機。 この前のカンファで目玉はなんだっけ
あまり意味なさそうな static foreachしか覚えてないw

341:デフォルトの名無しさん
07/12/26 11:36:34
const属性を考慮してphobosが書き換えられているようだ

342:デフォルトの名無しさん
07/12/26 11:57:38
>>340
macro
ADL
拡張メソッド
static引数(関数テンプレートの糖衣構文)
メンバの委任
コンパイル時に全てのcaseが網羅されているか検証するfinal switch

あたりだったか。

343:331
07/12/26 21:03:27
Tango0.99.4のtango.util.Convertの792行目あたりがあやしいかったのは、rev3066で直ったみたいだ。

しっかし、Tangoもどこまでやったら1.0出す気なんだろ。
まぁ確かにもっとインターフェース良くなるところは多いと思うけど。

344:デフォルトの名無しさん
07/12/26 23:55:05
2.0で追加されたphobosのライブラリを
1.0でも使えるようにするプロジェクト std2 が dsource にできてるね

345:デフォルトの名無しさん
07/12/27 00:14:25
それよりアップデートはまだなのか

346:デフォルトの名無しさん
07/12/27 20:34:53
extern(C++)便利だなこりゃ

347:デフォルトの名無しさん
07/12/27 21:19:39
>>346
あれってC++のソースのコンパイルをmsvcではなくdmcでしなきゃいけないんだよね?
そう思ってstlportのセットアップが面倒で試してないんだが面白そう

348:デフォルトの名無しさん
07/12/27 21:27:47
C++のobjもOMFとCOFFって分け方でいいの?
DMDはOMDってことになるのかな?

349:デフォルトの名無しさん
07/12/27 22:29:41
>>347
いやいや、VisualStudioで作成したやつだよ。
~.libをlink.exeにくわさないとだめだけど

350:デフォルトの名無しさん
07/12/27 22:43:51
正確には dmc も msvc も同じ修飾名を使っているので問題がない。
Linux ではどうなってるかしらん。

351:デフォルトの名無しさん
07/12/28 00:18:13
extern(C++)といえば、interface宣言を使ってC++のオブジェクトをDからアクセスできるようになったけど、これの場合はCOMと同様にC++マングルは関係なくなるのかな?

352:デフォルトの名無しさん
07/12/28 00:40:44
いえす。C++マングリング規則にD側が合わせることになる。

353:デフォルトの名無しさん
07/12/28 00:41:45
COMインターフェイスってどういう条件で普通のインターフェイスからCOMインターフェイスになるの?
IUnknownを継承するだけでいいの?

354:デフォルトの名無しさん
07/12/28 00:58:33
>>352

DのinterfaceがC++のオブジェクトモデルと互換性があるということで、実際のシンボル名関係なしにVTbl手繰ってメソッド呼べるのかなぁと思ってたんだが、この場合でもあの_ZN3なんとかみたいなシンボル名からメソッドを呼び出しているの?

>>353
MS用語でいう"カスタムインターフェイス"ならIUnknown継承だけでCOMインターフェイスだったと思う。
実際にCOMコンポーネントとして使えるようにするにはいろいろ登録したり、QueryInterfaceの動作要件とかあったはず。

355:デフォルトの名無しさん
07/12/28 07:58:40
>>353
extern(Windows)なinterfaceだったと思う。

356:デフォルトの名無しさん
07/12/28 11:02:18
>>353
IUnknownって名前のインターフェイスを継承するだけでいいみたい。

interface IUnknown { }
interface ITest: IUnknown { }

void main(){
ITest o;
delete o; //Error: cannot delete instance of COM interface ITest
}

357:デフォルトの名無しさん
07/12/29 07:09:33
COMインターフェースが何に使えるかおすえて

358:デフォルトの名無しさん
07/12/29 08:44:34
DLL を通してクラスを提供可能。

359:デフォルトの名無しさん
07/12/29 13:30:23
news://news.digitalmars.com:119/fl2jnu$1i6p$1@digitalmars.com
> Subject: During these holiday times...
> From: Walter Bright
> Date: 2007/12/28 19:38
>
> ...we should take a moment to reflect on the important things in life.
>
> URLリンク(uk.youtube.com)

360:デフォルトの名無しさん
07/12/29 19:47:29
えw

361:デフォルトの名無しさん
07/12/30 01:03:28
>>349 ごめんできない
// cpp.cpp
#include <iostream>
#include "cpp.h"
void Cpp::func() {
 std::cout << "call Cpp::func()" << std::endl;
}
Cpp* newCpp() {
 return new Cpp;
}
void deleteCpp(Cpp* instance) {
 delete instance;
 instance = NULL;
}
これをmsvcでコンパイルして cpp.lib もしくは cpp.obj を作った


362:361
07/12/30 01:04:06
// main.d
extern(C++) {
 interface Cpp {
  void func();
  }
  Cpp newCpp();
  void deleteCpp(Cpp instance);
}
void main() {
 Cpp cpp = newCpp();
 cpp.func();
 deleteCpp(cpp);
}

>dmd -c main.d
>link main.obj cpp.lib

OPTLINK (R) for Win32 Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved

d_to_cpp.lib
Error 43: Not a Valid Library File
--- errorlevel 1

何がまずいですか?

363:361
07/12/30 01:06:09
間違えた
C++のソースはcpp.cppじゃなくてd_to_cpp.cpp

364:349
07/12/30 07:27:19
ごめん、 libにくわすんじゃなくて
implib.exe だった

C:\dm\bin\implib.exe /s $(OutDir)\$(TargetName).d.lib $(TargetPath)
こういうことをやってます。

で出力された ~.d.lib を lib.exe でリンクね

365:デフォルトの名無しさん
07/12/31 21:25:36
皆さんよいお年を
をるたん来年もよろしく
2008.1.1の更新きたい

366: 【小吉】
08/01/01 03:26:27
あけおめ

アップデート期待age

367:デフォルトの名無しさん
08/01/01 09:51:38
あけおめ

をるたんところは、夕方ごろ年明けだよね。

368:デフォルトの名無しさん
08/01/01 11:10:14
ああ、アメリカかあ。生アメリカだよなあそこ。いいなあ。。。

369:デフォルトの名無しさん
08/01/01 12:05:15
D3.0が出ると聞いて

370:デフォルトの名無しさん
08/01/01 14:32:33
D 0.2008 になると聞いてやってきました。

371:デフォルトの名無しさん
08/01/01 17:57:30
今年こそは伝説のIDEが現れますように

372:デフォルトの名無しさん
08/01/01 19:55:39
その前に伝説の言語仕様が現れないと

373:デフォルトの名無しさん
08/01/01 20:34:40
2.009ktkr…なにこのがっかり変更数
裏で何か巨大なものを作ってると思って待つしかないか…

374:デフォルトの名無しさん
08/01/01 21:40:06
これはがっかりすぎる…

375:デフォルトの名無しさん
08/01/01 21:44:13
CTFE周りのバグフィックスはまあ嬉しい

376:デフォルトの名無しさん
08/01/02 00:31:55
新バージョンへの期待大きすぎワラタ

> Redid const/invariant semantics again.

やり直し…? どう変わったのかよく分からないや。

377:デフォルトの名無しさん
08/01/02 00:57:17
>>110が直ってないし・・・

378:デフォルトの名無しさん
08/01/02 01:01:54
>>376
void f(const(int) x);
void f(int x);
のオーバーロードが出来るようになってるのは確認した。

invariant(int) i;
i = 4;
もできなくなってるから、トップレベルのconst/invarinatの扱いが変わったみたいね。

379:378
08/01/02 01:06:56
invariant T var;
invariant(T) var;

ドキュメントによれば、この二つが完全に等しくなったみたいだね。
やっと気持ちの悪いねじれが解消された感じ。ようやくだけど。

380:デフォルトの名無しさん
08/01/02 01:16:41
全く同じ関数が二つ以上あっても呼ばれなきゃエラーにならなくてワロタ。

381:デフォルトの名無しさん
08/01/02 01:20:05
>>380
おおほんとだ。
リンカエラーにはなるけど、コンパイラはお咎めなしなんだな

382:デフォルトの名無しさん
08/01/02 01:31:48
Manifest Constant

enum string s = "hoge";

もはやenumの意味が消失してしまってる…

383:デフォルトの名無しさん
08/01/02 01:42:20
だめだ…をるたたん止めないと…

class C { }
void main() {
const(C) c;
c = new const(C); // error!!!
}

384:デフォルトの名無しさん
08/01/02 02:15:44
struct A {}

A a0;
const A a1;
a0= a1; //Error: cannot implicitly convert expression (a1) of type const(A) to A

をるたん・・・


385:デフォルトの名無しさん
08/01/02 02:40:31
>>384
それは今まで出来たのがおかしい気がする。

386:デフォルトの名無しさん
08/01/02 02:49:24
>>385
>>384じゃないけど、構造体の代入はビットコピーなんだからできないとおかしいだろう。

387:デフォルトの名無しさん
08/01/02 02:51:46
>>386
例えば、Aがint*型のメンバを持ってたとしたら、
const(int)*からint*への暗黙の型変換が起きてしまうと思うのだけど。

388:デフォルトの名無しさん
08/01/02 03:00:16
>>387
そういや、そうか。すんません。

389:デフォルトの名無しさん
08/01/02 08:53:49
>>387
const(int*)にならないの??
おれがわかってないのか??


390:デフォルトの名無しさん
08/01/02 09:19:51
>>384

Replace:

> const(C) c;
> c = new C(1); // error

with:

const(C) c = new C(1);

だってさ

URLリンク(www.digitalmars.com)

391:デフォルトの名無しさん
08/01/02 10:01:38
>>390
ん? それ>>383のだよね。

392:デフォルトの名無しさん
08/01/02 12:27:38
>>387
ポインタを含む場合だけエラーってのでいいと思うんだけどなあ。

393:390
08/01/02 12:31:13
>>391
そそ、ごめん

394:デフォルトの名無しさん
08/01/02 16:11:30
>>377
これなおらなきゃまともに窓作れないよ・゚・(つД`)・゚・

395:デフォルトの名無しさん
08/01/02 17:28:04
>>392
そんな例外はかえって必要ないだろう。

396:デフォルトの名無しさん
08/01/02 22:25:48
budで-Xphobosつけないとphobosのソースもコンパイルされるという事実に気づいた
自動で付いてるもんだと思ってたのに・・・ひどい!

397:デフォルトの名無しさん
08/01/03 03:37:47
char[] hoge = new char[100];

char[] hoge;
hoge.length = 100;
ってなんか違うことってある?

398:デフォルトの名無しさん
08/01/03 03:54:26
意味的には違わないはず。生成されるコードは知らないけど。

399:デフォルトの名無しさん
08/01/03 23:57:30
構造体をcast(const)できないんだけど、どうすればいいんだ。

400:デフォルトの名無しさん
08/01/04 01:45:20
>>399
コードplz あとそれどんなときに必要?

401:デフォルトの名無しさん
08/01/04 01:52:26
struct S {int i;}

void main() {
auto a = [S(0), S(1)];
auto b = [cast(const)S(0), S(1)]; // Error: no property 'opCall' for type 'const(S)'
}

const(S)[] 型の配列リテラルが欲しいんだ。

402:デフォルトの名無しさん
08/01/04 02:12:20
>>401
これじゃダメ?
import std.stdio;
struct S{int i;}
void main(){
 const x = [S(0), S(1)];
 writefln(typeid(typeof(x))); // (const(const(main.S)[2])
}
配列リテラル周りはいつもバグに悩まされるから使わない方が
トラブルに遭わずに済んでいいかと

403:デフォルトの名無しさん
08/01/04 02:25:51
const(S) a = S(0);
const(S) b = cast(const(S))S(0);

確かに、暗黙に変換できるのに、明示的にキャストできないのは気持ち悪いな。

404:402
08/01/04 02:26:57
どうもconst(S)とS(0)を同時に実現できないみたいなので下のzのようにするしかないんじゃない?
import std.stdio;
struct S{int i;}
void main(){
 const x = [S(0), S(1)];
 writefln(typeid(typeof(x))); // (const(const(main.S)[2])

 auto y = [S(0), S(1)];
 writefln(typeid(typeof(y))); // main.S[2]

 const s = S(0);
 auto z = [s, S(1)];
 writefln(typeid(typeof(z))); // const(main.S)[2]
}

405:デフォルトの名無しさん
08/01/04 02:33:45
これでおk

auto a = [delegate const(S)(){return S(1);}(), S(2)];

406:デフォルトの名無しさん
08/01/04 06:02:12
似たようなやり方を前にも見たような気がする

407:デフォルトの名無しさん
08/01/04 21:56:14
phobosに16進文字列を整数に変換する関数ないの?

408:デフォルトの名無しさん
08/01/04 22:37:09
と思ったけど、CTFEできないといけないから、いらないや

409:デフォルトの名無しさん
08/01/06 22:58:00
もしかして引数なしの関数って、() なしで名前だけで呼び出せるのか

410:デフォルトの名無しさん
08/01/07 00:47:20
yes. プロパティっぽく扱えるようになってる。

411:デフォルトの名無しさん
08/01/07 00:48:22
>>408
それくらいの関数って作れなかったっけ?

412:デフォルトの名無しさん
08/01/07 01:23:48
yes.
プロパティのための構文糖。

413:デフォルトの名無しさん
08/01/07 01:24:57
リロし忘れてたごめんorz
答え方まで似てるってのが笑える。

414:デフォルトの名無しさん
08/01/07 01:31:14
>>411
CTFEできないとダメだから自前でこしらえるしかない、って言いたかったのさ

415:デフォルトの名無しさん
08/01/07 01:36:56
>>414
あーなるほど。さんくすこ

416:デフォルトの名無しさん
08/01/07 11:30:03
>>410,412
なるほど、Ruby チックでいいね

417:デフォルトの名無しさん
08/01/07 20:19:50
それってプロパティじゃない関数までgetterとして振舞うってことだよな。
LL好きにはいいんだろうけど、ちょっとやだな。
getter/setter相当がオーバーロードされているときと、
getterのみはローカルキーワードで対応ってならんのかな。

418:デフォルトの名無しさん
08/01/07 21:52:02
引数がない関数にわざわざ()をつける必要がないってのは自然な感じがするんだけどなあ。

419:デフォルトの名無しさん
08/01/07 22:01:44
まあ副作用が無ければ自然に思える。

420:デフォルトの名無しさん
08/01/07 22:25:16
その情報を取り出すことで何かが変化するのなら、それを使用するときに変化すると言うことが明確でなければならない。
つまり関数には後ろに「( )」が必要。


421:デフォルトの名無しさん
08/01/07 22:47:17
>>417-419
Delphiも、引数なし関数は省略できたな。

>>420
上の行としたの行がつながらん。
()があれば、必ず副作用なるわけではないでしょう?

副作用があるかどうかは、メソッド名とドキュメントで明示すべき。

422:デフォルトの名無しさん
08/01/07 22:49:44
命名をちゃんとしとけばそれほど違和感ないと思う。

process.kill
thread.start
window.close
stream.flush
something.toString

423:デフォルトの名無しさん
08/01/07 22:55:44
基本的に、名詞はプロパティ、動詞はメソッドというのが一般的じゃないかな。

424:デフォルトの名無しさん
08/01/08 03:06:26
そういや、Rubyも括弧いらないんだよな。

425:デフォルトの名無しさん
08/01/08 07:19:29
Ruby で慣れてるから副作用があろうがなかろうが括弧無しで違和感ないわ

426:デフォルトの名無しさん
08/01/08 10:57:58
>>417
個人的には変数がクラス外部からはconstに見えるアクセス制御がほしい。
class Foo {
int hoge_;
int hoge() { return hoge_; }
}
とか書くのも冗長、最適化されるか分からないのが嫌、みたいな。

っつかそういう制御っていまできましたっけ?

427:デフォルトの名無しさん
08/01/08 12:32:09
>>426 constメンバ関数
class Bar {}
class Foo {
int hoge_;
const int hoge() { return hoge_; }
Bar bar_;
this() { bar_ = new Bar; }
const const(Bar) bar() { return bar_; }
}

428:デフォルトの名無しさん
08/01/08 16:37:46
そういうことじゃなかろう。

429:デフォルトの名無しさん
08/01/08 21:44:09
readonlyにするってこと?

430:デフォルトの名無しさん
08/01/08 22:46:40
話ぶったきるが、連想配列では

char[][char[]] m;
m["foo"] ~= "bar";

と m["foo"] が lvalue になるんだけど、自分で作ったクラスが opIindex で配列を返すと
当然のことながら lvalue にならない。どうにか関数で配列の参照を返すことってできんだろうか?


431:デフォルトの名無しさん
08/01/08 23:08:07
opIndexAssign?

~= みたいな複合演算子は使えないけど。

432:デフォルトの名無しさん
08/01/08 23:42:51
それか、プロキシオブジェクトを返すか、だね。

433:デフォルトの名無しさん
08/01/09 01:07:09
phobosにmap, filter, reduceとか配列操作関数が欲しいよう

434:デフォルトの名無しさん
08/01/09 01:15:26
>>431
代入(=)じゃなくて連結(~=)したいんだ。
いちいちプロキシオブジェクト作るのは面倒だし、困ったものだ。

あと、配列とかにも演算があるんだから opCmp とか呼べりゃ良いのに・・・
ソート用に比較するときに == と < (または > ) の2回比較しなければいけないから困る。

細かいところで融通きかんよなぁ。

435:デフォルトの名無しさん
08/01/09 01:19:52
>433
Lisp屋さんか?それともPython屋さんか?

436:デフォルトの名無しさん
08/01/09 01:37:02
>>434
インデクサやスライサの複合代入がオーバーロードしたいって要望はずっと前からあるが、
実現される兆しはないな。プロキシオブジェクト返すしかなさそう。

TypeInfo使えば、プリミティブ型を含めて任意の型の比較が汎用的に出来るよ。

int[] x = [1, 2, 3], y = [1, 2];
writeln(typeid(int[]).compare(&x, &y));

437:デフォルトの名無しさん
08/01/09 14:08:13
java7で言語仕様に盛り込まれるというプロパティ仕様がかなり羨ましくてしょうがない。
お決まりの実装は自動生成してくれたり……をるたんも影響受けてくれないかなぁ。

438:デフォルトの名無しさん
08/01/09 17:02:35
>>437
詳細ちぼん

439:デフォルトの名無しさん
08/01/09 19:34:02
>>438
URLリンク(journal.mycom.co.jp)

あ、でもこれだと「フィールドとプロパティで名前がかぶるからフィールドに_つけなきゃ」
とかの悩みが解決できないなぁ……いや、内部からもプロパティでアクセスすりゃいいかな。

440:デフォルトの名無しさん
08/01/09 19:41:32
>>439
> 内部からもプロパティでアクセスすりゃいいかな。
継承に影響が出るから、別の意図が無ければそうすべきだよ。

441:デフォルトの名無しさん
08/01/09 20:09:00
>>224-226の話だが、eBook版が現地時間の1/7からゲット可能になってるらしいぞ。
URLリンク(www.dsource.org)
なんてのもできてた。
人柱レポ頼む。

442:434
08/01/09 22:58:21
>>436
おおお、そんな方法があったのか。ありがとう。
というか、インスタンスが同じかどうか調べる(x is y 式と同じ)ものだと思ってたよ。
opCmp は呼べないのにどういう仕組みになってんだろ。。

443:デフォルトの名無しさん
08/01/09 23:26:05
>>442
std.typeinfo以下に全部ソースあるから読んどくといいよ。

444:デフォルトの名無しさん
08/01/10 07:07:30
>>439
なるほど。 ありがとう
これはいい文法砂糖

445:デフォルトの名無しさん
08/01/12 03:01:09
>>353
アイ ウンコ ナウ
と読んでるでのは俺だけじゃないはず

446:デフォルトの名無しさん
08/01/12 09:48:44
お前だけだろw

447:デフォルトの名無しさん
08/01/13 05:07:50
ウンキングナウ!

448:デフォルトの名無しさん
08/01/14 16:06:46
動きないのかなあ

449:デフォルトの名無しさん
08/01/14 18:04:37
D forum からネタ
URLリンク(www.digitalmars.com)

450:デフォルトの名無しさん
08/01/14 18:40:17
WPFでウィンドウを表示するのには成功したんだが、
イベントの受け取りをどうするか…

451:デフォルトの名無しさん
08/01/14 19:27:53
std.threadにsleepがないんだが、どっか別の場所にある?

452:デフォルトの名無しさん
08/01/14 19:42:43
$ find std -name '*.d' -exec grep -H 'sleep' \{\} \;
std/c/time.d:void sleep(time_t);
std/c/time.d:void usleep(uint);
std/c/time.d:void msleep(uint);


453:デフォルトの名無しさん
08/01/14 19:51:30

今更だがphobos手抜きすぎる気がしてきた

454:デフォルトの名無しさん
08/01/14 21:50:08
言語仕様は素晴らしいが開発環境とライブラリが貧弱すぎて使い物にならないのがD。

455:デフォルトの名無しさん
08/01/14 21:52:41
言語使用はC++なみに複雑で全然素晴らしくない。
C++の焼き直しに過ぎない。

456:デフォルトの名無しさん
08/01/14 21:55:45
言語仕様が素晴らしいと思われるようにころころ言語仕様を変更してるから、
開発環境とライブラリが成熟しなくて、結局使い物にならないのがD。

457:デフォルトの名無しさん
08/01/14 22:00:35
C++のように現実的な限界を認めてさっさとライブラリや文法を
固めてしまった方がはるかに現実的なのに。

458:デフォルトの名無しさん
08/01/14 22:02:04
Dは実用言語を目指した実験言語です

459:デフォルトの名無しさん
08/01/14 22:04:47
こんなところでケチ付けても、をるたんは日本語の掲示板なんて見ないよ。

460:デフォルトの名無しさん
08/01/14 22:28:21
>>457
それはPython


461:デフォルトの名無しさん
08/01/14 22:34:55
来年で10年だし そろそろ固まってもいいころだと思うんだが

462:デフォルトの名無しさん
08/01/14 22:52:40
Dの初心者向け解説を一通り見た感想なんだけど。

C++のキモ過ぎに絶えられない人。
英語読めない人。
せいぜい趣味の範囲。
windowsが主でパソコン(PC)しか見えてない人。
それ以外mac, linux, unixにあんまり関心ない人。

C++に抵抗があって、java, C#以外を考えるなら、
objective-cでいいかなと思うけど、英語勉強しないとねw

Dなんて、いまだに実用(プロジェクト・個人でも)で使うのは怖くてできないし、
おぼえようにも仕様が複雑すぎ・リテラルが多すぎで、結局C++とかわんないw

ということで、C++と同じくwindows向けのオナニー言語ってことだと思った。
この辺が一向に流行らない理由じゃないかな。
ちなみに、dmcは結構好きだけど。

463:デフォルトの名無しさん
08/01/14 23:00:30
D は Windows 以外でも使えるが・・・。

464:デフォルトの名無しさん
08/01/14 23:05:00
ニュースグループ読んでる感じだと、非Windows環境での話題のほうが多いぞ

465:デフォルトの名無しさん
08/01/14 23:08:46
つか言語がwindows向けってどういうことだ

466:デフォルトの名無しさん
08/01/14 23:16:04
windows(とlinux)がターゲットだからまずwinからサポート・実装される。次が非windows。
でもパソコンがターゲットならvmのjavaかc#でいいよ。

次世代目指すとかデスクトップ(win, gnome)とかターゲットかと思えば、
その割には、dはguiとか標準で持ってないし、一体何をしたいんだが理解に苦しむ。
dを追いかけるよりも他の言語やunixを追いかけたほうが日本人にはいいと思った。
ハードならcや分野専用のカスタマイズ言語(cgとか)があるし。
一応、嘆き。

467:デフォルトの名無しさん
08/01/14 23:16:36
>>462
日本語でおk

468:デフォルトの名無しさん
08/01/14 23:18:13
デーモンとか書くの楽になるならDもいいんだけど

469:デフォルトの名無しさん
08/01/14 23:19:07
>467
おまえ馬鹿じゃね?

>>462の言ってることはめちゃくちゃ明解

470:デフォルトの名無しさん
08/01/14 23:20:05
>>465
PCが主体で、携帯とかPDAとかじゃなくて、デスクトップ向けってことです。
ほぼwindowsの牙城というか。

C++にGCが標準で搭載されれば(bohem gcでも)、Dの存在価値は薄くなるかなってw

471:デフォルトの名無しさん
08/01/14 23:22:50
正式版が出てから急にシェアが増えたのはどう説明するんだろ>>257
対してC++のシェアはDの伸び以上に減ってるんだよな
言語が増えた今、C++は用途が限定されたオナニー言語になりつつあるという事だ

472:デフォルトの名無しさん
08/01/14 23:33:07
C++ はプログラマのオナニー向けじゃなく、コミュニティのオナニー向けだろ。
俺は Boost のイカれ具合とそれを崇拝する信者どもに嫌気が指した。


473:デフォルトの名無しさん
08/01/14 23:35:06
なんだ自演がはじまったのか

474:デフォルトの名無しさん
08/01/14 23:36:16
Dの目的のなさも似たようなもんじゃないか?
どうせC++についていけないでDに逃げてきたんだろうし。

475:デフォルトの名無しさん
08/01/14 23:37:45
0xスレでやれ

476:デフォルトの名無しさん
08/01/14 23:38:00
C++は標準化委員会があるからまだいいほうだろ。

477:デフォルトの名無しさん
08/01/14 23:43:39
>>476
Boost の lambda とか言われたままに採用せずに、あんなもん言語仕様のひとつに組み込めよ、と思う。
なんでもかんでも template で generic programming って間違った進化だろ。
で、こういうこと言うとパラダイムシフトできないアホグラマがどうのとか。
スレ違いだからこのへんにするが。

478:デフォルトの名無しさん
08/01/14 23:45:23
C++についていけなかった香具師らはRubyに逃げた

479:デフォルトの名無しさん
08/01/14 23:47:58
>>477
まあ今の言語の群雄割拠は地球の歴史でいうと先カンブリア紀のようなもんだからなぁ


480:デフォルトの名無しさん
08/01/15 00:04:41
パーサーが実質世界に一つしかなくてしかもオープンソースというのは
C++ からしたら天国じゃないか

481:デフォルトの名無しさん
08/01/15 00:23:46
同じ事が近いコーディングコストで達成できるのであれば、言語仕様は小さい程いい。
何でもかんでも言語仕様に取り込みゃいいってもんじゃない。

482:デフォルトの名無しさん
08/01/15 00:28:54
>>481
構文や意味に誤りがあった場合にまともなエラー表示ができていない。
達成できてるとは言い難い。

483:デフォルトの名無しさん
08/01/15 00:30:20
コンパイラが実装しなけりゃ絵に描いた餅。
export の二の轍を踏むだけ。

484:デフォルトの名無しさん
08/01/15 00:32:13
Dの設計・言語使用に携わっている人たちが、そもそもC++についていけなかった件について。

485:デフォルトの名無しさん
08/01/15 00:32:45
export は実装が難しすぎたからだろ。
lambda の実装ごときに何の問題があると。

486:デフォルトの名無しさん
08/01/15 00:34:34
>>449
forumに書き込んでる暇があれば自分で移植しろという感じだな

487:デフォルトの名無しさん
08/01/15 00:35:32
この様子だと、Dは実用とか稼動とかとは程遠いですね。
けっきょくは、better c++ なんでしょうか。
また1年後ぐらいにこのスレにきますわw

488:デフォルトの名無しさん
08/01/15 00:36:50
>言語仕様は小さい程いい。
D見るとつくづくそう思うよ。
バグは言語仕様に対して指数関数的に増えるからな
const周りの仕様変更でfinalメンバ関数の挙動がおかしくなったりとか
そういうのにぶつかると絶望感感じるよ。

489:デフォルトの名無しさん
08/01/15 00:38:38
仕様が増えれば、それだけ実装コストがかかるのは当然だろ。
言語は実装されて初めて意味を持つんだから、普及させたけりゃ仕様は少ない方がいい。
さらに、覚える方も楽だしね。

さらに、D の設計思想にある 「構文解析と意味解析を分離する」 が達成されていない C++ で
新たに仕様を増やしたときの実装コストはいかほどのものかちったぁ考えようぜ。

boost をそのまま取り込むとなれば実装コストは名前ちょっといじる程度。
この差は非常に大きい。

490:デフォルトの名無しさん
08/01/15 00:41:29
>>477
仕様に組み込みたい気持ちは分かりますが、Cの言語仕様にラムダはいかんでしょ。
あなた、プログラム言語のことをちゃんと学んでないようですね。
パラダイムとかテンプレートもいいたいこと分かるんですけど、世の中にはもっとキモイのがいるんで、
そういうの見ると少しはC++のそれも理解できるかとw

正規表現で不定方程式を解く

491:デフォルトの名無しさん
08/01/15 00:45:32
それは理解できるが、lamda プログラミングは素晴らしい!なんて語りながら
現実があれじゃどうかと思うぜ。あんなのIOCCCに応募するようなコードだろ。
マクロでマイ言語作って叩かれた25年前から何も変わってない。

492:デフォルトの名無しさん
08/01/15 01:16:36
Cのコンパイラも書いたことない奴らがDの設計思想とかぬかすなよ
おこちゃまはwinでrubyでいいからw

493:デフォルトの名無しさん
08/01/15 01:17:26
Dスレにまでいつものが湧くようになったか。
スルーしとけ

494:デフォルトの名無しさん
08/01/15 01:17:43
windowsならvbaで決定だな。

495:デフォルトの名無しさん
08/01/15 01:19:57
>>491
ラムダは制御には向いてませんよ。Cは制御に向いてますよ。
あなたに必要なのは、そういうところだと思います。


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