D言語 Part20

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

■前スレ
http://pc11.2ch.net/test/read.cgi/tech/1217813098/

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

■コンパイラ
http://www.digitalmars.com/d/dcompiler.html (DMD, 本家)
http://dgcc.sourceforge.net/ (GDC, gccフロントエンド)

■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://f17.aaa.livedoor.jp/~labamba/?D%B8%C0%B8%ECBOF (D言語BOF)
ttp://dsource.org/ (dsource)
ttp://tinyurl.com/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動画)
ttp://www.asahi-net.or.jp/~cs8k-cyu/ (ABA Games)

■ IDE
ttp://dronten.googlepages.com/dscite (DSciTE)
ttp://forums.codeblocks.org/index.php?board=20.0 (Code::Blocks)
ttp://www.dprogramming.com/entice.php (Entice Designer)
ttp://www.dsource.org/projects/descent (Descent)
ttp://www.dsource.org/projects/poseidon (Poseidon)
2デフォルトの名無しさん:2008/11/14(金) 13:43:23
過去スレ、関連スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=D%8C%BE%8C%EA&sf=2&all=on&view=table&shw=5000

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

Eclipse統合M26【Java/C/PHP/Ruby/Python/Perl】
http://pc11.2ch.net/test/read.cgi/tech/1224536200/

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/
3デフォルトの名無しさん:2008/11/14(金) 13:45:20
4デフォルトの名無しさん:2008/11/14(金) 19:41:22
>>1
5デフォルトの名無しさん:2008/11/14(金) 20:22:38
早く周辺ライブラリがdmd2.020に対応してくれないかなー
DFLつかえねー
6デフォルトの名無しさん:2008/11/15(土) 01:28:58

うぉるたんかわいいようぉるたん
7デフォルトの名無しさん:2008/11/15(土) 16:36:07
>>6
おっさんだぜ?
8デフォルトの名無しさん:2008/11/16(日) 05:40:16
かわいいオッサン甘く見るなよ
9デフォルトの名無しさん:2008/11/16(日) 14:00:58
LL Futureで見た生のラリー・ウォールは非常にお茶目だったといわざるを得ない
うぉるたんもあんな感じなんだろうか
10デフォルトの名無しさん:2008/11/16(日) 14:23:13
http://www.astoriaseminar.com/astoria_seminar_speakers.html
wikipediaに>1979年にカリフォルニア工科大学を卒業、とあるのでもう50前半ぐらい?
歳取った人の書いたプログラムって命名規則とかモジュールの作り方が今風じゃなくて
なんとなくわかるものだけどD見てると全然そんなの感じないな・・・
11デフォルトの名無しさん:2008/11/16(日) 14:41:23
dmdのコーディング規則は今風ではないと思う。
12デフォルトの名無しさん:2008/11/16(日) 14:45:46
では何風なんだ?
13デフォルトの名無しさん:2008/11/16(日) 14:50:36
馬耳東風
14デフォルトの名無しさん:2008/11/16(日) 18:11:18
今風ってどんな感じ?
15デフォルトの名無しさん:2008/11/16(日) 18:59:40
略語の多用とか関数の引数がやたら多いと古くさい感じがする
16デフォルトの名無しさん:2008/11/16(日) 21:15:49
refを返す関数テンプレートがよく分からん

real t;
ref real f(S)(S rhs) {
        size_t tmp;
        return t;
}

z.f(1.0);
z.f("hoge");

variable f!(double).f.tmp only parameters or foreach declarations can be ref
variable f!(invariant(char[4u])).f.tmp only parameters or foreach declarations can be ref

# 返値を ref T から T にすると通る
# 関数テンプレートでなければ通る
# ローカル変数を作らなければ通る
17デフォルトの名無しさん:2008/11/16(日) 23:22:59
どう見てもバグ
18デフォルトの名無しさん:2008/11/17(月) 00:20:16
なんかもうすぐマルチコア全盛期になって
C言語では生かしきれない、Lisp/Haskelマンセー
って記事を見たんだけど、D言語はこの先生きのこれるのか?
19デフォルトの名無しさん:2008/11/17(月) 00:41:24
どこの記事?
20デフォルトの名無しさん:2008/11/17(月) 00:50:29
本当にCの立場がやばくなるとしたらDの方がまだ戦えるんじゃ
21デフォルトの名無しさん:2008/11/17(月) 01:03:18
我らがDには組み込みのsynchronizeもあることだし、
標準ライブラリにスレッドもあるからCよりはやりやすかろう。
並列化をカプセル化しての隠蔽もやりやすいし、
デリゲートもあるからイベントドリブンなコードを並列化するのもやりやすいと思う。
しかし何より配列演算が定義されたことがうれしい。
あれがあるとないとでは、直感的にベクトル演算が使えるかどうかで大きく差がある。
あとは実装されるのを待つだけだな。
固定長配列の"rectangular"なalignmentも含めてFORTRANを知っている人間ならうれしいはず。
gotoもあるから移植も楽にできるしね。
……やっぱDプログラマって古い作法が好みなのか
22デフォルトの名無しさん:2008/11/17(月) 01:07:20
関数型言語がほんとに並列計算に強いならスパコンあたりで
すでにマンセー状態になっていないとおかしくない?って思うんだけど
23デフォルトの名無しさん:2008/11/17(月) 01:08:49
ピュアな関数型言語はin-placeに値を書き換えることが出来ないから、大規模な数値計算には向かないよ。
24デフォルトの名無しさん:2008/11/17(月) 01:18:34
>>19
なんとかみつけた
ttp://mobile.2chsearch.net/news/1221201654/?guid=ON

主にゲーム開発向けだった
25デフォルトの名無しさん:2008/11/17(月) 01:30:19
matzがerlangを褒めていたときを思い出すな

個人的にはGLSLを隠蔽したいと思ったときがある
expression templateを使って普通の式を書くようにシェーダを記述するとか夢があるなあと。

Cellは設計の概要しか見たことがないが、ローカルストレージの小ささが印象的
アセンブラが書ける人でないとつらいかなという気もするが、
DでもGCを書き換えるか、struct/unionと固定長配列を使い倒せば結構いけると思ったなあ。
26デフォルトの名無しさん:2008/11/17(月) 01:41:38
マルチコアをぶんまわせるようにはなって欲しいな
ところでシェーダといえばCgの次はDgでおk?
27デフォルトの名無しさん:2008/11/17(月) 01:59:00
>>24
乙であります

理想 > 副作用ないから並列化できるぜ、富豪プログラミングマンセー
現実 > in-placeな書き換えがないとメモリ足りん速度も出ないぞゴルァ

こんな感じ?

>>25
C#とHLSLだけどまんまそれやってる人がいるね
ttp://blogs.msdn.com/hiroyuk/archive/2008/10/17/9002752.aspx
28デフォルトの名無しさん:2008/11/17(月) 02:22:45
DTLってまだできないんか…?
標準で便利なコンテナライブラリないとめちゃくちゃ不便なんですけど…
29デフォルトの名無しさん:2008/11/17(月) 02:24:56
Tangoに色々あるよ

DFLがdmd2.020サポートktkr
うまく動いたわほーい
30デフォルトの名無しさん:2008/11/17(月) 03:19:52
Tangoのコンテナライブラリは使い物にならないなぁ…
STLのIteratorみたいにinsertとかremoveとかできないし、種類も足りてないしdelegateでsortできないし。
せめてdcollectionsくらいの性能はほしいなぁ

DFLまじだ…!SVNの更新とかないからどうしたのかと思っていたが…
31デフォルトの名無しさん:2008/11/17(月) 13:53:12
>>28
DTLってまだ開発続いてるの?
ずっと止まってる気がするし誰かが引き継いでいるようにも見えないんだけど…
32デフォルトの名無しさん:2008/11/17(月) 16:00:17
一時期名前を変えて開発されてたような気がするんだけどどうなったかな
33デフォルトの名無しさん:2008/11/17(月) 17:31:00
D言語でDirectXが使いたいので試してみたのですが、
コンパイルエラーが出てしまい、解決できません。

ソースはこちらのをコピペして使っています。
ttp://www.thrudr.net/wiki/index.php?D%B8%C0%B8%EC%2FDirectX%2FCreateDevice

エラーコードはこれ(Poseidonを使ってビルドしています)
C:\dmd\dmd\bin\dmd.exe Main.d -ofDirectXTest d3d9.lib

OPTLINK (R) for Win32 Release 8.00.1
Copyright (C) Digital Mars 1989-2004 All rights reserved.
DirectXTest.obj(DirectXTest)
Error 42: Symbol Undefined _D5win328winerror6FAILEDFiZb
DirectXTest.obj(DirectXTest)
Error 42: Symbol Undefined _D5win327directx9d3d9types13D3DCOLOR_XRGBFhhhZT5win327directx9d3d9types8D3DCOLOR
DirectXTest.obj(DirectXTest)
Error 42: Symbol Undefined _D5win328winerror9SUCCEEDEDFiZb
DirectXTest.obj(DirectXTest)
Error 42: Symbol Undefined _D5win327winuser13CreateWindowWFPxuPxukiiiiT5win325winnt6HANDLET5win325winnt6HANDLET5win325winnt6HANDLEPvZT5win325winnt6HANDLE
DirectXTest.obj(DirectXTest)
Error 42: Symbol Undefined __moduleUnitTests
--- errorlevel 5

dmdのバージョンは2.020、DirectXのヘッダはdsource.orgで落としたのを使っています。
d3d9.libはcoffimplibで変換出来たのですが、
dxguid.libは"not an import library"というエラーが出てしまい、変換出来ません。

どなたかお分かりの方がいらっしゃいましたらご教示下さい...

34デフォルトの名無しさん:2008/11/17(月) 18:51:27
>>33
使っているwin32(とDirectX)ライブラリをコンパイルしてlibファイルを作って、
それもリンクする必要がある。
35デフォルトの名無しさん:2008/11/17(月) 18:54:40
リンカエラーのSymbol Undefined = コンパイル済みobjが見つからないというのは常識ですな
36デフォルトの名無しさん:2008/11/18(火) 00:53:45
newsのTonyってなにもんだ
37デフォルトの名無しさん:2008/11/18(火) 03:30:45
Thread.sleep()ってどんくらい信用できるんだろう?
TimerCallback的なことをThread使ってやろうと思ってるんだけどいい方法あれば教えて下さい。

class CTimerCallback : Thread
{
public:
 this (void delegate() dg) { _dg = dg; super(&run); }
private:
 void run() { sleep(10_000_000_0); _dg(); }
private:
 void delegate() _dg;
}

これで10s後にdg()が動くって認識だけどあってますか?
38デフォルトの名無しさん:2008/11/18(火) 08:12:03
>>36
PASCALとFORTRANの世代でcollege卒でengineerだったと言ってるから、40〜50代の工員さんだろうな。
教育言語について語ってるから指導的立場だろう。
39デフォルトの名無しさん:2008/11/18(火) 08:14:59
>>37
RTOSでない限りは、スレッドのスケジューリングで10秒開けたら平均10秒、標準偏差1秒以内でやってくれる。
忙しい時にそのスケジューリングが守られる保証はどこにもない。
4033:2008/11/18(火) 09:18:39
>>34 >>35
 どうもありがとうございます。やってみます。
41デフォルトの名無しさん:2008/11/18(火) 23:03:24
// dmd 2.020
import std.stdio;
import std.string;
import core.thread;
void main()
{
real r = 12.0L;
string inThread;
string outThread;
auto t = new Thread({
inThread = format("%.20f", r);
});
t.start;
t.join;
outThread = format("%.20f", r);
writefln(inThread); // 11.99999999999999964400
writefln(outThread); // 12.00000000000000000000
assert(inThread == outThread); // core.exception.AssertException@main(17): Assertion failure
}
何でこんな結果に…?
42デフォルトの名無しさん:2008/11/18(火) 23:09:09
>>41
バグ
43デフォルトの名無しさん:2008/11/18(火) 23:43:59
どういうバグだこれー
44デフォルトの名無しさん:2008/11/19(水) 00:21:46
仕様。浮動小数点数は最適化によって値が変わる場合がある。
4541:2008/11/19(水) 00:46:56
コンパイラによる最適化の結果というより実行時の問題ような気がするし、仕様ではない気がするなぁ…。
46デフォルトの名無しさん:2008/11/19(水) 01:30:25
std.formatのassert群(10.0と5.0しか確認してない?)の趣旨からすれば間違いだし、
浮動小数点といえど整数表現可能なものなら精度というのもどうかと思う、
とはいえ桁を数えて引き算したりしてるのかなと思ってソースを読もうとしたが、
最終的にsnprintfを呼んでいたので読む気がなくなった
47デフォルトの名無しさん:2008/11/19(水) 01:31:04
%f じゃなくて、%a で2進数でどう表現されているのか確認した方がいいんじゃね?
48デフォルトの名無しさん:2008/11/19(水) 01:40:19
>>47
それは同じ。
10進数変換時のミスだと思われる。
しかし有効桁数以内の整数なのになあと
49デフォルトの名無しさん:2008/11/19(水) 10:48:06
すでにバグ報告されてるのかどうかわかんねー
どうやって探すかな・・・
50デフォルトの名無しさん:2008/11/19(水) 12:39:39
同じコードからは同じ数が生成されるべき、という理想はわかるが、
現実問題としては、そもそも浮動小数を==で比較するのが間違いの元なんじゃないかと。
「浮動小数 比較」でググるとそういう話がいっぱい出てくる。
51デフォルトの名無しさん:2008/11/19(水) 13:30:42
ちなみに、CやC++で>>41のようなコードを書いた場合、C95や標準C++の仕様では==で一致しないことがあり、C99では一致することが保障されているらしい。
52デフォルトの名無しさん:2008/11/19(水) 13:36:20
いや、そういう問題じゃないし
これはstd.formatのバグ
53デフォルトの名無しさん:2008/11/19(水) 13:37:12
>>50
比較してるのは文字列なんだが^^;
54デフォルトの名無しさん:2008/11/19(水) 13:58:30
丸めの問題だろ?>>51が正しいと思う
55デフォルトの名無しさん:2008/11/19(水) 19:27:52
いや、演算してないから丸めが行われること自体バグなんだが
56デフォルトの名無しさん:2008/11/19(水) 19:28:36
とりあえず逆アセンブルして確かめてみればどうなのさ
57デフォルトの名無しさん:2008/11/19(水) 20:11:29
ウチのKubuntu8.04で走らせたら同じ値だった
5841:2008/11/19(水) 20:48:24
>>44の言いたいことが>>50のレスで理解できた。
でも、文字列と数値の変換の段階で再現性が出ないというのは
保存とかのあたりで困るので、やっぱりバグにしておきたい気分だね。

12.0という値をiniとかxmlに保存するとき、
容易に編集可能な"12"という文字列と、
Base64エンコードされた"AAAAAAAAAMACQA=="とかいう文字列
前者がいいと思うのは俺だけではないハズ。
編集させたくない場合はエンコードでもいいと思うけど。(バイナリファイル使えよとも)
59デフォルトの名無しさん:2008/11/20(木) 02:51:11
どう見ても普通の浮動小数点の丸めの話と全く違うんだが、
なんでそういう方向に話が行ってるんだ?
同じ入力からは同じ出力が出ないとおかしいだろ。

12 は 1.8p+3 で表現できてるから、2進-10進変換問題とも微妙に違う気がする。
どっかで80bit精度失うようなことしているんだろうか?
60デフォルトの名無しさん:2008/11/20(木) 06:54:34
2.020の参照返し出来る関数使って、
ただアクセスするだけのプロパティを関数一つで出来そうだなと思ったんだけど、

class A
{
private int n;
ref int count()
{
return n;
}
}

auto a = new A;

a.count() = 5;//呼び出しに括弧つけないとプロパティ用意しろと怒られる

これ括弧取れるようにならないかなぁ…
void size(int m)とかあればそっち優先なのは分かるんだけども、
通常引数が無い奴は省略できる構文規則があるはずだよね…

構文解析の時に関数がマッチしなかったら、
先にプロパティとして呼び出し規則適用してみる、とかできないのかな
61デフォルトの名無しさん:2008/11/20(木) 09:05:30
>>60
俺は関数コールで()をつけなくていいっていうこと事態がキモイんで
早く直してほしいと祈るばかりです
62デフォルトの名無しさん:2008/11/20(木) 12:30:39
プロパティはプロパティとしてちゃんと構文用意して欲しいわぁ。
というかJava7のプロパティ、
アレならprivateプロパティ使えばメンバ変数はもう要らなくできるんじゃ……
Dならメンバ変数と同レベルまで最適化できるはずだし
63デフォルトの名無しさん:2008/11/20(木) 13:15:45
プロパティのコード・バイナリの最適化について考えたことはあるが、

・メンバ変数への直接get/setとしてほしい場合
・get/setのどちらかが直通になって片方は関数を噛ませる場合
・プロパティをインターフェースに記述した際の、変数アクセスと関数アクセスのオーバーライドと選択

この辺を整理すると結構面倒なことは確か。
64デフォルトの名無しさん:2008/11/22(土) 12:47:30
更新まだ?
65デフォルトの名無しさん:2008/11/22(土) 13:09:31
まーだだよ
66デフォルトの名無しさん:2008/11/22(土) 13:38:28
もーいーかい
67デフォルトの名無しさん:2008/11/22(土) 14:37:52
まーだだよ






まーだなの?
68デフォルトの名無しさん:2008/11/22(土) 14:48:23
導入しやすいDirectXラッパライブラリ教えてくれ〜
69デフォルトの名無しさん:2008/11/22(土) 15:12:16
なくね?
70デフォルトの名無しさん:2008/11/22(土) 15:29:37
dHellはSDLラッパだったか
71デフォルトの名無しさん:2008/11/23(日) 04:13:17
DってC++とDの部分に分かれてるけどどうやって処理してるの?
72デフォルトの名無しさん:2008/11/23(日) 05:08:20
限られた条件の下であればC++の関数やクラスとリンクできるとか言うやつなら知ってるが・・・
73デフォルトの名無しさん:2008/11/23(日) 08:01:06
分かれてる?なんのことだろう
74デフォルトの名無しさん:2008/11/23(日) 09:21:55
CとC++の区別がついてないとか
75デフォルトの名無しさん:2008/11/23(日) 09:44:50
dmdのソースのコメントに//が使われてるよ!


……あれ? ヘッダ内でstruct内に普通にメンバ関数っぽく関数宣言があるけど、
Cってstructの中に関数をメンバとして書けたっけ? DMの拡張?
76デフォルトの名無しさん:2008/11/23(日) 09:50:03
コンパイラがCでライブラリがDで書かれてるって話じゃないのか
77デフォルトの名無しさん:2008/11/23(日) 11:27:58
dmdはC++を使って書かれてるっぽいね。thisとかあったし
//に関しては最近のC言語だと使えるはず
78デフォルトの名無しさん:2008/11/23(日) 11:40:01
dmdコンパイラはC++で書かれてるよ
ライブラリは当然Dだよ
79デフォルトの名無しさん:2008/11/23(日) 11:52:01
ところでgdcのほうは最近なんで動きが無いんだろう?
80デフォルトの名無しさん:2008/11/23(日) 12:46:11
忙しいって話だったはず。
81デフォルトの名無しさん:2008/11/23(日) 17:06:29
適当に書きすぎた

今手元にあるのは2.020っていうバージョンなんだけど
srcフォルダの中にdmdっていうのと、druntimeの下にもdmdっていうのがあるじゃん?
前はC++で後ろはDだと思うんだけどこれってどう繫げてるのかなって。
C++の方は構文解析とかでDの方はオブジェクトとかの内部実装に見えるんだけど
82デフォルトの名無しさん:2008/11/23(日) 17:09:31
>>81
CallExpなど+リンカで。というかソース嫁。
83デフォルトの名無しさん:2008/11/23(日) 20:35:13
確かにextern (C)ってついてるから普通に出来るっぽい
84デフォルトの名無しさん:2008/11/23(日) 20:43:00
>>81
druntimeの下のはライブラリだ。
コンパイラ(src/dmd, C++)とリンクされるものじゃなくて
dmdでコンパイルした*.dとリンクするためのもの
85デフォルトの名無しさん:2008/11/23(日) 21:00:42
どうもTangoのUnicodeBomのEncoding.UTF_8NがBOM有のほうを指してるんだが…
日本人感覚から行くと違うよな?
指摘しようにもどこでいえばいいのかわからん…匿名でのバグ報告ってできないのか?
86デフォルトの名無しさん:2008/11/23(日) 21:12:23
>>82
>>84
思いっきり勘違いしてた。
C++からDに書き直しているんだと思ってて、どうなってんだろうと
すっきり出来た、有難う。
87デフォルトの名無しさん:2008/11/23(日) 21:15:17
>>86
ちなみにDで書かれたdmdfeが欲しいならdparserってのがある。
8887:2008/11/23(日) 21:16:53
89デフォルトの名無しさん:2008/11/23(日) 21:21:43
お前らdmdfe/dparserって要するに何ですか
gccとかと連携取れるの?
90デフォルトの名無しさん:2008/11/23(日) 21:28:56
gccとの連携はgdc、llvmとの連携はldcがある。
dmdfeはdmdのフロントエンド部分をコンパイルできるようにしたもので、それをD言語に直した物がdparserね…といいたいのだが、何かdparserにllvm_backendの文字が…。
91デフォルトの名無しさん:2008/11/23(日) 21:48:18
もう少しだけ教えてください
どんな形式で抽象構文木を出力するの?
92デフォルトの名無しさん:2008/11/23(日) 21:55:11
つ lexer.c, parse.c
ちなみにパーサは再帰下降の手書きパーサね。
93デフォルトの名無しさん:2008/11/23(日) 21:59:16
>>92 thx 読んでみる
94デフォルトの名無しさん:2008/11/23(日) 22:59:29
DUnitでぐぐったら見つかったから一瞬ウヒョーって思ったけど、
よく見たらdelphi用だった。
95デフォルトの名無しさん:2008/11/24(月) 00:12:49
>>94
http://dsource.org/projects/dmocks/wiki/DUnit
DUnitはアナウンスがあったばっかでまだバージョンは0.2
まだまだかなぁという感じ
96デフォルトの名無しさん:2008/11/24(月) 03:03:43
そもそも、unittest 構文があるのに必要なのかと。
97デフォルトの名無しさん:2008/11/24(月) 03:38:09
win32.commctrlをインポートするとコンパイル時にエラー吐くんですが
安定したバージョンって無いですかね?
98デフォルトの名無しさん:2008/11/24(月) 08:21:27
>>97 コンパイラが新しすぎるんじゃね
99デフォルトの名無しさん:2008/11/24(月) 11:09:17
>>96
あれだけじゃユニットテストは出来ないよ
総合件数、成功件数、失敗件数、失敗メッセージを羅列するようなのが必要
assertで一回失敗しただけで止まるようなのは困る
100デフォルトの名無しさん:2008/11/24(月) 16:13:41
>>99
assert しなければ良い、とかじゃなく?
UnittestAssert みたいなの定義して、件数カウントしたりメッセージ保持したり
するシステム作れば。
というか、そういうことをしてくれるのが DUnit ってことか?
101デフォルトの名無しさん:2008/11/24(月) 16:15:59
unittest{}のassertは全部実行して欲しいな
102デフォルトの名無しさん:2008/11/24(月) 16:59:46
Dってコンストラクタとかで変数の初期値を決めた値を変更できないようにできる?
ロックとかそういうのじゃなくて
staticとconstの中性的な存在
103デフォルトの名無しさん:2008/11/24(月) 17:03:05
>>102
const
104デフォルトの名無しさん:2008/11/24(月) 17:04:35
出来るのか、サンクス
105デフォルトの名無しさん:2008/11/24(月) 17:04:45
C#でいうreadonly的なモノかな
106デフォルトの名無しさん:2008/11/24(月) 17:45:06
>>105
そうそう、これです。
初期化を死ぬまで忘れない、
first impression never forgetな感じです。
107デフォルトの名無しさん:2008/11/24(月) 18:48:13
>>99
そもそも unittest には assert 使わなければならないなんて仕様はないわけだが。
まぁ、他のライブラリで assert 突っ込んであって、止まるってのはありがちだけど。

ちゃんとテスト管理してるやつはそのくらい自前でやってるだろ。
108デフォルトの名無しさん:2008/11/24(月) 19:11:50
すみません、ちょっと質問させてください。
Tango & DFLを使っています。
"main.d"

import win32.core;

void main()
{
 Beep(440, 1000);
}

というのを"dfl -gui main.d"だとうまくコンパイルできるのですが、
"dsss build -gui main.d"とすると
C:\tango\bin\..\import\win32\winnt.d(47): template instance
forward reference to template declaration CPtr(T)
とエラーが出ます。どうすればいいでしょうか。
109デフォルトの名無しさん:2008/11/24(月) 20:02:48
template instance forward reference to template declaration CPtr(T)
110デフォルトの名無しさん:2008/11/24(月) 20:31:17
>>106
http://www.kmonos.net/alang/d/2.0/const3.html
>初期化子を与えていない場合、 invariant を対応するコンストラクタで初期化することが可能です:
例がstatic thisで分かり難いけど一応書いてある

