D言語 Part17

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

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

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

■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://dsource.org/ (dsource)
ttp://tinyurl.com/3da5oa (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動画)

■ 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)
2デフォルトの名無しさん:2008/02/10(日) 15:07:24
3デフォルトの名無しさん:2008/02/10(日) 15:07:51
4デフォルトの名無しさん:2008/02/10(日) 15:09:00
■関連スレ

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

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

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

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

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

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

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

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

"Code of the Nerds" Digital Mars C/C++
http://pc11.2ch.net/test/read.cgi/tech/1044210976/
5デフォルトの名無しさん:2008/02/10(日) 15:13:29
>>1
乙!!
6デフォルトの名無しさん:2008/02/10(日) 16:03:19
7デフォルトの名無しさん:2008/02/10(日) 16:06:04
うは乙ww
めちゃめちゃ補完されてるな
ABA Gamesが入ってないのが不思議なくらいだ
8デフォルトの名無しさん:2008/02/10(日) 17:01:50
>>1
芝のゲーム面白いね。俺はちょっと作れない。待つのがだめなんで。

>>7
最近はC#+XNAいってるぽい。
9デフォルトの名無しさん:2008/02/10(日) 17:12:56
_2ch[1202623572][1].otsu
10デフォルトの名無しさん:2008/02/10(日) 17:22:31
_2ch.write(["board_id": "tech",
               "thread_id": "1202623572",
               "content": ">>1乙",
               "mail": "sage"]);
11デフォルトの名無しさん:2008/02/10(日) 19:31:23
>>前スレ969
今はそんな泥臭いことしなくてもchar[]とかはscanされないよ
Chamgelog: D 1.001: 型情報を使う GC 参照
http://www.kmonos.net/alang/d/1.0/changelog.html#new1_001

あとそのページは想像で書かれたと思しき間違いが多くてあまり当てにならない。
たとえば当時std.gc.disable()は実装が空だったので対策にならない、とかね。
GC知りたきゃソース嫁(正直ソレもどうかと思うが)
12デフォルトの名無しさん:2008/02/10(日) 21:30:50
D言語終了のおしらせときまして、久々に飛んできました。
Microsoftは他をつぶすのは本当に得意ですね・・・

>>1
芝ゲー入れて、ABA games入れないとかどんだけwww
13デフォルトの名無しさん:2008/02/10(日) 21:59:26
>>11
GCは小ざかしいテクニック使わずにハンズフリーであるべきだよなあ。
C++風に完全に自分で管理するバージョンとか、
昨年のD言語フォーラムの例にあったフリーリスト使いまわし(配列のスライス返しとかで非常にうまくいくようで)とか、
いろいろあってもいいと思うけどね。
14デフォルトの名無しさん:2008/02/10(日) 22:36:41
必要性を感じないから誰も作ってないだけじゃないかね。
phobosのGC部分をすっかり入れ替えてしまえば、何とでもなる筈だけど。
15デフォルトの名無しさん:2008/02/10(日) 22:56:47
ごく少数のプログラムで各自持ってきたGCが使われるだけなのと、
ほぼすべてのプログラムで処理系お仕着せGCのみ自動的に使われるのと、
どっちが現実的にマシになるか、って判断をするとして
後者を選んだのがDだ、ってことだね。

GC停止できるしmalloc類も使えるしnewのオーバーライドできるしautoもあるし、
で実用上も問題ない感じか。
16デフォルトの名無しさん:2008/02/10(日) 23:05:33
一時代を支えたセコイ技術をいつまでも信奉してしまうのは要素を変えながら度々繰り返されてきたことだからねぇ。
17デフォルトの名無しさん:2008/02/11(月) 01:15:14
2.011がまだウォルタソの脳内にとどまっているので
おまいらは話題がないのですね
18デフォルトの名無しさん:2008/02/11(月) 01:50:45
てーかD言語とDMDってをるたんが一人で開発してるの?
19デフォルトの名無しさん:2008/02/11(月) 09:09:41
芝は最近見つけたから記憶にあたらしかった。
ABAは……ごめんなさい、すっかりわすれてたorz
20デフォルトの名無しさん:2008/02/11(月) 11:44:11
もうコンパイル通らないよね、たぶん。
21デフォルトの名無しさん:2008/02/11(月) 11:52:19
テキストファイルから最後の50行だけを抜き出す方法で一番オーバーヘッドが少ない方法ってなんだろう。
今はstd.file.readでいったんファイルを全部読み込んで改行文字の個数を調べているが、
もう少し良い方法がないものか。
22デフォルトの名無しさん:2008/02/11(月) 12:15:49
全部読み込むのは明らかに無駄だろう。
少しずつ読み込んで改行数えればいい。
23デフォルトの名無しさん:2008/02/11(月) 12:17:47
リングバッファに突っ込むとか
24デフォルトの名無しさん:2008/02/11(月) 12:18:08
一気に末尾まで移動して逆に辿っていくとかは?
25デフォルトの名無しさん:2008/02/11(月) 13:24:27
一行の文字数を見積もっておおよそ50行分を末尾から読み込み
足りなければどんどん前に進んでいけばおkっていうかD関係ねえwww
26デフォルトの名無しさん:2008/02/11(月) 15:31:08
ところで、
version(Tango) { } else {
}
を、
version(!Tango) {
}
とか書けるようにならないかなあ。
27デフォルトの名無しさん:2008/02/11(月) 15:40:56
できるならversion_notとかになりそう
28デフォルトの名無しさん:2008/02/11(月) 18:35:42
だれか2007/02/17あたりにこのスレに貼られてた
std/thread.dの修正ファイル持ってない?
29デフォルトの名無しさん:2008/02/11(月) 19:40:02
>>28
ttp://f17.aaa.livedoor.jp/~labamba/?BugTrack%2F26
のバグを修正したものらしいけど、既にバグ修正終わってるよ。
ttp://d.puremagic.com/issues/show_bug.cgi?id=645
> Fixed dmd 1.023 and 2.007
30デフォルトの名無しさん:2008/02/11(月) 21:36:26
>>29
ほんとだ
で、ちょっといろいろテストしてみたんだが新しいバグを見つけた
Thread.start()内の
state = TS.RUNNING;
hdl = _beginthreadex(null, cast(uint)stacksize, &threadstart, cast(void*)this, 0, &id);
3130:2008/02/11(月) 21:41:42
途中で送ってしまった
state = TS.RUNNING; とスレッド作成の間にGCとかでpauseAll()が呼ばれると、
stateはRUNNINGなのにスレッドハンドルが入ってないためにpause()で例外が起きてデッドロックした
上記の二行を synchronized(Thread.classinfo) で保護したら大丈夫だった
それとstart()のなかの
synchronized (Thread.classinfo) allThreads[idx] = null;
って
synchronized (Thread.classinfo){
 allThreads[idx] = null;
 nthreads--;
}
の間違いじゃね?
あと Thread.setPriority()ってNORMALにも設定できるようにするべきだと思う
32デフォルトの名無しさん:2008/02/12(火) 00:02:53
それ以前にWindows版の std.thread はスレッドハンドルを CloseHandle してないからな。

生成可能なスレッド数も4000までなんて制限ありそうなつくりっぽかったし。
std.thread 見て tango 使う決心した。
3332:2008/02/12(火) 00:13:56
ソース見たら同時に実行可能なスレッド数が1024までだった。
34デフォルトの名無しさん:2008/02/12(火) 00:50:05
>>30
29を見ると、修正パッチが投稿されるまで、をるたん11ヶ月もバグ放置してる。
こちらから修正パッチ投稿しないと、なおしてくれないのかも
3530:2008/02/12(火) 00:57:35
あともう一個、waitでタイムアウトになったスレッドのstateがFINISHになってしまい、
GCでpauseAllが呼ばれてもそのスレッドが停止されないままGCが実行されてしまう
というわけで誰か英語できる人パッチ投稿してもらえないだろうか
ttp://www.csync.net/service/file/view.cgi?id=1202744810
Linuxのほうは良くわからないので弄ってない
36デフォルトの名無しさん:2008/02/12(火) 10:06:30
37デフォルトの名無しさん:2008/02/12(火) 11:18:50
>>36
30じゃないけど、テラ乙
あといつもお世話になってます
38デフォルトの名無しさん:2008/02/12(火) 11:36:16
http://www.asahi-net.or.jp/~cs8k-cyu/ (ABA Games)

だれか貼れよw
XNAいじってんだな
3930:2008/02/12(火) 11:39:51
>>36
ありがとうございます
英語勉強しとこうλ....
40デフォルトの名無しさん:2008/02/12(火) 13:46:46
>>39
英語って文法知ってるだけじゃ書けないよね。
さらにプログラムの話になってくると普通にはない用語とか言い回しとかあるし、どこで勉強すればいいのやら;
41デフォルトの名無しさん:2008/02/12(火) 14:15:58
>>40
それこそ、DのニュースグループやらBugzillaやらを毎日読んでみればいいんじゃね?
digitalmars.D.announce辺りなら流量もそんな多くないし、
ほとんど "すげー" とか "乙" だけみたいな短いレスが多いから、
楽に読み始められると思う。
42デフォルトの名無しさん:2008/02/12(火) 14:31:19
インターネットで良く使われる英語の略語
http://kb.iu.edu/data/adkc.html
Virtual Entity of Relevant Acronyms
http://olympus.het.brown.edu/cgi-bin/info2www?(vera)Top
学校では教えてくれないバッドノウハウ英語
http://0xcc.net/blog/archives/cat_24.html
用語集
http://www.kmonos.net/alang/d/2.0/glossary.html
43デフォルトの名無しさん:2008/02/12(火) 14:48:31
学術論文とか技術英語のほうが単純な構文で楽なんだけどね
44デフォルトの名無しさん:2008/02/12(火) 15:02:03
「楽なんだけど」……続きがあるわけだ。
45デフォルトの名無しさん:2008/02/12(火) 15:29:53
Changelogのための英文テンプレート集
http://d.hatena.ne.jp/pyopyopyo/20070920/p1
Using Bugzilla
http://www.bugzilla.org/docs/2.20/html/using.html
46デフォルトの名無しさん:2008/02/12(火) 16:18:59
phobosをどっかのレポジトリに入れてもらって
みんなで気楽に修正できるようにならんかなー
をるたんはコンパイラで忙しいみたいだし、
みんなでやればphobosの完成度も飛躍的に向上すると思うんだが
47デフォルトの名無しさん:2008/02/12(火) 16:19:06
>>43 禿げ同
そっちの方が断然楽
短い口語的な英語はノリが分からなさ過ぎる
48デフォルトの名無しさん:2008/02/12(火) 16:26:53
>>46
公式だったかは忘れた。
ttp://dsource.org/projects/phobos
49デフォルトの名無しさん:2008/02/12(火) 16:29:09
今のphobosはSVNで管理されてるわけだが
たまにウォルターとアンドレイ以外の名前でコミットされてるよね
あれのメンテナになるには直接掛け合わないといかんのかね
50デフォルトの名無しさん:2008/02/12(火) 16:50:07
synchronized {}とsynchronized (o) {}って何が違うの?
51デフォルトの名無しさん:2008/02/12(火) 16:50:18
>>49
48のページの Login → Register で登録して、ログインするのかな?
52デフォルトの名無しさん:2008/02/12(火) 17:10:12
>>50
http://www.kmonos.net/alang/d/2.0/statement.html#SynchronizedStatement
oが同じもの同士は同時実行されないんじゃないの?
53デフォルトの名無しさん:2008/02/12(火) 17:18:01
>>50
synchronized {} == synchronized(this){}
54デフォルトの名無しさん:2008/02/12(火) 17:37:26
>>53
それは間違いだろう
synchronizedだけだとそのスコープ内のみ保護される
5553:2008/02/12(火) 17:58:33
あーそうか。その通りだ。スマソ
56デフォルトの名無しさん:2008/02/12(火) 18:31:46
>>50
・全国で同時に一人だけ、貯金を引き出せる。
・全国で同時に一人だけ、同じ口座番号から貯金を引き出せる。
この2つ、待ち時間がどう違うかを考える。
57デフォルトの名無しさん:2008/02/12(火) 22:16:25
文字列にコードを埋め込みたいんだけど、なにかいい方法ないかな?

たとえば、下の1)を2)にしたい。

1) "a == ${a}, a/2 == ${a/2}"
2) format("a == %s, a/2 == %s", a, a/2)
58デフォルトの名無しさん:2008/02/12(火) 22:37:13
CTFEで文字列を処理してmixinすればいいだけじゃないの?
59デフォルトの名無しさん:2008/02/12(火) 23:28:58
>>57
これで良くね? 未テスト注意。
string myprint(string code){
  return "format(\"" ~ code.replace("${", "\",").replace("}", ",\"") ~ "\")";
}

void main(){
  mixin(myprint("a == ${a}, a/2 == ${a/2}"));
}
60デフォルトの名無しさん:2008/02/12(火) 23:32:40
scopeの効能ってアクセス保護だけ?
61デフォルトの名無しさん:2008/02/12(火) 23:37:12
いくらGCが働くと言っても80MBもメモリを使ってるのを見ると精神衛生上良くないな。
なんとかならんもんか。
62デフォルトの名無しさん:2008/02/12(火) 23:48:18
>>60
どのscopeのことだい?
変数に指定するscopeストレージクラスなら、変数の書き換えを抑制し、
変数がスコープアウトするときに、変数の指すオブジェクトをdeleteする。

仕様上は。
63デフォルトの名無しさん:2008/02/12(火) 23:53:02
>>61
定期的にGC走らせてやればいいんじゃないか?
GUIアプリケーションならユーザの入力がないときとか。
64デフォルトの名無しさん:2008/02/13(水) 00:04:53
>>63
fullCollect();
これを使えば良いのかな?
これを処理する関数が終わったところに書いてみたけどタスクマネージャーから見てわかるような開放はしてくれなかった。
65デフォルトの名無しさん:2008/02/13(水) 00:20:10
std.gcのなかで
>>void minimize(); 
>>物理メモリの使用量を最小にします。 
って言うの見つけた。試してないけど。
66デフォルトの名無しさん:2008/02/13(水) 00:23:33
>>64
fullCollectの後minimizeかな。phobosのGCはこれ実装してないけど。
tangoのほうはつい数日前に実装されたっぽい。
67デフォルトの名無しさん:2008/02/13(水) 00:23:53
>>62
回答どうもです。

scope の書きかたって
scope クラス インスタンス = new クラス;
で良いんですよね。
今作成中のプログラムで↑で書くと

OPTLINK (R) for Win32 Release 8.00.1
Copyright (C) Digital Mars 1989-2004 All rights reserved.
D:\Programs\ProgLang\D\dmd\bin\..\lib\phobos.lib(winsock) Offset 25A8BH RecordType 00C3
Error 1: Previous Definition Different : _htons@4
--- errorlevel 1

とリンカがエラーを吐きます。
ためしに今作ってみた↓だと問題なくコンパイル、リンクが出来たのですが。。。
import std.stdio;

void main(){
for (int i = 0; i < 5; i++){
scope win w = new win();
w.wl("test");
}
}
class win{
void wl(char[] s){
writefln(s);
}
}
68デフォルトの名無しさん:2008/02/13(水) 00:27:03
>>64
fullCollect()でもminimize()でも一度増えたメモリ使用量は減ってない気がするな
これってこういうもんなの?それともバグか何か?
>>66
と思ったら実装されてないのかよ。。。
69デフォルトの名無しさん:2008/02/13(水) 00:33:16
>>66
うわっ
実装されてなかったのか…
どおりで何も起こらないわけだ。
70デフォルトの名無しさん:2008/02/13(水) 00:35:02
>>67
んー、それはリンカエラーだからscopeとは関係なさそうだ

WS2_32.LIBリンクするのやめてみたら。
71デフォルトの名無しさん:2008/02/13(水) 00:39:00
fullCollect()は参照されてないもののデストラクタを呼ぶ
minimize()は参照されてないところのメモリを開放する
って感じか。でminimize()は未実装と
72デフォルトの名無しさん:2008/02/13(水) 00:42:58
>>70
リンクしないとプログラム動きません。。。
73デフォルトの名無しさん:2008/02/13(水) 00:50:31
class A{
this(){
writefln("A:constructer");
}
~this(){
writefln("A:destructer");
}
}
void main()
{
scope A a = new A();
a = null;
}
こうするとデストラクタが呼ばれないんだけどこういうもの?
74デフォルトの名無しさん:2008/02/13(水) 00:54:36
>>73
それずいぶん前にもここで見た気がするんだが、まだ直ってないのか
75デフォルトの名無しさん:2008/02/13(水) 00:55:53
>>73
そういうもの。スコープの最後でdestructorを呼ぶから。
76デフォルトの名無しさん:2008/02/13(水) 01:01:57
>>74
コードが不正だって結論じゃなかったっけ……と思ったけど

> scope への初期化以外の代入も禁じられています。
> Rationale: これらの制限は、 もっともな理由が見つかれば将来的には緩和されるかもしれません。

なんて書いてあるな。緩和された? ……これは緩和せんでもいいような。
77デフォルトの名無しさん:2008/02/13(水) 01:04:21
>>75
スコープの外れた時点で入ってるもののデストラクタを呼ぶってのはわかるんだけども、
scope A a = new A(); って感じに変数宣言と同時に代入したもののデストラクタが二度と呼ばれなくなるっぽい

scope A a;
a = new A("a");
a = new A("b");
こんな感じにわけると"b"の方のデストラクタがスコープ外れたときに呼ばれて
""
7877:2008/02/13(水) 01:05:57
途中で送ってしもうた
scope A a;
a = new A("a");
a = new A("b");
こんな感じにわけると"b"の方のデストラクタがスコープ外れたときに呼ばれて
"a"のほうはプログラム終了時にちゃんとデストラクタが呼ばれた
79デフォルトの名無しさん:2008/02/13(水) 01:07:14
>>75
a = null; を無くすと、デストラクタが呼ばれるんだが・・・。
80デフォルトの名無しさん:2008/02/13(水) 01:08:40
>>76
なるほど そしたらコンパイルエラー出してくれればいいのにな
81デフォルトの名無しさん:2008/02/13(水) 01:10:54
>>79
?
82デフォルトの名無しさん:2008/02/13(水) 01:16:27
デストラクタが呼ばれないことがあるのはきついな。
83デフォルトの名無しさん:2008/02/13(水) 01:26:27
どう考えてもコンパイラのバグだろ。
84デフォルトの名無しさん:2008/02/13(水) 01:49:03
>>76
緩和されてなくて、scope変数の中身を変えるコードの時点で未定義動作だろね。
エラーが出ないのは前からなんだけど、scopeはfinal扱いにすりゃいいんじゃないかと思う。

…って、もしかして変数宣言のfinal属性って仕様は消滅してる?
constな伝播性のない定数的扱いで使いがありそうだったのに。
どっかで話があった、「宣言時やコンストラクタ以降でも構わない、
一度だけ代入する変数」って概念を与える属性として復活してくれりゃいいなあ。
85デフォルトの名無しさん:2008/02/13(水) 01:51:50
finalはなかった事になりました。
86デフォルトの名無しさん:2008/02/13(水) 02:38:51
finalは最初からなかったです
87デフォルトの名無しさん:2008/02/13(水) 02:41:57
finalは生きてるよ、enumの心の中で。
88デフォルトの名無しさん:2008/02/13(水) 02:42:15
え?いつの間に final なくなったの?
それ2.0の話?
89デフォルトの名無しさん:2008/02/13(水) 02:57:09
TangoのConduitsの辺りを読んでみようと思って久しぶりにマニュアル見てみたら
ttp://www.dsource.org/projects/tango/wiki/Manual

これ分散コンピューティング用のライブラリか?
ttp://www.dsource.org/projects/tango/wiki/ChapterClustering
なんかすっげーのを入れる気なんだな
90デフォルトの名無しさん:2008/02/13(水) 08:21:30
まじか
91デフォルトの名無しさん:2008/02/13(水) 10:51:47
>>71
phobosには実装されないんでしょうか…。
92デフォルトの名無しさん:2008/02/13(水) 11:02:14
なんかphobosの整備はをるたんの中で優先度最低っぽいから……
93デフォルトの名無しさん:2008/02/13(水) 14:35:56
TangoがDの命名規約守ってくれればをるたんもTango任すんじゃないのかなあ
94デフォルトの名無しさん:2008/02/13(水) 22:36:47
std.randomがクラスじゃなくて構造体で実装されてるのはなんで?
95デフォルトの名無しさん:2008/02/13(水) 22:38:45
値型で十分だからじゃないかな
96デフォルトの名無しさん:2008/02/13(水) 22:39:06
軽いからでしょ。
97デフォルトの名無しさん:2008/02/13(水) 22:51:12
早いw いや、十分だし実際値型で実装できてるんだけども。
UniformDistributionとかで使うから各エンジンのインターフェースは揃えてるわけで、こういうのって継承でやるのが普通だよね?
まあ軽いのかもしれないが、わざわざ値型を選択する理由になるのかなーとか思っていた。結構違うもんなのかね。サンクス。
98デフォルトの名無しさん:2008/02/13(水) 22:52:23
乱数は速度が要求される事もあるし、
仮想関数の呼び出しコストを嫌ったんじゃね。
99デフォルトの名無しさん:2008/02/13(水) 23:01:52
たかだか関数一つでクラス化されたら、使うのが面倒くさくなる。。。
100デフォルトの名無しさん:2008/02/13(水) 23:39:27
面倒くささは一緒だろう。
101デフォルトの名無しさん:2008/02/14(木) 00:18:56
構造体にインターフェースを適用させようぜ的な話があった気がするんだけど、どこで沸いた話だっけ。
102デフォルトの名無しさん:2008/02/14(木) 00:23:10
カンファレンスのスライドじゃなかったか
103デフォルトの名無しさん:2008/02/14(木) 00:39:32
もう関数はタプル返せるようになった?
104デフォルトの名無しさん:2008/02/14(木) 08:52:09
返せないときがあったの?
105デフォルトの名無しさん:2008/02/14(木) 08:59:35
104は未来人か何かか
106デフォルトの名無しさん:2008/02/14(木) 09:24:03
104はあたしの所に来なさい、以上。
107デフォルトの名無しさん:2008/02/14(木) 12:55:09
"Learn to Tango with D" がアマゾンから届いた。
索引は欲しかったな...
108104:2008/02/14(木) 13:07:03
Tuple!(uint,"w", uint,"h") size();

こういうことじゃなくて?なんか勘違いしてたらごめん
109デフォルトの名無しさん:2008/02/14(木) 13:52:15
std.typeconsのタプルという名前の汎用構造体型じゃなくて、
template Tuple(T...){ alias T Tuple; }の方のタプルだよ。
110デフォルトの名無しさん:2008/02/14(木) 14:49:27
typeconsなんてあったんだ今知ったです
111デフォルトの名無しさん:2008/02/14(木) 21:11:16
tangoでGCを切って、GCコードを含めずコンパイルする方法ってどこかに載ってる?
112デフォルトの名無しさん:2008/02/14(木) 21:23:17
そんなことしたらそもそもTango自体が使えなくなるんじゃないか?
113デフォルトの名無しさん:2008/02/14(木) 21:31:52
>112
そういえばそうだな。

フックさせるDLLはGC切りたくて、gcstub.objリンクする方法試してみたけど上手くいかなかった。
というかそもそもgcstub.objがtango+dmdのセットに入ってなかったからphobosの方から取ってきてた。

