D言語 Part15

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

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

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

■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://dsource.org/ (dsource)
ttp://www.sun-inet.or.jp/~yaneurao/dlang/
ttp://wisdom.sakura.ne.jp/programming/d/
2デフォルトの名無しさん:2007/10/05(金) 20:17:02
3デフォルトの名無しさん:2007/10/05(金) 20:17:33
■関連スレ

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

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

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

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

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

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

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

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

"Code of the Nerds" Digital Mars C/C++
http://pc11.2ch.net/test/read.cgi/tech/1044210976/
4デフォルトの名無しさん:2007/10/05(金) 21:33:36
(new Otsu).res(1)
5デフォルトの名無しさん:2007/10/05(金) 21:58:45
otu().dup().otu().otu().otu()otu().otu().print();
6デフォルトの名無しさん:2007/10/05(金) 23:14:17
しまった言い忘れてた・・・
そろそろこの二つはテンプレから外さないか
ttp://www.sun-inet.or.jp/~yaneurao/dlang/
ttp://wisdom.sakura.ne.jp/programming/d/

http://f17.aaa.livedoor.jp/~labamba/?%A5%EA%A5%F3%A5%AF%BD%B8#content_1_3
に載ってるもののうち下の4つを推薦しておくわ
# C/C++に疲れた人のD言語 … haru氏
# わかったつもりになるD言語 … K.INABA氏
# D始めました。 … shinichiro.h氏
# D言語入門講座 … SHOO氏
76:2007/10/05(金) 23:20:38
アドレス載せるの忘れたのでテンプレ用フォーマットで再投下(最初のアドレスが長すぎる・・・)

ttp://rayerd.ddo.jp/pukiwiki/ingwiki/index.php?C%2FC%2B%2B%A4%CB%C8%E8%A4%EC%A4%BF%BF%CD%A4%CED%B8%C0%B8%EC (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の入門講座)

そして >>1
8デフォルトの名無しさん:2007/10/05(金) 23:57:55
>>7
そういう時は、TinyURLで圧縮しとけば良いんじゃね?
C/C++に疲れた人のD言語:http://tinyurl.com/3da5oa

これからテンプレのWiki関係URLは圧縮しとけば良さげ。
98:2007/10/05(金) 23:58:51
ってぐわw
ごめんwうまく展開できてないっぽいわw
10デフォルトの名無しさん:2007/10/06(土) 00:02:01
あれ? 俺はちゃんと元のページに飛べたよ?
118:2007/10/06(土) 00:12:46
>>10
mjd?
あれーオレだけなのかw
何故かindexに飛んじゃう・・・
12デフォルトの名無しさん:2007/10/06(土) 02:22:03
じゃあテンプレのテンプレなw
誰か次スレ立てるときに覚えていたら思い出させてちょうだい


プログラミング言語 D (D Programming Language) について語るスレッドです。
過去スレは >>2

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

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

■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://dsource.org/ (dsource)
ttp://tinyurl.com/3da5oa (C/C++に疲れた人のD言語)
ttp://www.kmonos.net/alang/wnd/ (わかったつもりになるD言語)
ttp://shinh.skr.jp/d/ (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか)
ttp://shoo.s20.xrea.com/shoo/programing (D言語とTangoの入門講座)
13デフォルトの名無しさん:2007/10/06(土) 04:10:02
2.005来てるね
14デフォルトの名無しさん:2007/10/06(土) 04:56:36
D 2.005
Oct 1, 2007
New/Changed Features

* std.math.sin, cos, tan are now evaluated at compile time if the argument is a constant.
* Added Cristian Vlasceanu's idea for C++ interface for 'plugins'
* Overhaul phobox linux.mak and add documentation build logic
* Massive additions to std.conv
* Add writeln() and write() to std.stdio
15デフォルトの名無しさん:2007/10/06(土) 07:31:24
* Add writeln() and write() to std.stdio
これは地味だが良修正
16デフォルトの名無しさん:2007/10/06(土) 07:40:16
>>C++ interface
なにこれ
C++のクラスがDLLでつかえちゃうのかしらん
1716:2007/10/06(土) 07:44:43
調べた。
感想:すげぇ・・・
18デフォルトの名無しさん:2007/10/06(土) 08:15:28
やっと由美がかないそうだ
19デフォルトの名無しさん:2007/10/06(土) 08:44:08
Tango 0.99.2 Don has been released.
20デフォルトの名無しさん:2007/10/06(土) 09:20:17
Tangoの、0.99.9の次バージョンは何になるのだろうか
21デフォルトの名無しさん:2007/10/06(土) 09:21:52
extern(C++) キタコレ!!!!
22デフォルトの名無しさん:2007/10/06(土) 10:21:39
23デフォルトの名無しさん:2007/10/06(土) 10:42:13
>extern(C++)
これ、軽く祭りじゃねぇの
24デフォルトの名無しさん:2007/10/06(土) 13:24:15
ライブラリ使えないし正直2.0は暫く見送り……と思っていた俺にもそろそろ『時期』って奴が来たのか?
25デフォルトの名無しさん:2007/10/06(土) 13:36:36
おまいら、もっと騒げよ
26デフォルトの名無しさん:2007/10/06(土) 13:53:41
>extern(C++)
すげー
けど、現状Cライブラリでなんとかなってるし
リンクしたいC++ライブラリなんてないしな・・・
27デフォルトの名無しさん:2007/10/06(土) 13:55:48
もれなくさげてるお上品なおまえらに萌えだ
28デフォルトの名無しさん:2007/10/06(土) 14:10:38
D始まったな。
遊んでくるわ。
29デフォルトの名無しさん:2007/10/06(土) 15:18:29
C++のライブラリをポートする必要がなくなったってこと?
誰かエロい人おしえてくれ。
30デフォルトの名無しさん:2007/10/06(土) 15:35:41
ベターC++ときいて飛んできました
31デフォルトの名無しさん:2007/10/06(土) 15:37:25
ついにポートする必要なくなったのかな。
本家BOOST使い放題ってこと?
32デフォルトの名無しさん:2007/10/06(土) 15:39:25
boostは大部分がマクロやテンプレートに依存してるから無理だろ。
33デフォルトの名無しさん:2007/10/06(土) 15:40:48
あらら。でも、視野ひろがったなぁ。
34デフォルトの名無しさん:2007/10/06(土) 15:41:17
35デフォルトの名無しさん:2007/10/06(土) 16:05:26
htodのc++対応版が欲しくなるな。
36デフォルトの名無しさん:2007/10/06(土) 18:02:24
ざっと見た感じできるのはここまでで
extern(C++) {
 interfance CPP { ... }
 CPP getCPP();
}
CPP cpp = getCPP();

こういうことはできないのか
extern(C++) { class CPP { ... } }
CPP cpp = new CPP;

ここまできたらなんとかして欲しいけど無理か?
37デフォルトの名無しさん:2007/10/06(土) 18:43:20
だれか

>>34

の翻訳して
38デフォルトの名無しさん:2007/10/06(土) 19:12:32
>>37
神修正につき翻訳中。
適当にばらしてinabaさんとこのdikiに書いておくわ。
39デフォルトの名無しさん:2007/10/06(土) 19:14:44
DからC++が使えることよりも
C++からDが使えることの方が嬉しい鴨試練
40デフォルトの名無しさん:2007/10/06(土) 19:19:23
---- C++ ----
#include <iostream>
using namespace std;
class D{
public:
virtual int bar(int i, int j, int k){
cout << "i = " << i << endl;
cout << "j = " << j << endl;
cout << "k = " << k << endl;
return 8;
}
};
D *getD(){
D *d = new D();
return d;
}
---- D ----
extern (C++){
interface D{
int bar(int i, int j, int k);
}
D getD();
}
void main(){
D d = getD();
d.bar(9,10,11);
}

例にこんなのあるけど何かダサくね?
D d = D::create();
とか無理なんけ?
41デフォルトの名無しさん:2007/10/06(土) 19:21:00
ほいさ。逐次書いてます。
inabaさんとかぶらんように、下のほうから翻訳するかも
ttp://www.kmonos.net/alang/dee/diki/?C%2B%2B%E3%81%A8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%EF%BC%88%E4%BB%AE%E8%A8%B3%EF%BC%89
42デフォルトの名無しさん:2007/10/06(土) 19:23:51
>>40

>>36

とりあえず気持ちを繋ぎ止める為に身体を許したって感じだな
43デフォルトの名無しさん:2007/10/06(土) 19:24:30
>>41
GJ!!!
ありがとう!!
44デフォルトの名無しさん:2007/10/06(土) 19:36:39
流れをぶったぎってスマン
以下のコードがdmd1.020では大丈夫だが dmd1.022 (1.021も?)では
コンパイルエラーになった(【1】の const をはずすと大丈夫)。
ちなみにインデントには全角スペース使いました。
Main.d(29): mixin Test!(TestStruct(12)) does not match any template declaration
----------- Main.d -------------------------
private import std.stdio;

template Test(alias test)
{
 void test_func(){ test.hoge(); }
}

struct TestStruct
{
 void hoge(){ writefln("hoge %d", a); }
 int a;
}

const TestStruct test_struct = {12}; // 【1】

mixin Test!(test_struct);

void main()
{
 test_func();
}
-------------------------------------------------
ひとまず const 外してやり過ごす・・・。
45デフォルトの名無しさん:2007/10/06(土) 19:38:13
「{C関数}と{クラス}」
だと
「何のクラス」か分からなくなるので
the とか it's とか冠詞が付くんじゃないかな
よって誤植と推測

46デフォルトの名無しさん:2007/10/06(土) 20:07:29
翻訳はちょっと一休み。inabaさんのCとのインターフェースの翻訳を流用しながら書いています。
いつも使ってるvistaマシンがアップデートで死んでる。
親指シフターにローマ字入力はきついぜ。
47前スレ978:2007/10/06(土) 20:44:49
dmd2.005で動かしたら動いた。
というか、なんか勘違いしてたかもw
前スレ>>979 レスthx!
48デフォルトの名無しさん:2007/10/06(土) 20:51:15
>>40
これってC++側にvoid deleteD(D*t)用意しないとリークする?
それとも、GCされるの?
49デフォルトの名無しさん:2007/10/06(土) 22:05:23
C++オブジェクトをDのinterfaceとして取得する発想は盲点だった・・
ちょっと感動中。Cristian Vlasceanuさんとやら天才じゃね?

さて、ありがたく和訳を読ませて頂きまする。

# ふつーのテキストが<pre>に包まれて
# 横に長ーく表示されちゃってるのは
# Dikiの仕様なのかしらん。
50デフォルトの名無しさん:2007/10/06(土) 22:09:23
草取りを除いて翻訳終わりました。>41のアドレスに。

>>40
DからはC++のクラス全体が見えているわけではなく、
ある型のインスタンスポインタと、その型の仮想関数テーブルだけが見えているようです。
したがって、
・フィールド(メンバ変数)
・staticメンバ
・コンストラクタ、デストラクタ、変換(cast?)オペレータ、演算子オーバーロード、割り当て関数(newとdelete)
これらはすべてアクセスできません。

多重継承したC++クラスのインスタンスも怪しいです。

>>48
リークします。
>40のC++側コードに追加するなら、

int removeD(D* obj){
try{
delete obj;
} catch(なにがしか) {
例外を受け取ったらエラーコードをreturnする
}
return 正常;
}

とするべきでしょう。
多用するなら、D側でラッパとなるクラスを用意して、
そのデストラクタからC++のデストラクタとなる関数を呼び出すようにするしかないかと。
二重deleteの防止などはかなり面倒ですんで、C++側でshared_ptrかGCを用意する対策が必要でしょう。
51デフォルトの名無しさん:2007/10/06(土) 22:12:17
>>50
d。
そうすると、既存のC++ライブラリをDから使いたければ、
C++でラッパーを書かないといけないんだな。
ちょっと面倒だね。
52デフォルトの名無しさん:2007/10/06(土) 22:20:34
ダサい部分や面倒な部分も、
Dならどんどん解決策が出てくるに違いないとか思える気分だw

D 2.0始まったな!
53デフォルトの名無しさん:2007/10/06(土) 22:21:57
お前らテンションたけぇなぁ
自分の足の匂いでも嗅いで落ち付けよ
ああ臭ェ
54デフォルトの名無しさん:2007/10/06(土) 22:47:43
構造体の扱いについていまいち不明な点があったので、訳註に加えました。
構造体扱いならメンバと非仮想関数にアクセスできる?(仮想関数にはアクセスできないが)

>>49
# 仕様ではないでしょうか。とりあえずコピペでテキストエディタで折り返すと見やすいかと。

>50に追加。
非仮想関数にもアクセスできません。
55デフォルトの名無しさん:2007/10/06(土) 23:03:40
vtblしか見えないのか。ちょっと使い道限られるなあ。
56デフォルトの名無しさん:2007/10/06(土) 23:29:21
COMには最適w
57デフォルトの名無しさん:2007/10/06(土) 23:35:44
DCOMか
58デフォルトの名無しさん:2007/10/07(日) 00:02:23
>>57
それは紛らわしすぎw
5944:2007/10/07(日) 00:05:02
D1.022 にあるこれか
Bugzilla 1474: regression: const struct with an initializer not recognized as a valid alias template param
これはどういうこと?直ったのか?直ってないけど・・・。
仕様としてだめになったってこと??(regression:回帰、復帰、逆行、退化、退行)
フォーラム読んでも結論がよくわからず・・・。誰かわかります?
6044:2007/10/07(日) 00:10:33
こっちも関連あるかな。
Bugzilla 1456: Cannot use a constant with alias template parameters
61デフォルトの名無しさん:2007/10/07(日) 00:27:53
regressionってのは「一回直ったバグが再発したよ」ってことだと思う
6244:2007/10/07(日) 01:03:28
> 61
なるほど。じゃあいつか直るってことかな。

どうもありがとう。
63デフォルトの名無しさん:2007/10/07(日) 10:39:16
>>59-62
「「一回直ったバグが再発したよ」っていうバグを直したよ」ていうのが
> Bugzilla 1474: regression: const struct with an initializer not recognized as a valid alias template param
これなので、直ってないのだったら報告した方がいいかも。
2.005だと直ってるぽいので1.x系の問題かな。
64デフォルトの名無しさん:2007/10/07(日) 12:52:36
D言語研究、リンクがいくつか変なとこに書き換えられてる?
FrontPageの差分を見るとそうっぽいんだけど、携帯からだとよくわからない…
65デフォルトの名無しさん:2007/10/07(日) 13:43:15
>>64
直してみた
66デフォルトの名無しさん:2007/10/07(日) 14:24:52
ブラウザの脆弱性を利用してキーロガーをトロイの木馬しようとしているのか
物騒な時代だな
67デフォルトの名無しさん:2007/10/07(日) 18:46:37
>>65
おおお。ありがとう!
68デフォルトの名無しさん:2007/10/07(日) 23:59:49
なんかバグ見つけた
import std.stdio;

void main(){
writefln(join("123", "456"));
}

string[] join(T ...)(T t){
string[] a;
foreach(e; t){
a ~= e;
}
return a;
}
joinの返り値が壊れる
D2.005
69デフォルトの名無しさん:2007/10/08(月) 00:20:05
C++のクラスのメンバ変数だけど、無理やり構造体と同じ風にアクセス出来る気がする。
Dのクラスの場合、インスタンスのポインタから+8バイト位置から各メンバ変数並んでいるけど、
C++の場合、+0バイト位置から並んでいるみたい…。
7068:2007/10/08(月) 00:30:51
68はバグではなかったです。
お騒がせしました。
71デフォルトの名無しさん:2007/10/08(月) 01:01:58
>>69
ABIの仕様次第なんじゃないのかそんなん
72デフォルトの名無しさん:2007/10/08(月) 01:02:56
tango使ってみようと思ったらstringが未定義とか言われてしまった。
付属のdmdは1.0.21だから大丈夫なはずなんだけども。仕様?
73デフォルトの名無しさん:2007/10/08(月) 01:38:52
stringはdmdじゃなくてtangoのobject.diの中身の問題だとおもうので、tangoの仕様なんじゃないかと。
74デフォルトの名無しさん:2007/10/08(月) 10:50:05
static if(is(string)) alias char[] string;
75デフォルトの名無しさん:2007/10/08(月) 10:56:11
>>71
マングリング規則や仮想関数テーブルの位置や順番すら処理系依存なんだから、
この際、特定のコンパイラ向けにとことん特化すべきじゃなかろうか。

dmdならdmc++の出力とだけリンクできればいいと思う。
76デフォルトの名無しさん:2007/10/08(月) 13:15:47
いや、C++はpluginって書いてあるから、abiごとにplugin書かないといけないんだろ。
それより、C++から来た例外をどうキャッチするのかが気になる。
77デフォルトの名無しさん:2007/10/08(月) 13:22:02
>76
仕様読んでから書け。
78デフォルトの名無しさん:2007/10/08(月) 13:31:52
すまん、ちゃんとダメって書いてあったな>例外
pluginも、plugin"で"C++対応じゃなくて、plugin"のために"C++対応するんだな。
79デフォルトの名無しさん:2007/10/08(月) 13:33:35
DMDScriptをD2.0対応にかきかけたが

くじけそう・・・
80デフォルトの名無しさん:2007/10/08(月) 23:22:48
Dにもユーザー定義リテラルください。
81デフォルトの名無しさん:2007/10/08(月) 23:36:58
ありゃ。C++のマングリング規則ってはっきり決まってたっけ?って
思ってたら、やっぱdmc依存なん?
「C++ではマングリング規則がコンパイラ依存」なんて記述も見つかるし。

そうだとしたら「dmdはC++のマングリングを把握しています」なんて書いてあるけど、
微妙にJARO通報モノだったり? 訳注でも付けとこか。
82デフォルトの名無しさん:2007/10/08(月) 23:37:12
stlのlistとかに相当するのって出来合いのあったっけ?
boost::multi_indexが欲しいがこれは作るしかなさそう
83デフォルトの名無しさん:2007/10/08(月) 23:45:14
>>82
コレクションクラスならtangoに入ってる。
84デフォルトの名無しさん:2007/10/08(月) 23:51:47
>>81
Linux版のdmdでは以下のに対応してる。Windows版は知らね。
http://www.codesourcery.com/cxx-abi/
85デフォルトの名無しさん:2007/10/09(火) 01:18:39
>>84
ありがとーぉ。dmcはWin32しか無いじゃないかーとか絶望するところだった。

……でも正直書いてあることの意味がほとんど理解できませぬ。
C++ABIの標準を決めようって活動で、
g++とかはそれに従ったマングリングをすることもできる、って事?

Win版に関しては、最後の
「時間がたてば、より多くのC++ ABIの側面が
Dから直接アクセスできるようになるでしょう。」の一文に期待するしか?
86デフォルトの名無しさん:2007/10/09(火) 01:22:33
>>83
ありがとうございます。
見てみましたがなんか微妙な使い勝手?
87デフォルトの名無しさん:2007/10/09(火) 01:32:52
>>85
IA-64向けコンパイラでは標準、それ以外のアーキテクチャ向けでもg++とicpcがこのabiを元にした物を標準で使ってる。
88デフォルトの名無しさん:2007/10/09(火) 01:35:09
89デフォルトの名無しさん:2007/10/09(火) 04:47:57
DMDで64bit版あったらいいのにって思うのは俺だけ?
90デフォルトの名無しさん:2007/10/09(火) 07:39:02
>>88
Wikipediaそんなのまでのってるのか・・・
91デフォルトの名無しさん:2007/10/09(火) 12:37:34
オタクがおおい分野はとんでもない内容まで乗ってますよ。
どうせこの板の常連とかが書いた or 訳したんでしょう。
92デフォルトの名無しさん:2007/10/09(火) 13:00:16
msvcとdmc++のマングリング規則が一緒でも
オブジェクトファイルの形式が違うからリンクできないんだよね?
C++って案外可搬性ないんだな
93デフォルトの名無しさん:2007/10/09(火) 16:04:45
うぐぅ。Linux上でのC++との連携がうまくいかない・・。タコですんません。
>>84で言うLinux版dmdて、
http://www.kmonos.net/alang/d/dcompiler.html#linux のヤツの事でOK?
それともgdcとゆーやつを頑張ってコンパイルしなきゃダメ?
94デフォルトの名無しさん:2007/10/09(火) 16:33:32
>>93
そのヤツでOKだけど
http://www.digitalmars.com/d/changelog.html#new2_005
から落とさないとバージョン古いよ
95デフォルトの名無しさん:2007/10/09(火) 17:50:24
インスタンスからstaticメソッドが呼べるのがちょっとううざったいというか、
演算子オーバーロードでstaticなのとそうでないのが区別できないのが困る
96デフォルトの名無しさん:2007/10/09(火) 18:11:32
関数でslice/range表現(x..y)を受け取りたい……

void func(real x..y);
と関数を定義したいなあ、と。
タプルでもいいから。

末尾を含むかどうかはx...y表現を認めるかどうかは難しそうだけど。

機能の提案って本家のMLとかに流すんでしたっけ?
97デフォルトの名無しさん:2007/10/09(火) 18:14:05
digitalmars.Dでいいと思う
98デフォルトの名無しさん:2007/10/09(火) 18:15:24
そもそも range型があってもいいんじゃないかと思う
99デフォルトの名無しさん:2007/10/09(火) 18:16:51
実装されたときにx..yがx, yに展開されるようになると予想
100デフォルトの名無しさん:2007/10/09(火) 18:19:00
1..3 は Tuple!(1,2) じゃないといやだよう
101デフォルトの名無しさん:2007/10/09(火) 20:11:28
1..6はTuple![1,6)
102デフォルトの名無しさん:2007/10/09(火) 20:34:40
>>101
対カッコの強調表示がむちゃくちゃになるのが難点
103デフォルトの名無しさん:2007/10/09(火) 20:51:19
Tuple!("[1,6)");
104デフォルトの名無しさん:2007/10/09(火) 22:28:19
それならTuple!("1..6")にしてやれよww
105デフォルトの名無しさん:2007/10/09(火) 22:37:54
一通りここでの議論を読んで、既出の議論がないか調べてみます。
ttp://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=55946

x..yがx, yに展開されるだけだとsyntax sugerとしてもいまいち弱い感じがしますね。
(x, y]を表現できるリテラルはかなり少ないので、そのへんの書き方で文法を汚さずに追加できれば面白そうなのですが。
以前x<Range<=yと書くとRange型のインスタンスが生成されるクラスをC++で書いたのですが、
opCmpだとそれは許されないんですよねえ。
106デフォルトの名無しさん:2007/10/09(火) 22:55:41
>>104
は?
107デフォルトの名無しさん:2007/10/09(火) 22:56:03
触ったらかわいそう
108デフォルトの名無しさん:2007/10/09(火) 23:30:36
先にちょいと提案したいことがあったので、そっちを提案してみる

class Foo {
 enum EnumType { A, B, C }
}
void func(Foo.EnumType arg);

こういう定義のとき、funcに列挙された値を与えるのに

func(Foo.EnumType.A)

とやたら冗長なので、

func(A)

