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

D言語 Part22

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

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

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

■コンパイラ
http://www.digitalmars.com/d/dcompiler.html (DMD, 本家)
http://dgcc.sourceforge.net/ (GDC, gccフロントエンド)
http://www.dsource.org/projects/ldc (LDC, バックエンドにLLVM)

■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://f17.aaa.livedoor.jp/~labamba/?D%B8%C0%B8%ECBOF (D言語BOF)
ttp://dsource.org/ (dsource)
ttp://tinyurl.com/candcpp2d (C/C++に疲れた人のD言語)
ttp://www.kmonos.net/alang/wnd/ (わかったつもりになるD言語)
ttp://shinh.skr.jp/d/ (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか)
ttp://shoo.s20.xrea.com/shoo/programing (D言語とTangoの入門講座)
ttp://www.nicovideo.jp/mylist/4453698 (D言語で作られた芝ゲー niconico動画)
ttp://www.asahi-net.or.jp/~cs8k-cyu/ (ABA Games)

■ IDE
ttp://dronten.googlepages.com/dscite (DSciTE)
ttp://forums.codeblocks.org/index.php?board=20.0 (Code::Blocks)
ttp://www.dprogramming.com/entice.php (Entice Designer)
ttp://www.dsource.org/projects/descent (Descent)
ttp://www.dsource.org/projects/poseidon (Poseidon)
0421デフォルトの名無しさん2009/07/31(金) 17:38:50
まだ
0422デフォルトの名無しさん2009/08/01(土) 02:10:50
>>417-419
さっきやった時はプロジェクト直下のところと、パッケージの中と2箇所に新規パッケージができてしまったんですが、
今もう一度やったらちゃんとパッケージの中だけにできました。
さっきのはなんだったんだろう・・・。
0423デフォルトの名無しさん2009/08/01(土) 02:11:57
あぁ、あったな、そんなバグ…
0424デフォルトの名無しさん2009/08/02(日) 20:14:34
D3.0マダー?
0425デフォルトの名無しさん2009/08/02(日) 20:33:53
D3.0では複雑すぎる機能は削ぎ落としてポインタみたいなのは禁止して
プラットフォーム依存を無くすために仮想マシンを用意してだな…
0426デフォルトの名無しさん2009/08/02(日) 20:37:41
なにそのJava
0427デフォルトの名無しさん2009/08/02(日) 20:46:52
immutableオブジェクトのコンストラクタに渡ってきたmutableなthisを、
コンパイラのなんのお咎めもなく外に持ち出せるって話だけど、
これはスタック変数へのポインタを関数外に持ち出せてしまう問題と同じなわけだし、
やっぱり仕方ないんじゃないかなあ。

scope変数に対する静的解析を実装すれば解決できるんだろうけど。
0428デフォルトの名無しさん2009/08/02(日) 22:13:48
>>427
じゃあ仕方なくないのかね
0429デフォルトの名無しさん2009/08/02(日) 22:58:19
>>427のって>>409のおはなし?
typeof(this)ってのがそのクラス固有の関数を呼ぶために特別扱いされてるとかそういう関係で
型がおかしくなってるっていうバグかと思ってたんだけど、違うの?
0430デフォルトの名無しさん2009/08/02(日) 23:15:22
>>429
いあ、それとは関係ない。
誰かがどこかでつぶやいてた話。
0431デフォルトの名無しさん2009/08/03(月) 00:03:32
>>430
そっか。・・・こういうこと?↓
--------
class C{
int a;
this(ref C c){
a = 10;
c = this;
}
}
void main(){
C x;
auto c = new immutable(C)(x);
writeln(c.a);
x.a = 100;
writeln(c.a);
}
--------
・・・これはキモイね。
0432デフォルトの名無しさん2009/08/03(月) 11:38:46
module hoge.hoge;

import std.algorithm;
import hoge.fuga;

void hoge() {...}