>>107
自前もいいけど共通なテストライブラリは欲しいとは思う
assertだけじゃなくて,Mockとかbehaviorなものとか
111デフォルトの名無しさん:2008/11/24(月) 20:46:33
>>108
バージョンの情報とかがないから何とも言えませんが
dsssの問題かもしれません。dmdだけでいけるか試してみるといいと思います。
その程度のコードなら
dmd win32.lib main.d
とかでいけるはず。
112デフォルトの名無しさん:2008/11/24(月) 21:16:07
>>109
「テンプレートの宣言の前にテンプレートが参照されている」
ということでしょうか?
win32\basetsd.dを修正してみたところ、うまくいきました。
ありがとうございます。
113デフォルトの名無しさん:2008/11/24(月) 21:18:17
>>111
その方法でも大丈夫ですね。
ありがとうございます。
114デフォルトの名無しさん:2008/11/25(火) 15:53:44
C#がネイティブ吐いてくれればいいのに
115デフォルトの名無しさん:2008/11/25(火) 20:05:53
更新マダァァァァァァ
116デフォルトの名無しさん:2008/11/26(水) 01:52:53
C#はインテリセンスを出しやすいように考えられたと聞いたがDはどうなのだろう
117デフォルトの名無しさん:2008/11/26(水) 02:12:45
IDEが事実上存在しないDにどうしろとw
118デフォルトの名無しさん:2008/11/26(水) 03:40:41
結局、文字列mixinの最凶っぷりの前に伝説のIDEでさえも屈するわけだが、っていうのがいつもの流れだな
119デフォルトの名無しさん:2008/11/26(水) 06:35:04
C++erは文字列mixinが導入されたりしたら喜ぶの?絶望するの?
120デフォルトの名無しさん:2008/11/26(水) 08:38:51
そもそも、いつもプリプロセッサマクロ使っているんだから、
文字列 mixin が増えたところで
単にめんどくさい機能が増えたくらいの印象だろう。
新機能増えてもしばらく移植性ないから使えないし。

新機能増えて移植性下がって喜びまくるのはD言語くらいだぜ。
121デフォルトの名無しさん:2008/11/26(水) 08:42:50
122デフォルトの名無しさん:2008/11/26(水) 11:56:28
きたー
ちゃんとバグ投票の結果が拾われているようだ
123デフォルトの名無しさん:2008/11/26(水) 13:01:29
*Exceptionを*Errorに変えたってか・・・うーん
124デフォルトの名無しさん:2008/11/26(水) 13:05:26
>>123
OutOfMemory以外のエラーはコーディングのエラーだからから悪くないと思うが。
でも何でOutOfMemoryまで?
125デフォルトの名無しさん:2008/11/26(水) 16:13:19
onRangeError存在しねー?
126デフォルトの名無しさん:2008/11/26(水) 16:18:31
またsc.ini変わってるな
前のdruntimeは削除
sc.iniをdruntimeからruntimeへ
127デフォルトの名無しさん:2008/11/26(水) 17:53:22
今回の変更がよく分からないよウォルタン! 誰か解説ぷりーず。

何気にdruntime分離したけどやっぱりそのうちlibphobos2.aに統合するよって書いてある?
128デフォルトの名無しさん:2008/11/26(水) 20:40:19
その理解は英語能力的にやばいだろ
129デフォルトの名無しさん:2008/11/26(水) 22:00:25
-safeスイッチってなんだ? safe memory model…?
ちょっとググろうとしたけど産総研のCコンパイラとか出てきたりよくわからなかった…誰か解説ぷりーず
130デフォルトの名無しさん:2008/11/26(水) 22:04:11
131129:2008/11/26(水) 23:24:28
つまり、module(safe)は、ポインタの操作のような危険なことをしているけれど
外部から見たらそれを隠蔽してSafeDのように動作するという保証をつける、ということかな?
んで、-safeスイッチはSafeDのみのコードで構成することを強制するってことかな?
132デフォルトの名無しさん:2008/11/26(水) 23:30:45
version `GLIBC_2.4' not found (required by dmd)
orz lenny入れるか
133デフォルトの名無しさん:2008/11/27(木) 01:19:09
>>128
畜生やっぱダメなんだーぁ俺の英語力じゃその程度なんだー


くっそぉー、明日こそ正しい翻訳を……
134デフォルトの名無しさん:2008/11/27(木) 02:01:59
実数の区間を表現する構造体を作りたいのですが、
開区間を閉区間の設定を(正しくない用法と知りつつ)opCall, opIndexで代用しています。
 interval[min, max]

この方法だと半開区間が表現できないし汚いので、なにかうまい方法がないかなと模索しています。
実装が必要なだけなら上限加減と両者の開閉の4引数関数を作るだけでいいのですが、
Dらしい変態的方法があればなあと存じます。
135デフォルトの名無しさん:2008/11/27(木) 02:04:50
std.random.UniformDistributionを参考にしてはいかがだろう
136デフォルトの名無しさん:2008/11/27(木) 06:23:08
ChangeLogにThis breaks existing code. とか書いてあるとやっぱりちょっと安心してしまうな。
137デフォルトの名無しさん:2008/11/27(木) 15:51:41
>>134
文字で渡すとか
138デフォルトの名無しさん:2008/11/27(木) 18:28:31
D 用の wxWidgets ってありますか?
139デフォルトの名無しさん:2008/11/27(木) 18:32:47
wxD
140デフォルトの名無しさん:2008/11/27(木) 20:30:46
DMDでコンパイルしたやつってかなりサイズ大きくなるよな。
だいたい同じ機能のプログラムをVC++でコンパイルしたものとDMDでコンパイルしたもの
を比べると1桁サイズが違ってワロタ
141デフォルトの名無しさん:2008/11/27(木) 21:59:19
>>140
それはVCランタイムは外部DLLを使うようになってないか?
あとDMDはリリースコンパイルしてる?
それなら差は100KB以下になるはず
142デフォルトの名無しさん:2008/11/28(金) 00:09:26
>>140
らんた(ry
143デフォルトの名無しさん:2008/11/28(金) 01:14:29
Dも任意でcrtdll.dllとかを使うようにできないかな
144デフォルトの名無しさん:2008/11/28(金) 01:24:28
>>143
ユーザサイドの努力では辛いものがあるような
145デフォルトの名無しさん:2008/11/28(金) 12:05:48
これらをstd.conv.toに統一しないのかな
std.string.toString
std.conv.toXxxxxx
146デフォルトの名無しさん:2008/11/28(金) 15:07:42
ようやくコンパイルまでたどり着いたけどファイルが複数あるときはどうすればいいんだろ、うまくいかない
----------------------------------
// hello.d
import std.stdio;
import hello2;
int main(char[][] args){
int z = hello2();
writef(z);
return 0;
}
-^--------------------------------
// hello2.d
int hello2(){ return 0;}
----------------------------------
>C:\Dev\DSciTE\bud.exe -DCPATHC:\Dev\DSciTE\dmd\bin -IC:\Dev\DSciTE\lib -I.. -I..\.. -full -debug -g -unittest -w hello.d

hello.d(5): Error: function expected before (), not module hello2 of type void
>Exit code: 1
147デフォルトの名無しさん:2008/11/28(金) 15:29:51
そのhello2には暗黙にmodule hello2;ってされていて、
モジュール名と同じ名前の関数は定義できない
148デフォルトの名無しさん:2008/11/28(金) 16:22:10
クラス定義でテンプレートmixinがprivateで修飾出来ないのは仕様か
出来ないなら無駄な宣言に警告でも出してくれればいいのに…
149デフォルトの名無しさん:2008/11/28(金) 17:58:27
>>147
上手くいった、ありがとう・・・本当に・・・ありが・・・と・・・ぅ・・・
150デフォルトの名無しさん:2008/11/28(金) 18:31:43
指定フォルダ以下のすべてのファイルのパスってどうやって取得するの?
151150:2008/11/28(金) 18:56:42
自己解決しました
//std.file
foreach (string name; dirEntries("destroy/me", SpanMode.depth)){
writef(name);
}

http://www.kmonos.net/alang/d/2.0/phobos/std_file.html
152デフォルトの名無しさん:2008/11/29(土) 11:57:20
もう誰かforeachの変更を解析した?
153デフォルトの名無しさん:2008/11/29(土) 20:04:31
やってることはforeachからforへの書き換えだよ
154デフォルトの名無しさん:2008/11/29(土) 21:03:49
155デフォルトの名無しさん:2008/11/29(土) 21:22:32
Rangeとして集合っぽい型そのものを与えるのは苦労しそうな予感。
既存のものを非破壊的に拡張するには foreach(iter; agg.iter) が一番楽なのかな
156デフォルトの名無しさん:2008/11/29(土) 22:02:38
DのRangeはnext/retreatすると勝手に短くなるから、
後で使いたいならコピーをとっとかないといけないのか。
157デフォルトの名無しさん:2008/11/29(土) 22:08:16
空レンジの判定はdoneだった気がしたが、やっぱりemptyにしたのか。
158デフォルトの名無しさん:2008/11/30(日) 00:48:32
>>156
それは辛いぞ
159デフォルトの名無しさん:2008/11/30(日) 11:46:11
配列を後置で宣言する人っているの?
前置(int[] a;)と後置(int a[];)があるって余計な気がする。
160デフォルトの名無しさん:2008/11/30(日) 12:33:50
Cのコードをコピペするときようの機能だろ。
161デフォルトの名無しさん:2008/11/30(日) 13:10:10
ふとやってみてわろた
void main(){
    {
        int[] a,b;
    }{
        int a[], b[];
    }{
        int a[], b;
    }
}
a.d(6): multiple declarations must have the same type, not int[] and int[] <=== ちょ
a.d(8): multiple declarations must have the same type, not int[] and int
162デフォルトの名無しさん:2008/11/30(日) 14:48:43
dmd/srcフォルダに*.cファイルがある位だしな
163デフォルトの名無しさん:2008/11/30(日) 14:53:27
それは関係ないと思うよ
164デフォルトの名無しさん:2008/11/30(日) 17:29:41
初歩的な質問だと思うけどなぜか動いてくれない、左項の char[] a が静的配列になってるのかな?

>import std.stdio;


>int main(){

> char [] a = "123";

> return 0;

>}


>test.d(4): Error: cannot implicitly convert expression ("123") of type invariant(char[3u]) to char[]


>>163
ガーーン
165デフォルトの名無しさん:2008/11/30(日) 17:33:08
>>164
文字列リテラルの型は、invariant(char[N])
これは、char[]に変換できない。

const char[] a = "123";
char[] a = "123".dup;

のどちらかにする必要がある。
166デフォルトの名無しさん:2008/11/30(日) 17:40:30
char[] a = "123";
じゃなくて
string a = "123"; // string is invariant(char)[]
const(char)[] a = "123";
const(char[]) a = "123";
const char[] a = "123";
を使うべし
string推奨
167デフォルトの名無しさん:2008/11/30(日) 17:52:39
>>165
動いたー、ありがとー

どっかのサイトをコピペしたコードも動かなかったけど、どこのサイトだったんだろ。
これもD2.0になってからの仕様変更かな。
168デフォルトの名無しさん:2008/11/30(日) 18:23:12
const char[] と string にフォルダパスいれてから、mkdirを試したけどstringは動いてconst char[]はエラーだった。

D_Try.d(6): function std.file.mkdir (const(invariant(char)[])) does not match parameter types (const(char[]))

とりあえず文字列はstring使ってみます。
169デフォルトの名無しさん:2008/11/30(日) 19:00:10
やっとなんとかDirectXのプログラムをビルドできるようになったのですが、
今度プログラムを分割して、複数のファイルから
import win32.DirectX.d3dx9;
というようにインポートしたところ、
module win32.directx.d3dx9 is in multiple packages win32.directx.d3dx9
というようなエラーが出るようになってしまいました。
初歩的な問題で申し訳ありませんが、どなたか対処法を教えて下さい。
170デフォルトの名無しさん:2008/11/30(日) 19:44:36
/* foo\hage.d */
module foo.bar;

/* foo\hoge.d */
module foo.bar;

/* main.d */
import foo.bar;
void main(){}

module foo.bar is in multiple packages foo.bar
171デフォルトの名無しさん:2008/11/30(日) 20:09:57
>>168 mutable/const/invariantの変換規則はこう
constは何でもそのまま受けられる
void main(){
char[] m;
const(char)[] c;
invariant(char)[] i;

char[] mm = m;
char[] mc = c.dup;
char[] mi = i.dup;
const(char)[] cm = m;
const(char)[] cc = c;
const(char)[] ci = i;
invariant(char)[] im = m.idup;
invariant(char)[] ic = c.idup;
invariant(char)[] ii = i;
}
172169:2008/11/30(日) 20:14:50
自己解決しました。モジュール名を
import Win32.DirectX.d3dx9;
と大文字にしていたのがまずかったようです。
import win32.directX.d3dx9;
と小文字に統一したら通りました。
お騒がせして申し訳ありませんでした。
173デフォルトの名無しさん:2008/11/30(日) 22:43:49
foreachのrangeだけ特別扱いするんじゃなくて
c++0cのconcept_map相当を導入できないもんかな
174デフォルトの名無しさん:2008/11/30(日) 22:49:56
alias invariant(char)[] string;
って要るの?
175デフォルトの名無しさん:2008/11/30(日) 22:53:11
>>174
どういう意味か分からんけど、object.dに書かれているので自分で宣言する必要は無い。
176デフォルトの名無しさん:2008/11/30(日) 23:55:32
>>173
コンセプト導入するよ!とかいつか言い出すかもしれない
177デフォルトの名無しさん:2008/12/01(月) 00:13:55
stringとchar[]はについては、特定のメモリ列を管理したいわけでなく、
どこかから持ってきた文字列を切り貼りすれば事足りるなら、
迷いなくstringでいいと思われ。

>>171
constはスコープの中では書き換えないという表明ですからな。
書き換える予定がある(constでもinvariantでもない)なら書き換えてはいけないもの(constやinvariant)は渡せないが、
書き換える予定がない(const)なら書き換える予定のものも書き換えてはいけないものも渡せる。
178デフォルトの名無しさん:2008/12/01(月) 17:58:13
みんなstringとかchar[]って文字数どうやって取得してるの?
179デフォルトの名無しさん:2008/12/01(月) 19:50:03
.lengthじゃダメ?
180D2.0 Phobos:2008/12/01(月) 20:29:52
テキストファイルを一行ずつ読みたいんだけど・・・そんな関数ないんだ・・・
181デフォルトの名無しさん:2008/12/01(月) 20:34:21
std.streamのFileでreadLineとか使えなかったっけ?
182デフォルトの名無しさん:2008/12/01(月) 20:38:21
ふつうにstd.stream.Fileをforeachに食わせればいい。
183デフォルトの名無しさん:2008/12/01(月) 20:39:08
>>178
マルチバイトとか考えるのならstd.utfで正しいシーケンスかどうかは確認できる
184デフォルトの名無しさん:2008/12/01(月) 20:53:05
一度CやプラスなどやってからDのリファレンス読んだらいい
185180:2008/12/01(月) 20:53:11
>>181>>182
ありがとう、できるんだ、D始めたばっかりだけど、びっくりした
186デフォルトの名無しさん:2008/12/01(月) 23:29:07
Tangoで1行だけ読みとろうと思ってえらくハマった。
原因を追究した結果、TangoのUnicodeBomのソースが2か所間違ってることがわかった。
それがD言語です。
187デフォルトの名無しさん:2008/12/01(月) 23:35:57
variantがポインタを格納できないときはマジびびった
188デフォルトの名無しさん:2008/12/02(火) 00:18:52
stringをtoMBSz()でマルチバイト文字に変換した後の
文字列長ってどうやってとればいい?
189デフォルトの名無しさん:2008/12/02(火) 00:34:01
lstrlen関数というプラットフォームSDKの関数。
関数名でググればすぐに詳細が見つかるはず。
もしくは、\0で終わっているはずだから
int len;
while (str[len] != '\0') len++;
とかすればいいと思うよ
190デフォルトの名無しさん:2008/12/02(火) 14:14:22
D言語は人気上昇中だな、D選んで良かった

Programming Language Usage Graph
http://www.cs.berkeley.edu/~flab/languages.html
191デフォルトの名無しさん:2008/12/02(火) 14:20:42
TIOBE出せよw
ttp://www.tiobe.com/index.php/paperinfo/tpci/D.html

まあ、次世代言語としては期待を持たれているが、実用品としてはまだまだ普及していない、ということですな。
192190:2008/12/02(火) 14:40:35
JavaScriptとRubyに次いで12位なんだ、どこで使われてるか分からないけど意外と頑張ってる。
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
193デフォルトの名無しさん:2008/12/02(火) 15:33:47
TIOBEはcommunity indexなんで、使われているかどうかはともかく、
news groupeが盛り上がっていれば数字が上がる
194デフォルトの名無しさん:2008/12/02(火) 17:02:09
int strlen(char*);だからchar*がUTF8じゃないのか・・・うーん
195デフォルトの名無しさん:2008/12/02(火) 19:03:54
テキスト置換ツール作ったけど、Rubyの方が立ち上がりが早い気がする
196デフォルトの名無しさん:2008/12/02(火) 19:10:34
気がする、とかいわれてもw
197デフォルトの名無しさん:2008/12/02(火) 19:19:55
何度も起動して比べたけど、
Rubyは一瞬で起動・処理して終了するけど、Dは1・2秒処理まで間が空く
Rubyってなんか常駐してたっけ。
198デフォルトの名無しさん:2008/12/02(火) 19:29:21
正規表現使ってないか?D のはクソとろいぞ
正規表現使いまくるなら外部ライブラリ使ったほうがいい
199デフォルトの名無しさん:2008/12/02(火) 19:39:49
ワイルドカード?なら一箇所使ってる。

foreach (string path; listdir("source", "*.html")){ (ry }

・・・書いてて気づいた、Dの方がフォルダを深く検索してる。sourceフォルダだけでいいのに。
200デフォルトの名無しさん:2008/12/02(火) 20:08:02
>>189
やっぱりWin32APIつかわんとだめか。
なるだけDで完結させたかったんだが、そういうところcharがUTF8になったおかげで
不便になったなぁ。

std.encodingとかがその辺解決してくれんのかね。
201デフォルトの名無しさん:2008/12/02(火) 20:12:37
つ strlenの再発明
202デフォルトの名無しさん:2008/12/02(火) 20:18:56
foreach(string path; dirEntries("source", SpanMode.shallow)) {
で行けるが、パターンマッチを逐次人力で行う必要があるな
if書いてcontinueするだけとは言え
203デフォルトの名無しさん:2008/12/02(火) 20:28:26
使ったこと無いけどstd.utfのtoUCSindexとか?
204デフォルトの名無しさん:2008/12/02(火) 20:37:05
>>200
toMBSzで変換後もinvariant(char)*ならfromMBSzで低コストで配列として読めるはず
日本語も使うならむしろtoUTF16zとWin32 APIのワイド文字関数(Wで終わるやつ)を組み合わせた方が安全
しかし古ハングルとかいう非実用的な文字を5千字もねじ込んでUTF-16の固定長性を破壊した韓国は万死に値する
サロゲートペアを無視すればいいのだが、セキュリティーホールになる可能性を考えるとやりたくないのが実情
205デフォルトの名無しさん:2008/12/02(火) 20:39:44
>>200
toMBStringの再発明しかないな。
ポインタで返すからいけないんであって、配列を返せばいい。
206デフォルトの名無しさん:2008/12/02(火) 21:18:56
std.windows.charsetはシグネチャおかしいし
再発明したほうがよさそうだよね。
207デフォルトの名無しさん:2008/12/02(火) 22:24:09
import std.stdio;

void main() {
writefln("test.");
}

-----------------------
dmd test.d -release -inline -w

  _, ._
( ゚ Д゚)

208デフォルトの名無しさん:2008/12/02(火) 22:38:17
>>207
これってどういうこと?
どれか一つでもオプション削れば通るし
209デフォルトの名無しさん:2008/12/02(火) 23:03:41
>>178 文字数ってバイト数じゃなくて文字の数?
210デフォルトの名無しさん:2008/12/02(火) 23:19:25
>>208
いまさらというかDっぽいというか、
標準ライブラリが警告に引っかかるってどうよ?
211デフォルトの名無しさん:2008/12/02(火) 23:28:20
phobosは長らく-w付きでコンパイルできなかった。
212デフォルトの名無しさん:2008/12/02(火) 23:44:42
overrideが書いてないって文句言われまくりだったな
213デフォルトの名無しさん:2008/12/02(火) 23:59:09
>>199
windows版のlistdirfやdirEntriesは、必要ないのにファイルスタンプを毎回取得するから、
それで信じられないくらい遅かったりするのだが、それは関係……なさそうだな
214デフォルトの名無しさん:2008/12/03(水) 18:14:40
任意のクラスの値コピーが欲しい場合はどうやるのでしょうか
215デフォルトの名無しさん:2008/12/03(水) 18:57:55
>>214
値を一個ずつコピーする
216デフォルトの名無しさん:2008/12/03(水) 19:51:02
>>215
ひでえw Dならタプルで美しくできるだろ
217デフォルトの名無しさん:2008/12/03(水) 19:53:43
tupleofは構造体にしか使えなかったはず。クラスの場合はABI見ながらvoid*にキャストしてコピーが一番美しい。
218デフォルトの名無しさん:2008/12/03(水) 20:07:40
>>204
ちょっと俺には難しい話はよくわからんのだがワイド文字使えってことだよね。
まぁそうしたほうがいいんだろうけど。

結局、sjisの文字列の長さを数えるにはubyte*にキャストして\0までを数える
くらいしか今のところ方法はない?
219デフォルトの名無しさん:2008/12/03(水) 20:53:30
それで何の不都合があるの?
220デフォルトの名無しさん:2008/12/03(水) 21:27:32
string s = "abcあいう";
s.length -> 12
hogelen(s) -> 6
配列の長さも重要だけどUnicodeが文字というなら文字列長を標準ライブラリ(ry
221デフォルトの名無しさん:2008/12/03(水) 21:41:46
>>220
Unicodeでは組み合わせ文字とかあるから「文字」数に大した意味がないんだよ。
222デフォルトの名無しさん:2008/12/03(水) 21:53:52
「文字」の単位を扱えんと、ユーザに対して「何文字目がアレです」とか表示することすら出来んぜ……
Unicodeの突っ込んだ部分はロクに知らんけど、1文字という単位をそんな簡単に放棄できるもんなのか?
223デフォルトの名無しさん:2008/12/03(水) 21:55:09
昔、メンバ変数を構造体にすると書いたら不評だったなあ。
224デフォルトの名無しさん:2008/12/03(水) 22:23:48
使わないけど、std.string.cmp()の規則性がよくわからない。文字列の比較って他の言語でもこうなの?

import std.stdio , std.string;
void main(){
 writef( cmp("ooo","ooo")); //0
 writef( cmp("ooo","oxo")); //-1
 writef( cmp("ooo","oxx")); //-1
 writef( cmp("ooo","oooooo")); //-3
 writef( cmp("ooo","ooxxxx")); //-1
}
225デフォルトの名無しさん:2008/12/03(水) 22:30:44
>>222
そのユーザってのはどういうレベルの人種を意図してるのかわからんけど、
プログラマならとりあえずUTF-32のコードポイント数を教えとけばいいと思うよ。

視覚的な文字数が必要なら、膨大な文字情報データベースが必要になって
標準ライブラリに入れられるようなもんじゃないと思う。
226デフォルトの名無しさん:2008/12/03(水) 22:32:59
>>224
0か負か正で順序を返す関数だから、-1と-3に深い意味の違いはないよ。
227224:2008/12/03(水) 22:40:46
なんだ、30分くらい悩んでた
228デフォルトの名無しさん:2008/12/04(木) 01:36:04
文字コード周りはどれもウンコなので、みんな結局再発明してるんじゃないのか。
229デフォルトの名無しさん:2008/12/04(木) 18:08:18
ctagsのD言語パッチがあるので使ってみた。
http://www.prowiki.org/wiki4d/wiki.cgi?ReferenceForTools/ExuberantCtags
日本語版にパッチを当ててみたが、うまく動作することを確認した。
しかしc.cを拡張しているからなのか、classのメンバはタグが作られていなかった。
本家でオフィシャルでサポートしてくれれば、状況は改善するだろうが……。
230デフォルトの名無しさん:2008/12/04(木) 20:32:10
こんにちは。
Dをはじめようと思い、以下のソースを書きました。

import std.stream;
import std.cstream;

void main()
{
File inp = new File("input.txt", FileMode.In);
File oup = new File("output.txt", FileMode.OutNew);

foreach( string line; inp )
{
oup.writeLine(line);
dout.writeLine(line);
}
}

が、std\std.stream が見つかりませんエラーが発生します。
なぜなんでしょうか?
dmd1.030 を展開した状況でコンパイルしております。
231デフォルトの名無しさん:2008/12/04(木) 21:43:53
とりあえずimportさせるパスの指定でしょうな。
コマンドラインから?
232デフォルトの名無しさん:2008/12/04(木) 21:51:05
最近どこかで取り上げられたりとかでもしたのか?
233デフォルトの名無しさん:2008/12/04(木) 22:43:14
10日まえからD言語はじめたけど、ドキュメントが少ないから詰まるとここで質問してる。
始めたきっかけは思い出せない。
234デフォルトの名無しさん:2008/12/04(木) 23:14:19
オフィシャルのドキュメントがあれば大抵のことはできる気がするが、
まあ、「D言語を題材としたプログラミング例」が少ないのは確かですな。
235デフォルトの名無しさん:2008/12/05(金) 00:50:01
>>230
sc.iniのDFLAGSどうなってるよ
236デフォルトの名無しさん:2008/12/05(金) 01:01:07
ちなみにsc.iniは(インストールフォルダ)\dmd\bin\sc.iniにある。
237デフォルトの名無しさん:2008/12/05(金) 09:07:16
ちなみに、オフィシャルのdownloadページにある、スナップショットをダウンロードしました。
>>231
はい、インストールできたか確認をするために、簡単なものを確認しました。


>>235
DFLAGS="-I%@P%\..\import" -version=Tango -defaultlib=tango-base-dmd
-debuglib=tango-base-dmd

となっております。
これかなあ・・・phobosがないですし
238デフォルトの名無しさん:2008/12/05(金) 09:38:29
D言語・Tango・dflで作ったソフトって商用可なの?
239デフォルトの名無しさん:2008/12/05(金) 12:22:31
>>237
std.streamはphobosなんだから使えなくて当然。
Tango版をインストールしたならTangoを使わないと
240デフォルトの名無しさん:2008/12/05(金) 12:43:01
>>239
ありがとうございます。

やっぱり、そうですよねえ・・・・
夕べ自分で見直していて、そう思いました。
241デフォルトの名無しさん:2008/12/06(土) 00:29:26
Windows版phobosだけど、いつのまにかmainの引数がUTF-8になってるね。
242デフォルトの名無しさん:2008/12/06(土) 03:54:55
>>241
次はwritef?(ln)?にフィルタを被せられるようにして欲しいな
243デフォルトの名無しさん:2008/12/06(土) 13:01:01
>>241
なんだってー
>>242
どんなのかコードで
244デフォルトの名無しさん:2008/12/06(土) 14:23:56
set_iofilter(stdout, new Encoding("cp932"));
245デフォルトの名無しさん:2008/12/06(土) 18:57:52
JavaのIO周りがここでいいって言われていたので
それをD向けに移植すればいいのではないかと思うのだが(Javaのは俺は見たことない)
246デフォルトの名無しさん:2008/12/06(土) 19:36:54
auto file = new BufferedReader(new FileReader("hoge.txt"))
とかやらねばならんのは勘弁して欲しい
247デフォルトの名無しさん:2008/12/06(土) 20:09:05
class JpStream : FilterStream {}
というのは前に提案されているが
auto file = new EncordedStream(new File("hoge.txt"), "cp932"); // ファイルをcp932とする

auto eout = new EncordedStream(dout, "cp932");
eout.writefln("ほげ");//utf8からcp932に変換される

auto ein = new EncordedStream(din, "cp932");
string line = ein.readln(); // cp932からutf8に変換される
こんなんはどう?
248デフォルトの名無しさん:2008/12/06(土) 21:16:11
それいいなあ
249デフォルトの名無しさん:2008/12/06(土) 21:38:55
一式書いて送ってください、、、
250デフォルトの名無しさん:2008/12/06(土) 23:57:45
ttp://www.kmonos.net/alang/dee/tx.html
改めて見直すとtxとさほど変わらないわけですが
module std.estream;
のようなものを入れるとしたらtxにどんな不満がある?
tx.argvfix()はようやくいらなくなったね
251デフォルトの名無しさん:2008/12/07(日) 04:05:25
>>250
文字コードが打ち決めなのさえ変えればいいと思うよ。
252デフォルトの名無しさん:2008/12/07(日) 07:27:04
*Stream系はそれでいいとしてstd.stdio.write*関係はどうするかな
253デフォルトの名無しさん:2008/12/07(日) 12:50:51
俺としては、低レベルなバイト列の入出力を扱うストリームと、
それを何らかの形に翻訳したデータ構造の入出力を行うリーダライタの二段階構造に
すべきだと思うんだよね。

要するに、入出力デバイスに関するコードはストリームに、
データの解釈や整形に関するコードはリーダライタに書いて、
それらを自由に組み合わせられるようにする。

現状の、ストリームにフィルタを被せるという方式だと、
派生ストリームを使うプログラマも、低レベルな入出力関数を
使えるけど、そういう状況はよろしくないと思う。
254デフォルトの名無しさん:2008/12/07(日) 13:10:04
ここはひとつ俺らで団子ライブラリを…
255デフォルトの名無しさん:2008/12/07(日) 13:16:09
団子ライブラリってなんぞ
256デフォルトの名無しさん:2008/12/07(日) 13:16:58
>>253
.NETみたいなのがいいのか?
でもそれ
>>246
が面倒がってるんじゃないか?
257デフォルトの名無しさん:2008/12/07(日) 13:34:55
>>253
StreamとReader/Writerの2層はともかく
Encording層をどこに置くべきか悩む
258デフォルトの名無しさん:2008/12/07(日) 13:37:06
246ですが
C++のstring = basic_string<char>みたいによく使う組み合わせにaliasがあるんなら
特に文句は無いのです。

当時はなんでこんなに標準クラス名が長いんだとか、Eclipse糞重たいとか、
演算子オーバーロード無いくせにStringで+演算子が使えるのは何故だとか
Javaにげんなりしていたので単にトラウマが刺激されただけです。
259デフォルトの名無しさん:2008/12/07(日) 13:39:58
>>257
encode、な。
260デフォルトの名無しさん:2008/12/07(日) 13:42:31
>>259
ほんとだすまん
261デフォルトの名無しさん:2008/12/07(日) 13:43:16
>>257
文字コード変換はTextReaderなりなんなりの仕事じゃないか。
現状ではStreamに文字列を書き込んだときのフォーマットは、
「自分が書き込んだのを読み込んだら同じになる」程度しか既定されてないのに
そこに文字コード変換の機能をつけるなんて無理無理だよ。
262デフォルトの名無しさん:2008/12/07(日) 13:50:20
ストリームといえば、デストラクタでcloseしないの何とかして欲しい。
263デフォルトの名無しさん:2008/12/07(日) 13:51:10
>>255
Dangoじゃね?
264デフォルトの名無しさん:2008/12/07(日) 13:59:33
>>258
TextReaderとFileStreamをくっつけて
TextFileReaderとかはありだろうな。

名前が長くなるのはIDEでなんとかなる……と思う。
265デフォルトの名無しさん:2008/12/07(日) 14:18:25
>>261
じゃあnew EncodedStream(din, "cp932");じゃなくて
new EncodedTextReader(new File("hoge.txt", "cp932");
もしくは
new TextReader(new File("hoge.txt"), EncodingScheme.create("cp932"));
あとTextReader+FileにはTextFileReaderも用意して

ちなみに誰かEncodingSchemeCP932書いてない?
不勉強なので既にあったとしてもどれがShiftJIS相当なのかわからん
266デフォルトの名無しさん:2008/12/07(日) 15:03:22
>>265
1つめの例、括弧たりないね。
new EncodedTextReader(new File("hoge.txt"), "cp932");
こういうことでいいのかな?
267デフォルトの名無しさん:2008/12/07(日) 15:10:43
>>266 そう そう
268デフォルトの名無しさん:2008/12/07(日) 15:30:40
ちょ
/+
class EncodingSchemeUtf8 : EncodingScheme
{
    static this()
    {
        EncodingScheme.register("std.encoding.EncodingSchemeUtf8");
    }
+/
auto e = EncodingScheme.create("std.encoding.EncodingSchemeUtf8");

>a.exe
std.encoding.EncodingException: Unrecognized Encoding: std.encoding.EncodingSchemeUtf8
なんて書けばいいの
269デフォルトの名無しさん:2008/12/07(日) 15:50:56
>>268
EncodingScheme.createの引数は、
Object.create("std.encoding.EncodingSchemeUtf8").toString
270デフォルトの名無しさん:2008/12/07(日) 15:59:53
>>265の例を見てるとTangoのConduitとStreamのような関係に見えるんだけどなにか違うのか?
271デフォルトの名無しさん:2008/12/07(日) 16:14:37
>>269
auto e = EncodingScheme.create(Object.create("std.encoding.EncodingSchemeUtf8").toString);
a.d(5): Error: no property 'create' for type 'object.Object'
...
なので
auto e = EncodingScheme.create(Object.factory("std.encoding.EncodingSchemeUtf8").toString());
object.Error: Access Violation
あれ?
272デフォルトの名無しさん:2008/12/07(日) 16:58:53
>>270
Tangoのこの辺がわかりにくいのだが・・・こうか?
Conduit(FileConduit/SocketConduit/...) * Stream(LineStream/UtfStream/...)

>>265
Stream(ConsoleStream/FileStream/StringStream/SocketStream/...)
  * Reader/Writer(LineReader/FormattedWriter/...)
  * Encoding("CP932"/...)

対応関係は
>>265 | Tango
Stream | Conduit
Reader/Writer | Stream
Encoding | Streamの一部

Encodingを一般化したTranslater(Filter)も考えたが
そもそもReader/WriterとTranslaterを別にしてもメリットないか?
273デフォルトの名無しさん:2008/12/07(日) 17:48:19
ああ、そうか、Conduitって土管のイメージでいいんだな。
それで、土管の中を流れるのがStreamなのか。
274デフォルトの名無しさん:2008/12/07(日) 18:50:05
ためしにTangoのtango.io.stream.UtfStreamを参考にFilterInputとかをいじってみた。
ttp://codepad.org/jTNOTqcL
275デフォルトの名無しさん:2008/12/07(日) 19:29:03
よく使う組み合わせのためにヘルパークラスいるな
276デフォルトの名無しさん:2008/12/07(日) 22:53:46
Phobosに入れてもらえるものがいいなぁ
277デフォルトの名無しさん:2008/12/08(月) 10:32:18
エンコーディングといえば、std.encodingもインターフェイス悪いよな。
文字列から文字列へ変換する関数がないのは使いづらすぎる。
278デフォルトの名無しさん:2008/12/08(月) 11:43:33
std.encodingは標準ライブラリの中でも基礎のものなのだと思う
よりハイレベルのライブラリをこの上に構築せねば
279デフォルトの名無しさん:2008/12/08(月) 11:54:51
std.encodingって初めてまともに見たが
typedef ubyte CHAR;
alias invariant(CHAR)[] STRING;
でエンコードごとに文字列型を作るアプローチを採ってるじゃないか!
280デフォルトの名無しさん:2008/12/08(月) 20:52:17
import std.stdio;
import std.bigint;

void main(){
BigInt x,y;
x = "1_0000_0000_0000_0000_0000_0000_0000_0000"
~"_0000_0000_0000_0000_0000_0000_0000_0000";
y = "1_0000_0000_0000_0000_0000_0000_0000_0000"
~"_0000_0000_0000_0000_0000_0000_0000_0000";
writefln(x*y);
}

なぜか結果が99999999999960597993785257531857664400770054262477057386034207
084416955692331543239945395293578420218806492958866804047385460736になった。
いつのまにか多倍長整数が標準になってると思ったけどまだダメか。
281デフォルトの名無しさん:2008/12/09(火) 03:25:47
void main(){
BigInt x,y;
x = 1_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000;
y = 1_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000;
writefln(x*y);
}
282デフォルトの名無しさん:2008/12/09(火) 12:25:18
import std.stdio, std.bigint;
void main(){
  BigInt x = 1_000_000_000_000;
  writefln(x * x); // 999981553255926290448384
}
bigint信用できなすぎワロタ

std.bigint.mulInner内のupdateShrをupdateUShrにすれば直せるってことは分かったが
libの再コンパイルの仕方が分からん
283デフォルトの名無しさん:2008/12/09(火) 12:56:18
makeすりゃいいだけじゃないのかい?
284282:2008/12/09(火) 20:49:42
>>283
druntime.libがないと言われてどーなってるんだと悩んでたが
普通にこっちもmakeすればいいだけだった…
いわれるまで気付かなかったorz ありがとー
285デフォルトの名無しさん:2008/12/09(火) 21:05:15
>>269 できる?
286デフォルトの名無しさん:2008/12/09(火) 23:26:33
>>271がエラーになってるのは、EncodingSchemeUtf8のメンバを全部実装してないから。
EncodingSchemeUtf8が抽象クラスになってて実体化できない。
287デフォルトの名無しさん:2008/12/09(火) 23:58:39
>>286
えええええええええ(´・ω・`)
288デフォルトの名無しさん:2008/12/10(水) 11:37:08
>>286
std.encodingはそういうものなのか?
本当にインタフェース だけ を規定しているのか?
289デフォルトの名無しさん:2008/12/10(水) 13:01:17
>>288
いや、そんな大げさなことじゃなくて、単にvtblに穴があるからアクセス違反なってるだけなんだけど。
290デフォルトの名無しさん:2008/12/10(水) 13:51:01
まず createに渡すのはスキームの別名で "UTF-8"。
でも EncodingSchemeUtf8の static thisが実行されてなくて
Unrecognized Encoding:〜が出る。
それだけの話。

