D言語 Part17at TECH
D言語 Part17 - 暇つぶし2ch1:デフォルトの名無しさん
08/02/10 15:06:12
プログラミング言語 D (D Programming Language) について語るスレッドです。
過去スレは >>2

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

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

■参考URL
URLリンク(f17.aaa.livedoor.jp) (D言語研究)
URLリンク(dsource.org) (dsource)
URLリンク(tinyurl.com) (C/C++に疲れた人のD言語)
URLリンク(www.kmonos.net) (わかったつもりになるD言語)
URLリンク(shinh.skr.jp) (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか)
URLリンク(shoo.s20.xrea.com) (D言語とTangoの入門講座)
URLリンク(www.nicovideo.jp) (D言語で作られた芝ゲー niconico動画)

■ IDE
URLリンク(dronten.googlepages.com) (DSciTE)
URLリンク(forums.codeblocks.org) (Code::Blocks)
URLリンク(www.dprogramming.com) (Entice Designer)
URLリンク(www.dsource.org) (Descent)
URLリンク(www.dsource.org) (Poseidon)

2:デフォルトの名無しさん
08/02/10 15:07:24
■過去スレ
Part16 スレリンク(tech板)
Part15 スレリンク(tech板)
Part14 スレリンク(tech板)
Part13 スレリンク(tech板)
Part12 スレリンク(tech板)
Part11 スレリンク(tech板)
Part10 スレリンク(tech板)
Part 9 スレリンク(tech板)
Part 8 スレリンク(tech板)
Part 7 スレリンク(tech板)
Part 6 スレリンク(tech板)


3:デフォルトの名無しさん
08/02/10 15:07:51
■ 過去スレ2
Part 5 スレリンク(tech板)
Part 4 スレリンク(tech板)
Part 3 スレリンク(tech板)
Part 2 URLリンク(f3.aaacafe.ne.jp)
Part 1 URLリンク(pc5.2ch.net)

4:デフォルトの名無しさん
08/02/10 15:09:00
■関連スレ

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

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

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

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

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

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

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

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

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

5:デフォルトの名無しさん
08/02/10 15:13:29
>>1
乙!!

6:デフォルトの名無しさん
08/02/10 16:03:19


7:デフォルトの名無しさん
08/02/10 16:06:04
うは乙ww
めちゃめちゃ補完されてるな
ABA Gamesが入ってないのが不思議なくらいだ

8:デフォルトの名無しさん
08/02/10 17:01:50
>>1
芝のゲーム面白いね。俺はちょっと作れない。待つのがだめなんで。

>>7
最近はC#+XNAいってるぽい。

9:デフォルトの名無しさん
08/02/10 17:12:56
_2ch[1202623572][1].otsu

10:デフォルトの名無しさん
08/02/10 17:22:31
_2ch.write(["board_id": "tech",
               "thread_id": "1202623572",
               "content": ">>1乙",
               "mail": "sage"]);

11:デフォルトの名無しさん
08/02/10 19:31:23
>>前スレ969
今はそんな泥臭いことしなくてもchar[]とかはscanされないよ
Chamgelog: D 1.001: 型情報を使う GC 参照
URLリンク(www.kmonos.net)

あとそのページは想像で書かれたと思しき間違いが多くてあまり当てにならない。
たとえば当時std.gc.disable()は実装が空だったので対策にならない、とかね。
GC知りたきゃソース嫁(正直ソレもどうかと思うが)


12:デフォルトの名無しさん
08/02/10 21:30:50
D言語終了のおしらせときまして、久々に飛んできました。
Microsoftは他をつぶすのは本当に得意ですね・・・

>>1
芝ゲー入れて、ABA games入れないとかどんだけwww

13:デフォルトの名無しさん
08/02/10 21:59:26
>>11
GCは小ざかしいテクニック使わずにハンズフリーであるべきだよなあ。
C++風に完全に自分で管理するバージョンとか、
昨年のD言語フォーラムの例にあったフリーリスト使いまわし(配列のスライス返しとかで非常にうまくいくようで)とか、
いろいろあってもいいと思うけどね。

14:デフォルトの名無しさん
08/02/10 22:36:41
必要性を感じないから誰も作ってないだけじゃないかね。
phobosのGC部分をすっかり入れ替えてしまえば、何とでもなる筈だけど。

15:デフォルトの名無しさん
08/02/10 22:56:47
ごく少数のプログラムで各自持ってきたGCが使われるだけなのと、
ほぼすべてのプログラムで処理系お仕着せGCのみ自動的に使われるのと、
どっちが現実的にマシになるか、って判断をするとして
後者を選んだのがDだ、ってことだね。

GC停止できるしmalloc類も使えるしnewのオーバーライドできるしautoもあるし、
で実用上も問題ない感じか。

16:デフォルトの名無しさん
08/02/10 23:05:33
一時代を支えたセコイ技術をいつまでも信奉してしまうのは要素を変えながら度々繰り返されてきたことだからねぇ。

17:デフォルトの名無しさん
08/02/11 01:15:14
2.011がまだウォルタソの脳内にとどまっているので
おまいらは話題がないのですね

18:デフォルトの名無しさん
08/02/11 01:50:45
てーかD言語とDMDってをるたんが一人で開発してるの?

19:デフォルトの名無しさん
08/02/11 09:09:41
芝は最近見つけたから記憶にあたらしかった。
ABAは……ごめんなさい、すっかりわすれてたorz

20:デフォルトの名無しさん
08/02/11 11:44:11
もうコンパイル通らないよね、たぶん。

21:デフォルトの名無しさん
08/02/11 11:52:19
テキストファイルから最後の50行だけを抜き出す方法で一番オーバーヘッドが少ない方法ってなんだろう。
今はstd.file.readでいったんファイルを全部読み込んで改行文字の個数を調べているが、
もう少し良い方法がないものか。

22:デフォルトの名無しさん
08/02/11 12:15:49
全部読み込むのは明らかに無駄だろう。
少しずつ読み込んで改行数えればいい。

23:デフォルトの名無しさん
08/02/11 12:17:47
リングバッファに突っ込むとか

24:デフォルトの名無しさん
08/02/11 12:18:08
一気に末尾まで移動して逆に辿っていくとかは?

25:デフォルトの名無しさん
08/02/11 13:24:27
一行の文字数を見積もっておおよそ50行分を末尾から読み込み
足りなければどんどん前に進んでいけばおkっていうかD関係ねえwww

26:デフォルトの名無しさん
08/02/11 15:31:08
ところで、
version(Tango) { } else {
}
を、
version(!Tango) {
}
とか書けるようにならないかなあ。

27:デフォルトの名無しさん
08/02/11 15:40:56
できるならversion_notとかになりそう

28:デフォルトの名無しさん
08/02/11 18:35:42
だれか2007/02/17あたりにこのスレに貼られてた
std/thread.dの修正ファイル持ってない?

29:デフォルトの名無しさん
08/02/11 19:40:02
>>28
URLリンク(f17.aaa.livedoor.jp)
のバグを修正したものらしいけど、既にバグ修正終わってるよ。
URLリンク(d.puremagic.com)
> Fixed dmd 1.023 and 2.007

30:デフォルトの名無しさん
08/02/11 21:36:26
>>29
ほんとだ
で、ちょっといろいろテストしてみたんだが新しいバグを見つけた
Thread.start()内の
state = TS.RUNNING;
hdl = _beginthreadex(null, cast(uint)stacksize, &threadstart, cast(void*)this, 0, &id);


31:30
08/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:デフォルトの名無しさん
08/02/12 00:02:53
それ以前にWindows版の std.thread はスレッドハンドルを CloseHandle してないからな。

生成可能なスレッド数も4000までなんて制限ありそうなつくりっぽかったし。
std.thread 見て tango 使う決心した。

33:32
08/02/12 00:13:56
ソース見たら同時に実行可能なスレッド数が1024までだった。


34:デフォルトの名無しさん
08/02/12 00:50:05
>>30
29を見ると、修正パッチが投稿されるまで、をるたん11ヶ月もバグ放置してる。
こちらから修正パッチ投稿しないと、なおしてくれないのかも

35:30
08/02/12 00:57:35
あともう一個、waitでタイムアウトになったスレッドのstateがFINISHになってしまい、
GCでpauseAllが呼ばれてもそのスレッドが停止されないままGCが実行されてしまう
というわけで誰か英語できる人パッチ投稿してもらえないだろうか
URLリンク(www.csync.net)
Linuxのほうは良くわからないので弄ってない

36:デフォルトの名無しさん
08/02/12 10:06:30
>>35
投げてきた URLリンク(d.puremagic.com)

37:デフォルトの名無しさん
08/02/12 11:18:50
>>36
30じゃないけど、テラ乙
あといつもお世話になってます