これをビルドすると、
c:\省略\hoge.d(6): Error: function hoge.hoge.hoge conflicts with import hoge.hoge.hoge at c:\省略\hoge.d(4)
というエラーが出ます。
import hoge.fuga;をコメントアウトすれば、このエラーは出なくなります。
どうもhogeパッケージに入っているモジュールをimportするとエラーが発生するようです。
hogeパッケージhogeモジュールと、同名なのがだめなんでしょうか?
0433デフォルトの名無しさん2009/08/03(月) 12:01:28
エラーを文字通りに取れば
hoge.hoge.hoge関数と
hoge.hoge.hogeモジュールが競合するようだが
関数があるのは自己申告で確定だから、
hoge.hoge.hogeというディレクトリがあればその競合が原因だな
0434デフォルトの名無しさん2009/08/03(月) 12:25:26
>>433
うーん、プロジェクトのフォルダの中にhogeフォルダ、そのhogeフォルダの中にフォルダはないです。
04354322009/08/04(火) 05:55:52
改名importにしたらエラーは消えました。
モジュールhoge.hogeの中でhoge.fugaをimportするとhoge.hoge.hoge.fugaになって、
hoge.hoge.hogeの部分がパッケージ.パッケージ.パッケージなのかパッケージ.パッケージ.関数なのか判別できないっていう事なのかなぁ。
うーん、改名importにしないといけないぐらいなら、パッケージとモジュールに同じ名前をつけるのやめた方がいいか・・・。
0436デフォルトの名無しさん2009/08/04(火) 21:53:26
* Iterators Must Go! - http://boostcon.blip.tv/
* "D"iving into the D Programming Language - http://www.informit.com/articles/printerfriendly.aspx?p=1381876
0437デフォルトの名無しさん2009/08/05(水) 04:33:07
>>436
Rangeの作り方が最初よく分からなかったのだが、
たとえば配列をRange化する場合、
.nextは[1..$]というスライス(の参照)を返すって事でいいんだよね?

一応listやdequeくらいは実習代わりにrangeで作ったサンプルが作れるかも?
0438デフォルトの名無しさん2009/08/05(水) 06:26:13
list(T)はできた。
codepadにでも貼ろうかと思ったがcodepad側の対応バージョンが古いのであきらめる。

罠:
ドキュメントには .empty .next .retreat .head .toe が列挙されているが、
実際には .empty .popFront .popBack .front .back。
0439デフォルトの名無しさん2009/08/05(水) 06:46:32
思ったこと
st.iteratorとRangeの関係は?frontという名前が競合するんだが。
iteratorなしでlistに挿入って出来るの?
とか
0440デフォルトの名無しさん2009/08/05(水) 07:26:50
endを固定(empty)にして、イテレータのbeginとendをまとめたようなもの
0441デフォルトの名無しさん2009/08/05(水) 13:51:44
InBuffer作ってみました。
OutBufferをちょっといじった程度の物なので、これでいいならとっくに標準に入ってる気はしますが・・・。
何か指摘があればお願いします。

class InBuffer
{
ubyte data[];
uint offset;

invariant() { assert(offset <= data.length); }
this(in ubyte[] _data) { data = _data; }
void read(ref ubyte[] bytes) { bytes[] = data[offset..offset + bytes.length]; offset += bytes.length; }
void read(ref wchar[] chars) { read(cast(ubyte[]) chars); }
void read(ref dchar[] chars) { read(cast(ubyte[]) chars); }
void read(ref ubyte b) { b = data[offset]; offset += ubyte.sizeof; }
void read(ref byte b) { read(cast(ubyte)b); }
void read(ref char c) { read(cast(ubyte)c); }
void read(ref dchar c) { read(cast(uint)c); }
void read(ref ushort w) { w = *cast(ushort *)&data[offset]; offset += ushort.sizeof; }
void read(ref short s) { read(cast(ushort)s); }
void read(ref wchar c) { c = *cast(wchar *)&data[offset]; offset += wchar.sizeof; }
void read(ref uint w) { w = *cast(uint *)&data[offset]; offset += uint.sizeof; }
void read(ref int i) { read(cast(uint)i); }
void read(ref ulong l) { l = *cast(ulong *)&data[offset]; offset += ulong.sizeof; }
void read(ref long l) { read(cast(ulong)l); }
void read(ref float f) { f = *cast(float *)&data[offset]; offset += float.sizeof; }
void read(ref double f) { f = *cast(double *)&data[offset]; offset += double.sizeof; }
void read(ref real f) { f = *cast(real *)&data[offset] = f; offset += real.sizeof; }
void read(ref char[] s) { read(cast(ubyte[])s); }
}
0442デフォルトの名無しさん2009/08/05(水) 17:05:36
>>437
popFront は range を返すのではなくて、 range 自体を変更する。
0443デフォルトの名無しさん2009/08/05(水) 17:08:41
>>439
あるRangeの前や後ろに要素を挿入する操作を定義すればいい。
0444デフォルトの名無しさん2009/08/05(水) 19:59:26
>>441
castして代入してるけどアラインメントが揃ってないとクラッシュしちゃう
処理系もあるので、memcpyあたりでコピーするようにしたほうがいいかも
0445デフォルトの名無しさん2009/08/05(水) 20:20:30
gccが、decimal128をサポートするみたい。
DPDが良いのか悪いのかは別にして、D言語にあれほど
10進演算器入れてくれって言ったのに・・・・