スキームの別名は、std.encodingのページを見るか
ソースを見るかすれば書いてある。
291デフォルトの名無しさん:2008/12/10(水) 16:13:32
今は使えない状態だってことか・・・
292デフォルトの名無しさん:2008/12/10(水) 17:13:18
自前で登録して作らせるか
EncodingScheme.register("std.encoding.EncodingSchemeUtf8");
auto e = EncodingScheme.create("UTF-8");

直接作るか
auto e = new EncodingSchemeUtf8;

で使えるんじゃね?
293デフォルトの名無しさん:2008/12/10(水) 21:10:53
>>268が使い方間違ってるだけっていってるのに…
294デフォルトの名無しさん:2008/12/11(木) 01:05:30
話は変わるが、呼び出されるかわからないデストラクタって何の意味があるの?
せめてデストラクタでオブジェクトのインスタンスのdeleteが行えたり
確実に呼ばれる保証がないと使いようがないんじゃないかと思うんだが…
295デフォルトの名無しさん:2008/12/11(木) 01:15:15
確かに使いづらいねえ。
いまのところscopeクラスにしてRAII強制するしか使い道がない。
でもこれも、scopeメンバフィールドがないと意味がない。
296デフォルトの名無しさん:2008/12/11(木) 01:20:21
>>294
既に破棄されているオブジェクトをdeleteするのもダメだっけ?
297デフォルトの名無しさん:2008/12/11(木) 01:58:02
それは平気だぷー
298デフォルトの名無しさん:2008/12/11(木) 02:00:44
とはいってもオブジェクトの参照はただのポインタだから,
再利用されてたら関係ないオブジェクト消しそうな気がするが…
299デフォルトの名無しさん:2008/12/11(木) 10:11:30
import std.stream;

class Point {
int x , y;
this(int x , int y) {
this.x = x;
this.y = y;
}
~this() {
stdout.printf("Delete Point Object %d, %d\n" , x , y);
}
}


int main() {
Point point = new Point(100 , 70);
stdout.printf("1\n");
delete point;
stdout.printf("2\n");
Point point2 = new Point(100 , 70);
stdout.printf("3\n");
delete point;
stdout.printf("4\n");
delete point2;
return 0;
}
300デフォルトの名無しさん:2008/12/11(木) 10:19:45
それはいったい何時のバージョンのDMDで動くコードなんだ
301デフォルトの名無しさん:2008/12/11(木) 10:22:49
302デフォルトの名無しさん:2008/12/11(木) 10:31:00
>>296-298
アウトだね。これがあるからdeleteは完全に自分で寿命管理できるオブジェクトにしか使えない。

import std.stdio;

class C {
int x;
this(int x) { this.x = x; }
~this() { writefln("C(%s) deleted", x); }
}

void main() {
auto c1 = new C(1);
auto c1p = c1;
delete c1p;

auto c2 = new C(2);
delete c1;
}
303デフォルトの名無しさん:2008/12/11(木) 13:14:24
それだと最後のdelete消しても同じ表示なんで
http://codepad.org/FPc7ZrRp
304デフォルトの名無しさん:2008/12/11(木) 14:46:11
>>301にも書いてあるけど
auto c1p = c1;
delete c1p;
によってc1pはnulになっても
c1がnulにならないのが問題なんでしょ
単に二回dekete(delete c1p; delete c1p;)とかと
既に破棄されているオブジェクトをdelete
とはニュアンスが違うような

>>298>>302-303の言いたいことはわかる
305デフォルトの名無しさん:2008/12/11(木) 14:50:23
それよりも>>294はdeleteそのものが
(呼ばれても実行されないから)
意味がないって言ってるんじゃないかな
これも>>301に書いてあるけど
306デフォルトの名無しさん:2008/12/11(木) 15:01:24
なんかdeleteが何のためにあるのかよくわからなくなってきた。
307デフォルトの名無しさん:2008/12/11(木) 17:03:16
明示的な delete よりも使い終わったら
ptr = nul; を徹底した方が良いじゃないかな

308デフォルトの名無しさん:2008/12/11(木) 17:12:50
scope周りを整理すれば解決しそうなんだが・・・
309294:2008/12/11(木) 20:38:17
なぜかdeleteのほうに話が飛んだけど、たしかにdeleteもやる意味がなさそうだな…
デストラクタは呼ばれない可能性を考慮すると、C言語のfree関数みたいなことをすることができない。
デストラクタからオブジェクトへのアクセスも不正だから明示的なメモリ開放も不可能。
(というかそもそもdeleteでのメモリ開放は望めないのか…)
…じゃあデストラクタで何すればいいの?ってかなんであるの?というのが本来の疑問。
310デフォルトの名無しさん:2008/12/11(木) 20:50:04
 scope x = expr;

 auto x = expr;
 scope(exit) delete x;
のシンタックスシュガーで、一応deleteも直接使えるようにしてあるだけなんだと思う。
311デフォルトの名無しさん:2008/12/11(木) 20:55:08
finalなくなって以来、scope変数が書き換え可能なのはまだ治ってないのか。
312デフォルトの名無しさん:2008/12/11(木) 22:12:14
RAIIと、一時オブジェクトの滞留とはごっちゃにしちゃいかん。
リソースを close すべき時は、きっちり close しておけ。
ptr = null; なんてのはタイミング不明瞭なんだからそんなものに期待しちゃいかん。
中身が純粋データなら何の問題もないが。
313デフォルトの名無しさん:2008/12/11(木) 22:18:35
何のためにscope変数なんてものを作ったのか理解できない理不尽さ。

auto f = new File(...);
scope(exit) f.close;
314デフォルトの名無しさん:2008/12/11(木) 22:20:04
ガベコレでしか呼ばれないデストラクタは
リソース解放の最終手段のためにあるんだ。
うっかり close 忘れちゃってポインタも破棄された場合に、
ガベコレで回収されるときに、オイオイまだリソース残ってやがるぞといいながら close すると。
リソースを持つクラスを作るなら、close メソッドの実装は必須、
同時にデストラクタにも解放機能をつけておく。

ただ、あくまで「保険」であって、クラスを使う側はデストラクタが解放してくれると期待してはいかんのよ。
315デフォルトの名無しさん:2008/12/11(木) 22:31:40
C++/CLIみたいに、デストラクタとファイナライザを分ければいいのに。
316デフォルトの名無しさん:2008/12/11(木) 23:29:02
C++のように見えるコードはC++のように動く
それがDのポリシーじゃなかったのか
317デフォルトの名無しさん:2008/12/11(木) 23:40:14
>>315
IDisposableだっけ。あれはいいアイデアだと思う
318デフォルトの名無しさん:2008/12/12(金) 05:24:06
>ただ、あくまで「保険」であって、
>クラスを使う側はデストラクタが解放してくれると期待してはいかんのよ。

まさかのときに期待できないのに保険ですかw
319デフォルトの名無しさん:2008/12/12(金) 08:36:38
サーバーアプリとかで24時間稼働のプログラム書くときに
それなりにありがたみがあるんですよ。

バグっていてもそれなりに動くというのがミソ。
320デフォルトの名無しさん:2008/12/12(金) 08:46:48
あと、実際に大手のライブラリで、ファイナライザに解放コードがなくて、
close しないとリソース駄々漏れってケースもあるんだよなぁ。

ガベコレしてるから大丈夫なんて考えてると痛い目にあう。
321デフォルトの名無しさん:2008/12/12(金) 11:10:13
dsssが何やってもError: 4invalid UTF-8 sequenceというログしかはかないんですが、
どうすればええんでしょう。
322デフォルトの名無しさん:2008/12/12(金) 11:20:20
コンパイルしようとした.dファイルがUTF-8で書かれているか確認する
323デフォルトの名無しさん:2008/12/12(金) 11:42:00
いや、コンパイルじゃなくて普通にdsssのコマンドでそのエラーが出るんです・・・
何がおかしいんでしょうか。
324デフォルトの名無しさん:2008/12/12(金) 11:46:31
何をやってもってことは、
dsss --help
とかしてもそのエラーが出るのか?
325デフォルトの名無しさん:2008/12/12(金) 11:46:34
どんなコマンドライン引数をつけてやってるのか書かないと誰もわからんのじゃね。
何をやってもって、dsssを無引数で実行してもそうなったってこと?
326デフォルトの名無しさん:2008/12/12(金) 13:04:40
>>314
>ガベコレでしか呼ばれないデストラクタは
>リソース解放の最終手段のためにあるんだ。

scope outで呼ばれる関数がないと使い物にならんという話だろ
327デフォルトの名無しさん:2008/12/12(金) 13:09:25
そもそもさあ
ガベージコレクト時に駆動される関数って必要か?
328デフォルトの名無しさん:2008/12/12(金) 13:13:49
>>326
結局のところ、scope out でのデストラクタと、GC でのファイナライザの
両方の関数が必要ってことかなぁ。
個人的には scope out で close 実行させとけばいいじゃんと思ってるので、
あんまり気にしてないんだけど。
329デフォルトの名無しさん:2008/12/12(金) 14:49:28
>>328
そのcloseを自動化するためのシンタックスシュガーが欲しいって話だよ。
プログラマがclose書き忘れたらリソースリークするんじゃ、GCがあっても何の意味もない。
330デフォルトの名無しさん:2008/12/12(金) 15:06:18
明示的にdeleteした場合やscope属性の場合は即デストラクタが呼び出されて、
しかもその(ガベコレ時でない)場合はメンバ触ってもOK、って仕様に書いてあるっぽいけど、
問題あるの?
331デフォルトの名無しさん:2008/12/12(金) 15:22:13
>>330
プログラマがdeleteしたかGCかdeleteしたかをデストラクタから判別する方法がないから、
デストラクタでメンバを触りたいときはscopeクラスにする必要がある。

で、scopeクラスは非常に使い勝手が悪い。
332デフォルトの名無しさん:2008/12/12(金) 15:26:24

そういえば人生のデストラクタまだ書いてないわ
もれの死体はだれが片付けてくれるんだろう
333デフォルトの名無しさん:2008/12/12(金) 15:27:41
scope外だから気にするなw
334デフォルトの名無しさん:2008/12/12(金) 15:28:19
override void sleep() {
super.sleep;
delete this;
}
335デフォルトの名無しさん:2008/12/12(金) 16:17:55
しょうがないな俺が代わりに実装してやるよ
お前のリソースの所有権は俺が引き継ぐようにしとこう
336デフォルトの名無しさん:2008/12/12(金) 17:18:14
人はそれを(遺産の)継承と呼ぶ
337デフォルトの名無しさん:2008/12/12(金) 18:27:07
>>331
> プログラマがdeleteしたかGCかdeleteしたか
メンバを触れるか否かが(scopeクラスか否かではなく)その一点で
決まるわけだから、それは判定できる仕様であるべきだろな。
338デフォルトの名無しさん:2008/12/12(金) 19:28:28
そもそも呼ばれるかどうかもわからないデストラクタでメンバをいじったところで何がおいしいのかと。
>>314の言うような保険や、リソースのリーク検出のためのassert文を書くのはいいかもしれない。
scopeクラスなら確実にデストラクタが呼ばれるけれど、やはりあれは使い勝手悪過ぎだと思う…
339デフォルトの名無しさん:2008/12/12(金) 19:42:38
>>332
死して屍拾うもの無し 死して屍拾うもの無し
340デフォルトの名無しさん:2008/12/12(金) 20:17:39
http://oshiete.eibi.co.jp/kotaeru.php3?q=28792
僕は、
「このプログラムは不正な処理を行ったので強制終了されます。保存していないデータはすべて失われます。」
という意味に理解しています。
341デフォルトの名無しさん:2008/12/12(金) 20:31:22
>>340
KYすぎてわらたw
342デフォルトの名無しさん:2008/12/12(金) 20:32:04
>>340
KYすぎてわらた
343デフォルトの名無しさん:2008/12/12(金) 20:32:53
投稿ミスすまんorz
344デフォルトの名無しさん:2008/12/12(金) 20:35:12
投稿ミスすまんorz
345デフォルトの名無しさん:2008/12/12(金) 20:36:44
何で二回言うの?
346デフォルトの名無しさん:2008/12/12(金) 20:39:14
何で二回言うの?
347デフォルトの名無しさん:2008/12/12(金) 22:14:19
大大事事ななここととななののでで
348デフォルトの名無しさん:2008/12/12(金) 22:44:36
ムムーーンンササイイドドへへよよううここそそ
349デフォルトの名無しさん:2008/12/12(金) 22:57:44
大体の場合デストラクタは呼ばれると思うんだけど
デストラクタが呼ばれない状況ってどんなの?
350デフォルトの名無しさん:2008/12/12(金) 23:11:20
>>349
ttp://d.hatena.ne.jp/yukkepc/20081119/1227056997

scopeクラスってそんなに使いづらい?
351デフォルトの名無しさん:2008/12/13(土) 00:12:37
>>337
そんなこと分からなくても、メンバオブジェクトが既にdeleteされているかを知れれば十分なんでない?
そのくらいGCに問い合わせれば分かりそうだけど、そういう機能ないのかな。
352デフォルトの名無しさん:2008/12/13(土) 00:32:08
>>351
ファイナライザが二度呼ばれないことは保証されてるから、
GC.getAttr(cast(void*)obj)&GC.BlkAttr.FINALIZE
でいいのかもしれない。
とりあえず、
void f(){
auto o = new Object;
auto o2 = o;
assert(GC.getAttr(cast(void*)o)&GC.BlkAttr.FINALIZE);
delete o2;
assert(GC.getAttr(cast(void*)o)&GC.BlkAttr.FINALIZE);
}
は、期待通りdelete後のassertでAssertion failureになった。
353デフォルトの名無しさん:2008/12/13(土) 00:50:05
void f(){
auto o = new Object;
auto o2 = o;
writeln(GC.getAttr(cast(void*)o)&GC.BlkAttr.FINALIZE); // 1
delete o2;
writeln(GC.getAttr(cast(void*)o)&GC.BlkAttr.FINALIZE); // 0
new Object;
writeln(GC.getAttr(cast(void*)o)&GC.BlkAttr.FINALIZE); // 1
}
354デフォルトの名無しさん:2008/12/13(土) 00:58:38
Dはたのしいげんごです
355デフォルトの名無しさん:2008/12/13(土) 01:02:05
再利用されたときにダメか。そりゃそうか。やっぱりどうにもならんね。
356デフォルトの名無しさん:2008/12/13(土) 03:52:40
http://codepad.org/nvaDwRA4
とりあえずこうすれば確実にデストラクタを呼ぶようになるかな?
確実に呼ばれるならデストラクタでリソースの解放とかができる。
357デフォルトの名無しさん:2008/12/13(土) 08:39:41
単純に、
class X
{
Resource r = null;
this()
{
r = new Resource();
}
void close()
{
if (r)
{
r.close();
r = null;
}
}
~this()
{
close();
}
}
この程度で必要十分だと思ってるけど、それ以上必要か?
358デフォルトの名無しさん:2008/12/13(土) 08:43:34
359デフォルトの名無しさん:2008/12/13(土) 09:04:09
private import std.stdio;
class A{
  ~this(){ writefln(`~this!`); }
  static ~this(){ writefln(`static ~this!`); }
}
void main(){
  auto a = new A;
}
で試したけど呼ばれてるよ?
tangoだとダメとか?
360デフォルトの名無しさん:2008/12/13(土) 09:18:24
呼ばれるかもしれないけど呼ばれることが保証されてないってことじゃないの?
361デフォルトの名無しさん:2008/12/13(土) 09:39:16
>357
GodJob ! b
362デフォルトの名無しさん:2008/12/13(土) 10:00:01
>>356
static ~thisを利用すれば、終了時に漏らさず各~thisを呼べるわけか。