tangoは使えなくなるんだし、別にtangoセットのdmd使う必要もないな。...試してくる。
114デフォルトの名無しさん:2008/02/14(木) 21:49:06
   /⌒ヽ
  / ´_ゝ`)すいません、ちょっと場所お借りしますよ・・・
  |    /
  | /| |
  // | |
 U  .U

D言語BOF

オープンソースカンファレンス2008 Tokyo/Spring
http://www.ospn.jp/osc2008-spring/
サイトにて参加登録が始まりました。
空きがあれば当日参加できますが、申込数に応じて部屋(の大きさ)が変わるらしいので登録お願いします。
115デフォルトの名無しさん:2008/02/14(木) 21:58:16
import std.c.stdio;
void main(){
  printf("Hello");
}

dmd main.d -c
dmd main.obj gcstb.obj
ってしたら、exeが出来たんだけど、実行しても何も表示されない。
116デフォルトの名無しさん:2008/02/14(木) 22:22:23
エントリポイントがないから。

extern(C) int main(int argc, char* argv) {
main();
return 0;
}
117デフォルトの名無しさん:2008/02/14(木) 22:33:14
>>116
を追加したらちゃんと表示された。サンクス。

ってことはGCのコード外すとDプログラムの前処理や後処理のコードも消えるってことか。
Dのプログラムはどこにエントリポイントがあるのかと思ってたけど、そんなところにあったのか。
118デフォルトの名無しさん:2008/02/14(木) 22:44:48
gcstubリンクすると連想配列使えないとかforeach使えないとか、
様々な悪夢が起きるからやめたほうがいいと思うよ。
119デフォルトの名無しさん:2008/02/14(木) 22:45:21
>>117
エントリポイントはphobosが持ってる。
120デフォルトの名無しさん:2008/02/16(土) 03:03:11
http://www.kmonos.net/alang/wnd/topics/winapi.ja.html
この辺を参考にしてwin32プログラムに挑戦してるんですが、
以下のプログラムを実行すると、強制終了してしまいます。
これって何が悪いんでしょうか。

import win32.core, std.string;
extern (Windows)
int WinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
{
    format("%d", 2);
    return 0;
}

コンパイラはDMD v2.010です。
121デフォルトの名無しさん:2008/02/16(土) 04:19:43
GCとか初期化する前にformat読んだからじゃない?
http://www.kmonos.net/alang/d/2.0/windows.html
122デフォルトの名無しさん:2008/02/16(土) 04:31:54
できました!ありがとうございます。

自分でWinMainを書くと、phobos側でやってくれたGCの初期化処理が行われないんですね。
納得です。
123デフォルトの名無しさん:2008/02/16(土) 04:47:40
自分でWinMainってなんの為に書くの?
公式だと書いてるけどわなDには「書く必要はない」ってあるし。引数が欲しいから?
124デフォルトの名無しさん:2008/02/16(土) 05:41:03
>>123
あ、そこら辺俺も知りたい。
普通の言語で、エントリポイントは何をしてからmainに回ってくるのか、mainの前にいくつ経由してくるのか、
WinMain/DllMainだとどう違うとか。それで、D言語だと他のと違ってこれをする。とか。
エントリポイントあたりを解説してるサイトとかないかな。

あと自分で調べたこともちょっとメモ。間違ってたら指摘ください。
GC切ったプログラムに挑戦してる中で、DllMain()で自分で呼んでる_minit()/_moduleCdtor()/_moduleUnitTests()/_moduleDtor()が何をしてるか知りたくてソース見てきた(Phobos)んだけど、
_minit()はModuleInfoって奴をD言語形式に変換してる。おそらく_moduleCdtorとか呼ぶ準備。アセンブリでたった数行だった。
_moduleCtorはコンストラクタ実行らしい。ソース読んでも良く分からなかったけど、コンストラクタ/デストラクタ/単体テストの準備をしてたと思う。あと中でnewが使われてたから、GC切った環境でこれ呼ぶと落ちる。
残りの二つはおそらく_moduleCtorの準備したデータにアクセスしてる。_moduleDtorはデストラクタ実行。_moduleUnitTestsは単体テスト実行。他のことはしてないっぽい。

というわけで今はモジュールコンストラクタも単体テストも書かず、↑の関数一つも呼ばずにDLL作ってます。
125デフォルトの名無しさん:2008/02/16(土) 06:39:29
>>123
Win32APIの勉強をするにあたって、
http://wisdom.sakura.ne.jp/system/winapi/win32/index.html
ここを参考にしてるからです。
形式を合わせただけなので、WinMainを自分で書いたことに特に意味はありません。
126デフォルトの名無しさん:2008/02/16(土) 09:53:56
ちょっと解説してみようか。

たとえばCのスタートアップでは、コンソールハンドル(stdinとかね)のopen、
例外機構を持つ言語ならそのセットアップ等、プログラムを実行するために必要な準備をしてから、
ユーザープログラムの開始点を呼び出す。
もちろん、後処理(開いているハンドルのcloseとかatexitの関数実行など)も含まれている。

DMDの場合、Dとしてのスタートアップの前に、DMCのスタートアップがあるのが少しややこしいところ。
DMCのスタートアップ→DMDのスタートアップ→ユーザープログラムという三段構えになっている。

DMCでは、ソース中に含まれるmain、WinMain、DllMain等を判別し、
それに応じた(DMCの)スタートアップを自動的にリンクするようになっている。
この仕組みをDMDから使用した場合、Phobosに含まれるextern(C)のmainがDMCからみたmainということになり、
そちらが呼び出されることによって、Dのスタートアップが実行されるという仕組みになっている
(DMCからは、いわゆるextern(D)な関数の変名規則は未知なので、Dのソースコードのmainは、DMCからmainとして認識されない)。
ライブラリのリンク優先度は低いので、先にWinMain等が見つかると、
そちらのスタートアップが使用されるため、Phobos内のextern(C)のmainは呼び出されず、
Dのスタートアップは実行されない。
WinMain等で手動でスタートアップの関数を書かなければいけないのは、この仕組みのため。
127デフォルトの名無しさん:2008/02/16(土) 19:47:29
構造体のポインタにwithしてもパラメータ呼び出せるようにならないかなー
128デフォルトの名無しさん:2008/02/16(土) 19:48:59
言葉間違えすぎわらったです
パラメータじゃないメンバー
129デフォルトの名無しさん:2008/02/16(土) 20:52:19
>>127
*付けて with(*p) とかにすると大丈夫みたいだよ。
130デフォルトの名無しさん:2008/02/16(土) 21:50:32
>>129
う、うぃずぴー・・・
131デフォルトの名無しさん:2008/02/18(月) 05:07:57
最近このスレ寂しいな。

ところで、Cスタイル可変個引数関数を使おうとしたんだけど、
extern(C) void foo( int a, ... ){
  void* p = _argptr;
}

って感じで_argptrを使おうとすると、

Error: undefined identifier _argptr

とエラーが出た。多分バグかと。
とりあえずC言語で可変個引数のメモリ配置とか調べてみると
単純に引数が順番に置かれてるだけだった。
だから解決策として、

void* p = cast(byte*)&a + int.sizeof;

って自分で求めてこれを_argptrとして使ったら今のところ上手くいってる。これって既出?
あとついでにDスタイルの可変個引数のメモリ配置も調べてみたんだけど、どうやらCスタイルと一緒っぽい。
132デフォルトの名無しさん:2008/02/18(月) 06:42:17
Tango XML now in trunk!
http://dsource.org/projects/tango/forums/topic/393
超期待
133デフォルトの名無しさん:2008/02/18(月) 08:44:31
>132
おぉーこれは……

ってかTangoってなぜあのへんてこな構文なのか誰か教えてorz
134デフォルトの名無しさん:2008/02/18(月) 09:17:40
>>133
どのあたりが変?
実はphobosあまり知らずにtangoから入ったからあまり使いにくさを感じない。
結構すっきりしてて使いやすいと思う。
確かにモジュール名が大文字始まりなのは最初は変だと思ったけれども。
135デフォルトの名無しさん:2008/02/18(月) 09:28:18
2.0の対応予定無いのかなあ。
モジュール名のこととか、なんかもうちょい足並みが揃って欲しい。
136133:2008/02/18(月) 09:55:02
Cout("Hello")(" ")("World").newline;
ttp://www.dsource.org/projects/tango/wiki/TutSimpleIO

とか、とにかく \n が .newline ってのが馴れないんだよね。
137デフォルトの名無しさん:2008/02/18(月) 09:59:55
あー、それは確かに驚いたけど、そんな書き方自分は使わないからあんまり気にならないかなw
というかいつもStdout使ってる。あれ?Coutってもしかして\n使えない?
138デフォルトの名無しさん:2008/02/18(月) 10:18:05
>>131
そういや仕様書のCスタイル可変個引数の例文の方でも、
Cのリンケージと言いつつextern(C)しない_argptrのコード例しか
載ってないんだよな。

2.010で再現した。バグだろね。たぶんスレでは初出。
139131:2008/02/18(月) 10:22:47
あ、バージョン書き忘れてた。自分のはDMD1.026です。
ちなみにぐぐってみると
http://www.digitalmars.com/d/archives/digitalmars/D/What_happened_to_argptr_47894.html
なんてのがあった。
2007/2 ...もう一年前だな(遠い目
140デフォルトの名無しさん:2008/02/18(月) 19:15:32
>>132
まだ candidate だけど phobos にもこんなのがきているわけだが。
http://dsource.org/projects/phobos/browser/candidate/phobos/std/xml.d
141デフォルトの名無しさん:2008/02/18(月) 19:38:04
1年でそんなに変わるもんじゃないですね
142デフォルトの名無しさん:2008/02/19(火) 01:06:32
ここで聞くか、win32apiのところで聞くか迷ったけどここで。

ウインドウを左クリックしたら、メニューを出すプロシージャを書いたんだけど
ちゃんと”終了”というメニューが出てこない。(何か短いメニューのようなものが出る)
どこが悪いんでしょう。
wndは項目がクリックされたらメッセージを送るウインドウのハンドルです。

case WM_LBUTTONDOWN:
    POINT nowPoint;
    GetCursorPos(&nowPoint);
    SetForegroundWindow(wnd);
    hMenu = CreateMenu();
    AppendMenu(hMenu, MF_ENABLED | MF_STRING, 1, cast(wchar[])("終了"));
    
    TrackPopupMenuEx(
        hMenu,
        TPM_RIGHTALIGN | TPM_BOTTOMALIGN,
        nowPoint.x,
        nowPoint.y,
        wnd,
        null
    );
    
    break;
143デフォルトの名無しさん:2008/02/19(火) 01:19:20
cast(wchar[])じゃなくてcast(wchar*)とか?
144デフォルトの名無しさん:2008/02/19(火) 02:07:31
>142
CreateMenu() じゃなくて CreatePopupMenu() じゃないでしょうか。
145デフォルトの名無しさん:2008/02/19(火) 04:31:46
>>142
cast(wchar[])でも問題無いが、cast(wchar*)を使うべき。
cast(wchar[])"終了"と書くと文字列が配列として作られるから、長さ情報とかも生成される。
cast(wchar*)"終了"と書くと文字列へのポインタとして作られるだけで、配列の情報は生成されない。
146デフォルトの名無しさん:2008/02/19(火) 05:37:00
"終了\0"w.ptrが一番カッコいい気がするのは俺だけ?
147デフォルトの名無しさん:2008/02/19(火) 05:40:10
いや、お前だけじゃないw
でも毎回そう書くのは面倒だけどな。
148デフォルトの名無しさん:2008/02/19(火) 07:00:55
>>140
Phobosいろいろ修正されてるんだな
149デフォルトの名無しさん:2008/02/19(火) 07:23:39
>>144
それでした。
ありがとうございます。

>>143 >>145
わかりました。windowsapiに渡すときはそうすることにします。
150デフォルトの名無しさん:2008/02/19(火) 09:25:39
>>146
ゴルフ的な理由で俺はこう書いてる。
&*"終了"w
151デフォルトの名無しさん:2008/02/19(火) 11:57:30
関連質問かもしれないんですけど、
cast(wchar*)"ほげ"
って末尾にナル文字は含まれてるんですか?
152デフォルトの名無しさん:2008/02/19(火) 12:45:45
そういうケースの場合自動的にNULL終端になったと思います。
153デフォルトの名無しさん:2008/02/19(火) 13:24:01
D言語用のまともなDirectInputのポーティングってないんでしょうか?
調べても古いのしか出てこなくて。
154デフォルトの名無しさん:2008/02/19(火) 14:19:27
>>151-152
文字列リテラルはゼロ終端が保証されてる。
155デフォルトの名無しさん:2008/02/19(火) 17:45:13
real x = real.nan;
assert( x == real.nan );
なぜこれが通らないんだ… @ DMD 1.026
156デフォルトの名無しさん:2008/02/19(火) 18:01:02
nanとの比較は常に成り立たないんじゃなかったかな。
std.math.isnanを使うべし。
157デフォルトの名無しさん:2008/02/19(火) 18:04:41
>>156 サンクス!
なんかわかりにくいなぁ…
158デフォルトの名無しさん:2008/02/19(火) 18:11:05
ttp://www.kmonos.net/alang/d/1.0/expression.html
>どちらか一方でも NaN であれば、 == はfalse、!=はtrueになります。

とあるような
159デフォルトの名無しさん:2008/02/19(火) 18:12:48
>>155
assert( x !<>= real.nan );

ttp://www.kmonos.net/alang/d/1.0/expression.html

isnanのほうがきれいだな
160デフォルトの名無しさん:2008/02/19(火) 19:00:09
http://ja.wikipedia.org/wiki/NaN
浮動小数自体の仕様だよ
161デフォルトの名無しさん:2008/02/19(火) 19:58:58
> 1は何乗しても1だが、NaN乗しても1と言えるのか

(;´Д`)
162デフォルトの名無しさん:2008/02/19(火) 20:03:39
>>161
誰がうまいこと(ry
163デフォルトの名無しさん:2008/02/19(火) 20:08:50
164デフォルトの名無しさん:2008/02/19(火) 20:33:12
>>162
wikipediaの中にあんな一文があると
どうしても声出して笑っちまうよな。
ちくしょう。油断してた。
165デフォルトの名無しさん:2008/02/19(火) 20:41:51
0を何乗しても0だが、何を0乗しても1
では0を0乗したら0か、それとも1か?
という話と同じ匂いがするな
166デフォルトの名無しさん:2008/02/19(火) 20:45:17
【技術】マイクロソフト、新開発言語「D」を開発中[08/02/07]
http://news24.2ch.net/test/read.cgi/bizplus/1202379742/
167デフォルトの名無しさん:2008/02/19(火) 20:48:40
Java潰しにやっきになってたときと同じ匂いがするの
168デフォルトの名無しさん:2008/02/19(火) 20:49:44
>>165
3! = 6
2! = 2
1! = 1
0! = 1 ?

169デフォルトの名無しさん:2008/02/19(火) 20:58:41
>>168
0! = 1 はいちおう数学的に証明できますから
170デフォルトの名無しさん:2008/02/19(火) 21:00:29
証明というか定義の問題のような
171デフォルトの名無しさん:2008/02/19(火) 21:03:23
0^0

0/0

どちらも未定義なの?
172デフォルトの名無しさん:2008/02/19(火) 21:11:05
lim[x→+0] 0^x = 0
lim[x→0] x^0 = 1
lim[x→0] x^x = 1

あるえー?
173デフォルトの名無しさん:2008/02/19(火) 21:19:39
 lim[x→-0] 0^x = ?
174デフォルトの名無しさん:2008/02/19(火) 21:25:09
 lim[x→0] x^x って 0 じゃね?
175デフォルトの名無しさん:2008/02/19(火) 21:29:53
0.00001^0.00001=0.9998848773724686...
176デフォルトの名無しさん:2008/02/19(火) 21:37:37
数学板でも0^0が1か0かの論争よくやってるね。
177デフォルトの名無しさん:2008/02/19(火) 21:52:36
テンソルの次は0^0かよ・・・w
178デフォルトの名無しさん:2008/02/19(火) 22:08:18
>>132,140
なんかこういうの出てくると、いよいよ作りかけの俺製XMLライブラリを世に出しがたい雰囲気になってきた。
179デフォルトの名無しさん:2008/02/19(火) 22:15:25
n=0のとき
 lim[x→0] n^x = ?
n<0のとき
 lim[x→0] n^x = ?
180デフォルトの名無しさん:2008/02/19(火) 22:16:43
>>131
バグじゃなくて仕様でしょ。
_argptr は _arguments から計算されるけど、extern(C) だと _arguments が渡されない。
つまり _argptr が使えない。
181デフォルトの名無しさん:2008/02/19(火) 22:25:22
>>180
http://www.kmonos.net/alang/d/2.0/function.html
 > Cスタイル可変個引数関数
      (中略)
 > Cスタイル可変個引数関数は、Cの可変個引数関数の呼び出し規約と一致していて、
 > printf のような Cのライブラリ関数を呼び出すのに利用できます。
 > 可変個引数関数の中では、 特別なローカル変数 _argptr が使えます。
182デフォルトの名無しさん:2008/02/19(火) 22:27:18
>>180
仕様書に_argptrが使えるって書いてあるから、
「バグじゃねえの」って話になってるんでしょ。

まあ、普通にstd.c.stdarg使うえばいいんだろうけどね。
183デフォルトの名無しさん:2008/02/19(火) 22:31:53
>>182
tangoだとstdargがまだ未実装みたいだった。

Phobosも使い方が良く分からない。
Cでも可変個引数は使ったことなかったから知らないんだけど、とりあえずCの解説サイトに載ってるように書いても使えなかった。
184183:2008/02/19(火) 22:38:02
すまん、
>tangoだとstdargがまだ未実装みたいだった。
の行は無視してくれ。多分全然関係ないところで勘違いしてる。
185デフォルトの名無しさん:2008/02/20(水) 01:39:19
クロスプラットフォームなGUIを使いたいんだけど、wxDがいいのかな?
でももう更新されてないみたいだし、D->wxD->wxC->wxWidgetって中継が多いけど、実行速度は大丈夫なのかとか気にしてるんだが。
186デフォルトの名無しさん:2008/02/20(水) 04:34:12
% ウォルター曰く
A whole lotta library improvements.

http://www.digitalmars.com/d/1.0/changelog.html
http://ftp.digitalmars.com/dmd.1.027.zip

http://www.digitalmars.com/d/2.0/changelog.html
http://ftp.digitalmars.com/dmd.2.011.zip

I had planned on doing struct destructors for this update, but they are not done yet.
187デフォルトの名無しさん:2008/02/20(水) 04:38:05
Version D 2.011 Feb 18, 2008

New/Changed Features

* std.typecons: fixed code bloat issue; added Tuple.toString; added function tuple(); fixed unlisted bug in enumValuesImpl.
* std.process: added function shell().
* std.math: minor change in approxEqual.
* std.contracts: added functions pointsTo()
* std.numeric: minor unittest fixes.
* std.bitmanip: fixed code bloat issue, reintroduced FloatRep and DoubleRep.
* std.conv: minor simplification of implementation.
* std.regexp: added reference to ECMA standard in the documentation.
* std.getopt: changed return type from bool to void, error is signaled by use of exceptions.
* std.functional: added unaryFun, binaryFun, adjoin.
* std.string: updated documentation, changed code to compile with warnings enabled.
* std.traits: changed FieldTypeTuple; added RepresentationType Tuple, hasAliasing; fixed bug 1826; added call to flush() from within write; fixed unlisted bug in lines().
* std.algorithm: added map, reduce, filter, inPlace, move, swap, overwriteAdjacent, find, findRange, findBoyerMoore, findAdjacent, findAmong, findAmongSorted, canFind,
  canFindAmong, canFindAmongSorted, count, equal, overlap, min, max, mismatch, EditOp, none, substitute, insert, remove, levenshteinDistance,
  levenshteinDistanceAndPath, copy, copyIf, iterSwap, swapRanges, reverse, rotate, SwapStrategy, Unstable, Semistable, Stable, eliminate, partition,
  nthElement, sort, schwartzSort, partialSort, isSorted, makeIndex, schwartzMakeIndex, lowerBound, upperBound, equalRange, canFindSorted.
* std.thread: fixed so it compiles with warnings enabled.
* std.file: made getSize() faster under Linux.
* std.random: fixed so it compiles with warnings enabled; improved function uniform so it deduces type generated from its arguments.
* std.format: added fixes to make formatting work with const data.
* std.path: minor documentation changes.
188デフォルトの名無しさん:2008/02/20(水) 04:38:55
# Added std.xml
# Added std.complex
# Added std.iterator
# Added std.c.linux.tipc
# Added std.c.linux.termios
# Added nothrow keyword
# Re-enabled auto interfaces.
# Now allow static arrays to be lvalues.
# Now allows implicit casting of null to/from const/invariant.
# Now allows implicit casting of StructLiterals if each of its arguments can be implicitly cast.
# Now allows implicit casting of structs to/from const/invariant if each of its fields can be.
# Added pragma startaddress.
# .tupleof can now access private fields of a struct/class
189デフォルトの名無しさん:2008/02/20(水) 04:39:47
Bugs Fixed

* Fixed D/66406 Remaining const niggles #1 - Custom POD types
* Fixed display of ddoc template parameters that were aliased
* Fixed bug in std.file.readln() for Windows in translated mode
* Bugzilla 1072: CTFE: crash on for loop with blank increment
* Bugzilla 1435: DDoc: Don't apply DDOC_PSYMBOL everywhere
* Bugzilla 1815: foreach with interval does not increment pointers correctly
* Bugzilla 1825: local instantiation and function nesting
* Bugzilla 1837: Make dmd stop flooding the console: prints content of passed parameter file
* Bugzilla 1842: Useless linker command line output during compilation on Linux
190デフォルトの名無しさん:2008/02/20(水) 04:45:44
Version D 1.027 Feb 18, 2008

New/Changed Features

* Re-enabled auto interfaces.

Bugs Fixed

* Fixed display of ddoc template parameters that were aliased
* Bugzilla 1072: CTFE: crash on for loop with blank increment
* Bugzilla 1435: DDoc: Don't apply DDOC_PSYMBOL everywhere
* Bugzilla 1815: foreach with interval does not increment pointers correctly
* Bugzilla 1825: local instantiation and function nesting
* Bugzilla 1837: Make dmd stop flooding the console: prints content of passed parameter file
* Bugzilla 1842: Useless linker command line output during compilation on Linux
191デフォルトの名無しさん:2008/02/20(水) 05:29:34
作者はりきってるな
192デフォルトの名無しさん:2008/02/20(水) 06:24:51
ちょ、すごい量だなw
193デフォルトの名無しさん:2008/02/20(水) 06:28:32
MSがD言語作り始めたから対抗してるんだな
194デフォルトの名無しさん:2008/02/20(水) 07:58:43
ライブラリ強化期間?
tangoの立ち位置がよくわからなくなってき……
195デフォルトの名無しさん:2008/02/20(水) 08:19:29
assert( x == x );こうすればisnanできるんじゃね?
196デフォルトの名無しさん:2008/02/20(水) 08:58:39
同時に使用できないなんてことはさっさとやめて
TangoはC++に対するboostのような道を模索した方がいいと思う
197デフォルトの名無しさん:2008/02/20(水) 08:59:11
D言語ってC言語出来るんならすぐ使えるの?
198デフォルトの名無しさん:2008/02/20(水) 09:26:22
文法はちょっと違うけど、Cの標準関数もそのまま使えるから簡単。
199デフォルトの名無しさん:2008/02/20(水) 10:51:44
ver1で本家dmd、phobosを使っています。
"windows.h for D"を使いたいのですがエラーが出てワケワカランです。

パスの通ってるとこにライブラリなどを配置して
private import win32.ansi.windows;
こんな感じでインポートして
>dmd hoge.d win32a.lib
こんな感じでコンパイルすると
(ry)\winbase.d(50): Error: identifier 'HANDLE' is not defined
(ry)\winbase.d(50): Error: HANDLE is used as a type
(ry)\winbase.d(50): variable win32.winbase.INVALID_HANDLE_VALUE voids have no value
(ry)\winbase.d(62): Error: identifier 'STATUS_WAIT_0' is not defined
こんなのがずらずらと出ます。
なにかが足りないのでしょうか?

PlatformSDKをDに対応するように変換してどうのこうのという作業をしていないのですが、
それが原因でしょうか?win32a.libでは足りない?まさかHANDLEを定義しろと?
200デフォルトの名無しさん:2008/02/20(水) 11:11:21
こっち使うべし
http://www.dsource.org/projects/bindings/wiki/WindowsApi
http://www.kmonos.net/alang/wnd/topics/winapi.ja.html
4年前のソースなど絶対コンパイル通らんよ。。。
201デフォルトの名無しさん:2008/02/20(水) 11:44:42
あと>>200の使っても今はコンパイラがエラー吐いて止まるはず
過去ログに話出ていて原因は定義順だったと思う
ちなみに解決済みのバージョンがどこかで公開された様子はない
202デフォルトの名無しさん:2008/02/20(水) 11:56:09
>>185
クロスプラットフォームのGUIライブラリって今あるのかねえ
今はDFLをGTKベースに書き直しているはずだからそのうちこれが使えるかもしれないけど
速度は実測しかない
203199:2008/02/20(水) 12:10:02
>>200
入れたらすんなり通りました。
ありがとうございます(・∀・)

>>201
いまんとこエラー吐いてないです。
と言ってもショボイAPIしか呼んでませんけど・・・
204デフォルトの名無しさん:2008/02/20(水) 12:51:04
>>201
trunkでは直ってると思った
205デフォルトの名無しさん:2008/02/20(水) 12:53:17
>>202
dwtの新しいのってどうなんだろ。Tango前提なので試せてないんだけど
206デフォルトの名無しさん:2008/02/20(水) 14:35:37
今回のバージョンに>>30-36が反映されてないね。
207デフォルトの名無しさん:2008/02/20(水) 16:25:18
>>194
強化期間というより、dsourceで検証まで終わった新コードをまとめて承認したという感じじゃないのかな

しかしxml読みにこのスレでの頂き物を活用してた俺涙目
でも骨子は同じだからstd.xmlに切り替えてみる
omegaの方ありがとうございました
208デフォルトの名無しさん:2008/02/20(水) 16:37:31
3/1のBoF、時間が前に延びて10:15開始になってるね。
209デフォルトの名無しさん:2008/02/20(水) 17:08:53
ws2_32.libの中にはWSAAsyncSelectがちゃんとあるんだけど、
WSAAsyncSelectを使おうとすると未定義のシンボルって言うリンクエラーがでる。
何ででしょう。
210デフォルトの名無しさん:2008/02/20(水) 17:15:39
std.xmlて入力がInputStreamじゃなくてstringなんだな。
でっかいXMLファイルもとにかく一度全部読み込む必要があるのか……
211デフォルトの名無しさん:2008/02/20(水) 17:18:44
>>209
リンケージが違うとか。
212デフォルトの名無しさん:2008/02/20(水) 19:53:43
>>210
それはきちぃ・・
けど、使いどころはあるけどね
213デフォルトの名無しさん:2008/02/20(水) 20:04:10
>>210
配列のように扱えるStreamがあればちょっと改造して使えるんじゃない?
214デフォルトの名無しさん:2008/02/20(水) 21:51:17
BoFで
「Walterだけど何か質問ある?」
というネタをやるとしたら何か質問ある?
215デフォルトの名無しさん:2008/02/20(水) 21:58:10
const 関連の仕様に迷いはありませんか?
216デフォルトの名無しさん:2008/02/20(水) 22:15:58
標準ライブラリを tango に頑張ってもらう気は?
217デフォルトの名無しさん:2008/02/20(水) 22:16:47
もうかりまっか?
218デフォルトの名無しさん:2008/02/20(水) 23:11:47
マイクロソフトさんになにかひとこと
219デフォルトの名無しさん:2008/02/20(水) 23:16:48
>>217
どう訳せと?
「Dの開発は収入になりますか」とかそんなん?
「CD売れてますか?」とおもったけどこれDじゃなくてC++だな
220デフォルトの名無しさん:2008/02/20(水) 23:20:59
よく見たらTシャツとマグカップ売ってた
221デフォルトの名無しさん:2008/02/20(水) 23:25:15
火星柄の時計もなかなか
222デフォルトの名無しさん:2008/02/21(木) 00:00:46
文字列の扱いをもう少し国際化するつもりはありませんか?とか。

折角の機会だから、「ヲルタンに好き勝手要望・提案を伝えてもらえるコーナー」
なんてあったらすげー行きたくなるなぁ、と思いつつも
自分じゃ何も貢献出来なさそうなのであった。
223デフォルトの名無しさん:2008/02/21(木) 00:14:22
ICU並のUnicode処理を標準ライブラリに入れろってのも無理な話しだしなあ
224デフォルトの名無しさん:2008/02/21(木) 00:17:40
>>210
SAX 風のイベントモデルで DOM 風に一括読み込み必須というのはアレだな
この段階ではあんまり気にすることもないと思うけど
>>213
あれそれ何かなかったっけーと思ったら std.stream.TArrayStream は逆か
225デフォルトの名無しさん:2008/02/21(木) 00:58:08
データを受け取るときは全てStreamで受け取るべきだ!
226デフォルトの名無しさん:2008/02/21(木) 00:59:59
しかしinvariant stringで受け取るとpureにできたり(予想)速度的な利点がありそうなかんじ。
うまくラップするのが賢そうだな
227デフォルトの名無しさん:2008/02/21(木) 01:01:46
ICU使ったことないけど、あれってコア部分だけ組み込んで、
各エンコーダやユーティリティは別途入れるとかの使いかたはできへん?
228デフォルトの名無しさん:2008/02/21(木) 01:04:04
>>227
ICUは糞でかいから普通はDLLにして動的リンクする。
229デフォルトの名無しさん:2008/02/21(木) 02:40:18
dmd 2.011で,配列 arr の中から条件に合致する要素だけを
画面に表示するにはどうしたらよいのだろう

auto arr = [1,2,3,4,5];
assert(find!("a > 3")(arr) == begin(arr) + 3);//このfindは最初に見つかった要素しか返さない
foreach (i; /*findの結果を配列で返す方法があるとか?*/) {
 writefln(i);
}
230デフォルトの名無しさん:2008/02/21(木) 02:49:11
foreach(i; arr.filter!(q{ a > 3 })) {
 writefln(i);
}
231デフォルトの名無しさん:2008/02/21(木) 03:05:07
なるほどfilterを使うのかthx
232デフォルトの名無しさん:2008/02/21(木) 04:06:55
標準ライブラリが文字列mixinを大々的に使い始めたんだな。怖い怖い
233デフォルトの名無しさん:2008/02/21(木) 04:22:28
うひょー
234デフォルトの名無しさん:2008/02/21(木) 07:15:36
D言語関係無いけど、インデントするときタブとスペースどっち使ってる?
やっぱスペース4個にするのがベターだろうか。
235デフォルトの名無しさん:2008/02/21(木) 07:45:24
アンチスペースインデント、タブインデント信者の俺に対する挑戦だな。
236デフォルトの名無しさん:2008/02/21(木) 08:03:00
タブインデント信者だが、たまにスペースインデントを使いたくなる
しかし俺の伝説のIDEは行頭から連続したスペースは4文字ごとにタブに自動変換される仕様
スペースインデント派とのソース交換でもにゃる
237デフォルトの名無しさん:2008/02/21(木) 08:06:25
>>236
お前とソースを交換するスペースインデント派にはいい迷惑だな。
バージョン管理も狂うし。ダメダメじゃん、お前の伝説のIDE wwww
238デフォルトの名無しさん:2008/02/21(木) 10:37:10
>>234
本当に文頭のタブ桁ごとのインデントしか行わないならタブもありかもしれないけど、
大抵関数引数の整列とかでもインデント使ってて、それゆえにスペースが
混入してたりするから、結局そいつのタブ間隔以外では表示が崩れるんだよね。
239デフォルトの名無しさん:2008/02/21(木) 11:25:28
>>238
タブ派だがスペース混入とかしないぞ。
混在されるとタブストップによって表示が崩れるのが嫌ってのは同意。
インデントは全部スペースか全部タブかにしてほしい。
240デフォルトの名無しさん:2008/02/21(木) 11:39:25
Phobosは基本スペースだけどもたまにタブ混じってるな。
241デフォルトの名無しさん:2008/02/21(木) 11:57:06
phobosはtab幅が8なのが気に食わない
242デフォルトの名無しさん:2008/02/21(木) 12:08:38
>>241 激しく同意。4がスキ。
243デフォルトの名無しさん:2008/02/21(木) 12:53:41
>482-483
タブ幅とインデント幅は別物なので注意な。
Windowsしか知らない連中はそこの区別が付いてないことが多いけど。

タブ幅は8で固定。WindowsのDOS窓とかもそうなってる。
インデントは主義によって4とか8とか2とか色々ある。
244デフォルトの名無しさん:2008/02/21(木) 13:05:51
ソースはソニー?
245デフォルトの名無しさん:2008/02/21(木) 13:07:31
ここを読む人はLinux使える人のが多いんじゃないか?
246デフォルトの名無しさん:2008/02/21(木) 13:08:39
コーディングスタイル論争で、
「タブ幅は伝統的に8だから、8以外は間違ってる」
とか言い張る子が必ずいるよね(´・ω・`)
247デフォルトの名無しさん:2008/02/21(木) 13:10:20
いまどきタブ幅変えられないエディタなんかないだろ…
248デフォルトの名無しさん:2008/02/21(木) 13:12:41
つnotepad.exe



・・・そんな目で見るなって。
249デフォルトの名無しさん:2008/02/21(木) 13:22:40
パッチ作るときとか面倒だからタブ幅は1でお願いします。
250デフォルトの名無しさん:2008/02/21(木) 13:40:05
>247
でも、ソースコードを扱うのはエディタだけじゃないからね
端末ソフトとかプリンタとかあるし
251デフォルトの名無しさん:2008/02/21(木) 13:52:58
いずれにしてもインデントにタブを使うなら、
インデント幅ははタブ幅の整数倍にしてくれないと困る。
252デフォルトの名無しさん:2008/02/21(木) 14:16:41
インデント幅だかタブ幅の単発スレがム板かマ板にあった気がするけど、
とっくに落ちたのか、コーディング規約スレの方に統一されたのか…

>>239
そういえば、スペース混入が無くても、行頭以外でタブ使ってて
幅によって整列が崩れることもよくあるんだよね。行末コメントの整列とか。

結局、スペースによる桁揃えの併用か、簡素なインデント以外の
桁揃え整形を諦めるか、って方向になっちゃうんだよな。

「インデントの幅」というコーディングスタイルの好みの違いたった一つを
緩和するためだけに他の整形を放棄するのは、可読性の点で
コーディングスタイルとして合理的なじゃない気がする。
完結してる環境で規約として採用するにしてもナシじゃない?
253デフォルトの名無しさん:2008/02/21(木) 14:49:37
void func()
body {
}



int func()
  body {
  }


みんなはどうしてる?
254デフォルトの名無しさん:2008/02/21(木) 14:53:00
俺は後者だな。
前使ってたエディタが前者だとアウトラインを生成できなかったから。
255デフォルトの名無しさん:2008/02/21(木) 14:57:24
void func()
body
{

}
でいいじゃん
256デフォルトの名無しさん:2008/02/21(木) 15:09:00
後者だ
257デフォルトの名無しさん:2008/02/21(木) 15:47:21
後者だね、インデントはほしい。
258デフォルトの名無しさん:2008/02/21(木) 16:08:04
どっちにしろなんかインデント汚くなるし
in 使わないで最初に assert() 入れればよくね?
out 使わないでscope(exit) assert() 入れればよくね?
って思うのは俺だけかな…
259デフォルトの名無しさん:2008/02/21(木) 17:21:22
>>224 昔書いたソース漁ってたらそれっぽいのあった。D1.0だけど
class StreamAsArray(T) : FilterStream {
this(Stream source){ super(source); }
size_t length(){ return super.size; }
T opIndex(size_t index){
T ret;
super.position(cast(ulong)index); super.read(ret);
return ret;
}
void opIndexAssign(T value, size_t index){
super.position(cast(ulong)index); super.write(value);
}
T[] opSlice(){
T[] ret;
ret.length = super.size;
super.position(0UL); super.readBlock(&(ret[0]), super.size);
return ret;
}
T[] opSlice(size_t x, size_t y){
T[] ret;
ret.length = y-x;
super.position(cast(ulong)x); super.readBlock(&(ret[0]), cast(uint)y-x);
return ret;
}
void opSliceAssign(T v, size_t x, size_t y){
super.position(cast(ulong)x);
for( size_t i = 0 ; i < y-x ; i++ ) super.write(v);
}
void opSliceAssign(T[] v, size_t x, size_t y){
super.position(cast(ulong)x); super.writeBlock(&(v[0]), cast(uint)y-x);
}
}
260デフォルトの名無しさん:2008/02/21(木) 17:27:32
むしろせっかく契約を実装と分けられるのに、それを生かしきれてない気がする。
関数の使い方を表すドキュメントの一部なんだから、ddocにくらい出すべきだと思う。
ドキュメントに自動変換しようと思えば、いろいろ進化の方向が見えてくるんじゃないかと。

俺は前者派。body, in, outだけに1段階字下げを使うのが、なんか割りに合わない気がしてなー。
261デフォルトの名無しさん:2008/02/21(木) 19:52:22
>>247
ソースコードを見るのはテキストエディタだけだと思ってるのか?
ターミナルや、ブラウザの<pre>タグ内のタブ幅は弄れないことが多いし、弄れたとしてもいちいち設定を変えるのが面倒。
スペースインデントなら、タブ幅の違う環境に持っていっても問題がおきない。

逆に、プログラマがインデント一段文のスペースをまとめて処理できないテキストエディタなんて
使わないんだから、ハードタブ使う必要が全く無い。
262デフォルトの名無しさん:2008/02/21(木) 19:58:02
double pi=3.14159265358979823846;
if((fp=fopen("PI.bin","wb"))==NULL)
printf("\aファイルをオープンできません。\n");
else{
fwrite(π,sizeof(double),1,fp);
fclose(fp);
}

C言語で↑のようにpiをバイナリファイルに書き込んで、
BZというバイナリエディタで開いたのですが”$-DT・ @”(文字部)と表示されました。
その後にfread関数でPI.binの内容をプログラム上で出力すると3.1415926……とさきほどの数字に限りなく近い数字できちんと表示されたのですが
バイナリエディタで見ると変な文字に変わってしまうのは、何が原因なのでしょうか?これをバイナリファイルとして正しく見れる方法はあるのでしょうか。
263デフォルトの名無しさん:2008/02/21(木) 20:14:24
ここはD言語のスレなんだが、IEEE 754とかでぐぐっとけ
264デフォルトの名無しさん:2008/02/21(木) 20:15:30
>>261
コンテクスト的にそういう話じゃないだろ。
265デフォルトの名無しさん:2008/02/21(木) 20:22:20
>>262
D全く関係無いなw
ファイルの読み書きは出来るのに、文字列と数値の違いを理解してないってのは珍しいな。
それにパイを読み書きする必要があるって、学生か?

PC内で文字がどのように表現されているか、調べるべし。
266デフォルトの名無しさん:2008/02/21(木) 20:27:10
>>261
>247は>243の「タブ幅は8で固定」ってのに対するレスだと思うよ。
「お前はどんだけ限定された環境に棲んでるんだ」っていう感じの。

>>253
switch文のcaseに倣って前者だなあ。後者は意味のないインデントだし。
(ただ、>254みたいな場合には話は違うけど。)

>>258
一箇所にしか出現しない処理を、関数に分離するか直で書いちゃうか、って話と同じじゃね?
つまり両論あると。IDEでリアルタイムにドキュメント生成するくらいやってくれれば
その辺の処理分離もコード上の意思表示を超えた有用性を発揮するだろうけど…

というかリアルタイムにドキュメント生成して、しかも整形の仕方をHTMLの手書き
レベルでカスタマイズできたりしたら、本当に楽しいだろうなあ……
267デフォルトの名無しさん:2008/02/21(木) 20:34:51
ソースがXMLになると想像しただけで御免蒙りたい
268デフォルトの名無しさん:2008/02/21(木) 20:37:55
前も書いたけど、契約ってのは宣言や定義に密着してるべきだと思うんだよね。

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

Class get(Class[] items @nonNull, size_t index @lessThan(items.length)) @nonNull { return items[index]; }

これが、

Class get(Class[] items, size_t index)
in { assert(items !is null); assert(index < items.length); }
out(o) { assert(o !is null); }
body { return items[index]; }
269デフォルトの名無しさん:2008/02/21(木) 20:43:50
それで制約関数に
/// nullでない
/// $(var x) より小さい
とかコメントとつけとくと、IDEがこんな感じで表示してくれるの。

Class get(Class[] items, size_t index)
 items: 〜
  制約: nullでない
 index: 〜
  制約: items.length より小さい
 戻り値: 〜
  制約: nullでない
270デフォルトの名無しさん:2008/02/21(木) 20:57:05
なんかMicrosoftがD言語作るんだって
271デフォルトの名無しさん:2008/02/21(木) 20:58:48
>>270
もうそれは既に何度も書き込まれた情報。
272デフォルトの名無しさん:2008/02/21(木) 21:24:47
これ、塗るでない
273デフォルトの名無しさん:2008/02/21(木) 21:35:48
では煮るぞ
274デフォルトの名無しさん:2008/02/21(木) 22:23:57
>>267
現状と比べて、ソースがXMLになるという意味が分からんね。
ソースやコメント記法自体は変わらんわけだし、そこからの
ドキュメント生成ってのもなにか目新しい話じゃないし…?

>>268
indexとitemsの間に成り立つ条件のはずが
indexの条件になっちゃってることに違和感が

void nonNull(T)(T o){ assert(o is null); } /// Contract: $(B $0) は null でない

Class get(Class[] items, size_t index)
in(items) : nonNull
in(index, items){
assert(index < items.length);
} /// Contract: $(B $0) は $(B $1).length より小さい
out(o) : nonNull
out(items){ ...itemsに関わる条件... } /// ...Contractセクション...
body{ return items[index]; }

とかそんな感じの方が好みだなあ。
275デフォルトの名無しさん:2008/02/21(木) 23:34:50
>>274 (>>267)
瑛太:「僕にはなんか、わかりますけどねぇ」
276デフォルトの名無しさん:2008/02/22(金) 00:31:32
>>268-269
ドキュメンテーションコメントに結びつけたほうが見やすくない?
特定のセクションをコンパイラが展開してくれるとかで。ついでにBehaviorとか追加してみたり。

/**
 * Params:
 *  items =
 *   取得するClassオブジェクトのリスト。
 *   Contracts: nonNull
 *  index =
 *   Contracts: lessThan(items.length)
 * Returns:
 *  Contracts: nonNull
 * Behavior: 基本的な動作サンプル
 *  Class[] items = [new Class("alice"), new Class("bob")];
 *  assert(get(items, 1).name == "bob");
 */
Class get(Class[] items, size_t index){ return items[index]; }


あとIDEのエディタでコードを表示するとき、ドキュメンテーションコメントの部分は
その場でフォーマットされて表示されても良くね?と思った。こんな風に。
----------------------------------------------
| Class get(Class[] items, size_t index)
|  items: 〜
|   制約: nullでない
| (略)                             |編集|
----------------------------------------------
Class get(Class[] items, size_t index){ return items[index]; }

編集ボタン押すとソース表示に切り替わるの。
277デフォルトの名無しさん:2008/02/22(金) 01:27:30
コメントが実行されるってのは違和感ありまくり
278デフォルトの名無しさん:2008/02/22(金) 01:28:11
interfaceとかabstractのメソッドに契約付けることって、ひょっとして出来ない?
279デフォルトの名無しさん:2008/02/22(金) 01:29:10
ドキュメント化コメントってのは自然言語な説明を書く部分だと思ってるからなんか違う気がする。
動作そのものを左右する契約はコード本体に書いてあるべきだよ。
280デフォルトの名無しさん:2008/02/22(金) 01:33:18
>>278
仕様では、bodyを持たない関数には契約つけれない。
抽象関数でもbodyがあれば契約はかける。
281デフォルトの名無しさん:2008/02/22(金) 07:17:33
そんな契約、Mayerが見たら悶絶しちまうなwww
282デフォルトの名無しさん:2008/02/22(金) 08:40:15
さっきちょっと複雑なmixin組んできたけど、コンパイル時実行可能ってのは難しいな。
なんかもうmixinの制限ありで書くより、自動生成プログラム一つ組んで走らせた方が早いんじゃないかと思えてきた。
動的配列作れないとか、添え字に変数使えないとかが厳しい。
283デフォルトの名無しさん:2008/02/22(金) 12:18:00
>277, >279
Pythonの標準ライブラリにはユニットテスト用モジュールがいくつかあるんだが、
その中のdoctestという奴では、テスト内容をコメント部分に書くようになってる。
簡単なテストを書きたい場面ではよく使われてるよ。ご参考まで。

でもまあDではin/out/bodyとか用意されてるから、
そっちを素直に使う方がいいとは思うね。
284デフォルトの名無しさん:2008/02/22(金) 13:08:11
>>280
ありがとう。残念だ。
285デフォルトの名無しさん:2008/02/22(金) 15:33:52
>>272
if( this !is null ) {}
286デフォルトの名無しさん:2008/02/22(金) 17:38:57
変数の型を調べるにはどうすれば良いんでしょうか。
287デフォルトの名無しさん:2008/02/22(金) 18:15:06
typeofとかis式とか
288デフォルトの名無しさん:2008/02/22(金) 19:05:30
可変個引数関数で受け取った引数をそのまま別の可変個引数関数に渡すってできない?
289デフォルトの名無しさん:2008/02/22(金) 19:30:41
可変長タプルつかうのじゃあかんの。
それか、_argptrと_argumentsを引数に取るオーバーロードを用意するか。
290デフォルトの名無しさん:2008/02/22(金) 19:39:51
asmでスタックコピーする
291デフォルトの名無しさん:2008/02/22(金) 20:04:42
>>290
asmまでいかなくても出来るんじゃないか?メモリ確保して、コピーするだけだし。
292デフォルトの名無しさん:2008/02/22(金) 20:07:21
>>291
それをコールフレーム上でできるのか?
293デフォルトの名無しさん:2008/02/22(金) 20:07:30
シングルスレッドで再帰なしなら何とかなりそうだが、
再帰やマルチスレッドだと死亡しそうだな。
メモリ確保するにしても、その確保したアドレスを保持するポインタが必要だし。
静的な領域に複数のポインタの置き場所を作って
何とかやりくりすればましにはなるだろうが。
294デフォルトの名無しさん:2008/02/22(金) 20:12:41
あーそうか、_argptrは簡単にごまかせるが、_argmentsは難しいな。
Cの可変個引数関数の事考えてた。
295デフォルトの名無しさん:2008/02/22(金) 20:26:40
その関数の中で何もしていなければ、
jmp するだけでおk。
asm なら。
296デフォルトの名無しさん:2008/02/22(金) 21:45:57
>>288
http://www.kmonos.net/alang/d/2.0/variadic-function-templates.html
あたりを参考に、 void func(T...)(T arg){ func2(arg); } とか。
297デフォルトの名無しさん:2008/02/22(金) 23:52:10
>>298
タプルって可変個引数関数にそのまま渡せるんだな。知らんかった。
テンプレートってすごいけど、使いこなせない。
298デフォルトの名無しさん:2008/02/23(土) 01:19:49
D言語始めようと思うんですが何から始めればいいんでしょうか。
一応ヨガ教室には一とおり通いました。
299デフォルトの名無しさん:2008/02/23(土) 02:22:26
あとは腹筋200回とスクワット500回と走り込み50m20回をそれぞれ3セットずつ1ヶ月続けて基礎体力を身につけないと。
300デフォルトの名無しさん:2008/02/23(土) 02:24:26
とりあえずブリンカーを何処かで調達してきて
話はそれからだ
301デフォルトの名無しさん:2008/02/23(土) 02:25:24
ビリーズブートキャンプおすすめ
302デフォルトの名無しさん:2008/02/23(土) 06:45:34
D言語本格的に使ってるやつって日本に10人もいなそうだな
303デフォルトの名無しさん:2008/02/23(土) 07:07:27
本格的って言葉の定義が微妙だな。
学生で趣味のプログラミングでDに惚れ込んだ俺はどうなるw
304デフォルトの名無しさん:2008/02/23(土) 07:21:06
ノーカウント
305デフォルトの名無しさん:2008/02/23(土) 07:30:53
orz
306デフォルトの名無しさん:2008/02/23(土) 07:55:34
趣味が高じて卒業論文にD言語コード載せちゃいましたって俺は?
307デフォルトの名無しさん:2008/02/23(土) 07:57:31
卒論のtoy program程度じゃ

ノーカウント
308デフォルトの名無しさん:2008/02/23(土) 10:43:30
BOFで発言する方々で10人にはなるのではなかろうか
309デフォルトの名無しさん:2008/02/23(土) 13:31:07
D言語 孤高の10人
310デフォルトの名無しさん:2008/02/23(土) 13:58:37
今の時期Dを"本格的に"使うのって心中と近い意味になりそうで怖くないか。
ホビープログラマが遊びつつ、バグや要望を出していく段階だと思うが。
311デフォルトの名無しさん:2008/02/23(土) 14:09:34
>>310
少なくとも客を納得させるのは難しいな。
312デフォルトの名無しさん:2008/02/23(土) 14:12:30
Dで作ったプログラムを納品したあの人は10人のうちに入るわけだ
313デフォルトの名無しさん:2008/02/23(土) 14:41:50
ところでふと思ったんだが、

foreach(i; 0 .. 100) {
switch(i) {
case 42:
break foreach; // !!!
default:
writeln(i);
}
}

とか書けたら便利じゃね。
314デフォルトの名無しさん:2008/02/23(土) 14:44:36
構造変わった時にヤバいかもしれない。
例えば foreach の2重ループの中にそう書いてあって、
中の foreach を for に変更したくなった時とか。

現状のラベル付きの方がいいんじゃないかな。
315デフォルトの名無しさん:2008/02/23(土) 14:47:44
そうか。確かに。バグを誘発しやすいかも知れない
316デフォルトの名無しさん:2008/02/23(土) 14:53:46
たしかVBってその書き方できたよね。

昔はFORとNEXTの対応があってなくてもよかったBASIC処理系あってカオスだったけど。
317デフォルトの名無しさん:2008/02/23(土) 15:59:03
>>316
つーか、大抵の処理系ではNEXTの変数は省略可だったような。
318デフォルトの名無しさん:2008/02/23(土) 16:22:40
>>313
Javaかなんかで多段breakできなかったっけ。

>>316
学生時代につかってたポケコンがそんな感じで、
if i>0 than for j=0 to 100
-hogehoge-
if i<0 than next
てな感じで、C系ではできないforの宣言ができたりしてた。next を最初に見つけるととまるんだよなぁ。
なつかしい。
319デフォルトの名無しさん:2008/02/23(土) 16:53:18
>>318
thanじゃなくてthenな。
320デフォルトの名無しさん:2008/02/23(土) 17:47:51
>>317

いや >>316 が言ってるのは

for i = 0 to 10
if hoge then next
next

とか書けたという意味かと

321デフォルトの名無しさん:2008/02/23(土) 17:55:10
gosubで呼ばれた先にnextがあったらどこに戻るんだろうか
322デフォルトの名無しさん:2008/02/23(土) 18:23:16
>>321
普通にエラーだったような。
323デフォルトの名無しさん:2008/02/23(土) 18:40:42
>>310
asm C C++とどっぷりつかってた。
んで、D言語であそんでたくちだが、C#がすんなり使えた。
D言語しかつかわないようにするわけでは無い。
「現代的な言語」(プログラミング言語Dより引用)にふれることは
そう無駄じゃないと思う。
324デフォルトの名無しさん:2008/02/23(土) 19:00:22
>>323
Dを本格的に使う、という話からだいぶ横滑りしてるかと。
というか、それは最初からC#とか使ったほうがいいんじゃね?
向こうのが開発環境も充実してるし、現代的な言語に触れるって目的なら各種スクリプトも手軽……

……なんか悲しくなってきた。でもDが好きだよ、俺。
325デフォルトの名無しさん:2008/02/23(土) 19:34:09
>>324
> ……なんか悲しくなってきた。でもDが好きだよ、俺。

好きならイイジャマイカ
326デフォルトの名無しさん:2008/02/23(土) 22:44:24
Dの設計思想に触れる事によって、どういった機能が他の言語に欠けてるか、あれば便利か、要らないかといったことも知ることが出来るわけで。
まあ他にもインスピレーションを得るために、変わった環境に触れていくのは悪いことではないかと。
今のところDってそういう位置付けでもいいと思う。言語の成長とともに使う側も成長していける言語みたいな。
327デフォルトの名無しさん:2008/02/23(土) 23:43:23
でもほかの言語と比べてもメリットいっぱいあるとおもうけど……
C#(.net系全部)はネイティブはけないし、Javaは遅いし、C++は汚いし……
趣味にはぴったりジャマイカ。コードと仕様が美しいし(C++と比べて)
まぁぶっちゃけC#が高速で起動するネィティブ吐き出したら勝てないと思うが。

328デフォルトの名無しさん:2008/02/24(日) 00:17:04
>ネイティブ
つngen
329デフォルトの名無しさん:2008/02/24(日) 02:50:17
でもngenって各ユーザが実行しないといけないやつだよね。たしか。

開発者側でネイティブ吐きたいよな。
330デフォルトの名無しさん:2008/02/24(日) 03:04:35
>>328
C#で作ったソフトの起動が遅すぎるんだが俺の何かがまずいのか?
ngen使っても起動時間は長いんだが
Dで作ったソフトは軽快だから好きだ!
331デフォルトの名無しさん:2008/02/24(日) 03:36:51
D言語で積み木シューティングってゲーム作ってるやついたよな
あれくらい使いこなせてるんなら本格的っていえるか
332デフォルトの名無しさん:2008/02/24(日) 05:04:39
>>331
TUMIKI Fighters は ABA さん
ちなみに Wii でゲーム化されるほど
ttp://www.gamespark.jp/modules/news/index.php?p=2808
333デフォルトの名無しさん:2008/02/24(日) 06:05:33
でもDは基本ゴッタ煮だから言語設計の勉強には向かないと思われ
334デフォルトの名無しさん:2008/02/24(日) 06:52:44
>>328
ngen使っても遅いのがちょっと速くなるくらいであまり変わらんよ。
335デフォルトの名無しさん:2008/02/24(日) 06:59:18
ABA始まったな
336デフォルトの名無しさん:2008/02/24(日) 07:06:08
次はまさしくんハイ!だな

まあ冗談だがWiiの操作性には割とマッチすると思わなくもない
337デフォルトの名無しさん:2008/02/24(日) 12:18:37
関数の中のswitch文の中でreturnを使った場合はその後にbreakはいらないよね?
338デフォルトの名無しさん:2008/02/24(日) 12:24:38
プログラムの動作上はなくても問題ない。
保守・改変まで考慮する場合(それがよい習慣か否かとか)は話が別だけど。
339デフォルトの名無しさん:2008/02/24(日) 12:39:48
ふと思った
関数にデストラクタ機能欲しくね?
quitでユーザー定義なデストラクタへ抜けてreturnでdefaultなデストラクタへ処理を渡す。
340デフォルトの名無しさん:2008/02/24(日) 12:41:56
デストラクタ作るなら return したら常に呼ばれるべきだと思うが。
341デフォルトの名無しさん:2008/02/24(日) 12:45:02
goto と同じ問題が発生するな。
変数の初期化を飛び越える事ができない。

解決するにはコンストラクタと称して
デストラクタで使用可能な変数を宣言する場所が必要になるな。
342デフォルトの名無しさん:2008/02/24(日) 12:52:19
scopeじゃいかんの?
343デフォルトの名無しさん:2008/02/24(日) 12:54:51
scope(exit) か。
344デフォルトの名無しさん:2008/02/24(日) 13:12:38
>>335
ABAはもうD使ってないよ
345デフォルトの名無しさん:2008/02/24(日) 13:13:17
>>339
撒き戻しとか後片付けならスコープガードや例外を使えばいいと思うよ。
346デフォルトの名無しさん:2008/02/24(日) 14:52:28
>328
ngen使っても完全なネイティブじゃないでしょ。それに.net frameworkで動くからやっぱり遅い(初期起動が特に)

趣味で作る小さなプログラム起動するのに時間かかってたら腹が立つ。Office大きいものならば許せるが。その点Dは高速だし好きだ。IDEさえ何とかなれば……orz
347デフォルトの名無しさん:2008/02/24(日) 15:19:16
例外ってロジック的になんか美しくないじゃん
348デフォルトの名無しさん:2008/02/24(日) 15:21:47
普通にtry{} finally{}で何の問題があるんだろう…
349デフォルトの名無しさん:2008/02/24(日) 16:00:32
処理のフローが、各関数の呼び出し関係から暗黙に決まる、
ってのが美しくないところだと思う。

関数を合成して処理を作ること、処理を連結してフローを作ること、
これはそれぞれ別のまとまりとして定義されないと、処理フローが
ぐちゃぐちゃになると思うよ。
350デフォルトの名無しさん:2008/02/24(日) 16:16:09
tryはDだとWinMain内部でしか使ったことが無いや。
351デフォルトの名無しさん:2008/02/24(日) 17:02:44
D言語BOF
日程:3月1日(土) 10:15 - 12:00 開始時間が変わりました
時間変更に伴い、以前登録された方も前半/後半を個別に登録してください
http://f17.aaa.livedoor.jp/~labamba/?D%B8%C0%B8%ECBOF
352デフォルトの名無しさん:2008/02/24(日) 19:57:23
>>310
俺もそう思ってたけどBOFのBillさんとか本気でつかってるぽい
まあ研究職だからできるのかもしれんが
353デフォルトの名無しさん:2008/02/24(日) 20:04:33
>>222

伝えるだけなら
ココで出たバグ報告をnewsにポストする人と手間はかわらん

しかしその後の議論についていきつつ説得するのは正直めんどい

あと >>214 はあまり集まらないので没りそう
354デフォルトの名無しさん:2008/02/24(日) 21:33:32
scope 関連は記述もわかりやすくなるし、
try ~ finally と違ってネストが深くならないしでかなり好きだ
355デフォルトの名無しさん:2008/02/24(日) 21:37:42
たった一段のネストがそんなに気になるのかなあ?
356デフォルトの名無しさん:2008/02/24(日) 22:57:49
印刷することを前提に、80桁以上にならないように注意すると
途端に一段のネストが憎たらしくなるよ。
357デフォルトの名無しさん:2008/02/24(日) 23:20:15
ネストが深くなりすぎるプログラムはダメなプログラム。
358デフォルトの名無しさん:2008/02/25(月) 00:20:23
finallyとかscopeは、ドキュメントいわく
「実行される箇所ではなくそれが概念的に属する場所に配置されている」
というのがいい点だが、概念的にスコープに属している実行保障を
わざわざtryブロックに付け替えるのは分かりにくくなる原因だよなと思う。
359デフォルトの名無しさん:2008/02/25(月) 00:57:43
デバッグ用じゃないin、out、bodyみたいなのがあればいい感じ?
360デフォルトの名無しさん:2008/02/25(月) 06:28:56
そろそろCLOSからbefore/afterをパクるのもいいな
361デフォルトの名無しさん:2008/02/25(月) 14:38:36
void hoge()
in {
}
out {
}
before {
}
after {
}
body {
}

上から読むとなかなかbodyにたどり着けないな
362デフォルトの名無しさん:2008/02/25(月) 15:14:01
361みたいにするのは358な理由で分かりにくくなるだけじゃね?
363デフォルトの名無しさん:2008/02/25(月) 16:43:09
>>354
自分は基本的にタブ8でインデント + 80桁でコーディングしてるのですごく気になる。
あと、

step1();
scope (failure) step1_end();

/* なんか処理 */

step2();
scope (exit) step2_end();

こんな感じのを try~finally で書くと鬱にならないか?
364363:2008/02/25(月) 16:43:40
ミスった。>>355 ね。
365デフォルトの名無しさん:2008/02/25(月) 20:26:47
>>363
それ、いわゆるtry…catch…finallyなパターンじゃない?
366デフォルトの名無しさん:2008/02/25(月) 20:49:01
DMDがコンパイル中にエラーで落ちるのは良くあること?
367デフォルトの名無しさん:2008/02/25(月) 21:32:55
なんのエラーだ
368デフォルトの名無しさん:2008/02/25(月) 21:34:24
内部エラー
369デフォルトの名無しさん:2008/02/25(月) 21:41:58
>>363
これと等価かな
try {
  step1();
  step2();
} catch {
  step1_end();
} finally {
  step2_end();
}
370デフォルトの名無しさん:2008/02/25(月) 21:46:17
>>366
よくある
371363:2008/02/25(月) 21:55:24
また書き間違いだ……
なんでこんなミスを

step1();
scope (exit) step1_end();

/* なんか処理 */

step2();
scope (exit) step2_end();
372デフォルトの名無しさん:2008/02/25(月) 22:01:09
面倒なのはfailureやexitがたくさんあるときだよね、きっと。
例外が発生した位置によってやるべきことが変わるから。

各段階にあわせた例外処理をするために別々のtry文を用意するか、
深くネストしたtry文で…って感じになるんじゃないかと。
373デフォルトの名無しさん:2008/02/25(月) 22:53:05
>>371
try-finallyがネストするのがそんなに嫌か?
巻き戻す環境が違うんだから、ネストして当然だと思うが。
むしろ>>371のほうが妙な制御依存が発生して嫌だ。
374デフォルトの名無しさん:2008/02/25(月) 22:57:04
tab8で80桁て普通だよな。
マジでプログラムの質が悪いからネストした時辛くなるんだろ。
375デフォルトの名無しさん:2008/02/25(月) 23:05:55
そして>>358に戻る。
376デフォルトの名無しさん:2008/02/25(月) 23:14:28
TAB8でもインデントは4だってさ
377デフォルトの名無しさん:2008/02/25(月) 23:15:46
それでも>>371みたいな書き方を推奨してるわけじゃないよね。
378デフォルトの名無しさん:2008/02/25(月) 23:27:57
その辺の話は本家にあるよね。

http://www.kmonos.net/alang/d/2.0/exception-safe.html
>>373
 > try-finally による方法は、 概念的に関連している値のセットと復元コードが、
 > 間に関係のないコードが挟まることでいくらでも離されてしまう危険性を含んでいます。
>>374
 > try-finally による解決は、 リソースの初期化コードと巻き戻し処理のコードが分離して記述され、
 > 実際ソースコード上で視覚的に大きく離れてしまします。
 > しかし、密接に関連した処理は一カ所にまとまっているべきです。
>>377
 > scope文だけでは例外のcatchはできませんから、try-catch も必要です。
 > try-finally は、scope文によって冗長な構文となったと言えます。
379デフォルトの名無しさん:2008/02/26(火) 03:24:07
配列の要素の任意の組合せでイテレイトしたいのですがどうかけばいいでしょう
ary = [1,2,3,4] から二個含んだ組合せなら
foreach(e; combination(ary, 2)) {
  e; // [1,2],[1,3],[1,4],[2,3],...
}
こんな感じの処理にしたい.

参考にRubyで書くと
def each_combination(ary, k)
  if k == 0
    yield []
    return
  elsif k == ary.size
    yield self
    return
  end
  duped_ary = ary.dup
  x = duped_ary.shift
  each_combination(duped_ary, k-1){|y| yield [x]+y }
  each_combination(duped_ary, k){|y| yield y }
end
each_combination(ary, 2){|x| p x }

御存知でしたら教えて下さい
380デフォルトの名無しさん:2008/02/26(火) 06:52:40
直訳した
int delegate(int delegate(ref T[])) each_combination(T)(T[] ary, int k)
{
return (int delegate(ref T[]) yield){
if( k==0 ) {
T[] empty = [];
if(int r = yield( empty )) return r;
}
else if( k==ary.length ) {
if(int r = yield( ary )) return r;
}
else
{
T x = ary[0];
foreach(y; each_combination(ary[1..$], k-1)) { T[] plus=x~y; if(int r=yield(plus)) return r; }
foreach(y; each_combination(ary[1..$], k)) { if(int r=yield(y)) return r; }
}
return 0;
};
}
381デフォルトの名無しさん:2008/02/26(火) 08:35:49
>>374
いつの時代の人間だよ。
こういうこと言う奴って ts とか hmi とか訳分からん略した変数名使ってんだよな。
そっちのほうが最悪だっつーの。
382デフォルトの名無しさん:2008/02/26(火) 09:01:12
2chにコードとか投稿すると著作権持っていかれるんだよなあ…
383デフォルトの名無しさん:2008/02/26(火) 10:25:41
実質「公知のもの」になって委譲されるわけではないと思われ。
独占権は当然なくなるが。
384デフォルトの名無しさん:2008/02/26(火) 11:43:25
385デフォルトの名無しさん:2008/02/26(火) 11:58:54
>>384
著作権は「創作性」なるものがないと認められないんだが、
Dスレで張られてる程度のサンプルないし言語仕様の検証コードなら、
創作性なしと判断されるのが通例と思われ。
386デフォルトの名無しさん:2008/02/26(火) 13:22:14
委譲できる分だけ全部委譲させられるから問題なんだけど。
 > 無償で非独占的に複製、公衆送信、 頒布及び翻訳する権利を投稿者に許諾します。
 > また、投稿者は掲示板運営者が指定する第三者に対して、一切の権利(第三者に
 > 対して再許諾する権利を含みます)を許諾しないことを承諾します。
あたりのせいで、ここでコードを聞いて流用するとなると適用できない
ライセンスが結構出てくる。

20行を越えるようなコードでも創作性はないってのが通例だってのは初めて聞いた。
そうなると、それよりはるかに大きい著作物の20行の断片だけを流用する場合でも、
その断片はもはや創作物として原形をとどめてないないんだな。
387デフォルトの名無しさん:2008/02/26(火) 13:33:38
ttp://slashdot.jp/developers/article.pl?sid=06/10/23/0026258
とか3行で騒いでて何をやってるんだろうなあと思ったことはあるけどよくわからんな。
388デフォルトの名無しさん:2008/02/26(火) 13:39:39
try{
 Database database = MySQLDatabase.connection();
 try{
  Query query = database.compileQuery("select * from books");
  try{
   Result result = query.execute();
   foreach(Row row; result){ ... }
  } finally {
   query.close();
  }
 }finally{
  result.close();
 }
}finally{
 database.close();
}

これがscope(exit)ですっきり上から下に書けるから嬉しい。
最初にnullで初期化してclose()前にnullチェックすればtry-finallyは1段階で済むけど、
出来れば変数は宣言と同時に初期化して、再代入したくない。
まぁデストラクタ使えばscope statementすら不要だけど。
389デフォルトの名無しさん:2008/02/26(火) 13:48:05
あ、やべ。コードが全然違った……。

Database database = MySQLDatabase.connection();
try{
 Query query = database.compileQuery("select * from books");
 try{
  Result result = query.execute();
  try{
   foreach(Row row; result){ ... }
  } finally {
   result.close();
  }
 }finally{
  query.close();
 }
}finally{
 database.close();
}
390デフォルトの名無しさん:2008/02/26(火) 17:28:56
>>386
このスレで張られるサンプルって、ほとんどが機能的なものではなく「言語仕様の検証」であって、
言語仕様からほとんど一意に決まるものだから検証サンプルそのものには創作性は認められないのではないかと。
何らかの機能性を有していれば3行のコードでも創作性が認められるとは思うけどね。
391デフォルトの名無しさん:2008/02/26(火) 17:45:29
>>390
いずれにしても裁判所がそう認めない限りはわからないんだよね。
不確実なことを避ける考え方にも一理ある。

こういう話は嫌いじゃないけど、どうせ結論出せないんだし
気にする人だけ気にしてればいいんじゃね。
392デフォルトの名無しさん:2008/02/26(火) 17:48:58
>>390
気にする人だけ気にすればいいというのは同意かな。
多少気になったので裁判例を調べてみた。


ア プログラムの著作物性
 プログラムは,その性質上,表現する記号が制約され,言語体系が厳格
であるため,計算式をプログラム言語で記述したような場合にはプログラムにおけ
る記述が相互に類似することがあり得る。仮に,簡単な内容とごく短い表記法によ
って記述したプログラムをも,著作権法上の保護対象とすると,コンピュータの広
範な利用を妨げ,経済活動や研究活動に多大な支障を来すことになる。また,著作
権法は,プログラムの具体的表現を保護するものであって,機能やアイディア,あ
るいは科学的な計算式やその採用を保護するものではない。当該プログラムがある
目的における公知の計算式の採用を保護対象とすることになると,結果的には計算
式そのものを独占させることとなるからである。
 したがって,コンピュータに対する指令の組合せであるプログラムの具
体的表現がこのような記述からなる場合は,作成者の個性が発揮されていないもの
として創作性が否定されるべきである。
http://www.courts.go.jp/hanrei/pdf/683C8598E4E61EC4492570DF001C9775.pdf


図表又は図表の使用例に示される思想ないし
アイデアそのものは,著作権法によって保護されるものではない。また,このよう
な図表又は図表の使用例は,次に述べるとおり,かかる思想ないしアイデアを表現
する際にその個性が表れず,定型的な一般的にありふれた表現としかならないよう
な場合には,著作権法によって保護し得る表現上の創作性があるということはでき
ない。
http://www.courts.go.jp/hanrei/pdf/A04C1CFADEB110E7492570BD001A9BE1.pdf
393デフォルトの名無しさん:2008/02/26(火) 17:59:34
392のアンカは391宛てで……

上のほうの裁判例、被告の主張部分で判決部分ではありませんでした(ただし被告勝訴)
しかし、控訴審で判断が一部ひっくり返ってた。
公知の式をプログラムにするだけなら創作性はないが、
それを含むシステム全体は創作性を有するとかなんとか
ttp://www.courts.go.jp/hanrei/pdf/20070104101733.pdf

自分の間違いを訂正したところで、
スレチなのでこの辺で打ち止め。
394デフォルトの名無しさん:2008/02/26(火) 18:10:52
>>389のほうが>>371みたいなのよりずっとマシだと思う。
395デフォルトの名無しさん:2008/02/26(火) 18:12:01
コーディングスタイルやらインデントの話は不毛すぎる
396デフォルトの名無しさん:2008/02/26(火) 18:31:05
>>371だと、コードのどの部分でどんなハンドラが付いてるかが制御依存しちゃうんだよな。
397デフォルトの名無しさん:2008/02/26(火) 19:01:36
そもそもデストラクタ使えよって話だ。
398デフォルトの名無しさん:2008/02/26(火) 19:43:06
>>396
どういう意味なのか、アホな俺にもう少し噛み砕いて説明してくれまいか。
>>389だと、openなどに対応するcloseがえらく離れちゃうし、
connection, compileQuery, executeという「本筋」の実行パスが分かりづらくて、
可読性の面で問題があるとおもうのだけど。
こう、gotoを忌避するあまり、関数呼び出しの度にif(!error){ ... が重なっていくCのコードみたいに。
399デフォルトの名無しさん:2008/02/26(火) 20:20:32
>>396
そりゃあ、どんな処理をしたかによって後始末の処理を予約・保証したいんだから、
処理によって動的に定まるのが自然じゃね?
switch(x){
case 1:
f1(); scope(exit) _f1();
break;
case 2:
f2(); scope(exit) _f2();
break;
default:
f0(); scope(exit) _f0();
}
とかtry-finallyだとどうなるんだろう。
結果的に静的に定まる場合なら、静的に定めるtry-finallyなコードに直訳できるけど、
こういう場合はよく分からん。フローの状態を記録する変数とか用意したりするのが
セオリーなんだろうか。でもそれじゃ結局フロー依存だしなあ。
400デフォルトの名無しさん:2008/02/26(火) 20:40:46
単純なサンプルのつもりで書いたコードがボコボコにされててなんか辛いんだぜ
401デフォルトの名無しさん:2008/02/26(火) 21:31:55
どんまい
402デフォルトの名無しさん:2008/02/26(火) 21:44:24
言語仕様に著作権が認められたらサンプルコード載っけるだけで著作権侵害になるのかな。
403デフォルトの名無しさん:2008/02/26(火) 22:00:23
>>402
著作権は親告罪だから言語の作者がよほどの基地外じゃなかったら真っ白だよ
でも今居るGPL厨みたいな人間がしつこく言ってきて結果的な被害は変わらないだろうけどw
404デフォルトの名無しさん:2008/02/26(火) 22:22:52
>著作権法
>第十条  この法律にいう著作物を例示すると、おおむね次のとおりである。
>(中略)
>九  プログラムの著作物
>3  第一項第九号に掲げる著作物に対するこの法律による保護は、その著作物を作成するために用いるプログラム言語、規約及び解法に及ばない。この場合において、これらの用語の意義は、次の各号に定めるところによる。
>一  プログラム言語 プログラムを表現する手段としての文字その他の記号及びその体系をいう。
>二  規約 特定のプログラムにおける前号のプログラム言語の用法についての特別の約束をいう。
>三  解法 プログラムにおける電子計算機に対する指令の組合せの方法をいう。

なので少なくとも現在の日本では著作権法の保護は言語仕様に及ばないはず。
405デフォルトの名無しさん:2008/02/26(火) 23:34:56
じゃ実用新案辺りで手を打とうか
406デフォルトの名無しさん:2008/02/26(火) 23:38:03
言語仕様そのものには及ばないが、言語仕様を説明する文章は当然保護されるよな。
ニュースの内容と、ニュース本文のような感じで。
407デフォルトの名無しさん:2008/02/27(水) 00:25:33
Rubyみたいにソースコードが仕様な場合はどうなんだろ。
408デフォルトの名無しさん:2008/02/27(水) 00:58:46
tryの中でfinallyをscope(exit)と同じように機能させるとか
try {
  starthoge();
  finally endhoge();
}
409デフォルトの名無しさん:2008/02/27(水) 01:10:57
{
 starthoge();
 scope(exit) endhoge();
}

これと等価?
410デフォルトの名無しさん:2008/02/27(水) 02:54:59
catchがあるときに本領を発揮すると思う
411デフォルトの名無しさん:2008/02/27(水) 12:52:51
DFL 0.9.7 is mostly bug fixes and core improvements:
http://www.dprogramming.com/dfl.php

Entice Designer 0.8.4.03 is a bug fix release:
http://www.dprogramming.com/entice.php

New Entice Designer and DFL Video Tutorials:
http://www.dprogramming.com/dfl/videos.php
412デフォルトの名無しさん:2008/02/27(水) 23:10:20
>>407
assert(0)
413デフォルトの名無しさん:2008/02/27(水) 23:20:46
Entice は日本語が使えないのが惜しい……
414デフォルトの名無しさん:2008/02/27(水) 23:31:15
static foreachはまだなのか
415デフォルトの名無しさん:2008/02/28(木) 17:37:23
ftp://ftp.uploda.net/exe/test_window.zip
同じスタイルのウインドウを表示するだけのサンプルなんだけど、CとDではなぜか表示スタイルが違ってしまう。
たぶんCの方が正しいと思うのだけど、どこが悪いんだろう。

import std.stdio;を消すとエントリポイントが無いエラーが出るし。
416デフォルトの名無しさん:2008/02/28(木) 18:11:42
>>415
Dの場合win.defをですね、

EXETYPE NT
SUBSYSTEM WINDOWS,4.0

って書き換えてみましょう。
417デフォルトの名無しさん:2008/02/28(木) 18:16:07
>>416
あっはっは。
前にそれどこかで見つけてそういう風にしていたのになぜか今見てみたら4.0が消えてたほうに変わってた。OTL

どうもです。
418デフォルトの名無しさん:2008/02/29(金) 00:36:53
DFLでウィンドウアプリを弄っています。
メインのFormをいわゆるSW_HIDE状態にしたいのですが・・・できませんorz
visible=false; とか ShowWindow(cast(HWND)this.handle, SW_HIDE);
とか試したがうまくいかないです。
やりかたご存知の方いらっしゃいませんか?
419デフォルトの名無しさん:2008/02/29(金) 09:34:45
DFLってかなり.netに似てるから使いやすそうだと思ったけど、情報が少ないっていうのはかなり不利だよな。

>>418
で、.netに似てるなら.netを調べたらいいんじゃないだろうかと思って調べて来たら、.netでフォームを非表示にするには
FormクラスのHide()を呼び出すみたいです。
DFLを見るとhide()があるので、これでいけるかも知れませんね。試してませんが。
420デフォルトの名無しさん:2008/02/29(金) 09:51:59
>>416のdefを適用してもコンソールウインドウを出しっぱなしにするにはどうしたら良いのでしょうか。
421418:2008/02/29(金) 10:45:48
>>419
とりあえずhide()を呼び出して見ましたが変わりませんでした。

.netのHide()メソッドはvisibleをfalseにするのと同じとありました。
DFLにおいてvisibleプロパティについてはEnticeDesignerのメインformのvisibleプロパティのところに
 "whether or not this form is visible"
と説明がでますのでどっちにしろ表示される・・・・( ;´Д`)ぇー!?
て思ってたんですが、hide()もこれと同じ結果のようです。
なんか方法ないもんですかねぇ;
422419:2008/02/29(金) 10:46:49
もう少し調べてみた。

MSDNによると、.netではvisible=falseとHide()は全く同じ動作らしい。DFLでも同じ可能性大。

それと、DFLで試してきたけど、
一つFormを作り、そこにボタンを置き、ボタンをクリックするとフォームのvisibleをfalseにする。って組んでみたら普通に非表示にされた。
だけど、フォームの生成(Application.run(form);)の前にform.visible=falseを設定しても非表示にはされなかった。
これは多分.netと同じ挙動。
http://natchan-develop.seesaa.net/article/18029500.html
というわけで、>>418がいつvisible=falseしてるのか知りたい。

とりあえず>>418が生成前にvisible=falseしていると仮定して話を進めるが、
↑のURLにあるとおりの回避法をDFLでしようとして、formの生成前に
form.windowState=FormWindowState.MINIMIZED;
form.showInTaskbar=false;
としても上手くいかなかった。(showInTaskbarを指定し、MINIMIZEDにするとデスクトップの左下に小さくなったウィンドウが表示されてしまう。それぞれ単独では上手く動作する。)

ので、Application.run(form)を使うなら、非表示のまま起動は出来ないと思う。
ただもちろんApplication.run()を使えばフォームを表示しないことは出来る。その場合フォームを表示したければform.show()を使えばOK。
423419:2008/02/29(金) 10:54:09
つまり、hide()とかvisibleは生成前に設定しても意味無いけど、
生成後ならちゃんと機能するってことだと思う。
424418:2008/02/29(金) 11:27:24
>>419
生成前に設定しているのが原因でした。
生成後に設定するにはどうしようかと考えていましたが、
わたしがやりたかったのはApplication.run()で実現できそうです。
使い方がよくわからなくてすみません。
ありがとうございました(・∀・)

DFLに関して検索するとC#とかの情報が役に立つのでその辺を意識して作られてるのだと思いますが、
.NETとかC#とかやらずにC++あたりからDにきた者にはDflDocはひどいです><;
425デフォルトの名無しさん:2008/02/29(金) 11:39:20
俺も初心者の頃に訳も分からずC#のフォームデザイナ使っただけだから、ほとんど覚えてないな。
プログラムの流れやメッセージループも理解してないのにデザイナ使うと訳分からず混乱するw
426デフォルトの名無しさん:2008/02/29(金) 14:45:33
>>420
EXETYPE NT
SUBSYSTEM CONSOLE,4.0
427デフォルトの名無しさん:2008/02/29(金) 18:35:42
あー。そーいえば俺もDFL使ってた時に同じようにはまったかも。
確認してないけど初期設定はonLoadとかloadとかでやったらどうだろう。
428419:2008/02/29(金) 18:40:40
>>427
まあいいかと思って書かなかったけど、追記。
load内でvisible=false;をするとフォームが一瞬表示された後に消えます。
429デフォルトの名無しさん:2008/02/29(金) 22:37:54
>>426
どうもです。出来ました。
430デフォルトの名無しさん:2008/02/29(金) 23:15:02
D言語って日本語の変数名使えたのね。全く知らなかった。
使わないけど。
431デフォルトの名無しさん:2008/02/29(金) 23:44:38
明日はBOFか。
ここんとこ忙しくて予約とかさっぱり忘れてた
でも行ってみる
432デフォルトの名無しさん:2008/03/01(土) 01:20:24
人数のカウントは、部屋の大きさの目安をとるためだけらすぃよ
433427:2008/03/01(土) 02:09:54
>>428
あーそうだった。俺もそうなって、そこで妥協したんだった。
いい加減なこと言って申し訳ない。

しかしDFLのコード読んでみたら、初期化の最中にWinProcを介して
あっちこっち飛んでは3種類くらいの可視フラグを立ててはチェックしてで頭が爆発した。
434デフォルトの名無しさん:2008/03/01(土) 02:17:58
C++0xでこんなことできるらしいんだけど、Dではどう書けばいいのだろうか。

template<typename... T>
class C: T... {
C(const T&... t): T(t)... {}
}
435デフォルトの名無しさん:2008/03/01(土) 02:22:52
あ…インターフェイスにコンストラクタないから、これはかけないか。
436デフォルトの名無しさん:2008/03/01(土) 02:32:38
template<class ... Args> void g(Args ... args) {
f(const_cast<const Args*>(&args)...);
}

こういうのはちょっと羨ましいかも
437デフォルトの名無しさん:2008/03/01(土) 10:09:46
BOFはじまるよ
438デフォルトの名無しさん:2008/03/01(土) 11:13:51
BOFたのしそうだな
439デフォルトの名無しさん:2008/03/01(土) 12:07:27
BOFおわったよ
440デフォルトの名無しさん:2008/03/01(土) 12:07:57
BOFたのしかったな
441デフォルトの名無しさん:2008/03/01(土) 12:38:41
442デフォルトの名無しさん:2008/03/01(土) 12:44:11
仕事早ぇー
443デフォルトの名無しさん:2008/03/01(土) 15:26:05
BOF乙

ところで"Tuple"が複数のモジュールにあって
それらが全然違うものだから混乱したぞ
444デフォルトの名無しさん:2008/03/01(土) 15:36:31
あるある
object.dみたいなところにひとつTupleが書いてあればいいのに
445デフォルトの名無しさん:2008/03/01(土) 15:38:42
タプルリテラルを作れば解決するのになあ
446デフォルトの名無しさん:2008/03/01(土) 16:42:23
>>441
もしかしてABAさんと、をるたんの謝辞だけ?
447Dubhead:2008/03/01(土) 17:14:32
BOFの簡単なリポートを書きました。
メモが追いつかなかった部分が多々あるけど許してね orz
http://d.hatena.ne.jp/Dubhead/20080301
448デフォルトの名無しさん:2008/03/01(土) 17:19:47
気づいたら終わってた
誰か録画してないのー?
449デフォルトの名無しさん:2008/03/01(土) 17:32:04
勇者はやっぱ勇者だった
だがDでSIGGRAPH発表する伝説の勇者が出現
450デフォルトの名無しさん:2008/03/01(土) 18:03:56
>>447
GJ!
概要はなんとなくわかった。
読めば読むほど拝聴したかっただぜ!Orz
451デフォルトの名無しさん:2008/03/01(土) 18:23:38
例の納品した人出てたのかw
ちくしょー見たかったぜ。
452デフォルトの名無しさん:2008/03/01(土) 18:24:37
更新されてる。
>>Walterだけど何か質問ある?
453デフォルトの名無しさん:2008/03/01(土) 18:37:45
>>447
プレゼンまとめうpとかあったら神なんだが
454デフォルトの名無しさん:2008/03/01(土) 18:51:39
Dの更新追うのに疲れてここ一年くらい新機能弄くって遊ぶようなことしてなかったけど今日のでちょっと興味戻ってきたわ
455デフォルトの名無しさん:2008/03/01(土) 18:57:45
>>449
>だがDでSIGGRAPH発表する伝説の勇者が出現
kwsk
456デフォルトの名無しさん:2008/03/01(土) 22:39:06
>>455
ビルタンです
457デフォルトの名無しさん:2008/03/02(日) 01:08:36
ニコニコに上がってるのか。
話題に乗り遅れてるが、ぼちぼち見てくる。
458デフォルトの名無しさん:2008/03/02(日) 01:35:24
おおお素晴らしい
ちゃんとスライドが読める画質っぽいwww
459デフォルトの名無しさん:2008/03/02(日) 10:53:47
460デフォルトの名無しさん:2008/03/02(日) 11:40:11
コメント少なすぎだろw
461デフォルトの名無しさん:2008/03/02(日) 11:54:28
>>460
お前がするんだよ!
462デフォルトの名無しさん:2008/03/02(日) 12:23:41
最初鼻の穴見えすぎ
463デフォルトの名無しさん:2008/03/02(日) 12:30:04
エロくね?
464デフォルトの名無しさん:2008/03/02(日) 12:59:20
鼻のタグが付いてるな。
465デフォルトの名無しさん:2008/03/02(日) 15:39:27
うーむ、コメントしにくいなぁ。
コメントが少ないからじゃなく何となく。
466デフォルトの名無しさん:2008/03/02(日) 15:52:45
聞き取りにくいところに字幕をつけるとかどうだろう。
467デフォルトの名無しさん:2008/03/02(日) 16:47:44
いいね
468デフォルトの名無しさん:2008/03/02(日) 18:26:20
やろうと思ったけど自分の耳じゃ復元できなかった…。
実際会場行った人、お願いします。
469デフォルトの名無しさん:2008/03/02(日) 20:47:23
ushort型をasmでAXに入れようとしたらサイズが違うと怒られたんですが、

import std.stdio;
void main(){
  ushort n = 0x3132;
  writefln("ushort.sizeof = %dbyte", ushort.sizeof);
  writefln("before:0x%x",n);
  asm{
    mov AX, n;
    rol AX, 8;
    mov n, AX;
  }
  writefln("after:0x%x",n);
}
こういうのは駄目なんですか?
470デフォルトの名無しさん:2008/03/02(日) 21:20:55
見てきた。微妙にウォルタンには伝え辛い発言があって困るw
471デフォルトの名無しさん:2008/03/02(日) 21:26:57
>>459
しゃべってる人が俺の脳内イメージとは、悪くない意味で違ってた。・・・当たり前か。
理解できてるかはべつとしておもしろかた。
472デフォルトの名無しさん:2008/03/02(日) 21:35:24
お願いがあるのだ
ニコ動以外の所に上げて
473デフォルトの名無しさん:2008/03/02(日) 22:23:29
>>469
asmの話題はあんまり見たこと無いな。
俺はアセンブリ系はわかんないし。
474デフォルトの名無しさん:2008/03/02(日) 22:26:52
word ptr がいるんじゃない?
475デフォルトの名無しさん:2008/03/02(日) 22:28:40
>>472
アカウント取ったほうが早い
異論は認める
476デフォルトの名無しさん:2008/03/02(日) 23:08:26
だなぁ。異論はあるだろうが、とりあえず登録はしておいたほうがいい。
477デフォルトの名無しさん:2008/03/02(日) 23:50:10
いちいちページ切り替えるの面倒だったからflvファイル連結してみたけど40MB超えてて\(^o^)/オワタ
478デフォルトの名無しさん:2008/03/03(月) 07:34:28
ttp://www.kmonos.net/alang/dee/diki7/brainfuck2d

BOFのコンパイル時コンパイラに触発されて、
brainfuckを、Dの
 delegate void(std.stream.InputStream, std.stream.OutputStream)
なデリゲートに変換するモジュールを書いてみた


以前D言語における日本語利用の話題になったときにインタプリタまで書いてたやつです
今度はきちんとDソースコード表現を経由してネイティブコードにコンパイルされます
文字列mixinを使うと素直な表現になりますね
479デフォルトの名無しさん:2008/03/03(月) 07:59:26
>>473-474
自己解決しました。と言うかあまりにあれだった。
結果として>>469だとコンパイル通りました。
通らなかったのは下のコード。(ちなみにやってることは全部エンディアン変換)
import std.stdio;
void main(){
  ushort unknown = 0x3231;
  testa(unknown);
}
ushort testa(inout ushort n){
  asm{
    mov AX, n;
    rol AX, 8;
    mov n, AX;
  }
}
inoutのものをそのままレジスタには渡せないってことですね。
inoutも内部ではポインタ渡しみたいになってるから、
void testa(inout ushort a){
  asm{
    mov EAX, a;
    mov BX, [EAX];
    rol BX, 8;
    mov [EAX], BX;
  }
}
こうしないといけないみたい。
でも、これより↓の方がわずかに速かったのには脱力した。
ushort testa(ushort n){
return (n << 8) | (n >>> 8);
}
480デフォルトの名無しさん:2008/03/03(月) 08:13:00
481デフォルトの名無しさん:2008/03/03(月) 11:34:21
tango.core.Thread.Thread には、 phobosのstd.thread.Thread.pause/resume 相当の機能はないのでしょうか?
見た感じないのだけど、どうしてだろう?
void thread_suspendAll() 内には void suspend( Thread t ) なるものが見えるけど外からは使えない…
482デフォルトの名無しさん:2008/03/03(月) 11:58:46
pauseでスレッドを停止させる設計が間違ってるからじゃないか
483デフォルトの名無しさん:2008/03/03(月) 12:54:04
>481
Thread.yield ではダメ? 実行権が勝手に戻ってきちゃうと都合悪いのかな。
だったらtango.core.Thread.Fiberで yield/callするコードを書いといて、
そのファイバーをスレッドで駆動するという手はある。
484481:2008/03/03(月) 13:18:00
>>482
そうなんですか?初めて聞きました。浅学なもので…
でも、使いたくなる時もあるんじゃないかと思うので、
設計の良し悪しは別にして、あってもいいような気がしないでもないのですが…

>>483
それはなんとも強引ですねw

とりあえず使うところはWindowsなので、スレッド内でGetCurrentThreadとかすればなんとでもなる…
けど、なんかスマートじゃない感じが…
485デフォルトの名無しさん:2008/03/03(月) 13:44:55
動けばいいのだ
486デフォルトの名無しさん:2008/03/03(月) 14:08:39
Internal error: ..\ztc\cgcod.c 1522
ってなんですか?
487デフォルトの名無しさん:2008/03/03(月) 14:22:13
コンパイラのバグ。
bugzillaに報告しとけば一年ぐらいで直るよ。
488デフォルトの名無しさん:2008/03/03(月) 15:08:08
一年後かよ!
489デフォルトの名無しさん:2008/03/03(月) 19:15:41
あるある
490イーペーコー:2008/03/03(月) 19:20:47
D言語はVB.NETよりできることがすくなと聞いたのですが本当ですか??
491デフォルトの名無しさん:2008/03/03(月) 19:22:36
少なくは無いけど、遠回り。
492デフォルトの名無しさん:2008/03/03(月) 19:43:55
D言語で書くくらいならアセブラで書いたほうがいいと効きました
なにやらアセブラはなんでもできるそうでD言語より高機能だそうです
493デフォルトの名無しさん:2008/03/03(月) 19:45:37
>>480
わー
サンクス
494デフォルトの名無しさん:2008/03/03(月) 21:24:05
>>490
あの膨大なライブラリを誰が書いたかってハナシだな。
キャパシティはあんま変わらん。
495デフォルトの名無しさん:2008/03/03(月) 22:03:40
>>492
アセンブリ言語でガリガリ効率的に書けるなら,確かに他の言語なんていらないなw
496デフォルトの名無しさん:2008/03/03(月) 22:11:42
チューリング完全(ry
497デフォルトの名無しさん:2008/03/03(月) 22:15:39
アセンブリがあればという奴にかぎってアセンブリでまとまったモノを書いた経験がない。
チューリング機械があればという奴にかぎってチューリング機械でプログラミングした経験がない。
498デフォルトの名無しさん:2008/03/03(月) 22:19:12
僕は、ラムダちゃん!
499デフォルトの名無しさん:2008/03/03(月) 22:21:39
>>497
別に限らないと思う。
500デフォルトの名無しさん:2008/03/03(月) 22:30:38
>>497は経験がないのはわかった
501デフォルトの名無しさん:2008/03/03(月) 22:37:07
       ____
     /      \
   /  _ノ  ヽ、_  \
  /  o゚⌒   ⌒゚o  \  また明日から無限に長いテープを前後に動かす仕事が始まるお
  |     (__人__)    |
  \     ` ⌒´     /
502デフォルトの名無しさん:2008/03/03(月) 22:48:01
絶望的な仕事だなぁ
503デフォルトの名無しさん:2008/03/03(月) 22:56:25
チューリングマシンより量子コンピュータの方が出来ることが多いそうですが、
D言語は量子コンピュータ上で動きますか?
504デフォルトの名無しさん:2008/03/03(月) 23:07:26
>>501
その仕事はいつ終わるんですか。
505デフォルトの名無しさん:2008/03/03(月) 23:07:59
量子コンピュータなんてろくにできることないぞ。
506デフォルトの名無しさん:2008/03/03(月) 23:16:48
どっかの研究者が並列実行可能な生体コンピュータ(分子生物学的な)を使って
現在のノイマン型だと非常に時間の掛かる問題(確か年単位オーダー)を解いたそうだが、計算は一瞬で終わっても解を取り出すのに数週間掛かったそうだ。
質的な差は確かに違うしできること、奥の深さの違いもあるだろうけど、現時点では量的な差がそれを打ち消してしまうほど使い物にならない。
例の様な特殊な事例でなければね。
というか量子的な動作を記述する言語ってどんなものになるんだろうな。
D言語は言語使用自体の例外的なものをできるだけ排除して、できるだけ簡素なものに帰納的に表現できるように
工夫がされているはず。
その“帰納的”という性質そのものがノイマン型コンピュータに依存するわけだから、勿論互換性なんてない。
量子コンピュータはその動作を確率的に、並列コンピュータはその動作を並列的つまり動的計画法バリバリに記述するんだろうねきっと。
507デフォルトの名無しさん:2008/03/04(火) 00:29:37
三行で
508デフォルトの名無しさん:2008/03/04(火) 00:52:33
今のプログラムに比して超巨大なステートマシンが
大量に右往左往する量子コンピューティングには
テキストでしこしこ記述する手法では太刀打ち出来ない。
509デフォルトの名無しさん:2008/03/04(火) 07:29:30
量子コンピュータは一応チューリング完全だけど、
NOT, CNOT, CCNOT, SWAP っつー可逆な操作のみを使って計算する、
古典コンピュータとは根本的に異なる原理に基づいた計算になる。
その性質をフルに発揮するには、そもそも古典コンピュータ用の言語は向いていない。
さらには重ね合わせとかあるしね。
510デフォルトの名無しさん:2008/03/04(火) 07:46:48
> D言語は言語使用自体の例外的なものをできるだけ排除して、できるだけ簡素なものに帰納的に表現できるように
> 工夫がされているはず。

正気か?
511デフォルトの名無しさん:2008/03/04(火) 08:42:25
でっていう
512デフォルトの名無しさん:2008/03/04(火) 12:13:58
このスレ、なんか今年入ってからか全然関係ない話題で盛り上がる運命にあるのか?
513デフォルトの名無しさん:2008/03/04(火) 12:36:18
> 全然関係ない話題
運命についての質問とかな
514デフォルトの名無しさん:2008/03/04(火) 12:58:39
これから盛り上がるっていう予言かw
515デフォルトの名無しさん:2008/03/04(火) 20:24:23
DコンパイラをDで記述すれば大いに盛り上がるはず
頑張れ↓
516デフォルトの名無しさん:2008/03/04(火) 20:31:17
2への完全移行とDMD/GDCの互換性を上げるほうが先だろ
517デフォルトの名無しさん:2008/03/04(火) 20:48:27
記述に使用する言語と同じ言語のコンパイラって作って何が楽しいの?
518デフォルトの名無しさん:2008/03/04(火) 20:53:52
>>517
動的コンパイル
519デフォルトの名無しさん:2008/03/04(火) 21:29:36
>>517
そんなこと言ってたらCコンパイラすら作れなくなるな
520デフォルトの名無しさん:2008/03/04(火) 21:30:46
マシン語とかアセンブリ言語とかで作れと?
521デフォルトの名無しさん:2008/03/04(火) 22:03:38
作るのが楽しいんだよきっと
522デフォルトの名無しさん:2008/03/04(火) 22:12:01
でも、そんなもの作る暇あるなら、
何か便利なライブラリでも作って欲しいわ。
523デフォルトの名無しさん:2008/03/04(火) 22:12:58
動的コンパイルできるライブラリ作れるじゃん
524デフォルトの名無しさん:2008/03/04(火) 22:13:36
>>520
でも同じ言語で新しいバージョンのものだったらまだ話は分かるけど、
同じバージョンなんて作っても・・・。
525デフォルトの名無しさん:2008/03/04(火) 22:20:59
その言語がよい言語なら、その言語のコンパイラ自身も
その言語で書かれてる方がいいよね。

移行の過程を無視すれば、だけど。
 > 複雑でデバッグ済みで既に完成しているアプリケーションを
 > わざわざ他言語に 移植することにあまり利点はありません。
 > 新しい Digital Mars のアプリは Dで実装されています。
 http://www.kmonos.net/alang/d/2.0/faq.html#cpp_to_D

>517のような、新しくコンパイラを書き起こす場合は、Dで書くのも
普通に選択肢に入るんじゃない?
「すでにD言語のコンパイラは2つもあるのに、新しく作って何が楽しいの?」
ならともかく、D言語のコンパイラをD言語で書くこと自体はとくにおかしくないでしょ。
526デフォルトの名無しさん:2008/03/04(火) 22:22:10
Streamクラスのseekableなストリームは絶対にreadableなストリーム、と言い切れるのでしょうか。
527デフォルトの名無しさん:2008/03/04(火) 22:30:36
さあてね、どうだか
528デフォルトの名無しさん:2008/03/04(火) 22:38:04
D 3.0からDで作ります。とかならあり得ない話じゃないかな。
529デフォルトの名無しさん:2008/03/05(水) 00:04:22
じゃあ最初のD3.0はD2.xxで作られるわけか
530デフォルトの名無しさん:2008/03/05(水) 00:14:10
コンパイラ作ってる間に仕様が変わって、新しいコンパイラでは自分自身をコンパイルできなくなると。
531デフォルトの名無しさん:2008/03/05(水) 01:03:14
>>526
readableとseekableが分かれているのだから言い切れないんじゃない.
ソースを上から全部読んでないので確証はないけど.
532デフォルトの名無しさん:2008/03/05(水) 21:40:09
そう言えば量子コンピュータって量子テレポの原理を使って理論上は
人間が思ったとおりの動作を自動的にしてくれるんだって?
LL(0) 何世紀後の話になるやら・・・。
533デフォルトの名無しさん:2008/03/05(水) 21:48:37
??
534デフォルトの名無しさん:2008/03/06(木) 05:05:18
LL(0)というのは誤爆です・・・
535デフォルトの名無しさん:2008/03/06(木) 06:33:12
Version()掛けてD2.xで出来上がったD3.0でD3.0を作ってそのD3.0でコンパイルしてみて確認。
536デフォルトの名無しさん:2008/03/07(金) 08:56:40
D言語でデバイスドライバはC並に作れますか?
537デフォルトの名無しさん:2008/03/07(金) 11:53:23
お約束だが「C並」を定義しないと誰も回答できない
538デフォルトの名無しさん:2008/03/07(金) 13:33:59
長時間存在するものをモダンでないGCに投げるのは不安があるところだな。
その辺の工夫をすればかけるのではなかろうか。
539デフォルトの名無しさん:2008/03/07(金) 14:47:19
つまりCでできることは9割がたDでできるのか否かちょいうこと
540デフォルトの名無しさん:2008/03/07(金) 15:03:51
D言語終わったな
541デフォルトの名無しさん:2008/03/07(金) 15:22:35
>>540
ハゲ同
今じゃVisual Basicですら簡単にC++並みのドライバが書けるのにD言語ときたら・・・
542デフォルトの名無しさん:2008/03/07(金) 16:51:32
>>35 のバグ直ったみたいだよ
http://d.puremagic.com/issues/show_bug.cgi?id=1828
> Fixed dmd 1.028 and 2.012 (and thanks for sorting this out)
543デフォルトの名無しさん:2008/03/07(金) 17:32:57
>>542
キタ━━━━━━(゚∀゚)━━━━━━!!!!!!
これで安心してマルチスレッドのコードが書けるわ
544デフォルトの名無しさん:2008/03/07(金) 18:09:49
>>539
アッパーコンパチなんで、やろうと思えばできるはず。効率的かはまた別だが。
まー、ビットフィールド位しかできないことおもいつかん。
アラインもいじれるし。ポインタもいじれるし。

>>541
なに?ドライバ入れるのに.NET入れないといけないの?
フロントエンドじゃなくて?
545デフォルトの名無しさん:2008/03/07(金) 21:35:45
vbでデバイスドライバとな!?

ランタイムも全部sys 凄すぎるけどネタじゃないか
546デフォルトの名無しさん:2008/03/07(金) 21:38:22
>>545
Windows限定なら俺も書いたことがある
仕様が公開されてるキーボードのドライバをvb.netで
547デフォルトの名無しさん:2008/03/07(金) 21:42:17
ubyteの配列をスライスしてuintの配列として解釈するのはマズいですか

auto ub = new ubyte[0x10];
auto ubs = ub[4..11];

uint* ui = cast(uint*)ubs;

要するにバイト列を任意の値型で再解釈するというモノです。


もっと安全な方法があるぜ!とかあったら教えてください
548デフォルトの名無しさん:2008/03/07(金) 22:09:48
エンディアンにさえ気をつければやっていいと思う。
549デフォルトの名無しさん:2008/03/07(金) 22:48:29
>>547
VBの場合リトルエンディアンは静的なデストラクタとして扱われるから気をつけて。
uint* uiじゃなくてfile*uint[ui]の方がいいよ
550デフォルトの名無しさん:2008/03/07(金) 22:56:30
>>549
547じゃないけど、もう少し噛み砕いた説明plz
551549:2008/03/07(金) 23:04:25
つまり、Dの場合はリトルエンディアン(パソコンでプログラムを使う際に使用される16進数の形式のネイティブWinAPI関数)は
静的(ガベージコレクタによって関数がオーバーロードされ変数のスコープからはずれたりするのを防ぐコア関数)
なデストラクタ(使い終わったオブジェクトをユーザーからのイベントパンドラ無しにイベント駆動型のラムダ式)
として扱われると言うこと。
uint* uiにするとβ変換(変数をグローバルなスコープから外し新しいシステム型変数として使うための変換)
が正常に行えなくなるのでfile*uint[ui]にしておいたほうがいいということ
552デフォルトの名無しさん:2008/03/07(金) 23:08:46
すごいバグつぶしっぷりだな・・・
553デフォルトの名無しさん:2008/03/07(金) 23:21:18
普及させるにはやっぱD言語製の優秀なアプリが無いと駄目だろうな
ゲームはあるみたいだが
554547:2008/03/08(土) 00:09:13
>>551
すいません全然意味がわからないです

エンディアンとガベージコレクタに何の関係が?

>file*uint[ui]
??file型のポインタの配列??

>VBの場合
???
555デフォルトの名無しさん:2008/03/08(土) 00:40:40
アプリよりまずライブラリだろ。
そして、ライブラリよりまず言語仕様の安定を・・・。
556デフォルトの名無しさん:2008/03/08(土) 00:52:03
安定なんか糞喰らえだ。
Walterたんの突発的な変更に右往左往するのがD言語だ。
と俺は思っているが少数派だろうなぁ。まぁこんな考えだと一生D言語が流行らんけど
557デフォルトの名無しさん:2008/03/08(土) 00:52:52
まあ、それはそれで楽しいからいいんだけど、
早く実用したいという欲求もあるしなあ。
558デフォルトの名無しさん:2008/03/08(土) 01:26:08
つまり実用的なD言語と実験的なD言語に分離すれば…
ってそれが1.0系列と2.0系列か。
559デフォルトの名無しさん:2008/03/08(土) 01:36:14
2.0系列に入った機能で
ある程度賛否の賛の方が大きい機能を
1.0系列にマージした系列も欲しい所だな。
560デフォルトの名無しさん:2008/03/08(土) 02:11:45
2.012と1.028きてたのね。
dmd_2.012-030608_i386.debってのもあるけどなんだろうこれは。
561デフォルトの名無しさん:2008/03/08(土) 02:14:58
debパッケージなんじゃないの。
562デフォルトの名無しさん:2008/03/08(土) 03:14:57
dmd、リンクのときのメッセージが出なくなってるんだな。
563デフォルトの名無しさん:2008/03/08(土) 06:58:06
>>551を読んで、>>549がデタラメだということはわかった。
564デフォルトの名無しさん:2008/03/08(土) 09:46:55
>>551
×イベントパンドラ
○イベントプロシージャ

×関数のオーバーロード
○関数のオーバーライド
565デフォルトの名無しさん:2008/03/08(土) 09:52:21
>>486のエラーを避けるために
原因のコードを普通のブロックで囲んでも意味無かったので
(){
  原因のコード
}();
こんなことしたらエラーでなくなった
でも顔はぐにゃってなった
566デフォルトの名無しさん:2008/03/08(土) 11:04:33
{ (
   ^ |
{ (
567547:2008/03/08(土) 11:37:37
すいません私の勉強不足でした
ファイル型のポインタも知らなかったなんて・・・
今まで一体何を勉強してきたんだ…
http://www.geocities.jp/tor_park/Dlang/byte.html
568デフォルトの名無しさん:2008/03/08(土) 12:01:12
>>567
なんだこの6章だけデムパで残りはパクリのサイトは...?
569デフォルトの名無しさん:2008/03/08(土) 12:26:47
file*uintってなんですか?
570547:2008/03/08(土) 12:29:42
>>567
騙らないでください
571547 ◆iBVPK4.Aq2 :2008/03/08(土) 13:09:14
これ以上詐称するのであれば酉付けます
572デフォルトの名無しさん:2008/03/08(土) 13:23:33
IDもなしに後からつけるトリップに何の意味があると
573547:2008/03/08(土) 13:37:07
すいません質問はあきらめます
自分で調べてきます

以降の547人は偽認定でお願いします
574デフォルトの名無しさん:2008/03/08(土) 13:43:06
575デフォルトの名無しさん:2008/03/08(土) 13:55:45
>>574
その偽サイト作るのにどれだけ時間掛けたの?
576デフォルトの名無しさん:2008/03/08(土) 13:59:15
すでに時代遅れになっているから、読まないほうがいい
混乱するだけだ
577デフォルトの名無しさん:2008/03/08(土) 14:04:23
自演乙
578デフォルトの名無しさん:2008/03/08(土) 14:10:39
ttp://www.geocities.jp/tor_park/logo.jpg
更新日時 2008年3月8日 10:19:16

ずいぶん新しいね
579デフォルトの名無しさん:2008/03/08(土) 14:12:39
578

暇人
580デフォルトの名無しさん:2008/03/08(土) 14:14:22
Dスレでこんなのを見るとは思わなかった
581デフォルトの名無しさん:2008/03/08(土) 14:15:33
http://www.geocities.jp/tor_park/Dlang/d2.html
「細かい説明は後述するので、この場ではとりあえず文字を表示する方法を試してみましょう。
文字を表示するにはprintgokko命令を使います」

アホか
582デフォルトの名無しさん:2008/03/08(土) 14:16:43
>>578
文章は何年も前から変わってない。
C++だったらそれでもいいけど、Dじゃ駄目。
583デフォルトの名無しさん:2008/03/08(土) 14:16:49
ジョークサイトにしてももうちょっと知性の感じられるジョークをだな
584デフォルトの名無しさん:2008/03/08(土) 14:19:40
構ってもらえてよかったな坊主
585デフォルトの名無しさん:2008/03/08(土) 14:20:47
http://yutori.2ch.net/test/read.cgi/news4vip/1204952244/

   1 名前:以下、名無しにかわりましてVIPがお送りします。[] 投稿日:2008/03/08(土) 13:57:24.68 ID:oVsMTN3J0
     次世代言語”D言語”を使ってプログラミングをしてみよう!
     C++で挫折した君も、プログラミング初心者の君も今日からプログラマーだ!

     D言語入門 http://www.geocities.jp/tor_park/Dlang/d2.html
586デフォルトの名無しさん:2008/03/08(土) 14:26:25
>>582
そのサイト>>567がついさっき作ったんでしょ?、と汲み取ってもらいたかったんだが
文章はWisdomSoftのパクリ
587デフォルトの名無しさん:2008/03/08(土) 14:27:06
おじゃすー
printgokkoとかアホかと・・・
ptって感じで短くして欲しいぐらいだよ
588デフォルトの名無しさん:2008/03/08(土) 14:27:11
   1 名前:以下、名無しにかわりましてVIPがお送りします。[] 投稿日:2008/03/08(土) 13:57:24.68 ID:oVsMTN3J0
     次世代言語”D言語”を使ってプログラミングをしてみよう!
     C++で挫折した君も、プログラミング初心者の君も今日からプログラマーだ!

     D言語入門 http://www.geocities.jp/tor_park/Dlang/d2.html
589 ◆bNGw8Q1jYg :2008/03/08(土) 14:27:59
いつのまにかVIPでこのスレがパートスレ化している件
590デフォルトの名無しさん:2008/03/08(土) 14:30:19
これを面白いと思うセンスが理解できない
591デフォルトの名無しさん:2008/03/08(土) 14:35:24
まあ、547自体が釣りだったということでFA
592デフォルトの名無しさん:2008/03/08(土) 14:38:30
VIPからきますた
593デフォルトの名無しさん:2008/03/08(土) 14:42:09
VIPから(ry ww
594デフォルトの名無しさん:2008/03/08(土) 14:43:28
徹夜までして偽サイト作ったもんだから、引くに引けなくなったのか・・・
595デフォルトの名無しさん:2008/03/08(土) 14:47:27
VIPの方からきますた
596デフォルトの名無しさん:2008/03/08(土) 14:58:05
>>582
釣られてる奴がいる
ワロタ
597デフォルトの名無しさん:2008/03/08(土) 15:41:29
静岡県在住の高校一年生か
なるほどこりゃ痛い
598デフォルトの名無しさん:2008/03/08(土) 16:10:44
2章ひでえ。何がやりたいんだこれ
599デフォルトの名無しさん:2008/03/08(土) 16:11:12
こういうのが沸く程度にはメジャー化したということで
順調に発展できたならば、5年後くらいには
Java vs C# vs D
とかでもできてるに違いない(と信じたい)
600デフォルトの名無しさん:2008/03/08(土) 16:16:06
>>599
逆に5年後、JAVAとC#があるのかどうか、という感じだな。
JAVAはマジで死滅するんじゃないかという危惧と
C#はMSが次の言語出してきたらどうなるかと。
601デフォルトの名無しさん:2008/03/08(土) 16:20:57
MSは"D言語"出すしな
602デフォルトの名無しさん:2008/03/08(土) 16:29:07
mjd?
603デフォルトの名無しさん:2008/03/08(土) 16:31:42
D言語いくつ作られるんだよw
604デフォルトの名無しさん:2008/03/08(土) 16:46:10
>>600
5年後に日本のIT業界がJAVAを捨てられるほど熟練者が増えてるとは思えんがな……
605デフォルトの名無しさん:2008/03/08(土) 16:48:24
2章より引用
>細かい説明は後述するので、この場ではとりあえず文字を表示する方法を試してみましょう。
>文字を表示するにはprintgokko命令を使います

>printgokko ("表示したい文字列");
606デフォルトの名無しさん:2008/03/08(土) 16:49:53
必死に貼らなくてもいいから
607デフォルトの名無しさん:2008/03/08(土) 17:49:57
JAVA無くなって困る人は大勢いそうだけど
C#無くなって困る人は少ない気が
608デフォルトの名無しさん:2008/03/08(土) 18:07:06
俺はCOBOLとDなくなったら死んじゃう。
609デフォルトの名無しさん:2008/03/08(土) 18:34:13
それはぜひ半分死んでくれ
610 ◆bNGw8Q1jYg :2008/03/08(土) 18:40:35
ごめん消しちゃった
今度はもっとちゃんとした教材作るね
611デフォルトの名無しさん:2008/03/08(土) 18:50:39
じゃ俺はDとC++の勢力が入れ替わるのなら100年生きる。
612デフォルトの名無しさん:2008/03/08(土) 19:08:01
在る程度メジャーになった言語は、
衰退することはあっても、完全に無くなることは滅多に無いと思うけどなあ。
613デフォルトの名無しさん:2008/03/08(土) 19:13:39
COBOLもそろそろ死んで欲しいんだけど、あと1世紀は生きるよね。
614デフォルトの名無しさん:2008/03/08(土) 20:18:58
615デフォルトの名無しさん:2008/03/08(土) 20:21:53
もういいよ
616デフォルトの名無しさん:2008/03/08(土) 20:22:03
>>614
そこまでしてかまって欲しいのか・・・
617デフォルトの名無しさん:2008/03/08(土) 20:24:39
なにやってんだろうね
618デフォルトの名無しさん:2008/03/08(土) 20:25:10
つれたw
619デフォルトの名無しさん:2008/03/08(土) 20:25:34
そこら中にマルチしてやがるから通報しときました
620デフォルトの名無しさん:2008/03/08(土) 20:28:59
同一性保持権の侵害で訴えられんようにな
知ったこっちゃねーけど
621デフォルトの名無しさん:2008/03/08(土) 20:30:29
人格権以前に普通の著作権侵害だろ
622デフォルトの名無しさん:2008/03/08(土) 20:30:35
芝ゲーでニコニコから流れてきてるんだろ
623デフォルトの名無しさん:2008/03/08(土) 20:50:42
pythonや なでしこ とか他にもう少しメジャーな言語スレあるのにキチガイ何でDに来るかね
624デフォルトの名無しさん:2008/03/08(土) 20:59:22
Dも有名になったもんだな

あんまり嬉しくないけど
625デフォルトの名無しさん:2008/03/08(土) 21:03:56
ウォルたん「pythonの生産性 + Cの速度 + C++の自由度 = D」
一般的なプログラマー(昔)「Dはこける」
〃(今)「そろそろDもやっておくか」
C++「C++かわいいよC++」
0x「C++が使いやすくなってからD涙目wwwwwwwwwwwwwwwwwwwwwwww」
やねうらお「超素敵!!私の処女あげちゃう!」
626デフォルトの名無しさん:2008/03/08(土) 21:05:34
>>625
やねうらおwwwwwwwww
しかし正直俺あの人居なかったらDに興味持たなかったな。
627デフォルトの名無しさん:2008/03/08(土) 21:30:10
DのGCについての情報が有るページを教えてください。
628デフォルトの名無しさん:2008/03/08(土) 21:33:30
629デフォルトの名無しさん:2008/03/08(土) 21:34:20
俺はやねうらおのおかげでしばらく敬遠してたな・・・ なんか知れば知るほどろくでもないとこが見えてくる人物だから
630デフォルトの名無しさん:2008/03/08(土) 21:43:27
ABAさんの所でD使ってるというのを見て、かなり興味持ったんだが
俺もやねうらおでちょっと敬遠してしまった。
631デフォルトの名無しさん:2008/03/08(土) 22:07:39
>>626
おれも
632デフォルトの名無しさん:2008/03/08(土) 22:11:47
>>625
ウォルたん(昔)「Boost対応めんど。新しい言語つくろ。」
〃(今)「バグ生まれすぎワロタ。」
一般的なプログラマー(昔)「D言語? 何それ?」
〃(今)「D言語? (Sun | Microsoft)が出してたやつ?」
C++「高給なのもC++のおかげ。むしろ皆は感謝すべき。」
0x「やっぱ後方互換と知名度が重要だよな。」
Java「結局ライブラリが全てなんだよね」
やねうらお「C#マンセーwwww」
633デフォルトの名無しさん:2008/03/08(土) 23:29:19
あれ、ここって 真面目な D言語の板じゃなかったっけか……orz
ま、おわったぽいからいいけどさ。

>632
C#かwwwww ってかDFLとかだとほぼC#だしなw
634デフォルトの名無しさん:2008/03/08(土) 23:44:53
C#というか、.NETだね。
Windows Formsはデザインがよく出来てると思う。
実装が悪くてもっさりしてるのがどうしようもないけど
635デフォルトの名無しさん:2008/03/09(日) 08:37:54
636デフォルトの名無しさん:2008/03/09(日) 12:56:46
わなD更新されてる。やった知りたかった情報だし*^^
http://www.kmonos.net/alang/wnd/topics/winapi.ja.html
637636:2008/03/09(日) 12:58:17
ってAPI Bindingの更新だけかよ……orz RSSでとちったorz
638デフォルトの名無しさん:2008/03/09(日) 13:01:12
>>636
そのページどこか変わった?
前見たときから何も変わってないと思うのだけど。
639デフォルトの名無しさん:2008/03/09(日) 13:13:16
>>638
イカれ?
640デフォルトの名無しさん:2008/03/09(日) 13:59:55
最新: 2007/03/07
ってあるが。
641デフォルトの名無しさん:2008/03/09(日) 14:19:37
ちょっと大きめ(最大60MB位)のデータを扱うようなウインドウプログラムを組んだんだけど、
処理するたびに仮想メモリを開放せずに食いつぶすんだがどうにかする手法はないかな。
このままだと他のアプリケーションのメモリをスワップアウトさせてしまう。
タスクマネージャで見てみるとメモリ使用量はウインドウを最小化させると減るみたいなんだけど、
仮想メモリは握ったまま。200MBとかしゃれにならん。
GCの挙動も良くわからないし…。
642デフォルトの名無しさん:2008/03/09(日) 14:31:57
std.c.stdlib.mallocで管理しきれるならそれでどう?
下記の解説の「明示的なクラスインスタンス割り当て」の項参照
ttp://www.kmonos.net/alang/d/2.0/memory.html
643デフォルトの名無しさん:2008/03/09(日) 15:11:12
>>641
>タスクマネージャで見てみるとメモリ使用量はウインドウを最小化させると減るみたいなんだけど、
それページアウトしてるだけだよ。実際には減ってない。
644デフォルトの名無しさん:2008/03/09(日) 15:32:15
>>641
ヤマカンでどこら辺があやしと思う?
GC?ライブラリ?自前?
645デフォルトの名無しさん:2008/03/09(日) 16:21:28
現在の実装では、GCが確保した領域は解放されないとか、誰か書いてた覚えがある。
646デフォルトの名無しさん:2008/03/09(日) 16:37:32
>>641
TangoのGC使うとちょっとはマシになるかも(minimize実装されてる)。
phobosのGCの実装はプログラム終了時以外に確保したメモリを返却しない。
647デフォルトの名無しさん:2008/03/09(日) 16:50:22
>>645
>>646

ということはGCあってもfreeしろってことか。
freeつうかdelete
648647:2008/03/09(日) 17:21:28
つまり、Dの場合はリトルエンディアン(パソコンでプログラムを使う際に使用される16進数の形式のネイティブWinAPI関数)は
静的(ガベージコレクタによって関数がオーバーロードされ変数のスコープからはずれたりするのを防ぐコア関数)
なデストラクタ(使い終わったオブジェクトをユーザーからのイベントパンドラ無しにイベント駆動型のラムダ式)
として扱われると言うこと。
uint* uiにするとβ変換(変数をグローバルなスコープから外し新しいシステム型変数として使うための変換)
が正常に行えなくなるのでfile*uint[ui]にしておいたほうがいいということ
649デフォルトの名無しさん:2008/03/09(日) 17:21:46
>>647
違う
650デフォルトの名無しさん:2008/03/09(日) 17:35:34
>>647
解放する手段は無いってこと。
651デフォルトの名無しさん:2008/03/09(日) 17:49:23
つまりサブプロセスを立ち上げて不要になったら殺すしかいないと。
652デフォルトの名無しさん:2008/03/09(日) 18:01:55
>>647
プロセスとして確保した領域を解放する話と、
各オブジェクトに使っていた領域を解放する話が
マゼコゼになってるぞ。
653デフォルトの名無しさん:2008/03/09(日) 18:06:56
>>652
ごめん、あまり読まずにレスしてた。
穴があったら埋まりたい・・・
654デフォルトの名無しさん:2008/03/09(日) 18:16:51
みんなスルーしててワロス
655デフォルトの名無しさん:2008/03/09(日) 21:00:46
自分で開放するにはmalloc&freeしかないってことでおk?
656デフォルトの名無しさん:2008/03/09(日) 21:21:27
レスどうも。

>>643
そうだったんですか。
最小化されるとページアウトさせるのはOSですよね。

>>644
疑おうと思えば全部と言えます。
ただ、自動で回収されるとなってる以上、malloc,freeを使わなきゃいけないのもおかしい気が。。。

>>645-646
以前同じようなことを聞いたときも同じような回答でした。
確かstd.gcの話だったと思います。
minimizeが動かないと言う結論でした。

>>655
mallocでメモリを確保することは出来ても、freeで開放されません。
657デフォルトの名無しさん:2008/03/09(日) 21:22:56
リリースビルドしてる?
解放されてると思うんだけど
658デフォルトの名無しさん:2008/03/09(日) 21:23:13
いや、freeは解放されるだろ。GC関係ないんだから。
659デフォルトの名無しさん:2008/03/09(日) 21:25:26
メモリが解放されないって事はD言語で作られてるゲームとかどうなってるんだろう
660デフォルトの名無しさん:2008/03/09(日) 21:29:52
import std.stdio; import std.c.stdlib;
void main(){
  writef("malloc ");
  void* p = malloc(104857600);
  writef("ok");
  readln(stdin);
  writef("free ");
  free(p);
  writef("ok");
  readln(stdin);
}

#include <stdlib.h>
#include <stdio.h>
void main(){
void* p;
printf("malloc");
p = malloc(104857600);
printf(" ok\n");
getch();
printf("free");
free(p);
printf(" ok\n");
getch();
}

こんな感じで試してみました。
Cのほうはもちろん開放されましたが、
Dの方は開放されませんでした。
661デフォルトの名無しさん:2008/03/09(日) 21:32:24
>>657
dmd -release main
これで良いんでしょうか?
freeでは開放されませんでした。GCの方はまだ試してません。
DMDのパージョンは1.028です。
662デフォルトの名無しさん:2008/03/09(日) 21:33:47
Dのmalloc&freeはプロセスとしてOSからmalloc&freeしているのではなくて、
Dのプロセスが一括してmallocしてきたメモリプールから小分けしているだけでは。
だからプロセスとしては使用メモリは増加する一方。minimizeしないから。
663デフォルトの名無しさん:2008/03/09(日) 21:45:37
んー、卒研のプログラム書いた時は
newとdeleteでメモリ開放されてた気がするなぁ。
少なくとも増え続けることはなかった。
@Linuxだけど。
664デフォルトの名無しさん:2008/03/09(日) 21:52:22
卒研でD言語か・・・無茶しやがって(AA略
665デフォルトの名無しさん:2008/03/09(日) 23:15:03
メモリの解放をどのような意味で使ってるかよくわからない
666デフォルトの名無しさん:2008/03/09(日) 23:19:50
ガベコレだよ?
667デフォルトの名無しさん:2008/03/09(日) 23:29:25
GCは必要なメモリをOSから確保するが、必要のなくなったメモリをOSに解放することはしていない。
668デフォルトの名無しさん:2008/03/09(日) 23:31:29
C#やC++/CLIと同じ様にOSの提供するメモリ管理機能にメモリ管理を任せてるだけ
669デフォルトの名無しさん:2008/03/09(日) 23:41:44
「メモリの解放」 は何を意味するか

1. デストラクタが呼ばれる。
2. 内部的に free の処理が走る。
3. free したメモリが実際に OS に返される。
670デフォルトの名無しさん:2008/03/09(日) 23:43:07
襲いかかる(笑)
671670:2008/03/09(日) 23:43:29
ごめん誤爆
672デフォルトの名無しさん:2008/03/09(日) 23:43:55
4. 襲いかかる
673デフォルトの名無しさん:2008/03/09(日) 23:48:17
std.c.stdlib.mallocはCのラインタイムライブラリとリンクされるから、
おそらくfreeした領域は可能であれば適当な時期にOSに返還されるはず。

std.gc.mallocはGCの管理領域から割り当てられるから、
phobosの実装だと、freeしても永久にプールされつづける、と思う。

>>663
deleteした領域は、空き領域としてプールされて再利用されるから、
new/deleteの繰り返しで増え続けることはないよ。
674637:2008/03/10(月) 00:02:51
ちょっと付け足しとくと、
> おそらくfreeした領域は可能であれば適当な時期にOSに返還されるはず。
って書いたけど、Windows版DMDの場合は、DMCのsnn.libを使って、
linux版やGDCはglibcを使うと思うから、そこで実装の差が出てくる可能性はある。
675デフォルトの名無しさん:2008/03/10(月) 00:33:17
僕のブログ見てほしいんですけど
http://o.z-z.jp/thbbs.cgi?id=sasanunu&p3=&th=541
676デフォルトの名無しさん:2008/03/10(月) 00:33:49
すぐ返還

import std.stdio, std.loader;
void main() {
 scope ExeModule msvcrt = new ExeModule("msvcrt.dll");
 extern(C) void* function(size_t) malloc;
 extern(C) void function(void*) free;
 malloc = cast(typeof(malloc)) msvcrt.getSymbol("malloc");
 free = cast(typeof(free)) msvcrt.getSymbol("free");
 writef("malloc ");
 int size = 32*1024*1024;
 ubyte* p = cast(ubyte*)malloc(size);
 for( int i = 0; i < size; i++ ) p[i] = 0;
 writef("ok");
 readln(stdin);
 writef("free ");
 free(p);
 writef("ok");
 readln(stdin);
}
677デフォルトの名無しさん:2008/03/10(月) 01:27:12
>>675は危険
678デフォルトの名無しさん:2008/03/10(月) 02:12:20
D言語終了のお知らせ
679デフォルトの名無しさん:2008/03/10(月) 02:19:48
どのD言語?
680デフォルトの名無しさん:2008/03/10(月) 02:20:56
ばかやろう、まだはじまってもいねぇよ
681デフォルトの名無しさん:2008/03/10(月) 02:22:46
さっさと開始してくれ
682デフォルトの名無しさん:2008/03/10(月) 02:24:28
3.0になったら始動する
683デフォルトの名無しさん:2008/03/10(月) 03:33:37
型が同じ連想配列の結合ってできないの?
684デフォルトの名無しさん:2008/03/10(月) 09:53:38
できないね。

キーが重複した場合に左右オペランドのどっちを優先するかって問題があるし、
自分で実装したほうが安心なんじゃない?

K[V] merge(K, V)(K[V] a, K[V] b) {
K[V] c;
foreach(k, v; a) c[k] = v;
foreach(k, v; b) c[k] = v;
return c;
}
685デフォルトの名無しさん:2008/03/10(月) 09:55:18
AAに.dupがなかったことに今更きづいた
686デフォルトの名無しさん:2008/03/10(月) 10:03:03
dup欲しいよねdup
687デフォルトの名無しさん:2008/03/10(月) 17:49:06
tangoでsprintfみたいな文字列の整形が出来るのはどの関数ですか?
688デフォルトの名無しさん:2008/03/10(月) 18:26:39
>>687
tango.text.convert.Sprint かな??
689デフォルトの名無しさん:2008/03/10(月) 18:51:28
>>688
どうもです。C#の文章整形というものははじめて見ましたが、結構使えそうですね。

phobosに比べてclassいっぱい日本語資料ほとんどなしで、
英語の資料もあるには有るけどなれない言語なので情報にたどり着くのが大変です。
690デフォルトの名無しさん:2008/03/10(月) 22:36:00
Tangoはクラス名と関数名だけでだいたい何をするかわかるから、慣れればかなり楽だよ。
細かい挙動は英語読まなきゃいけないけど。
ただ、opCallのオーバーロードがキモイ。それだけ。
691デフォルトの名無しさん:2008/03/10(月) 22:42:33
692デフォルトの名無しさん:2008/03/10(月) 22:43:55
tangoのopCallは本当に不人気だな
693デフォルトの名無しさん:2008/03/11(火) 02:29:18
俺の中ではあれのせいでかなり印章悪いけど他は割と強いのかなあ
694デフォルトの名無しさん:2008/03/12(水) 03:20:02
そろそろgdcも新しいの出して欲しい
695デフォルトの名無しさん:2008/03/12(水) 04:35:54
sf.netのSVNリポジトリからチェックアウトすればいいんじゃね?
今どうなってるのかは俺は知らんが
696デフォルトの名無しさん:2008/03/12(水) 10:28:44
>>694
Subversionリポジトリの方では、1.024と2.008に追従する更新が
9日に来たばかりですね。
http://lists.puremagic.com/pipermail/d.gnu/2008-March/001474.html
697デフォルトの名無しさん:2008/03/12(水) 14:38:12
あまり使わないんで気が付かなかったけど
Tangoだとphobosと違ってmainへの一個目の引数がフルパスにならないんだな。
呼び出しに使ったコマンドそのものになる。

たとえばコマンドプロンプトで
tango使ってdmdでコンパイルしたmain.exeのあるディレクトリをカレントにして
mainと入力して実行すると、第一引数が"main"になる。

windows上での話だけど。
698デフォルトの名無しさん:2008/03/12(水) 14:58:47
TangoはGetCommandLineWで取ってるけど、
phobosはCのargvをそのまま使ってるね。

ということは、phobosはマルチバイト文字でおかしくなる可能性があるのかも。
699デフォルトの名無しさん:2008/03/12(水) 18:13:56
その辺はガイシュツ
700デフォルトの名無しさん:2008/03/12(水) 23:07:06
import tango.io.Console;
import tango.core.Memory;

void main(){
   GC gc;
   Cout("malloc").newline;
   Cin.copyln;
   void* p = gc.malloc(104857600);
   
   Cout("free").newline;
   Cin.copyln;
   gc.free(p);
   
   Cout("finish").newline;
   Cin.copyln;
}

TangoだとGCがしっかり動いてると言うので書いてみた。
やっぱりと言うかなんと言うか、仮想メモリはTangoでも開放されないな。
Cのmallocとは等価じゃないってことか。

Win32API使ってphobosのstd.file.readのような関数を作って30MB位のファイルを読み込んで
それに一文字半角スペースを~で足してscope char[]に読み込みcollectとminimizeをやると言うループを作って
Cout.copylnでウエイトを入れながらまわしてみたけど260MBまで遠慮なくメモリを使うぜ。
多分これが効率的だからそうなってるんだろうけど、collectやminimize使っても制御が出来ないのはなぁ。
701デフォルトの名無しさん:2008/03/12(水) 23:28:12
どっちのGCもcompaction機能もってないし、
GC周りはどうにかしないといけないよなあ。
702デフォルトの名無しさん:2008/03/13(木) 00:11:06
リンカがGCライブラリを切り替えられるようにすればいい。
703デフォルトの名無しさん:2008/03/13(木) 00:40:03
>>700
はずしてるかもだけど、この辺の話?
ttp://d.hatena.ne.jp/NyaRuRu/20080306/p1

ちょっと前に読んだなぁって、思い出した。
704デフォルトの名無しさん:2008/03/13(木) 00:43:28
Windowsのdmcも、即OSに返還されないね。orz

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void main(){
printf("malloc");
void* p = malloc(104857600);
memset( p, 0, 104857600 );
printf(" ok\n");
getch();
printf("free");
free(p);
printf(" ok\n");
getch();
}
705デフォルトの名無しさん:2008/03/13(木) 00:52:06
>>704
てか原因はそこじゃないかな?
706デフォルトの名無しさん:2008/03/13(木) 00:59:57
タスクマネージャのプロセス一覧で見えるメモリ消費量は、
そのプロセスが使ってるメモリ領域を正確に表示した物じゃないらしいので、
freeしたら即減るかっつーとそう言うもんでもないようです。

あとDのメモリ管理ってメモリプールみたいな感じで一度メモリ領域拡張されると縮小されにくい物なんじゃ?
707デフォルトの名無しさん:2008/03/13(木) 01:05:52
708デフォルトの名無しさん:2008/03/13(木) 01:11:25
なあんだ、結局Dのnew&deleteとほぼ同じかもしれないってことかー
709デフォルトの名無しさん:2008/03/13(木) 02:10:28
>707
ほぉ〜勉強になったさんくす
710デフォルトの名無しさん:2008/03/13(木) 07:31:22
>>706
VCのclやgccだとfreeですぐに減ってるので、多分2段落目のとおりだと思う。
これも実装の違いなんだろう。

結局、Cみたいにある程度管理しながらうまいことメモリを使わないといけないのは変わらないわけかな。
711デフォルトの名無しさん:2008/03/13(木) 09:18:41
ガベージコレクタのおかげで、うっかりdelete忘れてプロセス起動中に延々と
メモリを圧迫し続ける心配がないっていう程度ですかねえ。
712デフォルトの名無しさん:2008/03/13(木) 09:50:29
基本的にはDでメモリをOSには返せないってこと?
VC++だかgccだかでDLL作ってそっちのmalloc/free使えばいいのか。
713デフォルトの名無しさん:2008/03/13(木) 10:00:05
自前でHeapAllocすればいいんじゃ
714デフォルトの名無しさん:2008/03/13(木) 13:26:29
返還する目処のある処理を別プロセスにすりゃいいんじゃ?
すりゃいいってほど簡単じゃないけど。
715デフォルトの名無しさん:2008/03/13(木) 21:16:30
プロセスにオブジェクトを渡してオブジェクトを受け取る、とか出来ないから
モジュール化がだいぶしょぼくなるな。

出来ればいいのになー。.NET環境だとそういうのもあるのになー。
OSはメモリもオブジェクトのメタデータも管理しちゃえばいいのに。
716デフォルトの名無しさん:2008/03/13(木) 21:35:02
tangoにシリアライザなかったっけ。
717デフォルトの名無しさん:2008/03/13(木) 22:37:26
>>715
モジュールをDLLとして作れば、Dのオブジェクトを渡したり
GCをプロセス間で共有したりできるみたいよ。
718デフォルトの名無しさん:2008/03/14(金) 10:13:25
マイクロソフトD言語潰す宣言
「既存のD言語のライセンスはもちろん買収するつもりだ」――CEO会長坂田雄太
http://an.to/?microsoft01news
719デフォルトの名無しさん:2008/03/14(金) 10:18:29
>>718
Fxで開いたらrundll32.exe url.dll,TelnetProtocolHandlerとか出てきたが何をするつもりなんだ。
720デフォルトの名無しさん:2008/03/14(金) 10:22:03
>>718
正確に「潰す」とは言ってないんだろ?
だったら問題ないと思うが
721デフォルトの名無しさん:2008/03/14(金) 10:33:20
ブラクラです
722デフォルトの名無しさん:2008/03/14(金) 10:35:46
別にE言語になってもイーっすよ
723デフォルトの名無しさん:2008/03/14(金) 11:24:11
Dって元々Mars言語って名前だったのを、
をるたんの友人がD言語って言い張るもんでいつの間にかDになったんじゃなかったっけ。
MSに名前押さえられても元のMars言語って名乗れば問題ないよね。
724デフォルトの名無しさん:2008/03/14(金) 11:32:39
>723
マスコットキャラかわいそう・・・・・・
725デフォルトの名無しさん:2008/03/14(金) 11:45:40
>>724
あんなゴキブリみたいな顔してるムカつくマスコットなんだから
どこか別の場所に生きる術を見出せるさ。
726デフォルトの名無しさん:2008/03/14(金) 11:54:18
>in パラメタ記憶域クラスを scope const の意味としました
あれ、finalは・・・
727デフォルトの名無しさん:2008/03/14(金) 13:17:30
finalはみんなの心の中で生き続けるよ
728デフォルトの名無しさん:2008/03/14(金) 13:58:12
むしろ「かぶっちゃったけどどうしてもこの名前使いたい」って言って
MSがお金払ってくれたら棚ぼたなのにw
729デフォルトの名無しさん:2008/03/14(金) 15:05:36
>>728
最初からそれ狙いでしょ。
つーか、世の中にD言語って、このD言語以前からも色々あるわけだが。
730デフォルトの名無しさん:2008/03/14(金) 15:27:27
なるほど、D言語と名づけたのは金狙いか
思惑通りMSが金払ってくれるのは、むしろいいことじゃあないか
めでたしめでたし
731デフォルトの名無しさん:2008/03/14(金) 15:57:12
??????????
732デフォルトの名無しさん:2008/03/14(金) 16:05:10
このスレもやたらレベルがさがったな
733デフォルトの名無しさん:2008/03/14(金) 16:12:38
だってD言語だもんな
734デフォルトの名無しさん:2008/03/14(金) 16:36:42
なんかマイクロソフトの"D言語"の話題を何回も蒸し返したがる子がいるのね。
735デフォルトの名無しさん:2008/03/14(金) 18:08:00
MSにあのマスコットキャラ売っちゃえばいいんじゃね?
736デフォルトの名無しさん:2008/03/14(金) 18:36:28
MSならきっと立派に育ててくれる
737デフォルトの名無しさん:2008/03/14(金) 18:53:46
マイクロソフトに期待してる人が結構いるんだね
Linux使ってる俺にとってはどうでもいい話だが
738デフォルトの名無しさん:2008/03/14(金) 19:12:14
M$ が主導しても自分では Windows でしかコンパイラ作らないんだろ?
価値ないよ。
739デフォルトの名無しさん:2008/03/14(金) 20:13:53
そろそろxamlでDFLフォームを作るコンバータをだな
740デフォルトの名無しさん:2008/03/14(金) 20:23:43
WPFのDバインディングとかは使ってみたいよね。

Dから.NETのリフレクション機能をさわるのはできたけど、
CLRのGCとDのGCを上手いこと動かしてリークを防ぐのがめんどい。
741デフォルトの名無しさん:2008/03/14(金) 20:28:30
Iron DなのかD.NETなのかD#なのかが問題だ。
742デフォルトの名無しさん:2008/03/14(金) 20:38:43
どうでもいい
743デフォルトの名無しさん:2008/03/14(金) 22:08:43
D.NET はもうある(正確にはあった)
744デフォルトの名無しさん:2008/03/14(金) 22:23:18
静的に文字列を置換する方法てないですかね

const string foo = "pal = 5;";

class Hoge{
int val;
void DoSomething(){
const string myfoo = static_replace(foo,"p","v");// <-こんなかんじ
mixin(myfoo); // val = 5; に展開して欲しい
}
}
745デフォルトの名無しさん:2008/03/14(金) 22:24:55
F#はもうある。
746デフォルトの名無しさん:2008/03/14(金) 22:33:36
>>737、向こうで噴いた
200 :login:Penguin :sage :2008/03/14(金) 18:53:16 ID:mDbK1QBH
マイクロソフトに期待してる人が結構いるんだね
Linux使ってる俺にとってはどうでもいい話だが

201 :login:Penguin :sage :2008/03/14(金) 18:54:22 ID:mDbK1QBH
↑誤爆
747デフォルトの名無しさん:2008/03/14(金) 22:34:00
>>744
ないんだったら作ればいいんだ。
string static_replace(string text,string from,string to){
    string result;
    while(text.length >= from.length){
        if(text[0..from.length] == from){
            result ~= to;
            text = text[from.length .. $];
        }else{
            result ~= text[0];
            text = text[1..$];
        }
    }
    return result ~ text;
}
あと、const string myfooだとなぜかdmd君は落ちやがったのでstatic付けてみた
const static string myfoo = static_replace(foo,"p","v");
748デフォルトの名無しさん:2008/03/14(金) 22:37:42
CTFEあるからstd.string.replaceでイケるっぽくない?
749デフォルトの名無しさん:2008/03/14(金) 22:45:26
>>748
残念ながらstd.string.replace君の中のstd.string.findはCTFEで対応していない機能(memchrとか)を使ってるんだよね。

個人的にはversion(compileTime)相当のものを処理系が用意するなりなんなりで、
std.stringとかはCTFE時にも動作するように作り直してほしいなあとか思ってたり。
750デフォルトの名無しさん:2008/03/14(金) 22:49:40
pure関数はCTFEされるとかいう風になると思うんだがどうだろう
751744:2008/03/14(金) 22:50:11
>>747
>>748
>>749
ありがとうございます
CTFE・・ 初めて聞く単語だ(実はD言語習いたて)
ググってきます

家の環境にはD言語入れてないのでこれからインスコして試してみます
752デフォルトの名無しさん:2008/03/14(金) 23:01:48
CTFE の条件てどこにかいてありますか?
753デフォルトの名無しさん:2008/03/14(金) 23:05:39
>>752
ソース
754デフォルトの名無しさん:2008/03/14(金) 23:19:52
755デフォルトの名無しさん:2008/03/14(金) 23:32:52
>>754
サンクス!
756デフォルトの名無しさん:2008/03/15(土) 00:23:30
CTFEでwithが使えないってのはどういう理由なんだろう
757737:2008/03/15(土) 00:35:21
>>746
ヽ( ・∀・)人(・∀・ )ノナカーマ
758デフォルトの名無しさん:2008/03/15(土) 04:08:08
>>756
シンボルの検索は兎も角として、ポインタ使えないのにwithが使えてどうするという気が。
759デフォルトの名無しさん:2008/03/15(土) 04:16:15
多くのメンバを持つ構造体にアクセスするときとか、
with(std.stdio)みたいに普段は使わないモジュールを導入するとか
便利だと思うんだけどなあ。

withとポインタが使えないことに何の関係があるのかはよくわからない。
760デフォルトの名無しさん:2008/03/15(土) 17:24:57
MacOSX 10.5 Leoprad でD言語の環境をそろえようと思って
sudo port install gdc
して、簡単な HELLO WORLD つくって test.d で保存して
gdc test.d
したんだけど object.d が見つからんと言われたので、ひとまずインポートパスを指定して

gdc -I "/opt/local/include/d/4.1.2" test.d

ってやったら、

ld: file not found: crt.o

てエラーが出たんだが。。。これってリンカエラーだよね。
crt3.o ってファイルは dmc 関係のフォルダでいくつか見つかったんだけど、
どこでパスを指定するの?

というか、gdc のリンカに dmc のオブジェクトファイル渡してもいいのかな??

761760:2008/03/15(土) 17:26:03
いや、よく見たら gcc のフォルダにも crt3.o がありました
762デフォルトの名無しさん:2008/03/15(土) 17:36:01
file not found: crt.o
なのになんでcrt3.oを探してるの?
763760:2008/03/15(土) 17:53:03
あ、しつれい
ld: file not found: crt3.o
だった
764デフォルトの名無しさん:2008/03/15(土) 19:42:15
Phobosのboxer.dの中に
TypeInfo type() const
{
return cast(TypeInfo)p_type;

こういうメソッドがあるけど、constがメソッド名の後ろにあるのってどんな意味があるんでしょう?
765デフォルトの名無しさん:2008/03/15(土) 19:48:01
それはC++風の書き方で、普通はconst TypeInfo type()と前置する。
constをつけたメンバ関数はconstメンバ関数とみなされて、
thisポインタを経由してオブジェクトの状態を変更しないことが保障される。
766デフォルトの名無しさん:2008/03/15(土) 20:19:41
>>765
なるほど、C++だとこういう風に表記するんですね。
わざわざ後ろにあるので何か特別な意味があるのかと思いました。
有難う御座いました。
767デフォルトの名無しさん:2008/03/16(日) 21:43:32
Tangoについての質問です。
やりたいことは正規表現でstr中のURLをハイパーリンクにすることなんですが、

auto replaced = Regex(r"((?:f|ht)tp://[\w\.$,;:&=?!*~@#\(\)/]*)").replaceAll(str, "<a href=\"$1\">$1</a>");

こういうコードにしてみたら戻り値が無いんですが、perlの

$str =~ s/((?:ht|f)tp\:\/\/[a-zA-Z0-9.$,;:&=?!*~@_\(\)\/#]*)/<a href="$1">$1<\/a>/g;

のようにするにはどうすれば良いのでしょうか。
768デフォルトの名無しさん:2008/03/16(日) 23:19:16
>>767
Tango使ってないけどソース見てみた.
>戻り値が無い
ということはnullということなんだろうけど,
ただ単にその正規表現だと見つけれてないだけな気がする.
ソース見る限りはsearchやってるだけだし.
Phobosのregexp.dの中にURL用の正規表現文字列があるからそれ使ってみるとか.

Phobosのregexp.dだと後方参照しないグループ化は出来なかったと思うんだけど(余り使ってないので自信なし),
TangoのRegexp.dだと出来るのか.
769デフォルトの名無しさん:2008/03/17(月) 01:06:49
>>767
俺もTangoは使ってないんだが、マニュアルを見る限り、
(?:ht|f)の所は(?ht|f)が正しいのではないかと思う。
あと、replaceAllで$1とかは使えないかもしれない。
ソースを見てみると単純に連結していて、$1とかでどうこうという処理はしていないようだから。
770デフォルトの名無しさん:2008/03/17(月) 01:45:32
>>768
searchやってるだけじゃないよ。

>>767
なんとか動いた。 $1とかは置換してくれないみたいだね
固定した文字列との置換なら、delegateのいらない方のreplaceAllでもOK

(?:)は使えないので()を使用する。 phobosのregexpもそうだったはず。

//tango-0.99.5 で新しくなったRegex用
import tango.text.Regex, tango.io.Stdout;
void main() {
char[] s = `hoge http://pc11.2ch.net/ hoge http://www.digitalmars.com/d/ fuga`;
auto re = RegExpT!(char)(`((ht|f)tp\:\/\/[a-zA-Z0-9.$,;:&=?!*~@_\(\)\/#]*)`,`g`);
auto dg = delegate char[] (RegExpT!(char) re) { return `<a href="`~re.match(1)~`">`~re.match(1)~`</a>`; };
char[] result = re.replaceAll(s, dg);
Stdout(result).newline;
}
771デフォルトの名無しさん:2008/03/17(月) 01:57:58
aliasがあるから、わざわざRegExpT使わなくてもいいみたい

import tango.text.Regex, tango.io.Stdout;
void main() {
char[] s = `hoge http://pc11.2ch.net/ hoge http://www.digitalmars.com/d/ fuga`;
char[] result = Regex(`((ht|f)tp\:\/\/[a-zA-Z0-9.$,;:&=?!*~@_\(\)\/#]*)`,`g`).replaceAll(s, (Regex r) { return `<a href="`~r.match(1)~`">`~r.match(1)~`</a>`; } );
Stdout(result).newline;
}
772デフォルトの名無しさん:2008/03/17(月) 07:27:35
>>770-771
どうもです。
そのソースをまるまるコピペして動かしてみたんですが、
object.Exception: Access Violation
となってしまいました。
うーん。
773デフォルトの名無しさん:2008/03/17(月) 14:11:47
>>772
とりあえずTangoを入れて動かしてみたけど
>object.Exception: Access Violation
となるのはStdoutのせいっぽい(俺の環境では).
tango.io.ConsoleのCoutを使ったら,771のソースでちゃんと置換されたのが表示された.
Stdoutでこのエラーになる原因は面倒なので追ってない.
774デフォルトの名無しさん:2008/03/17(月) 16:32:06
tango.text.Regex の compileToD すごいな。
出力されたコードを少し書き換えたらCTFEでも動いた。
CTFEで正規表現使いたい時にいいかも。
単純な処理しかしてないから、
Cやアセンブラに書き換えるのも容易かも。しかし長いw
775デフォルトの名無しさん:2008/03/17(月) 18:21:13
>>772
Stdoutでバグるのは,Regex.dでdebug時にStdout.dをimportしてたから
コンパイル時にdebugオプションをつけたら動くようになった.
といってもdebugなしで普通にimportしてもエラーが出るので,
この辺の原因はよく分からない.
static thisとかの初期化とかで何か問題が発生してるのかも.
力になれなくて申し訳ない.
776デフォルトの名無しさん:2008/03/17(月) 18:54:33
PhobosとTangoが仲良くなりますように(-人-)
777デフォルトの名無しさん:2008/03/17(月) 18:54:47
っTangobos
778デフォルトの名無しさん:2008/03/17(月) 19:25:04
>>773>>775
うーむ、
Stdoutはデバッグで使いたいので、こうなると正規表現でURLを抜き出すのは面倒ですね。


別の手法も思いついたのでそっちで一度試して見ます。
どうもでした。
779デフォルトの名無しさん:2008/03/17(月) 22:50:17
>>778
もういいかもしれないけど,とりあえず追加で書いとく.
Stdoutがどうこうとか書いたけど,自分でもよく分からなくなってきたw
771のソース前提で,とりあえず出力される方法.

・Cout/Cerrを置く
色々試してたら,Cout/Cerrを置くと普通にStdoutでも出力されるようになった.
・Stdout(Stdout);
これを置いても出力された.Stdoutの型も出力されるので使えない.
・Stdout.dと同じことをやる
Stdout = new Print!(char) (new Layout!(char), Cout.stream);
同じことしてるのに効果が違うのはよく分からないんだけど.

どれも根本的な解決策じゃないので応急処置的な感じ.
>>770は動いているようだし,環境も関わってるのかなぁ.
それにしてもStdout(Stdout)がまともに動くのは何故…
780デフォルトの名無しさん:2008/03/18(火) 12:16:11
日本語うめえ
781デフォルトの名無しさん:2008/03/18(火) 12:16:34
誤爆
782デフォルトの名無しさん:2008/03/18(火) 15:57:50
なんかネタないの?
783770:2008/03/18(火) 17:35:48
>>779
こちらでも、dmdでビルドしたものはAccessViolation出ました。
budで、tango-user-dmd.libを使わずにビルドすると正常動作するけど、
使う設定でビルドだと、AccessViolationでした。

tango-user-dmd.libを再makeすれば直るのかな??
784デフォルトの名無しさん:2008/03/18(火) 20:37:12
>>783
budでOKということで,試しにDSSSでビルドしたら普通に動いた.
これくらいは昨日試しておくべきだったorz
770の言うとおり,生成済みライブラリになんらかのバグ(コンパイル状況による?)があるっぽいね.

Tangoのソースからのビルドが英語だらけで挫折.
785デフォルトの名無しさん:2008/03/19(水) 06:46:04
>>782
ソースを落として、dmd.exeとdmc.exeにパスが通っている状態でlib内のbuild-tango.batとかを実行
…だと思うのだけど、再コンパイルできなかったりできてもやっぱりバグったリ…何かがおかしい。
786785:2008/03/19(水) 06:47:12
>>782 じゃなかった… >>784 でした。申し訳ないorz
787デフォルトの名無しさん:2008/03/20(木) 03:37:51
今のところ2.0で動くGUIライブラリってない?
788デフォルトの名無しさん:2008/03/20(木) 11:46:08
wxDの履歴にinvariant string対応とかあるけどどうなんでしょ
789デフォルトの名無しさん:2008/03/20(木) 15:28:54
tangoのDateTimeとかはどこに消えたんですかね・・・
似たようなクラスって何かありますか?
790デフォルトの名無しさん:2008/03/20(木) 19:29:35
tango.time.Timeの中にあるようだけど
791デフォルトの名無しさん:2008/03/20(木) 19:55:15
久しぶりにPoseidon落としてみたが、キーボードショートカットでrun_projectの割り当てが出来るようになってた。
軽いし、やっぱり気軽にプログラミングするにはいいエディタだな。
792デフォルトの名無しさん:2008/03/20(木) 22:22:35
D言語をMac OS Xで始めました。
目的はWin/Linux用のD言語で書かれたコンソールアプリの移植です。
最初に既存のソースコードをXcodeからコンパイルして勉強できる環境を構築しようと思い立ち
いろいろ調べていますが、参考になるサイト等見つかりません。
どなたかMacでその道に足を踏み入れた方はいらっしゃいますか?
793デフォルトの名無しさん:2008/03/20(木) 23:46:49
D1/D2どちらでもいいので
C++のstringstreamみたいなのが欲しいんだけど
ありませんでしたっけ?

>>792
Macのは見かけたことないなー
794デフォルトの名無しさん:2008/03/21(金) 00:02:49
MemoryStreamに書いて、readStringとか。
795デフォルトの名無しさん:2008/03/21(金) 00:24:03
OutBufferに書いて、toBytesとか。

というかOutBufferの存在価値が昔から空気過ぎるんだけど必要なのかこれ。
796デフォルトの名無しさん:2008/03/21(金) 00:27:01
>>794 こうだと何も表示されないんだけど何が足りないのでしょう?
import std.stdio;
import std.stream;
void main(){
Stream ms = new MemoryStream;
ms.writeLine("hello");
string s = ms.readLine().idup;
writefln(s);
}
>>795 OutBufferはいらないよな・・・
797デフォルトの名無しさん:2008/03/21(金) 00:29:54
Streamは読み書きでpositionを共有してるからpositionのリセットが必要。
import std.stdio; 
import std.stream; 
void main(){ 
Stream ms = new MemoryStream; 
ms.writeLine("hello");
ms.position = 0;
string s = ms.readLine().idup; 
writefln(s); 
798デフォルトの名無しさん:2008/03/21(金) 00:30:16
これでできたようです
import std.stdio, std.stream;
void main(){
 Stream ms = new MemoryStream;
 ms.writeLine("hello");
 ms.writeLine("world!");
 string s = ms.toString();
 writefln(s);
}
799デフォルトの名無しさん:2008/03/21(金) 00:31:30
>>797 もしかしてそうじゃないかなと思ってpositionを再設定しようと
思ったんだが 0 を入れればいいのかわからなかったので
発見した toString() を試してみたらいけました
ありがとう
800デフォルトの名無しさん:2008/03/21(金) 00:34:58
>>799
toStringでもOK。
ただ、toStringはread可能,seek可能かによって微妙に動作が変わるから注意な。
801デフォルトの名無しさん:2008/03/21(金) 00:38:38
>>795
std.openrjと同じくらいは役に立つんじゃね?
802デフォルトの名無しさん:2008/03/21(金) 00:47:09
>>790
これは・・・・・

もしかしてまだ作りかけなのかな・・・・
803デフォルトの名無しさん:2008/03/21(金) 00:56:33
壮絶な勘違
804デフォルトの名無しさん:2008/03/21(金) 01:00:49
単に.NETみたいにしたいだけなんじゃ…
805デフォルトの名無しさん:2008/03/21(金) 16:03:44
Poseidonが入力補完出来るようになってる;
どこまで補完できるんだろ。
806デフォルトの名無しさん:2008/03/21(金) 18:20:14
Descentdでdsssを使う場合の設定って
どうやればいいんでしょうか。

External toolsではbuild -gui -clean ${resource_loc}って
いれても上手く動かないんですが。
807デフォルトの名無しさん:2008/03/21(金) 20:03:43
Poseidonの補完だけど、出来たり出来なかったり、どこまで出来るのかわからん。
でもクラスメンバの補完は出来た。
808デフォルトの名無しさん:2008/03/22(土) 13:56:13
enum型に範囲外の値を入れたときに例外出すようなことはできないのかなあ。
809デフォルトの名無しさん:2008/03/22(土) 15:21:17
要素数が多く、しかも値がトビトビだった場合に大変になるな。
810デフォルトの名無しさん:2008/03/22(土) 15:30:15

        ノ L____
       ⌒ \ / \
      / (●) (●)\
     /    (__人__)   \      だからPascalライクな
     |       |::::::|     |      列挙型と集合型を
     \       l;;;;;;l    /l!| !     寄越せって言ってンだよ!
     /     `ー'    \ |i      
   /          ヽ !l ヽi
   (   丶- 、       しE |そ  ドンッ!!
    `ー、_ノ       煤@l、E ノ <
               レY^V^ヽl
811デフォルトの名無しさん:2008/03/22(土) 15:32:41
提案してみたら?
812デフォルトの名無しさん:2008/03/22(土) 15:46:22
Poseidonの手軽さに超きたい
813デフォルトの名無しさん:2008/03/22(土) 15:58:39
Descentの更新がないなぁ・・・
814デフォルトの名無しさん:2008/03/22(土) 17:07:13
>>808
その挙動をデフォルトにするのは無理だし値型の変数への代入に副作用とかまっぴらごめんだが、
テンプレート+traistとかmixinとか使えば全てのenumに対して有効な汎用性の高いもん作れる
815デフォルトの名無しさん:2008/03/22(土) 17:07:28
とりあえずPoseidonはbudじゃなくてrebuildも使えるようにして欲しいね
816デフォルトの名無しさん:2008/03/22(土) 17:18:05
全てのenumに対してではないな
名前付き限定
817デフォルトの名無しさん:2008/03/22(土) 20:46:38
debug 時は assert() になり release 時にはコードの実行文だけ残る verify() マクロみたいなものが欲しいんだが
何か代わりになるような方法はない?
818デフォルトの名無しさん:2008/03/22(土) 23:27:05
void verify(T)(lazy T dg) { debug assert(dg()); else dg(); }
819デフォルトの名無しさん:2008/03/22(土) 23:46:48
>>818
ありがとう。
使わせてもらいます。
820デフォルトの名無しさん:2008/03/22(土) 23:51:26
和訳の更新履歴のdmd 2.012のURLが2.011のになってるね。

>817を見て作ろうとしてみたんだけど、
template verify(T...){
debug{
void verify_(typeof(T) t){ assert(t); }
}else{
alias T[0] verify;
}
}
void main(){
auto o = new class{ bool f(){return false;} };
verify!(o.f, "debug assert");
printf("done\n");
}
って書いたら
Error: need 'this' to access member f
って言われてだめだった。メンバ関数のエイリアスをとっただけなのが
だめなのは分かるけど、これはどうにもならないんだろうか。
821デフォルトの名無しさん:2008/03/23(日) 10:16:40
久々にD言語に手を出してみようと思うんだけど、バージョンが1とか2とか、
ライブラリもphobos使うのかTangoなのか迷うんだけどどの組み合わせがオススメですか?
822デフォルトの名無しさん:2008/03/23(日) 10:41:11
いつのまにかenum定数のaliasが作れなくなってるな
823デフォルトの名無しさん:2008/03/23(日) 10:46:00
すんません。作れますね。
作れなくなったのは以下のパターン

enum Hoge {x, y};
class Foo {
alias Hoge Bar;
alias Bar.x X;
}

定数の評価順が変わったのかな
824デフォルトの名無しさん:2008/03/23(日) 11:12:11
評価順に依存してしまうバグは早々に直して欲しいね

組み合わせは目的による
何か作りたいならD1とphobosが一番ライブラリの選択肢が広い
Tangoに対応してるライブラリも若干存在する(DFLは両方対応)

D2だとライブラリはほぼ全滅だけどフルクロージャとかis式の拡張とか使えるね
最新の機能で遊びたいならD2で決まり
フルスクラッチで書いてなお仕様変更に着いていく気があるならD2でものを作ってもいい
825デフォルトの名無しさん:2008/03/23(日) 15:19:15
>>821
tangoは1にしか入れられない。
1を使うのを決めた上で、命名規則&解説英語が気にならんなら入れてみてもいい。

まあ、オススメを聞かれたらD2なわけだが。
826デフォルトの名無しさん:2008/03/23(日) 16:38:57
みんなで一緒に新バージョンマダー?したいならD2しかないよな。

ところで2.013マダー?
827デフォルトの名無しさん:2008/03/23(日) 17:02:18
828デフォルトの名無しさん:2008/03/24(月) 08:42:23
わ、ほんとだ
829デフォルトの名無しさん:2008/03/24(月) 22:12:10
>>827
古いなあ
830デフォルトの名無しさん:2008/03/24(月) 22:41:12
なんかRubyとかPerlのWWW::Mechanizeみたいな便利なものってないかな?

例え話だけど
OpenPNEで構築されたサイトにログインして、自分や友達が書いたレビューやらなにやらを取得してきたい
みたいなイメージなんだけど
GUIの構築やらEXEでの配布やらがしたいのでRubyやらPerlでやるのはイヤなんだ
助けてくれおまいら
831デフォルトの名無しさん:2008/03/24(月) 22:57:38
そもそもまともな通信ライブラリがない。
832デフォルトの名無しさん:2008/03/24(月) 23:15:01
>>831
よろしく
833デフォルトの名無しさん:2008/03/24(月) 23:36:44
>>830
スレ違いだけど、Rubyならexerbとか使えるんじゃないの?

tangoにはmango由来のHTTPライブラリあるみたいだけど、
そういう便利なのはきいたことないねえ。
834デフォルトの名無しさん:2008/03/24(月) 23:47:16
>>831
あなたが神か

>>833
そもそもexe化して使う言語じゃないしなぁ…
一応Rubyで動くもんは作ったんだけど、やっぱりCかDで書き直したいなぁと思ったのよ

自分でなんとかこしらえるしかないかなぁ
835デフォルトの名無しさん:2008/03/25(火) 00:11:14
OpenPNEとかでログインだったら、
RubyではNet::HTTPとか使えばそれなりのが作れるのだし(Mechanizeに拘らなければ)、
TangoのNetを使ってほぼ同じような形で作れるんじゃない?

TangoのNetパッケージがどこまで使い易いかにもよるだろうけど、
PhobosだとSocketとか使って一からHTTP話すクラスを構築しないと駄目かも。
836デフォルトの名無しさん:2008/03/25(火) 00:35:43
D→C→Ruby
って具合にC経由でRubyを使えないかね
837デフォルトの名無しさん:2008/03/25(火) 02:02:29
ところで、日本語の "あ" の文字って正規表現で "." とマッチするべきだよな?
UTF8だとあやしいけど、UTF16なら…

//@ dmd 1.028
//@ Tango 0.99.5 Jascha
import tango.text.Regex;
void main(){
auto regex = new RegExpT!(wchar)(".");
assert(regex.test("あ"w));
}

これで表明失敗するのおかしいよな?
838デフォルトの名無しさん:2008/03/25(火) 07:35:28
839デフォルトの名無しさん:2008/03/25(火) 13:16:28
英語圏以外は考慮してないのかよ。使えねー。

Regex.d#L4036の decode(input, next_p); 部分も
c = decode(input, next_p); にすべきなんじゃないかな
新Regex.d、まだバグ沢山ありそうだね
840デフォルトの名無しさん:2008/03/25(火) 16:51:22
だれかミックスインの良い例見せてくれないか。
コンパイル時実行可能にするのが難しくてうまく組めないし、組んでも、これならコピペのが分かりやすい、って思うくらい複雑なコードになってしまう。
841デフォルトの名無しさん:2008/03/25(火) 17:04:34
文字列mixinを使ったコード生成の話でいいのかな。
シンボルのmixinならそこそこ使ってるが。
842デフォルトの名無しさん:2008/03/25(火) 17:05:37
std.typeconsのコードとかは?
てか、下手にCTFEで書くよりstd.metastrings.Format+αでどうにかする方が簡単だと思う。
843デフォルトの名無しさん:2008/03/25(火) 17:15:19
>>840
複雑でも再利用できるなら(ry
ってことで正規表現を事前にコードに落としこむとかが良い例。
844デフォルトの名無しさん:2008/03/25(火) 18:46:42
オーバーロードしてる関数のデリゲートってどうなるの?
そのデリゲート自体も引数によって呼び出される関数変わるの?
845デフォルトの名無しさん:2008/03/25(火) 18:47:28
__FILE__と__LINE__を自動付加する例外スローとかどっかでやってた。
結構便利な気がする。やっぱ気分悪くてなかなか使えないが。
846デフォルトの名無しさん:2008/03/25(火) 18:49:45
デリゲートに入れる時点で
引数の同じ奴が選択される。
847デフォルトの名無しさん:2008/03/25(火) 22:08:44
今2系でTangoってどうなの?
TangoでPhobosが公式にリプレースされることってねーのかなー?
848デフォルトの名無しさん:2008/03/25(火) 22:15:01
>>842
metastrings使いやすそうだな。でもtangoにはないみたい?
849デフォルトの名無しさん:2008/03/26(水) 00:24:34
D言語のテストコード書いたり、簡単な実行したりコードさらしたりするにはここへカモン。
http://codepad.org/
コードを書いて実行した時のURLを記録しておけば、
実行結果も一緒にさらす事が出来て幸せです。

850デフォルトの名無しさん:2008/03/26(水) 00:51:35
>>846
デリゲートには型があるからそうなるよね
逆にデリゲートのオーバーロードがしたいなあと思ってちょっと考えたが、
衝突の回避がまた面倒そうだとか思った覚えが。
オーバーロードセットに取り込めるかな?

ところで、デリゲートにデフォルト引数を与えることは可能ですかね。
宣言部でやればいちおうできそうな気もする。
851デフォルトの名無しさん:2008/03/26(水) 01:24:36
>>849
2.0系の新し目の機能を使ったコードは動かんかったけど、
実行せずにコードを単に貼ってURLを得る、というのも出来るみたいね。

ちょっと試すつもりで、表示されてたフォームにコードをコピペして
Just Pasteってボタンを押したら、それでURLができてしまってビビった。
 http://codepad.org/jWRH15Hy
Edit欄を書き換えてPasteボタンを押す度に新しいURLが次々と生成されるっぽい。

けど、
 > By default, pastes will be available for at least 24 hours.
 > Save this paste permanently
って表示を見る限り、放っておけば消えるみたいね。saveとやらは怖くてやってない。

なんにしろ便利そう。空白を&#32;に置換したりせずに済むし。
852デフォルトの名無しさん:2008/03/26(水) 02:25:32
>>848
Tangobosの方使ってみたら?
入ってるみたいだけど
853デフォルトの名無しさん:2008/03/26(水) 12:20:03
void hoge(){}
void hoge(int i){}
auto dg = &hoge;
↑これはどっちになるの?
854デフォルトの名無しさん:2008/03/26(水) 13:14:50
>>853
コンパイルエラー
Error: cannot infer type from overloaded function symbol & hoge
855デフォルトの名無しさん:2008/03/26(水) 13:27:15
デリゲートへのデフォルト引数いけますね。
ちょっと感動。
856デフォルトの名無しさん:2008/03/26(水) 19:46:11
質問いいですか? 引数に'in'を指定した場合↓
void func(in int param){...}

記憶域クラス'in'は'const scope'と等価だと言語仕様の所にも書いてありますし、
typeof(param).stringof とすると、文字列"const(int)"が返ってくるんですけど、
実際、引数paramを書き換えてもコンパイルエラーになってくれません。

void func(const(int) param){...}
こう書き換えるとちゃんとコンパイルエラーになってくれるんですけど、
どうしてでしょうか? dmd v2.012
857デフォルトの名無しさん:2008/03/26(水) 20:08:28
バグじゃね
前からinの挙動はおかしいと言われてたような希ガス
PODの型じゃなくて参照型でも同じなのかな
858856:2008/03/26(水) 20:32:19
>>857
レスありがとうございます。やっぱりバグですかねー。
引数にクラスや動的配列を渡した場合は、うまく機能するみたいです。
859デフォルトの名無しさん:2008/03/27(木) 14:45:38
2.0のPhobosのソースにstd.encodingってのがさりげなく増えてるんだけどこれなんだろう
860デフォルトの名無しさん:2008/03/27(木) 17:04:20
1.0のphobosでstd.zlibやstd.stream系を使うと
呼び出すたびにメモリ使用量が増えて一向に減りません。
(1回の呼び出しで10〜20Mくらいずつ)
なにか開放処理とかいるのでしょうか・・・
861デフォルトの名無しさん:2008/03/27(木) 17:10:57
>>860
641から読むといいよ
862860:2008/03/27(木) 17:51:48
>>861読みました。
「仕様です。」ってことでいいんでしょうか;
863860:2008/03/27(木) 18:35:46
fullCollect()とminimize()も効いてないようなのですが、
Tangoにすれば効きますか?
864デフォルトの名無しさん:2008/03/27(木) 18:42:00
>>863
>>646
お前はどこを読んだの?
865860:2008/03/27(木) 18:47:25
もう一回読んでくる。
3回目だけど
866860:2008/03/27(木) 19:12:14
わけわからんっ。

void[] pln = uncompress(enc);
これをコメントアウトすると増えないが、いれるとここを通るたびに増える。
MemoryStreamなんかを使ってるとこも通るたびに増える。
867デフォルトの名無しさん:2008/03/27(木) 19:17:37
GCてのはメモリが足りなくなった時に初めて動くもんだと思ってたが
868860:2008/03/27(木) 19:55:15
deleteを明示したら一定で止まるようになった。
が、そこで無関係なfirefoxを立ち上げるとえらーが出るまで消費しやがる。
どうなってんだ・・・
869デフォルトの名無しさん:2008/03/27(木) 20:25:02
>>867
Dの場合は他のアプリケーションの領域までスワップアウトさせてくれるよ。
ずーっと起動して何らかの処理をするアプリケーションには向いてないかも。
870デフォルトの名無しさん:2008/03/27(木) 21:46:53
そりゃOSがやってるんだろ
871デフォルトの名無しさん:2008/03/28(金) 05:54:35
ところでもう関数は多値返せるようになった?
872デフォルトの名無しさん:2008/03/28(金) 06:53:56
素直にoutつかえば?
873デフォルトの名無しさん:2008/03/28(金) 08:41:34
構造体を返せば?
874デフォルトの名無しさん:2008/03/28(金) 08:47:26
Tuple使えば?
875デフォルトの名無しさん:2008/03/28(金) 10:00:56
タプルルルー
876デフォルトの名無しさん:2008/03/28(金) 16:40:39
タプル返せるようになったの?
877デフォルトの名無しさん:2008/03/28(金) 17:31:09
std.typeconsのTupleテンプレートで生成する構造体型のことじゃね?
でもTuple!(int, string)ってやっても受け付けてもらえなかった。
878デフォルトの名無しさん:2008/03/28(金) 17:41:40
import std.typecons;

Tuple!(int,double,char[]) func()
{
return tuple(cast(int)19, cast(double)40.6, "abcde".dup);
}

void main()
{
auto val = func();
assert(val._0 == 19);
assert(val._1 == 40.6);
assert(val._2 == "abcde");
}
879デフォルトの名無しさん:2008/03/28(金) 17:44:26
組み込みのタプルで同じこと実装するのは簡単だと思うんだけどなあ。。
名前つきタプルとか使えれば色々あそべそうなのに。
880デフォルトの名無しさん:2008/03/28(金) 19:13:22
shinhさんのところにあるSDLのportは1.0用ですが
2.0用のものはありませんか?
881デフォルトの名無しさん:2008/03/28(金) 19:51:27
htod使えばすぐできるんじゃないかな
882デフォルトの名無しさん:2008/03/28(金) 21:48:02
>>881
じゃあメジャーなのはないんですね
ありがとうございました
883デフォルトの名無しさん:2008/03/28(金) 22:51:27
D言語って、ライセンスはどうなっているの?
商用利用しても問題ない?
884デフォルトの名無しさん:2008/03/28(金) 23:08:06
>>883
dmdのソースはデュアルライセンスだね
http://www.kmonos.net/alang/d/2.0/dcompiler.html
885デフォルトの名無しさん:2008/03/28(金) 23:23:20
どなたかDescent+Ddbgでデバッグ中変数見れてる人いますか?

いたらバージョンおしえて欲しいインですが。
886デフォルトの名無しさん:2008/03/29(土) 00:21:09
コンパイラとリンカの両方に-gつけてるか?
887デフォルトの名無しさん:2008/03/29(土) 01:54:08
すいません。
自分の勘違いでした。
consoleをvariableと同じタブに入れたのが原因みたいです。
エラーでConsoleが反応してると思ったら、
単にVariableを表示するたびにConsoleが反応してただけみたいです。
888デフォルトの名無しさん:2008/03/29(土) 05:27:15
MinGWのGDCで簡単なHello worldコンパイルしようとしたら
C:/MinGW/lib/libgphobos.a(cmain.o):(.text+0x19): undefined reference to `_Dmain'
こんなエラー出るんだけどなんで?
889888:2008/03/29(土) 07:06:00
リンクだけgccに任せたらいけました・・・なんでだろう
890デフォルトの名無しさん:2008/03/29(土) 18:01:06
テキストファイルを読み込んで加工して出力する場合、一番メモリを使わずに済む方法はどんな方法だろう。
作ってるものはread.cgiみたいに2ちゃんねるのdatを読み込んでhtmlに変換するもの。

今はファイルをreadでchar[]に読み込んで加工してchar[][]に加工したデータを順次入れていってjoinで結合してる。
結合するときにデータのコピーがあるのでそこで大きいコピーが有るだけだけど、
大体もとのデータの三倍強のメモリを消費してる。もうすこしへらせないだろうか。

参考までに、
元はchar[]に ~= で結合していくようにしていたんだけど、そのときには6倍程度のメモリを消費していた。
891デフォルトの名無しさん:2008/03/29(土) 18:07:44
加工処理の内容によるだろうけど、メモリ消費だけ考えるなら逐次出力していくようにすれば少なくなるんじゃね?
892デフォルトの名無しさん:2008/03/29(土) 18:30:50
>>891
出力先がネットワーク(http)なので、出来ることなら作成されたデータをそのままメモリ上に配置したいのです。
あまり何度も小分けされたデータを送りたくは無いですし。
893デフォルトの名無しさん:2008/03/29(土) 18:52:10
そこはバッファリング勝手にされたりするんじゃないか
894デフォルトの名無しさん:2008/03/29(土) 19:26:05
>>890
俺はMemoryStreamに適当にreserveしてから、だらだら出力してる。
895デフォルトの名無しさん:2008/03/29(土) 19:30:17
2ちゃんねるのdatだったら、1レスずつ読み込んで加工したものをバッファに書き込んで行けば、
元のデータの三倍強ものメモリを消費することは無いと思うが。
実際にどんなテキストファイルで、どんな加工をするのかが分からんとね。
だが、D言語とどう関係ある?
896890:2008/03/29(土) 20:17:37
レスどうもです。

>>895
そういわれてみれば変だな、と思い、
とりあえず、内部でコピーが起きていそうなところをchar[][]に読み込むように直してみたら2倍程度になりました。
テキストファイルは例えば
http://pc11.2ch.net/tech/dat/1202623572.dat
これを
http://pc11.2ch.net/test/read.cgi/tech/1202623572/
こんな感じのHTMLに変換するものです。

//ここで聞いたのは、言語に結構依存するんじゃないかと思ったからです。
897デフォルトの名無しさん:2008/03/29(土) 21:06:37
そもそもどんな環境で動くプログラムなんだよ
Web鯖でCGIとして動くのかそのプログラムが直接接続を受けるのか
898デフォルトの名無しさん:2008/03/29(土) 21:18:40
>>897
物自体はCGIの処理を組み込んだ簡易的なweb鯖といった感じです。
read.cgiの機能はひとつの関数になっています。
899デフォルトの名無しさん:2008/03/30(日) 08:04:12
結果を全部メモリに積もうと思ったら、
元データと変換後データで3倍弱はいるんじゃねえの。

変換したところからストリーミングするしかないと思うが。
900888:2008/03/30(日) 23:30:46
いろいろ試してたら -ladvapi32 オプションつけたらGDCからのリンクも失敗しなくなりました
ますますなんでだろう・・・
901デフォルトの名無しさん:2008/03/31(月) 15:42:08
__stdcall(wndproc)の中でDのクラスを生成すると落ちるんですが、
これはやっちゃいけないことなんでしょうか。
902デフォルトの名無しさん:2008/03/31(月) 16:06:40
もっと詳しく書けと
903デフォルトの名無しさん:2008/04/01(火) 01:15:50
西海岸が4月になるのは15時間後か
904デフォルトの名無しさん:2008/04/01(火) 02:21:10
いやそこで嘘をつかれても…と思いつつ大いに期待
905デフォルトの名無しさん:2008/04/01(火) 02:26:56
D8.0の登場ですね。わかります。
906デフォルトの名無しさん:2008/04/01(火) 02:40:30
D3000だろ
907デフォルトの名無しさん:2008/04/01(火) 02:57:52
D2系列が嘘だったんです
908デフォルトの名無しさん:2008/04/01(火) 09:36:11
D言語はこれからは後方互換性を維持しながら進化していきます。
909901:2008/04/01(火) 12:15:01
ttp://www.kmonos.net/alang/wnd/topics/winapi.ja.html
ここにある一番したの奴をこぴぺで使ってみたんですが
WndProc関数の中でクラスをnewすると落ちてしまうんです。
910デフォルトの名無しさん:2008/04/01(火) 12:45:12
Dの構造体ってalign(1)を指定したときにパディングがなくなることは保障されてる?
911デフォルトの名無しさん:2008/04/01(火) 14:12:17
>>910
保証されてる。
http://www.digitalmars.com/d/1.0/attribute.html のAlign Attributeのとこ参照。
912デフォルトの名無しさん:2008/04/01(火) 14:21:18
保障ってもしなってなかった場合バグ報告すれば修正されるってこと?
913デフォルトの名無しさん:2008/04/01(火) 14:44:43
うん なってなかったの?
914911:2008/04/01(火) 15:20:07
私は「言語仕様で規定されてる」という意味で保証と書いたよ。
処理系のバグをすぐ修正してもらえるかどうかは別問題。

この辺でバグあるんなら、ぜひ報告してくれ。
ソケットから取ってきたデータをalign(1) な構造体にキャスト、とか時々やるけど
まだ問題おきたことない (gdc 0.24 x86_64)。バグあるんなら教えてほしい。
915デフォルトの名無しさん:2008/04/01(火) 17:08:43
>>911
ありがとう。
いろんな箇所に散らばってて探しづらいね
916デフォルトの名無しさん:2008/04/01(火) 22:55:20
OSXにて、GDCが入ってる場合、CodeBlocks 8.0.2 patch2からビルドできるようになりました。
Xcode用の拡張を書くのがだるいので、これはこれでいいかも。
あとはGDCのSVNから2系対応版を……と思ったら2.008止まり。
コミットするのは大変そうだなあと思ってできない俺ガイル。
917デフォルトの名無しさん:2008/04/02(水) 04:01:04
ちょっと遅いが、
http://dsource.org/projects/tango/forums/topic/451

曰く「Tangoでは、importでより素早いタイピングが可能になるよう、パッケージ名はすべて1文字か2文字にします!」
つまり import tango.io.FilePath; が import ta.io.fp; になる…

曰く「をるたーは、すべてのDのキーワードを1文字にすることに同意した」
つまり class キーワードが c になる…

お茶目すぎるww
918デフォルトの名無しさん:2008/04/02(水) 07:11:39
マジかと思って焦った
919デフォルトの名無しさん:2008/04/02(水) 15:46:35
わろたww
920デフォルトの名無しさん:2008/04/03(木) 00:45:32
is used as a type
ってエラーはどういう意味なんでしょうか。
定義されてないって言われるならわかるんですが。
921デフォルトの名無しさん:2008/04/03(木) 00:51:28
知らんがそのまま読んだら
「そのシンボル名は既に型として使われています」
ってことじゃまいか?
922デフォルトの名無しさん:2008/04/03(木) 01:03:43
ああ、なるほど。
Pointクラス作ってgetter/setterでやりとりしようと思ったんですが
名前そのまま使っちゃ駄目なんですね。
923デフォルトの名無しさん:2008/04/03(木) 01:07:23
どんなコード?
924デフォルトの名無しさん:2008/04/03(木) 01:12:43
class Point
{
int x,y;
}
class Test
{
Point _point;
void Point(Point point)
{
this._point = point;
}
Point Point()
{
return this._point;
}
}
こんな感じです。
925デフォルトの名無しさん:2008/04/03(木) 01:19:50
構文解析上で宣言とかテンプレートの形式になっていて型名が入るべき場所で、
そこにあるシンボルが型として定義されたもののリストに入ってない場合、という感じらしい。
詳しくはフロントエンドのソース(parse.*, mtype.*, statement.*, template.*)でも眺めればいいかと。
俺もちゃんと読んだわけじゃないけど。

典型的にはこんなケース。

1)未定義なシンボルを含む単純な例
Hoge hoge;
Error: identifier 'Hoge' is not defined
Error: Hoge is used as a type

2)型以外の意味で宣言されたシンボルを型として使っている場合
int foo;
class Foo(X : foo);
Error: foo is used as a type
926デフォルトの名無しさん:2008/04/03(木) 01:25:12
>>924
class Point
{
int x,y;
}
class Test
{
.Point _point;
void Point(.Point point)
{
this._point = point;
}
.Point Point()
{
return this._point;
}
}
927デフォルトの名無しさん:2008/04/03(木) 01:28:34
>>924
class Test内で`Point'というシンボルが与えられたとき、
スコープの関係でTest内で定義されたPointという名前の関数が優先されるので、
外側のスコープのPointを示すにはスコープ解決演算子を使う

ttp://codepad.org/xm6Ed4Ae


926とだだかぶりなのは勘弁してくれ
928デフォルトの名無しさん:2008/04/03(木) 01:31:56
>>927
へえ
シンボル名をフルネームで指定すればいいのか
勉強になった
929デフォルトの名無しさん:2008/04/03(木) 01:41:49
codepad綺麗だけどすぐ消えてしまうらしいから
ここのログとしての価値が失われてしまわね?
930デフォルトの名無しさん:2008/04/03(木) 09:55:48
テンポイントにすればいいのか
931デフォルトの名無しさん:2008/04/03(木) 10:45:33
なるほど。シンボルの問題だったんですね。

コンパイルもあっさり通りました。
ありがとうございました。
932デフォルトの名無しさん:2008/04/03(木) 11:14:47
ユニークな文字列作るにはどうしたらええですか?
933デフォルトの名無しさん:2008/04/03(木) 12:51:31
どういう意味でユニーク?
934デフォルトの名無しさん:2008/04/03(木) 16:42:28
芸人のネタ帳にいっぱい書いてありそうだな
935デフォルトの名無しさん:2008/04/03(木) 17:01:01
2系は2.012が最新だけど、
ZeroBUGSの作者さんは「DMD 2.014のテストビルドを受け取った」らしいよ。
http://the-free-meme.blogspot.com/2008/03/final-bugs.html
936デフォルトの名無しさん:2008/04/03(木) 20:11:08
2つ先ぐらいまでのテストビルドがあるのはよくあるが(最近の有名どころでFirefox2と3)、
DMDはどうだか知らんな。
937デフォルトの名無しさん:2008/04/05(土) 00:40:10
更新まだー?
938デフォルトの名無しさん:2008/04/06(日) 06:45:11
phobosのstd.stringがもっぱらstringなのが気になる
wstringが使えるといろいろ便利なのだが。
939デフォルトの名無しさん:2008/04/06(日) 11:20:18
tangoつかえばおk
940デフォルトの名無しさん:2008/04/07(月) 12:21:32
★ 今世紀最大の大祭り!聖火を巡る障害物リレー 日本イベント来たる! ★

【目的】
 街中をオニが駆け巡ります。
 オニは聖火を持って移動します。これを消すのが目的です。

 ただし、今回は参加者が多いため難易度がはね上がりました。
 今回のみ、オニは壁役に守られながら走ります。
 壁役を突破して聖火を消せばゲームクリアとなります。

【ルール】
〜勝ち〜
 オニが持っている聖火を消すとその時点でゲームクリアとなります。
〜負け〜
 オニが若里公園まで逃げ切るとその時点でゲームオーバーとなります。

【日時    】 2008年4月26日(土)8:30スタート
【場所    】 長野県長野市
【ルート地図】 ttp://www.city.nagano.nagano.jp/upload/1/taiiku_lane.pdf
【詳細情報 】 ttp://www.joc.or.jp/beijing/torchrelay/index.html
-------------------------------------------------------------
イギリスで行われたイベントの様子
ttp://jp.youtube.com/watch?v=1-KMVWRFLes
フランスで行われたイベントの様子(1分30秒から)
ttp://jp.youtube.com/watch?v=9mYEtkW2bsw

『2ch大規模OFF会場』
ttp://sports11.2ch.net/test/read.cgi/offmatrix/1207495088/
ttp://sports11.2ch.net/test/read.cgi/offmatrix/1207418064/

『各国の競技結果』
ttp://ja.uncyclopedia.info/wiki/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%A0%E3%83%BB%E8%81%96%E7%81%AB%E3%83%AA%E3%83%AC%E3%83%BC
941デフォルトの名無しさん:2008/04/08(火) 12:09:56
なぜこのスレに・・・?
942デフォルトの名無しさん:2008/04/08(火) 23:48:11
静かだねえ
943デフォルトの名無しさん:2008/04/09(水) 00:38:57
嵐の前の静けさ…ならいいけどねえ。
944デフォルトの名無しさん:2008/04/09(水) 01:13:54
荒らしの前だったらやだな。
945デフォルトの名無しさん:2008/04/09(水) 01:49:30
いつのまにかこんなの来てたんだな。
http://www.digitalmars.com/d/2.0/accu-functional.pdf
946デフォルトの名無しさん:2008/04/09(水) 15:20:54
>>945
とても読み易かった。
流石アンドレタン
947デフォルトの名無しさん:2008/04/10(木) 01:20:43
Pure記憶域クラスを使うとそれによる最適化ができる
                      -- ドキュメントより

確かにD言語のコンパイラが最適化するとはどこにも書いてない


とか言うことになったらがっかりだぜ
948デフォルトの名無しさん:2008/04/10(木) 07:27:40
Cとかの_TマクロってDではこんなん
version (UNICODE)
    wchar[] _T(wchar[] s){ return s; }
else
    char[] _T(char[] s){ return s; }
で大丈夫?
949デフォルトの名無しさん:2008/04/10(木) 07:56:36
>>948
Win32APIに渡すならポインタ返したほうがいいんじゃないか
950デフォルトの名無しさん:2008/04/10(木) 08:07:16
kinaba氏とharu-s氏のところで見たよ
951デフォルトの名無しさん:2008/04/10(木) 08:07:43
あと、wcharはそのままでいいけどcharはUTF-8だから変換しないと。
952デフォルトの名無しさん:2008/04/10(木) 08:22:01
>>945
これ面白いね
成果が楽しみだ
953デフォルトの名無しさん:2008/04/10(木) 18:07:37
複素数型が組み込み型からライブラリ方式に格下げされるって本当?
954デフォルトの名無しさん:2008/04/10(木) 18:45:33
>>953
これかな。
ttp://www.digitalmars.com/d/2.0/phobos/std_complex.html

極座標表現をしたいが言語仕様に追加するのがいや、という発想かと。
個人的にはfortran的range表現の充実を期待したいところだが。
955デフォルトの名無しさん:2008/04/10(木) 21:09:21
これって組み込み型の複素数型が消滅するって意味なのかな?
このモジュール使うと基本型の複素数よりも拡張されたものを使えるって
風にも読めるんだけど・・・
956デフォルトの名無しさん:2008/04/10(木) 22:18:52
組み込みの複素数の利点をあれだけ語っておきながら削除とかちょっとどうかと思う。
957デフォルトの名無しさん:2008/04/10(木) 22:37:07
言語拡張で、組み込み並のことができればいいんじゃまいか
958デフォルトの名無しさん:2008/04/10(木) 22:41:39
言語拡張は最小限なのが理想だからな。
ライブラリに出来る事を言語に組み込むのは無駄。

ただ、複素数は数値計算やってた身としては、
速度的な観点から見て組み込みな方がいいとは思う。
959デフォルトの名無しさん:2008/04/10(木) 22:47:59
0xの取り入れたユーザ定義リテラルはあまりに汚いから、
複素数ぐらいは言語組み込みでなんとかしてほしい。
960デフォルトの名無しさん:2008/04/10(木) 22:54:00
Walterタソ、昔言語仕様をライブラリに分割して個別にimportできるようにすると言ってたような言ってなかったような。
961デフォルトの名無しさん:2008/04/10(木) 23:08:49
言語仕様のインポートかw
おもしろそうだな。
962デフォルトの名無しさん:2008/04/10(木) 23:10:53
Pythonの from __future__ みたいな感じか
963デフォルトの名無しさん:2008/04/10(木) 23:34:34
perlもそんなのあるよね。
use feature 'switch';
964デフォルトの名無しさん:2008/04/10(木) 23:49:23
面白そうだけど実利あるのかな。
965デフォルトの名無しさん:2008/04/10(木) 23:55:42
動的言語なら処理を減らして軽くする効果はあるだろう。
静的言語だと・・・コンパイル時間は減るかも?
966デフォルトの名無しさん:2008/04/10(木) 23:56:41
version(none)の中も構文解析される現状から考えると当分は無理だろう
967デフォルトの名無しさん:2008/04/11(金) 11:14:26
953はこれを見たんだろ?
http://d.hatena.ne.jp/Dubhead/20080410#p1

>>958
上のとこからリンクされてるうぉるたん発言によると、
コンパイラ技術が進んできたから、
複素数を言語組込みで持っておく利点がなくなってきてるってさ。
だから速度的な心配はないんじゃないの。記述がちょっと面倒になるかもしれないけど。
968デフォルトの名無しさん:2008/04/11(金) 11:38:58
面倒って言っても 1.2i が 1.2*I みたいな感じになるだけでしょ。
969デフォルトの名無しさん:2008/04/11(金) 14:14:39
前に複素数が組み込み型でなければいけない理由を書いてたのに
その問題はライブラリにしても実は解決できたっていうのかな
テンプレートとか増えて解決できるようになったのか?
970デフォルトの名無しさん:2008/04/11(金) 14:42:04
creal x = 1 + 1i;
こう書くの気に入っていたんだけどなあ
複素数対応の数学関数周りとか鬱陶しくなりそう
971デフォルトの名無しさん:2008/04/11(金) 15:00:45
ライブラリごとに仕様が違っていたりしたら
どのライブラリパッケージを使うかって話にならね?
数値計算だけのやつはC言語やFortranに戻れってこと?
972デフォルトの名無しさん:2008/04/11(金) 15:07:27
ユーザー定義のリテラル接尾辞が作れるようになったら神

static invariant(Complex) opPostfix("i")(real n) {
 return Complex(0, n);
}
とかできたらちびっちまうぜ

角度をあらわすリテラルでdegを使うかradを使うかで困るときがあるから、
こういう単位系を接尾辞で指定できるとすごくよい。
973デフォルトの名無しさん:2008/04/11(金) 15:30:56
deg(180.0)とrad(pi)でよくね?
974デフォルトの名無しさん:2008/04/11(金) 15:34:52
>>972
class i{
  static invariant(Complex) opCall(real n){
    return Complex(0, n);
  }
}

として、i(10)のシンタックスシュガーとして10iで良くね? lexer/parser分離の問題も無いし。
975デフォルトの名無しさん:2008/04/11(金) 17:30:44
>>973
実際そうやってるけど読みづらいのは確か。

>>974
その方法だとシンボルの衝突が結構面倒そうだというのが私見。
見つけにくいバグの原因になりやすいかと思う。
976デフォルトの名無しさん:2008/04/11(金) 17:53:19
独自の後置演算子が定義できれば
180.0 deg
てな感じにできるかな。
977デフォルトの名無しさん:2008/04/11(金) 18:08:36
>>975
オーバーロードセットもあるし、シンボル衝突は問題ない気ガス。
978デフォルトの名無しさん:2008/04/11(金) 20:34:30
次スレテンプレ変更点は>>4
【Java/C/PHP/Perl/Ruby/Python/TeX】Eclipse M22
http://pc11.2ch.net/test/read.cgi/tech/1168166588/

Eclipse統合M24【Java/C/PHP/Ruby/Python/Perl】
http://pc11.2ch.net/test/read.cgi/tech/1200918324/
に差し替えです。
979デフォルトの名無しさん:2008/04/11(金) 21:26:05
>>976
deg,radが予約語になっちゃうのも如何な物かと
980デフォルトの名無しさん:2008/04/11(金) 22:22:58
予約語にはならないでしょ。よく考えなよ
981デフォルトの名無しさん:2008/04/11(金) 22:54:37
ユーザ定義リテラルがまともに使えれば
C++の言う「intがふるまう様にすれ」が完全に実践できるな
982デフォルトの名無しさん:2008/04/11(金) 22:59:40
ユーザ定義のリテラルが使える既存の言語ってある?
983デフォルトの名無しさん:2008/04/11(金) 23:57:00
言語仕様を好き勝手拡張できるようになると、コードの可読性がすんごいことになりそうで恐い。
今でも既にmixin周りとか、コード文字列の断片が入り乱れて大変なのに。
984デフォルトの名無しさん:2008/04/13(日) 00:37:13
D2.013が出た夢を見た。
ニヤニヤしながら新しく出たバグをつぶしている俺がいた。
俺はマゾかもしれん。
985デフォルトの名無しさん:2008/04/13(日) 14:07:08
>>984
どんなバグだったよ
986デフォルトの名無しさん:2008/04/13(日) 20:13:22
仕様がかわって、コンパイルエラーがでまくってるのを
修正する気持ちよさとみた
987デフォルトの名無しさん:2008/04/13(日) 20:14:59
1.0のソースを2.0でコンパイルですね
わかります
988デフォルトの名無しさん:2008/04/14(月) 12:02:46
>>984-987
よう、俺

そろそろ次スレか
989デフォルトの名無しさん:2008/04/14(月) 15:18:25
990デフォルトの名無しさん:2008/04/14(月) 20:16:54
991デフォルトの名無しさん:2008/04/14(月) 20:22:31
Dおつ
992デフォルトの名無しさん:2008/04/14(月) 20:29:51
static乙
993デフォルトの名無しさん:2008/04/14(月) 22:02:44
_2ch[120262357][989].otsu();
994デフォルトの名無しさん:2008/04/14(月) 22:09:13
lazy乙
995デフォルトの名無しさん
auto スレ立て = 乙();