さよなら、D言語。
0446デフォルトの名無しさん2009/08/05(水) 21:10:16
そんなもんライブラリのサポートで十分だろうが……
0447デフォルトの名無しさん2009/08/05(水) 22:16:13
>>446
それを言い出すのなら、CやC++で充分って事で。
0448デフォルトの名無しさん2009/08/05(水) 22:24:46
あれほど言ったのにというが、ちゃんとWalterに伝えたのかな?
0449デフォルトの名無しさん2009/08/05(水) 22:48:32
decimalより__m128を先にして欲しい
0450デフォルトの名無しさん2009/08/05(水) 23:11:13
>>449
それはabs()で行けるやん。
0451デフォルトの名無しさん2009/08/05(水) 23:20:09
D言語でDirectXを使ったゲームって作れますん?
0452デフォルトの名無しさん2009/08/05(水) 23:25:05
>>450
abs?

>>451
つくれます。
0453デフォルトの名無しさん2009/08/05(水) 23:35:45
qtd試そうとしたらQtCore4.dllが腐ってて死んだ
0454デフォルトの名無しさん2009/08/05(水) 23:39:48
IEEE 754のdecimalXXに対応してるプロセッサってあるの?
0455デフォルトの名無しさん2009/08/06(木) 00:17:42
>>444
なるほど、アラインメントの事は忘れていました。

OutBufferのwrite関数はアラインメントを調節してないように見えるんですけど、
alignSize関数を使ってライブラリ利用者自身が調節してくださいっていう事ですかね。
0456デフォルトの名無しさん2009/08/06(木) 01:28:21
>>442
popFrontの挙動って配列スライス(=参照)そっくりなんすよ。
Dでlistを実装するとheadとtoeへのポインタを持つ構造体になるが、
配列の場合は配列長と先頭アドレスのポインタを持つ構造体として表現できる。
スライスは実体を動かさずに配列長と先頭アドレスだけ動かした構造体を作るもので、
listのpopFrontもheadへのポインタを動かしただけの構造体を作る実装になる。
真のメモリ回収はGC任せにするようにする。
そうでないとforeach Rangeに突っ込めないので、そういう使い方を想定しているのかと。
なのでlistにも配列と同じように、dupとidup、内容のコピー(STLのassignみたいな)が必要になるはず。


>>443
というモデルでのスライスのpushFront/Backがあれば挿入できるな。確かに。

……と思っていたが、foreach Rangeのために、popFrontした後のheadの前方要素ポインタのnull代入をしないようにしたんだが、
popFrontしたのに永遠にGCに回収されないモデルだということに気づいた。どうすんだこれ。
0457デフォルトの名無しさん2009/08/06(木) 01:57:52
あー早く言語仕様固まらないかなー
0458デフォルトの名無しさん2009/08/06(木) 02:19:00
このエターナり具合はゲーム制作板に通ずるものがある。
0459デフォルトの名無しさん2009/08/06(木) 02:52:04
RangeとIteratorあたりの方針とか実装テクニックをandreiに記事にして欲しい
例の本に載っているのかな
0460デフォルトの名無しさん2009/08/06(木) 03:59:26
>>456
リストは一つのオブジェクトで,rangeはその上の範囲を指すビューだと考えれば、
リストの一部が参照されている限り、リスト全体が破壊されることはないのは普通じゃないかな。

// ビューに関する操作
empty // 空かどうか
front. back // 現在のビューの先頭、末尾の参照
popFront(), popBack() // ビューを縮める *ビューを破壊

// リストの実体に関する操作
dup() // 現在のビューの範囲だけを取り出して新しいリストを作る(そして,その全体を表すビューを返す)
insertBefore(T), insertAfter(T) // 現在のビューの前後に要素を追加する *実体を破壊
eraseFront(), eraseBack() // 現在のビューの先頭、末尾の要素を削除する *実体を破壊