オブジェクトのポインタ値はGCによる再配置で変わりうるらしいから、
private static bool[void*] _map;
ってのの、ポインタをキーにするのはまずいかも。

>>357
ガベージコレクトで~this経由でclose呼び出された場合に、
rが解放済みだとまずいことになるよ。rの参照オブジェクトが先に解放されても、
rが自動的にnullになってくれたりはしなかった。

>>359
tangoだと普通に呼ばれないのか。
aがstaticだったりグローバル変数だったりするとDMDでも呼ばれなかったよ。
363デフォルトの名無しさん:2008/12/13(土) 13:08:04
>>356
静的デストラクタの呼ばれる順序って制御できないから、
まだ必要なのに解放されちゃうことあるよね。
364デフォルトの名無しさん:2008/12/13(土) 13:45:23
>>356
foreachで列挙中にremoveするのって大丈夫だっけ?
365デフォルトの名無しさん:2008/12/13(土) 14:35:14
リソース管理オブジェクトの解放を通常オブジェクトの解放の後にする保証がないと
>>356のような方法で解放して良いのはGCで管理してないリソースだけになると思う
ただ、確実に解放したいものってCのライブラリのハンドルとかそういうものなので、
今のところそれで困らないかなぁ
366デフォルトの名無しさん:2008/12/13(土) 14:58:46
>>362
継承したとき親のstatic~thisは呼ばれるのか
367デフォルトの名無しさん:2008/12/13(土) 17:48:04
文字列mixinのことコンパイル時evalって呼べば注目されるかな?
368デフォルトの名無しさん:2008/12/13(土) 17:58:35
何の意味があるのかわからない
369デフォルトの名無しさん:2008/12/13(土) 18:06:31
>>362
rがnullにならないのはgcがたぶん別スレッド扱いになってるから。
その場合は r.close(); r = null; をアトミックになるようにすればいい。
370デフォルトの名無しさん:2008/12/13(土) 18:14:11
>>369
いや、そういうこと言ってるんじゃないでしょ。
GCがrをdeleteしてから、Xのデストラクタが呼ばれる場合があるってこと。
そのばあい、rはnullにはならないからr.closeが実行されてしまう。(が、これは不正)
371358:2008/12/13(土) 20:40:58
>>362,363
GCによる再配置と静的デストラクタ内での利用か…これは考えてなかった…
あと、静的コンストラクタ内でも使えないな。
ちょっと正直あれ以上は思いつかない…
(というかこういうことを考えると、静的コンストラクタと静的デストラクタではオブジェクトは使わない方がいいのでは…という気も)
後はみんなで煮るなり焼くなり好きにして…
372デフォルトの名無しさん:2008/12/13(土) 21:38:16
dmain.dのmain関数を弄っていいなら、もうちょっとなんとかできそうかも。
373デフォルトの名無しさん:2008/12/13(土) 21:39:37
結局
・オブジェクトの持つリソースの解放
・オブジェクトの後片付け
はどこに書けばいいんだ?
374デフォルトの名無しさん:2008/12/13(土) 21:40:39
コンソールアプリで作業状況を%で表示したいんですが、表示するたびに画面がスクロールしていきます。
同じ場所で表示するために、バックするかリフレッシュしたいのですがどうすればいいでしょうか。
375デフォルトの名無しさん:2008/12/13(土) 22:13:44
Dの質問じゃない気がするが、端末によっては\bとか\rとかでなんとかなるんじゃね。
376デフォルトの名無しさん:2008/12/13(土) 22:26:04
\r で上手くいきそうです、ありがとうございました。
377デフォルトの名無しさん:2008/12/13(土) 22:54:08
[エスケープシーケンス]スレってないんだな
378デフォルトの名無しさん:2008/12/13(土) 22:58:47
スレまで立てて何の話するんだよwwwwwwwwwww
379デフォルトの名無しさん:2008/12/13(土) 23:51:08
>>377
まえはあった
380デフォルトの名無しさん:2008/12/14(日) 09:44:12
>>364
いつかのバージョンから駄目になった
381デフォルトの名無しさん:2008/12/14(日) 09:52:58
sleepを使いたいんですがどうすればいいでしょうか。
ループ中PC全体が操作できなくなるので、sleep挟みたいんですが。

>import std.stdio , std.thread;
>void main(){
> for(int i = 0 ; i < 100000 ; i ++){
> writef(i );
> Thread.sleep( 500 );
> }
>}
>hell.d(5): Error: no property 'sleep' for type 'std.thread.Thread'
>hell.d(5): Error: function expected before (), not 1 of type int
382デフォルトの名無しさん:2008/12/14(日) 13:12:03
core.thread.Thread.sleep
383デフォルトの名無しさん:2008/12/14(日) 14:44:10
>>324
レス遅くてすいません。
その通りです。
384デフォルトの名無しさん:2008/12/14(日) 14:44:49
druntime導入前だとstd.c.time.sleepか。
385デフォルトの名無しさん:2008/12/14(日) 14:45:32
C:\**>dsss
Error: 4invalid UTF-8 sequence

こんな感じです
386デフォルトの名無しさん:2008/12/14(日) 14:46:09
ちなみにdmdコマンドだと普通にコンパイルできます。
387デフォルトの名無しさん:2008/12/14(日) 15:04:34
パスに日本語はいってるとかそんなんじゃねえの。
388デフォルトの名無しさん:2008/12/14(日) 15:12:06
dmd / dsssのパスのは C:\d の下で、全角文字は入ってません。
389デフォルトの名無しさん:2008/12/14(日) 15:20:39
なんだろう…考えられるのは…
・dsssやrebuildに関するファイルを書き変えた
・環境変数PATHに日本語が混じってる
・カレントディレクトリに日本語が混じってる
くらいしか思いつかないや。
390デフォルトの名無しさん:2008/12/14(日) 18:58:52
解決しました。
環境設定のPATHの中にあっても駄目なんですね・・・
ありがとうございました。
391デフォルトの名無しさん:2008/12/14(日) 19:13:26
ただのバグだと思う。
ちょっと見た感じ、
http://www.dsource.org/projects/dsss/browser/trunk/rebuild/util/str.d
この、1389行目あたりがあやしい気がする。
392デフォルトの名無しさん:2008/12/14(日) 20:21:47
Version D 2.022   Dec 11, 2008
New/Changed Features

    * Changed IUnknown to use the extern(System) interface rather that extern(Windows).
    * Pure functions now get semantically checked.
    * Nothrow functions now get semantically checked.
    * shared is now a type constructor.