38:デフォルトの名無しさん
08/02/12 11:36:16
URLリンク(www.asahi-net.or.jp) (ABA Games)

だれか貼れよw
XNAいじってんだな

39:30
08/02/12 11:39:51
>>36
ありがとうございます
英語勉強しとこうλ....

40:デフォルトの名無しさん
08/02/12 13:46:46
>>39
英語って文法知ってるだけじゃ書けないよね。
さらにプログラムの話になってくると普通にはない用語とか言い回しとかあるし、どこで勉強すればいいのやら;

41:デフォルトの名無しさん
08/02/12 14:15:58
>>40
それこそ、DのニュースグループやらBugzillaやらを毎日読んでみればいいんじゃね?
digitalmars.D.announce辺りなら流量もそんな多くないし、
ほとんど "すげー" とか "乙" だけみたいな短いレスが多いから、
楽に読み始められると思う。

42:デフォルトの名無しさん
08/02/12 14:31:19
インターネットで良く使われる英語の略語
URLリンク(kb.iu.edu)
Virtual Entity of Relevant Acronyms
URLリンク(olympus.het.brown.edu)(vera)Top
学校では教えてくれないバッドノウハウ英語
URLリンク(0xcc.net)
用語集
URLリンク(www.kmonos.net)

43:デフォルトの名無しさん
08/02/12 14:48:31
学術論文とか技術英語のほうが単純な構文で楽なんだけどね

44:デフォルトの名無しさん
08/02/12 15:02:03
「楽なんだけど」……続きがあるわけだ。

45:デフォルトの名無しさん
08/02/12 15:29:53
Changelogのための英文テンプレート集
URLリンク(d.hatena.ne.jp)
Using Bugzilla
URLリンク(www.bugzilla.org)

46:デフォルトの名無しさん
08/02/12 16:18:59
phobosをどっかのレポジトリに入れてもらって
みんなで気楽に修正できるようにならんかなー
をるたんはコンパイラで忙しいみたいだし、
みんなでやればphobosの完成度も飛躍的に向上すると思うんだが

47:デフォルトの名無しさん
08/02/12 16:19:06
>>43 禿げ同
そっちの方が断然楽
短い口語的な英語はノリが分からなさ過ぎる

48:デフォルトの名無しさん
08/02/12 16:26:53
>>46
公式だったかは忘れた。
URLリンク(dsource.org)

49:デフォルトの名無しさん
08/02/12 16:29:09
今のphobosはSVNで管理されてるわけだが
たまにウォルターとアンドレイ以外の名前でコミットされてるよね
あれのメンテナになるには直接掛け合わないといかんのかね

50:デフォルトの名無しさん
08/02/12 16:50:07
synchronized {}とsynchronized (o) {}って何が違うの?

51:デフォルトの名無しさん
08/02/12 16:50:18
>>49
48のページの Login → Register で登録して、ログインするのかな?

52:デフォルトの名無しさん
08/02/12 17:10:12
>>50
URLリンク(www.kmonos.net)
oが同じもの同士は同時実行されないんじゃないの?

53:デフォルトの名無しさん
08/02/12 17:18:01
>>50
synchronized {} == synchronized(this){}

54:デフォルトの名無しさん
08/02/12 17:37:26
>>53
それは間違いだろう
synchronizedだけだとそのスコープ内のみ保護される

55:53
08/02/12 17:58:33
あーそうか。その通りだ。スマソ

56:デフォルトの名無しさん
08/02/12 18:31:46
>>50
・全国で同時に一人だけ、貯金を引き出せる。
・全国で同時に一人だけ、同じ口座番号から貯金を引き出せる。
この2つ、待ち時間がどう違うかを考える。

57:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/12 22:37:13
CTFEで文字列を処理してmixinすればいいだけじゃないの?

59:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/12 23:32:40
scopeの効能ってアクセス保護だけ?

61:デフォルトの名無しさん
08/02/12 23:37:12
いくらGCが働くと言っても80MBもメモリを使ってるのを見ると精神衛生上良くないな。
なんとかならんもんか。

62:デフォルトの名無しさん
08/02/12 23:48:18
>>60
どのscopeのことだい?
変数に指定するscopeストレージクラスなら、変数の書き換えを抑制し、
変数がスコープアウトするときに、変数の指すオブジェクトをdeleteする。

仕様上は。

63:デフォルトの名無しさん
08/02/12 23:53:02
>>61
定期的にGC走らせてやればいいんじゃないか?
GUIアプリケーションならユーザの入力がないときとか。

64:デフォルトの名無しさん
08/02/13 00:04:53
>>63
fullCollect();
これを使えば良いのかな?
これを処理する関数が終わったところに書いてみたけどタスクマネージャーから見てわかるような開放はしてくれなかった。

65:デフォルトの名無しさん
08/02/13 00:20:10
std.gcのなかで
>>void minimize(); 
>>物理メモリの使用量を最小にします。 
って言うの見つけた。試してないけど。

66:デフォルトの名無しさん
08/02/13 00:23:33
>>64
fullCollectの後minimizeかな。phobosのGCはこれ実装してないけど。
tangoのほうはつい数日前に実装されたっぽい。

67:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/13 00:27:03
>>64
fullCollect()でもminimize()でも一度増えたメモリ使用量は減ってない気がするな
これってこういうもんなの?それともバグか何か?
>>66
と思ったら実装されてないのかよ。。。

69:デフォルトの名無しさん
08/02/13 00:33:16
>>66
うわっ
実装されてなかったのか…
どおりで何も起こらないわけだ。

70:デフォルトの名無しさん
08/02/13 00:35:02
>>67
んー、それはリンカエラーだからscopeとは関係なさそうだ

WS2_32.LIBリンクするのやめてみたら。

71:デフォルトの名無しさん
08/02/13 00:39:00
fullCollect()は参照されてないもののデストラクタを呼ぶ
minimize()は参照されてないところのメモリを開放する
って感じか。でminimize()は未実装と

72:デフォルトの名無しさん
08/02/13 00:42:58
>>70
リンクしないとプログラム動きません。。。

73:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/13 00:54:36
>>73
それずいぶん前にもここで見た気がするんだが、まだ直ってないのか

75:デフォルトの名無しさん
08/02/13 00:55:53
>>73
そういうもの。スコープの最後でdestructorを呼ぶから。

76:デフォルトの名無しさん
08/02/13 01:01:57
>>74
コードが不正だって結論じゃなかったっけ……と思ったけど

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

なんて書いてあるな。緩和された? ……これは緩和せんでもいいような。

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

scope A a;
a = new A("a");
a = new A("b");
こんな感じにわけると"b"の方のデストラクタがスコープ外れたときに呼ばれて
""

78:77
08/02/13 01:05:57
途中で送ってしもうた
scope A a;
a = new A("a");
a = new A("b");
こんな感じにわけると"b"の方のデストラクタがスコープ外れたときに呼ばれて
"a"のほうはプログラム終了時にちゃんとデストラクタが呼ばれた


79:デフォルトの名無しさん
08/02/13 01:07:14
>>75
a = null; を無くすと、デストラクタが呼ばれるんだが・・・。

80:デフォルトの名無しさん
08/02/13 01:08:40
>>76
なるほど そしたらコンパイルエラー出してくれればいいのにな

81:デフォルトの名無しさん
08/02/13 01:10:54
>>79
?

82:デフォルトの名無しさん
08/02/13 01:16:27
デストラクタが呼ばれないことがあるのはきついな。


83:デフォルトの名無しさん
08/02/13 01:26:27
どう考えてもコンパイラのバグだろ。

84:デフォルトの名無しさん
08/02/13 01:49:03
>>76
緩和されてなくて、scope変数の中身を変えるコードの時点で未定義動作だろね。
エラーが出ないのは前からなんだけど、scopeはfinal扱いにすりゃいいんじゃないかと思う。

…って、もしかして変数宣言のfinal属性って仕様は消滅してる?
constな伝播性のない定数的扱いで使いがありそうだったのに。
どっかで話があった、「宣言時やコンストラクタ以降でも構わない、
一度だけ代入する変数」って概念を与える属性として復活してくれりゃいいなあ。

85:デフォルトの名無しさん
08/02/13 01:51:50
finalはなかった事になりました。

86:デフォルトの名無しさん
08/02/13 02:38:51
finalは最初からなかったです

87:デフォルトの名無しさん
08/02/13 02:41:57
finalは生きてるよ、enumの心の中で。

88:デフォルトの名無しさん
08/02/13 02:42:15
え?いつの間に final なくなったの?
それ2.0の話?

89:デフォルトの名無しさん
08/02/13 02:57:09
TangoのConduitsの辺りを読んでみようと思って久しぶりにマニュアル見てみたら
URLリンク(www.dsource.org)