たぶんプリミティブなオペレーションで必要になるのはこの辺りだと思う。
0461デフォルトの名無しさん2009/08/06(木) 04:24:35
>>460
そんな感じかね。
Range実装の一番単純な例として、
書いたものを晒してレビューして欲しいんだが、
D言語研究とかにページ作って見てもらってもいいかな?
0462デフォルトの名無しさん2009/08/06(木) 06:17:16
OutBufferってなんでmemcpyを使わず、アラインメント調節とcastして代入なんだろう?
対になるInBufferが作りにくいなぁ・・・。
0463デフォルトの名無しさん2009/08/06(木) 10:28:28
>>461
http://dusers.dip.jp/modules/forum/index.php?topic_id=28#post_id100
Dequeのならここにある

>>462
すでにOutBuffer使われなくなってたりして。MemoryStream+EndianStream使えば何とかなりそうだし…
0464デフォルトの名無しさん2009/08/06(木) 11:55:15
>>463
std.streamにそんな物があったとは知らなかったです。
OutBuffer必要ないですねぇ。
0465デフォルトの名無しさん2009/08/06(木) 19:16:20
キャスト演算子無くしてジェネリック関数にしよう
cast!int(hoge);
0466デフォルトの名無しさん2009/08/06(木) 19:28:08
>>465
テンプレート関数は仮想関数になれないから駄目。
0467デフォルトの名無しさん2009/08/06(木) 22:36:10
やっとQtD動いた
・Qt 4.5の2009.3版は避けて2009.2を使う
・Qtのインストール先は"C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.5.0"でないと駄目
・QtCore4.dllがねぇぞゴルァと言われたらbuild_dir/generator/にQtCore4.dllとQtXml4.dllをコピー

fedoraにインストールした時はあんなに素直だったのに…
0468デフォルトの名無しさん2009/08/07(金) 03:25:15
コンストラクタをconst就職したらどうなるの?
0469デフォルトの名無しさん2009/08/07(金) 12:48:45
コンパイルできなくなる
0470デフォルトの名無しさん2009/08/07(金) 13:37:58
> .tupleof プロパティは、 隠しフィールドおよび基底クラスのフィールドを除く、 全てのフィールドからなるタプルを返します。

隠しフィールドって何ですか?privateとは違うんですか?
ぐぐっても答えが出てこないです。
0471デフォルトの名無しさん2009/08/07(金) 14:03:55
>470
クラスの仕組みを実装するために、処理系がこっそりクラスに追加してるフィールドのこと。
だからソース中には出てこない。
0472デフォルトの名無しさん2009/08/07(金) 14:07:12
>>471
thx
0473デフォルトの名無しさん2009/08/07(金) 15:35:49
ある型が静的配列であるか判定するにはisStaticArray。
では、動的配列であるか判定するにはどうすればいいですか?
0474デフォルトの名無しさん2009/08/07(金) 16:15:40
isDynamicArray
0475デフォルトの名無しさん2009/08/07(金) 16:40:15
怒濤の更新こないかなー
最近trunk覗いてないな
0476デフォルトの名無しさん2009/08/07(金) 16:42:00
>>474
__traitsの方ばかり見てて、それに気がづかなかった・・・
__traitsとpobosのstd.traitsって同じような物が結構ありますけど、どこが違うんでしょうか?
0477デフォルトの名無しさん2009/08/07(金) 16:45:33
import std.stdio;
void main(){return write;}
なあこいつをどうおもう?
0478デフォルトの名無しさん2009/08/07(金) 16:50:55
>>476
__で始まるシンボルはそのうち使えなくなってもおかしくないのでは
0479デフォルトの名無しさん2009/08/07(金) 16:52:31
ちなみにこうするとdmdが死ぬ
import std.stdio;
auto main(){return write;}
0480デフォルトの名無しさん2009/08/07(金) 17:18:07
private
{
enum real hoge = 1.001L;
alias hoge fuga;
}
これのfugaがpublicになるのはバグでいいんだよな?

ほかにもtemplate mixinしたのがpublicだったり…
public関連のバグはvoteでも高い値出してるんだからさっさと潰してくれたらいいのに…
0481デフォルトの名無しさん2009/08/07(金) 17:43:39
>>478
そうだったんですか。
phobosの方を使った方がいいんですね。
0482デフォルトの名無しさん2009/08/07(金) 18:35:57
public関連は暗黙friendでちょっと確認面倒だからな・・・
0483デフォルトの名無しさん2009/08/07(金) 18:47:51
>>481
ごめん
こういうことなので使えなくなるは言い過ぎたかも