393デフォルトの名無しさん:2008/12/14(日) 20:27:36
きた!pureきた!これでかつる!
394デフォルトの名無しさん:2008/12/14(日) 20:34:56
The requested URL /dmd.2.022.zip was not found on this server.
395デフォルトの名無しさん:2008/12/14(日) 21:18:06
ズコー(AA略
396デフォルトの名無しさん:2008/12/14(日) 22:00:57
>>384
ありがとうございます、でもsleepは成功したんですけどループ内のwritef(i)の動作がおかしいです。
十周してからまとめてwritef(i)が表示されてしまいます、どうしてなんでしょう?

import std.stdio , std.c.time;
void main(){
for(int i = 0 ; i < 10 ; i ++){
writef(i );
sleep(1);
} }
397デフォルトの名無しさん:2008/12/14(日) 22:10:55
そりゃ、バッファリングされてるから。
398デフォルトの名無しさん:2008/12/14(日) 22:19:57
バッファリングでググったら原因はわかったけど、
解決策は直ぐに見つからないかも、とりあえずprintfだと大丈夫みたい。
399デフォルトの名無しさん:2008/12/14(日) 22:29:50
つ flush
400デフォルトの名無しさん:2008/12/14(日) 22:40:01
>>399
とりあえずこんな感じでできました、どうもありがとう

import std.stdio , std.c.time;
void main(){
for(int i = 0 ; i < 5 ; i ++){
write(i);
sleep(1);
flushall();
} }
401デフォルトの名無しさん:2008/12/14(日) 22:41:03
>>370
それはGCのバグというんじゃないのか?
rを先にdeleteするケースはどこにどう存在するんだ?
402デフォルトの名無しさん:2008/12/14(日) 22:44:11
>>401
GCには詳しくないので全くの想像で言うと
メンバオブジェクトの所有関係をGCが把握してないってことなのかなと
403デフォルトの名無しさん:2008/12/14(日) 22:44:43
>>363

http://www.kmonos.net/alang/d/2.0/class.html#staticdestructor

>静的デストラクタは、 対応する静的コンストラクタが正常に実行完了しているときのみ、
> プログラムの終了時に呼び出されます。
> 静的デストラクタは空の引数リストを持ちます。
> 静的デストラクタは、 静的コンストラクタの呼び出しと逆順で実行されます。

この仕様は嘘ということですか?
404デフォルトの名無しさん:2008/12/14(日) 22:54:14
>>401
import std.stdio;
class A{
B o = null;
~this(){
writeln("A");
if(o){
writeln("A1");
delete o;
}
}
}
class B{
~this(){
writeln("B");
}
}
void main(){
auto a = new A;
auto b = new B;
a.o = b;
}
これで、手元ではB→A→A1の順に表示された。
つまり、Aのデストラクタに入る前にBが処分されちゃってるのに、
A1に入ってBをdeleteしちゃってる、ってことになる。

こういうオブジェクトの解放順序になることもあるからメンバオブジェクト触んな、
ってのは仕様に書いてあるとおり。
405デフォルトの名無しさん:2008/12/14(日) 23:09:58
>>404
リソースを外から渡してるからちょっとそれはないなぁという感じ。
それとデストラクタとメモリアロケートの話とごっちゃになってないか?
デストラクタが動いたあとで、メモリアロケートを解放するのは正当動作だと思うぞ。
406デフォルトの名無しさん:2008/12/14(日) 23:31:47
>>401
このrはXからしか参照されていないので、コレクトの対象になるのは、Xがコレクトの対象になったとき。
このとき、rとXのどちらが先に開放されるかは決まってない(循環参照の場合があるから)。

>>403
コンストラクタと逆順で実行されると言っているだけで、プログラマが制御できるわけじゃないでしょ。
それに、そもそも制御できたとしても静的デストラクタで相互に使用される場合などは、どうしようもない。
407デフォルトの名無しさん:2008/12/14(日) 23:47:25
>>401
C.o.__dtorが先に表示されたよ(Windows)
----

import std.stdio;

class C {
    Object o;
    this() {
        o = new class {
            ~this() {
                writeln("C.o.__dtor");
            }
        };
    }
    ~this() {
        writeln("C.__dtor");
    }
}

void main(){
    new C;
}
408405:2008/12/14(日) 23:55:46
改めて検証して、なんじゃこりゃって感じに。
これ GC のバグだよなぁ。解放順の定義がまずいんだと思う。
これだとデストラクタに何も処理書けないよ。
409デフォルトの名無しさん:2008/12/15(月) 00:00:46
Javaとかってそのへんどうなってんの?
410デフォルトの名無しさん:2008/12/15(月) 00:03:01
>>409
Java言語仕様では、オブジェクトツリーの末端から finalize されることが保証されてる。
循環参照はちょっとわからん。
411デフォルトの名無しさん:2008/12/15(月) 00:17:22
循環参照の呼び出し順なんて定義しようがないんじゃ
まあそもそも、ファイナライザ自体が最終手段に近い扱い
412デフォルトの名無しさん:2008/12/15(月) 00:20:23
>>406
> コンストラクタと逆順で実行されると言っているだけで、プログラマが制御できるわけじゃないでしょ。
静的コンストラクタの順序もある程度仕様で決まってるよ。
モジュールの依存関係とソース上の出現順にしたがう。
(まあ、自由に操れるわけじゃないから、問題になる状況が無くなるわけじゃなかろうが)

> それに、そもそも制御できたとしても静的デストラクタで相互に使用される場合などは、どうしようもない。
仕様で定まる順序でもなお解放順序が問題になる場合は依然としてアウトだな。
そうでない場合は有効なテクニックだと思う。
「確実に呼び出される」のと「順序がある程度定まる」ってのがあのコードのポイントだな。
413デフォルトの名無しさん:2008/12/15(月) 00:29:00
>>409
.NETだとファイナライザの呼び出し順は不定。
ただし、ファイナライザの中では、自分が参照を持っているオブジェクトは
(ファイナライズ済みであったとしても)解放されていないことは保障されている。

つまり、解放すべきオブジェクトをいったん列挙して、全部ファイナライズしてからメモリを回収していく感じ。
実際は、世代型GCだからもっと複雑。よう知らんけど。
414デフォルトの名無しさん:2008/12/15(月) 00:34:58
ちなみに、.NETやJavaでは、ファイナライザの中で自分の参照をどこかに追加すると、オブジェクトは生き返る。
415デフォルトの名無しさん:2008/12/15(月) 01:16:35
デストラクト後のプロパティの読み出しはできるみたいだけど、
メソッドはもう呼べないみたいだ。
object.Error: Access Violation 出して死ぬ。vptr 壊されてるって感じかなぁ。
.NET の実装に近いのかな。

メモリが解放済みなのかそうでないのかをしようと delete メソッド追加してみたら
デストラクタの呼び出しが後に回された(A→A1→Bになった)ので、
GCの挙動と違う。確認困難だな。

>>410
修正。Java の finalize は呼び出し順自体は不定が正解。
ただ、finalize 後、メモリを解放できるかどうかは参照ツリーに従うことになる。
finalize していないオブジェクトから参照されていたらメモリは解放されない。
.NET と動きは同じか。
416デフォルトの名無しさん:2008/12/15(月) 01:42:17
初めてGCのソース見てみたけど、ファイナライザ呼んだ直後にClassInfo消してるね。
417デフォルトの名無しさん:2008/12/15(月) 02:05:42
ということは、ファイナライズ済みかどうかは.classinfo見ればいいんじゃ。
418デフォルトの名無しさん:2008/12/15(月) 02:37:26
問題なのはファイナライズ済みかどうかとかじゃなくて、
すべてのオブジェクトが確実に開放される保証がないことではなかったのか?
だからデストラクタでリソースの解放ができないとかそういうの。
419デフォルトの名無しさん:2008/12/15(月) 02:43:23
Version D 2.022   Dec 11, 2008 ダウンロードできるようになった!
420デフォルトの名無しさん:2008/12/15(月) 02:53:23
>>418
* 必ず呼ばれないとデストラクタの意味ないだろ…常識的に考えて
* デストラクタでメンバ触れないならリソースの解放できねえだろヴォケ
って具合に問題点は二つ挙がってて議論は同時進行中。
421デフォルトの名無しさん:2008/12/15(月) 03:17:51
GCによって先に解放されたことで参照の無効になってる可能性がないメンバなら
べつに触ってもおkなんだぜ。

もしかして、プログラム終了時だけでなく、通常時にGCで回収される場合も
デストラクタ呼ばれることは保証されないのかな?
となると、scopeなりdeleteなりは必須になるから、delete忘れが問題になりそうな気が。
422デフォルトの名無しさん:2008/12/15(月) 03:29:03
finalクラスのメンバ関数って継承元のメンバ関数をオーバーライドできないのか?
// @Digital Mars D Compiler v1.038
interface I
{
        void hige();
}
final class A: I
{
        // main.d(9): function main.A.hige does not override any function
        override void hige(){}
}
void main()
{
        auto a = new A;
}
おかしいだろ…orz
423デフォルトの名無しさん:2008/12/15(月) 03:50:36
>>422 それはおかしいなあ
424422:2008/12/15(月) 03:52:11
分かった気がする……
// @Digital Mars D Compiler v1.037
class C
{
        final override void foo(){}
}
何も継承してないのにこれが通るのがおかしいんじゃね?って
http://d.puremagic.com/issues/show_bug.cgi?id=2501
ここでい言ってるのを見たをるたーたんが
「final と override が共存してるのは意味が競合してる」
って勘違いしたんじゃないのか?(予想
425デフォルトの名無しさん:2008/12/15(月) 03:55:30
んー?
誰かpure関数に違反する関数を書いてエラーになる?
426デフォルトの名無しさん:2008/12/15(月) 04:15:05
ここで議論してると別の話が出た途端に前の議論が終わってしまって
それは前からもったいないと思っていたんだ
スレッド形式のD専用掲示板欲しくない?
作っても誰も使わないかな?
それともML有効活用する?
427デフォルトの名無しさん:2008/12/15(月) 06:42:35
>>426
話の続きしたいなら、いくらでも蒸し返してくれたらいいんよ。
10レス100レス1000レス離れてたって構わない。
それがないのは、つまり議論を継続するネタが尽きたということだと思うよ。
仮に話題ごとにスレッドであったとしても、もうあとは沈んでいくだけ。
428デフォルトの名無しさん:2008/12/15(月) 07:04:31
スレッドは別にいらないけど議題別のまとめみたいなのがあるといいかも
429デフォルトの名無しさん:2008/12/15(月) 09:20:55
DのGCに不満ならもっとE言語作ってくれ
430デフォルトの名無しさん:2008/12/15(月) 11:18:07
>>425
int g;
pure void f() {
   g = 1;
}
: Error: pure function 'f' cannot access mutable static data 'g'
----
struct S { int x; }
pure void f(S* s) {
   s.x = 1;
}
: Error: cannot modify const/invariant (*s).x
431デフォルトの名無しさん:2008/12/15(月) 14:30:18
432デフォルトの名無しさん:2008/12/15(月) 16:02:30
Dに対応しているweb穂スティングサービスはありますか
433デフォルトの名無しさん:2008/12/15(月) 16:10:59
>>432 聞いたことない
434デフォルトの名無しさん:2008/12/15(月) 16:18:16
>>432
C言語のcgiが許可されている所ならどこでも動く。コンパイルがちと面倒かもしれんが。
自分の場合はhostも借りてるホスティングサービスもLinuxなので楽だった。静的リンクする必要はあったが。
さくらサーバだとFreeBSDなのでgdcのクロスコンパイルが面倒とかどこかで見た覚えがある。
435デフォルトの名無しさん:2008/12/15(月) 16:21:48
自分で書いた関数にpureを付けるのはあんまり意味がないのかな
FAQ読んだらライブラリに付けるとウマーみたいなこと書いてあったけど
エロい人教えて
436433:2008/12/15(月) 16:23:17
ああ
自分でコンパイラをインストールするのもありなら >>434
437デフォルトの名無しさん:2008/12/15(月) 16:30:09
>>430 thx
pure関数のことちょっと誤解してた
CTFEとは関係ないんだな
438デフォルトの名無しさん:2008/12/15(月) 16:32:08
>>435
CTFEできるという保証としての目印として便利だし、シグネチャ異なるからオーバーロードも可能だし(現状ではメリット無いけど)、最適化にも有利だし(実装されているかは別として)。
439デフォルトの名無しさん:2008/12/15(月) 16:47:26
実利的には純関数の利点が得られるということですわな(実装されているかは別として)。
再帰やアウトオブオーダーな最適化ができたり並列化(スレッドセーフに)できたりラムダ計算が気軽になったりその他。
pureな世界だけは静的型付けのある関数型言語の特性を持たせられると。
その意味では、数少ない真のマルチパラダイム言語かもしれない。
OCamlとかHaskellとかぶるようになるかな
440デフォルトの名無しさん:2008/12/15(月) 16:53:17
>>438 >>439
それじゃあinlineと同様に「コンパイラがpureの性質を活かすように頑張ってくれる」程度で考えておいたらいいのかな
pureかどうかはコンパイラが賢かったら判別できるはずだし
(実際>>430みたいにコンパイルエラー出るんだから)
一番の利点はプログラマがpureに書いたつもりなのにそうじゃなかったってケースをなくせることくらいか?
441デフォルトの名無しさん:2008/12/15(月) 17:56:01
ああそうかpure関数の中で
別の翻訳単位のpure関数を呼んでいるときに
pureのマークがないと活かせないわな
442デフォルトの名無しさん:2008/12/15(月) 22:20:40
pureって要するに契約のひとつだよね?
443デフォルトの名無しさん:2008/12/15(月) 23:03:10
ある目的のための契約ではあるね。
444デフォルトの名無しさん:2008/12/16(火) 00:58:03
IDE で Descent とMmrnmhrm ってどうなん?

今から始めるのだけど、慣れてる eclipse が使いたいなぁ〜というかんじで。
445デフォルトの名無しさん:2008/12/16(火) 01:48:29
Descentは変態的インテリセンスで一世を風靡したがいまいち後が続かなかった
446デフォルトの名無しさん:2008/12/16(火) 03:52:30
なんでIDE頓挫してしまうん?
447デフォルトの名無しさん:2008/12/16(火) 03:53:00
節子に読ませてね
448デフォルトの名無しさん:2008/12/16(火) 19:22:13
これ、まともにコーディング>ビルド>トライ>エラー>デバッグの
ループが出来るようにするだけでえらい疲れるね?
449デフォルトの名無しさん:2008/12/16(火) 19:40:16
各所を参考にdsss導入したけど挫折したな。デバッガとかもよく分からんし。
そんな根性無しでも労なく扱えて設定カスタマイズも容易なD用IDEがあったらなあ。
インテリセンスとかとりあえずいいから。
450デフォルトの名無しさん:2008/12/16(火) 20:06:35
Poseidon
451デフォルトの名無しさん:2008/12/16(火) 20:31:34
あ、448=444なんだけどね?

descent と Mmrnmhrmを比べた結果、descent を使うことにしますた。
MMR も基本的な機能は持っているのだけど、コードフォーマッターが使えなかったり、
インデントそろえるのが変だったり、
結局ビルドは dsss の rebuild という奴を使わなくてはいけないようだったり、
結局、先発の分 descent のほうが便利かなーとおもった。

で、descent で dsss やら rebuild 使うよりは ant を使う方が良いっぽい。
ソースを src フォルダにおいて、オブジェクトファイルを obj において〜というのがどうもうまくいかなかった。
ant に関してはここが参考になった。
http://www5.atwiki.jp/yaruhara/pages/74.html

build.xml を作ってビルダーとして登録するとビルドできた。

とりあえずの報告まで。
452デフォルトの名無しさん:2008/12/16(火) 21:04:33
人それぞれ要求する条件というものもあるのだろうが、俺は
・テキストエディタとして使いやすいかどうか
・F5押してコンパイルリンクランできるかどうか
・全ての操作をキーボードだけで行うことができるかどうか、つまりマウスレス

IDEでなくていいなら、最近はeditraやnotepad++みたいなエディタもあるからいいね
コマンドランチャとmake, ant, rake, バッチやシェル機能なんかを
いろいろ組み合わせればIDEに及ばなくても
近いことやそれ以外のことまでできるから、そういう選択肢もある
設定が面倒くさいけど
453デフォルトの名無しさん:2008/12/16(火) 21:10:21
JavaやんないせいでEclipse触ったことなくて未だに慣れない。
結局エディタ使っちゃってるんだよなあ。
454デフォルトの名無しさん:2008/12/16(火) 22:46:29
おいらもdsssなんですが

main.d => main
WARNING: Module main.d does not have a module declaration. This can cause proble
ms
with rebuild's -oq option. If an error occurs, fix this first.
OPTLINK (R) for Win32 Release 8.00.1
Copyright (C) Digital Mars 1989-2004 All rights reserved.
OPTLINK : Warning 23: No Stack
OPTLINK : Warning 134: No Start Address
というエラーが。
これ一体どういう意味なんでしょうか
455デフォルトの名無しさん:2008/12/16(火) 22:54:52
main.d に
module main;
って書いてないとか?
456デフォルトの名無しさん:2008/12/16(火) 22:56:29
main.dの一番上にmodule main;と書けばWARNINGは消えると思われ。
No Start Address ってことは、main() 関数を書いてないんじゃないか?
457デフォルトの名無しさん:2008/12/16(火) 23:01:21
解決しました、ありがとうございました。
mainはさすがに書いてますw

dmdとかrebuildでは普通に通ったので、dsssはmodule付けてないと駄目だったようです。
458デフォルトの名無しさん:2008/12/17(水) 01:38:55
2.x対応のdflって何処にあるんでしょうか。
459デフォルトの名無しさん:2008/12/17(水) 02:37:17
dflコンパイルしようとして気づいたんだけど、dmd2.022、なんかあほみたいにコンパイル遅くないか?
今回のリリースって、もしかして地雷か?
460デフォルトの名無しさん:2008/12/17(水) 07:47:37
D言語ってどこの現場が使ってるんだ?
大学で使ったことある教授におめにかかったことがないんだが
461デフォルトの名無しさん:2008/12/17(水) 08:15:35
>>458 snapshotまたはsvnの最新が2.020に対応してる
set dfl_flags=-version=DFL_DMD2020
dfl -build

>>459 本家でも遅いと話題になってたかと

>>460 教育目的での使用はまだ報告ない
研究論文では、実装に1件、データ処理に1件(同じ論文か?)
プログラミングコンテストに多数件
ソフトウェア製品の実装に1件(BOFでプレゼンされた)
自社内製アプリケーションで1件(GUIアプリ)
こんなところ
462デフォルトの名無しさん:2008/12/17(水) 15:01:45
既に自分の研究があるんだから D にかまけるよりは
慣れ親しんだ言語を使ってもっと優先度の高いタスクを行うのは当たり前だろ。

言語的にはそんなに目新しいものでもないしな。
463デフォルトの名無しさん:2008/12/17(水) 16:25:44
ということは新しい物好きの暇人くらいしかDで何か造ることはないのか
464デフォルトの名無しさん:2008/12/17(水) 18:31:13
なにをいまさらw
465デフォルトの名無しさん:2008/12/17(水) 19:15:52
軽くてランタイム不要なバイナリ作りたい人とかがDのターゲットユーザーじゃないかな。
新しい物好きとか一般人は次世代の業界標準予定なC++0xの方に行きそう。
まだ策定中だけど。
466デフォルトの名無しさん:2008/12/17(水) 19:19:20
規模が大きくなってくるとそんな要請は無意味になるし
自分でちょっと使うだけならランタイムなんて関係ないからね
467デフォルトの名無しさん:2008/12/17(水) 21:25:14
windowsのサービスとかDLLで作るのに
C/C++よりDの方がいいかな?とか思うんだけど
ガベコレがあやしくてサービスとして使い物にならないのが怖いので
結局C/C++で書いてしまうのが安心だとか錯綜した感情に悩まされています

468デフォルトの名無しさん:2008/12/17(水) 23:34:35
>>467
注意すべきところはあるみたいだけど
たいしたことはないと思う
469デフォルトの名無しさん:2008/12/18(木) 01:29:04
すいません意見ください
これバグだと思う?
isの中に .. があるとおかしいみたいなんだけど
void main() {
  static if (is(foo(p[0..1]))) {}
}
>bud a
a.d(2): found '..' when expecting ']'
a.d(2): found '1' when expecting ')'
a.d(2): found ']' when expecting ')'
a.d(2): found ')' instead of statement
a.d(3): unrecognized declaration
470デフォルトの名無しさん:2008/12/18(木) 01:32:11
違うか
isの中に関数呼び出し形式のトークンは書けないのかな?
471デフォルトの名無しさん:2008/12/18(木) 01:32:16
>>469
仕様。
is(typeof(foo(p[0..1])))で多分おk
472デフォルトの名無しさん:2008/12/18(木) 01:36:29
仕様か
上がokで下がダメなのは不思議です
void main() {
//static if (is(foo())) {}  //good
static if (is(bar(1))) {} // bad
}
473デフォルトの名無しさん:2008/12/18(木) 01:44:21
>>472
構文的にはis(型)なんだけども、意味解析で型が値、値が型として扱われるという不思議な事になってる。typeof(TypeA + TypeB)みたいなのが通ったり…。
ただこの意味解析の挙動は仕様では無いはず。
474デフォルトの名無しさん:2008/12/18(木) 02:11:49
実装依存なのか
それは困るぞ
475デフォルトの名無しさん:2008/12/18(木) 02:13:55
ちょっと前まで、typeof(Type)が通ってたし、そのあたりは不安定だな。
476デフォルトの名無しさん:2008/12/18(木) 03:02:37
>>474
何を言っている。D の正しい仕様だ!
477デフォルトの名無しさん:2008/12/18(木) 07:10:30
しゅはきませりしゅはきませり
しゅはきませりしゅはきませり
しゅはしゅはきませり
478458:2008/12/18(木) 10:43:02
再び質問ですいません。

-version=DFL_DMD2020をコンパイル時に付け加えたらInvariant系のエラーが出なくなったので、
そこは上手く言ってると思うんですが、次はcore\memory.dがないと出ました、これはどこにあるんでしょうか。
479デフォルトの名無しさん:2008/12/18(木) 10:48:43
dmd/src/druntime/import/
480デフォルトの名無しさん:2008/12/18(木) 10:59:37
dmdの下の階層がありません・・・
今気付いたんですが2020ってバージョンのことなんでしょうか?
使ってるバージョンは2.014なんですが、2.020が使えって事ですかね?

481デフォルトの名無しさん:2008/12/18(木) 11:01:48
じゃなかったdmd/src/の下にはdruntimeのフォルダ階層がありません。
482デフォルトの名無しさん:2008/12/18(木) 11:06:23
>>480
そうです
483デフォルトの名無しさん:2008/12/18(木) 11:12:16
探したらありました><

試して見ます、ありがとうございました。
484デフォルトの名無しさん:2008/12/18(木) 15:54:54
>>476 ひどすw

ところで
template A(alias fn,int i=0){
alias ParameterTypeTuple!(fn) Params;
Params p;
static if(is(typeof(fn(p[0..i]))))
const int result=i;
eles
const int result=A!(fn,i+1).result;

void func(int x,int y=0,int z=0){}
const int n=A!(func).result;
funcを呼び出すのに最低限必要な引数の数を得るコードだと思うんだけど
今でもこれ実現可能?
今、出先なので元のコードは示せないのだがそっちは無限ループするんだ・・・
485デフォルトの名無しさん:2008/12/18(木) 16:15:12
上のままだとうまく動くなw
お騒がせしました
486デフォルトの名無しさん:2008/12/18(木) 21:27:32
fnが関数(か類似する何か)じゃなければ無限再帰するよね。
487デフォルトの名無しさん:2008/12/18(木) 22:43:31
あ・・・それでか・・・
488デフォルトの名無しさん:2008/12/18(木) 23:41:53
class SomeClass{}
const SomeClass Null;
template Hoge!(alias fn){
static if(is(typeof(fn)==SomeClass))
const int n=-1;
else
const int n=A!(fn).result;

dmd1.xで動いていたこれが
2.xでHoge!(Null)のときに無限再帰して困っていたのだが
typeof(Null)==const(SomeClass)に
なっていることにようやく気が付いた orz
489デフォルトの名無しさん:2008/12/19(金) 04:29:50
ttp://d.puremagic.com/issues/show_bug.cgi?id=1541#c5
てなわけでバグ残ってるけど直したよ
490デフォルトの名無しさん:2008/12/20(土) 16:55:06
dfl使ってるんですが、こういうエラーはどうやったら直るんでしょうか?

hello.obj(hello)
Error 42: Symbol Undefined _D3dfl11application11Application3runFC3dfl4form4Form
Zv
hello.obj(hello)
Error 42: Symbol Undefined _D3dfl4form4Form7__ClassZ
hello.obj(hello)
Error 42: Symbol Undefined _D3dfl4form4Form6__ctorMFZC3dfl4form4Form
hello.obj(hello)
Error 42: Symbol Undefined _D3dfl5label5Label7__ClassZ
hello.obj(hello)
Error 42: Symbol Undefined _D3dfl5label5Label6__ctorMFZC3dfl5label5Label
hello.obj(hello)
Error 42: Symbol Undefined _D3dfl7drawing4Size6opCallFiiZS3dfl7drawing4Size
hello.obj(hello)
Error 42: Symbol Undefined _D3dfl7control7Control4sizeMFS3dfl7drawing4SizeZv
hello.obj(hello)
Error 42: Symbol Undefined _D3dfl7control7Control6parentMFC3dfl7control7Control
Zv
--- errorlevel 8
491デフォルトの名無しさん:2008/12/20(土) 17:33:22
dfl.libをリンクする
492デフォルトの名無しさん:2008/12/21(日) 08:08:03
そういえばdflのイメージリストマダー?
493デフォルトの名無しさん:2008/12/21(日) 08:55:22
module dfl.imagelist; ならあるけど
494デフォルトの名無しさん:2008/12/21(日) 13:17:07
Descent 0.5.3 released
何が変わったかはちょっとわからんけど…
495デフォルトの名無しさん:2008/12/21(日) 18:46:21
リフレクションとか使えないようなんですが、設定項目とか皆さんどうしてるんですか?
1項目ずつコーティングですかね。
496デフォルトの名無しさん:2008/12/21(日) 18:47:32
>>495
mixin
497デフォルトの名無しさん:2008/12/22(月) 00:44:40
Utf-8をShift-jisにするのは、何か外部ライブラリとか使わないと無理ですか?

498デフォルトの名無しさん:2008/12/22(月) 01:13:44
Dってほとんど外部ライブラ(ry
499デフォルトの名無しさん:2008/12/22(月) 01:16:29
toMBSzは?
500デフォルトの名無しさん:2008/12/22(月) 06:34:11
>>497
自前でテーブル持つか、文字コード変換ライブラリ使うしかない。
501デフォルトの名無しさん:2008/12/22(月) 07:24:17
テキスト内の文字列をコンソールに表示してるんですが、文字化けてしまいます。
toMBSzを使ってもA02EA0とかA02EB0みたいな文字に変わってしまうんですが、
何を間違えてるんでしょうか。
502デフォルトの名無しさん:2008/12/22(月) 08:23:29
>>501
A02EA0とかはたぶんポインタの値が表示されてる。
import std.c.string;
auto len = strlen(cstr);
auto dstr = cstr[0..len];
とかでDの配列に変換してやるか、printfなんかのCの関数なら正常に表示できる。

まあtxとかの外部ライブラリ使ったほうがいいと思うけども。
503デフォルトの名無しさん:2008/12/22(月) 10:15:41
>>502
レスどうもです、やってみます。
504デフォルトの名無しさん:2008/12/22(月) 10:33:57
char* cstr;
printf("%.*s",cstr);
505デフォルトの名無しさん:2008/12/22(月) 17:29:08
dflのdirlistviewのサンプルいじってるんですが、
32x32のアイコンをShell32.dllから抽出するのは問題ないんですが、
16x16のアイコンを指定すると

Error: AssertError Failure imagelist.d(171) Image list: invalid image size

ってエラーが出てきます。
このエラーは何が問題なんでしょうか
506デフォルトの名無しさん:2008/12/23(火) 02:55:26
Image list: invalid image size
じゃないか?
507デフォルトの名無しさん:2008/12/23(火) 18:16:13
descent 、紹介動画が上がってるね

extentionMethod って初めて知ったわ。
508デフォルトの名無しさん:2008/12/23(火) 18:52:58
>extentionMethod って初めて知ったわ。
ツッコミ待ち?
509デフォルトの名無しさん:2008/12/23(火) 19:59:45
っ [なんでやねん]
510デフォルトの名無しさん:2008/12/23(火) 23:11:55
ddbgでdflを使ったアプリケーションを実行すると
Unhandled Exception: EXCEPTION_ACCESS_VIOLATION(0xc0000005) at invariant._d_invariant.Object (0x00431925) thread(6556)
とか出るのだけど、これは設定が間違っているのか、それともdflのバグなのか?
511デフォルトの名無しさん:2008/12/24(水) 00:19:48
dflを使ってる場合はコンパイラは1系にした方がいいんじゃないでしょうか。
自分は2系で動かすのはあきらめました。
512デフォルトの名無しさん:2008/12/24(水) 00:32:14
1で使ってる。ddbgじゃなく、普通に実行する分には問題なく起動するんだけどね…
ぶっちゃけると、descent+DMD1.037+Tango+DFL+ddbgでうまく動かす方法が知りたい…
いろいろ試した結果、rebuildを使ってライブラリまですべてコンパイルし直すとうまくいくくさい…けど、なんか負けた気分になる。
513デフォルトの名無しさん:2008/12/24(水) 01:47:42
>>506
そうなんですが、コードを追っていくとLoadImageでとまっているっぽインです。

UINT ExtractIconExA(LPCSTR, int, HICON *, HICON *, UINT);
を使おうと思うんですが、これをDで使う場合はそのままだと駄目なんでしょうか。
Error 42: Symbol Undefined _ExtractIconExA@20
というエラーが出るんですが。
514デフォルトの名無しさん:2008/12/24(水) 01:53:37
>>513
ちゃんとライブラリをリンクしてるのか。
515デフォルトの名無しさん:2008/12/24(水) 06:00:14
ねぇ、ちゃんとリンクしてる?
516デフォルトの名無しさん:2008/12/24(水) 07:35:59
この関数だけ
extern(Windows){
UINT ExtractIconExA(LPCSTR, int, HICON *, HICON *, UINT);

とやって後はdflのを使っています。
517デフォルトの名無しさん:2008/12/24(水) 07:39:12
だからライブラリをリンクしてるのかと聞いてるんだが。
518デフォルトの名無しさん:2008/12/24(水) 09:45:09
externを付けて宣言すれば使えるもんだと思い込んでました。
dflやPhobosにはなかったので他のライブラリを使おうと思いましたが
自分には出来そうにないので、dflのResourcesで使われてる
LoadImageAのパラメータを変えていじってたらできました。

お騒がせしてすいませんでした。
519デフォルトの名無しさん:2008/12/24(水) 23:58:34
少し前までの勢いが懐かしく感じる今日この頃
520デフォルトの名無しさん:2008/12/25(木) 00:52:15
じゃあむし返すが、結局デストラクタによる2つの問題
・非GC管理リソースの解放を確実に行えない
・クラス/構造体内のGC管理リソースの寿命を管理できない
は、いまのDのまま進化を続けたらどういう風に解決されるだろう?
521デフォルトの名無しさん:2008/12/25(木) 00:53:40
GC をメモリ以外のものにも適用できるようにする。
そして、メモリ以外のものに対する GC は
自前で拡張できるようにもする。
522デフォルトの名無しさん:2008/12/25(木) 00:55:08
それってデストラクタが確実に呼ばれるようになるのならそれでいいんじゃないの
523デフォルトの名無しさん:2008/12/25(木) 02:17:44
デストラクタをC#のファイナライザ相当のイベントにしてしまったら?
デストラクタのタイミングで処理しないといけないことって何がある?
524デフォルトの名無しさん:2008/12/25(木) 18:23:27
年末ですね
525デフォルトの名無しさん:2008/12/25(木) 20:12:29
メンバ変数にscope属性が付けられれば後者は解決するかな?
526デフォルトの名無しさん:2008/12/25(木) 20:19:03
宿題の季節
527デフォルトの名無しさん:2008/12/25(木) 21:26:40
質問
Tangoのxmlを使おうと思ってるんですが、
XmlPath!(T).NodeSetって型じゃないんですかね。

サンプルのソースも全部受け取りがAutoになってたり略されてたりで分かりません。
変数 = .query["width"];
変数.value = 'hoge';
でいけるかと思ったんですがNodeSetにvalueはないといわれます。
でもサンプルだとforeachで取った変数から.valueで値をとってるんですが・・・

http://shoo.s20.xrea.com/shoo/programing/chirno_quality/0005.html
ここを参考にしてるんですが、作成と取得はあるんですが変更がありません。
誰か教えて><

528デフォルトの名無しさん:2008/12/25(木) 21:29:04
autoが何になるか分からなければ、typeofで型とって表示してみればいい。
529デフォルトの名無しさん:2008/12/25(木) 21:32:28
>>528
ありがとう。
てか、 .data = "hoge";でいけました><
ここに書き込んで冷静に見直したら即効で事故解決しました。
どうも!
530デフォルトの名無しさん:2008/12/25(木) 22:41:45
>>525
scopeメンバ変数のあるクラスはscopeクラスにしないといけないだろうから、
scopeがどんどん伝染して酷いことになりそうだが……
531デフォルトの名無しさん:2008/12/25(木) 23:41:47
a. デストラクタがいつかは必ず呼ばれるようにしろ
b. デストラクタでメンバオブジェクト触れるようにしろ
 b1. deleteで呼ばれたかGCで呼ばれたか分かるようにしろ
 b2. 依存関係にしたがって解放順序を保証しろ

って感じだよな。

>>530
scopeクラスじゃなくて、「俺をdeleteした場合はscopeメンバも暗黙にdeleteしろ」って目印じゃね?
scopeメンバを持つクラスはscopeクラスの寿命にせずともよくて、
そのクラスの寿命が来たらscopeメンバも自動的にdeleteされる、って感じの。

今は(scopeクラス以外は)デストラクタでメンバをdeleteするのも無理だから、
その点では解決になると思う。もしscopeメンバ同士で循環参照してても、
delete順序が不定になるだけで、仕様上双方一度しか呼び出されないだろうし。
532デフォルトの名無しさん:2008/12/25(木) 23:45:13
>>531
でもそうすると、scopeメンバ変数にscopeクラスを代入できなくなるよね。
533デフォルトの名無しさん:2008/12/25(木) 23:47:43
現状 GC のトリガや基準がメモリに関してのみなのが
GC を採用している言語全体の問題だ。
トリガを拡張できるようにするべき。
534デフォルトの名無しさん:2008/12/26(金) 07:25:31
>>533
メモリ以外のリソースにも参照変数を導入する必要ができるぞ
参照の有無で生死を判断するのだし
メモリとRAIIに全部任せるべきじゃないかね
535デフォルトの名無しさん:2008/12/26(金) 07:38:22
>>531
b1が必要な理由がよくわからなかったので説明しなおしてもらえないか
536535:2008/12/26(金) 12:58:08
あ わかりそう
もう少し考えてみます
537デフォルトの名無しさん:2008/12/26(金) 14:59:46
あれは(b1&& b2)じゃなくて(b1 || b2)。
538デフォルトの名無しさん:2008/12/26(金) 17:38:31
スレ違いかもしれませんが、Descentでプロジェクトエクスプローラーで表示されるobjファイルを
表示されないようにするにはどうしたらいいんでしょうか。
539デフォルトの名無しさん:2008/12/26(金) 22:51:03
>>534
別に GC をもう1つ作るわけじゃない。
優先的に GC を走らせるだけに過ぎない。
540デフォルトの名無しさん:2008/12/30(火) 02:25:01
>>459
DFL+dmd2.022でコンパイルおわらねーな
541デフォルトの名無しさん:2008/12/30(火) 22:28:50
誰もいない・・・
542デフォルトの名無しさん:2008/12/30(火) 22:31:04
いるよ
543デフォルトの名無しさん:2008/12/31(水) 01:41:01
このスレのユニークユーザってどのくらいいるんだろうな
544デフォルトの名無しさん:2008/12/31(水) 02:01:46
俺はこのスレに50レスぐらい書いてるから、きっと10人強だな
545デフォルトの名無しさん:2008/12/31(水) 02:04:26
書き込み10、ROMを足して40くらい?
546デフォルトの名無しさん:2008/12/31(水) 06:47:07
書き込み10が正しいとして
ROMは100以上1000未満くらいいると思う
547デフォルトの名無しさん:2008/12/31(水) 18:40:17
D2になってから、何か方向性が違うなあーとおもって触らなくなった。
548デフォルトの名無しさん:2008/12/31(水) 20:13:02
そもそもconstとかinvariantを使いこなしている人ってどれだけいるんだ?
constメンバ関数とかinvariantクラスとか。
制限きつすぎて使いどころがわからん。
549デフォルトの名無しさん:2008/12/31(水) 20:24:14
つ マルチスレッドのimmutableパターン
550デフォルトの名無しさん:2008/12/31(水) 20:59:38
invariantクラスは使いどころに遭遇したことがないな
でもconstメンバ関数は普通に使うでしょ
C++と一緒で
551デフォルトの名無しさん:2008/12/31(水) 21:11:45
const/invariantは文字列周りのバグを減らせるのが主な価値だと思っている
552デフォルトの名無しさん:2009/01/01(木) 03:22:39
年が更新されたねぇ
553デフォルトの名無しさん:2009/01/01(木) 06:07:47
D2になってから、何か方向性が違うなあーとおもって触らなくなった。
554デフォルトの名無しさん:2009/01/01(木) 06:23:46
D2 で win32api って使えないんですか?
555デフォルトの名無しさん:2009/01/01(木) 06:28:04
つかえますよ・・・
556デフォルトの名無しさん:2009/01/01(木) 07:48:18
const/invariantに引っかかってるんじゃ?
引数がchar[]を要求してたらconst(char)[]/invariant(char)[](stringとか)は
そのままでは与えられないから.dupでchar[]にしないといけないよ
557デフォルトの名無しさん:2009/01/01(木) 08:15:03
558デフォルトの名無しさん:2009/01/01(木) 09:09:07
そろそろD3が登場する時期か
559デフォルトの名無しさん:2009/01/01(木) 09:39:55
伝説のDでかかれたDコンパイラな
560デフォルトの名無しさん:2009/01/01(木) 12:19:56
>>557
正月早々、短縮URL・・・
踏むのこわいなー
561デフォルトの名無しさん:2009/01/01(木) 12:37:29
>>560
問題ないよ
気になるならこれ使いな
ttp://espion.just-size.jp/archives/07/116215705.html
562デフォルトの名無しさん:2009/01/01(木) 18:13:37
>>559
実際問題あり得るのかなぁ?
563デフォルトの名無しさん:2009/01/01(木) 18:54:39
Dでコンパイラコンパイラ作ろうとしてる人いなかったっけ
564デフォルトの名無しさん:2009/01/01(木) 20:05:11
OS作ってるひとはいるね
565デフォルトの名無しさん:2009/01/01(木) 20:49:30
以下DOS禁止
566デフォルトの名無しさん:2009/01/01(木) 20:50:02
>>564
そんなほいほい作れるのもなの?
567566:2009/01/01(木) 20:51:01
× 作れるのも
○ 作れるもの
568デフォルトの名無しさん:2009/01/01(木) 21:32:26
569デフォルトの名無しさん:2009/01/01(木) 21:33:09
Dでmbrにアクセスするプログラムとか手軽に書ける?
570デフォルトの名無しさん:2009/01/01(木) 21:36:26
>>569
gdc+attribute拡張+リンカスクリプトで何とか可能かも?
30日OS本持ってるけど内容忘れたので何とも言えない。
571デフォルトの名無しさん:2009/01/01(木) 21:52:45
>>563
ctfe.zipってのがあった気がする。実装はあまり良くなかったような。
もう一つあった気がする。そっちは悪くなかったような。
でもそれを使った実用的アプリが無い限りは消えゆく運命。
572デフォルトの名無しさん:2009/01/01(木) 23:02:15
>>570
緑の本ですか
573デフォルトの名無しさん:2009/01/02(金) 00:59:49
言語的にこんな事が出来る!って感じから
こんなアプリ作られた!の流れマダァ?(・∀・ )っ/凵⌒☆チンチン
574デフォルトの名無しさん:2009/01/02(金) 02:54:25
>>573
むしろライブラリじゃね?
575デフォルトの名無しさん:2009/01/02(金) 18:06:12
win32 の HelloD を書いたのだけど、
DigitalMars のリンカは OMF しか対応してないから変換が必要になるのであって、
MS のリンカは COFF も OMF も対応してるんだから MS のリンカでリンクしてみると
幸せになれるんじゃね?とかもくろんだ俺、涙目
576デフォルトの名無しさん:2009/01/02(金) 18:43:34
まぁ、確かにキラーアプリというかフレームワークとかの登場は待たれるね。
Ruby の Rails みたいな感じで。
アプリケーション自体は言語非依存なのがふつーだから、
アプリだけあっても言語は普及しないんだよな。

とりあえず、今 ANTLR で遊んでるところ。
こいつの実装自体は Java だけど、D言語のパーサー吐けないかなぁとか思ってる。
577576:2009/01/02(金) 18:47:06
って、ググったら ANTLR-D とかでてるじゃん。
でも、リンク死んでるな… これはプロジェクトがお亡くなりになったのか。
578デフォルトの名無しさん:2009/01/02(金) 19:03:42
移転してたのか。
ttp://www.mbutscher.de/antlrd/index.html

ANTLR v2.7.5 だから v3 の新機能使えないなぁ。
やっぱり自分で何とかするしかないのか。
579デフォルトの名無しさん:2009/01/02(金) 19:21:34
dmcでTinySchemeうごいたぜうひひ
580デフォルトの名無しさん:2009/01/02(金) 20:35:23
D言語仕様が一社だけで決まるのは明らかによくないよなぁ
だれかうぉるたん説得して
581デフォルトの名無しさん:2009/01/02(金) 20:36:59
>>580
そして仕様が決まらないままん何年経つんですね、分かります。
582デフォルトの名無しさん:2009/01/02(金) 21:01:46
D 0x の旗揚げである
583デフォルトの名無しさん:2009/01/02(金) 21:03:04
実際には2xあたりになりそうだなw
584デフォルトの名無しさん:2009/01/02(金) 21:41:39
D歴 0080
我らの愛してやまないうぉるたんは死んだ!何故だ!!!
585デフォルトの名無しさん:2009/01/02(金) 21:42:11
0xってあと364日なのか
586デフォルトの名無しさん:2009/01/02(金) 23:49:02
>>580
作っているのが一社かどうか一人かどうかは関係なくて
仕様の悪いところを説得するだけで十分だよ
Dはコミュニティが作るって言ってたよ
>企業の戦略的なロードマップや、偉大なプログラミング理論によって方向が決まっているような言語ではありません。 D言語コミュニティ からの要望や提案・協力が、向かう先を決めていきます。
587デフォルトの名無しさん:2009/01/03(土) 23:57:11
>>580
例え一社でもBorlandみたいに、本腰入れて作ってくれればいいんだけど・・・
それで失敗したら救いようがないんだけどねw
とりあえず言語より環境をなんとかして!
588デフォルトの名無しさん:2009/01/04(日) 14:47:40
企業がやるなら儲けが出る見込みがないとなぁ
gdcがmonoぐらい軌道に乗ってくれればいいのだが・・・
589デフォルトの名無しさん:2009/01/04(日) 17:07:44
ないないw
590デフォルトの名無しさん:2009/01/04(日) 17:41:49
企業の立場からすると、いつ仕様変更されて
今まで書いたコードが台無しになるかわからない言語なんて
使えるはずがない
591デフォルトの名無しさん:2009/01/04(日) 17:53:37
話がつながってないな
592デフォルトの名無しさん:2009/01/04(日) 18:10:47
これ、なんか作ろうと思ったら 2.xは使わない方がよさそうだね
593デフォルトの名無しさん:2009/01/04(日) 18:41:52
本気でなんか作ろうと思ったらD1.0+Tangoになるんじゃないかな
…ともおもったけど、TangoもTangoで期待通りに破壊的変更が大好きだからな。
594デフォルトの名無しさん:2009/01/04(日) 18:48:54
バージョンアップしなければいいじゃん!
595デフォルトの名無しさん:2009/01/04(日) 18:50:21
>>594
だがこのスレの住人はバージョンアップするために使ってるMばかりなのだった。
596デフォルトの名無しさん:2009/01/04(日) 19:02:56
ABAさんは1.x以前の時代に既にゲームを作ってたよ
597デフォルトの名無しさん:2009/01/04(日) 19:03:43
2.022でコンパイルが終わらないのは何が原因なんでしょう
598デフォルトの名無しさん:2009/01/04(日) 19:07:58
>>597
相互依存テンプレート云々。良く分からなかったけど。
コンパイラ側の問題であって欲しい。
599デフォルトの名無しさん:2009/01/04(日) 19:13:31
>>597
大量のtemlateの使用と、再帰的なimportが原因になっているようです。
ttp://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.announce&article_id=14338
このへん。templateに関するバグを改善したらこうなったらしい。
次の更新あたりで治るといいねぇ
600デフォルトの名無しさん:2009/01/05(月) 01:24:50
いよいよ、C++も真っ青な templete 地獄がやってきましたか。
601デフォルトの名無しさん:2009/01/05(月) 16:59:10
先生、dmd でコンパイルしたときに
一定のメッセージを表示させたりすること出来るかな?

rebuild で、*.d より新しい *.objがある時に
コンパイルを省略してくれてるかを
しらべたいねん
602デフォルトの名無しさん:2009/01/05(月) 17:10:27
人を先生呼ばわりする前に払うもん払ってもらおうか
603デフォルトの名無しさん:2009/01/05(月) 17:14:12
>>601
その目的ならrebuild -vで良くね?
604デフォルトの名無しさん:2009/01/05(月) 18:20:22
はらったまーきよったまー

>>603
ないすです。ありがと。
605デフォルトの名無しさん:2009/01/06(火) 02:42:45
思い出したので貼っておきます
http://pc11.2ch.net/test/read.cgi/tech/1128794438/
606デフォルトの名無しさん:2009/01/06(火) 08:53:14
GCんときに全スレッドが止まるのにOSとはねぇ・・・
607デフォルトの名無しさん:2009/01/06(火) 12:02:20
並列gc実装すればおk
608デフォルトの名無しさん:2009/01/06(火) 18:14:46
OSレベルでライトバリアとか張れたら、もっとまともなGC実装できそうだよね
609デフォルトの名無しさん:2009/01/06(火) 19:29:32
なんだか、ものすごくかっこいい何かを思い浮かべてしまった。orz
610デフォルトの名無しさん:2009/01/06(火) 19:48:38
一般名詞だけでwrite, right, rite, light / liteとあるからなあw
固有名詞まで含めればLeight, Lyte, Reit, Rite, Rheydt, Wrightとより取りみどり
611デフォルトの名無しさん:2009/01/06(火) 20:13:24
光の障壁か。かっこよさそうだな。
612デフォルトの名無しさん:2009/01/06(火) 20:15:55
インド人を右に!
613デフォルトの名無しさん:2009/01/07(水) 14:00:13
614デフォルトの名無しさん:2009/01/07(水) 14:06:45
the type of a string literal is now invariant(char)[]  rather than invariant(char)[length_of_string].
こりゃいいや
615デフォルトの名無しさん:2009/01/07(水) 14:42:11
string s = "hoge";
はアウアウ?
616デフォルトの名無しさん:2009/01/07(水) 14:56:55
>>614
どこが? テンプレートでlengthが使えなくならないか?
617デフォルトの名無しさん:2009/01/07(水) 15:56:19
static assert (isStaticArray!(typeof("string literal")));
これの結果が反転しちゃったね
618デフォルトの名無しさん:2009/01/07(水) 15:59:30
>>615 無問題
619デフォルトの名無しさん:2009/01/07(水) 16:25:05
>>616
こういうことでいい?
import std.stdio;
void main() {
string a = TailCutter!("abcd");
assert(a == "abc");
enum b = StaticReplacer!("abcdefg","b","_");
assert(b == "a_cdefg");
// static assert にしてみたらわろた
}
template TailCutter(string s) {
enum TailCutter = s[0..length-1];
}
template StaticReplacer(string s, string from, string to) {
static if (s.length == 0)
enum StaticReplacer = "";
else
enum StaticReplacer = ([s[0]]==from?to:[s[0]]) ~ StaticReplacer!(s[1..length],from,to);
}
620デフォルトの名無しさん:2009/01/07(水) 16:45:17
はてコンパイルタイムの文字列連結はどうすればいいのか
621デフォルトの名無しさん:2009/01/07(水) 16:46:57
>>619
ちゃう。
import std.stdio;
uint foo(T)(T s){
  int[T.length] x;
  return x.length;
}

void main(){
  writefln(foo("test"));
  writefln(foo("t"));
}
の場合。
622デフォルトの名無しさん:2009/01/07(水) 16:56:56
お話のところすまん
今回のバージョンってやばめ?
623デフォルトの名無しさん:2009/01/07(水) 17:23:48
破壊的だとしても>614の件くらい
624デフォルトの名無しさん:2009/01/07(水) 17:43:30
625デフォルトの名無しさん:2009/01/07(水) 18:15:44
std.c.windows に書かれてる windows api がじゃまくさいっ
626デフォルトの名無しさん:2009/01/07(水) 18:59:42
>>625 win32bindingsがあるからもうそれ誰も使ってない気がする
627デフォルトの名無しさん:2009/01/07(水) 19:52:27
>>621
そんな得体の知れない長さの配列をスタックに割り当てるなんて怖いお…
628デフォルトの名無しさん:2009/01/07(水) 20:24:50
w32 api bindings、足りない API おおくね?とくに winuser.d


ていうか、descent でライブラリに phobos を指定してると
いつの間にか stc.c.windows を import してたりして
重複でエラーとかでるのが鬱陶しい。
629622:2009/01/07(水) 21:01:11
>>623
ありがと
今から入れてみる
630デフォルトの名無しさん:2009/01/07(水) 22:53:00
おいらもdsssでpathも通したのですがコマンドプロンプトで
dsssは何をしてもError: 4invalid UTF-8 sequenceしか返しません。
dsss--helpでも単にdsssと打ち込んでも同様です
ですが、

c:\d\bin>dsss build *.d

とやると正常にコンパイルされました。
dmdのほうはどこのカレントディレクトリでも問題なくコンパイルできました。
コマンドプロンプトの文字コードをUTF-8にしてもだめでした。環境変数も全て半角です。
何か考えられる原因がありましたらお教え頂ければと思います。お願いします。
631デフォルトの名無しさん:2009/01/07(水) 23:39:06
>>630
もう少し環境を詳しく書いた方がいいのでは、dsssのバージョンとかOSとか。
パスでWindowsだろうってことはわかるけど。

svnで落としてきてリビジョンを変えてビルドしてみるか、ビルド済みバイナリ
版を落としてみたらどうだろう。うちの環境ではLinuxは前者、Windowsは
後者でないと上手く動かなかった。
632630:2009/01/08(木) 00:26:07
>>632
すいません、当方環境はお察しの通りWInXPです。
dsssのバージョンは0.78-x86-winです。
さっそく0.77から0.75まで順番に変えて試してみましたが駄目でした・・・

C:\>dsss
Error: 4invalid UTF-8 sequence
となってしまいます・・・
すいませんがバイナリ版はどこにあるのでしょうか?
633デフォルトの名無しさん:2009/01/08(木) 01:03:07
「おいらも」って、話がどこから続いてるんだかわからないのだけど

c:\> dsss
だけなら、usage が出たような気がする。

なんかそれ、うまくビルドできてないとかそういう落ちだと思うな。

svn.dsource.org/projects/dsss/downloads/0.78/
からどーぞ
634デフォルトの名無しさん:2009/01/08(木) 01:07:07
635634:2009/01/08(木) 01:11:17
しまったorz
636デフォルトの名無しさん:2009/01/08(木) 01:48:01
>>321と同じようなエラーだけど、>>389,390で上がってる解決方法の、
環境変数からすべての日本語を取り除いた状態でもだめっぽいってことかな?
637630:2009/01/08(木) 11:23:32
>>633
すいません、>>321の方の事でした。
見づらくて申し訳ないのですが、
http://a1.wtakumi.com/s/yuyu21/1231380648398154.jpeg
このような感じでdmdはpathが通ってますが、dsssは通っていません(同じフォルダに入ってますから通ってる筈なのですが)。
useageも出てきませんでした。dsssがあるカレントディレクトリでなら問題なくビルド出来るのですが・・・

>>634
ありがとうございます。入れてみましたがやはり駄目でした・・・。

>>636
はい、環境変数に日本語はありません。全て半角で書いてありますが駄目でした。
ここは諦めてbinフォルダにdsss_objsを作るしかないでしょうか。不便ですけど
638デフォルトの名無しさん:2009/01/08(木) 13:15:35
Web之匠ツールでの、アップロードしたファイルを外部から参照する事を目的とした利用は、規約により禁止されております。
639630:2009/01/08(木) 20:00:18
他所様にも迷惑かけてしまったみたいで・・・
不便ですがbinフォルダを使う事にします・・・
640デフォルトの名無しさん:2009/01/08(木) 21:27:01
dmd2.023でDLL作ったら変な関数が見覚えの無い関数が一緒にエクスポートされてました…
gc_clrProxyとgc_setProxyってんだけど、なんだろうこいつら

ついでに、コンパイル時はエラー無いけどイメージ無効とかなんとか言われる
2.020の時は動いたのに…(´・ω・`)
641デフォルトの名無しさん:2009/01/08(木) 21:29:58
OneClickDMDの必要性を感じる
642デフォルトの名無しさん:2009/01/08(木) 21:39:38
>>640
core.memory
643デフォルトの名無しさん:2009/01/08(木) 21:51:22
>>642
探したらいました、ありがとう
中身はよく分からんけど、呼び出さなきゃいてもいなくても一緒か…
644デフォルトの名無しさん:2009/01/08(木) 22:42:49
プロセス間での同期ってやっぱりOS依存のAPIを叩くしかないんかな?
645デフォルトの名無しさん:2009/01/09(金) 15:51:34
D言語って日本語で変数や関数定義できるんだ
646デフォルトの名無しさん:2009/01/09(金) 19:27:17
できるお
647デフォルトの名無しさん:2009/01/09(金) 21:42:11
昔のスレでそれで遊んでる人いたよね
648デフォルトの名無しさん:2009/01/10(土) 00:23:49
昔のスレで遊んだと言うと、
Part12 の Ruby のイテレータっぽいやつ作ってた頃は楽しかった。
649デフォルトの名無しさん:2009/01/10(土) 00:34:33
それって前スレでもやってなかったか
650デフォルトの名無しさん:2009/01/10(土) 01:08:01
継続とか取得できるようになんねーかなー
651デフォルトの名無しさん:2009/01/10(土) 01:36:05
そいえば、d でコンパイルして、Win98 で動くアプリってつくれるのかなw

今日、IE4 で動いてる環境を見てきたw
652デフォルトの名無しさん:2009/01/10(土) 01:57:34
>>650
継続は使わなくても言語仕様に入れるだけで重くなる
653デフォルトの名無しさん:2009/01/10(土) 02:12:46
状態移管を正しく記述できないマ専用の機能だよね
654デフォルトの名無しさん:2009/01/10(土) 06:49:44
Wikipedia では Web アプリでの応用が書いてあるけど、
変数元に戻すのマンドクセ
くらいの意味にしか取れなかった。
そもそも、何を残して何を残さないかちゃんと考えないと
すぐにメモリパンクするだろ。
655デフォルトの名無しさん:2009/01/10(土) 06:58:46
>>654
たとえばコルーチンでは、二回目呼び出したときは前回yieldしたところから実行が再開されるけど、
それを更に拡張し、コード上の任意の位置で実行を中断して、
その一時停止の状態を一級市民として扱えるようにするのがいわゆる「継続」。
656デフォルトの名無しさん:2009/01/10(土) 12:47:16
ttp://www.incasoftware.de/~kamm/projects/index.php/2009/01/09/ldc-09-released/
> The first version of LDC, the LLVM based compiler for version one of the D programming language has been released for x86-32 Linux. Get it here!
657デフォルトの名無しさん:2009/01/10(土) 18:15:30
そういえば、Dって処理系が書きやすいんだっけ?
文法が処理しやすいように定義されてるとか聞いたような
658デフォルトの名無しさん:2009/01/10(土) 19:09:21
>>656
gdcの開発が止まっているような中で、オープンソースの処理系が進展しているのは頼もしい
659デフォルトの名無しさん:2009/01/10(土) 20:51:19
GDCの開発に加えてくれ!とMLにポストしてる人もいるし流れ自体は止まってないよね
660デフォルトの名無しさん:2009/01/10(土) 21:56:33
むしろガンガン意見してくれ的なのをTangoのところでみたな。
ttp://www.dsource.org/projects/tango/forums/topic/664
661デフォルトの名無しさん:2009/01/10(土) 23:11:24
これtangoがデフォルトなのか、phobosは使えないのかな・・・
662デフォルトの名無しさん:2009/01/11(日) 03:00:19
dmd2.023とdmd1.039は、dmd2.022とdmd1.038に比べたら速くなったけど、
dmd2.021とdmd1.037に比べたら遅くなった気がする。
……気のせい?
663デフォルトの名無しさん:2009/01/11(日) 03:58:38
>>662 MLによると気のせいじゃない
664デフォルトの名無しさん:2009/01/11(日) 14:46:25
>>661
ttp://www.dsource.org/projects/ldc
>or
>Fetch the druntime for D2 (this is experimental)

>druntime is the new runtime for D2 to enable Phobos (official standard library) and Tango (community driven library) to coexsist peacefully when Tango will move to D2.
665デフォルトの名無しさん:2009/01/11(日) 20:46:16
みなさんエディタは何を使ってるんですか?
666デフォルトの名無しさん:2009/01/11(日) 20:50:49
descent と サクラエディタをときどき

sedit とか edlin などという呆けはかまさない。
667デフォルトの名無しさん:2009/01/11(日) 21:40:54
Entice Designer
668デフォルトの名無しさん:2009/01/11(日) 21:44:41
サクラエディタだなあ。
669デフォルトの名無しさん:2009/01/11(日) 21:47:16
普段はgeany。winではEmEditor。
670デフォルトの名無しさん:2009/01/11(日) 22:02:10
D用だとCodeBlocksかなあ
起動が重いが
671デフォルトの名無しさん:2009/01/11(日) 22:05:55
notepad++使ってます

しかし見事にバラバラだなwww
672デフォルトの名無しさん:2009/01/11(日) 22:17:38
秀丸
673デフォルトの名無しさん:2009/01/11(日) 22:25:18
私はvim
674デフォルトの名無しさん:2009/01/11(日) 22:31:41
emacs/xyzzy
675デフォルトの名無しさん:2009/01/11(日) 22:33:31
ほんとかよw
676デフォルトの名無しさん:2009/01/11(日) 22:58:39
Peggyです。
677デフォルトの名無しさん:2009/01/11(日) 23:01:45
poseidonです。
DOSでコンパイルしてるけど・・・
678661:2009/01/11(日) 23:23:59
>>664
レスサンクス。でも使ってるのD1なんだ・・・。
D1用のランタイムでビルドしてみたけどmake runtimeで挫折。
公式にphobosに対応したらまた使ってみるよ
679デフォルトの名無しさん:2009/01/11(日) 23:55:46
>>675
1.0以降Dが意外と普及してきたから
補完機能付きのメジャーなテキストエディタだと結構対応できる
680デフォルトの名無しさん:2009/01/12(月) 00:00:36
>>671
(゚∀゚)人(゚∀゚)ナカーマ
681デフォルトの名無しさん:2009/01/12(月) 00:09:35
Ginnieメインでたまにdescent使ってるわ。
682デフォルトの名無しさん:2009/01/12(月) 00:26:15
>>679
SmultronというMac向けのエディタでさえ対応してたり
しかしネスト可能コメントに対応しているGUIベースのエディタはなかなか見ない
変態文法を理解させるならそれこそemacsにやらせるのが早い気がする
683デフォルトの名無しさん:2009/01/12(月) 01:04:05
WZ Editor
684デフォルトの名無しさん:2009/01/12(月) 02:05:11
>>679 ほんとかよってのは本当にこんなにバラバラなのかよってことでした
685デフォルトの名無しさん:2009/01/12(月) 10:22:48
WindowsMobileアプリは書けないですよね?
686デフォルトの名無しさん:2009/01/12(月) 12:18:42
OSというよりは、CPUが違うから無理だな。
GDCに手を加えて、クロスコンパイルできるようにしてやるとか。
687デフォルトの名無しさん:2009/01/12(月) 12:42:58
>>686
GDCというものがあるんですね。
ARMはサポートされてるみたいですね。
688685:2009/01/12(月) 14:45:10
>>686
本家の方でもちらほら話題に上がってるみたいですね。
参考になりました。ありがとうございます。
689685:2009/01/12(月) 17:20:45
ttp://www.smartmobili.com/content/view/38/41/lang,english/
こんなもの見つけました。
690デフォルトの名無しさん:2009/01/12(月) 17:25:52
今北三業

D言語とは一体
デブ言語?
691デフォルトの名無しさん:2009/01/12(月) 17:46:04
>>689 爆発的普及はないがじわじわと普及してはいるんだなあ
692デフォルトの名無しさん:2009/01/12(月) 17:49:35
おっ
もう内部的にinvariantがimmutableに置き換わっているんだね
//dmd2.023
void main(){ char[] a = "hoge"; }
a.d(1): Error: cannot implicitly convert expression ("hoge") of type immutable(char)[] to char[]
693デフォルトの名無しさん:2009/01/12(月) 21:13:46
D2のThreadクラスで、pause()とresume()を使いたい場合って
何か代用方法などはあるのでしょうか?
694デフォルトの名無しさん:2009/01/12(月) 21:40:23
>>693 それじゃ伝わらないと思う
695デフォルトの名無しさん:2009/01/12(月) 21:57:34
いや、伝わるわ。なぜなら俺も似たような質問をしたことがあるから。Tangoで。
結論から言うと、ない。WinでいうところのSetEventとWaitForSingleObject相当の機能もないと思う。
それこそOS依存なAPIを叩くしか。
TangoならMutexとかConditionとか活用すればたいていの場合切り抜けられるけど…
696デフォルトの名無しさん:2009/01/12(月) 22:10:08
ユーザースレッドを実装するとか。
1スレッド内でやる擬似スレッド。
当然1cpuしか使えないけど。
697693:2009/01/12(月) 22:13:59
質問が言葉足らずで申し訳ありませんでした。

当方Phobosを使用しております。
ThreadPoolの実装で、
WorkerThreadを待機させておくのにpause()を使いたかったのです。

D1では上手く行ったのですが、D2にはpause()が無いので
ビジーループ以外に方法が思いつかなくて・・・。


簡単な解決方法は無さそうなので、大人しくD1で開発して行こうと思います。
お時間割いて頂き、ありがとうございました。
698デフォルトの名無しさん:2009/01/13(火) 00:15:08
core.Threadになってから変わったからか
699デフォルトの名無しさん:2009/01/13(火) 00:25:41
流れを破壊的変更するけど、
DirectX SDK の Direct3D Tutorial.1 まで行けた。

しかし、coffimplib で↓のような状態なのだけど、これどうすりゃいいの?

C:\test\lib>coffimplib "\dxsdk Nov.08\Lib\x86\DxErr.lib" DxErr.lib
Error: not an import library

C:\test\lib>coffimplib "\dxsdk Nov.08\Lib\x86\DxErr9.lib" DxErr9.lib
Error: not an import library

C:\test\lib>coffimplib "\dxsdk Nov.08\Lib\x86\dxguid.lib" dxguid.lib
Error: not an import library

C:\test\lib>coffimplib "\dxsdk Nov.08\Lib\x86\xapobase.lib" xapobase.lib
Error: not an import library

C:\test\lib>coffimplib "\dxsdk Nov.08\Lib\x86\xapobased.lib" xapobased.lib
Error: not an import library

>>33 さんのその後が気になるぜ。
700デフォルトの名無しさん:2009/01/13(火) 02:00:32
dflのTreeViewってHitTest(だっけ?)出来るようになった?
701デフォルトの名無しさん:2009/01/13(火) 16:14:19
知ってると思うがdirectxはcom(component object model)
702デフォルトの名無しさん:2009/01/13(火) 18:30:35
関係ないしw
703デフォルトの名無しさん:2009/01/13(火) 21:45:08
D3DX9 がほとんどポーティングされてないぜ・・・orz

tutorial 3、いきなりこけたw
704デフォルトの名無しさん:2009/01/14(水) 10:07:02
win32 api bindings,
win32/directx/d3dx9.d
でバグ発見。

D3DXCreateTextureFromFileA(〜, LPCTSTR, 〜);

って書いてあるせいで version=Unicode 時に適切な引数を渡せず、いつも
D3DXERR_INVALIDDATA の結果になっちゃう。

D3DXCreateTextureFromFileA(〜, LPCSTR, 〜);
D3DXCreateTextureFromFileW(〜, LPCWSTR, 〜);

って書き直したら直った。他にもあると思う。
フォーラムはいる気はさらさら無いので、入ってるひといたらバグレポお願い。
いなかったらチラシの裏
705デフォルトの名無しさん:2009/01/15(木) 10:47:44
>>451 でも書かれてますけど
Descent+Antでいけるんですね。
参考までに
ttp://gim.jogger.pl/2009/01/14/eclipse-3-4-descent-ant-tango-linux/
706デフォルトの名無しさん:2009/01/15(木) 17:20:04
Vista + Descent + Rebuild + DMD1.039で

module Foo;
import win32.winuser;
int main(){
MessageBox(null, "SampleFoo", "", MB_OK);
return 0;
}

をDOS窓で >dmd Foo.d だと問題なく実行されるんですが
同じくDOSから >rebuild Foo.dだと
..\win32\winnt.d(47): template instance forward reference to template declaration CPtr(T)
という警告が出てしまいます。
初歩的な点で申し訳ないんですが、何かヒントいただけないでしょうか?
707デフォルトの名無しさん:2009/01/15(木) 18:22:20
708デフォルトの名無しさん:2009/01/15(木) 18:42:46
>>707
ありがとうございます。調べてみます。
709705:2009/01/15(木) 18:50:38
win32.basetsdにwin32.winntの
alias CPtr!(char) LPCCH, PCSTR, LPCSTR;
alias CPtr!(wchar) LPCWCH, PCWCH, LPCWSTR, PCWSTR;
をコピーしてみたところ通りました。
このやり方に問題があったらご指摘お願いします。
710706:2009/01/15(木) 18:51:17
すいません(汗 ↑は706でした
711706:2009/01/15(木) 20:36:00
連投すいません、結局やってみたらあちこちでひっかかってしまって(汗
cptr.dとか作ってあちこちにimportさせてみたらうまくいきました。
712デフォルトの名無しさん:2009/01/15(木) 20:42:27
うーん、やっぱり土台がいつまでも揺れてると
立派な建物建ててもすぐ崩れるな。

RoR みたいなライブラリは作りたくても作れないってのが現状かなー。
713デフォルトの名無しさん:2009/01/15(木) 21:34:02
rubyってそんなに安定してたっけ
714デフォルトの名無しさん:2009/01/15(木) 21:53:14
>>712
>>706のエラーは土台(dmd)じゃなくてrebuildのせいじゃないか?
715デフォルトの名無しさん:2009/01/15(木) 22:02:21
rebuild の conf ファイルと
sc.ini を見てみないことにはなんともいえないとおもうぜ
716706:2009/01/15(木) 22:17:56
>>715
そのrebuildのconfってやつなんですが、探しても見つからなかったんですが
dsss-0.78-x86-windowsでなくてdsss-0.78のほうにあるrebuild.confってフォルダの
中身のことですか?
dsss-0.78-x86-windows\etc\rebuildが相当するフォルダのようなんですが
この中のファイルの設定ということでしょうか?
sc.iniにはlibとsrcの場所を追加してます。
717デフォルトの名無しさん:2009/01/15(木) 22:19:24
rebuildだのbudだのはこれがあるからdmdのレスポンスファイル書くハメになるんだよな
718デフォルトの名無しさん:2009/01/15(木) 23:32:08
>>716
すまん、使ってないからファイル名わすれた。
ただ、そういうファイルがあって、dsss か、rebuild はそれに影響を受けた記憶がある。
719デフォルトの名無しさん:2009/01/16(金) 03:47:49
バージョン管理始めててふとおもった。

bin ディレクトリや src ディレクトリも、バージョン管理対象に含めた方がよくねぇかな?
720デフォルトの名無しさん:2009/01/16(金) 14:08:21
>>719
それって要はdmdのってことだよな?それは俺も何度か思ったことがw
721706:2009/01/17(土) 15:48:49
Descentの補完で例えば
WNDCLASS wc;
wc. でstd.c.windows.windowsのWNDCLASSだとメンバが表示されるのに
win32.winuserのWNDCLASSだと補完が表示されないのはなぜ?
722デフォルトの名無しさん:2009/01/17(土) 17:17:29
しらんがな

ここは君のサポートじゃないし。
723706:2009/01/17(土) 17:59:44
お邪魔しました。
素直にC#にもどりますw
724デフォルトの名無しさん:2009/01/18(日) 13:18:38
初心者はD使うなよ(笑)
ファミコンでもやってろよな(笑)
725デフォルトの名無しさん:2009/01/18(日) 13:23:23
>>723
どんまい。バイバイ
726デフォルトの名無しさん:2009/01/18(日) 13:35:53
そういえばDで実装したNESのエミュレータがあったな・・

今もコンパイルできるのかのう・・
727デフォルトの名無しさん:2009/01/18(日) 13:42:40
うんそうだねきみにはむりなんだよさようなら
728デフォルトの名無しさん:2009/01/18(日) 14:05:18
なんか必死なのがいますね
729デフォルトの名無しさん:2009/01/18(日) 15:06:41
そろそろ破壊的うpがほしい
禁断症状が・・・
730デフォルトの名無しさん:2009/01/18(日) 19:57:36
>729
いまやD1.0でTango使ってた方がその楽しみは味わえるかも知れんよ。
ttp://www.dsource.org/projects/tango/wiki/0_99_8_BreakingChanges
731デフォルトの名無しさん:2009/01/18(日) 20:30:12
すまない、Tangoは食わず嫌いなんだ(´・ω・`)
732デフォルトの名無しさん:2009/01/18(日) 21:05:17
早くD2でphobosとtangoが一緒に使えるようになったらtango調べるのに
733デフォルトの名無しさん:2009/01/18(日) 23:02:58
Phobosを使うこと自体が破壊的変更だからな
734デフォルトの名無しさん:2009/01/18(日) 23:13:15
>>727
死ね
735デフォルトの名無しさん:2009/01/18(日) 23:49:51
>>727
死ね
736デフォルトの名無しさん:2009/01/18(日) 23:53:36
破壊的うpが多いと利用者が減ってしまうのでは
737デフォルトの名無しさん:2009/01/18(日) 23:59:14
Phobosしか使ってないから分からんのだけど
Tangoってそんなに良いものなのかい?
738デフォルトの名無しさん:2009/01/19(月) 00:15:45
自分の場合ほぼ100%Tangoでやってるので、Phobosより悪いところを探す方が大変なのだけど…
UpperCamelのモジュール名くらいじゃなかろうか。
それにしたってむしろ全部小文字よりも読みやすいし個人的には気に入っているのだけど…
あまりにもたくさんあるモジュールが導入の敷居を高めているのか…?
739デフォルトの名無しさん:2009/01/19(月) 00:17:55
Stdout()()()()みたいなのなれないなあ。
740デフォルトの名無しさん:2009/01/19(月) 00:24:01
そういう人はStdout.formatln()使えばよくないか?
741デフォルトの名無しさん:2009/01/19(月) 01:02:17
>>739
そんなのあるのかw
742デフォルトの名無しさん:2009/01/19(月) 04:01:20
>>740
その関数の名前はwritelnであってほしいんだよねえ…
俺の美意識と微妙なところで齟齬があって好きになれんのだ。
743デフォルトの名無しさん:2009/01/19(月) 04:11:41
writeflnか。
ともかく、formatってのはおかしいだろうと。
744デフォルトの名無しさん:2009/01/19(月) 04:14:27
alias format writef;
745デフォルトの名無しさん:2009/01/19(月) 04:17:23
たしかに、ライブラリの設計って設計者の美意識を反映する部分があるね。
なんていうか、シムシティ的な。
746デフォルトの名無しさん:2009/01/19(月) 04:23:29
formatって何由来だろ。Common Lisp?
747デフォルトの名無しさん:2009/01/19(月) 04:32:07
>>742の言いたいのはformatで出力までするのはおかしいってことじゃないの?
748デフォルトの名無しさん:2009/01/19(月) 04:36:08
Stdoutに対するformatlnなのだから出力までして当然だろう!
ってことじゃないの?
749デフォルトの名無しさん:2009/01/19(月) 04:37:51
>>747
そゆことです。

formatっていうと、文字列を返して欲しいイメージが。
750デフォルトの名無しさん:2009/01/19(月) 07:32:19
Tangoはセンスがな・・・
751デフォルトの名無しさん:2009/01/19(月) 09:10:04
You!!

import dango.io;

つくっちゃいなYO!
752デフォルトの名無しさん:2009/01/19(月) 09:53:22
Tango でファイルを
最大 2kb だけ読み込むってどうやるの?

tango.io.read だと一気に全部読んでしまいそうだし・・・
753デフォルトの名無しさん:2009/01/19(月) 10:20:21
C++でもprintfを使っちゃう人はPhobos派
素直にstd::coutを使う人はTango派

間違いない
754デフォルトの名無しさん:2009/01/19(月) 10:48:50
Stdoutに対して書込み操作するのはwriteといちいち言うまでもなく当り前なわけで、writeと書くのは冗長だ。
じゃあ文字列の出力にメソッド名なんていらなくない?ってなったのがStdout()で、
Stdout.flnだけだと意味不明なメソッド名だから、Stdout.formatln。
いいと思うんだけどな…
…まぁ、何はともあれ、wvnsprintfとかつけられるよりはましなんじゃね?
755デフォルトの名無しさん:2009/01/19(月) 16:06:14
Stdout(format("〜", "〜"))

にしろって落ち?
756デフォルトの名無しさん:2009/01/19(月) 20:00:55
>>754
その場合冗長なのはwriteじゃなくてStdoutの方だと思う
「何をするか」に比べれば「何に対して」なんて付加的な情報に過ぎないし、
何も明示しなかった場合の出力先だからこそ「標準」出力と名づけられてる、と思うし
757デフォルトの名無しさん:2009/01/19(月) 20:56:39
>>753
ノ該当してるわ。C++でprintf派。
巨大ライブラリ嫌い。分厚いラッパーも嫌い。アダプタ地獄は嫌ずら。
758デフォルトの名無しさん:2009/01/19(月) 22:18:18
http://www.digitalmars.com/d/2.0/phobos/std_gc.html
の下の方にあるsetHandleとかって2.023にはないのかしらん
>>640のgc_setProxyがソレなのか?
それか、core.runtimeのinitializeが自動で相当のことやってくれてるんなら
うれしいなあ。
759デフォルトの名無しさん:2009/01/19(月) 22:46:25
>>758
setHandle相当をやってるかと言えばやっている
だけど,そのsetHandleのようにGCを入れ替え可能かと言えば出来ない

そこに出てくるProxyはそれとは別でプログラム側からの呼び出しの間に挟まっているもの
760758:2009/01/19(月) 23:12:00
>>759
自由にGCを入れ替えたりはできないけど、
http://www.digitalmars.com/d/2.0/dll.html
ここのサンプルでgc2個走らないようにはできる。

という意味ですよね?それで十分なんです。
これは朗報。dクス!
761デフォルトの名無しさん:2009/01/19(月) 23:28:37
そもそも標準出力なんてしょっちゅう使うものなのかと。
そんなにStdoutが嫌いなら嫌いなところだけTangobos使えばいい
762デフォルトの名無しさん:2009/01/20(火) 00:47:18
Tangobosとかますます汚いじゃん
763デフォルトの名無しさん:2009/01/20(火) 18:38:45
まず第一に、名前が汚いからなあ、、、
764デフォルトの名無しさん:2009/01/20(火) 19:05:16
中身はPhobosと一緒なんでしょ?
D2.0系との誤差はあるかもしれないけど。
765デフォルトの名無しさん:2009/01/21(水) 21:14:39
みんな、C++ のヘッダを D に移植するときは long と int の違いに注意だ!
これ、俺との約束な!!!


・・・すっげーなやんだorz
766デフォルトの名無しさん:2009/01/21(水) 23:39:16
http://www.kmonos.net/alang/d/2.0/htod.html

ここなんかにも書いてありますな
767デフォルトの名無しさん:2009/01/22(木) 03:59:02
>>765
どうもありがとう。ちょうどそういうことしてるところだった(ODE)
768デフォルトの名無しさん:2009/01/22(木) 04:01:03
ところで mixin の中に mixin をさらに埋め込むことってできますか?
769デフォルトの名無しさん:2009/01/22(木) 05:16:39
mixinするtemplateのなかでmixinをするってことなら出来る
770デフォルトの名無しさん:2009/01/22(木) 17:15:02
文字列mixinのなかで、文字列mixinもできるよ。更にそのなかでも
771デフォルトの名無しさん:2009/01/22(木) 17:30:02
まとりょーしか?
772デフォルトの名無しさん:2009/01/22(木) 23:42:05
>>769-770

マジすか!どうもありがとう!
マトリョーシカミックスイン、やってみます。
773デフォルトの名無しさん:2009/01/23(金) 00:19:57
こんな感じでできたっぽいです!手で展開する羽目にならなくてよかった。

C++ :
enum {
D_ALL_PARAM_NAMES(0)
dParamsInGroup,
D_ALL_PARAM_NAMES_X(0x000,1)
D_ALL_PARAM_NAMES_X(0x100,2)
D_ALL_PARAM_NAMES_X(0x200,3)
dParamGroup=0x100
};

D :
mixin(
`enum {`
`mixin D_ALL_PARAM_NAMES_MIXIN!("0");`
`dParamsInGroup, `
`mixin D_ALL_PARAM_NAMES_X_MIXIN!("0x000", "1");`
`mixin D_ALL_PARAM_NAMES_X_MIXIN!("0x100", "2");`
`mixin D_ALL_PARAM_NAMES_X_MIXIN!("0x200", "3");`
`dParamGroup=0x100`
`}`
);
774デフォルトの名無しさん:2009/01/23(金) 01:07:51
>>773
それだとCTFEで出来ない?
775773:2009/01/23(金) 01:22:13
>>774
できそうですか?CTFE やったことない・・・。
そして773のはできたと思ったらできていなかった・・・!

もうちょい試行錯誤してみます。
776デフォルトの名無しさん:2009/01/23(金) 01:38:14
なにやってるかわからん俺、涙目^-^;

google video なくなるんだってね
D言語関連でなにか上がってなかったっけ?
777デフォルトの名無しさん:2009/01/23(金) 02:25:41
ウォルたんのD解説動画あたりが上がってた気がする

俺も>>775がやってることがわからんw
778773:2009/01/23(金) 02:44:04
物理エンジンライブラリのODEをDで使いたくてC++のヘッダを持ってこようと
してるんだけどね・・・。
今は意地みたいな感じでいじくりまわしてるけど、
正直マクロを展開した結果を手で書いたほうが速いw
(derelict はそうしてました)
779デフォルトの名無しさん:2009/01/23(金) 04:19:58
enumまでmixinするならdefineEnumで定義した方がいいような
780デフォルトの名無しさん:2009/01/23(金) 07:36:41
>>778
ソース見てきた。こんな感じか?
http://codepad.org/cNtS8gwU
しかしgcc -Eでのマクロ展開結果をコピーした方が圧倒的に速いな。
どうせ他のところでは使われてないマクロだし。
781デフォルトの名無しさん:2009/01/23(金) 09:02:47
                      / <
                   __>    ̄
どうした?!          _/   /\ |\
               :ハ // ̄
つこう太郎!!     :/ |:
          Σ( ◎) / |:
           _ノ(ノヽノ  ヽ- :
        :/           \:
       :/  ノ人       U  ヽ:
         :| イ‐ヽ\)   U        ):
        :|  <●> ヾ)        ):  と、父さん!!
       :ヾ/'  ( o o ) ヽ,  U  /:
         :|   ,.-‐U-、 i  ノ  ノ:    踏んだ気配です!!…
        :ヘ <EEEEE > レノ  /:
          :ヽ、ヽ--ィ´ ノノノノ,,:
        :/~/`ーーーー´/___/ヽ:
        :/ | ̄~|ヽ/\/|   |' |:
       :/  |__|   o  .|__|  |:
782デフォルトの名無しさん:2009/01/23(金) 09:20:00
でもそこにこだわっちゃうあたりが D プログラマっぽいかもしれないw
783デフォルトの名無しさん:2009/01/23(金) 18:29:58
さて何か面白い話ないかなー
verうpまだー?
784デフォルトの名無しさん:2009/01/23(金) 21:51:38
ttp://www.nwcpp.org/
流れ的にこんなのはどうだろう。
785773:2009/01/23(金) 23:15:27
>>780
わざわざすいません!チェック用コードがとんでもないことにw

昨日あれから以下のページを参考に作ってみました。
ttp://www.kmonos.net/alang/d/1.0/mixin.html

mixin(
`enum {`
~D_ALL_PARAM_NAMES_MIXIN!("0")
~`dParamsInGroup, ` ///< Number of parameter in a group
~D_ALL_PARAM_NAMES_X_MIXIN!("0x000", "1")
~D_ALL_PARAM_NAMES_X_MIXIN!("0x100", "2")
~D_ALL_PARAM_NAMES_X_MIXIN!("0x200", "3")

~`dParamGroup=0x100`
`}`
);

他のところでコンパイルが通ってなかったので正しいか未確認だったけど、
同じようですね。どうもありがとうございます!

ちなみにこだわる理由は一応ありまして、今後 ODE の開発が進んで追加など
された場合に、毎回展開するのが手間だなぁと思ったからです。
786773:2009/01/23(金) 23:23:19
ちなみに書いていただいたページは今後の資料としてありがたく頂戴しました。
どうもでした。
787デフォルトの名無しさん:2009/01/24(土) 14:04:13
例外に、Javaっぽいスタックトレースってつけられないのかなぁ?

意図していないタイミングで発生するとどこで落ちたんだか判らなくて困る。
788デフォルトの名無しさん:2009/01/24(土) 14:08:15
flectioned
789デフォルトの名無しさん:2009/01/24(土) 14:23:58
catchsegv
790デフォルトの名無しさん:2009/01/24(土) 15:45:57
catchsegvなんてもんがあるのか
791デフォルトの名無しさん:2009/01/24(土) 16:44:04
以前、flectioned 使おうとしたんだけど、Phobos を -g でコンパイルしようと
したんだけど、そもそもコンパイルが通らなくてやめた。今はどうだろう。
792デフォルトの名無しさん:2009/01/24(土) 18:01:41
D2.013 にある
__FILE__ と __LINE__ を、 引数のデフォルト初期化子として使いやすいように変更
って、D1.xではダメなのか・・・ orz
793デフォルトの名無しさん:2009/01/24(土) 22:32:04
>>787
処理速度遅くてもいいから-debugか-version(unittest)付いてる時は詳細情報欲しいよね
794デフォルトの名無しさん:2009/01/24(土) 23:56:59
>>793
それは何度も思ったなぁ。
でも、なぜか-debugつけてPICマイコンとのUSB通信用DLL関数の処理が1/100くらいの
めちゃくちゃ遅いスピードになったときは、デバッグモードで処理速度速くする方法はないものかと思ったものだ…。
795デフォルトの名無しさん:2009/01/25(日) 02:39:57
foreach(hoge h; hogeManager) {

}

ってさせたくて、 hogeManager に opAssign を実装しようとしたんだけど、
これって配列が出来てないとダメなんだね...orz

C# みたいに
hoge opAssign() {
  yield return new hoge();
}
みたいに、opAssign の中で新しい hoge を作ることが出来なさそう。
796デフォルトの名無しさん:2009/01/25(日) 02:57:49
int opApply(int delegate(ref hoge) dg) {
while(hogehoge) {
auto tmp = new hoge;
if (auto result = dg(tmp)) return result;
}
return 0;
}
797デフォルトの名無しさん:2009/01/25(日) 03:07:53
int opApply(int delegate(ref uint) dg) {
 int result = 0;
 
 for (int i = 0; i < array.length; i++) {
  result = dg(array[i]);
  if (result) break;
 }
 return result;
}

みたいに、配列を 0 からなめ直せって書いてあるよ?
それに795 の方法だと、hoge が例えば id とかもってたら困らない?

あとは new するたびに Factory の状態が変わるとか。おれがこまったのはこいつなんだ。
798デフォルトの名無しさん:2009/01/25(日) 03:25:48
opapplyなのかopAssignなのかどっちの話なんだ
799デフォルトの名無しさん:2009/01/25(日) 03:27:53
あ、ごめん、opApply
800デフォルトの名無しさん:2009/01/25(日) 03:29:01
>>797
配列をなめろとはどこにも書いていない
801デフォルトの名無しさん:2009/01/25(日) 03:34:48
>>797
何をしたいのかよくわからないよ。
802デフォルトの名無しさん:2009/01/25(日) 03:40:04
うーんと、

hoge が、new された時間とid を持つとして、
こっちの求めているのは

hoge(00:00:00 - 1)
hoge(00:00:01 - 1)
hoge(00:00:02 - 1)

なのに、796のパターンだと

hoge(00:00:00 - 1)
hoge(00:00:01 - 2)
hoge(00:00:02 - 3)

になってしまうんだけどこういうのはどうすればいいの?

っていうか、dg って何者?
803デフォルトの名無しさん:2009/01/25(日) 03:53:11
opApplyは単なる内部イテレータなわけだが、いったい何がわからないんだよ。

int opApply(int delegate(ref hoge) dg) {
auto id = getid();
while(hogehoge) {
auto tmp = new hoge(id);
if (auto result = dg(tmp)) return result;
}
return 0;
}

でいいだろ。
804デフォルトの名無しさん:2009/01/25(日) 03:58:20
>>802
そのIDはどういう理由で変わったり変わらなかったりするの?
805デフォルトの名無しさん:2009/01/25(日) 04:08:20
なんか日本語にすると語彙不足で難しいんだけど、
「その秒の中につくった、何個目かを示すインデックス」。
806デフォルトの名無しさん:2009/01/25(日) 04:21:27
>>805
そのidは、hogeのコンストラクタで決めてるの?
807デフォルトの名無しさん:2009/01/25(日) 04:26:34
Factory です。
808デフォルトの名無しさん:2009/01/25(日) 04:28:50
ごめん、ねむくてマウスがお茶浸しになったから寝る。
809デフォルトの名無しさん:2009/01/25(日) 04:29:10
意味不明すぎる。小出しにせずにコード全部乗せろよ。
810デフォルトの名無しさん:2009/01/25(日) 04:31:19
どういう設計になってたら、外部イテレータではうまくいって、
内部イテレータだと変なことになるのかわかんないなあ。
811デフォルトの名無しさん:2009/01/25(日) 15:33:07
enumについて教えてくれ。

enum STR: string {
FOO = "abc",
BAR = "def"
}
↑って言語仕様上正しいの?
-g付きコンパイルだと怒られるんだが。
812デフォルトの名無しさん:2009/01/25(日) 15:59:10
>>811
EnumBaseTypeには大小比較可能である以外の要件は求められていないよ。
813811:2009/01/25(日) 18:10:58
>>812
大小比較可能なchar配列を使用しているからOKだと思って使ってたんだ。
で、デバッガ使いたくてdmdに-gを渡すとコンパイルできないんだ。
すまん、根本的に認識が間違っているなら教えてくれ。
814デフォルトの名無しさん:2009/01/25(日) 18:18:34
たぶんデバッガ用のタイプタグを生成できないんでしょ。
CやC++では、列挙型は整数以外になり得ないから。
815811:2009/01/25(日) 19:09:31
そういうことかぁ。
ありがとう。
816デフォルトの名無しさん:2009/01/25(日) 19:36:43
>>811
-g 渡さなければ使えてたの?
言語仕様上OKなら便利だから使いたいな。
817デフォルトの名無しさん:2009/01/25(日) 19:39:25
enumするメリット見えないんだが
818デフォルトの名無しさん:2009/01/25(日) 19:41:27
ビットフラグ用のenumってないの?
819デフォルトの名無しさん:2009/01/25(日) 19:43:18
>>817
複数の定数にまとまった名前がつけれる。

ただ、string->enumの暗黙変換が出来るから微妙だけど。
820デフォルトの名無しさん:2009/01/25(日) 19:50:05
namespace 使えば十分じゃね?
821デフォルトの名無しさん:2009/01/25(日) 19:50:22
ところで enum { FOO } の FOO を"FOO"という文字列化する方法ってある?
822デフォルトの名無しさん:2009/01/25(日) 20:02:12
値が連続してることが簡単に保証できるのが enum の利点
823デフォルトの名無しさん:2009/01/25(日) 20:03:23
>>820
namespaceなんてないよ
824デフォルトの名無しさん:2009/01/25(日) 20:06:01
>>821
ない。そういう関数を自分で用意する以外に。
825デフォルトの名無しさん:2009/01/25(日) 20:07:34
C99 のインデックス指定配列初期化があればいいのか。
826821:2009/01/25(日) 20:21:00
>>824
そっか。どうもありがとう。

enum に値を追加したら文字列化関数にも実装を追加
しないといけないから、ちょっとメンドクサイよね。
827811:2009/01/25(日) 20:28:57
>>816
使えたよ。
828デフォルトの名無しさん:2009/01/25(日) 20:35:01
>>820
namespaceは無い。けどstatic structならあってそれで十分なはず。tupleof+stringofで名前取り出しもできる…か?
829811:2009/01/25(日) 21:01:55
>>828
おお!
static structの存在を忘れてた。
これでほんの少し修正するだけでデバッガ通せそうだ
830デフォルトの名無しさん:2009/01/25(日) 22:00:45
>>826
そこでstd.typeconsにあるdefineEnum
831デフォルトの名無しさん:2009/01/26(月) 18:12:42
conceptまだかうよ
832デフォルトの名無しさん:2009/01/26(月) 18:50:56
ttp://www.digitalmars.com/d/2.0/future.html

 Future Directions
   1. Template inheritance.



833デフォルトの名無しさん:2009/01/26(月) 23:12:24
ん?1個減った?元々2つだったかな
834デフォルトの名無しさん:2009/01/26(月) 23:19:09
配列演算も予定の一つで、
あともうひとつ何かあった気がした。
835デフォルトの名無しさん:2009/01/27(火) 15:48:09
ジェネリックデリゲートが欲しい
836デフォルトの名無しさん:2009/01/27(火) 16:28:09
そういえばcovariant/contravariantがまだない
837デフォルトの名無しさん:2009/01/27(火) 22:18:33
Descent 0.5.4 released
838デフォルトの名無しさん:2009/01/28(水) 16:11:08
Eclipse Descent Compile-Time View
http://jp.youtube.com/watch?v=oAhrFQVnsrY
839デフォルトの名無しさん:2009/01/28(水) 18:24:26
2年前と比べるとずいぶんもり下がって北ね、
なんか疲れてきた。
840デフォルトの名無しさん:2009/01/28(水) 18:29:45
これから勉強するなら1.0より2.0?
841デフォルトの名無しさん:2009/01/28(水) 19:23:22
昔より更新頻度が落ちたし、更新の内容も破壊的なのが減ってきた。
IDEもそれなりのものが既にあるし、ライブラリもそれなりに整ってきた。
Dはインフラを得た代わりに話題を失いつつある…そんな気がする。
842デフォルトの名無しさん:2009/01/28(水) 19:25:05
>>838
おや?伝説のIDEかな?
843デフォルトの名無しさん:2009/01/28(水) 19:44:28
>>839,841 まだ >>832,835-836 とか残ってることはたくさんあるよ
ウォルたんは次あ何をしようとしているのかなあ
844デフォルトの名無しさん:2009/01/28(水) 19:45:24
>>840 そろそろ破壊的変更も少なくなってきたから
これから始めるなら問答無用でD2でもいいんじゃないか
845デフォルトの名無しさん:2009/01/28(水) 19:45:44
>>842 これ面白いよね
846デフォルトの名無しさん:2009/01/28(水) 19:49:16
>>841
魅力的な更新が減ったのがなぁ。gdcの更新も滞っているし、ldcはまだまだだし。
ldcの安定待ち。

>>838
凄いな。でもコンパイルタイムで色々しまくると激しく遅くなりそうな予感。
847デフォルトの名無しさん:2009/01/28(水) 19:56:47
D3.0まだ?
848デフォルトの名無しさん:2009/01/28(水) 20:02:19
このスレでは
魅力的な更新==破壊的な更新
なのかい?
849デフォルトの名無しさん:2009/01/28(水) 20:04:03
個人的には違うがマゾが集まっているのも事実。
850デフォルトの名無しさん:2009/01/28(水) 20:52:39
今年もまだメモ帳で頑張れる
851デフォルトの名無しさん:2009/01/28(水) 20:54:33
俺はどっちも好きだなあ。
とりあえずgdcmacが安定してほしいのといくつかシンタックスシュガーが欲しい
852デフォルトの名無しさん:2009/01/28(水) 20:55:41
自分でシンタックスシュガー作れる仕組み出来ねえかなぁ
マクロより安全な方法で
853デフォルトの名無しさん:2009/01/28(水) 20:57:29
コンパイラ弄って自分でシンタックスシュガーを追加している俺勝ち組
854デフォルトの名無しさん:2009/01/28(水) 21:48:34
>>853 ちょw
855デフォルトの名無しさん:2009/01/28(水) 22:30:10
どんなシュガー追加してるかkwsk
856デフォルトの名無しさん:2009/01/28(水) 23:02:54
D言語BOF2009のネタ募集中だってさ
ttp://twitter.com/kinaba/status/1119668964
857デフォルトの名無しさん:2009/01/28(水) 23:47:45
あればうれしいのはシンタックスシュガーを作れる仕組みではなくて
それで作りたいシンタックスシュガーそのものではないのか?
858デフォルトの名無しさん:2009/01/28(水) 23:50:49
だから早くタプルリテラルを作れと(ry
859デフォルトの名無しさん:2009/01/29(木) 00:39:44
タプルリテラル作るって言ってたっけ?
テンプレートできるからいらないとか言われてなかったっけ
860デフォルトの名無しさん:2009/01/29(木) 01:22:08
タプル返せるようにしてけろ
861デフォルトの名無しさん:2009/01/29(木) 01:25:18
構造体でおk
862デフォルトの名無しさん:2009/01/29(木) 01:28:58
>>860
回避策
import std.typetuple, std.stdio;
struct tupleWrapper(TL...){
  TL tl;
}

void main(){
  TypeTuple!(string, int) tup;
  tup = foo().tupleof;
  writefln(tup[0]);
  writefln(tup[1]);
}

tupleWrapper!(string, int) foo(){
  return tupleWrapper!(string, int)("test", 12);
}
863デフォルトの名無しさん:2009/01/29(木) 02:34:49
うぉるたんMacを買ってDMDを移植してみるの巻
http://dobbscodetalk.com/index.php?option=com_myblog&show=Porting-D-to-the-Mac.html&Itemid=29
864デフォルトの名無しさん:2009/01/29(木) 03:28:24
>>863
クリスマスにマックミニ買っちゃった!なんて、なんかちょっとかわいいw
865デフォルトの名無しさん:2009/01/29(木) 03:39:35
しかもAmazonとか親近感沸くなぁw
866デフォルトの名無しさん:2009/01/29(木) 12:04:22
マック地下室監禁わろたw
867デフォルトの名無しさん:2009/01/29(木) 22:58:19
gdc が全然アップデートされない今、
本家が Mac をサポートしてくれれば言う事無しだ
868デフォルトの名無しさん:2009/01/31(土) 01:44:07
Tango 使ってみてるけど、使いにくい・・・。

なんか利点在るの?これ・・・
869デフォルトの名無しさん:2009/01/31(土) 03:16:20
どういう点が使いにくいと思うか書いてみて?
870デフォルトの名無しさん:2009/01/31(土) 09:02:34
連想配列を全てを削除するのって下のでいいのかな?
D1.038 で落ちることがよくある・・・。

例えば
long[string] hoge;
に対して

foreach (key, h; hoge)
{
hoge.remove(key);
}

hoge.remove(key) じゃなくて writefln(key) とかなら全然大丈夫。
871デフォルトの名無しさん:2009/01/31(土) 10:20:01
全部消すなら
hoge = null;
でおk
872デフォルトの名無しさん:2009/01/31(土) 10:20:55
foreach中にその対象に変更加えるとダメだったと思う
873870:2009/01/31(土) 10:23:54
>>871-872
なるほど。どうもありがとう!
874870:2009/01/31(土) 21:07:19
ちなみに削除して再登録していきたかったので、下のようにしたらうまくいった。

auto remove_keys = hoge.keys.dup;
foreach (key; remove_keys)
{
 hoge.remove(key);
}
875デフォルトの名無しさん:2009/02/01(日) 12:57:35
連想配列にeraseが欲しいよな
そうするとイテレータが必要になってくるのか
876デフォルトの名無しさん:2009/02/01(日) 14:24:46
---a.d
import b;
import c;

void main() {
 Hoge h;
}

---b.d
interface Hoge {}

---c.d
import b : Hoge; // : Hoge を無くせば直る
alias Hoge[] HogeArray;


---
a.d(5): Error: b.Hoge at b.d(1) conflicts with c.Hoge at c.d(1)

名前指定インポートつかえねえええ
877デフォルトの名無しさん:2009/02/01(日) 19:21:36
選択インポートだっけ?
滅多に使わないよなぁ、丸ごとインポートすれば事足りるし
public付けたりしたらより一層意味不明な事になりそうだな、試してみよう
878デフォルトの名無しさん:2009/02/01(日) 20:06:27
色々試したけどよくわかんね

ただシンボルとしては同じなんだなー
完全修飾して衝突さえ回避すればHogeArrayにb.Hoge連結できるし、
Hogeをクラスに変えたらb.Hoge h = new c.Hogeで怒られない

だがこうなるとどうして衝突で怒られるのかが不思議だ、やっぱりバグか?
879デフォルトの名無しさん:2009/02/02(月) 00:08:12
何気にシンボル関係は挙動不審
privateとかいろいろと
880デフォルトの名無しさん:2009/02/05(木) 01:29:57
この言語ははやらん。

理由は開発者の数が少なすぎる。もっとも、ボランティアの開発グループ
を結成して実用的なものに改良を加えていくとC++みたいに言語使用が破綻
するが。。。

JAVAが一応、成功した理由にはいろいろあるが、GUI、マルチスレッド
のサポートが大きいと思う。C++でもそういうのを整備してほしい。

しかし、MSがC++/CRIをANCI C++委員会?で却下されたのは仕方ない。
独特の癖があるから。
881デフォルトの名無しさん:2009/02/05(木) 01:43:01
どこから突っ込めばいいんだ
882デフォルトの名無しさん:2009/02/05(木) 02:05:26
まずはD更新欠乏症にかかって3日間沈黙したスレ住民に対して突っ込めばいいんじゃないかな
883デフォルトの名無しさん:2009/02/05(木) 03:14:03
C++の言語仕様が破綻したのは互換性の崩れを極度に怖がったから。
だが勇者ブライトはそんな過ちを繰り返すことはなかったッ!
884デフォルトの名無しさん:2009/02/05(木) 03:33:00
D/CLIまだかよ
885デフォルトの名無しさん:2009/02/05(木) 03:48:51
個人的には流行らないことは使わない理由にならないなぁ。
だっておもしろいんだもの、D。
886デフォルトの名無しさん:2009/02/05(木) 05:15:55
pureの最適化がさりげなくいい感じだ
再帰呼び出しを恐れず書ける
887デフォルトの名無しさん:2009/02/05(木) 12:31:05
自動メモ化されるの?
888デフォルトの名無しさん:2009/02/05(木) 19:15:37
889デフォルトの名無しさん:2009/02/05(木) 19:59:36
いやいや・・・
890デフォルトの名無しさん:2009/02/06(金) 02:50:12
>>884 IronD?触ってみたいね
891デフォルトの名無しさん:2009/02/06(金) 03:38:37
>>887
少なくとも末尾最適化はされているっぽい
892デフォルトの名無しさん:2009/02/06(金) 10:34:20
Mono叩けないのかな
WindowsFormsとか使えれば流行る気がする
893デフォルトの名無しさん:2009/02/06(金) 10:42:01
C#でいいじゃん
894デフォルトの名無しさん:2009/02/06(金) 10:49:08
C#ユーザーとか取り込めばDユーザー増えるかな?
895デフォルトの名無しさん:2009/02/06(金) 10:53:59
.NET Frameworkのクラスライブラリを全部実装できたら流行るよ
896デフォルトの名無しさん:2009/02/06(金) 12:55:42
>>891
pureじゃなくても末尾最適化はできるんじゃないの
897デフォルトの名無しさん:2009/02/06(金) 13:39:59
Mono たたいた瞬間、
ランタイムの不要なバイナリをはくという利点が消えるな

Win7 の登場で、利点がべつにどうでもよくなりつつあるけどな。
898デフォルトの名無しさん:2009/02/06(金) 14:06:48
リフレクション経由で.NET叩くのは簡単なんだが、パフォーマンスが微妙だわ
899デフォルトの名無しさん:2009/02/06(金) 14:13:49
うぉるたん、もうちょっと営業センスあるといいんだけどねぇw
900デフォルトの名無しさん:2009/02/06(金) 14:20:02
ドットネットのライブラリ使えてネイティブ吐き出すとかはどうよ?
うけると思うぜ?
誰がつくってw
901デフォルトの名無しさん:2009/02/06(金) 14:44:50
>>896
単にコンパイラに読みやすいか否かなのかも知れんが、
10^10回くらい再帰する関数にpureつけるかつけないかでコンパイル時間が相当変わる

>>900
LLVMとかぶるんじゃないかなあ
902デフォルトの名無しさん:2009/02/06(金) 14:50:33
コンパイル時定数化が効ないようにすると

void main()
{
        Random r;
        long n = r.next*1000000000L;
        auto perf = new PerformanceCounter;
        perf.start;
        recursion(n);
        perf.stop;
        writeln(perf.milliseconds);
}

long recursion(long n) pure {
        if(n==0)
                return 1;
        else
                return recursion(n-1)+n;
}

// pureなし → Stack Overflow
// pureあり → 0 (milliseconds)
903デフォルトの名無しさん:2009/02/06(金) 15:06:49
返値保存してないから、(副作用無いのは保証されてるので)最適化でコードまるまる削除されてるだけとかではないの?
904デフォルトの名無しさん:2009/02/06(金) 15:08:04
pureは戻り値つかってないと削除されるよ
905デフォルトの名無しさん:2009/02/06(金) 15:10:55
>>901
んー、コンパイル時間が変わるってのはCTFEしようとしてるんじゃないか。
末尾再帰最適化に時間はかからないはずだが
906デフォルトの名無しさん:2009/02/06(金) 17:16:23
>>903-904
覗いて見たらコード丸々削除でしたorz

>>905
定数ぶっ込むとpure付きなら問題ないが、なしだとdmdが終わりません。
が、上記アレなんで……
907デフォルトの名無しさん:2009/02/06(金) 17:54:57
>>902のrecursionは末尾再帰してない気もするしな
908デフォルトの名無しさん:2009/02/07(土) 01:05:15
const private {
invariant protected {
private {
protected {
static public {
export {
static {
invariant {
const {
nothrow pure auto a="(;´Д`)";
}
}
}
}
}
}
}
}
}