と書いて通るように識別子探索を拡張して欲しいと提案してみる。
これっていまのところ解決策はないですよね?
109デフォルトの名無しさん:2007/10/09(火) 23:36:35
>>108
今後のプランの一つに入ってるって、どこかで見た気がする。
カンファレンスのスライドだったかなあ。
110デフォルトの名無しさん:2007/10/09(火) 23:48:10
>>109
それはいいねえ。
早めに対応してもらいたい感じだ
カンファレンスのログはあったと思うので、探してみる
111デフォルトの名無しさん:2007/10/09(火) 23:54:26
だからslice/rangeはRangeオブジェクトリテラルにしようと(ry


>>93
死ぬほどありがとう。おかげで悩みまくった数時間が気持ちよく無意味になりますた。
そしてdmdのバージョン出力をよく見てなかった俺めアホが!

しかし完全にUTF-8化されているだけあって、Ubuntuじゃ文字化けしねぇなぁ。
Vista買ったのがバカらしくなってきたわい。

>>108
あー。それJavaでもC#でも同じ事思った覚えが。是非是非。
112111:2007/10/10(水) 00:02:00
て、何自己レスしとんねん。

res[111].replace(">>93", ">>94");
113デフォルトの名無しさん:2007/10/10(水) 00:20:15
>>110
http://d.puremagic.com/conference2007/speakers.html
うぉるたたんのスライドのp35
114デフォルトの名無しさん:2007/10/10(水) 00:29:17
34だた
115デフォルトの名無しさん:2007/10/10(水) 00:42:15
enumも今になってみると中途半端というかinvariantとかぶってるよな。
定数関連はinvariantに任せて、enumの方はシンボルってことで識別子名を
簡単に表示できるようになってくれればいいのに。
enum使うとデバッグ作業がめんどくさくて。
116デフォルトの名無しさん:2007/10/10(水) 00:56:51
次の更新→enum廃止
117デフォルトの名無しさん:2007/10/10(水) 01:13:07
>>115
ありがとう。
enum以外にも魅力的な拡張が多くて目移りしますね。
第一引数が配列である関数をプロパティ的に扱える機能の拡張はいいですね。
ついでにクラス内の(public)メンバを列挙して、自動で配列プロパティに突っ込むテンプレートがあるとうれしいかも……
ついでにデリゲートもオーバーロードしたかったり


>115
struct + invariant配列のほうが便利だったりしますね。パラメタ多いと。
118デフォルトの名無しさん:2007/10/10(水) 01:20:35
そういえば、pp27あたりのstructがinterfaceを継承できるという案があるが、
あれはC++のクラスを利用する布石ではないかという希ガス

まあ、便利なものはテンプレートの互換性がないと何も使えない気も……
119デフォルトの名無しさん:2007/10/10(水) 02:00:48
delegateのcovariant/contravariantが早く欲しい
その次は(環境を持ち運べる)closureかな
120デフォルトの名無しさん:2007/10/10(水) 02:41:24
うひょー、D Conference 2007の資料、結構目を引く点山盛りな感じ。
英語未熟でおぼろげにしか解らないけど。
とりあえずヲルタンのを見てみただけだけど、要点だけまとめた簡潔なスライドだし、
翻訳する費用対効果は高いんじゃ、と無責任に言ってみる。


あと疑問ー。
http://www.kmonos.net/alang/dee/diki/?C%2B%2B%E3%81%A8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%EF%BC%88%E4%BB%AE%E8%A8%B3%EF%BC%89
の「Dのガベージコレクタで確保したメモリへのポインタを渡すには...」のくだり。
GCによる解放対策にだけ触れてる感じだけど、
GCって生きてるオブジェクトでも、移動してポインタ書き換えとかするよね?
ほんとに安全にD外にGCポインタ貸し出すなら、GCを停止しないといけないんじゃ?
121デフォルトの名無しさん:2007/10/10(水) 09:28:04
ttp://d.puremagic.com/conference2007/speakers.html
とりあえず、はっておこう
122デフォルトの名無しさん:2007/10/10(水) 09:30:02
>>120
オブジェクト/クラス単位でガベコレのON/OFFって出来なかったっけ
123デフォルトの名無しさん:2007/10/10(水) 11:27:14
D Conference 2007.jp開かれないかな
124デフォルトの名無しさん:2007/10/10(水) 16:28:12
>>122
カスタムアロケータを書くしかなかったと思う。
125デフォルトの名無しさん:2007/10/10(水) 21:34:36
import std.stdio;

void main(){
auto b = new B();
b.f();
}

class A{
void f(){
writefln("A");
}
}

class B: A{
final void f(){
super.f();
writefln("B");
}
}
リリースビルドして実行するとBがダブって表示されるのですが、
これは正しい動作なんでしょうか? バグなのでしょうか?
126デフォルトの名無しさん:2007/10/10(水) 21:34:57
カスタムアロケータたのCCCCCCCCCCCCCCC
127デフォルトの名無しさん:2007/10/11(木) 01:00:16
コンパイル時に整数乱数が欲しいんだが、どうすればいいんじゃろう。
128デフォルトの名無しさん:2007/10/11(木) 01:11:40
>>127
つ __TIMESTAMP__
129デフォルトの名無しさん:2007/10/11(木) 01:14:30
thx
そういえばそんなのあったなあ。
だけど文字列なのか…ちょっと厄介だのう
130デフォルトの名無しさん:2007/10/11(木) 06:26:34
テンプレート内で文字列に変換するとき、迷ったらbox(...).toStringすればいいことに気づいた
便利だなこれ

>>120
「開放する」の元の単語ははcollectであってdeleteやfreeじゃないので、
「処理する」「片付ける」のほうがいいかもしれませんね。
131デフォルトの名無しさん:2007/10/11(木) 06:48:08
>>129
例えばこんな感じ
hashの中身は、なるべくばらけが大きくなるような暗号系のアルゴリズムに近いほうがいいかも。
この値をキーにして、立ち上がりの早い擬似乱数生成器にかける方法もある
いずれにせよインチキなんで、求める乱数性に応じて適当にやってみてください

int hash(in char[] x) {
int sum;
foreach(c; x) sum^=cast(int)c*3;
return sum;
}
static if( hash(__TIMESTAMP__) == 1 ) {
}
132120:2007/10/11(木) 10:47:31
>>130
おおう、対応どもです。しかしせっかく真摯に対応していただいて申し訳ないのですが、
私の言いたいことは翻訳の仕方に関してでは無く、書いてある内容そのものなのデス。
多分原文でも言ってることは同じで、翻訳には問題なかったんじゃないでしょか。
というわけで、改めて>>120の疑問を書き直してみたり。


「Dでnewした領域のポインタをC++に渡してやってもいいけど、
 途中でGCが走ってその領域がcollectされちゃうと、
 いきなりポインタが無効になってC++側が困るよね。
 だから以下ほげほげな方法で、GCのcollect対象にならないよう気をつけてね」
ってヲルターは言ってるけど、ポインタが無効になる要因ってcollectだけじゃないよね?

http://www.kmonos.net/alang/d/garbage.html によれば、
> 4. 残ったメモリ領域のデータをコピーして使用領域をまとめる処理 (コピーGCと呼ばれます) が実行される可能性があります。
> ガベージコレクタは、オブジェクトをメモリ上の任意の位置に再配置することがあり...
つまりcollect対象でない「生きた」領域を指すポインタだって、GCが走れば再配置によって無効になる可能性がある。
本当は「生かす」だけじゃなく、そのメモリ位置に「固定」する方法が必要なんじゃないか?


……って、アレ? このへん「Cとのインターフェイス」に書いてあることと同じじゃないすか。今気付いた。
今まで問題になったことなかったっけ? 再配置なんて実際には滅多に起こらないとか?
133デフォルトの名無しさん:2007/10/11(木) 11:12:23
>>132
・今のPhobosとTangoのGC実装はコピーGCじゃないので、再配置なんて実際には決して起こらない
・もし実装がコピーGCに変わったら、指摘されてる通りの問題は起きる
・そんときは std.gc.fix(void*) みたいな固定するメソッドが追加されるんじゃないかなあ(予想
134デフォルトの名無しさん:2007/10/11(木) 12:11:03
Tangoのほうは仕様変更とかないの?
135デフォルトの名無しさん:2007/10/11(木) 12:27:46
SDLのD2.0用のポーティングってある?
136デフォルトの名無しさん:2007/10/11(木) 12:33:55
>>134-135
わかんね
137デフォルトの名無しさん:2007/10/11(木) 13:33:07
>>133
managed C++ に、pinっていうのがあったなぁ
(ピン止めという意味)
138デフォルトの名無しさん:2007/10/11(木) 15:01:05
>I think Herb was talking about ADL. D doesn't have ADL, but the next update will include "overload sets" which, although very different, accomplish the same thing.
大風呂敷ktkr。非常にwktk。
139デフォルトの名無しさん:2007/10/11(木) 15:28:15
だれかよんでくだしい
140デフォルトの名無しさん:2007/10/11(木) 16:18:29
私は、Herb(人の名前?)はADLについて話していたと思っている。
DはADLを持ってはいないが、次のアップデートの際には「overload sets」が導入されるだろう。
これはADLとは非常に異なるものの、同じことを実現するものである。
141デフォルトの名無しさん:2007/10/11(木) 16:20:54
誤訳や補足があればおながいします
142デフォルトの名無しさん:2007/10/11(木) 16:31:43
元の話よんでないけど文脈からして
 Herb = Herb Sutter (C++のえらいひと)
 ADL = Argument Dependent Lookup
  namespace Hoge { class X{}; void foo(X* x){} }
  foo( new Hoge::X );
  // Hoge::foo って書かなくても、引数のクラスと同じ名前空間で
   // 定義されてるfooを勝手にコンパイラが呼んでくれるC++の機能
   // 複数の名前空間にまたがって関数オーバーロード出来る
かと。

Walterたんは昔ADLやるとカオスになるからやらないって言ってたけどどうなるんだろう
143デフォルトの名無しさん:2007/10/11(木) 17:45:45
ネームスペースあえてつぶすようなマネはやめてほしいなぁ。。。
パールのお化けがでるよ?
144デフォルトの名無しさん:2007/10/11(木) 17:47:13
(new Hoge.X).foo();

に限ってADLを行うようにすればいいんじゃね?
145デフォルトの名無しさん:2007/10/11(木) 18:00:09
それは、配列のプロパティ的な引っ張り方だねぇ。
うーん。わかる人にはわかるって感じだなぁ。

むー、どうなるんだろうねぇ。
146デフォルトの名無しさん:2007/10/11(木) 23:03:02
>>143
何にもわかってないなぁ。。。
147デフォルトの名無しさん:2007/10/12(金) 16:05:48
>>146
もっとサンプルコードくれくれ。
148デフォルトの名無しさん:2007/10/12(金) 19:10:29
この問題はこういうのだと把握

//b.d
void func(string){}

//a.d
import b;
void func(int){}
void main(){
 func(10);
 //オーバーロードと考えてこれを呼べてもいいだろうに
 //func("hoge");
 b.func("hoge"); // 現状フルネームが必要
}

ADLあんまり知らないんだが
importされたモジュールのシンボルと真の意味で重複しなければ
呼び出し可能にするだけだと思うんだけどややこしいことが必要なの?
149デフォルトの名無しさん:2007/10/12(金) 19:49:52
それちがくね?
150デフォルトの名無しさん:2007/10/12(金) 20:27:50
あれ・・・違ったらすまそ
ADLは引数の型の名前空間を見に行って関数を探すみたいだけど
そんなややこしそうなことしなくても素直に考えたら
a.func(int) を a_func_int として
b.func(string) を b_func_string としておいて
どこかで func(10) を見つけたら *_func_int のシンボルを検索し
func("hoge") を見つけたら *_func_string のシンボルを検索するだけだよな?
それでコンフリクトが見つかったらあいまいな関数呼び出しエラーにすればいいんじゃないのかと思って
151デフォルトの名無しさん:2007/10/12(金) 20:40:39
なんかすごく勘違いしてる気がするぞ
152デフォルトの名無しさん:2007/10/12(金) 20:55:03
ううむADLが何で必要なのか勉強してくるか・・・
153デフォルトの名無しさん:2007/10/12(金) 21:35:52
てか調べてから家よ。

なんでお前の想像でレスを消費しなきゃなんないんだよ。アホかいな。
154デフォルトの名無しさん:2007/10/12(金) 22:35:11
低レベルな質問で申しわけないんですが、構造体データを
std.file.read() や std.file.write() で読み書きするにはどうしたら
良いんでしょうか?というか、void[]型の使い方がいまいち分からない。
155154:2007/10/12(金) 23:12:13
すいません、自己解決しました。
void[] は型のない配列だから、構造体もlengthが1の配列にして受け渡しすりゃ良かったんですね。
156デフォルトの名無しさん:2007/10/13(土) 00:53:25
自分でも試してみたけど、そういうmarshalっぽいのはすごい泥臭くなるのね。
毎回手で書くようなもんじゃないということなんかな。
157デフォルトの名無しさん:2007/10/13(土) 01:15:38
構造体をうにおんで囲んでryとか
158デフォルトの名無しさん:2007/10/13(土) 02:06:38
泥臭さもDらしさではある
159デフォルトの名無しさん:2007/10/13(土) 02:29:16
(cast(ubyte*)&st)[0 .. st.sizeof]
共用体のほーがいいかもなー
160デフォルトの名無しさん:2007/10/13(土) 03:11:03
YAMLの実装はありますか?
161デフォルトの名無しさん:2007/10/13(土) 04:36:40
162デフォルトの名無しさん:2007/10/13(土) 22:42:49
>>135
DerelictのD2.0用のポーティングならある
163デフォルトの名無しさん:2007/10/14(日) 05:50:56
そろそろ1系列から2に乗り換えようと思うんだが何がどう変わる?
164デフォルトの名無しさん:2007/10/14(日) 06:24:42
その辺よくわかんなくてずっと1系列使ってる俺。
詳しい人誰か移行ガイドとか書いてくれないかなと思い続けている。
165デフォルトの名無しさん:2007/10/14(日) 10:36:27
>>164
いいだしっぺの法則で是非 m(_ _)m
constとか文字列のコピー、そのあたり型が厳格になったのが
違うと思う
166デフォルトの名無しさん:2007/10/14(日) 13:16:58
2.0 ちょっと使ってみた感じ

・doxygen 未対応(const な引数、戻り値を使うと正常にパースできない)。
・各種ポーティングを2.0用に(若干)修正必要。
・各種ポーティングに渡す時にキャストが必要。
 例えばtoUTF16z()などの戻り値が(const wchar*)だけどポーティングのほうは(wchar*)なのでcast(wchar*)が必要
・文字列リテラルが invariant なchar[] なので char[] s = "hoge"; とかやってると修正が必要。

だった。文字列リテラルはともかく、各ツールやライブラリが2.0用に対応してないと面倒くさくて適わない。
結局1.0に戻った。const/invariant/final は1.0に初めから欲しかったなぁ。
167166:2007/10/14(日) 13:20:23
あと不安定だった。bindings の win32 は修正しないと無限ループ突入したし。
168デフォルトの名無しさん:2007/10/14(日) 13:47:48
constといえば、
const(C) c; //Cはクラス
というメンバ変数に代入しようと思ってもできない(言語仕様上できるはず)とか、
メンバ関数でfinal constってできないこととか、
「一度初期化したら変更しない。初期化はコンストラクタじゃないメンバ関数で行う」
ということをしたいときに、finalが使えないこととか、
使いにくい点が多数。
将来なんとかなるのかな。

あと、「あるオブジェクトが別のオブジェクトの参照をもつ」ということをたまにするけど、
そのとき、別のオブジェクトを変更しないときはそれにconstを付けたいと思うのが普通だと思う。
で、そうするとその別オブジェクトに含まれるポインタには全部constが付いてしまう。
例えば、別オブジェクトにHWND型の変数があって、それを取り出してAPI関数に
入れるときには、constが付いてしまっている。
何が言いたいのかというと、win32のバインディングを完全にD2.0に対応しようとするならLPCSTRをconst付きにするだけでは駄目だということ。
ポインタ型を引数に取る全ての関数について、正しくconstをつけないといけない。
でも正直、win32をポーティングしてる人たちがここまでやるとは思えないし、なんかconst周りは絶望感しか感じない。
169168:2007/10/14(日) 13:52:10
あと、余談だけど、関数引数のinって値渡しだったんだな。
参照渡しだとずっと思ってた。
どこで勘違いしたんだろ。
170163:2007/10/14(日) 14:09:05
>>166-168
とん。
結構めんどそうなのでもう少し様子見てみるわ
171デフォルトの名無しさん:2007/10/14(日) 17:04:00
>>169
ポインタの値渡しだね。
1.0の in/out/ref は正直使いにくいと思った。
in でも参照先の値を変更することがいくらでもできるし。
const まわりはまだ検討が足りない気がするなぁ。
172デフォルトの名無しさん:2007/10/14(日) 23:44:10
>>171
>ポインタの値渡し
? アセンブラでみるとポインタで渡すのが参照渡しとおもってたんだけど・・違うのかな。
>参照先の値を変更することがいくらでもできる
castしてない?
173デフォルトの名無しさん:2007/10/14(日) 23:54:33
CTFEでForeachRangeつかえないのかな?
174168:2007/10/15(月) 00:13:18
>>171
>ポインタの値渡しだね。
ただの値渡しだと思う。
デバッガで逆アセしたコード見てみたら、inがあってもなくても同じコードになってたし。
175171:2007/10/15(月) 01:14:50
>>172, 174

ああ、ごめん。俺が言ったのはクラスや配列を引数として渡すときのこと。
int などの基本型ならそのままの値渡し。
176デフォルトの名無しさん:2007/10/15(月) 20:42:17
/*
以下のコードがコンパイルエラーになるんだけどバグ?
bug.d(12): Error: this for m needs to be type S not type bug.C
bug.d(12): class bug.C member m is not accessible
*/
import std.stdio;
import win32.windows;

struct S
{
 int m;
}
class C
{
 int f()
 {
  return S.m.offsetof; // エラーになる
 }
}
int main()
{
 writefln("%d", S.m.offsetof); // これはOK
 return 0;
}
177デフォルトの名無しさん:2007/10/15(月) 21:28:16
バグっぽいね
178デフォルトの名無しさん:2007/10/16(火) 07:26:22
デリゲートの挙動が意味不明だ
179デフォルトの名無しさん:2007/10/16(火) 18:36:41
>>178
どんな感じっすか
180デフォルトの名無しさん:2007/10/16(火) 19:18:31
デリゲートな部分ですから、、、
181デフォルトの名無しさん:2007/10/16(火) 19:40:16
【審議中】
    ∧,,∧  ∧,,∧
 ∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U (  ´・) (・`  ) と ノ
 u-u (l    ) (   ノu-u
     `u-u'. `u-u'
182デフォルトの名無しさん:2007/10/16(火) 21:33:12
OpenGL+SDLでゲームを作っているのですが、
SDL_mixerとABAさんのsound.dを使うようにしたところ、
Out of memoryというエラーが出てクラッシュするようになってしまいました。
メモリ使いすぎかと思ったのですが、
タスクマネージャから見るとメモリ使用量はほとんど増加していないので、
どんなバグを疑えばよいですか?
ソースコードの変更点としては、数箇所にSound.playSe()とSound.playMarkedSe()を追加しただけで、
しかもこのライブラリはABAさんが実用化しているので、何が変わっているのかさっぱりです。
これを取り除くとやはり発生しなくなります。
183デフォルトの名無しさん:2007/10/16(火) 21:34:58
書き忘れ。
コンパイルは成功して、同じ用にゲームは動き、音もなるのですが、
しばらく動かしていると突然エラーが出て終了する、という状態です。
184デフォルトの名無しさん:2007/10/16(火) 23:33:10
>>180
口元の筋肉がちょっと動いた
185デフォルトの名無しさん:2007/10/17(水) 00:29:22
D言語のコンパイラ精度ってどうなの
186デフォルトの名無しさん:2007/10/17(水) 01:22:29
正確性には欠けるな。バグだらけ
187デフォルトの名無しさん:2007/10/17(水) 01:24:16
>>182
D2.0でやってる?
188178:2007/10/17(水) 02:36:03
>>179
要はこういうことなんだなあ、と
http://www.kmonos.net/wlog/64.html#_2340060823
189デフォルトの名無しさん:2007/10/17(水) 04:23:32
爆弾キターーーー

ttp://www.digitalmars.com/d/changelog.html

What's New for D 2.006
* Transformed all of string, wstring, and dstring into invariant definitions.
  Tons of changes in function signatures and implementations rippled through the standard library.
  Initial experience with invariant strings seems to be highly encouraging.
* Implemented Overload Sets for functions and templates.

phobosの機能追加は多すぎて省略
190デフォルトの名無しさん:2007/10/17(水) 05:04:39
何か凄い凄い。
std.getoptでプログラムの引数の利用が容易に、std.fileにディレクトリ内のファイル一覧を簡単に取得する方法が無かったのが修正された、std.stdioに機能増えすぎワロタ、std.contractsが新鮮。
std.conv.parseとstd.string.munchのコンボもいい。けど、refを使ったのは別のモジュールにまとめて欲しいような気がしないでもない。
191デフォルトの名無しさん:2007/10/17(水) 05:16:50
すごい、すごいけどD1.0系列の更新が止まったように見える…
仕様が固定されたD1.0系列を使うか新機能とPhobosが見せる巻き返しを堪能するためにD2.0を使うべきか…悩ましい…
192デフォルトの名無しさん:2007/10/17(水) 05:29:55
何がすごいのかさっぱり分からん
193デフォルトの名無しさん:2007/10/17(水) 05:59:56
D言語
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
           ___                _
       / ____ヽ           /  ̄   ̄ \
       |  | /, −、, -、l           /、          ヽ 
       | _| -|○ | ○||         |・ |―-、       |
   , ―-、 (6  _ー っ-´、}         q -´ 二 ヽ      |
   | -⊂) \ ヽ_  ̄ ̄ノノ          ノ_ ー  |     |
    | ̄ ̄|/ (_ ∪ ̄ / 、 \        \. ̄`  |      /
    ヽ  ` ,.|     ̄  |  |         O===== |
      `− ´ |       | _|        /          |
194デフォルトの名無しさん:2007/10/17(水) 07:51:06
な、なんだどうした何が起こった!? 日本語訳を!
良いニュースなのか悪いニュースなのか!?
195デフォルトの名無しさん:2007/10/17(水) 07:55:39
C++が使えない無能の為のプログラミング言語=D言語
196デフォルトの名無しさん:2007/10/17(水) 08:10:22
ktkr
197デフォルトの名無しさん:2007/10/17(水) 08:15:42
こりゃまたすごいのきたな。
198デフォルトの名無しさん:2007/10/17(水) 08:24:33
てかD言語ってまだ開発してたのか
199デフォルトの名無しさん:2007/10/17(水) 09:13:04
標準ライブラリって本当にPhobosからTangoに移行するん?
200デフォルトの名無しさん:2007/10/17(水) 11:54:50
>>199
定期的に話題になるよな
2.0をいじってたら、
Tangoのわなびとしか、最近思えなくなってきた。
201デフォルトの名無しさん:2007/10/17(水) 12:05:40
ttp://www.digitalmars.com/d/phobos/std_variant.html
ををVariant来た! boxはいらない子になるのかなぁ・・・

!isっていつからあった?
202デフォルトの名無しさん:2007/10/17(水) 12:14:31
あ、string系のaliasがconst(char)[]からinvariant(char)[]に変わったのか。

……どーいう意味を持つのかイマイチ分からない。
というか、未だに「invariant型」の動作がよく分からん。

invariant(char[]) book = "I, Robot";
って宣言したbookに関して、

book ~= " by Isaac Asimov";
book.length = 1;
book = "2001 Space Odyssey";
こういう動作は別に禁止されないんだよね。invariant型って、どういう目的で使えばいいの?
203デフォルトの名無しさん:2007/10/17(水) 12:32:07
>>191
D2.006の新しいPhobosの機能をD1.xに移植した人がdigitalmars.D.announsに。
std2ってやつ。

204デフォルトの名無しさん:2007/10/17(水) 13:24:39
>>202
invariant(char[]) book = "I, Robot";

invariant(char)[] book = "I, Robot";
で、意味が変わるきがするが
205デフォルトの名無しさん:2007/10/17(水) 14:02:50
>>201
!isはisが導入されたときからあったと思う
206デフォルトの名無しさん:2007/10/17(水) 14:11:49
>>204
それは同じ意味になる
http://www.digitalmars.com/d/final-const-invariant.html
の Invariant Doesn't Apply To Declared Symbols のあたり。
207デフォルトの名無しさん:2007/10/17(水) 14:19:58
>>202
たとえば
 class Stream {
  int opApply( int delegate(ref const(char)[] line) dg );
 }
こういう宣言だったとしたら、
string s;
 foreach(line; din) if( line[0] == '#' ) s = line;
 writeln( "#で始まってた最後の行は", s );
このコードは期待した通りに動かないかもしれない。
Streamが内部でlineの中身を勝手に再利用してるかもしれないので。
constだと、"自分が"lineの中身を書き換えることはできなくなるけど、
他のところで書き換えが起こる可能性は否定できない。

これが
 class Stream {
  int opApply( int delegate(ref invariant(char)[] line) dg );
 }
こうだったら、opApplyの実装を見るまでもなく↑のコードは普通に動く。
invariantな配列の中身はもう"誰も"書き換えないので、Streamが後で
書き換えるようなことがない。

とかそういう使い方。
208デフォルトの名無しさん:2007/10/17(水) 14:29:13
おい。invariant周りでコンパイル通らなくなったぞ。
まーた全部書き換えかよ…
209デフォルトの名無しさん:2007/10/17(水) 14:48:24
なんでもかんでもidupつけないといけないのは気持ち悪いな
210デフォルトの名無しさん:2007/10/17(水) 15:21:42
aasumeUniqueでおk
211デフォルトの名無しさん:2007/10/17(水) 15:49:37
ttp://www.digitalmars.com/d/phobos/std_contracts.html

string letters()
{
char[] result = new char['z' - 'a' + 1];
foreach (i, ref e; result)
{
e = 'a' + i;
}
return assumeUnique(result);
}

これか なるほど
212デフォルトの名無しさん:2007/10/17(水) 19:05:34
>>208
動作確認してなかったので翻訳してなかったんだが、

string, wstring, dstringの定義をinvariant付きにしました。
関数の定義と実装を(標準ライブラリ関数の影響も含めて)山ほど変更する必要があります。
invariantなstringを使ってみた最初の感想としては、かなり有望です。


なにがどう有望なのか試してないのでなんともいえませんが。
213デフォルトの名無しさん:2007/10/17(水) 19:37:54
おいおい、phobos 張り切るのもいい加減にしろよ。tango の立場がなくなっちまうじゃないか。
214デフォルトの名無しさん:2007/10/17(水) 20:01:30
walたんがTangoに「○○追加してね」っていえばいい
215デフォルトの名無しさん:2007/10/17(水) 20:41:34
D2.x用のTangoは、どうなってる? もう出てる?
216デフォルトの名無しさん:2007/10/17(水) 20:45:46
>>215
まだじゃね?
217デフォルトの名無しさん:2007/10/17(水) 21:20:07
import std.stdio, std.contracts;
void main() {
foreach(string line; lines(enforce(fopen(__FILE__)))) {
write(line);
}
}

SUGEEEE
218デフォルトの名無しさん:2007/10/17(水) 21:22:39
そんな感動するようなことじゃないが、これまでなかったのが不思議だな。
219デフォルトの名無しさん:2007/10/17(水) 21:31:01
そういう短いけれども案外実用的なコードがたくさん欲しいところ
220デフォルトの名無しさん:2007/10/17(水) 21:31:17
>>187
解決しました。
すいません、もともとあったメモリ関係のバグが、たまたま出てきた形でした。
221デフォルトの名無しさん:2007/10/17(水) 21:45:35
D言語、1系が安定しない永遠のβだった頃から注目してるけど、
1系が成熟しないままさっさと2系に移ったところを見ると
実用的になるのは3系が登場してからかなと思ってしまう。
222デフォルトの名無しさん:2007/10/17(水) 21:51:38
Dは永遠にをるたんの実験言語。
実用的になるなんてあり得ないよ。
223デフォルトの名無しさん:2007/10/17(水) 21:59:20
>>209-211
さっぱりわからんのだが・・・
idup付ける代わりにassumeUniqueで済むってことだけじゃないよな?
余計にタイプ数増えるんだが
本当はassumeUniqueは何のためのものなの?
224デフォルトの名無しさん:2007/10/17(水) 22:05:37
>>223
idupはデータのコピーが行われるが、
assumeUniqueはコピーが行われない。
225デフォルトの名無しさん:2007/10/17(水) 22:40:23
>>224
うーん
そうですか
もうちょっと暗黙のコピーが発生するのを許容して
明示的な指定が減るようになったらいいね
226デフォルトの名無しさん:2007/10/17(水) 22:50:17
テストしてなさすぎワロス
いろいろ試してみたがdmd2.006はstd.formatが壊れてるな

//>writef
//testtest1010
//%s=%dvalue200
import std.stdio;
void main(){
 writef("test", "test", 10, 10, "\n%s=%d", "value", 200, "\n");
}
227デフォルトの名無しさん:2007/10/17(水) 23:01:33
>>226
>Breaking change: std.stdio.writef can now only accept a format as its first argument.
228デフォルトの名無しさん:2007/10/17(水) 23:21:22
>>227
あ 最後に書いてあるのそういうことか thx
229デフォルトの名無しさん:2007/10/17(水) 23:34:02
stringにconstつけてみたりinvariantになったりするのはWalterたんからの「ソース見直せリファクタリング汁!!」というご命令に違いない!
230デフォルトの名無しさん:2007/10/17(水) 23:57:41
Andrei Alexandrescuありがとう、そしてがんばれー
とエールを送っておこう
231デフォルトの名無しさん:2007/10/18(木) 01:09:50
>>230
Andrei Alexandrescu先生のTMPが見られるのは今やD言語だけ!(でもない)
232デフォルトの名無しさん:2007/10/18(木) 01:40:11
gdcってdmdで言うv2.0以降はあるの?
233デフォルトの名無しさん:2007/10/18(木) 01:46:50
svnで対応してるよ。
234デフォルトの名無しさん:2007/10/18(木) 19:31:42
>>206
ありがと しらんかった
235デフォルトの名無しさん:2007/10/19(金) 00:01:06
coroutineが、phobosでほしいなぁ
236デフォルトの名無しさん:2007/10/19(金) 00:14:29
そこは言語仕様に組み込むべきだろう。
237デフォルトの名無しさん:2007/10/19(金) 06:13:14
dmd2.004 以降でこういうちょっと怪しいのをコンパイルしようとすると途中で固まる。
void main(){ f([[]]); }
void f(int[][] a){}

f(cast(int[][])[[]]); ならおk

-v 付きでコンパイルすると semantic3 までは表示されるけど code が表示されずに止まってる。
何これ?
238デフォルトの名無しさん:2007/10/19(金) 06:40:44
D言語で作られたアプリケーションって何があるよ
239デフォルトの名無しさん:2007/10/19(金) 11:33:27
Dで作ったOS
それがDOS
240デフォルトの名無しさん:2007/10/19(金) 11:37:56
ttp://www.digitalmars.com/d/phobos/std_string.html

int ifind(in const const char[] s, in const const char[] sub);

なんなんだ、const だらけかよ。
inつかっても constをこれだけ使うっていうのがなんとも・・・
241デフォルトの名無しさん:2007/10/19(金) 12:44:04
in const constってどういう意味ですかwwww
inって
invariant const scopeだったよねwwwconst三つですかwwwww
242デフォルトの名無しさん:2007/10/19(金) 13:09:17
typo
ソース見れ
243デフォルトの名無しさん:2007/10/19(金) 13:36:42
D言語でstaticライブラリをつくる方法はどうやるのでしょうか。
コンパイル激早なんで、やる必要があまりないのかもしれませんが・・・
244デフォルトの名無しさん:2007/10/19(金) 13:50:03
budなら
bud -lib main.d

何も使わないでやるなら
dmd -c main.d
lib -c -l main.lib main.obj
245デフォルトの名無しさん:2007/10/19(金) 13:50:18
>>240
なんかintつけるとDDocが変なものを生成する。
246デフォルトの名無しさん:2007/10/19(金) 14:18:48
static引数まだー?
247デフォルトの名無しさん:2007/10/19(金) 16:20:50
>>246
なにそれ
248デフォルトの名無しさん:2007/10/19(金) 16:53:40
関数名に?入れて述語ry

そういやなんで?とか!とかは識別子にならないの?
249デフォルトの名無しさん:2007/10/19(金) 17:01:03
scopeクラスが単にnew ScopeClass();でエラー出さないでしかもスコープ抜けてもデストラクタが呼ばれないですけどこれはバグ?
250デフォルトの名無しさん:2007/10/19(金) 17:03:49
やっべDMD古いからかな。新しいので試してみます。一応古いのは1.020です
251デフォルトの名無しさん:2007/10/19(金) 17:24:27
>>249
scope周りはバグだらけ。もうどうしようもない
252デフォルトの名無しさん:2007/10/19(金) 17:40:25
把握しました
253デフォルトの名無しさん:2007/10/19(金) 17:50:04
本当にconstとかinveriantとか必要なのか?
C++から移ってきたときはほしいなと思ったこともあったけど、現状のconstとinveriantを見てるとうざったさ以上の便利さを感じない…
もっと上手い方法なかったのかな…
254デフォルトの名無しさん:2007/10/19(金) 18:03:42
デリゲート便利だなw
Scheme触って帰ってきたら使わずには居られないwwww
255デフォルトの名無しさん:2007/10/19(金) 19:50:18
>>253
constまわりは、まだまだこれからって感じだと思う。
現時点では文字列をimmutableにするためにしか使われてないし。
評価を下すのはまだ早いと思う。
現状のconstまわりの仕様には問題あると思うが。

文字列(配列)のスライスはコピー作らないから、文字列をimmutableにする意味はあると思うし、現時点では、
「inveriantは文字列をimmutableにするためのもの」
って割り切って、それ以外の機能は使わないようにすれば何とかやっていけそうだと俺は感じてる。
256デフォルトの名無しさん:2007/10/19(金) 23:12:18
>>244
ありがとうございます
作れました!
257デフォルトの名無しさん:2007/10/20(土) 02:46:33
勇気出してD2を入れることにしたぞー!
258デフォルトの名無しさん:2007/10/20(土) 07:56:12
macroって結局なんなの?
259デフォルトの名無しさん:2007/10/20(土) 13:09:30
>>258
カンファレンスのをるたんのスライド見れば分かるよ。
260デフォルトの名無しさん:2007/10/20(土) 14:45:02
それでも俺は1系列を使い続ける
261デフォルトの名無しさん:2007/10/20(土) 16:50:22
>260
1系列は俺に任せてお前達は先に行け!

まで読んだ
262デフォルトの名無しさん:2007/10/20(土) 17:38:26
>>261
文字数増えてるという不思議。
263デフォルトの名無しさん:2007/10/20(土) 18:20:58
>>262
つまり行間じゃなくて字間を読んだということか
264デフォルトの名無しさん:2007/10/20(土) 20:27:45
D2.0のstring周りの改変は
暗黙のコピーがいやでしょうがない
どこでどう動いてるか把握したい
文字列で、知らぬ間にメモリをちょっとでも使われるのも嫌でたまらん
ってことかな。

スクリプトライクな手軽なコーディングを
できるだけ殺さないように、がんばってんだよね
265デフォルトの名無しさん:2007/10/20(土) 22:14:00
みんな phobos と tango のどっち使ってる?
phobos は単純明快だが機能面でちょっと不足な上にバグ多いし、
tango は機能面はある程度充実してるけどドキュメントが整備されてない上に使いにくかったりするし、
なんかこう、どっちも中途半端なんだよなぁ。
266デフォルトの名無しさん:2007/10/20(土) 22:28:27
>>248
全角?も駄目なんだな。これで我慢しとけ。

bool もしかしてnullですか(Object nullかどうか調べるオブジェクト)
{
 return nullかどうか調べるオブジェクト is null;
}
267デフォルトの名無しさん:2007/10/21(日) 00:09:01
もしかしてnullですか?
268デフォルトの名無しさん:2007/10/21(日) 00:10:25
もしかしてnullですか¿
269デフォルトの名無しさん:2007/10/21(日) 00:11:09
nullですよ¡
270デフォルトの名無しさん:2007/10/21(日) 03:22:06
>>264
藻前は組み込みに向いている
Dが組み込みに対応するその日まで
Dで生き延びろ
271デフォルトの名無しさん:2007/10/21(日) 03:25:55
>>264の発言は>>264自身のことじゃなくてDの文字列仕様の意図でしょ?
272デフォルトの名無しさん:2007/10/21(日) 07:58:34
>>265
両者の良いところが全部一つに集まると、
素晴らしき真のDが誕生してどんな願いも叶えてくれると伝説にはあります
273デフォルトの名無しさん:2007/10/21(日) 09:51:27
>>270
げ、するどい 正直びっくりした。
組み込み屋です。 Dが早く使えないかねらってます。
274デフォルトの名無しさん:2007/10/21(日) 12:02:31
ちょっと和んだ
275デフォルトの名無しさん:2007/10/21(日) 13:55:30
>>273
そう考えると2.006 invariant stringは有望だなあ。
Walterたんが「リアルタイム処理ではmalloc/freeよりGCの実行制御のほうが有利なこともある」
ってるが、そういうのは確かにあるので分かる気はする。
実際free listと組み合わせるとなかなか高速に動作してくれるし。
ada並の用途になるとDも本望だろう。
276デフォルトの名無しさん:2007/10/21(日) 14:37:40
>>272
それを後の人は「闇鍋」と呼んだ。
277デフォルトの名無しさん:2007/10/21(日) 14:57:01
D1〜D7まで揃えるとDragonが(ry
278デフォルトの名無しさん:2007/10/21(日) 15:34:37
組み込み屋ってなにするひと?
279デフォルトの名無しさん:2007/10/21(日) 15:45:17
280デフォルトの名無しさん:2007/10/21(日) 15:57:58
>>279
サンクス
281デフォルトの名無しさん:2007/10/21(日) 17:11:50
組み込みに関してはかなり素人で見当違いなことかもしれないんだが…
たとえばH8のマイコンがGCCのコンパイラでコンパイルできるみたいだけど、
GDCとH8を使ってD言語による組み込み向けのプログラムを作ることはできないのかな?
282デフォルトの名無しさん:2007/10/21(日) 18:59:26
GDC
283デフォルトの名無しさん:2007/10/21(日) 19:00:39
ごめん、途中で送ってしまった

GDCでクロスコンパイラはつくれるかもしれないが、
ターゲットが32ビットCPUでないとだめかもしれない。
284デフォルトの名無しさん:2007/10/21(日) 19:01:25
tango 0.99.2を使ってるんだが、IConduitやらOutputStreamやら入出力周りの関係と用途がさっぱりわからん。
ソースによらず汎用的にストリームを扱いたいときはどのインタフェースをサポートすればいい?
285デフォルトの名無しさん:2007/10/21(日) 20:22:16
>>281
去年 gdc を H8 にポートしてみた事がある。
phobos の GC がうまく動作しないところで絶賛放置中。
2日の作業じゃここらが限界だった。
286デフォルトの名無しさん:2007/10/21(日) 22:06:18
GCつかわなければいけるんじゃなかろうかと一瞬考えたけど、そんなDに意味はあるのかどうか真剣に考えてしまった。
287デフォルトの名無しさん:2007/10/21(日) 22:16:38
ベターC++と高速コンパイルだぜ!
288デフォルトの名無しさん:2007/10/21(日) 22:41:03
GDCだと遅い罠
289デフォルトの名無しさん:2007/10/22(月) 00:17:21
じゃあ意味ないんじゃね?
290デフォルトの名無しさん:2007/10/22(月) 00:56:13
>>284
flectioned から抜き出してみた。tango と phobos の差異を吸収するような
書き方が一番なんでないかい?

static if(is(typeof((new object.Object()).toUtf8()) == char[])){
 const bool inTango = true;
 const bool inPhobos = false;
}else{
 const bool inTango = false;
 static if(is(typeof((new object.Object()).toString()))){
  const bool inPhobos = true;
 }else{
  const bool inPhobos = false;
 }
}

static if(inTango){
 import tango.stdc.stdio;
} else static if(inPhobos) {
 import std.c.stdio;
}

int main()
{
 printf("Hello world");
 return 0;
}
291デフォルトの名無しさん:2007/10/22(月) 00:58:57
またあげちまったよ・・・すまん
292デフォルトの名無しさん:2007/10/22(月) 01:23:43
ttp://dsource.org/projects/tangobos/browser/trunk
Tangobos is a compatibility layer to allow most Phobos software to be compiled unmodified on Tango.
It is effectively a port of Phobos to Tango: it is only modified to the degree required to make it compile.
これってTango/Phobos共存させるのが目的なんだよな?
293デフォルトの名無しさん:2007/10/22(月) 02:30:10
テラタンゴボスwww
294デフォルトの名無しさん:2007/10/22(月) 10:56:20
なんというド直球ネーミングw
295デフォルトの名無しさん:2007/10/22(月) 11:06:07
D言語製のブラウザってある?
296デフォルトの名無しさん:2007/10/22(月) 12:24:25
>>292
Tangoboswww
見間違いかと思ったわw
297デフォルトの名無しさん:2007/10/22(月) 12:57:13
>>292
Tangoの上に乗っかるPhobos互換レイヤか
298デフォルトの名無しさん:2007/10/22(月) 13:07:18
どっちかに統一したほうが良いように思うのは俺だけ?w
299デフォルトの名無しさん:2007/10/22(月) 13:09:36
Tangoboswwwwwwwwwwwww
300デフォルトの名無しさん:2007/10/22(月) 13:31:59
>>298
統一してほしいね〜

そもそも、TangoはPhobosと共存できないように
作る必要があったのだろうか?
301デフォルトの名無しさん:2007/10/22(月) 14:03:17
誰かがグレイトなライブラリを作ればいい。
どうせ D はまだ実用されてるとは言いがたい状況なんだし、
新規のライブラリがポンと出てきた所で問題は無い。
302デフォルトの名無しさん:2007/10/22(月) 14:08:58
それをここで作るんですよ
303デフォルトの名無しさん:2007/10/22(月) 14:27:52
Pascal型UpperCamelCaseが嫌いなのでphobos中心にマージされて欲しいと思う俺がいるが、
phobosはバージョンアップに追従するのが原則、
Tangoはそこまでやったりもしてないからなあ。

C++ユーザからの乗り換えパスとしてSTLとboost相当の移植は欲しい気がする
lexical_castとかはC++では使えるけどDではtoStringその他が使えるからまあいいけど。
304デフォルトの名無しさん:2007/10/22(月) 14:35:52
>>303
>lexical_cast
確かめてないけどstd.conv.toは?
305デフォルトの名無しさん:2007/10/22(月) 16:47:31
makefileがわりにmake.dってファイル作ってrdmd make.d optionってやるのよさそうだね。
bud使ったほうが早いかな?むしろrdmd bud.dってかww
306デフォルトの名無しさん:2007/10/22(月) 16:49:55
いまさら気づいたけどなんもよくないね
307デフォルトの名無しさん:2007/10/22(月) 17:01:00
D2でライブラリ関係のコンパイル通らなすぎわろたあああああああああああ
308デフォルトの名無しさん:2007/10/22(月) 17:31:37
>>303
ちゃんと「The D Style」なんてのまで存在してるのに、
そこまでlowerCamelが嫌いだったのかねぇ・・。

豊富な機能やクラス設計に「おお」と思いつつ、ドキュメントのHelloWorldを見た時点で

> tango.io.Console;
「え? モジュール名・・」
> Cout("Hello...")(s).newline
「え? Coutて? UpperCamelな関数? いや()演算子持ったオブジェクト?
 つかなんで可変引数使わへんのん? で、newline? 構文が最終的にプロパティ参照になっちゃってるやん?」

そんなTango。
309デフォルトの名無しさん:2007/10/22(月) 17:34:31
そういう話題が出ないはずないと思うんだけどなぁ・・・

なんか考えがあってのことなのかね?
310デフォルトの名無しさん:2007/10/22(月) 17:44:08
Tangoは機能自体はいいんだが、俺も設計が気に食わない。
311デフォルトの名無しさん:2007/10/22(月) 17:54:10
たしかにCoutはきもい
void coutln(T...)(T t){ ... }
とか各自定義汁ってことか?www
312デフォルトの名無しさん:2007/10/22(月) 17:56:18
とりあえず動けばおkってことになってるのかな???
313デフォルトの名無しさん:2007/10/22(月) 18:15:54
自分はCoutよりStdout派。
import tango.io.Stdout;

Stdout("こんにちは 世界\n");
Stdout(1, 2, 3, 4, 5).newline;
int a = 5, b = 10;
Stdout.format("てすと {} + {} = {}", a, b, a+b).newline;
314デフォルトの名無しさん:2007/10/22(月) 18:33:08
opCallのオーバーロードは、C++のビットシフトのオーバーロードより数倍キモイ。
315デフォルトの名無しさん:2007/10/22(月) 18:34:55
まぁ、なんだかんだワガママ言ってもphobosよりはOOPが生きてるし、
使いたいといえば使いたいんだよねTango。

SDLに対するSDL_image/mixer/..、C++のSTLに対するboostみたく、
phobosがコンパイラ添付の最低限ライブラリ、
Tangoが「事実上の標準」な拡張ライブラリ、とかに分かれててくれるのが理想と思う俺。
組込みとか色々タイトな分野じゃない限り、普通Tangoを被せて使うものだよ、みたいな。
316デフォルトの名無しさん:2007/10/22(月) 19:09:10
ならTangoはPhobosを利用しないといけないな!
つーかなんでTangoはPhobosと共存できないのwww意味不明wwwwww
317デフォルトの名無しさん:2007/10/22(月) 19:11:50
Phobosは廃止でいいよwwwwwwww
318デフォルトの名無しさん:2007/10/22(月) 19:41:58
そこでTangobosが登場する??

Phongoとか、ネーミングはもうちょっとなんとかならんかったのか。
319デフォルトの名無しさん:2007/10/22(月) 19:51:41
Tacos
320デフォルトの名無しさん:2007/10/22(月) 20:02:40
>>319
それ良さそう。
321デフォルトの名無しさん:2007/10/22(月) 20:19:52
>>304
俺も使ってないけど使えると思う。
というのはともかくとして、C++はlexical_castが無いと面倒な場面があるのだが、
Dではstd.conv.toを使わなくても結構いけるのでそのへんが良い。
322デフォルトの名無しさん:2007/10/22(月) 20:21:13
>>319
cはどっから来たんだよw
323デフォルトの名無しさん:2007/10/22(月) 20:22:33
無理に2つのライブラリ名入れることも無くない?
324デフォルトの名無しさん:2007/10/22(月) 21:01:04
PThaonbgoos
325デフォルトの名無しさん:2007/10/22(月) 21:02:42
よめなす。ふぁんぐーす(bはサイレント)?
326デフォルトの名無しさん:2007/10/22(月) 21:09:56
たんごぼす
327デフォルトの名無しさん:2007/10/22(月) 21:24:47
こんどこそでいもすで
328デフォルトの名無しさん:2007/10/22(月) 22:06:25
Daimos(デイモス)はもうすでにあるし、Harmonia(ハルモニア)でよくね?
ギリシャ神話でアレス(Ares)の娘…ポボス(Phobos)とデイモス(Daimos)の妹?
ハーモニー(調和)の語源。とってつけたような設定じゃないか。
329デフォルトの名無しさん:2007/10/22(月) 22:07:57
すまん、スペルミス。
×Daimos
○Deimos
330デフォルトの名無しさん:2007/10/22(月) 22:12:21
ハルモニアっていうとロマサガ思い出す・・・
331デフォルトの名無しさん:2007/10/22(月) 22:25:30
ちなみに
Harmonia http://harmonia.terrainformatica.com/doku.php
Ares http://www.dsource.org/projects/ares/ もすでにあるが
332デフォルトの名無しさん:2007/10/22(月) 22:27:36
>>328
それいいけど名前資源の無駄遣いはそろそろ控えるべきだと思ったw
やるならマジでやって欲しい・・・
333デフォルトの名無しさん:2007/10/22(月) 22:28:16
あるのかよ
だから無駄遣いはダメだと(ry
334デフォルトの名無しさん:2007/10/22(月) 23:23:03
あったのか
ライブラリの名前資源の干渉は防げないもんなぁ
335デフォルトの名無しさん:2007/10/22(月) 23:31:29
じゃあ、
com.digitalmars.phobosとかするか?w
336デフォルトの名無しさん:2007/10/22(月) 23:34:07
そんなことされたら勝手に名前変えるぞゴルア
337デフォルトの名無しさん:2007/10/23(火) 00:38:02
もう日本語にしちゃおうぜ
338デフォルトの名無しさん:2007/10/23(火) 00:41:43
しかもひらがなな
339デフォルトの名無しさん:2007/10/23(火) 00:44:24
日本人である私たちがコードやコメントやパッケージ名に日本語を使わないのはおかしい!
って言ってみるテスト
340デフォルトの名無しさん:2007/10/23(火) 00:45:24
import 標準.標準入出力;
void main() {
 writefln("ほげほげ");
}
// こんなの嫌だぞ俺w
341デフォルトの名無しさん:2007/10/23(火) 00:47:01
でも
import std.stdio;
よりは意味が取れる罠w
表意文字万歳
342デフォルトの名無しさん:2007/10/23(火) 00:53:23
ヒント: タイプ数
343デフォルトの名無しさん:2007/10/23(火) 00:55:16
じゃあひらがなかカタカナでいこう
344デフォルトの名無しさん:2007/10/23(火) 00:57:55
ヒント: 文字幅
345デフォルトの名無しさん:2007/10/23(火) 01:15:21
輸入 標準.標準入出力;
無 主() {
 整形書出改行("ほげほげ");
}

こんな中国産言語ならありそうだな
346デフォルトの名無しさん:2007/10/23(火) 01:18:50
そしてブロックはPython風にインデントでやれば{}も消える!!
347デフォルトの名無しさん:2007/10/23(火) 01:26:22
>>344
半カナはどうだ? タイプはかな入力で。

ドウニュウ キカク.キカクニュウシュツ;
ナシ メイン(){
  ギョウカキ("ホゲホゲ");
}
348デフォルトの名無しさん:2007/10/23(火) 01:36:31
話を広げておいて申し訳ないのだがものすごい既視感がwww
前に似たような話してたお
349デフォルトの名無しさん:2007/10/23(火) 01:36:58
>>347
かな入力なんてできる人はかなりレアだぞ…
俺にはつらいw
350デフォルトの名無しさん:2007/10/23(火) 01:39:11
Phobos上でTangoが動作しつつ、キモイ名前をどうにかしてくれたらTangoはかなり使いやすいライブラリだと思うんだ。
って話だったっけ?
351デフォルトの名無しさん:2007/10/23(火) 01:53:33
まったくそのとおりである
352デフォルトの名無しさん:2007/10/23(火) 02:12:57
std::cout << "hoge" << std::endl; の悪習を引きずるかのような
Cout("hoge").newline; に代表される
気持ち悪いインタフェースがなくなればってのも加えておいてくれ
353デフォルトの名無しさん:2007/10/23(火) 02:57:09
そもそも
std::cout << "hoge" << std::endl;
の良かったところはグローバルな演算子オーバーロードで簡単に拡張が加えられるところだったと思うんだ。
std::ostream& operator<<(std::ostream& strm, const Hoge& fuga);
逆にいえばこれが使えなければ意味がないわけで…
Cout("hoge").newline;
とかは何を意図してこんなことをしようと思ったのか…

まぁ、可変個数引数だと問題はあるけど。
String s;
Cout(s.append("aa"), s.append("bb"), s.append("cc"))).newline;
これだと
aabbccとなるかccbbaaとなるかわからん。
354デフォルトの名無しさん:2007/10/23(火) 03:00:35
ここではおまいらが好き勝手言ってるだけだけど、
何か良くて何が悪いのかが評価できるなら素晴らしいライブラリを作ることもできそうなのになw
Phobosのobject.dをいじらず、The D Style準拠で
Cout周りのインタフェースをほげほげした(どうすんだこれ)
そんなTangoに改造したらいいってわけか
355デフォルトの名無しさん:2007/10/23(火) 03:01:20
2か所訂正…orz
auto s = new String; で aaaabbaabbccとなるかccccbbccbbaaとなるか…か。
356デフォルトの名無しさん:2007/10/23(火) 03:03:07
>>353
待て待てその最後みたいなのはC++でもやっちゃいけないことになってるんじゃなかったか
それを問題視する必要はないことしようぜ
357デフォルトの名無しさん:2007/10/23(火) 03:04:05
>>353
>演算子オーバーロード
ヒント: toString
358357:2007/10/23(火) 03:05:52
あ、でもtoStringよりもストリーム演算子の方が効率的だわな。
359デフォルトの名無しさん:2007/10/23(火) 03:08:47
>>353
>opCall_rまだー?
まで読んだ。
360デフォルトの名無しさん:2007/10/23(火) 03:10:52
("hogahage")Cout;

こうですか><
361デフォルトの名無しさん:2007/10/23(火) 03:11:59
俺もそうおもたw
けどおかしいだろw
362デフォルトの名無しさん:2007/10/23(火) 03:34:05
(Cout "hogahage");

じゃあこうですか><
363デフォルトの名無しさん:2007/10/23(火) 10:42:06
そして半角ひらがなの復活
364デフォルトの名無しさん:2007/10/23(火) 17:17:25
暇だから上げてみます。
自分用に作ったフレームワークです。

libwindowはライブラリでそっちをなるべくいじらない方向で設計されてます。
WorksMainはライブラリの実装で関数をガリガリ書くことでその目的を遂げます。
このライブラリはウインドウズ専用です。

http://www9.uploader.jp/dl/sukiyaki/sukiyaki_uljp00003.zip.html
365デフォルトの名無しさん:2007/10/23(火) 17:37:53
>>363
ちょ!それスレ違い。
いや、俺もそのスレみてるからわかるんだが。
366デフォルトの名無しさん:2007/10/23(火) 18:49:23
>>364
方向性にはげあがるほど同意
lowerCamelはいかが?(参照>>308
367デフォルトの名無しさん:2007/10/23(火) 19:55:18
>>365-366
じゃああえて・・・DFLでよくね?
368デフォルトの名無しさん:2007/10/23(火) 20:20:35
>>362
それなんてLisp?
369デフォルトの名無しさん:2007/10/23(火) 21:07:29
>>366
関数名はキャピタライズを採用して欲しかった俺がいる。

Time now = Now;

とかやりたかったのに・・
370デフォルトの名無しさん:2007/10/23(火) 21:42:58
これで諦めてください><;
Time now = Time.now();
371364:2007/10/23(火) 23:33:54
http://www9.uploader.jp/home/sukiyaki/
ここのアップローダはD関係なら自由に使ってください。合計200MBまで入りますから。
っていうか、人のライブラリがどうなってるか気になる!!!
そうそう、あとで後悔した時用に削除Passを忘れずに。

で!レスサンクス!!

>>366
こういう先頭大文字とかって名前あったんですね。。。
C++辺りからの癖になってるんですけど、次は小文字も検討してみます。

>>367
それ言われるとちょっと弱い。笑
Hにも・・・を見るとTangoだとかvar1系だとかそういうのが良くわからないので使ってないんですけど、
将来的な移植性を考えるとやっぱ習得したいですねぇ。。。
372デフォルトの名無しさん:2007/10/23(火) 23:57:44
「ひとこぶらくだはひとこぶうんち ふたこぶらくだはふたこぶうんち これはうそ!」

lower/upper camel という字面を見てたら思い出した子供時代のはかない記憶。
373デフォルトの名無しさん:2007/10/24(水) 12:20:43
Overload setっていうのでtoStringがかぶらなくなるのかと思ったら
import std.string;
class Foo {
void bar(char* ptr) {
string s = toString(ptr); // std.string.toString(char*)呼んで欲しい
// けどObjcet.toStringにマッチしないのでエラー
}
}
ダメなのか。まあstd.conv.toができたからいいけど
374デフォルトの名無しさん:2007/10/24(水) 13:14:32
string s = .toString(ptr);
って書けばいいから、できなくても別に不便ではないな
375デフォルトの名無しさん:2007/10/24(水) 13:29:20
ExceptionとErrorの使い分けがわかりません><
おしえてくだしあ><
376デフォルトの名無しさん:2007/10/24(水) 13:31:57
class Exception;
回復可能な例外は全て Exception クラスから派生すべきです

class Error: object.Exception;
回復不可能な例外は Error クラスから派生すべきです
377デフォルトの名無しさん:2007/10/24(水) 13:33:33
回復が可能かそうでないかの区別がつきません><><><
378デフォルトの名無しさん:2007/10/24(水) 14:57:06
例外が回復可能かどうかなんて設計段階で判断できるような。
設計で判断できなくても経験積めばここは復帰無理だなっていうのが直感で分かるように。
379デフォルトの名無しさん:2007/10/24(水) 15:35:55
どの範囲で復帰不能か可能か、って話もあるしな
380デフォルトの名無しさん:2007/10/24(水) 15:38:23
なにがどうなると回復不可能になるの?
381デフォルトの名無しさん:2007/10/24(水) 15:46:00
回復が不可能になるとだな
382デフォルトの名無しさん:2007/10/24(水) 15:58:04
場合によりけりでしょ。
タイムアウトなんかで期待される結果が帰ってこなかった場合に、
初期値等のテキトーな値代入して問題なく処理続行できるなら例外、
出来ないならエラーって言う感じでいいんでは。
383デフォルトの名無しさん:2007/10/24(水) 16:29:31
回復不可能だって分かった時点でErrorの子クラスでExceptionをラップして投げなおせばいい。
384デフォルトの名無しさん:2007/10/24(水) 16:31:01
にゃる そういう意味なのか
システムがぬっ壊れたりするのかとおもた
385デフォルトの名無しさん:2007/10/24(水) 18:59:27
俺が分類したケース

回復不能
・root/admin権限が必要なのになかった

回復可能
・ファイルが見つからなかったが、指定しなおせばよい

>>384
最終的にはシステムがぬっ壊れない限りは回復の手段を用意することはできるかと思う
386デフォルトの名無しさん:2007/10/24(水) 19:01:42
処理続行できるような想定範囲内のエラーで例外投げるな。例外は例外的な事態に使用すべき。
……みたいなの(やや極端な言い方だけども)を信じてたんで微妙に慣れない。
多分戻り値でエラー処理みたいな文化が嫌なんだろうけど、効率なんかも考えると回復可能なエラーまで例外ってどうなの? って気がしてしまう。
上みたいな(勝手な)文化を持ってたせいかExceptionに回復可能な、みたいなニュアンスも感じないし。

実際のところDでなんか書いてるときにみんなErrorとException使い分けてるの?
387デフォルトの名無しさん:2007/10/24(水) 19:10:19
俺の考えでは、プログラムの動作自体が危うい場合がError。
それ以外は全部Exception。

たとえば、ファイルをコピーするプログラム、copyを作るときに、
パラメータで指定されたファイルが見つからない場合は、Exception。
388デフォルトの名無しさん:2007/10/24(水) 19:14:12
基本的にException。
拾いたければ拾えばいいじゃん(たいていは回復可能だから)
というスタンス。

行列演算で要素数が不適切なときもException(動的に要素数を決められる場合)。

ただし契約違反は実装者が間違ってるからassertするときはErrorが多い。
389デフォルトの名無しさん:2007/10/24(水) 19:18:20
>>386
引数、返り値が適切なほうがいいというのはあるかもしれない。
計画の中にpureという仕様が入ってるが、
ああいうのをまじめにやるならエラー処理のために引数や返り値がつぶされるのは好ましくない。
390デフォルトの名無しさん:2007/10/24(水) 19:21:41
>>386
> 処理続行できるような想定範囲内のエラーで例外投げるな。例外は例外的な事態に使用すべき。

これは誰の教えなのかkwsk
391デフォルトの名無しさん:2007/10/24(水) 20:44:55
人生のExceptionが発生しました
392デフォルトの名無しさん:2007/10/24(水) 20:58:52
>>391
回復可能なのか、よかったな
393デフォルトの名無しさん:2007/10/24(水) 21:06:09
回復には神権限が必要です
394デフォルトの名無しさん:2007/10/24(水) 21:15:29
引きこもりでごめんなさい→Exception
生まれてきてごめんなさい→Error

ってことか
395デフォルトの名無しさん:2007/10/24(水) 21:33:52
お願い届いて!!私のException!!!

引きこもりでごめんなさい。
396デフォルトの名無しさん:2007/10/24(水) 21:49:23
そろそろ人生のErrorが発生しそうで不安になってきた。
397デフォルトの名無しさん:2007/10/24(水) 22:31:15
Javaみたく「こいつはこーいう例外投げるかもしれんからちゃんと対処しろよ!」ってコンパイラに言われないしなぁ。
意識してErrorを自前で投げたことはないや。
assert違反とか、デバッグモードで埋め込まれる配列境界チェックなんかはErrorか? そんくらい。

あれ? ErrorてExceptionの派生クラスだったのか?
つまり「Error is a Exception」「回復不可能は回復可能の一種」 ・・あれ?

おかしくないですかカテジナさん!
398デフォルトの名無しさん:2007/10/24(水) 22:31:22
ファイル読み込みルーチンで、開くべきファイルがロックされてたり
ファイルがなかったりしたら、再試行とか考えてException、
そもそもファイルシステムや開くファイルの種類が非対応だったりして
なにをどうしようがファイル読み込みは無理、ってなのはError、とか。

ただ、それらを受け取るルーチンでは、たとえば別の読み込みルーチンを
使うとかで、(より大きな枠組みから考えると)復帰可能だったりするかもしれない。

という感じで、回復可能か否かが処理の段階によって変わることに注意して組むと
Errorの使い出もあるんじゃなかろうか。
399デフォルトの名無しさん:2007/10/24(水) 22:53:29
Errorがでたのに何事もなくプログラムが動作し続けるってのは、ちょっとおかしいと思う。
それだと正常系に復帰してるじゃん、と。

OutOfMemoryぐらい致命的でないとErrorというのとはちょっと違うと思う。
400デフォルトの名無しさん:2007/10/24(水) 23:08:48
>>399
回復不可能は回復可能がグレードアップ!
という考えで
401デフォルトの名無しさん:2007/10/24(水) 23:11:16
つまり、ErrorをExceptionで捕えることができるのはおかしい、と。
Exceptionを派生したErrorってのがおかしいんだよな。
Errorを派生したExceptionとか、ErrorとExceptionはそれぞれ何からも派生してないってのがいいような気がするね。
Tangoみたいに安易に消しちゃうのはどうかとも思うが。
402デフォルトの名無しさん:2007/10/24(水) 23:38:26
>>399
頑張ってメモリ解放して状況解消する頑健なプログラムだってありうるべ
メモリ食いつぶしかねないプログラムなら特に。

どんなエラーも何らかの処理がなされる、というのがDの例外機構なわけで、
399的な「絶対に正常系に復帰しない」発想だと、例外もクソもなく強制終了
するしかない状況じゃないとErrorを出さない、という意味のない話になるべ

何が正常動作かは処理の段階によって変わるんじゃね
403デフォルトの名無しさん:2007/10/24(水) 23:40:29
その処理の段階ってちゃんと定義されてるのかな?

今のままだとExceptionとErrorがごっちゃになりそうな悪寒
404デフォルトの名無しさん:2007/10/25(木) 00:23:53
むしろError使ったことないし
必要な場面に出くわしたことがないし
これからも使わない気がしている
405デフォルトの名無しさん:2007/10/25(木) 00:27:56
そういうのを定義するのが設計だべ

まあそんなまじめなプログラム俺も書いたことないけど
406デフォルトの名無しさん:2007/10/25(木) 07:11:32
2.006にしてみたらinvariant string関係の変更がtonほど出てきた
407デフォルトの名無しさん:2007/10/25(木) 07:59:27
invariantのおかげでWin32API使うとき今まで以上にキャスト式書く機会が増えた。それ以外で特に気になるところはなし。
今は2.006でphobosが強化されたという話を聞いてわくわくしてるところ。
408デフォルトの名無しさん:2007/10/25(木) 08:24:16
invariant stringとstd.stringの変更を解決してたら、設計の理由がなるほどと……
無駄なコピーを抑えたいという発想をどう実現するかがなんか分かってきた。

variant世界とinvariant世界が分かれてる感じで、
両者の窓口がcast(invariant)やidup、dupといった風情。

in char[]を受け取ってchar[]を返す関数の内部でstd.string関数を使う場合、
入り口でcast invariantして出口でdupすればおk、みたいな。
ただしこの方法だとスレッドセーフには気をつけないとならんので注意かも。
409デフォルトの名無しさん:2007/10/25(木) 08:55:20
めぐりめぐって
invariantがなくなって、Cと同じになったりしてな・・・
410デフォルトの名無しさん:2007/10/25(木) 09:41:42
散々こねくり回して出た結論がそれならば、それもまたよし。
411デフォルトの名無しさん:2007/10/25(木) 09:58:43
idupの個人的まとめ
・idupは本当にコピーを生成する
・idupしたコピーはGCに回収される

idupされた文字列を参照するようなstring(std.string中の関数の返り値など)をいつまでも受け渡し続けると、
いつまでたっても回収されずに残り続けることになるかもしれない。
巨大な文字列から1行だけ取り出すとかした場合はidupして、
巨大なやつをGCに回収してもらいやすくするのは考えられる。

idupは比較的気軽に使えるかなと思う。
長期的に生存する可能性があるプログラムについては知らね
412デフォルトの名無しさん:2007/10/25(木) 10:25:51
ArrayBoundsErrorは回復不可能なんですか?
413デフォルトの名無しさん:2007/10/25(木) 10:30:57
配列の範囲外に対する不正なアクセスだからエラーなんでは?
そもそもDは配列のサイズがあらかじめ調べられるので、範囲外に対するアクセスは事前に防げるはず。
414デフォルトの名無しさん:2007/10/25(木) 10:48:59
ほんとによく設計されたソフトウェアなら、モジュールがAssertErrorなんか投げてきても
catchして「このモジュールはバグってんな」って切り離て、
さらにそのモジュールに依存する別のモジュールにも通知したりして、
本当にコアなモジュールが生きてる限りは動きつづける、とか作りこむんだろーな。
apacheとかそんな感じになってるのか。Dじゃないけど。

気楽なDの個人アプリじゃそこまでやらんで、
void main(){
 try{
  myMain();
 }catch(Exception e){
  outputErrorMessage("ごめんちゃいバグで強制終了します。以下をコピペして送ってくれるとお互い幸せに。", e);
 }
}
とかでいいよね? 後は明らかに発生しそうなException(new File(stdin.readLine())とか)くらいは
その場でcatchすんの忘れないように気を付けなきゃ、で。

「catchすんの忘れてねぇか? いいのか?」とコンパイラに言ってもらえればなぁ、とも思うけど、
そうなるとErrorとExceptionの違いが問題になってくる感じ。
415デフォルトの名無しさん:2007/10/25(木) 10:55:20
もしかして関数呼び出すたびにtry-catch書くのが普通なのか
416デフォルトの名無しさん:2007/10/25(木) 12:12:43
default: を書き忘れて例外出されたときはかなりビビッた。
何でswitchが例外投げるの!?って。
417デフォルトの名無しさん:2007/10/25(木) 12:14:23
>>415
俺は!の話だけどさ、基本的に例外投げないな。だから、ほとんどtry構文使わない。
418デフォルトの名無しさん:2007/10/25(木) 12:54:01
D言語で作られたアプリで参考になるのねーの?
419デフォルトの名無しさん:2007/10/25(木) 13:10:04
>>415
それは普通、ではなく理想
420デフォルトの名無しさん:2007/10/25(木) 13:45:58
回復可能なもので例外投げるのは速度が・・・
421デフォルトの名無しさん:2007/10/25(木) 13:52:39
通常の実行ロジック部分のパフォーマンスが重要
例外時に速度重視?
422デフォルトの名無しさん:2007/10/25(木) 14:13:54
ああ、なるほど。勘違いしてた
423デフォルトの名無しさん:2007/10/25(木) 15:10:24
>>419
Cで関数呼び出しごとにエラーコードをチェックしてエラーコード返して・・・ってやるよりも
遥かにぐちゃぐちゃなコードが出来上がるだけな気がするのだけど。
それを無くして「正常な実行パス」だけを簡潔に書くための構造化例外やん?
424デフォルトの名無しさん:2007/10/25(木) 16:07:23
>>423
分かっててもときどき変なことやっちゃうんだよね
特にC++とかJavaでね

try〜catchはmainだけで充分なのかも知れない
425デフォルトの名無しさん:2007/10/25(木) 16:35:20
>>423
すべての例外はどこかの階層で拾って、プログラムが適切に復旧するようにするのが理想。
別に、一関数ごとにtryで囲む必要はない。
426デフォルトの名無しさん:2007/10/25(木) 18:13:59
in, body, outをはじめて使ってみたお^^
しかしenum/invariant structのような型で制限してしたほうが書くのは面倒だけど使えるお-_-;
427デフォルトの名無しさん:2007/10/25(木) 20:35:06
>>426
でもoutとかで「戻り値にnullは絶対返さないよ!」とかassertしてあると使うのもコード読むのも安心するお^^
でも型だけで事足りるならちゃんと型設計してるってことだし偉いお^^
428デフォルトの名無しさん:2007/10/25(木) 20:59:06
in/out/bodyってコード読むとき邪魔っぽくない?
429デフォルトの名無しさん:2007/10/25(木) 21:05:16
ちょっとインデントに悩んだことはあった
430デフォルトの名無しさん:2007/10/25(木) 21:23:49
void hoge() in { assert(文); } body
{
// 処理
}
みたいに書いたり・・・?
in と out を関数内部に書きたかったりする・・・

void hoge()
{
in{ assert(文); }
out{ assert(文); }
}

あ、でもこれなら普通の scope 文でいいのか・・・?
431デフォルトの名無しさん:2007/10/25(木) 21:34:33
公式の書き方は
ttp://www.digitalmars.com/d/dbc.html
中括弧を改行しないでくっつける派の俺としてはちょっと冗長に見える。
けどまあこれくらい改行するのもぱっと見わかりやすいのかな。
432デフォルトの名無しさん:2007/10/25(木) 22:58:35
中かっこを開業しないでくっつける派の俺としても悩んだけど
void func()
in{
  assert(...);
}
out{
  assert(...)
}
body{
  ...
}
って感じにして妥協してみてる…
この辺もコーディング規則で一応の指標があるといいのだけど…(宗教戦争勃発しそうな気もするけど)
433431:2007/10/25(木) 23:12:09
>>432
偉いなw
俺なんか

void func() in {
} out {
} body {
}

さえ正直捨てきれない。
434デフォルトの名無しさん:2007/10/25(木) 23:18:23
自分はオールマンスタイルが気に入ってる
435430:2007/10/25(木) 23:41:01
自分もオールマンスタイル派なんだけど、公式の書き方は見難いと
感じてしまう。慣れの問題なのかもだけど。
436デフォルトの名無しさん:2007/10/26(金) 01:14:24
if (test) {
...
}
else {
...
}
これってやめたほうがいいのかな
437デフォルトの名無しさん:2007/10/26(金) 01:33:44
begin
rescue
ensure
end
438デフォルトの名無しさん:2007/10/26(金) 01:42:40
オライリーのPL/SQL本だかどっかで
void func(){
  hoge();
}
こうあるべきだと力説されて妙に同意してしまって以来、
どうしてもfunc()と"{"が同じ行にいられないと落ち着かなくて困る。
>>430は俺にとっても抗えぬ誘惑だ・・・

太古より語り継がれる伝説の「IDE」がいつか完成して普及すれば、
inとoutは普段は折り畳まれて「contractあるよー」的マークに収まり、
そこにマウスオーバーするとin/outのコードがポップアップで表示され・・・とか実装されるに違いない。
時を待つのじゃ・・・さすれば泣く日は来ぬ・・・
439デフォルトの名無しさん:2007/10/26(金) 02:13:15
イデ・・・オン・・・
440デフォルトの名無しさん:2007/10/26(金) 09:13:09
定数を引数とする三角関数のコンパイル時計算をオフにしたいときがあるわけだが、どうしたもんかな
ちょいと考えてみる
441デフォルトの名無しさん:2007/10/26(金) 10:12:13
>440
なにゆえ?
442デフォルトの名無しさん:2007/10/26(金) 12:07:22
>>436
俺もそのスタイルで書いてるよ。
ifブロックとelseブロックがきれいに分離してるのが気持ちいいよね。
443デフォルトの名無しさん:2007/10/26(金) 15:26:54
>>441
コンパイル時に決定できるループでsinが山ほどあったときにコンパイルが遅くなっていたんですが、今見たら大丈夫になっていました。
勘違いかもしれませんが、再発して条件が再現できそうならまた報告します。
444デフォルトの名無しさん:2007/10/26(金) 17:38:52
>>372
camelがどうのという話題で俺はこれを思い出す。
http://images.google.co.jp/images?hl=ja&lr=&oe=UTF-8&um=1&q=camel%20toe&ie=UTF-8&sa=N
445デフォルトの名無しさん:2007/10/26(金) 17:44:36
グロ注意
446デフォルトの名無しさん:2007/10/26(金) 19:33:15
>>442
IDEでコメントつける場合にずれるのが困りもの

   // ほげほげが見付からなかった場合はエラー
else {
   put_error_log("hogehoge not found.");
}
447デフォルトの名無しさん:2007/10/26(金) 23:04:44
>>442
ですよね!
つーかこの書き方どこで覚えたか忘れたんだけど。

あと、コメント書くとき
if (test) { // ほげほげなら
...
}
ってなってるけどこれもやめたほうがいいかなwww
関数書くときは
/// ほげほげする
void func() {
...
}
こうなるからびみょうに統一されてなくね??とか思ってしまう
448デフォルトの名無しさん:2007/10/26(金) 23:29:12
キミの好きにしたらええ
449デフォルトの名無しさん:2007/10/26(金) 23:31:14
そこらへんのコーディング規則とか字下げスタイルなんかをk.inabaタンに定義してほしいw
450442:2007/10/26(金) 23:42:52
ifのコメントは
//ほげほげ
if (test) {
...
}
//はげはげ
else if(test2){
...
}
//その他
else{
...
}
ってしてる。

関数は
///ほげほげする
void func() {
...
}
451デフォルトの名無しさん:2007/10/26(金) 23:59:19
コメントは書かない
452デフォルトの名無しさん:2007/10/27(土) 00:18:16
>>451
ちょwww
453デフォルトの名無しさん:2007/10/27(土) 00:18:53
ソースがドキュメント
454デフォルトの名無しさん:2007/10/27(土) 00:23:05
俺は、関数の説明は書くけど、if文にはコメントつけないな。
大抵は条件式見れば何してるか分かるし、
ぱっとみて何を比較してるかわからないほど複雑になったら関数化する。

仕事なら仕方ないから規則通りにどんな馬鹿らしいコメントでも書くけど。
455デフォルトの名無しさん:2007/10/27(土) 00:25:00
極力コメントつけない方向で行ってみようと思う
456デフォルトの名無しさん:2007/10/27(土) 00:28:41
D2.006
フィールドのプロパティ.offsetofが
class Foo
{
int x;
}
...
void test(Foo foo)
{
size_t o;

o = Foo.x.offsetof; //error
o = foo.x.offsetof; //ok
}
になってるけど、これって仕様が変わったの?
457デフォルトの名無しさん:2007/10/27(土) 00:30:50
458デフォルトの名無しさん:2007/10/27(土) 00:33:26
>>457
バグっぽいのか。さんくす。
459デフォルトの名無しさん:2007/10/27(土) 00:34:20
いつものことだが誰か報告したのか?
460デフォルトの名無しさん:2007/10/27(土) 01:00:53
最近D言語ってのを知ったんだが
今のとこ、これ!っていうIDEはないのかな?
Poseidon?C::B?Descent?
461デフォルトの名無しさん:2007/10/27(土) 01:22:29
伝説のIDEはDが完成されたときに現れます
462デフォルトの名無しさん:2007/10/27(土) 01:51:47
今度からその台詞使おう・・・
463デフォルトの名無しさん:2007/10/27(土) 01:56:25
Dの言語仕様は永遠にβ版です!
464デフォルトの名無しさん:2007/10/27(土) 02:02:54
ウォルタンが開発やめるまでは永遠に進化し続けるよ!

んでウォルタンが開発やめた後D言語の亜系が乱立することに…
そして時代はbsDとreDhat系の戦いへ…
465デフォルトの名無しさん:2007/10/27(土) 02:40:12
D2.006 でコンパイルして
http://cmeerw.org/prog/owtools/
↑のwlinkでリンクすると以下のコードが
Error: Access Violation
で止まっちゃうんだけど、どして?

void main()
{
for(int i=0 ; i<5000 ; i++)
{
int[] x = new int[100];
}
}

ちなみに、変数 x を毎回deleteしてやるといける。
466デフォルトの名無しさん:2007/10/27(土) 02:40:17
ソースファイルごとにDのバージョンの印つけといて、そのバージョンから任意のバージョンへの変換を行うものってあったらよさそうだな!
バージョンの印付いてるの前提だけど!
467176:2007/10/27(土) 10:10:33
>>459
バグジラで検索したら2007年1月だったか2月に既にあがってたバグでした。
もう直す気無いと思われるw
468デフォルトの名無しさん:2007/10/27(土) 12:54:43
>>467
そこのバグの修正は半年から一年後に
行われることがざらだそうです
469デフォルトの名無しさん:2007/10/27(土) 16:07:33
>>465
それも前スレか前々スレかで見たな
470デフォルトの名無しさん:2007/10/27(土) 19:09:31
>>461
IDEが発動するとき第6言語(D)は滅びるということか
471デフォルトの名無しさん:2007/10/27(土) 21:35:16
C++0xスレでperlのQuantum::Superpositionsみたいなのの実装を見つけて
Dでも作ってみようかと思ったんだが、!= と == の区別ができない…
472465:2007/10/28(日) 00:30:36
>>469
まじすか?
その時は、だいたいどんな結論に落ちついたんすか?
や、Viewerないもんで。。。ごめんねーいろんな人。
473デフォルトの名無しさん:2007/10/28(日) 01:04:06
>>471
テラ量子力学wwwwwwwww

と思ったらマジでそういうライブラリなのか・・・
量子コンピュータの広がりの影響なのかな・・・
474デフォルトの名無しさん:2007/10/29(月) 13:24:46
バージョンうpまだー?
475デフォルトの名無しさん:2007/10/29(月) 21:46:53
Eclipse3.2.1ダウソしてDescentパッケ入れても全然反映されねーや…
なんでだろ
476デフォルトの名無しさん:2007/10/29(月) 21:49:53
dsssを使ってflectionedをインストールしてimportしたら、
コンパイルエラーが発生して、以下のようなメッセージが出力されました。

flectioned.d(104): module Vararg cannot read file 'tango\core\Vararg.d'

環境は、Windows / Cygwin / dmd.exe 1.022 + phobos で、
tangoはインストールしてないのに、
tango以下のファイルをimportしようとしてるみたいです。
static ifがtrueでもfalseでも両方のブロックの文法解析が行われてるのかな?

とりあえず、flectioned.dの104〜131行と247行を
コメントアウトしたらコンパイルできました。
あんまりうまい解決方法だと思えないので、
何か他にいい方法がないでしょうか?
477デフォルトの名無しさん:2007/10/29(月) 22:09:13
Cygwin は使ってないけど、Windows + dmd1.022 + phobos で普通に動いてるけどねぇ。
Cygwin か dsss が何か悪さしてんじゃない?
478デフォルトの名無しさん:2007/10/29(月) 22:30:45
>>477
あ。たぶんdsssのような気がしてきました。

おそらくdsssは、
import文を見てコンパイルするファイルを特定していってるんだけど、
そのときにstatic ifをうまく解析できてないのかもしれません。

[わなD]に
「DSSSは、static ifで条件importしている依存関係の解析が
 甘くて時々不便だったりするので…」
という記述があったので、これのことなのかも。
479デフォルトの名無しさん:2007/10/29(月) 22:41:27
Derelict は dmd 2.0 だとビルドできないのか?
480デフォルトの名無しさん:2007/10/29(月) 22:52:37
>>479
dsss net install derelictsdl

コンパイラをdmd 2.006にして上記のコマンドを実行したら、
たしかにコンパイルエラーが出ました。

include\d\derelict\util\loader.di(223):
Error: cannot implicitly convert expression ("") of type invariant char[0u] to char[]

たぶん文字列をキャストすりゃいいんだろうけど、
全部キャストするのはヤだなー。

http://www.dsource.org/forums/viewtopic.php?t=2903&sid=c9657f55c4f87d635f986ebfc3bb79bf

検索してみたら上記のリンク先でそれっぽい話題が交わされているようですが、
私は英語が読めないのでよくわからんかったです。
481デフォルトの名無しさん:2007/10/29(月) 23:04:18
k.inabaさんがdsssはstatic if内でのimportの解析が甘い的なこと書いてた気がする
わなDかな
482デフォルトの名無しさん:2007/10/30(火) 00:45:01
dmd 2.0系での derelict のコンパイルとインストール、うまくいきました。

[わなD]D 2.x と D 1.x
http://www.kmonos.net/alang/wnd/topics/d2-d1.ja.html

上記のページを参考にして、char[]をstringに、
dupをidupに修正してコンパイルしたらうまいくいきました。
483デフォルトの名無しさん:2007/10/30(火) 01:43:53
おお
わなD更新されてるじゃまいか
どっかで更新されたかどうか告知あったりしないのかな
RSS配信とか
484デフォルトの名無しさん:2007/10/30(火) 02:19:27
class Foo{}

class Bar
{
 private const( Foo ) mFoo;

 const( Foo ) getFoo()
 {
  return mFoo;
 }

 void setFoo( const( Foo ) iFoo )
 {
  mFoo = iFoo;
 }
}

みたいなことをD言語2.xでしたいのですが、
Bar.setFoo()の中でコンパイルエラーが発生してしまいます。

たぶんメンバ変数Bar.mFooの定義方法がよくないと思うのですが、
どうするとよいでしょうか?
485デフォルトの名無しさん:2007/10/30(火) 03:05:51
どうするんだろ
うまくいかないや
こんなんになりました

class Foo{}

class Bar
{
 private const(Foo)* mFoo;
 const(Foo) getFoo()
 {
  return *mFoo;
 }
 void setFoo(const(Foo) iFoo)
 {
  mFoo = &iFoo;
 }
}

void main()
{
 auto bar = new Bar;
 bar.setFoo(new Foo);
 const(Foo) foo = bar.getFoo();
}
486デフォルトの名無しさん:2007/10/30(火) 03:42:21
const Foo mFoo; なら変数mFoo自体がconstだけど、
const(Foo) mFoo; なら変数mFoo自体は書き換え可能なはずだよね。
メンバ変数のときだけ動作が違う、ってんだからバグじゃね?
487デフォルトの名無しさん:2007/10/30(火) 04:30:53
俺もバグなんじゃないかと思う。
とりあえずaliasでごまかしてみるとうまくいくようです。

class Foo{}
class Bar
{
 alias const( Foo ) Foo_const;
 private Foo_const mFoo;
 Foo_const getFoo()
 {
  return mFoo;
 }
 void setFoo( Foo_const iFoo )
 {
  mFoo = iFoo;
 }
}
// 意味のないエイリアス
// この手のものは…どうなんですか、ウォルターたん…
488デフォルトの名無しさん:2007/10/30(火) 05:49:36
aliasした場合、今度はconst消えちゃってね?
489デフォルトの名無しさん:2007/10/30(火) 11:03:50
>>482
> 2007/10/30 :: RSSはじめました
ました
490デフォルトの名無しさん:2007/10/30(火) 11:04:56
間違えた>>483
491デフォルトの名無しさん:2007/10/30(火) 11:57:38
助かります
492デフォルトの名無しさん:2007/10/30(火) 14:25:54
わなDの"../表紙に戻る"って戻れないよね
493デフォルトの名無しさん:2007/10/30(火) 14:59:37
>>488
ほんとだ。constがきえてるっぽい。これもバグなのかな。
まぁconst/invariant周りのバグは多すぎて報告する気にもならんけど。
494デフォルトの名無しさん:2007/10/30(火) 16:06:32
v1からv2に乗り換えたら連想配列でキー引けないんだけど、なんか変わった?
495デフォルトの名無しさん:2007/10/30(火) 17:11:50
>>494
エスパーしてみると、文字列リテラルの型がinvariant(char)[]になった。
496デフォルトの名無しさん:2007/10/30(火) 17:58:36
int[char[]] foo = [ "hoge" : 1, "hage" : 2 ];
if(auto p = ("hoge" in foo))
writefln(*p);
else
writefln("ねーよ");
try {
writefln(foo["hage"]);
}
catch(ArrayBoundsError) {
writefln("ねーよ");
}
v2でどー書くの?
497デフォルトの名無しさん:2007/10/30(火) 18:13:36
// dmd 2.006
void main(){
int[string] foo = [ "hoge" : 1, "hage" : 2 ];
foreach(k; foo.keys)
writeln(k, foo[k]); // Error: ArrayBoundsError
}

おそらくバグだな
498デフォルトの名無しさん:2007/10/30(火) 18:16:44
void main(){
int[string] foo;
foo["hoge"] = 1; foo["hage"] = 2;
foreach(k; foo.keys)
writeln(k, foo[k]);
}

こうすればいけるな。
499デフォルトの名無しさん:2007/10/30(火) 21:23:48
>>484
>>486

クラスのメンバ変数にconstオブジェクトを持たせると挙動がおかしいのは、
下記のページにあるバグ報告と同じっぽいですね。
http://d.puremagic.com/issues/show_bug.cgi?id=1376
500デフォルトの名無しさん:2007/10/30(火) 23:06:21
分かっちゃいるけど直ってない、という話なのね
501デフォルトの名無しさん:2007/10/31(水) 03:07:11
D2不安すぎる
502デフォルトの名無しさん:2007/10/31(水) 10:19:11
D2.0で作成したソフトウェア納品してしまった件wwww
ソースじゃなく、バイナリだけだけど
503デフォルトの名無しさん:2007/10/31(水) 10:34:24
>>502
おぉおおぉおおそろしいことを…!
でもよくやった!
504デフォルトの名無しさん:2007/10/31(水) 11:22:19
Makefileで依存関係しらべてビルドするより、
dmd.exeでどかっとコンパイルしたほうが速いんだね・・

>>502
ちょwww
505デフォルトの名無しさん:2007/10/31(水) 13:49:37
>>501
Doctor2年でつか

>>502
どこの会社だよそれwwwww
せめて1.0にしろよwwwww
後で致命的なバグ見つかってもしらねーぞwwww
506デフォルトの名無しさん:2007/10/31(水) 14:05:32
>>502
国内初の実用事例キタコレwwwww
507デフォルトの名無しさん:2007/10/31(水) 14:22:55
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::。:::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::。::::::...... ...   --─-  :::::::::::::::::::: ..::::: . ..::::::::
:::::::::::::::::...... ....:::::::゜::::::::::..   (___ )(___ ) ::::。::::::::::::::::: ゜.::::::::::::
:. .:::::。:::........ . .::::::::::::::::: _ i/ = =ヽi :::::::::::::。::::::::::: . . . ..::::
:::: :::::::::.....:☆彡::::   //[||    」  ||]  ::::::::::゜:::::::::: ...:: :::::
 :::::::::::::::::: . . . ..: :::: / ヘ | |  ____,ヽ | | :::::::::::.... .... .. .::::::::::::::
::::::...゜ . .:::::::::  /ヽ ノ    ヽ__/  ....... . .::::::::::::........ ..::::
:.... .... .. .     く  /    _三502三∠⌒>:.... .... .. .:.... .... ..
:.... .... ..:.... .... ..... .... .. .:.... .... .. ..... .... .. ..... ............. .. . ........ ......
:.... . ∧∧   ∧∧  ∧∧   ∧∧ .... .... .. .:.... .... ..... .... .. .
... ..:(   )ゝ (   )ゝ(   )ゝ(   )ゝ無茶しやがって… ..........
....  i⌒ /   i⌒ /  i⌒ /   i⌒ / .. ..... ................... .. . ...
..   三  |   三  |   三  |   三 |  ... ............. ........... . .....
...  ∪ ∪   ∪ ∪   ∪ ∪  ∪ ∪ ............. ............. .. ........ ...
  三三  三三  三三   三三
 三三  三三  三三   三三
508502:2007/10/31(水) 17:40:02
反応が結構あったのにびびったw
リアルタイム映像系で、DとDirectX10と絡めた。
やっぱりネックはGCだけど、評判が悪いがscopeとかつかうとわりと回避できるよ。
それでもメモリ使用のグラフををみると
/|/|/|/|/|
こんな感じでノコギリみたいになる。
そこ以外はサクサク開発できた。
まぁなんだ、D言語最高
509デフォルトの名無しさん:2007/10/31(水) 18:05:54
>>502
ところで
ttp://hp.vector.co.jp/authors/VA031566/d_direct3d9/index.html
が古くなってるからDirectX10周りを公開してくれたら助かる人がいるんじゃないかな
仕事で書いたコードだから無理かなと思うのであんまり期待せずに言っておくw

納品して利益が発生するものに使う機会はまだないが
社内向けのなら俺もD使ってる
510デフォルトの名無しさん:2007/10/31(水) 18:51:09
D2とVistaって・・・
どんだけばk・・・いや、いい意味でなw乙w
511デフォルトの名無しさん:2007/10/31(水) 19:00:32
>>508
確かに集合型とか一時オブジェクトを扱うとC++よりDが圧倒的に楽なんだよなあ。
DX10を絡めたのは尊敬する。俺はやろうとして挫折してます。
512デフォルトの名無しさん:2007/10/31(水) 20:23:41
>>502
ノウハウうpしてくれると俺が鼻水100ccほど垂らしながらよろこびます
513デフォルトの名無しさん:2007/10/31(水) 20:26:52
俺も0xD2ccくらい垂らしながらよろこびます
514デフォルトの名無しさん:2007/10/31(水) 21:01:36
>>508
本当に勇者だなお前は
お前みたいな勇者のおかげで俺たち一般PGが最新技術に触れる日が早まる
515デフォルトの名無しさん:2007/10/31(水) 21:03:15
DirectX 捨てて OpenGL にいった自分も少しよろこびます。
516デフォルトの名無しさん:2007/10/31(水) 21:44:52
>>502==508の人気に嫉妬
517デフォルトの名無しさん:2007/10/31(水) 22:14:53
映像系で思い出したが、dSFMTをクラス化してインスタンスごとに独立した系列がいけるようにチョコチョコいじってるのだが、
SIMD部分をどうするかでかなり悩む
518デフォルトの名無しさん:2007/10/31(水) 22:19:27
finallyよりもscope(exit)のがつかいやすい
519デフォルトの名無しさん:2007/10/31(水) 23:12:07
しかしふとだいぶ前ーのスレで
「C++よりいい感じだぜー」って研究室でデータ計算だかに
使ってるって言う人も見たなぁ、という記憶が。
まぁ「納品」という言葉が出てくると俺ビビらずにはいられんけどw

ところで興味本位でメインマシンを64bitなubuntuにしてみたら
いろんな32bitライブラリがネーヨとリンカに言われ俺涙目。
dmdもamd64吐けるようにぷっりーずぅぅぅー。
520デフォルトの名無しさん:2007/10/31(水) 23:32:21
>>519
sudo apt-get install lib32gcc1
してリンカフラグ弄ればいいとおも
521502:2007/11/01(木) 07:05:47
DirectX10ヘッダーファイルをDにポーティングしていれば、一番みんなが使いやすいんだろうと思うんだけど
C++でまずDirectX10をラップしてそれをDで使用するようにしました。
DirectX10.1とかでるし、dxgi.h、d3d10.h、d3dx10.hがころころ変わると思ったので。
以下スレチにならない程度にさわりを・・・
/* C++ */
class Device {
public:
 _cptr<ID3D10Device> _cp; // _cpt<T>rはCOMをあつかうスマートポインタ
};
class Swapchain {
public:
 uint32 _width, _height;
 _cptr<IDXGISwapChain> _cp;
 int init( Device &dev, const DXGI_SWAP_CHAIN_DESC &ds);
};
class Buffer {
public:
 _cptr<ID3D10Buffer> _cp;
};
とこんな風にまんま包み込んで、
Dに以下の様な関数をエキスポート
Device * dx10g0_Device_new();
void dx10_Device_delete(Device *pthis);
int dx10_Device_init(Device *pthis, void *pdevicesettings);
int dx10_Device_DrawPrimitive(Device *pthis, uint type, uint n);
int dx10_Device_DrawIndexedPrimitive(Device *pthis, uint type, uint indexcount);
中の関数はDirectX10APIより少々便利めにつくるようにしてます。
こうすることのメリットは、上でいったヘッダーファイルがかわっても(少しは)大丈夫なこと、
DirectX9に同様のものをつくることで、D側からはDirectX10、DirectX9が同じように扱えること。
Shader4.0をつかってしまったら、意味がないかもだけど・・・
522デフォルトの名無しさん:2007/11/01(木) 13:14:21
>>520
情報有難う御座いまするー。
そうかー32bit系はそういうパッケージ名を与えられているのですね。
lib32gcc1は入ってました。中身の.soから、Winでいうインポートライブラリが生成できればいいんでしょか。
ともあれこれ以上は自力でごにょごにょとやってみます。
523デフォルトの名無しさん:2007/11/01(木) 19:10:15
>>521
なるほど。
俺は、汚いヘッダファイルからではなく、比較的綺麗なIDLからDにポーティングしようとして挫折。
.diを吐くIDLコンパイラ欲しい、、、
524デフォルトの名無しさん:2007/11/01(木) 19:26:30
「無いならば 作ってしまおう プログラマ」 詠み人知らず
525デフォルトの名無しさん:2007/11/01(木) 19:46:12
>>521
ありがとうございます。参考になります。
まあDから読みやすいようにするのがいい解ということですかねえ。
526デフォルトの名無しさん:2007/11/02(金) 01:22:34
win32のBitBltがどこにあるかわかりませんか?v1.015@Phobosです。
リンカのLibにはあるっぽいんですけど、
export BOOL BitBlt(HDC,int,int,int,int,HDC,int,int,DWORD);
しても認識しません。。。
527デフォルトの名無しさん:2007/11/02(金) 01:33:18
extern(Windows)
528デフォルトの名無しさん:2007/11/02(金) 01:35:31
すいません!出来ました。しょーもない質問で申し訳ない。
ありがと〜。
529デフォルトの名無しさん:2007/11/02(金) 02:36:37
win32.windows 使わないの?
530デフォルトの名無しさん:2007/11/02(金) 02:44:05
なるべく標準で済ませたかったんです。
はやく標準でとりこんでくれないかなぁ。。。
531デフォルトの名無しさん:2007/11/02(金) 03:58:22
意味無いけどあるある
532デフォルトの名無しさん:2007/11/02(金) 07:48:20
チラ裏!

今丁度はまってた事。
クラスを宣言してC++と同じ要領で使おうとしたら、宣言自体は参照のためにアクセス違反の例外が飛んだ。ってか飛びまくった。
つまり、newしてなかった。あ〜、何事かとおもったわ。(TT
533デフォルトの名無しさん:2007/11/02(金) 08:11:20
構造体・クラスをみわけるために
なんかプレフィックスつけてる?
534デフォルトの名無しさん:2007/11/02(金) 08:14:08
いや、そういう習慣は持ってないね。
それがさ、うっかりスタックに確保されるもんだと勘違いしてたんだ。
C++だと基本的に自分でメモリ確保しないようにやってたから。。。
535デフォルトの名無しさん:2007/11/02(金) 08:23:28
//C++
Class hoge;
//D
scope hoge = new Class;
536533:2007/11/02(金) 08:26:58
いや、べつに532にきいたわけじゃないんだ。
みんなはどうしてるかなと思って。

俺は構造体にはSをつけて、クラスにはなんもなし。
537デフォルトの名無しさん:2007/11/02(金) 08:30:01
ああ、結局newしないといけないんだなぁ。
なるほど、なるほど。

new恐怖症なもんでね。
だから、GC万歳ってかんじなんだけどね。
538デフォルトの名無しさん:2007/11/02(金) 08:36:49
乳は決して怖くない。勇気を持ってください。
539532:2007/11/02(金) 08:41:34
>>536
俺は特にプレフィックスはつけない。何にでも。
でも、命名規則は割りと変数の使用イメージにそってつけてるかなぁ。
まぁ、しばらくすると、わすれちゃうんだけどね。。。XP

>>538
勇者はD言語を手に入れた。LvUP!!new恐怖症が多少和らいだ。deleteを忘れた。




徹夜しちゃったからそろそろ寝るかなぁ。
今作ってるの、もうちょっとで完成するんだけどねぇ。あえて寝る!
そんじゃまた〜。
540デフォルトの名無しさん:2007/11/02(金) 08:44:07
そういえば`「わすれる」を覚える`って不思議な響きだよな・・・
541デフォルトの名無しさん:2007/11/02(金) 08:48:51
(a, b) = (c, d);みたいなのが
a = c;
b = d;
に変換されるようなやつってD言語にある?
542デフォルトの名無しさん:2007/11/02(金) 10:36:20
>>541
無くは無い。tuple。
543デフォルトの名無しさん:2007/11/02(金) 16:22:56
関数からタプル返せるようになるのまだー?
544デフォルトの名無しさん:2007/11/02(金) 16:34:29
それよりもタプルリテラル欲しい。
545デフォルトの名無しさん:2007/11/02(金) 18:09:21
質問です。
v1.015なんですけど、以下のコードが変なエラー吐いて止まっちゃうんです。
Error: non-constant expression new stack_t(true)

これって、グローバル変数に直にnewすることってできないんですか?

private import Stack;//自作のstack_t(T)。引数はboolのみ。

struct dummy{
    int x,y;
}
alias stack_t!(dummy) stack;
auto st =new stack; 
int main(char[][]){
    static dummy d={10,20};
    
    st.push(d);
    
    return 0;
}
546デフォルトの名無しさん:2007/11/02(金) 18:41:50
そういう場合は static this() を使う。

private import Stack;//自作のstack_t(T)。引数はboolのみ。

struct dummy{
int x,y;
}
alias stack_t!(dummy) stack;

stack st;

static this(){
st=new stack
}

int main(char[][]){
static dummy d={10,20};

st.push(d);

return 0;
}
547デフォルトの名無しさん:2007/11/02(金) 19:03:56
あぁ、なるほど。
わかりました〜。レスありがとう。
548デフォルトの名無しさん:2007/11/02(金) 19:51:37
static thisってクラス外でも使えたのか……知ってればもっときれいに書けたのあったなあ……

クラス内enumの仕様が悩ましい。

class Foo {
enum FooEnum {}
}
enum GlobalEnum {}

class BarA(T : FooEnum){} // NG
class BarB(T : GlobalEnum){} // OK
class BarC { // OK
FooEnum t;
}

BarAが宣言したいのだがなんとしたものか。
549デフォルトの名無しさん:2007/11/02(金) 19:56:02
>>548
class BarA(T : Foo.FooEnum){}
550デフォルトの名無しさん:2007/11/02(金) 20:09:31
Foo.FooEnum t;
551デフォルトの名無しさん:2007/11/02(金) 20:28:04
digitalmars.com 繋がる?
552デフォルトの名無しさん:2007/11/02(金) 20:46:56
>>549-550
すんません間違えました……でも両方とも
class Foo is forward referenced when looking for 'FooEnum'
でコンパイルエラーとなるという。

シンボルの意味が定義される順番が

A群
Foo, GlobalEnum, BarX(とテンプレート引数)

B群
Fooの内部、BarCの内部……

というふうになっているからかな、とは思うのですが。
553デフォルトの名無しさん:2007/11/02(金) 22:11:25
>>551
つながらない。
554デフォルトの名無しさん:2007/11/03(土) 00:20:56
>>552
そこら辺、実装が微妙だよな。
内部関数も前方参照できないと使えないし。
555デフォルトの名無しさん:2007/11/03(土) 09:15:56
What's New for D 2.007
Oct 31, 2007
New/Changed Features

    * Functors now supported by std.traits.ReturnType().
    * Transitive const now leaves invariants intact in the tail.
    * Added overloadable unary * operation as opStar().
    * Full closure support added.
    * Data items in static data segment >= 16 bytes in size are now paragraph aligned.
556デフォルトの名無しさん:2007/11/03(土) 09:17:01
貼ってから気づいたけれどフルクロージャーサポートかっ!
557デフォルトの名無しさん:2007/11/03(土) 09:26:28
2行目の意味誰かkwsk!
558デフォルトの名無しさん:2007/11/03(土) 09:54:04
opStar・・・・・・これでboost::spiritが移植可能かも!

いやあんまり要らん気がするが
559デフォルトの名無しさん:2007/11/03(土) 09:59:50
writefに("日本語")としたらinvalid UTF-8 sequenceとでてコンパイルできないんですが
どうしたらコンパイルできるんでしょうか。
560デフォルトの名無しさん:2007/11/03(土) 10:08:29
ソース自体をUTF-8かUTF-16で保存してください。
561559:2007/11/03(土) 10:23:38
>>560
UTF-16は選べなかったので、UTF-8で保存したらできました。ありがとうございます。
ただUTF-8なので??となりました。
562デフォルトの名無しさん:2007/11/03(土) 10:27:12
今更だがSharpDevelopいいな
563デフォルトの名無しさん:2007/11/03(土) 11:15:20
>>561
今のところ、Windows上で出力内容を化けさせずに見たい場合は

1、テキストファイルに出力して確認
2、printfでUTF-16を使う

のどちらかじゃないですかね。コンソールでCHCP 65001とかやる手もありますが、
これだとなんか表示がおかしくなる上にコンソールのサイズが強制的に変更されるので使いづらいです。

2の方法の場合、下のようにするとうまくいきます。

//↓こんな感じ
import std.c.locale;

void main() {
setlocale(0,"jp.932");
printf("%.*ls\n","日本語"w);
}

ただこれ日本語版のWindows環境以外について全く考慮してないプログラムになるんで、
もう一工夫した方が良いと思います。単なるテストプログラムと割り切ってるなら
そんなん考えないでも良いと思いますけど。
564デフォルトの名無しさん:2007/11/03(土) 11:28:43
Internal error: ../ztc/cgcod.c 1031
565デフォルトの名無しさん:2007/11/03(土) 12:14:15
* Full closure support added.

とうとうきたのか!?
566デフォルトの名無しさん:2007/11/03(土) 13:47:29
ヘルプのtemplateのサンプルの Curry をこんな感じで書き換えたらアブノーマルエラーで落ちるんだけれど、これ何処か間違ってます?
windows2kでdmd 2.007なのだけれど・・・

R delegate(U) Curry(R, A, U...)(R delegate(A, U) dg, A arg) {
    return (U u) { return dg(arg, u); };
}
567デフォルトの名無しさん:2007/11/03(土) 13:49:57
>>565
D\(^o^)/ハジマタ

import std.stdio;

uint delegate() counter() {
uint i = 0;
return {return ++i;};
}

void main() {
auto c = counter();
writeln(c()); // 1
writeln(c()); // 2
writeln(c()); // 3
}
568デフォルトの名無しさん:2007/11/03(土) 13:53:57
>>566
構文的には間違ってないと思うから、
まだバグ餅と考えたほうがいいかもね。
569デフォルトの名無しさん:2007/11/03(土) 13:56:50
570デフォルトの名無しさん:2007/11/03(土) 14:02:32
これのGCってstop the world?
それともなにがしかのコンカレントGC?
571デフォルトの名無しさん:2007/11/03(土) 15:27:05
おークロージャキタ━(゚∀゚)━!!
572デフォルトの名無しさん:2007/11/03(土) 16:24:31
これはハジマッテルなwwwwwwww
やべえwwww
573デフォルトの名無しさん:2007/11/03(土) 16:25:47
クロージャってどういうときつかうの?
ネストした関数なら使うことあるけど。
574デフォルトの名無しさん:2007/11/03(土) 16:25:56
いよいよ2.0に挑戦するときが来たか……。
といいつつもクロージャがサポートされるとなにが嬉しいのかよくわからない俺。
575デフォルトの名無しさん:2007/11/03(土) 16:27:31
ごめん被ったw
576デフォルトの名無しさん:2007/11/03(土) 16:32:50
wktk
577デフォルトの名無しさん:2007/11/03(土) 16:35:25
DってなんかSchemeっぽくね?
578デフォルトの名無しさん:2007/11/03(土) 16:38:52
>>577
pure関数の導入も予定してるし、関数型的に行く気まんまんという感じ。
579デフォルトの名無しさん:2007/11/03(土) 16:43:24
クローじゃきたのかー D2はじまったな
580デフォルトの名無しさん:2007/11/03(土) 16:59:14
クロージャの実装ご苦労じゃ。
581デフォルトの名無しさん:2007/11/03(土) 17:04:34
1.0 に組み込む気は無いのかなぁ。
発展途上というかバグだらけなうえに仕様が迷走してるだけに
2.0はまだ使う気にならんのだよな。
582デフォルトの名無しさん:2007/11/03(土) 17:15:52
>548の問題が、自分の用途に関して一時的解決策ができた。

enum FooEnum {}
class Foo {
alias .FooEnum FooEnum;
}

class BarA(T : FooEnum){} // NG


これで目的は果たせるけど、きっちりしておきたいところではある。
583デフォルトの名無しさん:2007/11/03(土) 17:19:01
1.0にくみこまれたら組み込まれたらで
仕様が迷走してるっていうんじゃね?
584デフォルトの名無しさん:2007/11/03(土) 17:21:02
1.0はもう変わっちゃだめだろ
585デフォルトの名無しさん:2007/11/03(土) 17:27:31
586デフォルトの名無しさん:2007/11/03(土) 17:28:08
>>578
pure関数入れるとどうなるんだろう

>>581
ちょっと待てw
0.xのときは早く安定させてって言われてたから1.x系作って安定させたんだろうに
ちゃんと進んでるぜよ
587デフォルトの名無しさん:2007/11/03(土) 17:53:53
1.x系は無難な過去の寄せ集め。
2.x系は未来への布石。

俺ってかっこいい!?
588デフォルトの名無しさん:2007/11/03(土) 17:54:41
むしろ世紀末への布石
589デフォルトの名無しさん:2007/11/03(土) 17:56:45
え?おわっちゃうの!?
590デフォルトの名無しさん:2007/11/03(土) 18:32:00
Dが完成するときは、世界の終わりの日だということか。
591デフォルトの名無しさん:2007/11/03(土) 18:33:06
>>589
90年先を見据えた言語ってことさ
592デフォルトの名無しさん:2007/11/03(土) 18:35:53
じゃあ・・・配列演算と並列処理まだー?
593デフォルトの名無しさん:2007/11/03(土) 18:57:13
pure関数が実装されると、コンパイル時に自動的に実行とかやってくれるのかな?
それか、結果のキャッシュかな。

とりあえずたらい回しが速くなる?
594デフォルトの名無しさん:2007/11/03(土) 19:03:06
>>591
おぉ!かっこいいね!!
595デフォルトの名無しさん:2007/11/03(土) 19:11:53
596デフォルトの名無しさん:2007/11/03(土) 19:54:14
あえてスルーしてたのに、、、
597デフォルトの名無しさん:2007/11/03(土) 20:26:16
すでにコンパイル時関数実行ってあるよね
598デフォルトの名無しさん:2007/11/03(土) 20:56:56
sin,cosがそうなってると、このスレだったかで見たような記憶がある。
599デフォルトの名無しさん:2007/11/03(土) 21:13:05
sin,cosは組み込み関数でコンパイラがコンパイル時に定数に置換するだけ。
CTFEの一種であることに変わりはないが。
600デフォルトの名無しさん:2007/11/03(土) 21:29:50
D言語SUGEEEEEEE
601デフォルトの名無しさん:2007/11/03(土) 21:57:31
むきー!!
modfをfmodの代わりだと思って使ってた間抜けがきましたよ。っと。
なんて紛らわしいんだ。
602デフォルトの名無しさん:2007/11/03(土) 22:01:04
(^Д^)m9
603デフォルトの名無しさん:2007/11/03(土) 22:07:24
>>602
右手が右側にwwww
604デフォルトの名無しさん:2007/11/03(土) 22:12:54
これはきっと「カマーン」って言ってるんだな
605デフォルトの名無しさん:2007/11/03(土) 22:21:52
左側だろ
606デフォルトの名無しさん:2007/11/03(土) 22:23:56
腕の力こぶを見せ付けてるんだろう

ぶよぶよ贅肉にも見えるが
607デフォルトの名無しさん:2007/11/03(土) 22:24:56
>>605
本人から見ればそうだな。
608デフォルトの名無しさん:2007/11/03(土) 22:27:12
小指立ててるだけだろ。
609デフォルトの名無しさん:2007/11/03(土) 22:33:02
循環import(AがBをimport、BがAをimport)って許されてない?

普通にコンパイルするときは問題ないんだけど、
コードカバレッジ解析(-cov)を有効にするとエラー出る。

Error: circular initialization dependency with module A
610デフォルトの名無しさん:2007/11/03(土) 22:45:15
http://www.kmonos.net/alang/d/module.html
静的コンストラクタの順序
import宣言の循環(モジュールがお互いをimportしあう、循環依存)は、 どちらか一方が静的構築の不要なモジュールであれば、問題ありません。 双方とも静的構築が必要であった場合は、 実行時例外が発生します。
611デフォルトの名無しさん:2007/11/03(土) 22:52:37
-covつけると静的構築されるの?
612566:2007/11/03(土) 22:54:28
>>568
thx!
無視して先に進みます
613デフォルトの名無しさん:2007/11/03(土) 22:55:50
静的構築が行われていないモジュール同士なんだけどなぁ〜
問題なく実行はできるし・・・
614デフォルトの名無しさん:2007/11/03(土) 22:58:24
おそらく、カバレッジ解析用のコードが追加されてエラーになるんだろうな。
バグだろバグ
615610,613:2007/11/03(土) 23:03:15
>>614

そう思う。バグだよねぇ〜。
それならそれでいいんだ・・・
D言語の思想に合ってないコーディングをしているのかと少々疑ってしまった。
616デフォルトの名無しさん:2007/11/03(土) 23:03:48
-cov つけるとコンパイラがそれぞれのモジュール内に静的コンストラクタを挿入するって事?
617デフォルトの名無しさん:2007/11/03(土) 23:04:56
かぶった、すまぬ
618デフォルトの名無しさん:2007/11/03(土) 23:08:54
もし>>616ならそうそう解決されないんじゃね?
それに元々循環importは推奨されてないんじゃなかったっけ?
どっかで見た気がしてて>>610見るまで循環importやったらダメだと思ってたけど・・・
記憶違いならスマソ
どっちにしても循環しないようにしたらいいとおもた
619609,613,615:2007/11/03(土) 23:19:02
>>615
610,613→609,613 間違えた。すまぬ。

>>618
>どっちにしても循環しないようにしたらいいとおもた
えぇ。循環したいよぉー
620デフォルトの名無しさん:2007/11/03(土) 23:27:37
循環するほど密接してるんならもしかしたら一つのファイルにまとめるべきなのかもねえ
621609:2007/11/03(土) 23:40:38
>>620
その通りですね。
622デフォルトの名無しさん:2007/11/03(土) 23:48:57
>>618
モジュールコンストラクタがある場合に循環依存できないって制約は、
初期化順序を一意に定めるためのものであって、
循環依存自体に何か問題があるわけじゃないと思う。

コンパイラが挿入するカバレッジ解析コードに
モジュールごとの初期化順序が何らかの影響を及ぼすとは考えづらいから、
やはりバグだと思う。
623デフォルトの名無しさん:2007/11/04(日) 00:09:52
class Hoge {
int opProperty(string key, int val) {
return 0;
}
}
auto hoge = new Hoge;
hoge.test = 22; // どうにかして => hoge.opProperty(test, 22);

こんなキモいことできないかなー
624デフォルトの名無しさん:2007/11/04(日) 00:11:58
妄想乙
625デフォルトの名無しさん:2007/11/04(日) 00:16:28
>>623
それってさ、opPropertyの中で、keyとvalに応じて分岐とかするの?
それなら普通にメンバ関数の方がいいでしょ。

単にメンバ変数に値を設定するだけならテンプレートで増殖させるとかできるし。
626デフォルトの名無しさん:2007/11/04(日) 00:18:40
>>623
opIndex(string key, int val)ってしてhoge["test"]=22で良くね?
627デフォルトの名無しさん:2007/11/04(日) 00:19:38
ミスった。opIndexAssignね。
628デフォルトの名無しさん:2007/11/04(日) 00:22:46
ーにかした

ソースの外見をきにしてしまったアホだった/(^o^)\
629デフォルトの名無しさん:2007/11/04(日) 00:24:03
雪駄下駄を書くのが面倒くさいだけなら、わなDのサンプル

template attr_reader(T, string name)
{
mixin( "private T _" ~ name ~ ";" );
mixin( " public T " ~ name ~ "(){ return _" ~ name ~ ";}" );
}

class Point
{
mixin attr_reader!(int, "x");
mixin attr_reader!(int, "y");

this(int ix, int iy) { _x=ix; _y=iy; }
}

で十分。
でも、普通に書いた方がいいと思うぞ。
630デフォルトの名無しさん:2007/11/04(日) 00:27:39
ドキュメント生成用のコメントつけられなくなるしなー。
631デフォルトの名無しさん:2007/11/04(日) 00:39:49
きもさを追求するなら、opAutoload導入して欲しい。
632デフォルトの名無しさん:2007/11/04(日) 01:48:16
本からパクッた!あ。いや、参考にして、タートルグラフィック実装してみた。
アーカイブの中に結果画像入ってる。
これぞ、コンピュータグラフィックってかんじで面白いね。

windows専用です。
http://www9.uploader.jp/dl/sukiyaki/sukiyaki_uljp00004.zip.html
633デフォルトの名無しさん:2007/11/04(日) 01:58:08
ゲッタとか雪駄とかって他のC系列では自分で生成できないからすげーあこがれてたんだぞ。
それをこんなむげに扱いよって。ぷんぷん。






え?ビーム??でないよそんなの。
634デフォルトの名無しさん:2007/11/04(日) 02:10:27
ですよねー
635デフォルトの名無しさん:2007/11/04(日) 04:02:59
プロパティの += とか -= とかなんで許可してないんかね。

array.length += 2;

ってやったら

array.length = array.length + 2;

って変換してくれりゃ良いだけなのに。
演算子オーバーロードとの競合を防ぐため?
636デフォルトの名無しさん:2007/11/04(日) 04:14:42
将来的にはできるようになる予定とかどっか書いてなかったっけ。
637デフォルトの名無しさん:2007/11/04(日) 04:31:27
D言語は糞だから期待しちゃだめ
638デフォルトの名無しさん:2007/11/04(日) 04:52:39
ruby式だー
639デフォルトの名無しさん:2007/11/04(日) 05:01:50
>>635-636
もう忘れてるんじゃないのw
640デフォルトの名無しさん:2007/11/04(日) 06:49:24
をるたんももしかしたら
各自array.length = array.length + 2;ってかけばいいのに
とかおもってたりは・・・ないか
641デフォルトの名無しさん:2007/11/04(日) 11:09:39
をるたんも実はarray.length += 2;って書けたらいいなあ、とか思ってる。
642デフォルトの名無しさん:2007/11/04(日) 11:27:39
でも現実的に割に合わない面倒なことだなあ、とも思ってる
643デフォルトの名無しさん:2007/11/04(日) 12:39:51
そんなしょうもないもの実装してる暇があったらマクロ実装してやんよ!
と思ってるに違いない。
644デフォルトの名無しさん:2007/11/04(日) 12:44:59
ほんとだな?
645デフォルトの名無しさん:2007/11/04(日) 16:16:42
くろーじゃー!
646デフォルトの名無しさん:2007/11/04(日) 17:35:53
でも対称性の点から見てもあってもいい機能だよな常識的に考えててててて
647デフォルトの名無しさん:2007/11/04(日) 19:14:06
D2 の構造体/クラスの配列で sort しても opCmp 呼ばれなくなってね?
648デフォルトの名無しさん:2007/11/04(日) 22:12:35
どうも吐くアセンブラがバギーな感じ
649デフォルトの名無しさん:2007/11/04(日) 22:31:11
D2おもしろんだけど、コンパイラがバグだらけで使い物にならんな…
650デフォルトの名無しさん:2007/11/04(日) 22:41:14
ttp://www.sun-inet.or.jp/~yaneurao/dlang/Chapter-03.html#030400000000
このVSつかうデバッグできてる人いますか?
VS2005でやってみたけど、どうもうまくいかないです
651デフォルトの名無しさん:2007/11/04(日) 22:52:32
>>648
delegateまわりがとくに
closure関係だろうな
652デフォルトの名無しさん:2007/11/04(日) 23:21:18
void main(){
A!(int) a;
a.f();
}

struct A(T){
T t;

A!(A!(int)) f(){
A!(A!(int)) a;
return a;
}
}
これってやっちゃいけないことなのかな。
エラーになる。
Aをコンテナとして、リストのリストと言う具合に、
入れ子にするのは良くあることだと思うのだけど。
653デフォルトの名無しさん:2007/11/04(日) 23:46:58
>>652
A!(A!(int)) をtypedefしたりなんやらしてたらDMDが無限ループに入っちまった。
怖い怖い
654デフォルトの名無しさん:2007/11/05(月) 00:05:24
>>652
普通に無限ループしないか?
テンプレートをインスタンス化すると、その内部のテンプレートがインスタンス化され、
さらにその内部のテンプレートがインスタンス化され、、、


655デフォルトの名無しさん:2007/11/05(月) 00:09:45
>>647
2.003と2.007の動作は同じよう。変化なかったよ。
1.023と2.007の動作はぜんぜん違った・・・

要素3つの配列をソートするだけの処理で・・・
1.023は、配列初期化時にopCmpを20回、ソート時に3回呼び出してる。
2.007は、配列初期化時にopCmpを3回、ソート時には呼び出しなし。

2.007は降順で1.023は昇順という大きな違いが←既知事象?
656デフォルトの名無しさん:2007/11/05(月) 01:11:38
gdcって1.020までしかないの?
だめじゃん
657デフォルトの名無しさん:2007/11/05(月) 01:35:23
あった・・・
なんで最新のやつをでかでかと表示したりしないんだろ
658デフォルトの名無しさん:2007/11/05(月) 01:39:02
>>654
最終的にはintで止まるはずだから、無限ループはしなさそうだけど
C++でやってみたら大丈夫だったし
659デフォルトの名無しさん:2007/11/05(月) 02:06:12
え、Dって末尾再帰最適化してんの
660デフォルトの名無しさん:2007/11/05(月) 02:46:11
なぜ突然「末尾再帰最適化」?
関係ないだろ
661デフォルトの名無しさん:2007/11/05(月) 03:53:51
そういえばDって無限リスト書けんのかな
662デフォルトの名無しさん:2007/11/05(月) 04:03:57
それっぽいものなら何とでもかけると思うが。
663デフォルトの名無しさん:2007/11/05(月) 12:07:40
クロージャが来た記念ってことで、遅延リストを作って遊んでた俺。
でも、lines :: [char] -> [[char]]が書けなくてショボーン。
getContentsとか、zipWith使ってフィボナッチとかはできたお。
664デフォルトの名無しさん:2007/11/05(月) 12:39:25
>>658
考えてみてもintで止まるということがよく分からんかった。
A!(int)はA!(A!(int))型戻り値の関数を持ち、
そのA!(A!(int))型はA!(A!(A!(int))))型戻り値の関数を持ち、…
となるように思える。(intから始まって、止まらない)

A!(int)の実体化中にA!(A!(int))を実体化しようとすると、
無限リストよろしく永遠に型の実体化が終了しないんじゃなかろうか。

で、A!(A!(int))の実体化のタイミングをA!(int)の定義後にしようと思って
struct A(T){
T t;
A!(TA) f(TA=A!(T))(){
A!(TA) a;
return a;
}
}
としてみたけど、それでもコンパイラ様は再帰展開だとおっしゃる。

で、小手先の変更として f(TA=A!(T))() を f(TA=typeof(this)) と変えてみたら
dmdがsemantic3でオチタ\(^o^)/
665デフォルトの名無しさん:2007/11/05(月) 13:19:30
くそー2.007おもしろそうなんだが、前のプログラムが動かん・・・
今まで追い続けたんだけど、今回は2.006にもどすよ。。。
>>663
面白そうな雰囲気
まったくわからんおいらに説明おねがいします
666デフォルトの名無しさん:2007/11/05(月) 13:41:58
>>664
よく見ようよ。
A!(A!(T))だと確かにとまらないけど、上のコードはA!(A!(int))。
どう見ても有限の展開しかしない。
単に動かないのはdmdのバグでしょ。
667デフォルトの名無しさん:2007/11/05(月) 13:46:10
class List(T) {
static List!(List!(T)) listOfList() {
return null;
}
}

alias List!(int) t;
668デフォルトの名無しさん:2007/11/05(月) 13:59:06
>>666
なるほど、A!(A!(int)).fの戻り値型はA!(A!(int))そのものになるのね。
669デフォルトの名無しさん:2007/11/05(月) 15:35:01
単純にA!(A!(int))を展開しようとしたらまたA!(A!(int))が展開されて・・・という話ではないの?
670デフォルトの名無しさん:2007/11/05(月) 15:55:09
同じテンプレート引数では一回しか実体化されないはず。
671デフォルトの名無しさん:2007/11/05(月) 16:11:39
あーそうだった
俺ショボスwww
672デフォルトの名無しさん:2007/11/05(月) 16:47:13
実装しだいでは、A!(A!(T))でも大丈夫だと思う。
なんせ、C++ではこれが正常に動くのだから。
C++でできることはDでもできてほしい。

using namespace std;

template<class T> struct A{
T t;

A<A<T>> f(){
A<A<T>> a;
a.t.t = 2;
return a;
}
};

int main(){
A<int> a;
A<A<int>> b = a.f();
cout << b.t.t << endl;
return 0;
}
673デフォルトの名無しさん:2007/11/05(月) 18:04:20
久々にスレの勢いを見てみたら、
この板ではC/C++, Javaについで3番手だということに気づいた。
PerlやJavaScriptやPHPはここではない場所でやってそうだが、
それでもずいぶん上に来たものだ。
674663:2007/11/05(月) 18:24:56
>>665
Haskellに標準搭載されてる遅延リストを、Dでどれだけ実現できるか、という試み。
実行コストが高いから実用性は無くて、お遊びでしかないけど。
ttp://www9.uploader.jp/dl/sukiyaki/sukiyaki_uljp00005.zip.html
ここに上げたから、詳しくはこれを見てみて。

linesとgetContentsとzipWithは、Haskellにある関数。
linesが書けないのは>>652がエラーになるせい。
675デフォルトの名無しさん:2007/11/05(月) 18:31:51
>>673
ウォルたんから新ネタがどんどん届くからな
間違いなく勢いはある
676デフォルトの名無しさん:2007/11/05(月) 18:47:32
クロージャが入ってからの勢いがものすごいだけで、普段はそんなにすごくないんじゃないかな。
677デフォルトの名無しさん:2007/11/05(月) 19:01:11
C++インターフェースのときもすごかったよね。

>>773
をををっありがとうございます
拝見します
678デフォルトの名無しさん:2007/11/05(月) 19:04:44
replace( D言語Part15[677], `>>773`, `>>674`);
//ごめんなさい
679デフォルトの名無しさん:2007/11/05(月) 19:21:49
ぬるぽ
680デフォルトの名無しさん:2007/11/05(月) 20:04:12
俺はマクロくるまで冬眠
681デフォルトの名無しさん:2007/11/05(月) 21:04:15
そう言って冬眠したのはもう三人くらいいるようなw
682デフォルトの名無しさん:2007/11/05(月) 21:10:47
俺の理解度は置いといて!他の人のコード読むと楽しいな!!
なんかね、久しぶりに心から「へぇ〜」っていっちゃった。

やっぱ、ネットはこうでないと。




そうそう、俺タートルとかやってた奴ね。
683682:2007/11/05(月) 21:13:27
混乱避けるつもりが紛らわしく。。。
俺-> >>682だけね。
684デフォルトの名無しさん:2007/11/05(月) 21:22:04
>>682はもうちょっと落ち着いてもいいと思う
やけに楽しそうだw
685デフォルトの名無しさん:2007/11/05(月) 21:44:05
getenv("CONTENT-LENGTH").toInt()
とかはちょっとニヤリとしてしまう
686デフォルトの名無しさん:2007/11/05(月) 21:51:41
俺は予想外にもクロージャ来たから冬眠からさめちまった
687デフォルトの名無しさん:2007/11/05(月) 22:23:48
CGIっつーかAjaxっつーかweb開発用のフレームワークってありますか?
688デフォルトの名無しさん:2007/11/05(月) 22:32:07
なんか、あったような気もするけど、古いかもなあ。
689デフォルトの名無しさん:2007/11/05(月) 23:01:15
自己を動的に派生クラスに書き換えるモデルを考えて、
以下のようなコードを組んでみたのですが、失敗しました。
そもそも自己を動的に派生クラスに書き直せるのかちょっと疑問になったのですが、
こういうことは可能なのでしょうか。

class Hoge {
this() {}
void rewrite() {
this = new Huga;
}
}

class Huga : Hoge {}

void main(){
auto a = new Hoge;
a.rewrite;
writefln(a);  // -> Hoge
}
690デフォルトの名無しさん:2007/11/05(月) 23:02:37
>>687
sakuraiさんがずっと前に作ってなかったっけ
691デフォルトの名無しさん:2007/11/05(月) 23:12:28
>>689
変数aのアドレスなり参照なりがわからないと無理でしょ。
メモリのインスタンスが存在する部分を書き換えるわけにはいかないから、
変数aが指しているものを書き換えるしかない。
692デフォルトの名無しさん:2007/11/05(月) 23:17:57
仮想メソッドを直接書きかえ・・・いやなんでもないです
693デフォルトの名無しさん:2007/11/05(月) 23:18:58
できてしまった
import std.stdio;
class A{
void change(ref A a){
a = new B;
}
}
class B : A {}
void main(){
auto x = new A;
writefln(x); // a.A
x.change(x); // a.B
writefln(x);
}
694デフォルトの名無しさん:2007/11/05(月) 23:21:26
コメント書くところ間違えた
あとインデント見やすく
import std.stdio;
class A{
 void change(ref A a){
  a = new B;
 }
}
class B : A {}
void main(){
 auto x = new A;
 writefln(x); // a.A
 x.change(x);
 writefln(x); // a.B
}
695デフォルトの名無しさん:2007/11/05(月) 23:26:15
this ってメソッド呼ばれる時にインスタンスのポインタを値渡しされたただの隠しパラメータだからな。
だから、this をいくら書き換えても呼び出し元の変数(ポインタの値)は変わらないまま。
this が元から lvalue にならなきゃ混乱しないのに。
696デフォルトの名無しさん:2007/11/05(月) 23:31:15
>>692
求めているものは仮想メソッドの動的書き換えで、
かつオーバーロードできればいいなあという感じ(なのでデリゲート不可)で、
それが理想なんですが、さてどうしたものかと。

>>691 >695
なるほど。。少し分かってきました。
この辺を突破できるトリックをぼちぼち探してみます。
697デフォルトの名無しさん:2007/11/06(火) 00:10:16
>>694
ひとまずこれベースで行ってみます。
ありがとうございました。
698デフォルトの名無しさん:2007/11/06(火) 01:03:34
っステートパターン
って言ってみる
699デフォルトの名無しさん:2007/11/06(火) 01:37:40
D言語を使うからにはもっとトリッキーな手法をとるべきではなかろうか。
700デフォルトの名無しさん:2007/11/06(火) 01:57:34
D言語は糞
701デフォルトの名無しさん:2007/11/06(火) 02:31:15
>>697
Has-a使ってやってみるのは?
ttp://www9.uploader.jp/dl/sukiyaki/sukiyaki_uljp00006.zip.html

なんでこの線路 .d がアップロードできんのん?
702デフォルトの名無しさん:2007/11/06(火) 03:39:17
なんか8スレ目ぶりくらいにアンチを見た。
703デフォルトの名無しさん:2007/11/06(火) 04:43:04
dupと[]って書き方以外になんか違うところあるの?
704デフォルトの名無しさん:2007/11/06(火) 08:01:51
>>703
dupは複製される。[]はされない。

int[] x = [1,2,3];
int[] y = x[];
y[0]=999;
writefln(x); // 999 2 3 (y=x.dupなら1 2 3)
705デフォルトの名無しさん:2007/11/06(火) 08:35:14
クロージャがくると、coroutineがもうすぐできる
という夢をみた
706デフォルトの名無しさん:2007/11/06(火) 13:49:41
>>703
[]は配列全体のスライス。
dupはミュータブルな複製。
したがって、型が違う場合がある。

static assert(is(typeof("foo") == invariant(char)[3]));
static assert(is(typeof("foo"[]) == invariant(char)[]));
static assert(is(typeof("foo".dup) == char[]));
707デフォルトの名無しさん:2007/11/06(火) 14:57:39
ここまで試してみた結果のまとめ

・自己インスタンス書き換え
 外部の自身を指すポインタのアドレスを渡す必要がある=複数あった場合は厄介
 newでコンストラクタを呼び出すと厄介

・delegateスイッチング+可変データアダプタ
 オーバーロードできない
 プロパティ風呼び出しができない

・Has-a
 オーバーヘッドはあるが、無視できることが多いかも
 ExchangerとInterfaceで2回定義を書くのがやや冗長

・分岐
 オーバーヘッドが大きい

・Factory
 動的な変更が内部的には行えない
 自身を指すポインタが複数あると厄介

自分の目的だとHas-aかデリゲートスイッチングの2択になりそうですが、
もう少し煮詰めてみて面白そうなら報告いたします。
708デフォルトの名無しさん:2007/11/06(火) 15:37:02
アップローダのアップ形式は自分ではいじれないっぽい〜。
レンタルなんですけど、ちょっと不便だなぁ。

>>684
お察しのとおり、たのしくて!
えぇーっと、多少自重します〜。
709デフォルトの名無しさん:2007/11/06(火) 15:39:36
d monooki とかいうDのソースコードアップロードできる場所が
あったけど、いま使えるっけ?
710デフォルトの名無しさん:2007/11/06(火) 18:12:19
>>707
別のインスタンスにすり替えるんじゃなくて、インスタンス自体を書き換えてみた

import std.gc, std.stdio;

class A{
void change(){ // A to B
if(B.sizeof > capacity(cast(void*)this)){
if(extend(cast(void*)this, B.sizeof-A.sizeof, B.sizeof-A.sizeof)){
throw new Exception("std.gc.extend failed");
}
}
size_t ptrsize = (void*).sizeof;
with(B.classinfo){
(cast(byte*)this)[0..init.length]
= init[0..init.length];
}
}
}
class B:A{
void change(){ // B to A
...省略...
}
}

void main(){
A a = new A;
a.change();
writefln(a); //B
a.change();
writefln(a); //A
}
711デフォルトの名無しさん:2007/11/06(火) 19:31:30
きんもー☆
712デフォルトの名無しさん:2007/11/06(火) 19:43:00
強烈過ぎて吹いたw
ちょっと使える場面が限定されそうなので、しっかりメモしてそれにとどめておきます

しかしgcがありながらこれができてしまうDの変態さには感心する
713デフォルトの名無しさん:2007/11/06(火) 19:44:55
gcがあるからこそできるんじゃね?
714デフォルトの名無しさん:2007/11/06(火) 23:46:58
version条件で、#ifndefとか#if !defined()とか#if defined() && defined() #elseに相当することってできましたっけ?
なんとなくstatic ifに書き換えてますが、無駄を感じるもので。
715デフォルトの名無しさん:2007/11/06(火) 23:51:29
どのへんが無駄?
716デフォルトの名無しさん:2007/11/06(火) 23:56:53
static if以外にはversionとdebugくらいしかないと思う
他にあったっけ?
717デフォルトの名無しさん:2007/11/07(水) 00:06:16
version(...){...}else{...}はできたような希ガス
718デフォルトの名無しさん:2007/11/07(水) 00:47:35
#if defined(FOO) && !defined(BAR)
 ...
#else
 ...
#endif

これが書きづらい。
static ifは定義済みでないと扱えないので、これをすっきり表現するには、
versionで定義されてるかどうかを真偽値とする定数を作って、……とやってるんだが、
このへんがどうにかならんもんかなあと。
719デフォルトの名無しさん:2007/11/07(水) 00:59:10
#define FOO
に変わるものがなあああいい
720デフォルトの名無しさん:2007/11/07(水) 01:07:02
コマンドラインで指定するのをあきらめて、const使う案しか思い浮かばない

const FOO = true;

static if(FOO){
const HOGE = true;
}
else{
const HOGE = false;
}
721デフォルトの名無しさん:2007/11/07(水) 01:07:08
>>719
version=FOO;
722デフォルトの名無しさん:2007/11/07(水) 01:44:30
>>548について本家で聞いてみたら、
「バグだとは認識されてるけど、『直す手間の割に実がない』とウォルターが言ってた」
とのこと。
まあ回避できるし特にいいかなと。
723デフォルトの名無しさん:2007/11/07(水) 02:07:56
>>718
mixin宣言で「hoge1&&!hoge2ならversion=hoge3」とかやろうとしてみたけど
mixin宣言で生成したversion文より先に素のversion文が解決されてしまうっぽくて、
mixin("version = hoge3;");
version(hoge3){
int x = 5;
}
と書いても
version hoge3 defined after use
と言われてしまう。

mixinがversionの評価の前に通れば、もうちょっとましにはなりそう。
(そうなるよりは、version文が進化する方がありえそうな話だけど)

version(foo)version(bar){ // foo && bar
}else{ // foo && !bar
}else version(bar){ // !foo && bar
}else{ // !foo && !bar
}
これは書きづらい上に読みづらいな。
現状では、718の言う通りversion+static ifというのが一番マシなやりかただろね。
724デフォルトの名無しさん:2007/11/07(水) 11:52:12
>>722 乙っす
なるほど
>『直す手間の割に実がない』
これがすべてだなw
725デフォルトの名無しさん:2007/11/07(水) 12:46:29
しかしそんなんじゃいつまで経っても普及しない希ガス
726デフォルトの名無しさん:2007/11/07(水) 12:51:30
そもそもウォルターには普及させる気がない気がしてる…
727デフォルトの名無しさん:2007/11/07(水) 15:55:55
でもさりげなく次の更新に修正されてるという・・・
728デフォルトの名無しさん:2007/11/07(水) 16:06:18
>>727
それはウォルターには普及させる気がないっていう不具合ですか
729デフォルトの名無しさん:2007/11/07(水) 16:34:37
それは仕様です
730デフォルトの名無しさん:2007/11/07(水) 20:15:04
ウォルタンのバグはいつ直るの?
731デフォルトの名無しさん:2007/11/07(水) 20:24:46
>>494
void rebuild(E,T)(ref T[E] array) {
T[E] result;
foreach(i, k; array.keys)
result[k] = array.values[i];
array = result;
}
テレビと同じで叩けば動くらしい。
732デフォルトの名無しさん:2007/11/07(水) 20:24:56
をるたんはをるたんの唯一の実装にして仕様そのものなので、直すべきバグは存在しません。
733デフォルトの名無しさん:2007/11/07(水) 21:08:44
flectioned の v2.007 対応のってない?
734デフォルトの名無しさん:2007/11/07(水) 21:58:03
private 定義したクラスってどういう意味になるの?普通にC++でいうstaticかと思ったら違うみたいだし。
逆にC++でいうstatic(ファイル内スコープ)なクラスはどうやったらできる?

---- b.d ----
module b;
private class B {}
private void hoge() {}

---- a.d ----
module a;
import b;
void main()
{
 B b = new B; // OK
 hoge(); // Error: function b.hoge is not accessible from a
}
735デフォルトの名無しさん:2007/11/07(水) 22:05:43
仕様によればモジュールスコープのprivateは、
Cのstaticと同じ意味になるはず。

B b = new B; もエラーにならないといけないはず。
736デフォルトの名無しさん:2007/11/07(水) 22:30:14
てことはバグかぁ。
サンクス。

まぁ、それほど困らないバグだしほっとくか・・・
737デフォルトの名無しさん:2007/11/07(水) 22:32:53
>>733
flectionedをD2.007でコンパイルを通して使ってみたけど、
ちゃんと動いてないっぽい。

main関数直下でArrayBoundsError例外を発生させたら、
スタック表示はされたけど、関数名がでない。
(std.array.ArrayBoundsError) ArrayBoundsError main(80)
0x0012FD34 0x004046B3 <?>
0x0012FD4C 0x00404651 <?>
0x0012FDC4 0x004236E2 <?>
0x0012FF30 0x004023BC int main(char[][])

自前のクラスのメンバ関数でArrayBoundsError例外を発生させたら、
main関数が表示されてないし。
(std.asserterror.AssertError) AssertError Failure dbuffer.d(158)
0x0012FCDC 0x0040341F <?>
0x0012FCF4 0x004033BD <?>
0x00000043 0x0042244E <?>

ていうか、さっき初めて使ったので、なんか使い方を間違ってるのかも。
とりあえず[わなD]を見ながら使ってみたよ。
http://www.kmonos.net/alang/wnd/topics/flectioned.ja.html

flectionedがちゃんと使えるようになると便利いいんだけどな。
それにしても[わなD]はいつも助かるぜー。ありがたい。
738デフォルトの名無しさん:2007/11/08(木) 00:55:02
>>737
うp
739デフォルトの名無しさん:2007/11/08(木) 02:04:41
DDocについて、dittoの挙動が

///Params:x=aaa
void func(int x){}
///ditto
void func(double x){}

void func (int x);
void func (double x);
  Params:
  int x  aaa

ってかんじに、xの型がintってあたりが納得いかないんだが…と地味に思った。
この場合どうしたらいい感じに出力できるのかな?
CandyDocとか使うと結構きれいに出てくれて素敵なんだけど…こういう細かいところがなぁ…
740733:2007/11/08(木) 02:34:43
自分でポートしてみた。
(std.array.ArrayBoundsError) ArrayBoundsError bug(25)
0xBFB35C74 0x08052158 extern(C) void _d_array_bounds(char[], uint)
0xBFB35C88 0x0804B389 void bug.__array
0xBFB35CA0 0x0804B2F6 void bug.foo()
0xBFB35CB8 0x0804B31E int main(char[][])

なんかちがうね?なんでだろ?>>737
当方 linux
741デフォルトの名無しさん:2007/11/08(木) 13:08:56
>>739
それもきっと>>722ってことなんだろうなぁ。

もう>>722の金言は「D言語の哲学」として>>1に張っとくといいんじゃね?
742デフォルトの名無しさん:2007/11/08(木) 13:42:07
そんあこといわれたら全部>>722って言われちゃいます><
743デフォルトの名無しさん:2007/11/08(木) 14:11:54
size_t l;
stream.read(l);
array.length = l;
これ地味に面倒じゃねwwww
array.length = stream.read!(size_t);
とかで簡単にかけたら便利そうだなあああああああ
744デフォルトの名無しさん:2007/11/08(木) 15:40:26
動的配列なのにわざわざ先にサイズ指定しなくてもと思うけど・・・。
745デフォルトの名無しさん:2007/11/08(木) 16:40:24
動的配列だから先にサイズを読み込むんじゃ…?
746デフォルトの名無しさん:2007/11/08(木) 16:59:45
別に配列関係ないだろ。
747デフォルトの名無しさん:2007/11/08(木) 17:08:31
ラムダ式まだー
748デフォルトの名無しさん:2007/11/08(木) 17:09:28
>>743
をるたんにその便利さを説けば入れてくれるんじゃね?
749デフォルトの名無しさん:2007/11/08(木) 17:24:18
>>743 自分で関数書いたらよくね?
750デフォルトの名無しさん:2007/11/08(木) 17:29:47
配列以外にも拡張メソッド構文が採用されれば、できるな。
751デフォルトの名無しさん:2007/11/08(木) 17:32:25
ブライト艦長としては、既にDの開発に使える人生のリソースを100%使っていて、
どこをイジるかってのは完全にリソースの振り分け、優先順位の問題なのだろうし、
もうしばらくは優先順位の極めて高いwktkなアイディアが常に溢れた状態だろうから、
よっぽどの相対的価値をアピールしない限り、振り向いてはくれないだろうね。
752デフォルトの名無しさん:2007/11/08(木) 21:31:57
>>738
コンパイルが通るだけで動作確認ができてないですけど、
もしどこかに簡単にアップできる先があればアップしますよ。

>>740
おー、ご自分でポートされたんですね。
ちゃんと動いてるっぽくていいなー。

[わなD]を見ると、私のほうでちゃんとでてないのは、
-gオプションで再コンパイルしたphobos使ってないからかも。

ちなみにうちは、WindowsXP / dmd2.0007 / phobos / dsss で稼動させてます。

753デフォルトの名無しさん:2007/11/08(木) 21:54:20
2.0007

ご、ごめん
754デフォルトの名無しさん:2007/11/08(木) 22:57:23
ちなみに同じ問題で悩んだけど 1.x 系だと phobos コンパイル通らなかった・・・!
phobos のコンパイル通すのですら、をるたんにとって優先順位低そうでイヤン
755デフォルトの名無しさん:2007/11/09(金) 00:14:05
D言語製のブラウザとかないわけ
756デフォルトの名無しさん:2007/11/09(金) 00:15:40
ないわけ

>>753
気持ちわかるw
757デフォルトの名無しさん:2007/11/09(金) 03:30:53
D言語製のブラウザとか必要もないよな・・・
758デフォルトの名無しさん:2007/11/09(金) 03:44:52
参考になるサンプルはある程度必要だろ
759デフォルトの名無しさん:2007/11/09(金) 06:32:26
アプリのサンプルというよりゲームとかなら作られてるみたいだな。
760デフォルトの名無しさん:2007/11/09(金) 07:26:59
C/C++の遺産の再利用がまだしづらいのかな?
761デフォルトの名無しさん:2007/11/09(金) 07:43:00
サンプルを作ってもちょっと経ったらコンパイルできなくなりそうな言語
762デフォルトの名無しさん:2007/11/09(金) 09:33:56
そして、いつぞやの納品したやつ脂肪。。。w
763デフォルトの名無しさん:2007/11/09(金) 18:19:13
CTFEや文字列mixinに対応したIDEまだ?
764デフォルトの名無しさん:2007/11/09(金) 21:13:59
765デフォルトの名無しさん:2007/11/09(金) 22:23:07
CTFEって何ぞ?
766デフォルトの名無しさん:2007/11/09(金) 22:27:22
767デフォルトの名無しさん:2007/11/09(金) 22:31:11
どんも。mixinならまだしも CTFE に対応はかなり厳しくない?
768デフォルトの名無しさん:2007/11/10(土) 00:21:44
もうコンパイラがIDEになっちまえばいいのではないだろうか。
769デフォルトの名無しさん:2007/11/10(土) 01:00:31
tango の tango.text.String と 
tango.text.Text が機能的に一緒に見えるんだが、何なんだ、これ?


ttp://www.dsource.org/projects/tango/docs/current/tango.text.String.html
ttp://www.dsource.org/projects/tango/docs/current/tango.text.Text.html

名前変わったけどそのまんま残してあるとかそんなの?
770デフォルトの名無しさん:2007/11/10(土) 01:03:54
String は非推奨になってるよ。
何でStringからTextにしたんだろ…
StringはStringで別のものを提供するつもりなんだろうか…
あとText.toUtf8()がおかしい。バグっぽい。Object.toUtf8()の「オーバーロード」関数になっちゃってるみたい…
771デフォルトの名無しさん:2007/11/10(土) 06:25:53
そういや配列のプロパティ形式って配列でしかダメな理由あるのかな?
772デフォルトの名無しさん:2007/11/10(土) 08:49:49
配列にはメンバがないからルックアップが簡単になるためじゃなかろうか。

たしか、カンファレンスのスライドだったかで、配列以外にも拡張するようなことが書いてあったと思う。
773デフォルトの名無しさん:2007/11/10(土) 09:04:59
そのうちメソッドが
void func(Class c) {
}
auto c = new Class;
c.func();
なんてことになるのかな
774デフォルトの名無しさん:2007/11/10(土) 09:43:15
さすがにそれはどうかと思う
775デフォルトの名無しさん:2007/11/10(土) 09:53:36
>>772
http://s3.amazonaws.com/dconf2007/WalterAndrei.pdf
9ページだな

まさに>>773のことが書いてある。
776デフォルトの名無しさん:2007/11/10(土) 10:39:56
>>773ので書いたらクラスに後からメソッドを追加出来るな
777デフォルトの名無しさん:2007/11/10(土) 10:42:11
それじゃクラスいらないね
全部構造体でいいじゃん
778デフォルトの名無しさん:2007/11/10(土) 10:44:04
拡張メソッドはprivateメンバに触れないからカプセル化ができないじゃん
779デフォルトの名無しさん:2007/11/10(土) 10:48:25
>>770
非推奨になってたのか。サンクス。
機能的にテキストエディタを意識しているように見えるから Text に名前変えたんかな。
780デフォルトの名無しさん:2007/11/10(土) 11:25:42
お、Dにも来るのかそれ。

……関数・メソッド・プロパティじゃそれぞれ相応しい名前が違ってくるから、
あんまり安直にごっちゃに出来て欲しくはないなぁ、というのは神経質というか今更かしらん。
781デフォルトの名無しさん:2007/11/10(土) 12:20:32
自分としてはモジュールのstatic import や別名つけてる時も大丈夫なようにして欲しいな。

import Conv = std.conv;
"12345".Conv.to!(int);

とか。使ってる関数がどのモジュールに属するのか簡単に分からないのは嫌いだし
呼び出してるのがメソッドなのか関数なのか区別つかないのは精神衛生上よろしくない。
782デフォルトの名無しさん:2007/11/10(土) 12:27:45
それはまた気持ちが悪いな…
783デフォルトの名無しさん:2007/11/10(土) 13:13:39
うへぇ、きめぇwwwwが褒め言葉のD言語ですが

>>781
自分的にもそれはほしいけど、なんかわかりにくくなるね…
…ここでスコープ解決演算子::の登場。

import Conv = std.conv;
"12345".Conv::to!(int);

とか。何でも.でアクセスするのはC++使ってた身としてはコード的に見にくくなる気がしている。
784デフォルトの名無しさん:2007/11/10(土) 13:19:09
"12345".Conv  ::  to!(int);
          ↑ここで意味の切れ目がある感じがして好きじゃないなあ

"12345".(Conv.to!(int)); とか。
785デフォルトの名無しさん:2007/11/10(土) 13:22:09
"12345".[Conv.to!(int)];

角括弧のほうが見やすそう。
786デフォルトの名無しさん:2007/11/10(土) 13:40:50
"12345".to!(int)で良いよ。無駄な冗長性はいらん。
安全に書きたいときは普通の形式で書けば良いんだし。
787デフォルトの名無しさん:2007/11/10(土) 15:14:34
某スクリプト言語風にすると
"12345".to#Conv!(int)
または
"12345".to!(int)#Conv
こんな感じかな
788デフォルトの名無しさん:2007/11/10(土) 16:55:10
Poseidonで
ERROR >>> Wrong DMD Path!!
とか出てコンパイルできないんだがどうすればいいんだ?
DMDのパスを指定してるのにできない
789デフォルトの名無しさん:2007/11/10(土) 17:00:58
>>786
無駄じゃないよ。
さっきも言ったように関数なのかメソッドなのか、関数ならどのモジュールの関数なのか
ぱっと見て分かるのは非常に保守しやすい。
自分の作ったものを自分で見る分には効果は薄いかもしれんが他人のソースコードを
見る時は非常に助かる。

Hoge hoge = new Hoge;
hoge.foo();

という記述があって、fooで何してるか見たい時に Hoge の定義見て、「あれ foo が無い」
となり、次は関数探すのにインポートしているモジュール見てそこから探し出すか、grep
かけた結果から探す羽目になる。

hoge.Bar.foo();

って記述してありゃ、Bar モジュールの foo()関数を読んでいるってのがすぐ分かる。
790デフォルトの名無しさん:2007/11/10(土) 17:04:56
>>788
dmd の1個上のフォルダ指すんじゃなかったっけ。
c:\dmd なら c:\ を指定する。
791デフォルトの名無しさん:2007/11/10(土) 17:06:54
>>789
ヒント: class Hoge{class Bar{void foo(){}}}
792791:2007/11/10(土) 17:07:34
ミスった。class Hoge{static class Bar{static void foo(){}}}ね。
793789:2007/11/10(土) 17:10:30
>>791-792
Bar モジュールインポートしてなければすぐ分かる話だよね。
794デフォルトの名無しさん:2007/11/10(土) 17:13:55
>>790
bin の1個上のフォルダ指すんじゃなかったっけ。
c:\dmd\bin なら c:\dmd を指定する。
795デフォルトの名無しさん:2007/11/10(土) 17:26:33
>>790,794
ありがとう。おかげでIDE環境で初コンパイル出来たよ(つД`;)
796デフォルトの名無しさん:2007/11/10(土) 17:27:13
>>793
まぁ、基本的にはそうだけど。
でも根本を無くすにはdmdがcallgraphを生成できるようになるのが一番だと思う。
797デフォルトの名無しさん:2007/11/10(土) 17:34:26
伝説のIDEが登場すればチップヘルプで教えてくれるよ。
798デフォルトの名無しさん:2007/11/10(土) 17:56:28
>>796-797
そりゃ、理想なんだけどさ。そのときは無駄な冗長になっちゃうね。
799デフォルトの名無しさん:2007/11/10(土) 18:09:46
hoge.Bar.foo();
このBarの部分が省略可能だったらいいのではないかと。
明示したいときは明示すればいいし。
800デフォルトの名無しさん:2007/11/10(土) 21:20:07
Barがmoduleなのかaliasなのかclassなのかstructなのか関数なのかメソッドなのか
プロパティなのかメンバ変数なのかが区別つかなくなって読みにくいコードになりそうだな。
…っておもったけどいざとなったらtypeofとかis式とか__traitsとかpragma(msg, ...)とか
stringofとかですぐに見つけられそうだな。
801デフォルトの名無しさん:2007/11/11(日) 05:52:35
>799のhoge.bar.foo()形式は、演算子の結合順序的にありえないだろうな。
>783のhoge.bar::foo()形式だと、mylib.barとかいうモジュール名とか考えると破綻する気が。
ありえるとしたら>784とか>785あたりのhoge.(bar.foo)()系じゃね?

>799の任意省略方式だと、static importとかで完全修飾を強制することによる
bar.foo(hoge)って記法に対して存在意義がないから、>800の言うような
混乱要素を無用に増やすだけになると思う。
>786で言われてることかな。
802デフォルトの名無しさん:2007/11/11(日) 09:13:28
>>801
関数呼び出し式は今も

IdentifierList  '(' ParameterList ')'

IdentifierList:
  identifier
  IdentifierList  '.'  identifier

だから、結合順序的には問題ないよ。意味論のフェイズで正しく処理できるようにしてやるだけ。
803デフォルトの名無しさん:2007/11/11(日) 09:17:07
804デフォルトの名無しさん:2007/11/11(日) 15:46:41
>>802
いやいや、お前が間違ってるよ。よく考え身。
805デフォルトの名無しさん:2007/11/11(日) 16:05:22
>>804
間違ってるとかいうなら根拠しめそうぜ
モジュール名は識別子じゃないとか間抜けなこと言う?
806デフォルトの名無しさん:2007/11/11(日) 16:12:14
>>805
結合順を考えろ。間抜け。
807デフォルトの名無しさん:2007/11/11(日) 16:14:03
ああ、マヌケにはもっと説明を加えないと分からないか。

abc.efg.hij()

これを結合順に括弧でくくってみろ。
それが既存の文法と矛盾しないか考えろ。
808デフォルトの名無しさん:2007/11/11(日) 16:31:40
'.'って、いつから演算子になったんだろう
809デフォルトの名無しさん:2007/11/11(日) 16:34:12
最初から
810デフォルトの名無しさん:2007/11/11(日) 16:42:14
演算子の結合順は実装依存。
結合順に依存するコードは誤り。
811デフォルトの名無しさん:2007/11/11(日) 17:05:44
>>810
お前頭大丈夫か?
そんなわけないだろ。
仕様で結合順は決まってるよ。
812デフォルトの名無しさん:2007/11/11(日) 17:12:04
釣り師おおすぎ
813デフォルトの名無しさん:2007/11/11(日) 17:38:22
土日だからな
はぁ…月曜日が待ち遠しい…
814デフォルトの名無しさん:2007/11/11(日) 17:41:22
月曜はニートだらけ
815デフォルトの名無しさん:2007/11/11(日) 17:41:24
とりあえず、「演算子の優先順位」でググって最初に出たサイト。

ttp://c-production.com/special/04092101.html

これは、Cのものだけど、Dも基本的なものは同じだよ。
816デフォルトの名無しさん:2007/11/11(日) 17:44:10
817デフォルトの名無しさん:2007/11/11(日) 18:01:49
>>811>>815
とりあえず、ここを読んでみようか
http://www.digitalmars.com/d/expression.html
Evaluation Order

Unless otherwise specified, the implementation is free to evaluate the components of an expression in any order. It is an error to depend on order of evaluation when it is not specified. For example, the following are illegal:
アホ多くてワロタ
818デフォルトの名無しさん:2007/11/11(日) 18:09:25
どっちにしろ、abc.efg.hij()は左結合だから、
(abc.efg).hij()と解釈されることはあっても、
abc.(efg.hij)()と解釈されることは無いな
819デフォルトの名無しさん:2007/11/11(日) 18:11:47
>>817
明らかにアホはお前。

評価順と結合順を勘違いしてる大バカ野郎。
820デフォルトの名無しさん:2007/11/11(日) 18:17:15
Barモジュールにあるfooってことで
hoge.foo@Bar()
とかどうだろう。

これでFugaモジュールにfooがある場合も
hoge.foo@Fuga()
っていけるし。

けど重複していない場合は
hoge.foo()
と省略して書けるとか。
821デフォルトの名無しさん:2007/11/11(日) 18:17:51
>>818
そうだけど、typeof(abc)からefgを探して、無ければグローバルから辿るでおk。
822デフォルトの名無しさん:2007/11/11(日) 18:19:09
>>818
式(expression.module)がexpressionとmoduleをpackしたデータを返すことにして、
それに対して.memberを呼び出したときに、module.member(expression)と解釈される。
ただし、(expression.module)のデータ型はコンパイル時にのみ存在し、変数等に保持することは出来ない。

と定義すれば何の矛盾もなくね?
823デフォルトの名無しさん:2007/11/11(日) 18:29:12
>>821-822
何でそんなに無意味に複雑にする必要がある。

というか、そんな風にしたら foo.Bar.hogeという式のBarが何なのかを探すのが困難すぎる。

モジュール名を記述させたい理由は
>って記述してありゃ、Barモジュールのfoo()関数を読んでいるってのがすぐ分かる。
ってことじゃなかったのかよ。
まるっきり逆効果になることを言って何がしたいんだよ。

824821:2007/11/11(日) 18:35:25
>>823
複雑じゃなくて実装的に自然だし。
825821:2007/11/11(日) 18:36:40
でも無いか、勘違いスマソ。
826デフォルトの名無しさん:2007/11/11(日) 18:38:31
>>824
一行目しか読めないのか?

つーか、実装的にも自然じゃねーよ。。

aaa.bbb.ccc.ddd.eee()

これがどういう探索をしないといけないのか、よく考えてみろ
bbb.ccc.dddというモジュールがあったら?
ccc.dddというモジュールがあったら?
827デフォルトの名無しさん:2007/11/11(日) 18:41:20
配列のプロパティ的構文で、

module util;
int sum(int[] array) { ... }
...
sum = a.sum;

関数が定義されてるモジュール名を書くようにするには、どうすればいいか、という話だったよね。

関数なら、util.func(array);で問題ないが、プロパティ的に呼び出すときには、
array.util.func;
なのか、
array.uitl::func;
なのか、とか云々。

一人、訳の分からない人がいて混乱してるけど、元々はこういう話だったということで。
828デフォルトの名無しさん:2007/11/11(日) 18:46:24
何も考えずに、

array.(module.func)でいいと思うんだけど。

これが気に入らない人の意見が聞きたい。
829デフォルトの名無しさん:2007/11/11(日) 18:49:56
それ以上省略できたら無意味に分かりにくくなるだけだしな。
830802:2007/11/11(日) 20:46:36
>>806>>807>>815
予想してた斜め上の回答がきててワロタ
構文解析とか意味解析とか知らないくせに左結合とか右結合とか
結合規則だけでコンパイラ語ってんじゃねぇ、ヴォケw

例えば、hoge モジュールの中に foo クラスがあって、bar っていうメソッドがあったとして、
hoge.foo.bar っていう字句列が何を意味するか分かる?
831デフォルトの名無しさん:2007/11/11(日) 20:50:39
>>830
何にも分かってないのはお前だけー
832デフォルトの名無しさん:2007/11/11(日) 20:53:06
やれやれ、結局煽るだけか。
まぁ、納得できないんじゃなく、理解できないんだからしょうがないが。
833デフォルトの名無しさん:2007/11/11(日) 20:55:24
>>832
つーかさ、なんで>802クンは>830で突然戻ってきた風なくせに、
突然>830でキレ気味に「ヴォケ」とかあおってんの?

そんなに悔しい出来ことがあったのですかー?
834デフォルトの名無しさん:2007/11/11(日) 20:57:09
はいはい、ごめんねー
835デフォルトの名無しさん:2007/11/11(日) 20:57:40
やれやれ、反論できずに非を認めて謝っちゃったか。最初からそうしとけばよかったのにな。
836デフォルトの名無しさん:2007/11/11(日) 21:00:09
うん、そうだね^^
837デフォルトの名無しさん:2007/11/11(日) 21:01:23
どうやらようやく理解できたようで。めでたしめでたし。
838デフォルトの名無しさん:2007/11/11(日) 21:02:32
はい
839デフォルトの名無しさん:2007/11/11(日) 22:11:43
わかったふりしたい時は
偉そうにクイズ出してごまかすに限るよな。
840デフォルトの名無しさん:2007/11/11(日) 22:12:29
上はじゃじゃ馬下はヘボ これなーんだ?
841デフォルトの名無しさん:2007/11/11(日) 22:23:20
ちんこ
842デフォルトの名無しさん:2007/11/11(日) 22:38:35
まあ>>833->>841は俺の自演なんだけどねー
843デフォルトの名無しさん:2007/11/11(日) 22:49:47
>>842
自演ってことにしたいの?そんなに悔しかったのかい?
844デフォルトの名無しさん:2007/11/11(日) 23:26:43
>>843
オマエガナー
845デフォルトの名無しさん:2007/11/11(日) 23:27:48
無駄なレスで消費するなよな・・・
と言うとこのレスも無駄だろと言われるんだろうけど。
846デフォルトの名無しさん:2007/11/11(日) 23:31:37
>>842-845
自演乙
847デフォルトの名無しさん:2007/11/11(日) 23:31:48
糞スレのいい再利用法だな
848デフォルトの名無しさん:2007/11/12(月) 00:10:00
>>846
くやしいのうwwwくやしいのうwww
849デフォルトの名無しさん:2007/11/12(月) 00:58:02
アイタタタタタ・・・

今日は802は悔しくて眠れないだろうなこりゃ。
850デフォルトの名無しさん:2007/11/12(月) 00:59:36
悔しがることかどうかもわかってないから大丈夫
851デフォルトの名無しさん:2007/11/12(月) 00:59:39
なんかスレのレベル下がったな
852デフォルトの名無しさん:2007/11/12(月) 01:01:42
俺のおかげだな。
853デフォルトの名無しさん:2007/11/12(月) 01:44:38
>>848
自演乙
854デフォルトの名無しさん:2007/11/12(月) 01:51:56
>>848=849
いい加減にしたらどうだ?
そこまでして勝ち誇りたいかね
855デフォルトの名無しさん:2007/11/12(月) 02:04:02
まだうだうだやってたのか。
せっかく俺が>>834を書き込んでやったというのに。
856デフォルトの名無しさん:2007/11/12(月) 02:13:06
でもそんなの関係ねー
857デフォルトの名無しさん:2007/11/12(月) 02:20:07
本当に悔しくて眠れないって、うけるwwwwwwwwwwwwwww
858デフォルトの名無しさん:2007/11/12(月) 02:21:06
いい加減に寝ろww
859デフォルトの名無しさん:2007/11/12(月) 06:01:30
おはよう諸君。
最後に書き込んだやつが、悔しくて最後まで起きてた奴ってことでいいかね?
860デフォルトの名無しさん:2007/11/12(月) 07:33:14
みんなみんな>>802
861デフォルトの名無しさん:2007/11/12(月) 09:22:08
>>859
悔しくて、朝一番に書き込んじゃったお前が NO.1だよ。寝てないんじゃない?
862デフォルトの名無しさん:2007/11/12(月) 10:27:38
下らない流れで加速させてもなあ(´・ω・)
863デフォルトの名無しさん:2007/11/12(月) 10:53:31
lazyって何につかってんのww
864デフォルトの名無しさん:2007/11/12(月) 12:32:11
>>859
おはよう>>802
865デフォルトの名無しさん:2007/11/12(月) 13:18:39
>>863
lazyとか、macroが導入されたら使い物にならなくなりそうな気がするな。
いまでもdelegateとか使えば表現できるし、使い道的にはぶっちゃけいらないんじゃね?
最適化のために使われたりするのかなぁ…

>>864
もういい加減その話題引っ張るのやめようぜ。
866デフォルトの名無しさん:2007/11/12(月) 18:00:38
引っ張れば引っ張るほどそいつの悔しさが露呈するという事実
867デフォルトの名無しさん:2007/11/12(月) 18:21:08
>>866
やめようぜ、頼むよ。
再帰には終了条件を設定すべきだろ。
868デフォルトの名無しさん:2007/11/12(月) 18:25:41
終了条件はスタック溢れて例外飛ぶまででおk
869デフォルトの名無しさん:2007/11/12(月) 18:56:51
末尾最適化されて無限ループに
870デフォルトの名無しさん:2007/11/12(月) 19:31:00
auto D言語_Part15 = std.thread.getThis;
D言語_Part15.pause;
871デフォルトの名無しさん:2007/11/12(月) 19:52:44
何をどう書き込んだって俺の勝ちなんだから、
もう諦めようよw
872デフォルトの名無しさん:2007/11/12(月) 20:13:26
じゃ俺も勝ちで
873デフォルトの名無しさん:2007/11/12(月) 20:16:29
じゃあ俺は負けで
874デフォルトの名無しさん:2007/11/12(月) 21:56:52
何の祭かと思ってスレ開く前に公式すっ飛んでった俺涙目
875デフォルトの名無しさん:2007/11/12(月) 22:13:13
DSSS つかってみたんだけど
dsss build でexeファイルができない・・・

1>Creating imports for DD-Debug
1>Creating imports for DD-dsss_objs
1>Debug => DD-Debug
1>WARNING: Section Debug has no files.
1>dsss_objs => DD-dsss_objs
1>WARNING: Section dsss_objs has no files.

ってでます。

dsss build main.d ってやればできるんだけど
ルートディレクトリでコマンド一発ってのがdsssの機能をつかいたいです
876デフォルトの名無しさん:2007/11/13(火) 00:40:31
dmd 2.007で

void hoge(void delegate() func){
func();
}

void main(){
hoge({goto End;});
End:
return;
}

をコンパイルするとError: label End is undefinedってなるのと
mainのreturn;をはずすと(ラベルの後がすぐ}だと)エラー出すのは仕様通り?
877デフォルトの名無しさん:2007/11/13(火) 00:51:03
ラベルの後ろには文がないといけない。
End: ; ってしてみるといい。
878デフォルトの名無しさん:2007/11/13(火) 00:58:46
>>876
gotoで飛べるのは同じ関数の中のラベルだけで、
関数から飛び出したり別の関数へ飛び込んだりは出来ないよ。
879デフォルトの名無しさん:2007/11/13(火) 01:38:38
>>874
(´;ω;`)ぶわっ
880デフォルトの名無しさん:2007/11/13(火) 05:34:50
継・・・続・・・?
881デフォルトの名無しさん:2007/11/13(火) 17:50:38
継続はいらね
882デフォルトの名無しさん:2007/11/13(火) 22:03:08
あのさ、1系列はもういらない子なの?
883デフォルトの名無しさん:2007/11/13(火) 23:32:21
まぁ、一度もまともに固まったことのない言語に安定版の3文字など存在しないから、
1.xは実質的には、単なる「試行錯誤の跡地」であり、要らない子かもしれないな。
そこに何かを求めるのは、ついうっかりDの安定性に賭けて何か作っちゃった人くらいだな。
884デフォルトの名無しさん:2007/11/14(水) 00:13:01
今ふと気づいたんだけど、-v1オプションていつからか消えてる?
885デフォルトの名無しさん:2007/11/14(水) 00:13:12
>>883
ヒドスwwwww
でもそんな感じだな・・・
2.0もそうなるんだろうな・・・
886デフォルトの名無しさん:2007/11/14(水) 00:19:54
>>884
2.xには最初からなかったと思うけど
1.xにもなくなっているのかな
887デフォルトの名無しさん:2007/11/14(水) 00:22:54
C♯も3.0出るしな
888デフォルトの名無しさん:2007/11/14(水) 00:26:53
>>884
2.001から
889デフォルトの名無しさん:2007/11/14(水) 23:48:23
unrecognized switch '-debuglib=tango-base-dmd.lib'
Tango入れたらこんなん出てきたんですが、
これはどっか設定変えないと駄目なんでしょうか。
890デフォルトの名無しさん:2007/11/14(水) 23:52:02
DMDが古いんじゃね?
891デフォルトの名無しさん:2007/11/15(木) 00:41:19
入れてる dmd が古くて -debuglib オプションを持ってないんだろう
892デフォルトの名無しさん:2007/11/15(木) 00:52:35
omg
そうだったんすか。
ありがとうございました。
893デフォルトの名無しさん:2007/11/15(木) 02:07:06
既出してたらゴメ。dmd2.007(win)で

import std.stdio;
void main()
{
auto A = new Object();
auto B = A;
delete A;
delete B;
writefln("end of process");
}
を実行すると、end of processは表示されるけど、
プロセスが終了しないんだが、

1.そういうことしちゃだめ。
2.今、gcがもっすごがんばってるからもうちょい待て。
3.delete式なんてただの飾りですよ。エロい人にはそれが分からんのです。
4.バグだけど直すほどの価値がない。
どれ?
894デフォルトの名無しさん:2007/11/15(木) 02:15:54
テキトーなクラスつくってデストラクタにwritelnでも入れとけば確認できるんじゃないでしょうか。
895デフォルトの名無しさん:2007/11/15(木) 02:19:45
ていうかよく見たら参照元がdeleteされたあとさらにdeleteしてるんすか。
これはやっちゃだめでしょう。
896デフォルトの名無しさん:2007/11/15(木) 04:25:33
気になって眠れないので調べたら、
「ポインタ、動的配列、参照変数は、 delete のあと null にセットされます。」
と言う一文が。
しかしこの場合nullがセットされるのは参照変数としてのA自体で、
Aの実体を参照してた参照変数のBはそのまんま(つまりゴミ参照してる)じゃないでしょうか。
なのでやっぱり複数の参照変数で参照されてる大元消したあとにdeleteするのはまずいかも。
897デフォルトの名無しさん:2007/11/15(木) 09:24:20
>>893
http://www.kmonos.net/alang/d/expression.html#DeleteExpression
 > それ以外の場合はガベージコレクタが呼び出され、
 > インスタンスに割り当てたメモリは直ちに解放されます。
とあるから、 delete A; でBが無効な参照になるのは確実だと思う。

ただ、解放済み(だけどもともとGCで確保した)領域への参照に対する
deleteについては仕様に言及がないと思うので、これは実装依存だと思う。
(つまり、実装によっては未定義動作となる可能性もあるということ)

実装依存となると、実装がどうなってるか分からない(今回の場合)なら
やっちゃ駄目な操作(選択肢の1)になるかな。
898デフォルトの名無しさん:2007/11/15(木) 15:19:41
ソースのどこで例外出してるか調べる方法ってありませんか?

dfl使ってツリービューとかにドラッグオーバーを何度か繰り返すと
例外吐くんですが、それがどこなのかわかりません。
899デフォルトの名無しさん:2007/11/15(木) 15:59:14
flectionedってそういうことできたっけ?
900893:2007/11/15(木) 16:09:45
>>894-897
あ、やっぱそっか。さんくす。
どうも4から疑ってしまう自分がいて、反省。
でも、例外とか吐いてくれるような仕様にならんかなあ。
901デフォルトの名無しさん:2007/11/15(木) 17:18:37
>>899
あれはTangoが無いと動かないみたいで。
dflとTangoの組み合わせは自分でやった限りでは出来なかったので。
902デフォルトの名無しさん:2007/11/15(木) 20:52:50
903デフォルトの名無しさん:2007/11/15(木) 21:26:28
突然でアレなんだけどさ、これ

module a;
private import std.stdio;

module b;
import a;
void main()
{
std.stdio.writefln("hello");
}

>dmd b.d a.d

が通るって初めて知ったんだけど、キモくね?
904デフォルトの名無しさん:2007/11/15(木) 21:32:41
きもいね
905デフォルトの名無しさん:2007/11/15(木) 21:34:31
きもいけどどういう挙動が正しいのか仕様にはっきりと書いてないね。
906デフォルトの名無しさん:2007/11/15(木) 22:43:37
http://www.kmonos.net/alang/d/module.html
>デフォルトでは、import は private です。
>これは例えば モジュール A がモジュール B を、
>モジュール B はモジュール C をimportしていた場合、
>Cの名前はAでは探索されないということです。
>ただし、 import を特別に public と宣言すると、
>その import が取り込むモジュール内の全ての名前が、
>現在のモジュールを外からimportするモジュールにも見えるようになります。

未定義になるべきなのでは
もしかして実はデフォルトがpublicなのかなーとか思って明示的にprivate import aにしてみたがやっぱり通るね。
907デフォルトの名無しさん:2007/11/15(木) 23:09:59
バグじゃない?
908デフォルトの名無しさん:2007/11/16(金) 00:00:36
>>903
それ、モジュールAとimport a;が無くても通るんだよね。
だから、仕様だと思ってた。
フル修飾だとimport不要、みたいな。
909デフォルトの名無しさん:2007/11/16(金) 00:01:33
それだとstatic importの立場がなくなるがな
910デフォルトの名無しさん:2007/11/16(金) 07:49:58
8ビットのビットマップクラスをつくてるんだが、streamのFileをオープンした瞬間にアクセス違反で落ちる。
Windowsなんだけど、なんでかな〜。いまのとこ、無いファイルを作ろうとしてるんだけど。
コンソールに違反だよ〜ってでるからAPI内部の犯行ではないはずなんだけど。
あ、コンパイラのバージョンは1.015です。

    bool Save(char[] name, bool IsIgnor = false){
        BitmapFileHeader bmh;
        bmh.bfType = 0x4d42;// 'B'<<8 + 'M';        
        
        if(exists(name) == true){
            if(IsIgnor == false) return false;
        }
        
        static if(IsDebug) writefln("file:",name);
        File fo;
        fo.open(name,FileMode.OutNew);
/*      if(fo.isOpen == false) return false;
        
        fo.writeBlock(cast(void*)&bmh,bmh.sizeof);
        fo.writeBlock(cast(void*)&bih_,bih_.sizeof);
        fo.writeBlock(cast(void*)Palette_,uint.sizeof*Palette_.length);
        fo.writeBlock(cast(void*)Pixel_,ubyte.sizeof*Pixel_.length);
*/      fo.close();
911デフォルトの名無しさん:2007/11/16(金) 08:22:13
newせいよ
912デフォルトの名無しさん:2007/11/16(金) 08:55:43
>>911
ぐあ。はずかし!またやってしまった!!
くそー。癖って抜けないね。
なんにせよ、レスありがとう!!!!
913デフォルトの名無しさん:2007/11/16(金) 18:16:10
aliasじゃインターフェイスを実装したものとみなされないのか…
914デフォルトの名無しさん:2007/11/16(金) 18:53:24
Tangobos→Phango
915デフォルトの名無しさん:2007/11/16(金) 19:05:07
Phagos
916デフォルトの名無しさん:2007/11/16(金) 21:15:53
Photangobos
917デフォルトの名無しさん:2007/11/16(金) 21:21:30
デバッグってvs2005でもいけるんでしょうか。
vs6だとうまく行くんだけど、vs2005だと作業フォルダ指定しても
ブレークポイントに反応してくれない。
918デフォルトの名無しさん:2007/11/16(金) 21:21:37
pthaonbgoos.
919デフォルトの名無しさん:2007/11/16(金) 21:46:48
phandango
920デフォルトの名無しさん:2007/11/16(金) 22:20:40
Tanpo
921デフォルトの名無しさん:2007/11/16(金) 23:16:22
Chi...
922デフォルトの名無しさん:2007/11/16(金) 23:32:45
>>889
>unrecognized switch '-debuglib=tango-base-dmd.lib'
自分もその現象が発生しました。Tango 0.99.3になってそのスイッチを使い始めたみたいです。
調査の結果、rebuildが-debuglibに対応できていないのが原因のようで、dsss最新版のrebuildを使ってみてもだめみたいです…
というわけで、dsssやrebuildを用いないでコンパイルするとうまくいくことがわかりました。
レスポンスファイルを作ってやるか、makeを活用するとよいかと思います。

というわけでそれを踏まえてDFL 0.96.01を使ってみたのだけど、いくつかはまったので使いたい方は以下を参考するとよいかと思います。
import\dfl\makelib.bat(23)にinternal/_stdcwindows.dを追加
import\dfl\makelib.bat(25)に_stdcwindows.objを追加
import\dfl\makelib.bat(34)の-v1を削除
でgo.batを実行してライブラリをビルドすることで解決したので参考までに載せておきます。
923デフォルトの名無しさん:2007/11/16(金) 23:39:00
>>917
ああそういうことだったのかな
前はソースレベルデバッグできてたのにいつの間にかできなくなったと思っていたら
924デフォルトの名無しさん:2007/11/16(金) 23:45:01
どなたかDflでドラッグドロップ系の処理が出来ている方っていますか?
いたらバージョンを教えてほしいのでスが。
925デフォルトの名無しさん:2007/11/17(土) 01:39:57
class A{
static void opBrace(void delegate() v){v();}
}
A{printf("brace");}
みたいなのが欲しい。
926デフォルトの名無しさん:2007/11/17(土) 01:44:01
q{} 文字列リテラルを追加しちゃったから、望み薄だな。
927デフォルトの名無しさん:2007/11/17(土) 01:48:39
>>926
あれは、{code();}.stringof とかの方がよかったと思うのにな。。
928デフォルトの名無しさん:2007/11/17(土) 01:48:48
tanpopo
tanbo
botan
popotan
bosan
929デフォルトの名無しさん:2007/11/17(土) 01:53:37
>>926
a(b)があるけど、opCallもあるから大丈夫だ。
930デフォルトの名無しさん:2007/11/17(土) 01:55:55
>>929
いや、そういうことじゃなくて…
931デフォルトの名無しさん:2007/11/17(土) 02:12:34
q{}を無くせばおk
932デフォルトの名無しさん:2007/11/17(土) 02:20:01
どういうことだ?
printf(q{A{"huga\n"}});は通る
933デフォルトの名無しさん:2007/11/17(土) 02:43:14
>>924
ドラッグドロップ系使う時は
Application.run(...) を呼び出す前に Application.autoCollect = false; として、
頻繁にGCが走らないようにすると、とりあえず落ちるのは回避できるみたい。
必要な領域までGCに解放されてしまってるのかも…
934デフォルトの名無しさん:2007/11/17(土) 02:55:40
直りました!

助かりましたありがとうございました。
935デフォルトの名無しさん:2007/11/17(土) 03:21:23
mixin(q{aaaaaaaaaaaaaaa});
//error!
936デフォルトの名無しさん:2007/11/17(土) 07:50:54
phungus
937デフォルトの名無しさん:2007/11/17(土) 08:15:23
matango
simeji
enoki
shitake
938デフォルトの名無しさん:2007/11/17(土) 10:27:00
ttp://www.dsource.org/projects/tango/wiki/0_99_3_release
・DMD builds no longer generate libphobos.a/phobos.lib, but instead utilize the -defaultlib switch.
This enables phobos to install side-by-side with Tango
・Also note that there is an experimental D2.0 branch in our repositories now.
939デフォルトの名無しさん:2007/11/17(土) 11:22:11
940デフォルトの名無しさん:2007/11/17(土) 11:35:17
>>932
頭悪いのな。お前。
941デフォルトの名無しさん:2007/11/17(土) 12:08:26
よく言われる
942デフォルトの名無しさん:2007/11/17(土) 12:14:43
よく言われる932
よく言い、よく陰で思われる940
943デフォルトの名無しさん:2007/11/17(土) 13:23:45
よく言われる932
よく言い、よく陰で思われる940
よく言い、よく影で思われ、それに気づかない942
944デフォルトの名無しさん:2007/11/17(土) 14:17:02
class q{
static string opBrace(void delegate() d){return d.stringof;}
}
class q{
static string opBrace(string s){return s;}
}
とかできれば、q{}はいらないと
945デフォルトの名無しさん:2007/11/17(土) 14:58:13
そもそもqは何のためにあるの
946デフォルトの名無しさん:2007/11/17(土) 15:01:26
mixin(q{ some_valid_code_here; });
947デフォルトの名無しさん:2007/11/17(土) 17:09:11
>>946
ありがとう
えーとじゃあ↓じゃなくて
mixin("some_valid_code_here;");
そうしたい場合ってのはどんなとき?
948デフォルトの名無しさん:2007/11/17(土) 17:39:11
文字列と整数を合体させたい場合ってどうやるんでしょうか
949デフォルトの名無しさん:2007/11/17(土) 17:43:54
>>947
mixin(q{ this is not valid tokens; }); // error
mixin(q{ this_is_valid(); });

ってことじゃね。
950デフォルトの名無しさん:2007/11/17(土) 17:49:33
>>948
std.conv.to!(string)
951デフォルトの名無しさん:2007/11/17(土) 17:59:29
mixin(" this is not valid tokens; ");
でもエラー出ね?
出るエラーが違うのかな
952デフォルトの名無しさん:2007/11/17(土) 18:12:02
>>951
変数に格納したりするなら、エラーの出る場所が違うな。
953デフォルトの名無しさん:2007/11/17(土) 18:26:50
みんな分かってるみたいなのに
q{}の意義が全然わからなくて俺涙目
>>949 それをどういうときに使うのかと
954デフォルトの名無しさん:2007/11/17(土) 18:48:38
mixin て何か分かってんのかね、おまいは。
955デフォルトの名無しさん:2007/11/17(土) 19:00:36
わかりやすく説明すると、トークン文字列 q { ... }の内部の文字列は、Dのトークンであるので、
Dの字句解析をパスしなければならない。
つまり、文字列が、Dのソースとして解釈可能であるかどうかを判別できる。
956デフォルトの名無しさん:2007/11/17(土) 19:01:46
q{}なんてあったの初めて知った。
コードを文字列として渡すときに、ダブルクォートの中にコードを書くなんていう、
エディタ支援が受けられない(どころかむしろ邪魔になる)苦行に挑まんで済むわけね。
957デフォルトの名無しさん:2007/11/17(土) 19:04:00
え?そうなの?
俺は、変態なことやってる場所を簡単に検索できるためだと思ってた。
958デフォルトの名無しさん:2007/11/17(土) 19:50:02
import std.stdio;
void main() {
const a1 = "\"hoge\"";
mixin("string c1=mixin(\"mixin(\\\"\\\\\\\"huga\\\\\\\"\\\")~\\\"hoge\\\"\") ~ mixin(a1);");
writeln(c1);

const a2 = q{q{hoge}};
mixin(q{string c2=mixin(q{mixin(q{q{huga}})~q{hoge}}) ~ mixin(a2);});
writeln(c2);
}
どっちがいいかとか
959デフォルトの名無しさん:2007/11/17(土) 20:19:35
import std.stdio;
void main() {
const C = q{ mixin(A) + mixin(B) };
const A = q{ a };
const B = q{ b };
int a = 10;
int b = 20;
writeln( mixin(C) );
}
こんなことできたりとか
960デフォルトの名無しさん:2007/11/17(土) 20:39:42
なんという遅延評価…
961デフォルトの名無しさん:2007/11/17(土) 20:49:09
import std.stdio;
void main() {
const s = q{mixin(s)};
writefln(mixin(s));
}
962デフォルトの名無しさん:2007/11/17(土) 20:59:16
q{}はmixin用ってことでおk?
963デフォルトの名無しさん:2007/11/17(土) 21:00:15
import std.stdio;
alias string symbol;
template add(symbol o, symbol v) {
const add = `mixin( q{`~o~`} ) + mixin( q{`~v~`} )`;
}
void main() {
const c = add!(q{a},q{b});
int a = 10;
int b = 20;
writeln(mixin(c));
a = 100;
b = 200;
writeln(mixin(c));
}
964953:2007/11/17(土) 22:21:54
>>954
mixinは大丈夫

他のレスは後で試してみます
なんか分かりそう
ありがとん
965デフォルトの名無しさん:2007/11/18(日) 03:48:38
べつに構文はvalidじゃなくとも字句だけDの範疇ならOKだよね?
q{int int class class invalid;}とかやっても大丈夫だし。
966デフォルトの名無しさん:2007/11/18(日) 04:33:28
実行時mixinないかなー
967デフォルトの名無しさん:2007/11/18(日) 04:39:23
opStarAssignマダー
968デフォルトの名無しさん:2007/11/18(日) 07:46:51
亀ですまんけどちょっと質問>>542どうやって?
int a,b,c;
Tuple!(a, b, c) = Tuple!(10, 20, 30);とかって無理じゃね?
969デフォルトの名無しさん:2007/11/18(日) 09:04:33
>>968
template Tuple(T...) { alias T Tuple; }
970デフォルトの名無しさん:2007/11/18(日) 09:07:40
もしかしてDMD古いとできない?
971デフォルトの名無しさん:2007/11/18(日) 11:12:39
>>970
1.023/2.006 でバグフィックスされてできるようになったのでそれより古いとダメ
972デフォルトの名無しさん:2007/11/18(日) 13:26:30
obj[index] = value;
はopAssignでオーバーロードできるけど、
obj[index] += value;
みたいな複合代入をオーバーロードする方法ってある?
973デフォルトの名無しさん:2007/11/18(日) 13:36:38
opAddAssign
974デフォルトの名無しさん:2007/11/18(日) 13:39:55
あ、配列か。
opIndexでオブジェクトを返すとか

()がいるけど
975デフォルトの名無しさん:2007/11/18(日) 14:22:19
>>971
1.020使ってたよ・・・(´・ω・`)
バージョンうpしたいけどgdcがなあ・・・
976デフォルトの名無しさん:2007/11/18(日) 14:39:31
opIndexOpAssign
opStarAssign
opStarOpAssign

このあたり追加して欲しい
977デフォルトの名無しさん:2007/11/18(日) 15:00:41
Opってなんだ?
978デフォルトの名無しさん:2007/11/18(日) 15:27:53
AddとかDivとか
979デフォルトの名無しさん:2007/11/18(日) 15:29:19
opSliceOpAssign
opCallAssign
opCallOpAssign

もお願いします!
980デフォルトの名無しさん:2007/11/18(日) 16:26:29
obj(arg) = val;



…さすがに要らんと思う。
981デフォルトの名無しさん:2007/11/18(日) 16:27:55
obj(arg) += val;
きんもーwww
982デフォルトの名無しさん:2007/11/18(日) 16:34:26
perlだと関数呼び出しがlvalueになれるよな。
まあ、下駄雪駄を合わせたプロパティ的用途か、スライスへの代入の用途が主だから、
Dなら別の機能で間に合ってるけど。
983デフォルトの名無しさん:2007/11/18(日) 16:51:25
opCallで内部クラスでも返せばよくねwwwww
984デフォルトの名無しさん:2007/11/18(日) 23:02:43
985デフォルトの名無しさん:2007/11/19(月) 08:06:43
あとすこしで落ちるからたわ言など。

公式で、ユーザライブラリコンテストとかやらないかねぇ。
一回総集編を作ってほしい。
現状、フレームワークは決定打ないし、グラフィックライブラリはないし、サウンドライブラリも無い。
でもなぜかZIPはあるし、細かいスパイスのきいたライブラリがそろってるのもまー事実。
Tangobosの問題もあるし、V2系のラストで是非やってほしいと結構おもてる。
問題はいつV2系が安定するかだなぁ。。。
986デフォルトの名無しさん:2007/11/19(月) 08:23:40
あと15レス分は何に使うかな。
987デフォルトの名無しさん:2007/11/19(月) 08:31:00
Truetypeフォントを動的ロードできて、さらに描画できたら、結構汎用性あがるかなぁ。
ファイルフォーマットの内容しらないし、ライセンスがどうなってるかは知らないけど。
プログラムの場合ってラスタフォントのほうが相性いいのかなぁ。
988デフォルトの名無しさん:2007/11/19(月) 08:41:07
インターフェースの設計っていい叩き台ないもんですかね。
現状、Bitmapのインターフェースの設計をてきとーにやってるんですけど、
うまく全部(1〜32びっと)に当てはまるインターフェースが良くわからないです。
総合あーかいばプロジェクトは割りとその辺の設計が良かったから普及したようなもんだし。
なんか、いい手はないもんかなぁ。
989デフォルトの名無しさん:2007/11/19(月) 09:04:06
規制に引っかかったので自重
990デフォルトの名無しさん:2007/11/19(月) 13:47:25
>>982
perlのlvalueってあれ単に参照返してるだけに見える俺は異常?
991デフォルトの名無しさん:2007/11/19(月) 16:26:04
中間言語導入による部分的な動的コンパイルの実現!
992デフォルトの名無しさん:2007/11/19(月) 16:41:26
中間言語いらんからコンパイラを標準ライブラリに(ry
993デフォルトの名無しさん:2007/11/19(月) 16:47:31
>>988
よくわからんが、
void[]でビットイメージを保持しておいて、
インデクサを用いて適切に変換するようにすればいいんじゃなかろうか。
994デフォルトの名無しさん:2007/11/19(月) 17:04:36
>>988
>707だけど同じ目的なので設計を話し合ってみませんか?
私はピクセルに触る部分だけ専用の関数を作って、これをピクセルフォーマットごとに変えるようにし、
それ以外の塗りとかその他は必ずその関数経由で触るように設計しました。

あとで自分がやった内容についてファイルをうpしてみます。
995デフォルトの名無しさん:2007/11/19(月) 17:23:34
>>990
参照返してるだけだな。
ただの構文糖
996デフォルトの名無しさん:2007/11/19(月) 18:17:27
俺の欲しいもの:
* プロパティに対する複合代入
* ラムダ式

をるたん、クリスマスプレゼントまってます。
997デフォルトの名無しさん:2007/11/19(月) 18:33:38
それまで>996はいい子にしてないとな
998デフォルトの名無しさん:2007/11/19(月) 20:28:25
999デフォルトの名無しさん:2007/11/19(月) 20:30:25
1000デフォルトの名無しさん:2007/11/19(月) 20:30:45
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。