Q. なぜ __add__ や __div__ といった名前を opAdd, opDiv の代わりに使わなかったのですか?
A. __ を使った予約語は、処理系特有の言語拡張を表すべきで、 言語の基本的な部分に使うものではないと考えています。
0484デフォルトの名無しさん2009/08/07(金) 19:13:50
python涙目
0485デフォルトの名無しさん2009/08/07(金) 20:01:44
>>483
うーむ。
しかし処理系に依存しない方法があるならそっちの方がいいですよね。
あれ?phobos自体が処理系に依存?w
0486デフォルトの名無しさん2009/08/07(金) 20:36:09
やべぇQtD最高だわ
コンパイルできるだけじゃなくリンクまでできる
しかも動く
感動して涙出てきた
0487デフォルトの名無しさん2009/08/07(金) 21:10:06
>>486
・・・・・
0488デフォルトの名無しさん2009/08/07(金) 23:31:54
>>486
C++使ったら失禁しちゃうだろ……。
0489デフォルトの名無しさん2009/08/08(土) 00:05:13
via ML
int x = 2^^3;//8
0490デフォルトの名無しさん2009/08/08(土) 00:20:55
どちらかというと
*^ pow
/^ log
として欲しいな。
max/minは昔のgccの拡張っぽく >? と <? にしてほしい。
abs演算子(単項)は何がいいだろ。
0491デフォルトの名無しさん2009/08/08(土) 06:52:04
|> n <|
0492デフォルトの名無しさん2009/08/08(土) 07:43:33
あまり記号に頼るのは勘弁。
たまーにしか使わないようなものはどうせ覚えられないんだから、
検索しやすい名前にしておかないとダメだ。
0493デフォルトの名無しさん2009/08/08(土) 10:05:33
void foo(in int[] aaa, in int[] bbb)
{
Tuple!(const(int[]), const(int[])) tup(aaa[], bbb[]);
...
}

Error: aaa is used as a type
Error: bbb is used as a type
どうすればいいのでしょうか?
0494デフォルトの名無しさん2009/08/08(土) 16:00:17
そのスライスいるの?
0495デフォルトの名無しさん2009/08/08(土) 16:45:11
>>494
Tuple!(const(int[]), const(int[])) tup(aaa, bbb);
にすると
Error: aaa is used as a type
Error: cannot have parameter of type void
Error: bbb is used as a type
Error: cannot have parameter of type void
になります。
0496デフォルトの名無しさん2009/08/08(土) 20:01:42
下のプログラムの実行結果で&thisと&testの値が変わるのは正しい動き?
(DMD v1.030を使用)

class Test
{
public void print()
{
printf("(this, &this):(%p, %p)\n", this, &this);
}
}

void main()
{
Test test = new Test;

printf("(test, &test):(%p, %p)\n", test, &test);
test.print();

}
04974932009/08/08(土) 20:02:21
tuple(返り値で作ったTupleを返すやつ)を使って、配列を含むタプルは作れました。
でも、constが含まれるとエラー(tupleのソース見ても明らかにconstは無理)。
const配列を含むタプルはどうやって作ればいいんだろう・・・。
0498デフォルトの名無しさん2009/08/08(土) 20:54:56
>>496

class Test {
public void print() { writef("(this, &this):(%p, %p)\n", this, &this); }
void isSelf(Test a, Test b) {
writefln("this:a %b this:b %b a:b %b", this is a, this is b, a is b);
writefln("&this: %p &a: %p &b: %p\n", &this, &a, &b);
}
}

void main()
{
Test test = new Test, test2 = new Test;

writef("(test, &test):(%p, %p)\n", test, &test);
test.print();
test.isSelf(test, test2);

writef("(test2, &test2):(%p, %p)\n", test2, &test2);
test2.print();
test2.isSelf(test, test2);
}
04994962009/08/08(土) 23:44:01
>>498
なるほど
&つけるとヒープ上の実体のアドレスが得られると勘違いしてました。
参照がCのポインタそのものなんですね。
0500デフォルトの名無しさん2009/08/09(日) 02:59:58
intがsize_tに暗黙に変換されるのって抑制できませんか?
0501デフォルトの名無しさん2009/08/09(日) 08:07:12
minmaxを記号でやる言語があるのかもしれんが
頻出処理ではないのに貴重な記号を使うのはもったいないのと
複数要素、およびコンテナ、イテレータのことを考えると記号でやる処理にしては複雑すぎるのと
本来数学でさえ記号を使わないのでいらないと思う