自分でも何したかったのか分からん
909デフォルトの名無しさん:2009/02/07(土) 01:19:50
よく頭悪いって言われない?
910デフォルトの名無しさん:2009/02/07(土) 17:23:38
GCが動かなくて困ってる。
試しに下を動かすと"Error: Out Of Memory"を吐いて落ちる。

int main(char[][] args)
{
for (int i = 0; i < 32; i++) {
a();
}
return 0;
}
void a()
{
new char[96 * 1024 * 1024];
}

gdc 0.24 mingw なんだけど、何かGC動かすための条件とかある?
何か勘違いしてるのかな・・・
911デフォルトの名無しさん:2009/02/07(土) 18:45:03
明示的にGC動かすならGC.collect()とかdelete式
暗黙的に行われるメモリ回収はいつ行われるのか予測不可
その暗黙的にメモリ回収を行わせる条件の話をしてたならスマソ判らん
912910:2009/02/07(土) 21:33:00
>>911

forの中にstd.gc.fullCollect()を入れてみても結果は変わらず。
deleteはOKだったが、GCを使う旨味が・・・

といわけで、暗黙的にメモリ回収を行わせる条件が知りたいんですけど、
GC周りのソースを読んで調べるしかないですかね・・・
913デフォルトの名無しさん:2009/02/07(土) 21:41:18
void a()で1KBくらいnewさせて無限ループさせたらちゃんと使用メモリ量はある一定から上がらないんだよな
サイズの問題とか?newした回数とか?よくわからんな
914デフォルトの名無しさん:2009/02/07(土) 21:45:12
new するサイズを変更すれば
サイズか回数か分かるんでない?
915デフォルトの名無しさん:2009/02/07(土) 21:57:49
普通に考えれば new やらなんやら D 内で GC に紐付けされた 要素 が実行されたとき
freelist更新 → free して一回の呼び出しで free に到達するかどうかは 運次第
916デフォルトの名無しさん:2009/02/08(日) 00:41:23
>>912
>deleteはOKだったが、GCを使う旨味が・・・

