D言語 Part22
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/06/22(月) 01:38:41過去スレ、関連スレは >>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)
0375デフォルトの名無しさん
2009/07/28(火) 00:05:270376デフォルトの名無しさん
2009/07/28(火) 01:10:44thx
0377デフォルトの名無しさん
2009/07/28(火) 01:29:05ポインタを使うということは、邪悪な変換とは何か知っているということさ。覚悟して使ってくれたまえよ。
何?なぜそんな邪悪を許すかって?それがeclectic languageというものさ。HAHAHA
0378デフォルトの名無しさん
2009/07/28(火) 01:39:500379デフォルトの名無しさん
2009/07/28(火) 01:54:34std.convには無いようです
0380デフォルトの名無しさん
2009/07/28(火) 03:56:325分いらん
0381デフォルトの名無しさん
2009/07/28(火) 03:58:48sscanf とか?
0382デフォルトの名無しさん
2009/07/28(火) 08:09:44strtoll
0383デフォルトの名無しさん
2009/07/28(火) 09:49:33やっぱりCの関数使うのが良さそうですね
ありがとうございました
0384デフォルトの名無しさん
2009/07/28(火) 15:50:100385デフォルトの名無しさん
2009/07/28(火) 15:56:13更新だってさ
D2にも対応して欲しいね
0386デフォルトの名無しさん
2009/07/28(火) 16:12:42long hexToDecimal(char hex)
{
return hexToDecimal([hex]);
}
long hexToDecimal(const(char)[] hex)
{
long sum;
foreach(char c; hex)
sum = sum*16 + ((c|0x20)-'0')%('W'-'0');
return sum;
}
unittest
{
assert(hexToDecimal('A') == 10);
assert(hexToDecimal("FF") == 255);
}
0387デフォルトの名無しさん
2009/07/28(火) 16:41:53昆布w
たしかにtoで対応してくれるとうれしいけども
こうなったらsscanfの機能も取り込んでしまえば…
to!("%x")(str);
0388デフォルトの名無しさん
2009/07/28(火) 18:38:040389デフォルトの名無しさん
2009/07/28(火) 18:39:240390デフォルトの名無しさん
2009/07/28(火) 20:08:360391デフォルトの名無しさん
2009/07/28(火) 20:17:500392デフォルトの名無しさん
2009/07/28(火) 20:34:390393デフォルトの名無しさん
2009/07/28(火) 20:51:17と思ってドキュメントを見ても無い
なんだ気のせいか
0394デフォルトの名無しさん
2009/07/28(火) 22:20:400395デフォルトの名無しさん
2009/07/29(水) 01:56:55それってどれだ
0396デフォルトの名無しさん
2009/07/29(水) 02:08:460397デフォルトの名無しさん
2009/07/29(水) 03:14:470398デフォルトの名無しさん
2009/07/29(水) 12:00:280399デフォルトの名無しさん
2009/07/29(水) 21:18:50マジレス厳禁
0400デフォルトの名無しさん
2009/07/30(木) 00:01:470401デフォルトの名無しさん
2009/07/30(木) 00:57:230402デフォルトの名無しさん
2009/07/30(木) 01:00:160403デフォルトの名無しさん
2009/07/30(木) 07:03:580404デフォルトの名無しさん
2009/07/30(木) 09:25:21なんだよ!!!
0405デフォルトの名無しさん
2009/07/30(木) 10:46:55存在しない物と思っておくべき?
0406デフォルトの名無しさん
2009/07/30(木) 18:27:13あなたが作ってポストすればおkって言語ですから。
0407405
2009/07/30(木) 21:21:390408デフォルトの名無しさん
2009/07/31(金) 00:22:03D言語に関するアンケートの実施です。
あなたの興味のあるトピックについて、もしよろしければご回答ください
0409デフォルトの名無しさん
2009/07/31(金) 00:47:23const void f() {
auto that = this;
writeln(typeid(typeof(this))); // C
writeln(typeid(typeof(that))); // const(C)
}
}
これ違うの気持ち悪くない?
0410デフォルトの名無しさん
2009/07/31(金) 01:24:24気持ち悪いね
0411デフォルトの名無しさん
2009/07/31(金) 01:28:55thisがconstじゃないのではなくて、typeof(this)がthisの型に関係なく常にCになる。
0412デフォルトの名無しさん
2009/07/31(金) 02:26:370413デフォルトの名無しさん
2009/07/31(金) 03:49:110414デフォルトの名無しさん
2009/07/31(金) 04:22:430415デフォルトの名無しさん
2009/07/31(金) 04:26:360416デフォルトの名無しさん
2009/07/31(金) 08:23:29なるほど。
でも、階層にできないと、規模が大きく(モジュールが多く)なってきた時に整理の面で不便なことないんですかね?
0417デフォルトの名無しさん
2009/07/31(金) 11:46:26.dをフォルダに入れたらフォルダがパッケージになるけどそういうことじゃない?
0418デフォルトの名無しさん
2009/07/31(金) 13:02:380419デフォルトの名無しさん
2009/07/31(金) 15:22:08ドット含むモジュール名にしたら普通に階層化されないか?
0420デフォルトの名無しさん
2009/07/31(金) 16:44:49int dbl(int i) { return i*2; }
に対して
int n=10;
assert(n.dbl() == 20);
って実装された?
0421デフォルトの名無しさん
2009/07/31(金) 17:38:500422デフォルトの名無しさん
2009/08/01(土) 02:10:50さっきやった時はプロジェクト直下のところと、パッケージの中と2箇所に新規パッケージができてしまったんですが、
今もう一度やったらちゃんとパッケージの中だけにできました。
さっきのはなんだったんだろう・・・。
0423デフォルトの名無しさん
2009/08/01(土) 02:11:570424デフォルトの名無しさん
2009/08/02(日) 20:14:340425デフォルトの名無しさん
2009/08/02(日) 20:33:53プラットフォーム依存を無くすために仮想マシンを用意してだな…
0426デフォルトの名無しさん
2009/08/02(日) 20:37:410427デフォルトの名無しさん
2009/08/02(日) 20:46:52コンパイラのなんのお咎めもなく外に持ち出せるって話だけど、
これはスタック変数へのポインタを関数外に持ち出せてしまう問題と同じなわけだし、
やっぱり仕方ないんじゃないかなあ。
scope変数に対する静的解析を実装すれば解決できるんだろうけど。
0428デフォルトの名無しさん
2009/08/02(日) 22:13:48じゃあ仕方なくないのかね
0429デフォルトの名無しさん
2009/08/02(日) 22:58:19typeof(this)ってのがそのクラス固有の関数を呼ぶために特別扱いされてるとかそういう関係で
型がおかしくなってるっていうバグかと思ってたんだけど、違うの?
0430デフォルトの名無しさん
2009/08/02(日) 23:15:22いあ、それとは関係ない。
誰かがどこかでつぶやいてた話。
0431デフォルトの名無しさん
2009/08/03(月) 00:03:32そっか。・・・こういうこと?↓
--------
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:46import 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:28hoge.hoge.hoge関数と
hoge.hoge.hogeモジュールが競合するようだが
関数があるのは自己申告で確定だから、
hoge.hoge.hogeというディレクトリがあればその競合が原因だな
0434デフォルトの名無しさん
2009/08/03(月) 12:25:26うーん、プロジェクトのフォルダの中にhogeフォルダ、そのhogeフォルダの中にフォルダはないです。
0435432
2009/08/04(火) 05:55:52モジュールhoge.hogeの中でhoge.fugaをimportするとhoge.hoge.hoge.fugaになって、
hoge.hoge.hogeの部分がパッケージ.パッケージ.パッケージなのかパッケージ.パッケージ.関数なのか判別できないっていう事なのかなぁ。
うーん、改名importにしないといけないぐらいなら、パッケージとモジュールに同じ名前をつけるのやめた方がいいか・・・。
0436デフォルトの名無しさん
2009/08/04(火) 21:53:26* "D"iving into the D Programming Language - http://www.informit.com/articles/printerfriendly.aspx?p=1381876
0437デフォルトの名無しさん
2009/08/05(水) 04:33:07Rangeの作り方が最初よく分からなかったのだが、
たとえば配列をRange化する場合、
.nextは[1..$]というスライス(の参照)を返すって事でいいんだよね?
一応listやdequeくらいは実習代わりにrangeで作ったサンプルが作れるかも?
0438デフォルトの名無しさん
2009/08/05(水) 06:26:13codepadにでも貼ろうかと思ったがcodepad側の対応バージョンが古いのであきらめる。
罠:
ドキュメントには .empty .next .retreat .head .toe が列挙されているが、
実際には .empty .popFront .popBack .front .back。
0439デフォルトの名無しさん
2009/08/05(水) 06:46:32st.iteratorとRangeの関係は?frontという名前が競合するんだが。
iteratorなしでlistに挿入って出来るの?
とか
0440デフォルトの名無しさん
2009/08/05(水) 07:26:500441デフォルトの名無しさん
2009/08/05(水) 13:51:44OutBufferをちょっといじった程度の物なので、これでいいならとっくに標準に入ってる気はしますが・・・。
何か指摘があればお願いします。
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:36popFront は range を返すのではなくて、 range 自体を変更する。
0443デフォルトの名無しさん
2009/08/05(水) 17:08:41あるRangeの前や後ろに要素を挿入する操作を定義すればいい。
0444デフォルトの名無しさん
2009/08/05(水) 19:59:26castして代入してるけどアラインメントが揃ってないとクラッシュしちゃう
処理系もあるので、memcpyあたりでコピーするようにしたほうがいいかも
0445デフォルトの名無しさん
2009/08/05(水) 20:20:30DPDが良いのか悪いのかは別にして、D言語にあれほど
10進演算器入れてくれって言ったのに・・・・
さよなら、D言語。
0446デフォルトの名無しさん
2009/08/05(水) 21:10:160447デフォルトの名無しさん
2009/08/05(水) 22:16:13それを言い出すのなら、CやC++で充分って事で。
0448デフォルトの名無しさん
2009/08/05(水) 22:24:460449デフォルトの名無しさん
2009/08/05(水) 22:48:320450デフォルトの名無しさん
2009/08/05(水) 23:11:13それはabs()で行けるやん。
0451デフォルトの名無しさん
2009/08/05(水) 23:20:090452デフォルトの名無しさん
2009/08/05(水) 23:25:05abs?
>>451
つくれます。
0453デフォルトの名無しさん
2009/08/05(水) 23:35:450454デフォルトの名無しさん
2009/08/05(水) 23:39:480455デフォルトの名無しさん
2009/08/06(木) 00:17:42なるほど、アラインメントの事は忘れていました。
OutBufferのwrite関数はアラインメントを調節してないように見えるんですけど、
alignSize関数を使ってライブラリ利用者自身が調節してくださいっていう事ですかね。
0456デフォルトの名無しさん
2009/08/06(木) 01:28:21popFrontの挙動って配列スライス(=参照)そっくりなんすよ。
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:520458デフォルトの名無しさん
2009/08/06(木) 02:19:000459デフォルトの名無しさん
2009/08/06(木) 02:52:04例の本に載っているのかな
0460デフォルトの名無しさん
2009/08/06(木) 03:59:26リストは一つのオブジェクトで,rangeはその上の範囲を指すビューだと考えれば、
リストの一部が参照されている限り、リスト全体が破壊されることはないのは普通じゃないかな。
// ビューに関する操作
empty // 空かどうか
front. back // 現在のビューの先頭、末尾の参照
popFront(), popBack() // ビューを縮める *ビューを破壊
// リストの実体に関する操作
dup() // 現在のビューの範囲だけを取り出して新しいリストを作る(そして,その全体を表すビューを返す)
insertBefore(T), insertAfter(T) // 現在のビューの前後に要素を追加する *実体を破壊
eraseFront(), eraseBack() // 現在のビューの先頭、末尾の要素を削除する *実体を破壊
たぶんプリミティブなオペレーションで必要になるのはこの辺りだと思う。
0461デフォルトの名無しさん
2009/08/06(木) 04:24:35そんな感じかね。
Range実装の一番単純な例として、
書いたものを晒してレビューして欲しいんだが、
D言語研究とかにページ作って見てもらってもいいかな?
0462デフォルトの名無しさん
2009/08/06(木) 06:17:16対になるInBufferが作りにくいなぁ・・・。
0463デフォルトの名無しさん
2009/08/06(木) 10:28:28http://dusers.dip.jp/modules/forum/index.php?topic_id=28#post_id100
Dequeのならここにある
>>462
すでにOutBuffer使われなくなってたりして。MemoryStream+EndianStream使えば何とかなりそうだし…
0464デフォルトの名無しさん
2009/08/06(木) 11:55:15std.streamにそんな物があったとは知らなかったです。
OutBuffer必要ないですねぇ。
0465デフォルトの名無しさん
2009/08/06(木) 19:16:20cast!int(hoge);
0466デフォルトの名無しさん
2009/08/06(木) 19:28:08テンプレート関数は仮想関数になれないから駄目。
0467デフォルトの名無しさん
2009/08/06(木) 22:36:10・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:150469デフォルトの名無しさん
2009/08/07(金) 12:48:450470デフォルトの名無しさん
2009/08/07(金) 13:37:58隠しフィールドって何ですか?privateとは違うんですか?
ぐぐっても答えが出てこないです。
0471デフォルトの名無しさん
2009/08/07(金) 14:03:55クラスの仕組みを実装するために、処理系がこっそりクラスに追加してるフィールドのこと。
だからソース中には出てこない。
0472デフォルトの名無しさん
2009/08/07(金) 14:07:12thx
0473デフォルトの名無しさん
2009/08/07(金) 15:35:49では、動的配列であるか判定するにはどうすればいいですか?
0474デフォルトの名無しさん
2009/08/07(金) 16:15:40■ このスレッドは過去ログ倉庫に格納されています