absの記号は|n|以外だとむしろわかりにくいのでこれでないならいらないかな
0502デフォルトの名無しさん2009/08/09(日) 08:56:02
>>500
uintのaliasなのかと思ったら何これ?
alias typeof(int.sizeof) size_t;

typedef uint size_t;
にしたらいいのか?
0503デフォルトの名無しさん2009/08/09(日) 09:05:51
>>502
sizeofプロパティの型をsize_tとするって意味じゃね。
uint決め打ちじゃなくて。
0504デフォルトの名無しさん2009/08/09(日) 11:17:28
32bit版と64bit版を書き分けるのマンドクセってことだろう
0505デフォルトの名無しさん2009/08/09(日) 11:33:23
>>503-504
なるほど環境で変わるってことね
0506デフォルトの名無しさん2009/08/09(日) 12:07:50
クラスのメンバである配列について、コンストラクタでnewされ、その後長さは変わらないが、中身は変えるような場合、
うまくconstをつける方法はありますでしょうか
0507デフォルトの名無しさん2009/08/09(日) 13:05:44
std.typecons.Rebindable
ただし>>210
0508デフォルトの名無しさん2009/08/09(日) 13:21:40
書き方が悪くて申し訳ありません。
const オブジェクトへの書き換え可能な参照ではなく、
書き換え可能な配列へのconst参照を作るにはどうしたら良いのかなと……
推移的constで中身も書き換え不可能にならないようにするには、と。
0509デフォルトの名無しさん2009/08/09(日) 13:28:01
Rebindableの配列を作る
配列自体をやり取りしようとすると一瞬にして破綻するけど
0510デフォルトの名無しさん2009/08/10(月) 10:30:37
言語仕様やPhobosについて、公式サイトのドキュメントだけじゃ説明不足に感じる事があります。
詳細までキッチリ書いてある仕様書のような物ってないんですかね?
0511デフォルトの名無しさん2009/08/10(月) 11:18:59
DMDおよびPhobosのソースコード
0512デフォルトの名無しさん2009/08/10(月) 13:11:09
>>511
Phobosのソースはよくみますが、言語仕様を理解しきれてなくて分からない時があります。
コンパイラのソースも付いていたのは気づきませんでした。
読むの大変そうだ・・・
0513デフォルトの名無しさん2009/08/10(月) 13:34:51
DMDは実装の一つであって言語仕様そのものではないんじゃないの?
それともDMDの挙動がD言語の仕様に決められてるの?
0514デフォルトの名無しさん2009/08/10(月) 14:02:49
D2早くstableになれよ
0515デフォルトの名無しさん2009/08/10(月) 14:08:26
コンパイラのソース嫁はさすがにスパルタすぎじゃね
05165112009/08/10(月) 14:28:13
>>512,515
コンパイラの方は冗談のつもりでした・・・
私は、実装がどうであれドキュメント化されなければD言語の仕様としては「未定義」であると思っています。
ですので、説明不足に感じるところがあるのであれば、ウォルターたんに直接
「〜〜だからドキュメント化してくれ!」
ってお願いしに行くのが一番いいのではないかと思います。
05175122009/08/10(月) 16:03:53
コンパイラのソースは興味がないことはないですが、さすがに読む気にはなれませんでした。
ドキュメントが不足してたり、ぐぐっても出てくる物が少ないところがD言語はつらいです。
言語の仕様はいいんだけどなぁ。
0518デフォルトの名無しさん2009/08/10(月) 16:44:31
仕様が先に決まる言語なんてつまんない物が多いし、
Dは現状で特に説明不足と感じることもないなあ。
まあ自分で処理系を作ろうと思ったら大変なのかも、程度。
0519デフォルトの名無しさん2009/08/10(月) 16:59:05
ぶっちゃけドキュメントで明記していようが
平気で破壊的更新をするウォルたんなんだから、
気にせず適当に使うのがいいとおもう
0520デフォルトの名無しさん2009/08/10(月) 17:00:49
いきなりコンパイル通らなくなったらChangeLog見に行くくらいでいいと思う
■ このスレッドは過去ログ倉庫に格納されています