逆に考えるんだ。こういう困った場面で小手先の対処(delete)が可能なのがDなんだと。
917910:2009/02/08(日) 01:13:23
実験してみた。

int main(char[][] args)
{
for (int i = 0; i < 5; i++) a();
for (int i = 0; ; i++) b();
return 0;
}
void a() { new char[1 * 1024 * 1024]; }
void b() { new char[1 * 1024 * 1024]; }

a():new char[1 * 1024 * 1024]
b():new char[1 * 1024 * 1024] で、メモリ4,600K以上上昇せず。
a():new char[96 * 1024 * 1024]
b():new char[1 * 1024 * 1024] で、753,364K。
a():new char[96 * 1024 * 1024]
b():new char[24 * 1024 * 1024] で、788,424K。
a():new char[96 * 1024 * 1024]
b():new char[25 * 1024 * 1024] で、Out Of Memoryで落ちる。落ちる直前で1,300,000Kくらいまでいってた。
よくわからないが、サイズが問題なのかな?24MBがボーダーライン?

>>916
とりあえず、そう考えてdelete使います・・・。
918デフォルトの名無しさん:2009/02/08(日) 01:58:56
>>917
std.utf か std.uni かなんかの使ってるマジックナンバーが
24MBおきくらいの値を漏れなくとってるので、
それが偽ポインタとみなされて、ある程度以上でかい配列は
全て常にグローバルから参照されてる扱いになっちゃってるとか
そんな問題が昔あったので今もあるのかも
919デフォルトの名無しさん:2009/02/08(日) 05:31:52
D言語がこの先生きのこるには
920デフォルトの名無しさん:2009/02/08(日) 07:38:16
D言語学校の先生キノコるには
921デフォルトの名無しさん:2009/02/08(日) 08:23:16
ライブラリとキラーアプリケーションじゃね
922デフォルトの名無しさん:2009/02/08(日) 11:21:09
ウシロを顧みず爆進するsyntax改良だとおもう。
923910:2009/02/08(日) 11:21:56
>>918