これ分散コンピューティング用のライブラリか?
URLリンク(www.dsource.org)
なんかすっげーのを入れる気なんだな

90:デフォルトの名無しさん
08/02/13 08:21:30
まじか

91:デフォルトの名無しさん
08/02/13 10:51:47
>>71
phobosには実装されないんでしょうか…。

92:デフォルトの名無しさん
08/02/13 11:02:14
なんかphobosの整備はをるたんの中で優先度最低っぽいから……

93:デフォルトの名無しさん
08/02/13 14:35:56
TangoがDの命名規約守ってくれればをるたんもTango任すんじゃないのかなあ

94:デフォルトの名無しさん
08/02/13 22:36:47
std.randomがクラスじゃなくて構造体で実装されてるのはなんで?

95:デフォルトの名無しさん
08/02/13 22:38:45
値型で十分だからじゃないかな

96:デフォルトの名無しさん
08/02/13 22:39:06
軽いからでしょ。

97:デフォルトの名無しさん
08/02/13 22:51:12
早いw いや、十分だし実際値型で実装できてるんだけども。
UniformDistributionとかで使うから各エンジンのインターフェースは揃えてるわけで、こういうのって継承でやるのが普通だよね?
まあ軽いのかもしれないが、わざわざ値型を選択する理由になるのかなーとか思っていた。結構違うもんなのかね。サンクス。

98:デフォルトの名無しさん
08/02/13 22:52:23
乱数は速度が要求される事もあるし、
仮想関数の呼び出しコストを嫌ったんじゃね。

99:デフォルトの名無しさん
08/02/13 23:01:52
たかだか関数一つでクラス化されたら、使うのが面倒くさくなる。。。

100:デフォルトの名無しさん
08/02/13 23:39:27
面倒くささは一緒だろう。

101:デフォルトの名無しさん
08/02/14 00:18:56
構造体にインターフェースを適用させようぜ的な話があった気がするんだけど、どこで沸いた話だっけ。

102:デフォルトの名無しさん
08/02/14 00:23:10
カンファレンスのスライドじゃなかったか

103:デフォルトの名無しさん
08/02/14 00:39:32
もう関数はタプル返せるようになった?

104:デフォルトの名無しさん
08/02/14 08:52:09
返せないときがあったの?

105:デフォルトの名無しさん
08/02/14 08:59:35
104は未来人か何かか

106:デフォルトの名無しさん
08/02/14 09:24:03
104はあたしの所に来なさい、以上。

107:デフォルトの名無しさん
08/02/14 12:55:09
"Learn to Tango with D" がアマゾンから届いた。
索引は欲しかったな...


108:104
08/02/14 13:07:03
Tuple!(uint,"w", uint,"h") size();

こういうことじゃなくて?なんか勘違いしてたらごめん

109:デフォルトの名無しさん
08/02/14 13:52:15
std.typeconsのタプルという名前の汎用構造体型じゃなくて、
template Tuple(T...){ alias T Tuple; }の方のタプルだよ。

110:デフォルトの名無しさん
08/02/14 14:49:27
typeconsなんてあったんだ今知ったです

111:デフォルトの名無しさん
08/02/14 21:11:16
tangoでGCを切って、GCコードを含めずコンパイルする方法ってどこかに載ってる?

112:デフォルトの名無しさん
08/02/14 21:23:17
そんなことしたらそもそもTango自体が使えなくなるんじゃないか?

113:デフォルトの名無しさん
08/02/14 21:31:52
>112
そういえばそうだな。

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

tangoは使えなくなるんだし、別にtangoセットのdmd使う必要もないな。...試してくる。

114:デフォルトの名無しさん
08/02/14 21:49:06
   /⌒ヽ
  / ´_ゝ`)すいません、ちょっと場所お借りしますよ・・・
  |    /
  | /| |
  // | |
 U  .U

D言語BOF

オープンソースカンファレンス2008 Tokyo/Spring
URLリンク(www.ospn.jp)
サイトにて参加登録が始まりました。
空きがあれば当日参加できますが、申込数に応じて部屋(の大きさ)が変わるらしいので登録お願いします。


115:デフォルトの名無しさん
08/02/14 21:58:16
import std.c.stdio;
void main(){
  printf("Hello");
}

dmd main.d -c
dmd main.obj gcstb.obj
ってしたら、exeが出来たんだけど、実行しても何も表示されない。

116:デフォルトの名無しさん
08/02/14 22:22:23
エントリポイントがないから。

extern(C) int main(int argc, char* argv) {
main();
return 0;
}

117:デフォルトの名無しさん
08/02/14 22:33:14
>>116
を追加したらちゃんと表示された。サンクス。

ってことはGCのコード外すとDプログラムの前処理や後処理のコードも消えるってことか。
Dのプログラムはどこにエントリポイントがあるのかと思ってたけど、そんなところにあったのか。

118:デフォルトの名無しさん
08/02/14 22:44:48
gcstubリンクすると連想配列使えないとかforeach使えないとか、
様々な悪夢が起きるからやめたほうがいいと思うよ。

119:デフォルトの名無しさん
08/02/14 22:45:21
>>117
エントリポイントはphobosが持ってる。

120:デフォルトの名無しさん
08/02/16 03:03:11
URLリンク(www.kmonos.net)
この辺を参考にして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:デフォルトの名無しさん
08/02/16 04:19:43
GCとか初期化する前にformat読んだからじゃない?
URLリンク(www.kmonos.net)

122:デフォルトの名無しさん
08/02/16 04:31:54
できました!ありがとうございます。

自分でWinMainを書くと、phobos側でやってくれたGCの初期化処理が行われないんですね。
納得です。

123:デフォルトの名無しさん
08/02/16 04:47:40
自分でWinMainってなんの為に書くの?
公式だと書いてるけどわなDには「書く必要はない」ってあるし。引数が欲しいから?

124:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/16 06:39:29
>>123
Win32APIの勉強をするにあたって、
URLリンク(wisdom.sakura.ne.jp)
ここを参考にしてるからです。
形式を合わせただけなので、WinMainを自分で書いたことに特に意味はありません。

126:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/16 19:47:29
構造体のポインタにwithしてもパラメータ呼び出せるようにならないかなー

128:デフォルトの名無しさん
08/02/16 19:48:59
言葉間違えすぎわらったです
パラメータじゃないメンバー

129:デフォルトの名無しさん
08/02/16 20:52:19
>>127
*付けて with(*p) とかにすると大丈夫みたいだよ。

130:デフォルトの名無しさん
08/02/16 21:50:32
>>129
う、うぃずぴー・・・

131:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/18 06:42:17
Tango XML now in trunk!
URLリンク(dsource.org)
超期待

133:デフォルトの名無しさん
08/02/18 08:44:31
>132
おぉーこれは……

ってかTangoってなぜあのへんてこな構文なのか誰か教えてorz

134:デフォルトの名無しさん
08/02/18 09:17:40
>>133
どのあたりが変?
実はphobosあまり知らずにtangoから入ったからあまり使いにくさを感じない。
結構すっきりしてて使いやすいと思う。
確かにモジュール名が大文字始まりなのは最初は変だと思ったけれども。

135:デフォルトの名無しさん
08/02/18 09:28:18
2.0の対応予定無いのかなあ。
モジュール名のこととか、なんかもうちょい足並みが揃って欲しい。

136:133
08/02/18 09:55:02
Cout("Hello")(" ")("World").newline;
URLリンク(www.dsource.org)

とか、とにかく \n が .newline ってのが馴れないんだよね。

137:デフォルトの名無しさん
08/02/18 09:59:55
あー、それは確かに驚いたけど、そんな書き方自分は使わないからあんまり気にならないかなw
というかいつもStdout使ってる。あれ?Coutってもしかして\n使えない?

138:デフォルトの名無しさん
08/02/18 10:18:05
>>131
そういや仕様書のCスタイル可変個引数の例文の方でも、
Cのリンケージと言いつつextern(C)しない_argptrのコード例しか
載ってないんだよな。

2.010で再現した。バグだろね。たぶんスレでは初出。

139:131
08/02/18 10:22:47
あ、バージョン書き忘れてた。自分のはDMD1.026です。
ちなみにぐぐってみると
URLリンク(www.digitalmars.com)
なんてのがあった。
2007/2 ...もう一年前だな(遠い目

140:デフォルトの名無しさん
08/02/18 19:15:32
>>132
まだ candidate だけど phobos にもこんなのがきているわけだが。
URLリンク(dsource.org)

141:デフォルトの名無しさん
08/02/18 19:38:04
1年でそんなに変わるもんじゃないですね

142:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/19 01:19:20
cast(wchar[])じゃなくてcast(wchar*)とか?


144:デフォルトの名無しさん
08/02/19 02:07:31
>142
CreateMenu() じゃなくて CreatePopupMenu() じゃないでしょうか。

145:デフォルトの名無しさん
08/02/19 04:31:46
>>142
cast(wchar[])でも問題無いが、cast(wchar*)を使うべき。
cast(wchar[])"終了"と書くと文字列が配列として作られるから、長さ情報とかも生成される。
cast(wchar*)"終了"と書くと文字列へのポインタとして作られるだけで、配列の情報は生成されない。


146:デフォルトの名無しさん
08/02/19 05:37:00
"終了\0"w.ptrが一番カッコいい気がするのは俺だけ?

147:デフォルトの名無しさん
08/02/19 05:40:10
いや、お前だけじゃないw
でも毎回そう書くのは面倒だけどな。

148:デフォルトの名無しさん
08/02/19 07:00:55
>>140
Phobosいろいろ修正されてるんだな

149:デフォルトの名無しさん
08/02/19 07:23:39
>>144
それでした。
ありがとうございます。

>>143 >>145
わかりました。windowsapiに渡すときはそうすることにします。

150:デフォルトの名無しさん
08/02/19 09:25:39
>>146
ゴルフ的な理由で俺はこう書いてる。
&*"終了"w

151:デフォルトの名無しさん
08/02/19 11:57:30
関連質問かもしれないんですけど、
cast(wchar*)"ほげ"
って末尾にナル文字は含まれてるんですか?

152:デフォルトの名無しさん
08/02/19 12:45:45
そういうケースの場合自動的にNULL終端になったと思います。

153:デフォルトの名無しさん
08/02/19 13:24:01
D言語用のまともなDirectInputのポーティングってないんでしょうか?
調べても古いのしか出てこなくて。

154:デフォルトの名無しさん
08/02/19 14:19:27
>>151-152
文字列リテラルはゼロ終端が保証されてる。

155:デフォルトの名無しさん
08/02/19 17:45:13
real x = real.nan;
assert( x == real.nan );
なぜこれが通らないんだ… @ DMD 1.026

156:デフォルトの名無しさん
08/02/19 18:01:02
nanとの比較は常に成り立たないんじゃなかったかな。
std.math.isnanを使うべし。

157:デフォルトの名無しさん
08/02/19 18:04:41
>>156 サンクス!
なんかわかりにくいなぁ…

158:デフォルトの名無しさん
08/02/19 18:11:05
URLリンク(www.kmonos.net)
>どちらか一方でも NaN であれば、 == はfalse、!=はtrueになります。

とあるような

159:デフォルトの名無しさん
08/02/19 18:12:48
>>155
assert( x !<>= real.nan );

URLリンク(www.kmonos.net)

isnanのほうがきれいだな

160:デフォルトの名無しさん
08/02/19 19:00:09
URLリンク(ja.wikipedia.org)
浮動小数自体の仕様だよ

161:デフォルトの名無しさん
08/02/19 19:58:58
> 1は何乗しても1だが、NaN乗しても1と言えるのか

(;´Д`)