なるほど。そういう問題があったのですか。
ちょっと調べてみます。
924デフォルトの名無しさん:2009/02/08(日) 15:49:16
ユビキタス社会が注目されている昨今の状況から、組み込みに目を向けたらいいと思う
925デフォルトの名無しさん:2009/02/08(日) 18:07:42
うぉるたんが作るのやめたときが死ぬときでしょ。

発展させるには、ってことか。
926デフォルトの名無しさん:2009/02/08(日) 18:27:12
をるたん以外の人はコンパイラ作ってんの?
927デフォルトの名無しさん:2009/02/08(日) 18:52:58
>>926
泣きながらPhobos作ってんじゃね?
928デフォルトの名無しさん:2009/02/08(日) 19:07:16
高校在学の頃からD言語の完成を待ち続け今や20代半ば
929デフォルトの名無しさん:2009/02/08(日) 20:32:39
ホントだ、自分もD言語触り続けてもう5年くらいになる。
930デフォルトの名無しさん:2009/02/08(日) 22:23:55
三十路突入、、、
931デフォルトの名無しさん:2009/02/08(日) 22:52:38
D言語の代わりになる処理系がありません。
932デフォルトの名無しさん:2009/02/09(月) 00:48:10
Phobosで良い感じの xhtmlParser ご存知の方いらっしゃいます?
std.xmlだと上手くいかなくて・・・
933デフォルトの名無しさん:2009/02/09(月) 01:11:43
>>932
あきらめろ
934デフォルトの名無しさん:2009/02/09(月) 01:55:22
>>933
それだとDユーザーっぽくないな。自分で作れ、じゃなかろうか?
PhobosだのTangoだのを参考にすればそこまで労せず作れる気がする。
935デフォルトの名無しさん:2009/02/09(月) 01:55:24
やはり無いですか・・・
色んなパーサ読みながら、解決方法考えてみます。
ありがとうございました。
936デフォルトの名無しさん:2009/02/09(月) 03:18:24
D.netになればライブラリの心配はしなくて済むのか…
937デフォルトの名無しさん:2009/02/09(月) 03:21:15
そんなD使いたくないな
938デフォルトの名無しさん:2009/02/09(月) 07:25:46
>>935
libxmlのラッパでも書いて呉れよ
939デフォルトの名無しさん:2009/02/09(月) 08:15:01
tinyxmlは?
940デフォルトの名無しさん:2009/02/09(月) 18:27:17
phobosのコミット権が欲しいのは俺だけじゃないよね
941デフォルトの名無しさん:2009/02/09(月) 20:10:09
Visual Dまだー?
942デフォルトの名無しさん:2009/02/09(月) 20:35:24
そんなD使いたくないな
943デフォルトの名無しさん:2009/02/09(月) 20:51:12
なんで使いたくないのかkwsk
簡単なのはいいことだと思うが
944デフォルトの名無しさん:2009/02/09(月) 21:34:31
ネイティブコード吐いてくれるのがDの旨みの1つだから
開発するのに .NET/Mono なんて大層なモノ使いたくないから
マゾだから

けど確かにライブラリの豊富さだったり、
GCの実装具合とかで羨ましくもなる。
945デフォルトの名無しさん:2009/02/09(月) 21:38:09
.NETならC#と同じ土俵での勝負になっちゃうからなw
946デフォルトの名無しさん:2009/02/09(月) 21:53:37
あえてC#と同じ土壌でも戦うことでD言語はより強力になっていくと思う。
ネイティブコード吐くの捨てなきゃ歓迎。
947デフォルトの名無しさん:2009/02/09(月) 21:54:23
というかすでにこっちの土俵に乗り込まれてる状況ではないか
ttp://www.atmarkit.co.jp/news/200901/29/mono.html
948デフォルトの名無しさん:2009/02/09(月) 21:57:58
VisualStudioで開発できなきゃ永久にC++以下の生産性
949デフォルトの名無しさん:2009/02/09(月) 22:10:34
>>944の上2行の発言が謎だ
950デフォルトの名無しさん:2009/02/09(月) 22:11:39
Dは言語が生まれるさまをヲチするための言語です
951デフォルトの名無しさん:2009/02/09(月) 22:15:46
そして伝説のIDE誕生の瞬間に立ち会えるのがD
952デフォルトの名無しさん:2009/02/10(火) 00:37:57
つーかインテリセンス使わない生活にはもう慣れてしまった。
書くのが速くなっても生産性があがるわけじゃないからなぁ・・・。
953デフォルトの名無しさん:2009/02/10(火) 04:59:34
正直、D言語はここまで中途半端な存在に成るとは思わなかった
Java,C#のVMの出来が良くなって来た事が原因だと思うけど、
MicroSoftを始めIDEベンダーはガン無視じゃん、酷すぎる。勉強した時間を返せ
954デフォルトの名無しさん:2009/02/10(火) 05:47:03
Ct
http://tripper2.kousaku.in/?Ct
D言語が配列演算急いだのはこれからかな。
そのうち水平演算も来るか?
955デフォルトの名無しさん:2009/02/10(火) 12:29:24
>>953
まだDは若いしそんなもんだと思うけど
956デフォルトの名無しさん:2009/02/10(火) 15:32:22
>>952
インテリセンスがあればメンバ調べたりする手間省けるだけ効率はあがるw
957デフォルトの名無しさん:2009/02/10(火) 15:48:24
Dユーザーって
言語いじること自体が好きなタイプ
C#使ってるがちょっと背伸びしてみたいタイプ
の2つにわかれるのかな?

で、もっともターゲットにしたいC/C++ユーザからはしかとw
958デフォルトの名無しさん:2009/02/10(火) 18:15:05
>>955
若いっても出てから4〜5年ぐらいたってなかったか?
959デフォルトの名無しさん:2009/02/10(火) 18:43:23
まだ小学校にも入学してないじゃないか
960デフォルトの名無しさん:2009/02/10(火) 18:43:48
このままだとをるたんのオナヌー言語で終わっていまいそw
961デフォルトの名無しさん:2009/02/10(火) 19:50:29
>>957
GCがあって、お気軽に使えてコンパイルの速いC++みたいなのがあったらいいな〜
ってC++使いもいると思う。

そして何度も「ちくしょう、まだ早すぎたんだ!」を繰り返しながら、
夢を見続けると。
962デフォルトの名無しさん:2009/02/10(火) 21:49:32
C++=AT&T
Java=Sun
C#=MS

D=DigitalMars

まあ無理だろ
こうなるのは目に見えてた
963デフォルトの名無しさん:2009/02/10(火) 21:49:33
MS辺りが拾ってくれたらいいんだけども、
ウォルタンは孤高の道を行くから・・・
964デフォルトの名無しさん:2009/02/10(火) 21:54:07
単独で使ってこそ意味がある言語だよな
どう考えてもC#と違って.NETみたいなクロスランゲージな世界には向いてない
965デフォルトの名無しさん:2009/02/10(火) 21:57:15
逆に言えば他の言語(C以外)との連携は苦手なのがD
966デフォルトの名無しさん:2009/02/10(火) 22:00:03
ヘタすりゃ最後のネイティブマンセー言語かも
967デフォルトの名無しさん:2009/02/10(火) 22:05:26
>>957

>言語いじること自体が好きなタイプ

言語オタクが実験を繰り返すだけで
実用的なアプリを誰も作らないから流行らないんだよな
D言語とかハスケルとか
968デフォルトの名無しさん:2009/02/10(火) 22:09:05
Haskellはまあ、そういう言語じゃん

Dは一応実用重視を謳ってるのにこれじゃあ…
969デフォルトの名無しさん:2009/02/10(火) 22:16:42
>>963
MSよりはGoogleに拾って欲しいな
Native Clientもあるし、C++使いばっかりだから
中の人との相性も悪くないと思う
970デフォルトの名無しさん:2009/02/10(火) 22:22:24
D製のアプリっていりす症候群しか知らない
971デフォルトの名無しさん:2009/02/10(火) 22:27:05
後は芝生やすゲームとか、ABAさん所のゲームとか

ゲームばっかだよねこの言語
972デフォルトの名無しさん:2009/02/10(火) 22:39:19
普通のアプリ探してて D で書かれてたの見つけたのは rulesPlayer だけだな
973デフォルトの名無しさん:2009/02/10(火) 23:00:27
PSP方面調べてた時、PSP EmulatorがD言語で書かれていたのに驚いたな。
http://www.soywiz.com/d/pspemulator/
974デフォルトの名無しさん:2009/02/10(火) 23:06:18
webはRubyとかでいいし
業務アプリは.netでいいし
975デフォルトの名無しさん:2009/02/10(火) 23:11:21
やっぱりDは、破壊的変更にゾクゾクする為の言語なんだね
976デフォルトの名無しさん:2009/02/10(火) 23:18:17
M言語とかに名前変えたらいいのにな
977デフォルトの名無しさん:2009/02/10(火) 23:19:59
言語自体はSだからS言語でいいよ
978デフォルトの名無しさん:2009/02/10(火) 23:24:46
じゃMSはどうなんだ?
979デフォルトの名無しさん:2009/02/10(火) 23:54:10
誰かがD言語と呼ばなければ、MARS (M And Reacted S)という名称になっていたのに。
980デフォルトの名無しさん:2009/02/11(水) 00:27:27
.netに依存しないところがDの美点。
981デフォルトの名無しさん:2009/02/11(水) 00:32:13
>979
流れの中でキレイなオチをつけたなww
982デフォルトの名無しさん:2009/02/11(水) 09:27:48
おまんこハンドル=おまんこオープン(若菜 書き込み)

983デフォルトの名無しさん:2009/02/11(水) 12:29:15
D言語が駄目だというよりも
いつまでもC++にしがみついてる奴等がムカつく
特にゲ製作技術板なんてC++の話ばっかで全然ゲ製作技術を話してない
984デフォルトの名無しさん:2009/02/11(水) 12:33:56
もう、プロトタイプ宣言が必要な言語には戻れないっす
985デフォルトの名無しさん:2009/02/11(水) 12:39:00
CとC++だけか
986デフォルトの名無しさん:2009/02/11(水) 12:52:19
D elphiもだお
もっとも自動的に挿入してくれるからあんまり意識しないけど
987デフォルトの名無しさん:2009/02/11(水) 13:42:18
たのむから64ビットねいちぶなのを・・・
988デフォルトの名無しさん:2009/02/11(水) 21:35:09
>>972
テキスト処理が強力だから手元用で便利に使っているのだが、
公開するほどでもないし、ちょい用途ではスクリプト言語に適したものがあるしねえ。
という意味でDがそれなりに活躍できる用途は高負荷なウェブサーバ関連処理だと思う。
個人的には1からPHPで書くくらいだったら、
DにCGI / FastCGI用のインターフェースでも書くかなと。
989デフォルトの名無しさん:2009/02/11(水) 21:56:40
C++でいうところのメンバ関数ポインタが欲しいんだけど、
メンバメソッドに&つけるとデリゲートがかえって来ちゃう。

どうすればいいの?
990デフォルトの名無しさん:2009/02/11(水) 22:03:40
>>989
&typeof(obj).member  ?
991デフォルトの名無しさん:2009/02/11(水) 22:08:41
staticメンバ関数なら&で取れるんじゃない?
992デフォルトの名無しさん:2009/02/11(水) 22:36:13
いや、staticだとメンバ関数にする意味がないんだけど…
993デフォルトの名無しさん:2009/02/11(水) 22:43:49
オブジェクトと引数を渡すと適切なメソッドに引数を渡す関数
を自動生成するテンプレート関数なら作れそう
994デフォルトの名無しさん:2009/02/11(水) 23:06:10
>>989
D言語仕様の知識としてでしか知らんから役に立たないものかも知れんが
>デリゲートの .funcptr プロパティは、 function型で関数ポインタの値を返します

てか1000近いな
995デフォルトの名無しさん:2009/02/11(水) 23:07:37
>>989
auto fp = &MyClass.func;
void delegate() dg;
dg.funcptr = fp;
dg.ptr = cast(void*)obj;
タイプセーフじゃないのでもう少しましな方法がある気がする
996デフォルトの名無しさん:2009/02/11(水) 23:18:42
>>994-995
それって仮想関数でも大丈夫?
997デフォルトの名無しさん:2009/02/11(水) 23:28:41
せめて
「仮想関数で動くかどうか心配でしたがその方法でうまく行きました」とか
「仮想関数では○○という結果になりました」とかさあ…
998デフォルトの名無しさん:2009/02/11(水) 23:31:12
スペック読んで疑問に思ったから質問しただけで
まだコンパイラすらダウンロードしてないです^^;
999デフォルトの名無しさん:2009/02/11(水) 23:47:04
1000デフォルトの名無しさん:2009/02/11(水) 23:49:07
バイナリげろスレってまだあったんだ(笑
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。