162:デフォルトの名無しさん
08/02/19 20:03:39
>>161
誰がうまいこと(ry

163:デフォルトの名無しさん
08/02/19 20:08:50
>>151
URLリンク(www.kmonos.net)
printf() の呼び出し

164:デフォルトの名無しさん
08/02/19 20:33:12
>>162
wikipediaの中にあんな一文があると
どうしても声出して笑っちまうよな。
ちくしょう。油断してた。

165:デフォルトの名無しさん
08/02/19 20:41:51
0を何乗しても0だが、何を0乗しても1
では0を0乗したら0か、それとも1か?
という話と同じ匂いがするな

166:デフォルトの名無しさん
08/02/19 20:45:17
【技術】マイクロソフト、新開発言語「D」を開発中[08/02/07]
スレリンク(bizplus板)

167:デフォルトの名無しさん
08/02/19 20:48:40
Java潰しにやっきになってたときと同じ匂いがするの

168:デフォルトの名無しさん
08/02/19 20:49:44
>>165
3! = 6
2! = 2
1! = 1
0! = 1 ?



169:デフォルトの名無しさん
08/02/19 20:58:41
>>168
0! = 1 はいちおう数学的に証明できますから

170:デフォルトの名無しさん
08/02/19 21:00:29
証明というか定義の問題のような

171:デフォルトの名無しさん
08/02/19 21:03:23
0^0

0/0

どちらも未定義なの?


172:デフォルトの名無しさん
08/02/19 21:11:05
lim[x→+0] 0^x = 0
lim[x→0] x^0 = 1
lim[x→0] x^x = 1

あるえー?

173:デフォルトの名無しさん
08/02/19 21:19:39
 lim[x→-0] 0^x = ?

174:デフォルトの名無しさん
08/02/19 21:25:09
 lim[x→0] x^x って 0 じゃね?

175:デフォルトの名無しさん
08/02/19 21:29:53
0.00001^0.00001=0.9998848773724686...

176:デフォルトの名無しさん
08/02/19 21:37:37
数学板でも0^0が1か0かの論争よくやってるね。

177:デフォルトの名無しさん
08/02/19 21:52:36
テンソルの次は0^0かよ・・・w

178:デフォルトの名無しさん
08/02/19 22:08:18
>>132,140
なんかこういうの出てくると、いよいよ作りかけの俺製XMLライブラリを世に出しがたい雰囲気になってきた。

179:デフォルトの名無しさん
08/02/19 22:15:25
n=0のとき
 lim[x→0] n^x = ?
n<0のとき
 lim[x→0] n^x = ?


180:デフォルトの名無しさん
08/02/19 22:16:43
>>131
バグじゃなくて仕様でしょ。
_argptr は _arguments から計算されるけど、extern(C) だと _arguments が渡されない。
つまり _argptr が使えない。

181:デフォルトの名無しさん
08/02/19 22:25:22
>>180
URLリンク(www.kmonos.net)
 > Cスタイル可変個引数関数
      (中略)
 > Cスタイル可変個引数関数は、Cの可変個引数関数の呼び出し規約と一致していて、
 > printf のような Cのライブラリ関数を呼び出すのに利用できます。
 > 可変個引数関数の中では、 特別なローカル変数 _argptr が使えます。

182:デフォルトの名無しさん
08/02/19 22:27:18
>>180
仕様書に_argptrが使えるって書いてあるから、
「バグじゃねえの」って話になってるんでしょ。

まあ、普通にstd.c.stdarg使うえばいいんだろうけどね。

183:デフォルトの名無しさん
08/02/19 22:31:53
>>182
tangoだとstdargがまだ未実装みたいだった。

Phobosも使い方が良く分からない。
Cでも可変個引数は使ったことなかったから知らないんだけど、とりあえずCの解説サイトに載ってるように書いても使えなかった。

184:183
08/02/19 22:38:02
すまん、
>tangoだとstdargがまだ未実装みたいだった。
の行は無視してくれ。多分全然関係ないところで勘違いしてる。

185:デフォルトの名無しさん
08/02/20 01:39:19
クロスプラットフォームなGUIを使いたいんだけど、wxDがいいのかな?
でももう更新されてないみたいだし、D->wxD->wxC->wxWidgetって中継が多いけど、実行速度は大丈夫なのかとか気にしてるんだが。


186:デフォルトの名無しさん
08/02/20 04:34:12
% ウォルター曰く
A whole lotta library improvements.

URLリンク(www.digitalmars.com)
URLリンク(ftp.digitalmars.com)

URLリンク(www.digitalmars.com)
URLリンク(ftp.digitalmars.com)

I had planned on doing struct destructors for this update, but they are not done yet.


187:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/20 05:29:34
作者はりきってるな

192:デフォルトの名無しさん
08/02/20 06:24:51
ちょ、すごい量だなw

193:デフォルトの名無しさん
08/02/20 06:28:32
MSがD言語作り始めたから対抗してるんだな

194:デフォルトの名無しさん
08/02/20 07:58:43
ライブラリ強化期間?
tangoの立ち位置がよくわからなくなってき……

195:デフォルトの名無しさん
08/02/20 08:19:29
assert( x == x );こうすればisnanできるんじゃね?

196:デフォルトの名無しさん
08/02/20 08:58:39
同時に使用できないなんてことはさっさとやめて
TangoはC++に対するboostのような道を模索した方がいいと思う

197:デフォルトの名無しさん
08/02/20 08:59:11
D言語ってC言語出来るんならすぐ使えるの?

198:デフォルトの名無しさん
08/02/20 09:26:22
文法はちょっと違うけど、Cの標準関数もそのまま使えるから簡単。

199:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/20 11:11:21
こっち使うべし
URLリンク(www.dsource.org)
URLリンク(www.kmonos.net)
4年前のソースなど絶対コンパイル通らんよ。。。

201:デフォルトの名無しさん
08/02/20 11:44:42
あと>>200の使っても今はコンパイラがエラー吐いて止まるはず
過去ログに話出ていて原因は定義順だったと思う
ちなみに解決済みのバージョンがどこかで公開された様子はない

202:デフォルトの名無しさん
08/02/20 11:56:09
>>185
クロスプラットフォームのGUIライブラリって今あるのかねえ
今はDFLをGTKベースに書き直しているはずだからそのうちこれが使えるかもしれないけど
速度は実測しかない

203:199
08/02/20 12:10:02
>>200
入れたらすんなり通りました。
ありがとうございます(・∀・)

>>201
いまんとこエラー吐いてないです。
と言ってもショボイAPIしか呼んでませんけど・・・

204:デフォルトの名無しさん
08/02/20 12:51:04
>>201
trunkでは直ってると思った

205:デフォルトの名無しさん
08/02/20 12:53:17
>>202
dwtの新しいのってどうなんだろ。Tango前提なので試せてないんだけど

206:デフォルトの名無しさん
08/02/20 14:35:37
今回のバージョンに>>30-36が反映されてないね。

207:デフォルトの名無しさん
08/02/20 16:25:18
>>194
強化期間というより、dsourceで検証まで終わった新コードをまとめて承認したという感じじゃないのかな

しかしxml読みにこのスレでの頂き物を活用してた俺涙目
でも骨子は同じだからstd.xmlに切り替えてみる
omegaの方ありがとうございました

208:デフォルトの名無しさん
08/02/20 16:37:31
3/1のBoF、時間が前に延びて10:15開始になってるね。


209:デフォルトの名無しさん
08/02/20 17:08:53
ws2_32.libの中にはWSAAsyncSelectがちゃんとあるんだけど、
WSAAsyncSelectを使おうとすると未定義のシンボルって言うリンクエラーがでる。
何ででしょう。

210:デフォルトの名無しさん
08/02/20 17:15:39
std.xmlて入力がInputStreamじゃなくてstringなんだな。
でっかいXMLファイルもとにかく一度全部読み込む必要があるのか……

211:デフォルトの名無しさん
08/02/20 17:18:44
>>209
リンケージが違うとか。

212:デフォルトの名無しさん
08/02/20 19:53:43
>>210
それはきちぃ・・
けど、使いどころはあるけどね

213:デフォルトの名無しさん
08/02/20 20:04:10
>>210
配列のように扱えるStreamがあればちょっと改造して使えるんじゃない?

214:デフォルトの名無しさん
08/02/20 21:51:17
BoFで
「Walterだけど何か質問ある?」
というネタをやるとしたら何か質問ある?


215:デフォルトの名無しさん
08/02/20 21:58:10
const 関連の仕様に迷いはありませんか?

216:デフォルトの名無しさん
08/02/20 22:15:58
標準ライブラリを tango に頑張ってもらう気は?

217:デフォルトの名無しさん
08/02/20 22:16:47
もうかりまっか?

218:デフォルトの名無しさん
08/02/20 23:11:47
マイクロソフトさんになにかひとこと

219:デフォルトの名無しさん
08/02/20 23:16:48
>>217
どう訳せと?
「Dの開発は収入になりますか」とかそんなん?
「CD売れてますか?」とおもったけどこれDじゃなくてC++だな


220:デフォルトの名無しさん
08/02/20 23:20:59
よく見たらTシャツとマグカップ売ってた


221:デフォルトの名無しさん
08/02/20 23:25:15
火星柄の時計もなかなか

222:デフォルトの名無しさん
08/02/21 00:00:46
文字列の扱いをもう少し国際化するつもりはありませんか?とか。

折角の機会だから、「ヲルタンに好き勝手要望・提案を伝えてもらえるコーナー」
なんてあったらすげー行きたくなるなぁ、と思いつつも
自分じゃ何も貢献出来なさそうなのであった。

223:デフォルトの名無しさん
08/02/21 00:14:22
ICU並のUnicode処理を標準ライブラリに入れろってのも無理な話しだしなあ

224:デフォルトの名無しさん
08/02/21 00:17:40
>>210
SAX 風のイベントモデルで DOM 風に一括読み込み必須というのはアレだな
この段階ではあんまり気にすることもないと思うけど
>>213
あれそれ何かなかったっけーと思ったら std.stream.TArrayStream は逆か

225:デフォルトの名無しさん
08/02/21 00:58:08
データを受け取るときは全てStreamで受け取るべきだ!

226:デフォルトの名無しさん
08/02/21 00:59:59
しかしinvariant stringで受け取るとpureにできたり(予想)速度的な利点がありそうなかんじ。
うまくラップするのが賢そうだな

227:デフォルトの名無しさん
08/02/21 01:01:46
ICU使ったことないけど、あれってコア部分だけ組み込んで、
各エンコーダやユーティリティは別途入れるとかの使いかたはできへん?

228:デフォルトの名無しさん
08/02/21 01:04:04
>>227
ICUは糞でかいから普通はDLLにして動的リンクする。

229:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/21 02:49:11
foreach(i; arr.filter!(q{ a > 3 })) {
 writefln(i);
}

231:デフォルトの名無しさん
08/02/21 03:05:07
なるほどfilterを使うのかthx

232:デフォルトの名無しさん
08/02/21 04:06:55
標準ライブラリが文字列mixinを大々的に使い始めたんだな。怖い怖い

233:デフォルトの名無しさん
08/02/21 04:22:28
うひょー

234:デフォルトの名無しさん
08/02/21 07:15:36
D言語関係無いけど、インデントするときタブとスペースどっち使ってる?
やっぱスペース4個にするのがベターだろうか。

235:デフォルトの名無しさん
08/02/21 07:45:24
アンチスペースインデント、タブインデント信者の俺に対する挑戦だな。

236:デフォルトの名無しさん
08/02/21 08:03:00
タブインデント信者だが、たまにスペースインデントを使いたくなる
しかし俺の伝説のIDEは行頭から連続したスペースは4文字ごとにタブに自動変換される仕様
スペースインデント派とのソース交換でもにゃる

237:デフォルトの名無しさん
08/02/21 08:06:25
>>236
お前とソースを交換するスペースインデント派にはいい迷惑だな。
バージョン管理も狂うし。ダメダメじゃん、お前の伝説のIDE wwww

238:デフォルトの名無しさん
08/02/21 10:37:10
>>234
本当に文頭のタブ桁ごとのインデントしか行わないならタブもありかもしれないけど、
大抵関数引数の整列とかでもインデント使ってて、それゆえにスペースが
混入してたりするから、結局そいつのタブ間隔以外では表示が崩れるんだよね。

239:デフォルトの名無しさん
08/02/21 11:25:28
>>238
タブ派だがスペース混入とかしないぞ。
混在されるとタブストップによって表示が崩れるのが嫌ってのは同意。
インデントは全部スペースか全部タブかにしてほしい。

240:デフォルトの名無しさん
08/02/21 11:39:25
Phobosは基本スペースだけどもたまにタブ混じってるな。

241:デフォルトの名無しさん
08/02/21 11:57:06
phobosはtab幅が8なのが気に食わない

242:デフォルトの名無しさん
08/02/21 12:08:38
>>241 激しく同意。4がスキ。

243:デフォルトの名無しさん
08/02/21 12:53:41
>482-483
タブ幅とインデント幅は別物なので注意な。
Windowsしか知らない連中はそこの区別が付いてないことが多いけど。

タブ幅は8で固定。WindowsのDOS窓とかもそうなってる。
インデントは主義によって4とか8とか2とか色々ある。


244:デフォルトの名無しさん
08/02/21 13:05:51
ソースはソニー?

245:デフォルトの名無しさん
08/02/21 13:07:31
ここを読む人はLinux使える人のが多いんじゃないか?

246:デフォルトの名無しさん
08/02/21 13:08:39
コーディングスタイル論争で、
「タブ幅は伝統的に8だから、8以外は間違ってる」
とか言い張る子が必ずいるよね(´・ω・`)

247:デフォルトの名無しさん
08/02/21 13:10:20
いまどきタブ幅変えられないエディタなんかないだろ…

248:デフォルトの名無しさん
08/02/21 13:12:41
つnotepad.exe



・・・そんな目で見るなって。

249:デフォルトの名無しさん
08/02/21 13:22:40
パッチ作るときとか面倒だからタブ幅は1でお願いします。

250:デフォルトの名無しさん
08/02/21 13:40:05
>247
でも、ソースコードを扱うのはエディタだけじゃないからね
端末ソフトとかプリンタとかあるし

251:デフォルトの名無しさん
08/02/21 13:52:58
いずれにしてもインデントにタブを使うなら、
インデント幅ははタブ幅の整数倍にしてくれないと困る。

252:デフォルトの名無しさん
08/02/21 14:16:41
インデント幅だかタブ幅の単発スレがム板かマ板にあった気がするけど、
とっくに落ちたのか、コーディング規約スレの方に統一されたのか…

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

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

「インデントの幅」というコーディングスタイルの好みの違いたった一つを
緩和するためだけに他の整形を放棄するのは、可読性の点で
コーディングスタイルとして合理的なじゃない気がする。
完結してる環境で規約として採用するにしてもナシじゃない?

253:デフォルトの名無しさん
08/02/21 14:49:37
void func()
body {
}



int func()
  body {
  }


みんなはどうしてる?

254:デフォルトの名無しさん
08/02/21 14:53:00
俺は後者だな。
前使ってたエディタが前者だとアウトラインを生成できなかったから。

255:デフォルトの名無しさん
08/02/21 14:57:24
void func()
body
{

}
でいいじゃん

256:デフォルトの名無しさん
08/02/21 15:09:00
後者だ

257:デフォルトの名無しさん
08/02/21 15:47:21
後者だね、インデントはほしい。

258:デフォルトの名無しさん
08/02/21 16:08:04
どっちにしろなんかインデント汚くなるし
in 使わないで最初に assert() 入れればよくね?
out 使わないでscope(exit) assert() 入れればよくね?
って思うのは俺だけかな…

259:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/21 17:27:32
むしろせっかく契約を実装と分けられるのに、それを生かしきれてない気がする。
関数の使い方を表すドキュメントの一部なんだから、ddocにくらい出すべきだと思う。
ドキュメントに自動変換しようと思えば、いろいろ進化の方向が見えてくるんじゃないかと。

俺は前者派。body, in, outだけに1段階字下げを使うのが、なんか割りに合わない気がしてなー。

261:デフォルトの名無しさん
08/02/21 19:52:22
>>247
ソースコードを見るのはテキストエディタだけだと思ってるのか?
ターミナルや、ブラウザの<pre>タグ内のタブ幅は弄れないことが多いし、弄れたとしてもいちいち設定を変えるのが面倒。
スペースインデントなら、タブ幅の違う環境に持っていっても問題がおきない。

逆に、プログラマがインデント一段文のスペースをまとめて処理できないテキストエディタなんて
使わないんだから、ハードタブ使う必要が全く無い。

262:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/21 20:14:24
ここはD言語のスレなんだが、IEEE 754とかでぐぐっとけ

264:デフォルトの名無しさん
08/02/21 20:15:30
>>261
コンテクスト的にそういう話じゃないだろ。

265:デフォルトの名無しさん
08/02/21 20:22:20
>>262
D全く関係無いなw
ファイルの読み書きは出来るのに、文字列と数値の違いを理解してないってのは珍しいな。
それにパイを読み書きする必要があるって、学生か?

PC内で文字がどのように表現されているか、調べるべし。

266:デフォルトの名無しさん
08/02/21 20:27:10
>>261
>247は>243の「タブ幅は8で固定」ってのに対するレスだと思うよ。
「お前はどんだけ限定された環境に棲んでるんだ」っていう感じの。

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

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

というかリアルタイムにドキュメント生成して、しかも整形の仕方をHTMLの手書き
レベルでカスタマイズできたりしたら、本当に楽しいだろうなあ……

267:デフォルトの名無しさん
08/02/21 20:34:51
ソースがXMLになると想像しただけで御免蒙りたい

268:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/21 20:43:50
それで制約関数に
/// nullでない
/// $(var x) より小さい
とかコメントとつけとくと、IDEがこんな感じで表示してくれるの。

Class get(Class[] items, size_t index)
 items: ~
  制約: nullでない
 index: ~
  制約: items.length より小さい
 戻り値: ~
  制約: nullでない

270:デフォルトの名無しさん
08/02/21 20:57:05
なんかMicrosoftがD言語作るんだって

271:デフォルトの名無しさん
08/02/21 20:58:48
>>270
もうそれは既に何度も書き込まれた情報。

272:デフォルトの名無しさん
08/02/21 21:24:47
これ、塗るでない

273:デフォルトの名無しさん
08/02/21 21:35:48
では煮るぞ

274:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/21 23:34:50
>>274 (>>267)
瑛太:「僕にはなんか、わかりますけどねぇ」

276:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/22 01:27:30
コメントが実行されるってのは違和感ありまくり

278:デフォルトの名無しさん
08/02/22 01:28:11
interfaceとかabstractのメソッドに契約付けることって、ひょっとして出来ない?

279:デフォルトの名無しさん
08/02/22 01:29:10
ドキュメント化コメントってのは自然言語な説明を書く部分だと思ってるからなんか違う気がする。
動作そのものを左右する契約はコード本体に書いてあるべきだよ。

280:デフォルトの名無しさん
08/02/22 01:33:18
>>278
仕様では、bodyを持たない関数には契約つけれない。
抽象関数でもbodyがあれば契約はかける。

281:デフォルトの名無しさん
08/02/22 07:17:33
そんな契約、Mayerが見たら悶絶しちまうなwww

282:デフォルトの名無しさん
08/02/22 08:40:15
さっきちょっと複雑なmixin組んできたけど、コンパイル時実行可能ってのは難しいな。
なんかもうmixinの制限ありで書くより、自動生成プログラム一つ組んで走らせた方が早いんじゃないかと思えてきた。
動的配列作れないとか、添え字に変数使えないとかが厳しい。

283:デフォルトの名無しさん
08/02/22 12:18:00
>277, >279
Pythonの標準ライブラリにはユニットテスト用モジュールがいくつかあるんだが、
その中のdoctestという奴では、テスト内容をコメント部分に書くようになってる。
簡単なテストを書きたい場面ではよく使われてるよ。ご参考まで。

でもまあDではin/out/bodyとか用意されてるから、
そっちを素直に使う方がいいとは思うね。


284:デフォルトの名無しさん
08/02/22 13:08:11
>>280
ありがとう。残念だ。

285:デフォルトの名無しさん
08/02/22 15:33:52
>>272
if( this !is null ) {}

286:デフォルトの名無しさん
08/02/22 17:38:57
変数の型を調べるにはどうすれば良いんでしょうか。

287:デフォルトの名無しさん
08/02/22 18:15:06
typeofとかis式とか

288:デフォルトの名無しさん
08/02/22 19:05:30
可変個引数関数で受け取った引数をそのまま別の可変個引数関数に渡すってできない?

289:デフォルトの名無しさん
08/02/22 19:30:41
可変長タプルつかうのじゃあかんの。
それか、_argptrと_argumentsを引数に取るオーバーロードを用意するか。

290:デフォルトの名無しさん
08/02/22 19:39:51
asmでスタックコピーする

291:デフォルトの名無しさん
08/02/22 20:04:42
>>290
asmまでいかなくても出来るんじゃないか?メモリ確保して、コピーするだけだし。

292:デフォルトの名無しさん
08/02/22 20:07:21
>>291
それをコールフレーム上でできるのか?

293:デフォルトの名無しさん
08/02/22 20:07:30
シングルスレッドで再帰なしなら何とかなりそうだが、
再帰やマルチスレッドだと死亡しそうだな。
メモリ確保するにしても、その確保したアドレスを保持するポインタが必要だし。
静的な領域に複数のポインタの置き場所を作って
何とかやりくりすればましにはなるだろうが。

294:デフォルトの名無しさん
08/02/22 20:12:41
あーそうか、_argptrは簡単にごまかせるが、_argmentsは難しいな。
Cの可変個引数関数の事考えてた。

295:デフォルトの名無しさん
08/02/22 20:26:40
その関数の中で何もしていなければ、
jmp するだけでおk。
asm なら。

296:デフォルトの名無しさん
08/02/22 21:45:57
>>288
URLリンク(www.kmonos.net)
あたりを参考に、 void func(T...)(T arg){ func2(arg); } とか。

297:デフォルトの名無しさん
08/02/22 23:52:10
>>298
タプルって可変個引数関数にそのまま渡せるんだな。知らんかった。
テンプレートってすごいけど、使いこなせない。

298:デフォルトの名無しさん
08/02/23 01:19:49
D言語始めようと思うんですが何から始めればいいんでしょうか。
一応ヨガ教室には一とおり通いました。

299:デフォルトの名無しさん
08/02/23 02:22:26
あとは腹筋200回とスクワット500回と走り込み50m20回をそれぞれ3セットずつ1ヶ月続けて基礎体力を身につけないと。

300:デフォルトの名無しさん
08/02/23 02:24:26
とりあえずブリンカーを何処かで調達してきて
話はそれからだ

301:デフォルトの名無しさん
08/02/23 02:25:24
ビリーズブートキャンプおすすめ

302:デフォルトの名無しさん
08/02/23 06:45:34
D言語本格的に使ってるやつって日本に10人もいなそうだな

303:デフォルトの名無しさん
08/02/23 07:07:27
本格的って言葉の定義が微妙だな。
学生で趣味のプログラミングでDに惚れ込んだ俺はどうなるw

304:デフォルトの名無しさん
08/02/23 07:21:06
ノーカウント

305:デフォルトの名無しさん
08/02/23 07:30:53
orz

306:デフォルトの名無しさん
08/02/23 07:55:34
趣味が高じて卒業論文にD言語コード載せちゃいましたって俺は?

307:デフォルトの名無しさん
08/02/23 07:57:31
卒論のtoy program程度じゃ

ノーカウント

308:デフォルトの名無しさん
08/02/23 10:43:30
BOFで発言する方々で10人にはなるのではなかろうか

309:デフォルトの名無しさん
08/02/23 13:31:07
D言語 孤高の10人

310:デフォルトの名無しさん
08/02/23 13:58:37
今の時期Dを"本格的に"使うのって心中と近い意味になりそうで怖くないか。
ホビープログラマが遊びつつ、バグや要望を出していく段階だと思うが。

311:デフォルトの名無しさん
08/02/23 14:09:34
>>310
少なくとも客を納得させるのは難しいな。

312:デフォルトの名無しさん
08/02/23 14:12:30
Dで作ったプログラムを納品したあの人は10人のうちに入るわけだ

313:デフォルトの名無しさん
08/02/23 14:41:50
ところでふと思ったんだが、

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

とか書けたら便利じゃね。

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

現状のラベル付きの方がいいんじゃないかな。

315:デフォルトの名無しさん
08/02/23 14:47:44
そうか。確かに。バグを誘発しやすいかも知れない

316:デフォルトの名無しさん
08/02/23 14:53:46
たしかVBってその書き方できたよね。

昔はFORとNEXTの対応があってなくてもよかったBASIC処理系あってカオスだったけど。

317:デフォルトの名無しさん
08/02/23 15:59:03
>>316
つーか、大抵の処理系ではNEXTの変数は省略可だったような。

318:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/23 16:53:18
>>318
thanじゃなくてthenな。

320:デフォルトの名無しさん
08/02/23 17:47:51
>>317

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

for i = 0 to 10
if hoge then next
next

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



321:デフォルトの名無しさん
08/02/23 17:55:10
gosubで呼ばれた先にnextがあったらどこに戻るんだろうか

322:デフォルトの名無しさん
08/02/23 18:23:16
>>321
普通にエラーだったような。

323:デフォルトの名無しさん
08/02/23 18:40:42
>>310
asm C C++とどっぷりつかってた。
んで、D言語であそんでたくちだが、C#がすんなり使えた。
D言語しかつかわないようにするわけでは無い。
「現代的な言語」(プログラミング言語Dより引用)にふれることは
そう無駄じゃないと思う。

324:デフォルトの名無しさん
08/02/23 19:00:22
>>323
Dを本格的に使う、という話からだいぶ横滑りしてるかと。
というか、それは最初からC#とか使ったほうがいいんじゃね?
向こうのが開発環境も充実してるし、現代的な言語に触れるって目的なら各種スクリプトも手軽……

……なんか悲しくなってきた。でもDが好きだよ、俺。

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

好きならイイジャマイカ


326:デフォルトの名無しさん
08/02/23 22:44:24
Dの設計思想に触れる事によって、どういった機能が他の言語に欠けてるか、あれば便利か、要らないかといったことも知ることが出来るわけで。
まあ他にもインスピレーションを得るために、変わった環境に触れていくのは悪いことではないかと。
今のところDってそういう位置付けでもいいと思う。言語の成長とともに使う側も成長していける言語みたいな。

327:デフォルトの名無しさん
08/02/23 23:43:23
でもほかの言語と比べてもメリットいっぱいあるとおもうけど……
C#(.net系全部)はネイティブはけないし、Javaは遅いし、C++は汚いし……
趣味にはぴったりジャマイカ。コードと仕様が美しいし(C++と比べて)
まぁぶっちゃけC#が高速で起動するネィティブ吐き出したら勝てないと思うが。



328:デフォルトの名無しさん
08/02/24 00:17:04
>ネイティブ
つngen

329:デフォルトの名無しさん
08/02/24 02:50:17
でもngenって各ユーザが実行しないといけないやつだよね。たしか。

開発者側でネイティブ吐きたいよな。

330:デフォルトの名無しさん
08/02/24 03:04:35
>>328
C#で作ったソフトの起動が遅すぎるんだが俺の何かがまずいのか?
ngen使っても起動時間は長いんだが
Dで作ったソフトは軽快だから好きだ!

331:デフォルトの名無しさん
08/02/24 03:36:51
D言語で積み木シューティングってゲーム作ってるやついたよな
あれくらい使いこなせてるんなら本格的っていえるか

332:デフォルトの名無しさん
08/02/24 05:04:39
>>331
TUMIKI Fighters は ABA さん
ちなみに Wii でゲーム化されるほど
URLリンク(www.gamespark.jp)

333:デフォルトの名無しさん
08/02/24 06:05:33
でもDは基本ゴッタ煮だから言語設計の勉強には向かないと思われ

334:デフォルトの名無しさん
08/02/24 06:52:44
>>328
ngen使っても遅いのがちょっと速くなるくらいであまり変わらんよ。

335:デフォルトの名無しさん
08/02/24 06:59:18
ABA始まったな

336:デフォルトの名無しさん
08/02/24 07:06:08
次はまさしくんハイ!だな

まあ冗談だがWiiの操作性には割とマッチすると思わなくもない

337:デフォルトの名無しさん
08/02/24 12:18:37
関数の中のswitch文の中でreturnを使った場合はその後にbreakはいらないよね?

338:デフォルトの名無しさん
08/02/24 12:24:38
プログラムの動作上はなくても問題ない。
保守・改変まで考慮する場合(それがよい習慣か否かとか)は話が別だけど。

339:デフォルトの名無しさん
08/02/24 12:39:48
ふと思った
関数にデストラクタ機能欲しくね?
quitでユーザー定義なデストラクタへ抜けてreturnでdefaultなデストラクタへ処理を渡す。

340:デフォルトの名無しさん
08/02/24 12:41:56
デストラクタ作るなら return したら常に呼ばれるべきだと思うが。

341:デフォルトの名無しさん
08/02/24 12:45:02
goto と同じ問題が発生するな。
変数の初期化を飛び越える事ができない。

解決するにはコンストラクタと称して
デストラクタで使用可能な変数を宣言する場所が必要になるな。

342:デフォルトの名無しさん
08/02/24 12:52:19
scopeじゃいかんの?

343:デフォルトの名無しさん
08/02/24 12:54:51
scope(exit) か。

344:デフォルトの名無しさん
08/02/24 13:12:38
>>335
ABAはもうD使ってないよ

345:デフォルトの名無しさん
08/02/24 13:13:17
>>339
撒き戻しとか後片付けならスコープガードや例外を使えばいいと思うよ。

346:デフォルトの名無しさん
08/02/24 14:52:28
>328
ngen使っても完全なネイティブじゃないでしょ。それに.net frameworkで動くからやっぱり遅い(初期起動が特に)

趣味で作る小さなプログラム起動するのに時間かかってたら腹が立つ。Office大きいものならば許せるが。その点Dは高速だし好きだ。IDEさえ何とかなれば……orz

347:デフォルトの名無しさん
08/02/24 15:19:16
例外ってロジック的になんか美しくないじゃん

348:デフォルトの名無しさん
08/02/24 15:21:47
普通にtry{} finally{}で何の問題があるんだろう…

349:デフォルトの名無しさん
08/02/24 16:00:32
処理のフローが、各関数の呼び出し関係から暗黙に決まる、
ってのが美しくないところだと思う。

関数を合成して処理を作ること、処理を連結してフローを作ること、
これはそれぞれ別のまとまりとして定義されないと、処理フローが
ぐちゃぐちゃになると思うよ。

350:デフォルトの名無しさん
08/02/24 16:16:09
tryはDだとWinMain内部でしか使ったことが無いや。

351:デフォルトの名無しさん
08/02/24 17:02:44
D言語BOF
日程:3月1日(土) 10:15 - 12:00 開始時間が変わりました
時間変更に伴い、以前登録された方も前半/後半を個別に登録してください
URLリンク(f17.aaa.livedoor.jp)


352:デフォルトの名無しさん
08/02/24 19:57:23
>>310
俺もそう思ってたけどBOFのBillさんとか本気でつかってるぽい
まあ研究職だからできるのかもしれんが


353:デフォルトの名無しさん
08/02/24 20:04:33
>>222

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

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

あと >>214 はあまり集まらないので没りそう


354:デフォルトの名無しさん
08/02/24 21:33:32
scope 関連は記述もわかりやすくなるし、
try ~ finally と違ってネストが深くならないしでかなり好きだ

355:デフォルトの名無しさん
08/02/24 21:37:42
たった一段のネストがそんなに気になるのかなあ?

356:デフォルトの名無しさん
08/02/24 22:57:49
印刷することを前提に、80桁以上にならないように注意すると
途端に一段のネストが憎たらしくなるよ。

357:デフォルトの名無しさん
08/02/24 23:20:15
ネストが深くなりすぎるプログラムはダメなプログラム。

358:デフォルトの名無しさん
08/02/25 00:20:23
finallyとかscopeは、ドキュメントいわく
「実行される箇所ではなくそれが概念的に属する場所に配置されている」
というのがいい点だが、概念的にスコープに属している実行保障を
わざわざtryブロックに付け替えるのは分かりにくくなる原因だよなと思う。

359:デフォルトの名無しさん
08/02/25 00:57:43
デバッグ用じゃないin、out、bodyみたいなのがあればいい感じ?

360:デフォルトの名無しさん
08/02/25 06:28:56
そろそろCLOSからbefore/afterをパクるのもいいな

361:デフォルトの名無しさん
08/02/25 14:38:36
void hoge()
in {
}
out {
}
before {
}
after {
}
body {
}

上から読むとなかなかbodyにたどり着けないな

362:デフォルトの名無しさん
08/02/25 15:14:01
361みたいにするのは358な理由で分かりにくくなるだけじゃね?

363:デフォルトの名無しさん
08/02/25 16:43:09
>>354
自分は基本的にタブ8でインデント + 80桁でコーディングしてるのですごく気になる。
あと、

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

/* なんか処理 */

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

こんな感じのを try~finally で書くと鬱にならないか?

364:363
08/02/25 16:43:40
ミスった。>>355 ね。

365:デフォルトの名無しさん
08/02/25 20:26:47
>>363
それ、いわゆるtry…catch…finallyなパターンじゃない?

366:デフォルトの名無しさん
08/02/25 20:49:01
DMDがコンパイル中にエラーで落ちるのは良くあること?

367:デフォルトの名無しさん
08/02/25 21:32:55
なんのエラーだ

368:デフォルトの名無しさん
08/02/25 21:34:24
内部エラー

369:デフォルトの名無しさん
08/02/25 21:41:58
>>363
これと等価かな
try {
  step1();
  step2();
} catch {
  step1_end();
} finally {
  step2_end();
}

370:デフォルトの名無しさん
08/02/25 21:46:17
>>366
よくある

371:363
08/02/25 21:55:24
また書き間違いだ……
なんでこんなミスを

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

/* なんか処理 */

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


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

各段階にあわせた例外処理をするために別々のtry文を用意するか、
深くネストしたtry文で…って感じになるんじゃないかと。

373:デフォルトの名無しさん
08/02/25 22:53:05
>>371
try-finallyがネストするのがそんなに嫌か?
巻き戻す環境が違うんだから、ネストして当然だと思うが。
むしろ>>371のほうが妙な制御依存が発生して嫌だ。

374:デフォルトの名無しさん
08/02/25 22:57:04
tab8で80桁て普通だよな。
マジでプログラムの質が悪いからネストした時辛くなるんだろ。

375:デフォルトの名無しさん
08/02/25 23:05:55
そして>>358に戻る。

376:デフォルトの名無しさん
08/02/25 23:14:28
TAB8でもインデントは4だってさ

377:デフォルトの名無しさん
08/02/25 23:15:46
それでも>>371みたいな書き方を推奨してるわけじゃないよね。

378:デフォルトの名無しさん
08/02/25 23:27:57
その辺の話は本家にあるよね。

URLリンク(www.kmonos.net)
>>373
 > try-finally による方法は、 概念的に関連している値のセットと復元コードが、
 > 間に関係のないコードが挟まることでいくらでも離されてしまう危険性を含んでいます。
>>374
 > try-finally による解決は、 リソースの初期化コードと巻き戻し処理のコードが分離して記述され、
 > 実際ソースコード上で視覚的に大きく離れてしまします。
 > しかし、密接に関連した処理は一カ所にまとまっているべきです。
>>377
 > scope文だけでは例外のcatchはできませんから、try-catch も必要です。
 > try-finally は、scope文によって冗長な構文となったと言えます。

379:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/26 08:35:49
>>374
いつの時代の人間だよ。
こういうこと言う奴って ts とか hmi とか訳分からん略した変数名使ってんだよな。
そっちのほうが最悪だっつーの。

382:デフォルトの名無しさん
08/02/26 09:01:12
2chにコードとか投稿すると著作権持っていかれるんだよなあ…

383:デフォルトの名無しさん
08/02/26 10:25:41
実質「公知のもの」になって委譲されるわけではないと思われ。
独占権は当然なくなるが。

384:デフォルトの名無しさん
08/02/26 11:43:25
>>383
URLリンク(info.2ch.net)

385:デフォルトの名無しさん
08/02/26 11:58:54
>>384
著作権は「創作性」なるものがないと認められないんだが、
Dスレで張られてる程度のサンプルないし言語仕様の検証コードなら、
創作性なしと判断されるのが通例と思われ。

386:デフォルトの名無しさん
08/02/26 13:22:14
委譲できる分だけ全部委譲させられるから問題なんだけど。
 > 無償で非独占的に複製、公衆送信、 頒布及び翻訳する権利を投稿者に許諾します。
 > また、投稿者は掲示板運営者が指定する第三者に対して、一切の権利(第三者に
 > 対して再許諾する権利を含みます)を許諾しないことを承諾します。
あたりのせいで、ここでコードを聞いて流用するとなると適用できない
ライセンスが結構出てくる。

20行を越えるようなコードでも創作性はないってのが通例だってのは初めて聞いた。
そうなると、それよりはるかに大きい著作物の20行の断片だけを流用する場合でも、
その断片はもはや創作物として原形をとどめてないないんだな。

387:デフォルトの名無しさん
08/02/26 13:33:38
URLリンク(slashdot.jp)
とか3行で騒いでて何をやってるんだろうなあと思ったことはあるけどよくわからんな。

388:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/26 17:28:56
>>386
このスレで張られるサンプルって、ほとんどが機能的なものではなく「言語仕様の検証」であって、
言語仕様からほとんど一意に決まるものだから検証サンプルそのものには創作性は認められないのではないかと。
何らかの機能性を有していれば3行のコードでも創作性が認められるとは思うけどね。

391:デフォルトの名無しさん
08/02/26 17:45:29
>>390
いずれにしても裁判所がそう認めない限りはわからないんだよね。
不確実なことを避ける考え方にも一理ある。

こういう話は嫌いじゃないけど、どうせ結論出せないんだし
気にする人だけ気にしてればいいんじゃね。

392:デフォルトの名無しさん
08/02/26 17:48:58
>>390
気にする人だけ気にすればいいというのは同意かな。
多少気になったので裁判例を調べてみた。


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


図表又は図表の使用例に示される思想ないし
アイデアそのものは,著作権法によって保護されるものではない。また,このよう
な図表又は図表の使用例は,次に述べるとおり,かかる思想ないしアイデアを表現
する際にその個性が表れず,定型的な一般的にありふれた表現としかならないよう
な場合には,著作権法によって保護し得る表現上の創作性があるということはでき
ない。
URLリンク(www.courts.go.jp)

393:デフォルトの名無しさん
08/02/26 17:59:34
392のアンカは391宛てで……

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

自分の間違いを訂正したところで、
スレチなのでこの辺で打ち止め。

394:デフォルトの名無しさん
08/02/26 18:10:52
>>389のほうが>>371みたいなのよりずっとマシだと思う。

395:デフォルトの名無しさん
08/02/26 18:12:01
コーディングスタイルやらインデントの話は不毛すぎる

396:デフォルトの名無しさん
08/02/26 18:31:05
>>371だと、コードのどの部分でどんなハンドラが付いてるかが制御依存しちゃうんだよな。

397:デフォルトの名無しさん
08/02/26 19:01:36
そもそもデストラクタ使えよって話だ。

398:デフォルトの名無しさん
08/02/26 19:43:06
>>396
どういう意味なのか、アホな俺にもう少し噛み砕いて説明してくれまいか。
>>389だと、openなどに対応するcloseがえらく離れちゃうし、
connection, compileQuery, executeという「本筋」の実行パスが分かりづらくて、
可読性の面で問題があるとおもうのだけど。
こう、gotoを忌避するあまり、関数呼び出しの度にif(!error){ ... が重なっていくCのコードみたいに。


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