そういえば980超えると一定時間でdat落ちだっけ。 いちおつ
お
ちゃんと前スレ冒頭の話を覚えててくれたみたいだな
>>1 乙
乙ー。
otsu(std.thread.Thread.getThis[1]);
class Otsu(int no){ static void delegate() opCall(){ return {writefln(">>",no,"乙");}; } } Otsu!(1)()();
Stdout.formatlnを間に入れるとうまく動くっって 一体どういう理由なんでしょうか。 単にどこで落ちてるか調べてるだけのtest1,test2って 出力してるだけなんですが。
>>11 よくわからない異常終了の原因が、-Oスイッチによる最適化だったことがある。
dsssて奴を使ってますが、-g しか使っていません。 ImageListを自作しただけなんですが・・・・・ tango+dflでのソースです。 module imageList; private import dfl.all; private import tango.io.Stdout,tango.io.FilePath,tango.sys.win32.Types, tango.sys.win32.UserGdi; class ImageList { HIMAGELIST list; HANDLE cont; this(HANDLE cont) {this.cont = cont; Stdout.formatln ("test"); this.list = ImageList_Create(16,16, ILC_COLOR32 | ILC_MASK ,0,0); Stdout.formatln ("test1"); SendMessageW(cont , 4361, 0, cast(int)this.list); } public: void add(char* ifile) { short i = 0; Stdout.formatln ("test2"); HICON icon = ExtractAssociatedIconA(Application.getInstance(), ifile,i); Stdout.formatln ("test3"); ImageList_ReplaceIcon( this.list ,-1, icon ); Stdout.formatln ("test4"); } }
お騒がせしましました。 特に何処もいじってないんですが、 落ちなくなりました・・・・。
よく分からないけど直ってたっていうのは一番危ないケースだと思いますが。
経験からするとたいていバグが眠りについた(そしていずれ目を覚ます)ケースが多い。
よく分からないけど復活しました とか?
opAddressないのー?
opStarはある。
Starて名前はどうなんだ
いいんじゃない、Kleene starって用語もあるし(参照外しの*とは関係ないけど)
toString的なものってないんですかね。
std.conv.to!(string)
opAnus
string opCast
Tangoにはないんでしょうか
Stdout("{}",Integer.itoa!(char,int)(new char[32], 1)).newline やっとできました。 これが噂のテンプレートと言う奴ですね・・・ ありがとうございました。
なんでそう難しく考えるかね。 toUtf8(123456789); で、できるよ。
stableリリースみたいなのはないんすか? 変更履歴でバグフィクスばかりしてて仕事で提案もできないよ
1.xがstable。バグといっても致命的なバグは数えるほどしかないから大丈夫だと思う。
そして致命的なバグにぶつかり悩む羽目になる。
契約プログラミングの雄となるべき言語なのにおかしいよね
wxWidgetsのD版つかってるひといますか?
dsssを使っていて、 例えばtxはライブラリ化してあるからわざわざコンパイルしてくれなくてもいい、という時どうやってそれを教えてあげたらいいの? 別に問題になるわけじゃないんだけどなんかやたら無駄がある気がして凄く気分が悪い……。
>>35 dmd\etc\rebuild\phobos
をテキストエディタで開いて何か思うところはないだろうか?
…俺もよく知らないからここまでしか言えない。
unittestがonになってるときに定義されるversionとかある?debugでもいいし
38 :
デフォルトの名無しさん :2007/11/23(金) 19:02:32
根本的にミスってたらすまないんだが dmd 2.007で interface hoge{ int test(); } class fuga:hoge{ int test(){return 5;} } void main(){ hoge[] test; fuga[] test2; test2.length = 1; test2[0] = new fuga(); test = cast(hoge[])test2;//明示的にキャストしないとエラー test[0].test(); } ってやるとコンパイルは通るが実行時にtest.fugaって表示される。 配列だと継承の意味が無くなるのはかなり困るんだが
ごめんsage忘れた・・・
>ってやるとコンパイルは通るが実行時にtest.fugaって表示される。 ?
>>38 根本的に間違ってるよ。
import std.stdio, std.conv;
interface I { }
class C : I { }
void main(string[] args) {
C c = new C;
I i = c;
writeln(cast(void*)c);
writeln(cast(void*)i);
C[] cc = [c];
I[] ii = cast(I[])cc;
writeln(cast(void*)cc[0]);
writeln(cast(void*)ii[0]);
ii = to!(I[])(cc);
writeln(cast(void*)ii[0]);
}
42 :
41 :2007/11/23(金) 19:35:10
要するに配列のcast()はC++でいうところのreinterpret_cast相当
サンクス!!!!!!!!!!!!!!!!1111 渡すときにto使ったら実行時エラー消えた!!!!111 マジでありがとう!!!!
なるほど、オブジェクトの配列は1要素ずつキャストしないといけないのね。
別にオブジェクトに限らないよ。 例えば、int[]をbyte[]にキャストしたら要素数4倍になる。 void main() { auto a = [1,2]; writeln(a.length); writeln((cast(byte[])a).length); }
46 :
44 :2007/11/23(金) 23:24:38
>>45 基本データ型や構造体の配列については、C言語でのポインタの扱いと同じなので理解できてます。
Python で eclipse + PyDev とか wxPython とか py2exe とか 色々浮気してみたら D より Python が好きになってしまった とりあえず D はしばらく忘れることにします ごめんなさい 何年後かにはまた皆様にお会い出来ることを 期待してもよいのでしょうか?
ノシ D言語が枯れたころにくるといいよ。 今は黎明期過ぎてexternを駆使しないと実戦投入は辛いだろうし。
IDEのPoseidon
http://dsource.org/projects/poseidon まだ活動してたんですね。
知らないうちに、入力補助やDdbgにも対応してるみたいです。(以前使ったのは1年以上昔)
. ドットを入力する際にメンバのリストが表示される。
メソッド名の後の ( カッコを入力する際、引数の型などが表示される。
10分ほど使って気になった点
・既存のソースはPoseidon側で保存しなおさないと、アウトライン表示と入力補助が働かない。
・デバッグでブレークポイントを設定する方法がわかりません。(´ω`);
asm{int 3;}
51 :
49 :2007/11/24(土) 01:52:48
Ctrlキー押しながら行番号の右側クリックで、ブレークポイントの設定/解除できました。
>>49 それだけできるようになったのなら
そこそこ使えるのかもしれないなーとおもた
Cで作ったdllを使う場合ってどうやるんでしょう? libファイルをimplibで変換したんですが、undefinedが出てしまうんですが。
マイクロソフトのimplib使ってるならCOFFからOMFに変換する必要がある。
COMは使えるんだっけ
つかえるよ
version (D_Version2) invariant(char)[] X = "ver2"; else char[] X = "ver1"; これがD1でコンパイルできない D_Version2 って意味あるのかな…
マジかよww
ここにきてTangoのtoUtf8がtoStringに変更とかすごい今更だがでかい変更だな。 ……ちょっとわくわくした。
コンストラクタの引数ってどうにかタプルで取れないかな
引数の型リストか。 traitsのParameterTypeTupleにthis渡したくてもどうすればいいかわからん/(^o^)\
トンクス! でもthisオーバーロードしてたらどうも動きがうまくない・・・
65 :
64 :2007/11/25(日) 16:57:38
あ・・・ mixinだって>をれ
そういうときこそ、q{}の出番… って思ったが、v1でq{}つかえねえんだな
おお D1とD2の両方に対応できる書き方初めて見た。なるほどね。 それってinvariant()の括弧ありなしもカバーできるの? 今出先なので確認できない
version(D_Version2) const ClassInvariant = "invariant(){_invariant();}"; else const ClassInvariant = "invariant{_invariant();}"; class C { private void _invariant(){ assret(false); } mixin(ClassInvariant); }
そうまでコードをわけわかめにしてまで 二つのバージョンに対応する価値はあるのだろうか
俺なら、モジュールで分けてversionでimportを変えるかな。
D2ならCTFEでinvariantをinvariant()に置換してmixinすればいいんじゃね?
72 :
57 :2007/11/25(日) 22:24:03
>>64 ,
>>70 なるほど…ありがとう。参考にする。
でも、
>>69 の言うとおりそこまでして分けるくらいならD1対応版とD2対応版の2つを別物として作ったほうがいいような気がするな。
そうなるとやっぱりD_Version2の使いどころがわからん…
そもそもversion(D_Version2)の内容も文法的に正しくないとコンパイルが通らないあたりは問題にならないのかな。
v2以前の文法のコンパイラ機能がdmd.exeにまるごと載ってて versionで切り替わってくれるとかでもない限り、 ほんとに使いどころは無い気がする。 D_Version2ってタダのversion識別子だよね?
>>73 だよ。
そもそも、V2なってからもかなり変更ある気がするが、気のせいだろうな。うん
Version3への布石なことはあきらか。
DMDって無償で商用に使っていいコンパイラですか?
2chでライセンス関係の情報訊いて動ける商用って一体…
license.txt を嫁
dsssむじい budが気楽でいい
>Phobos is now on dsource (゚д゚)ポカーン
それよりも2.008まだー
dmd2.007だとopengl32.libをちゃんと読んでくれないのはどういうことか dmd2.000だと大丈夫なのに
kokoro ga oreta
じゃあこれで心置きなくTangoに移れそうだね
伝説のIDEができるまでにこけそうな勢いだなこりゃ
ここのみんなで日本語化しちゃおうか
NewsGroup盛り上がってるな 直前の流れは知らないんだがTangoとPhobosを統合するのかな? 「両方のコーディングスタイルの違いはどうするの?」とか言ってるし あとまだ運用がよくわからないから 「誰が全体の設計の管理を受け持つの?」とか話しているようだ
> 「誰が全体の設計の管理を受け持つの?」 今までのTangoの人じゃ駄目なの?
TangoってDっぽくないんだよなあ。そこがあまり好きになれない。
俺に十分な時間があればもっと素晴らしいライブラリ作って見せるんだが
俺も俺も ニートでやってくれる人いないのかな?
>>94 よんだ?
っと冗談はおいといて、スレようにレンタルのWikiでも取る?
既にある奴で足りてるだろ。 情報が分散するだけだから何個もいらんよ
それもそうか。
つまりboostがやってるみたいに新規ライブラリを受け付けて acceptしたりrejectしたりする機構があればいいのか はてなスターが積み上がる光景が見えたが 母体が2chじゃ投票制にしたら破綻するかなw
>>92 俺はconduitの概念がしっくりこないんだよね
ようはstreamなのか?
だったらstreamでいいだろ条項とか思っちゃって
static foreachまだかなあ それとCTFEでForeachRangeが使えないのを早く直して欲しい
>>99 streamというよりstreambufのような感じなんじゃないかな。
streamはstreamで別にあるし…
Phobosのtrunkが熱すぎる件について std.functional std.algorithm その他もろもろ
まじかよwww
>>103 ちょ、これから落としてくるw
2.0専用? 1系列でも使えると嬉しいんだが……。
Phobosはじまったな
>>103 見たとこあんまり面白い変更無いような…。
1.024/2.008
バグフィックスとphobosの拡張がメインか。 typeof(return)とか実際使う場面なさそうだし
Assertion failure: 't->deco' on line 608 in file 'mtype.c' abnormal program termination コンパイラバグってるな。@2.008
>>36 ってdsss.confあたりから設定できない?
budだと-Xあたり? が似たようなオプションになってるっぽいんだけども。
なんか今回のバージョンアップ微妙に反応少ないけど Added const and invariant to IsExpressions これはなんか嬉しい。 あと、 Added const/invariant structs, classes and interfaces. これが気になっている。何に使えるんだろう?
budだと version(build) pragma(nolink); でobj作らないようにして version(build) pragma(lib, "tx.lib"); などとする
wxDでかすぎwwwwwww わなDのテストやってみたら3.12MB^q^ これは・・・
>>112 おれも気になった。
迷走って言葉が頭をよぎった
たしか、constメンバってstaticに配置されるんだよな?
structとclassでは使い道が思い浮かばんけど、 interfaceなら使いどころもあるんじゃなかろうか。 const interface ICountable { size_t count(); } みたいな。
インターフェースって頭にIつけたほうがいいの?
MSハンガリアンだよね。頭にIつけるの。 でも、Iつけてる人は多いねえ。
俺は、インターフェイス名と同名でインターフェイスの標準の実装を 作りたくなることが結構あるから、名前重ならないようにIつけてる。
同名のプロパティ作りたいからプライベート変数の尻にアンダースコアつけてるけど、似たようなもんか。
俺もそのへんなやみつつハンガリアン的とか尻_とかしてるけど、 一般的になにがいいのかねぇ
メンバーならm
個人的に@インスタンス変数は好き
Dじゃ@は使えないからなぁ。 VC++だと$使えたりする。使わんけど。
const変数にコンパイル時に決定されない値を入れられるんだけど、 これって仕様に適ってるの? const l = readln;
digital marsのサイトからの引用だけど int x = 3; const int *p = &x; *p = 4; // error, read-only view const int *q = &x; int z = *q; // z is set to 3 x = 5; // ok int y = *q; // y is set to 5 ってなコードがある、仕様だと思う。 Cでもローカルのconst変数宣言時にコンパイル時に決定されない値入れれるし、 その辺の仕様を引き継いでるんじゃない?
>>127 そっかー
phobos見てても本来ならfinal使うべきところでconstって書いてたりするから仕方ないのかな。
数カ月おきにやる気を補充した所で細かい仕様が変わってるから困る
へ?finalあるのにconstがその仕様なんだw そのうちreadonlyとかできたりして
initonlyマダァ-? (・∀・ )っ/凵⌒☆チンチン
constって型がconst型になるfinalだろ?
D1.0のconstはコンパイルタイム定数だったよなあ D2.0のconstはそれプラスreadonlyなのかな?とか漠然と思ったまま放置してた俺 D2.0になってconstがどういう意味なのかがわかりにくくない?
>>133 おれもそう思う。
>>132 の解釈でいいのかな?
あとinvariant型とconst型の使い分けがよくわからん。
関数の引数にconst型を使ったとして、「俺は書き換えない」と宣言しても、その関数を実行しているときに
誰かに書き換えられちゃったら読み込んだりとかした時に予期しないエラー起こさない?マルチスレッドのときとか。
関数の戻り値は「書き換えるな」という意味でconst型でいいような気もするけど。
昔はconst変数をコンパイル時定数以外で初期化しようとしたらエラーなってた気がするんだが
>>135 を改めて読み直してみたのだが
C++のconstにはコンパイル時定数とreadonlyの2つの意味があって,
C++とD1.0のコンパイル時定数としてのconstはD2.0ではinvariantが請け負って,
C++のreadonlyのconstをD2.0ではconstが請け負うってことかな
/* D2.0
コンパイル時定数 => invariant
readonly => const
*/
138 :
127 :2007/12/01(土) 01:06:50
139 :
134 :2007/12/01(土) 01:07:51
>>135 そこは読んだよ。結構前だけど。
それでなお、具体的にはconst型とinvariant型の引数の使い分けがわからん。
たとえばPhobosのstd.string.splitの引数がconst型じゃないのは何でだ?
その辺の明確な指針がほしい。
void func(D)(in D dg) { dg(); } void main() { func({printf("test");}); } //(7): Error: cannot implicitly convert expression (__dgliteral1) of type void delegate() to const void delegate() あれ?私何か間違えたましたか>< inにconstが入るからダメっぽいんだけどinってこういう使い方じゃないの?
どうして readonly なのに書き込めるのはなぜ?
1.020でコンパイルできてたSHA512のライブラリが2.007でコンパイルしたらフリーズした semantic2で止まってるらしいけどsemantic2が何かわからね
>>139 splitは文字列のスライスの配列を返すから、
もとの文字列が変更されてしまうと、結果がおかしくなる。
144 :
143 :2007/12/01(土) 13:49:14
コードであらわすとこんな感じ。 import std.stdio, std.string; void main() { auto s = "aaa bbb ccc".dup; auto a = split(cast(invariant)s); // 危険なキャスト writeln(a.join("-")); s[0..5] = "ddddd"; writeln(a.join("-")); }
それは危険なのはキャストであってidupを使えば解決ってことにはならないの?
146 :
デフォルトの名無しさん :2007/12/01(土) 13:59:59
>>143-145 もしsplitの引数の型がin char[]だったら、普通に
auto a = split(s);
とできてしまう。
invariant(char)[]だからこそ、危険なキャストのような無茶をしない限り安全。
と言ったほうが分かりやすいかな。
>>142 semantic2はsemanticが全て呼び出された後呼び出されるフェーズ。
詳しくはソース嫁
149 :
デフォルトの名無しさん :2007/12/01(土) 14:21:36
>>141 >const宣言された変数を通してデータを書き換えることはできないが、 同じデータを参照する別の箇所がデータを書き換えることは あるかもしれない
constからはreadonlyだから書き込めない。だけど、他のconstでない参照からは書き込める。
今までinvariant,const,finalの違いや使い道が分からなかったんだけど、理解できたかも。 まとめると invariant->コンパイル時定数,書き換え不可 const->readonly,他の参照から書き換え可能 final->初期化以降は書き換え不可,invariantやconstと違ってfinalな変数の指す値は書き換え可能 あれ、じゃあ"初期化以降は書き換え不可"かつ"指している値も書き換え不可"はどう表現するんだ?
>>151 サンクス 自分のレベルの低さを痛感したorz
>>150 こういうことかな?
import std.stdio;
void main(){
int a = 1;
int b = 2;
final const int* p = &a;
*p = 10;//a.d(8): Error: *p is not mutable
p = &b;//a.d(9): variable a.main.p cannot modify const/invariant variable 'p'
}
あれ被ったか
final const(int)* p;と書くべき。
普通にconst int* p = &a;でいいんじゃないの?
>>156 多分実質はそれでもいいけど、
>>146 でも言ってるように仕様としてはコンパイル時未決定でもいいのか怪しいし、
finalみたいに"コンストラクタ内では何度も書き換えられる"性質を持ったものを考えてた。
ついでに初歩的なことですまんが、
final const int* p;
と
final const(int)* p;
の違いって?
158 :
134 :2007/12/01(土) 17:12:18
>>143 ,
>>147 なるほど。確かにstd.string.splitだとinvariant型のほうがいい気がするな。
もしconst型だったら、
> 必要なのは、データを絶対に書き換えないという保証のもとにモジュールから関数にデータを読み取らせるプロトコルです。
を満たすための条件(戻り値のデータに書き換えが起こらない条件)が関数の定義からだけでは読み取れず、
ドキュメントを参照して注意しなければならない、という面倒なことが起こるからな。
じゃあ、std.string.countならどうだろう?関数の実引数にしてから関数が終了するまでの間だけ
他から書き換えられないように注意すれば引数がconst型でもいいような気がするんだけど。
これならドキュメント見なくてもconst型の使い方から終了まで書き換えちゃいけないということは判断可能だし、
戻り値がuintだから関数が終了した後まで面倒を見なくてもいい。
char[]型を実引数にするために.idupによる無駄なコピーもしなくていいし、cast(invariant)みたいな無茶なキャストも使わないですむ。
>>157 たぶん、こうだと思うよ。
const(int*) p = &a; //p「int*」が書き換え禁止
int x = *p; //○
*p = 10; //○
p++; //×
const(int)* p = &a; //pの指し示す先の「int」が書き換え禁止
int x = *p; //○
*p = 10; //×
p++; //○
final const int* p = &a; //p「int*」書き換え禁止、かつpは初期化後は固定。(冗長?)
int x = *p; //○
*p = 10; //○
p++; //×
final const(int)* p = &a; //pの指し示す先の「int」が書き換え禁止、かつpは初期化後は固定。
int x = *p; //○
*p = 10; //×
p++; //×
>>159 なるほど
ところでいちいち.dupするの面倒なので
mutable to immutable(const/invariant) : deep copy
immutable to immutable(const/invariant) : shallow copy
となるのはどうだろう?
>>159 const(int*) は const(const(int)*) と同じ。
const Type var; は final const(Type) var; と同じ。
ただ、2.008ではfinal記憶クラスが正しく機能していない。
記憶クラス周りは結構複雑だなぁ。 invariantメンバ関数は、コンパイル時に定数に置き換えられそうだな。 使いこなせれば強力だけど、そこまでが大変だぁ。
ん?invariant void foo()で実現できる事って何があるんだろう?
>>162-163 を見て気になったけど、
>invariant メンバ関数では、 this参照経由で参照される全てのデータがinvariantであることが保証されます。
struct S
{
int x;
invariant void foo()
{
x = 4; // エラー。x は invariant
this.x = 4; // エラー。x は invariant
}
}
これはつまりS.xはコンパイル時決定変数?
そうなるとSのメンバ変数はすべてコンパイル時決定って意味になるけど、それは使い道がない気がする...
>>165 invariantでないメンバ関数を追加すればいいじゃない。
const int* p; って宣言で、constはストレージクラスのはずなのに、 typeof(const int*) が、typeof(const(int*)) と同じように働くのが気持ち悪い。
168 :
165 :2007/12/01(土) 19:34:50
えーと、 たとえばSを struct S{ int x; int y; invariant void foo(){ x = 4; //エラー、xはinvariant } void var(){ x = 4; //これはNG? y = 5; //これはOK? } } とした場合どうなる? xはfooでinvariantとして扱われているから、varで書き換えたら怒らるんじゃないかと心配してるんだけど。 で、yはfooからは参照されてないからvarからは普通に書き換え可能? テストすれば分かることを聞いてすまん。時間あったらテストするんだけど。
時間あるじゃんw
>>168 invariantメンバ関数はinvariantな型に対してしか呼び出せないから、
fooを呼び出せる場合は、varは呼び出せない。
171 :
147 :2007/12/01(土) 19:49:48
>>158 countについては、俺もconstでいいと思う。
172 :
165 :2007/12/01(土) 19:54:15
>>170 "invariantな型に対してしか呼び出せない"というのはどういうこと?
invariant void foo()があることでSのメンバ変数がすべてinvariantになるという認識は間違いでしょうか。
static関数はインスタンスのメンバ変数にアクセスできないのと同じ理屈を書いてるだけでしょ。 invariantはコンパイル時に解決できなければならないってのを意識すれば分かりやすいかな。
174 :
165 :2007/12/01(土) 20:09:08
>>173 つまり
S s1;
invariant S s2;
s1.foo(); //呼び出せない
s2.foo(); //呼び出せる
ということ?これなら納得できる。
俺の説明が悪かったのかな?時間あるんだから、テストしようね。
176 :
165 :2007/12/01(土) 20:18:42
そうですね。すみません。 本当は今パソコンつけてる暇無い時期なんですけどね。これだけインターネットしてたら確かに同じだな;
つまり、 invariant変数はコンパイル時に決定され、ROMに配置される可能性があり、ポインタをとってはならない invariant型の変数は実行時に決定でき、書き換えられることはないと保障される invariantメンバ関数はコンパイル時に解決できる const変数は実行時に決定できる const型の変数は実行時に決定でき、書き換えてはならない constメンバ関数は実行時に解決される static変数はコンパイル時に決定され、実行時に変更することができ、スコープによらずデータが保持される こうか?
>>177 > invariantメンバ関数はコンパイル時に解決できる
これが仕様呼んでる限りだとよくわからん。
普通にモジュールスコープにある関数とか呼べるし
invariantメンバ関数から参照できるのは、invariantなメンバのみってことでは。
いかん。誤解をまねく。 invariantメンバ関数から参照できるメンバは、invariantのみ。 のほうが正しい。
invariantメンバ関数からthisポインタを通じて参照されるオブジェクトはinvariantと仮定される、 じゃないか?
このエラーはいったい? test.d(3): statement expected to be { }, not int struct S { int x; invariant int y; }
ここらへん明日整理してみるか。
184 :
182 :2007/12/01(土) 22:02:29
公式サイトの方しかDL2.0のコンパイラはないのね
いまさらなんだけど alias char[] string;で invariant(string)ってした方がきもちよくねconst stringとか。 今char[]とstringを使い分けなきゃならんのがギモヂワルイ
>>186 確かに気持ち悪い
でも invariant(string) s; が invariant(char[]) s; になって
今の invariant(char)[] じゃなくなるから意味が変わっちゃうね
とはいえ他の手はこれくらいしかないんじゃなかろうか
alias char[] string;
alias const(char)[] cstring;
alias invariant(char)[] istring;
alias invariant(char) ichar; とかをたくさんつくればいいのかな!
中途半端にstringなんてaliasを標準に入れるから面倒になった悪寒 いっそstring使わない方向でいこうかな・・・
↑で final const invariant いろいろ議論していた方々ありがとうございます おいらも理解がふかまりました
191 :
デフォルトの名無しさん :2007/12/02(日) 10:29:21
>>185 なるほど、メンバ関数になるとほんと複雑だな。
>>185 の
>mutable/const のメンバ関数あるいはオブジェクトを経由すると invariant メンバ関数を呼び出せない
これはなんでなんだぜ?
invariant メンバ関数から const メンバ関数を呼び出せないのはわかるが、 mutable から const や invariant を呼び出せないのはよく分からん。 そもそも変数なら const は invariant に昇格できるんじゃなかったっけか?
mutableからconstは呼び出せると思うが
ごめん、mutable から invariant のメンバ関数だけだった。
mutable/constからinvariantを呼び出せない理由は コンパイル時/実行時の違いが関係ありそうなんだけど よく分からないんだ・・・
invariant→const : ok mutable→const : ok あとは全部だめ
constさいきょう!
>>196 invariantメンバ関数はinvariant型のインスタンスに対してしか呼び出せないんだから、
mutableメンバ関数の呼び出せるインスタンスに対しては絶対に呼び出せないし、
constメンバ関数の呼び出せるインスタンスは、mutable型かconst型だけで、
invariantメンバ関数が必ずしも呼び出せるとは限らない。
│mutable型│const型│invariant型 mutableメンバ関数 │ ○ │ × │ × constメンバ関数 │ ○ │ ○ │ ○ invariantメンバ関数│ × │ × │ ○ こういうことだろ?
戻り値がmutableで、関数がconstの場合はどうすればいいんだろう?
何も悩む必要はないと思うけど。 class C { const C dup() { return new C; } } void main(){ auto c_const = new const(C); auto c_mutable = c_const.dup; writeln(typeid(typeof(c_const))); writeln(typeid(typeof(c_mutable))); }
使い分けはこうか class A { const int a() { return 1; } cosnt(int) b() { return 2; } const const(int) c() { return 3; } }
え、もしかして const int i;と const(int) i;ってかなり意味違う?
うあ、おれもいま初めてしった。 C++でいう class C { int foo() const; }; ってどうやるんだろうとずっと思ってた
これかなり問題ある気がするんだど、どうだろう。 void main(){ invariant(int) i; auto p = &i; assert(is(typeof(p) == invariant(int)*)); i = 2; writeln(*p); // 2 i = 3; writeln(*p); // 3 } pの指す先はinvariantのはずなのに、合法的なコードでかわってしまうという
やばい、今一理解できない orz import std.stdio; public class S { int mutable_num = 1; const(int) const_num = 20; const int const_num2 = 21; invariant(int) invariant_num = 30; invariant int invariant_num2 = 31; } void main() { S s = new S(); writeln("mutable_num: ", s.mutable_num); writeln("const_num: ", s.const_num); writeln("const_num2: ", s.const_num2); writeln("invariant_num: ", s.invariant_num); writeln("invariant_num2: ", s.invariant_num2); } -- output --- mutable_num: 1 const_num: 20 const_num2: 21 invariant_num: 30 invariant_num2: 4296960
>>208 それはinvariant記憶域クラスの変数の話で、
invariant型のauto変数のポインタの話には触れてないよね。
invariant int i; と invariant(int) i; は一応ちがうものだと思うんだけど。
型がinvariantなのと変数がinvariantっていう違い?
>>211 そう。
現在の文法では、invariant型のデータを保持するミュータブルな変数が許されてる、様な気がする。
213 :
208 :2007/12/04(火) 00:27:32
>>210 あ そうか
型と記憶域クラスで違うんだね・・・
214 :
205 :2007/12/04(火) 07:16:49
const int i; const(int) i; が違うのは分かるけど。後者は使い道はないよね?
関数の引数に使えたりしない? invariantでもmutableでも受け取れる・・・みたいな
メンバだと invariant int も const int もクラス変数に取られるみたいだけど invariant int がインスタンス変数としてアクセスするとどっかのアドレス返すのは何故だろう? constはメモリを使い、invariantは使わないという差なら、エラーにすりゃいいのに。
>>217 どういうこと?
>>209 のこれのこと?
invariant_num: 30
invariant_num2: 4296960
それそれ。仕様上、メモリにとられない=直値に置き換え?みたいだし、何が取れてるんだろうと。
それは、ただのバグじゃねえの? 俺の環境(2.008/windows)だと mutable_num: 1 const_num: 20 const_num2: 21 invariant_num: 30 invariant_num2: 31 となったが。
あらら
2.007と008との間で対応入ってるみたいね。 const型がコンストラクタで初期化できなくなってるし、 今は使いこなそうと思わないほうがいいのかも。
じゃあ2.009待つか… マダァ-? (・∀・ )っ/凵⌒☆チンチン
どうせ3ヶ月くらいで古くなるんでしょ
Tangoまだ1.0も出てないのにw
枯れてwxWidgetsが対応したら、気軽にクライアントに仕えるのにな
Tango・・Phobosと仲良くしてほしいなぁ
Ultimate Tangobos まぁ〜だぁ〜?
なんかStream.readf壊れてる気がするんだけど…
アルティメット・タンコボキバジとな
タンゴボスとガバスはどっちが偉いんですか?
丹古母鬼馬二 ってなんだこのトンチンカンな名前。 具ぐれ化す。並の名前だなぁ。初めてきいたよ。
void hoge(ref const real r) { } void main() { real r; hoge(r); } dmd止まる\(^o^)/
>>237 その類のバグは既に報告されている気がする
phobosのrepositoryが全然変化ないなあ
tangoでFIFOが高速に扱えるcollectionってないのかな? 最初ListSeqがそれかと思ったがこれはなんかLIFOのみ高速に扱えるみたいで… なんかC++のSTLのlistとかに比べると使い勝手悪い感じだなぁ…
phobosのtrunkに単方向リストSList(T)が追加される兆しがあるよ まだprivateらしいけど
SListは最新版DMDに入ってるじゃん。
あれ・・・編集したってだけか
Dがでてきて結構たつのに未だにコンテナすら整備されてないんだな STLを置き換えられる程度には用意して欲しいもんだ
壮大なDTLの計画が現在進行中だが、 あまりにも壮大すぎて全く完成していないのが現状。
ここでなんか寄せ集めのライブラリ作ろうぜ 必要なときにdファイル落としてプロジェクトに組み込む系のやつ
DTLのプロジェクトってもう動いてないんじゃ・・・ スマートポインタはGCあるからいらないとして(ほんとに?) 主要なコンテナとアルゴリズムくらいでいいや あわよくばストリーム系まであれば万万歳
tangoでいいじゃん
イテレータクラスのかわりにopApplyがあると思ってたんだけどopApply自体あんまり融通利かないんだね
Javaを参考にAPIのインタフェースだけ揃えりゃライブラリも揃えやすいはずだけどね。 D自体、言語を枯らそうという気が皆無だから、ライブラリなんて作れないってのもあるかも
tangobosでおk
Phobosって、設計とか何も考えずに、このぐらいの機能はいるだろって感覚だけで作っていった印象があるべ。 もうちょっとスマート(に拡張できる)設計をしてくれればなあ。
まあ、そのためのtangoだろう
Dってどのへんが支持してるの?
このスレ
(ダリオ戸田の声で)辞書猫の Tango だっす!
>>257 ほんとだ
もっとがんばれ。超がんばれ。
というかperlってpythonより下なんだ・・・早いなぁ
1%未満から1.6%に増えるとか大健闘だな やっぱいつまで経っても正式版が出ないから敬遠する人間が多かったんだな
Dより上になんか壁を感じるw メジャーの壁というか。「ここからが本当の地獄だ……!」みたいな。
最強のライブラリと伝説のIDEが現れればC++なんて目じゃないよ。
俺もpythonの位置に違和感があるなあ
いずれ日本語を正しく扱うクラス要るし早めに作っとこうぜ
Phobosってcharsetをサポートしてないのな。 windowsのコードページ変換のみサポートしてる感じか?
MangoにICUのD-bindingあった気がするんだが
こういう特殊化できるようにならないかな。 void func(T : function)(T f) { f(); }
現状だと、aliasで受けるしかできないんだっけ。
どんなに仕様や実装が素晴らしくても
>>264 が駄目だと結局駄目なんだよね・・・
その言い回しだと
>>264 が駄目な人間みたいじゃないかw
ライブラリはともかく、IDEに頼るのは駄目ジャマイカ?
仕様や実装が固まらんかぎり良いIDEは出てこないんじゃね?
いつのまにかクラスをtypedefできるようになってた・・・orz ついにこう書けるんだね・・・! つーかいつできるようになったんですか>< //class HogeError : Error { // this(string msg) { // super(msg); // } //} typedef Error HogeError;
継承関係はどうなるの? 何か派生だとしっくりこないし、同じ実装を持つ他人になる?
全く同じClassInfoを持つけど、オーバーロードでは区別され、 typedefもとの型には暗黙変換できる型 になるみたい。
説明だけみるとなんかダウンキャストできなさそうだな。 出来なくてもいいけど。
同じClassInfoをもつのに、ダウンキャストできないってことある?
D2.008 Exceptionから、fileとlineがきえた えぇぇ・・・
>>281 外部にリリースするものとして、ファイル名だの行番号だのが入っているバイナリってどうなの?
と思っていたから別にそれでいいと思う。
でもデバッグ時にはほしい情報だよね。
VistaSP1のdfrgntfs.exeなんかはもろにソースファイルのパスとかが入ってる 評価版だからだと思うけど
>>282 伝説のIDEが現れれば例外発生元を突き止めてビジュアルに表示してくれるよ!
罠D
MSがVisualStudioで出せば・・・ 万が一にもありえんか
MSがVisualStudioで出すことになれば仕様策定の遅さに苛立って 独自拡張を続け、ライブラリもMS独自のものが出来上がるだろう。 そう思うと当初のJavaと同じ問題抱えているな・・・
MS Visual D# ... それはそれでよさそうな気がしないでもない
ネイティブバイナリ吐かないDなんてC#でいいじゃん・・・
それならVisual D/CLIで…
>>274 IDEが何やってるのか分かる限りは、むしろIDEもライブラリも「使うべき」だと思う。
とeclipseのリファクタリング機能に味を占めたヘタレの俺が言ってみる。
強い型付けとかコンパイルの早さとか、IDEがあると生きてくる言語だと思うから余計勿体ないのよね。
しかし、年の瀬も押し迫ってきたな……
去年の1.0への期待でwktkしながら年を越したっけなぁ。
来年のDは果たしてどこへ向かうことやら。
正月にはお空の火星に向かってみんなでお祈りだ。
1月1日にv1.001が出たんだっけ? あれ?
じゃあきっと、あと2週間で3.001がでるな。
もうそんなになるっけ??
0.99リリース ↓ ついに1.0が来るぞー! ↓ 0.100リリース ↓ (゚д゚) は2004年頃だったっけ?
次のバージョンうpまだー
static foreachまだかお?
import std.metastrings; pragma(msg, Format!("%s%s", 1, 2)); %sが直に出力されちゃうんだけど、使い方間違ってる?
>>299 2.008ではうまく動いてないように見えるなあ
MC++DのアンドレイがThe D Programming Languageって本書くよってさ
ttp://erdani.org/ Andrei is working on "The D Programming Language" book, slated to hit the shelves in October 2008.
His interest in the D programming language stems from Andrei's active participation in the design of D 2.0
as a close collaborator of D's creator, Walter Bright.
あー 先週京都に来てたんだ
Andrei will present the paper "Graph-Based Learning for Phonetic Classification" co-authored
with Katrin Kirchhoff at The 2007 IEEE Automatic Speech Recognition and Understanding (ASRU)
Workshop, December 9-13, Kyoto, Japan.
これは期待
役に立つとか立たないとかじゃなく、好きな小説家の新作みたいに楽しみなんだけど、 これはちょっと妙な期待をしすぎかもしれんw
日本語訳が出る頃には半分くらいコンパイル通らなかったりして そもそも日本語訳が出るかはさておき
今時ならXMLベースでリソースファイル作ればいいんだけどね
>>302 本が出ることも単純に楽しみだけどこの文で一番気になったのは
D2.0をOctober 2008頃には安定させるつもりだってこと
3.0をリリースするってことだろw
ペロ・・・これは思い込み・・・!
誤爆
関数のインライン展開って何か条件ある? -inline オプションつけても全然効果無いんだけど。
インライン展開したら効率悪くなると判断されてるんじゃなかろうか
逆逆。むやみにインライン展開されて逆に遅くなってるだけ。
-inlineつけたらどこまでインライン展開されるの? main以下全部ってわけじゃないよね
いやいや、例えば配列の境界チェックありで要素を取り出そうってので以下のような コードでテストしたらテンプレート化したほうは確実に遅いんだよね。-inline つけてもつけなくても。 size_t at(T)(T[] a, size_t i){ if( i < a.length ) return a[i]; else throw new ArrayBoundsException(null, 0); } void main() { char[] a = new char[64 * 1024 * 1024]; auto begin = timeGetTime(); for(size_t i = 0; i < a.length; i++) { if( i < a.length ) a[i] = a[i]; else throw new ArrayBoundsException(null, 0); } Stdout.format("{}", timeGetTime() - begin).newline; begin = timeGetTime(); for(size_t i = 0; i < a.length; i++) { a[i] = a.at(i); } auto end = timeGetTime(); Stdout.format("{}", timeGetTime() - begin).newline; }
316 :
315 :2007/12/19(水) 23:40:33
で、上のコード実行すると最初のテンプレート化してないほうが 75ms ぐらいで、 下のテンプレート化したほうが 350ms ぐらいだった。-inline つけてもつけなくても一緒。 -inline つけたやつを逆汗したら当然展開されていなかった。
どうでも良い事でスマソ。 逆アセって事は、直接アセンブラを吐けないコンパイラなの?
?? もっと平易な表現でお願い。
マイクロソフトって単位?
dsss + Tango でリソースファイルをリンクするのにはどうするの? dmd-win-tangoとかdsss.confとか見たけどよくわからんかった…(´・ω・`)
dmdの場合はオブジェクトファイルをdmのobj2asmにかければ大丈夫じゃね?
更新まだかなぁ・・・
>>324 じゃあこれで。
Tango 0.99.4 Frank has been released.
D言語ってJavaのJFrameみたいに簡単にウインドウ出せるの?
AWTのD-portingのDWTを使ってみるとか。
DFLならこう
//
http://www.dprogramming.com/dfl.php import dfl.all;
int main()
{
Form myForm;
Label myLabel;
myForm = new Form;
myForm.text = "DFL Example";
myLabel = new Label;
myLabel.font = new Font("Verdana", 14f);
myLabel.text = "Hello, DFL World!";
myLabel.location = Point(15, 15);
myLabel.autoSize = true;
myLabel.parent = myForm;
Application.run(myForm);
return 0;
}
tango の最新版、日付・時刻関連が少しすっきりしたけど、まだ手の入る余地がありまくってるな。
>>327 DWTはSWTよ
あと開発止まってるぽい
とりあえずTango0.99.4のtango.util.Convertの792行目あたりがあやしい。 returnで返さないっぽい
DFLは付属のdfl.exe使わされるのが嫌で使ってないなあ dmd.exeだけでできたい!
dmdでも長ったらしいオプションつけるか、応答ファイル書くかしておけばいけるでしょ。
寧ろDFLのモジュールとlib以外の使い道知らんかった
ヲルたんからのクリスマスプレゼントwktk
実際もうじき約一か月たつし、先月と先々月の更新の日付から見たら夢見てもいいかも? とりあえず全裸待機。
風邪ひくぞ
いい子にして早く寝ないとな… をるたんのとこでは今何時かしらないけど
339 :
デフォルトの名無しさん :2007/12/25(火) 22:36:46
>>110 でも出てるけど
Assertion failure: 't->deco' on line 608 in file 'mtype.c'
はいつなおるんだあああ
全裸待機。 この前のカンファで目玉はなんだっけ あまり意味なさそうな static foreachしか覚えてないw
const属性を考慮してphobosが書き換えられているようだ
>>340 macro
ADL
拡張メソッド
static引数(関数テンプレートの糖衣構文)
メンバの委任
コンパイル時に全てのcaseが網羅されているか検証するfinal switch
あたりだったか。
343 :
331 :2007/12/26(水) 21:03:27
Tango0.99.4のtango.util.Convertの792行目あたりがあやしいかったのは、rev3066で直ったみたいだ。 しっかし、Tangoもどこまでやったら1.0出す気なんだろ。 まぁ確かにもっとインターフェース良くなるところは多いと思うけど。
2.0で追加されたphobosのライブラリを 1.0でも使えるようにするプロジェクト std2 が dsource にできてるね
それよりアップデートはまだなのか
extern(C++)便利だなこりゃ
>>346 あれってC++のソースのコンパイルをmsvcではなくdmcでしなきゃいけないんだよね?
そう思ってstlportのセットアップが面倒で試してないんだが面白そう
C++のobjもOMFとCOFFって分け方でいいの? DMDはOMDってことになるのかな?
>>347 いやいや、VisualStudioで作成したやつだよ。
〜.libをlink.exeにくわさないとだめだけど
正確には dmc も msvc も同じ修飾名を使っているので問題がない。 Linux ではどうなってるかしらん。
extern(C++)といえば、interface宣言を使ってC++のオブジェクトをDからアクセスできるようになったけど、これの場合はCOMと同様にC++マングルは関係なくなるのかな?
いえす。C++マングリング規則にD側が合わせることになる。
COMインターフェイスってどういう条件で普通のインターフェイスからCOMインターフェイスになるの? IUnknownを継承するだけでいいの?
>>352 ?
DのinterfaceがC++のオブジェクトモデルと互換性があるということで、実際のシンボル名関係なしにVTbl手繰ってメソッド呼べるのかなぁと思ってたんだが、この場合でもあの_ZN3なんとかみたいなシンボル名からメソッドを呼び出しているの?
>>353 MS用語でいう"カスタムインターフェイス"ならIUnknown継承だけでCOMインターフェイスだったと思う。
実際にCOMコンポーネントとして使えるようにするにはいろいろ登録したり、QueryInterfaceの動作要件とかあったはず。
>>353 extern(Windows)なinterfaceだったと思う。
>>353 IUnknownって名前のインターフェイスを継承するだけでいいみたい。
interface IUnknown { }
interface ITest: IUnknown { }
void main(){
ITest o;
delete o; //Error: cannot delete instance of COM interface ITest
}
COMインターフェースが何に使えるかおすえて
DLL を通してクラスを提供可能。
えw
>>349 ごめんできない
// cpp.cpp
#include <iostream>
#include "cpp.h"
void Cpp::func() {
std::cout << "call Cpp::func()" << std::endl;
}
Cpp* newCpp() {
return new Cpp;
}
void deleteCpp(Cpp* instance) {
delete instance;
instance = NULL;
}
これをmsvcでコンパイルして cpp.lib もしくは cpp.obj を作った
362 :
361 :2007/12/30(日) 01:04:06
// main.d extern(C++) { interface Cpp { void func(); } Cpp newCpp(); void deleteCpp(Cpp instance); } void main() { Cpp cpp = newCpp(); cpp.func(); deleteCpp(cpp); } >dmd -c main.d >link main.obj cpp.lib OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved d_to_cpp.lib Error 43: Not a Valid Library File --- errorlevel 1 何がまずいですか?
363 :
361 :2007/12/30(日) 01:06:09
間違えた C++のソースはcpp.cppじゃなくてd_to_cpp.cpp
364 :
349 :2007/12/30(日) 07:27:19
ごめん、 libにくわすんじゃなくて implib.exe だった C:\dm\bin\implib.exe /s $(OutDir)\$(TargetName).d.lib $(TargetPath) こういうことをやってます。 で出力された 〜.d.lib を lib.exe でリンクね
皆さんよいお年を をるたん来年もよろしく 2008.1.1の更新きたい
366 :
【小吉】 :2008/01/01(火) 03:26:27
あけおめ アップデート期待age
あけおめ をるたんところは、夕方ごろ年明けだよね。
ああ、アメリカかあ。生アメリカだよなあそこ。いいなあ。。。
D3.0が出ると聞いて
D 0.2008 になると聞いてやってきました。
今年こそは伝説のIDEが現れますように
その前に伝説の言語仕様が現れないと
2.009ktkr…なにこのがっかり変更数 裏で何か巨大なものを作ってると思って待つしかないか…
これはがっかりすぎる…
CTFE周りのバグフィックスはまあ嬉しい
新バージョンへの期待大きすぎワラタ > Redid const/invariant semantics again. やり直し…? どう変わったのかよく分からないや。
>>376 void f(const(int) x);
void f(int x);
のオーバーロードが出来るようになってるのは確認した。
invariant(int) i;
i = 4;
もできなくなってるから、トップレベルのconst/invarinatの扱いが変わったみたいね。
379 :
378 :2008/01/02(水) 01:06:56
invariant T var; invariant(T) var; ドキュメントによれば、この二つが完全に等しくなったみたいだね。 やっと気持ちの悪いねじれが解消された感じ。ようやくだけど。
全く同じ関数が二つ以上あっても呼ばれなきゃエラーにならなくてワロタ。
>>380 おおほんとだ。
リンカエラーにはなるけど、コンパイラはお咎めなしなんだな
Manifest Constant enum string s = "hoge"; もはやenumの意味が消失してしまってる…
だめだ…をるたたん止めないと… class C { } void main() { const(C) c; c = new const(C); // error!!! }
struct A {} A a0; const A a1; a0= a1; //Error: cannot implicitly convert expression (a1) of type const(A) to A をるたん・・・
>>384 それは今まで出来たのがおかしい気がする。
>>386 例えば、Aがint*型のメンバを持ってたとしたら、
const(int)*からint*への暗黙の型変換が起きてしまうと思うのだけど。
>>387 const(int*)にならないの??
おれがわかってないのか??
>>387 ポインタを含む場合だけエラーってのでいいと思うんだけどなあ。
393 :
390 :2008/01/02(水) 12:31:13
>>377 これなおらなきゃまともに窓作れないよ・゚・(つД`)・゚・
budで-Xphobosつけないとphobosのソースもコンパイルされるという事実に気づいた 自動で付いてるもんだと思ってたのに・・・ひどい!
char[] hoge = new char[100]; と char[] hoge; hoge.length = 100; ってなんか違うことってある?
意味的には違わないはず。生成されるコードは知らないけど。
構造体をcast(const)できないんだけど、どうすればいいんだ。
>>399 コードplz あとそれどんなときに必要?
struct S {int i;} void main() { auto a = [S(0), S(1)]; auto b = [cast(const)S(0), S(1)]; // Error: no property 'opCall' for type 'const(S)' } const(S)[] 型の配列リテラルが欲しいんだ。
>>401 これじゃダメ?
import std.stdio;
struct S{int i;}
void main(){
const x = [S(0), S(1)];
writefln(typeid(typeof(x))); // (const(const(main.S)[2])
}
配列リテラル周りはいつもバグに悩まされるから使わない方が
トラブルに遭わずに済んでいいかと
const(S) a = S(0); const(S) b = cast(const(S))S(0); 確かに、暗黙に変換できるのに、明示的にキャストできないのは気持ち悪いな。
404 :
402 :2008/01/04(金) 02:26:57
どうもconst(S)とS(0)を同時に実現できないみたいなので下のzのようにするしかないんじゃない? import std.stdio; struct S{int i;} void main(){ const x = [S(0), S(1)]; writefln(typeid(typeof(x))); // (const(const(main.S)[2]) auto y = [S(0), S(1)]; writefln(typeid(typeof(y))); // main.S[2] const s = S(0); auto z = [s, S(1)]; writefln(typeid(typeof(z))); // const(main.S)[2] }
これでおk auto a = [delegate const(S)(){return S(1);}(), S(2)];
似たようなやり方を前にも見たような気がする
phobosに16進文字列を整数に変換する関数ないの?
と思ったけど、CTFEできないといけないから、いらないや
もしかして引数なしの関数って、() なしで名前だけで呼び出せるのか
yes. プロパティっぽく扱えるようになってる。
>>408 それくらいの関数って作れなかったっけ?
yes. プロパティのための構文糖。
リロし忘れてたごめんorz 答え方まで似てるってのが笑える。
>>411 CTFEできないとダメだから自前でこしらえるしかない、って言いたかったのさ
>>410 ,412
なるほど、Ruby チックでいいね
それってプロパティじゃない関数までgetterとして振舞うってことだよな。 LL好きにはいいんだろうけど、ちょっとやだな。 getter/setter相当がオーバーロードされているときと、 getterのみはローカルキーワードで対応ってならんのかな。
引数がない関数にわざわざ()をつける必要がないってのは自然な感じがするんだけどなあ。
まあ副作用が無ければ自然に思える。
420 :
デフォルトの名無しさん :2008/01/07(月) 22:25:16
その情報を取り出すことで何かが変化するのなら、それを使用するときに変化すると言うことが明確でなければならない。 つまり関数には後ろに「( )」が必要。
>>417-419 Delphiも、引数なし関数は省略できたな。
>>420 上の行としたの行がつながらん。
()があれば、必ず副作用なるわけではないでしょう?
副作用があるかどうかは、メソッド名とドキュメントで明示すべき。
命名をちゃんとしとけばそれほど違和感ないと思う。 process.kill thread.start window.close stream.flush something.toString
基本的に、名詞はプロパティ、動詞はメソッドというのが一般的じゃないかな。
そういや、Rubyも括弧いらないんだよな。
Ruby で慣れてるから副作用があろうがなかろうが括弧無しで違和感ないわ
>>417 個人的には変数がクラス外部からはconstに見えるアクセス制御がほしい。
class Foo {
int hoge_;
int hoge() { return hoge_; }
}
とか書くのも冗長、最適化されるか分からないのが嫌、みたいな。
っつかそういう制御っていまできましたっけ?
>>426 constメンバ関数
class Bar {}
class Foo {
int hoge_;
const int hoge() { return hoge_; }
Bar bar_;
this() { bar_ = new Bar; }
const const(Bar) bar() { return bar_; }
}
そういうことじゃなかろう。
readonlyにするってこと?
話ぶったきるが、連想配列では char[][char[]] m; m["foo"] ~= "bar"; と m["foo"] が lvalue になるんだけど、自分で作ったクラスが opIindex で配列を返すと 当然のことながら lvalue にならない。どうにか関数で配列の参照を返すことってできんだろうか?
opIndexAssign? ~= みたいな複合演算子は使えないけど。
それか、プロキシオブジェクトを返すか、だね。
phobosにmap, filter, reduceとか配列操作関数が欲しいよう
>>431 代入(=)じゃなくて連結(~=)したいんだ。
いちいちプロキシオブジェクト作るのは面倒だし、困ったものだ。
あと、配列とかにも演算があるんだから opCmp とか呼べりゃ良いのに・・・
ソート用に比較するときに == と < (または > ) の2回比較しなければいけないから困る。
細かいところで融通きかんよなぁ。
>433 Lisp屋さんか?それともPython屋さんか?
>>434 インデクサやスライサの複合代入がオーバーロードしたいって要望はずっと前からあるが、
実現される兆しはないな。プロキシオブジェクト返すしかなさそう。
TypeInfo使えば、プリミティブ型を含めて任意の型の比較が汎用的に出来るよ。
int[] x = [1, 2, 3], y = [1, 2];
writeln(typeid(int[]).compare(&x, &y));
java7で言語仕様に盛り込まれるというプロパティ仕様がかなり羨ましくてしょうがない。 お決まりの実装は自動生成してくれたり……をるたんも影響受けてくれないかなぁ。
>>439 > 内部からもプロパティでアクセスすりゃいいかな。
継承に影響が出るから、別の意図が無ければそうすべきだよ。
442 :
434 :2008/01/09(水) 22:58:21
>>436 おおお、そんな方法があったのか。ありがとう。
というか、インスタンスが同じかどうか調べる(x is y 式と同じ)ものだと思ってたよ。
opCmp は呼べないのにどういう仕組みになってんだろ。。
>>442 std.typeinfo以下に全部ソースあるから読んどくといいよ。
>>439 なるほど。 ありがとう
これはいい文法砂糖
>>353 アイ ウンコ ナウ
と読んでるでのは俺だけじゃないはず
お前だけだろw
ウンキングナウ!
動きないのかなあ
WPFでウィンドウを表示するのには成功したんだが、 イベントの受け取りをどうするか…
std.threadにsleepがないんだが、どっか別の場所にある?
452 :
デフォルトの名無しさん :2008/01/14(月) 19:42:43
$ find std -name '*.d' -exec grep -H 'sleep' \{\} \; std/c/time.d:void sleep(time_t); std/c/time.d:void usleep(uint); std/c/time.d:void msleep(uint);
d 今更だがphobos手抜きすぎる気がしてきた
言語仕様は素晴らしいが開発環境とライブラリが貧弱すぎて使い物にならないのがD。
言語使用はC++なみに複雑で全然素晴らしくない。 C++の焼き直しに過ぎない。
言語仕様が素晴らしいと思われるようにころころ言語仕様を変更してるから、 開発環境とライブラリが成熟しなくて、結局使い物にならないのがD。
C++のように現実的な限界を認めてさっさとライブラリや文法を 固めてしまった方がはるかに現実的なのに。
Dは実用言語を目指した実験言語です
こんなところでケチ付けても、をるたんは日本語の掲示板なんて見ないよ。
来年で10年だし そろそろ固まってもいいころだと思うんだが
Dの初心者向け解説を一通り見た感想なんだけど。 C++のキモ過ぎに絶えられない人。 英語読めない人。 せいぜい趣味の範囲。 windowsが主でパソコン(PC)しか見えてない人。 それ以外mac, linux, unixにあんまり関心ない人。 C++に抵抗があって、java, C#以外を考えるなら、 objective-cでいいかなと思うけど、英語勉強しないとねw Dなんて、いまだに実用(プロジェクト・個人でも)で使うのは怖くてできないし、 おぼえようにも仕様が複雑すぎ・リテラルが多すぎで、結局C++とかわんないw ということで、C++と同じくwindows向けのオナニー言語ってことだと思った。 この辺が一向に流行らない理由じゃないかな。 ちなみに、dmcは結構好きだけど。
D は Windows 以外でも使えるが・・・。
ニュースグループ読んでる感じだと、非Windows環境での話題のほうが多いぞ
つか言語がwindows向けってどういうことだ
windows(とlinux)がターゲットだからまずwinからサポート・実装される。次が非windows。 でもパソコンがターゲットならvmのjavaかc#でいいよ。 次世代目指すとかデスクトップ(win, gnome)とかターゲットかと思えば、 その割には、dはguiとか標準で持ってないし、一体何をしたいんだが理解に苦しむ。 dを追いかけるよりも他の言語やunixを追いかけたほうが日本人にはいいと思った。 ハードならcや分野専用のカスタマイズ言語(cgとか)があるし。 一応、嘆き。
デーモンとか書くの楽になるならDもいいんだけど
>467
おまえ馬鹿じゃね?
>>462 の言ってることはめちゃくちゃ明解
>>465 PCが主体で、携帯とかPDAとかじゃなくて、デスクトップ向けってことです。
ほぼwindowsの牙城というか。
C++にGCが標準で搭載されれば(bohem gcでも)、Dの存在価値は薄くなるかなってw
正式版が出てから急にシェアが増えたのはどう説明するんだろ
>>257 対してC++のシェアはDの伸び以上に減ってるんだよな
言語が増えた今、C++は用途が限定されたオナニー言語になりつつあるという事だ
C++ はプログラマのオナニー向けじゃなく、コミュニティのオナニー向けだろ。 俺は Boost のイカれ具合とそれを崇拝する信者どもに嫌気が指した。
473 :
デフォルトの名無しさん :2008/01/14(月) 23:35:06
なんだ自演がはじまったのか
Dの目的のなさも似たようなもんじゃないか? どうせC++についていけないでDに逃げてきたんだろうし。
0xスレでやれ
C++は標準化委員会があるからまだいいほうだろ。
>>476 Boost の lambda とか言われたままに採用せずに、あんなもん言語仕様のひとつに組み込めよ、と思う。
なんでもかんでも template で generic programming って間違った進化だろ。
で、こういうこと言うとパラダイムシフトできないアホグラマがどうのとか。
スレ違いだからこのへんにするが。
C++についていけなかった香具師らはRubyに逃げた
>>477 まあ今の言語の群雄割拠は地球の歴史でいうと先カンブリア紀のようなもんだからなぁ
パーサーが実質世界に一つしかなくてしかもオープンソースというのは C++ からしたら天国じゃないか
同じ事が近いコーディングコストで達成できるのであれば、言語仕様は小さい程いい。 何でもかんでも言語仕様に取り込みゃいいってもんじゃない。
>>481 構文や意味に誤りがあった場合にまともなエラー表示ができていない。
達成できてるとは言い難い。
コンパイラが実装しなけりゃ絵に描いた餅。 export の二の轍を踏むだけ。
Dの設計・言語使用に携わっている人たちが、そもそもC++についていけなかった件について。
export は実装が難しすぎたからだろ。 lambda の実装ごときに何の問題があると。
>>449 forumに書き込んでる暇があれば自分で移植しろという感じだな
この様子だと、Dは実用とか稼動とかとは程遠いですね。 けっきょくは、better c++ なんでしょうか。 また1年後ぐらいにこのスレにきますわw
>言語仕様は小さい程いい。 D見るとつくづくそう思うよ。 バグは言語仕様に対して指数関数的に増えるからな const周りの仕様変更でfinalメンバ関数の挙動がおかしくなったりとか そういうのにぶつかると絶望感感じるよ。
仕様が増えれば、それだけ実装コストがかかるのは当然だろ。 言語は実装されて初めて意味を持つんだから、普及させたけりゃ仕様は少ない方がいい。 さらに、覚える方も楽だしね。 さらに、D の設計思想にある 「構文解析と意味解析を分離する」 が達成されていない C++ で 新たに仕様を増やしたときの実装コストはいかほどのものかちったぁ考えようぜ。 boost をそのまま取り込むとなれば実装コストは名前ちょっといじる程度。 この差は非常に大きい。
>>477 仕様に組み込みたい気持ちは分かりますが、Cの言語仕様にラムダはいかんでしょ。
あなた、プログラム言語のことをちゃんと学んでないようですね。
パラダイムとかテンプレートもいいたいこと分かるんですけど、世の中にはもっとキモイのがいるんで、
そういうの見ると少しはC++のそれも理解できるかとw
正規表現で不定方程式を解く
それは理解できるが、lamda プログラミングは素晴らしい!なんて語りながら 現実があれじゃどうかと思うぜ。あんなのIOCCCに応募するようなコードだろ。 マクロでマイ言語作って叩かれた25年前から何も変わってない。
Cのコンパイラも書いたことない奴らがDの設計思想とかぬかすなよ おこちゃまはwinでrubyでいいからw
Dスレにまでいつものが湧くようになったか。 スルーしとけ
windowsならvbaで決定だな。
>>491 ラムダは制御には向いてませんよ。Cは制御に向いてますよ。
あなたに必要なのは、そういうところだと思います。
>>487 仕事で使ってる俺から言わせてもらうと
実用とか稼働とかとはほど遠いから趣味で使うのがいいよ
あと1年後じゃ無理だから5年後においでw
>>484 誤れ!アンドレイ・アンドレスクに誤れ!
それにしても、クロージャ実現したことだし、 そろそろDにもラムダ記法導入して欲しいよね。
アインシュタインがオナニー言語を超えてるの、みたいな事を昔言ってた人が再び降臨したのか
更新があったのかと思ったじゃないか あーもーつまんね
結局なんなの 実の無い話があっただけ?
オナニー文章の中には頻繁にオナニー呼ばわりが登場する、 という毎度の傾向がまた一つ見られただけです。
DMD 1.020 って事は GDC だとまだクロージャは使えないの?
g++に負けるのかー
HDDが消去されます
あるDLLからインポートライブラリ作って、ダイナミックリンクし、 このDLLの関数をmainから直に呼べば問題なく動くのに、 オブジェクト指向なラッパとして、クラスを作ってメンバ関数から呼ぶと起動すらできずに実行時エラー 「アプリケーションを正しく初期化できませんでした (0xc0000005)。」が出る。 このクラスをプログラム内で一回も使っていなくても、定義しただけで起動できなくなる。 こんな奇妙な現象に悩まされているのですが、一体どんな原因が考えられますか。
>>510 再現コード+DLLを、どっかにアップしたらどう
>>511 すみません。原因はわかってしまいました。
クラス定義があると、どうやらモジュールコンストラクタで使っているDLLよりも、
クラスのメンバ関数で使っているDLLが先にロードされて、
そのロード順の違いによって問題が出たり出なかったりするようです。
COM周りは本当によく分かりません。
普通にcast(sockaddr *)すればいいんでない?
>>514 ああ、それっぽいことをしていたのに真っ先に試すべきそれをやってませんでした。。。
どうもです。
ヲルタンは1.0と2.0のコンパイラのソースをどうやって 管理してるんだろうなぁ いつも更新同時にでるし。 #ifdefでわけてるだけなのかな
>>516 ソース嫁
といいつつ見てみたけど #if V2 で分けてるだけに見えるな
phobosに入れてもらおうと思ったらどうしたらいいのだろう たまに誰かのがマージされてるみたいだけど
をるたんに直談判
518じゃないけど、
>>519 まじっすかwwwなぜdsourceにいったんだろうw
変数に対するfinal指定がなくなってる… コンストラクタで一度だけ初期化できるフィールドってどうやって書けばいいんだ
finalとconstはinvariantと違って使い分けの基準が分かりにくい
const 関連ごちゃごちゃしすぎて D 2.0 使う気が起きないっす。
周辺ライブラリがきちんとconst/invariant修飾されるようになれば 使いやすくなると思うんだけどな
たしかにD2.0はまだ未成熟のように感じる。 最低でもconst/invariant関連の仕様がいい具合になるまでは D1.0+Tangoで当面様子見するのがいいかも。
std.string内関数、引数がstringなのがうざすぐる
phobos自体、,009の新しいルールに則ってなくて一部コンパイル通らんしな…
それphobos2.libってどうやって作ってるの?
Dはてんこもり過ぎね? 誰かD--言語のドラフト書いてくれよ
>>526 同意。せめてin char[]にして欲しい。
おかげで無駄なキャストがわらわらと必要に
D:\foo\bar\hoge\..\..\abc\def.txtという相対指定も含んだパスから D:\foo\abc\def.txtというパスを取得する簡単な方法はありませんか?
\ でsplitして .. があったら左側を消せば。
.\..\.\..\ とかがあるんじゃね? とか打ってみたらリズムが良くてわらた
string shorten_path(string orig_path) { string[] path = []; foreach(dir; orig_path.split("\\")) { if(dir == ".") continue; if(dir == ".." && path.length > 1) { path.length = path.length-1; continue; } path ~= dir; } return path.join("\\"); } こんな感じでどうだろ
string normalizePath(string path) { auto a = path.split(`\`), b = new string[a.length], idx = 0; foreach(e; a) { switch(e) { case ".": break; case "..": if(--idx < 0) throw new Exception("invalid"); break; default: b[idx++] = e; } } return b[0 .. idx].join(`\`); }
被ったorz
534だけど if(dir == ".." && path.length > 1) { ↓ if(dir == ".." && path.length > 0 && path[$-1] != "..") { でした。
>>538 ま、WindowsならそのものずばりなAPIがあったりするが。
>>539 似たような処理で、linuxやwebの不正なパスも調べようとしているので。
もしできれば参考までにその関数名を教えてくれると助かります。
>>540 PathCanonicalize()
あ、不正かどうかのチェックではなく、相対指定の削除の方な。
>>526 , 530
dout.printf("%d\n".dup, 10);
.dupうぜええ
DMD 2.010 & 1.026 リリース
バグフィックスが主だね
pureとな 何に使うんだろう
まさかpure関数か?
What's New for D 2.010 Jan 20, 2008 New/Changed Features opAssign can no longer be overloaded for class objects. WinMain and DllMain can now be in template mixins. Added pure keyword.
とりあえず1.026でwin32が通る。
win32を使おうとすると出る
>>110 だが、関数ポインタ型の宣言が使っている所よりも後ろになっているところがあって、それが原因みたい。
Func func;
alias void function() Func;
というふうになっていると、そこでエラーになる。
rpcndr.dとか、rpcdcep.dとか。
だから、それを解消するように書き換えてやれば、使えるようになる。
alias void function() Func;
Func func;
というように。
まあ、ちょっと調べれば分かることだけど、とりあえず報告。
Bugs Fixed * Bugzilla 1319: compiler crashes with functions that take const ref arguments * Bugzilla 1697: Internal error: ..\ztc\cgcod.c 2322 with -O * Bugzilla 1700: ICE attempting to modify member of const return struct * Bugzilla 1707: '==' in TemplateParameterList in IsExpression causes segfault * Bugzilla 1711: typeof with delegate literal not allowed as template parameter * Bugzilla 1713: foreach index with tuples and templates fails * Bugzilla 1718: obscure exit with error code 5 * Bugzilla 1719: Compiler crash or unstable code generation with scoped interface instances * Bugzilla 1720: std.math.NotImplemented missing a space in message * Bugzilla 1724: Internal error: toir.c 177 * Bugzilla 1725: std.stream.BufferedFile.create should use FileMode.OutNew * Bugzilla 1757: there is an fault in phobos windows api interface * Bugzilla 1762: Wrong name mangling for pointer args of free extern (C++) functions * Bugzilla 1767: rejects-valid, diagnostic * Bugzilla 1769: Typo on the page about exceptions * Bugzilla 1773: excessively long integer literal * Bugzilla 1779: Compiler crash when deducing more than 2 type args * Bugzilla 1783: DMD 1.025 asserts on code with struct, template, and alias * Bugzilla 1788: dmd segfaults without info * D.announce/11066: Re: DMD 1.025 and 2.009 releases
ぺたぺた やっと最初のやつ直ったのな
>>541 へー、WindowsAPIってOSの機能を使うだけって思ってたんですがこういう関数も結構あるんですね。
ありがとです。
functionをdelegateに変換!みたいなことってできないの?
>>553 >GDCはDMDとは違って今のところはまだ標準に100%の準拠はしていない。
標準?そんなものあったの?
>>556 ウォルたんのページに書いてるのが標準。ただし、頻繁に変わるw
>>555 delegateは実はただの構造体のようなもの。
TR delegate(TA) toDelegate(TR, TA...)(TR function(TA) fn) {
typeof(return) dg;
dg.ptr = null;
dg.funcptr = fn;
return dg;
}
じゃあこうかな TR delegate(TA) toDelegate(TR, TA...)(TR function(TA) fn) { return delegate TR(TA args){ return fn(args); }; }
private struct FunctionCaller(R, A...) { R call(A args) { return (cast(R function (A))this)(args); } } R delegate (A) todg(R, A...)(R function (A) func) { FunctionCaller!(R, A) c = void; auto res = &c.call; res.ptr = cast(void*)func; return res; }
>>557 そのアップデート速度がDの魅力。
仕様が10年も変わっていないC++には真似ができない。
ただ、最近はDMDの更新が遅いと思い始めた。病気だろうか。
>更新が遅い 超わかりすぎるw
機能追加されるたびに「迷走しすぎじゃね?」とか書き込むけど、バグフィックス中心の更新だとなんか寂しい俺は既に完全調教されているのか。
さびしがりやさんかわいい
>>550 その手直しされたファイル群をうpしてくれ
if (s[$ - 2 .. $] == "\r\n") if (s[$ - 1] == '\n' && s[$ - 2] == '\r') 文末にCRLFがあるか調べるだけの条件式ですが、 これらは似たようなものなのに、後者の方が6倍ほど速くなるのは何ででしょうか?
>>569 一番大きいのは配列比較関数を呼び出すオーバーヘッドじゃなかろうか。
>>570-571 いろんな理由があるんですね。
でも、どっちにせよ10000000回まわしてやっと差が二秒出る程度なのであまり気にしないことにします。
DでつくったCOMサーバにTypelibを埋め込むにはどうしたらいいんだぜ?
574 :
573 :2008/01/25(金) 10:49:57
言葉足らずすんません DでつくったCOMをC#からつかってみようと思ったんだけど、 登録できなくて、いろいろしらべたら、タイプライブラリが組み込んでないからだと 思うようになったんです。 以下C++でDのサンプルにあるdserver.dを呼び出す方法です GUID CLSID_Hello = { 0x30421140, 0, 0, {0xC0,0,0,0,0,0,0,0x46} }; GUID IID_IHello = { 0x00421140, 0, 0, {0xC0,0,0,0,0,0,0,0x46} }; HRESULT hr; class IHello : IUnknown { public: virtual int STDMETHODCALLTYPE Print()= 0; }; IHello* pIHello; hr=CoCreateInstance( CLSID_Hello, NULL, CLSCTX_ALL, IID_IHello, (void**)&pIHello); pIHello->Print();
IDLを書いて、midlでタイプライブラリにコンパイルして、typelib型のリソースとしてリンクすればいいんじゃなかろうか。
577 :
573 :2008/01/25(金) 16:46:13
>>575 VisualStudioで適当なActiveXプロジェクトをつくって
そこでできたresファイルをDMDにくわせたら・・・
うをを、登録できた!
これで575さんの言うとおりの事をやればいける予感です
ありがとうございます!
pure関数ってconst関数となにか違うの?
結果が引数だけに左右される関数。 CTFE出来る関数は純粋関数。
副作用が無い関数か。 ところでpureキーワードの説明、どこに載ってる?
>>580 news://news.digitalmars.com:119/
[email protected] > > Thanks! Are there any short-term plans to do anything with 'pure',
> > or are you just reserving the keyword (as was done for 'macro')?
>
> It's just to reserve it.
emacsのflymake使えるの? 使えたら設定の仕方教えてください。
【レス抽出】 対象スレ: D言語 Part16 キーワード: の? 抽出レス数:26
教えてください。 と丁寧に頼む割りに 使えるの? というたずね方。 つまり 教えてください。 は形だけ丁寧にしたってことだね><
kmonos.net/alang/d/ がみえないよ(TT) ど、どうしたのかなぁ・・・
>>588 いやいや、更新中だったと思われ
/2.0フォルダが無かった
乙です。お世話になってます。>inaba氏
久々に一日みっちりコード書いたけど、 string回りでエラー出すとinvariant(char)[]がうじゃうじゃ見えるのが鬱陶しいー。 文字列=>文字列の連想配列とか使うともうわけわからん。 stringがクラスになる日はもう来ないのかなぁ…… ところでDで設定ファイルを扱うとなると、何が定番だろう。
iniとかyamlとかでいいんじゃね
ふとC++を知っている人にD言語のコードを説明するとき、ベースは似たようなものだから説明も少しでいいか…と思ってたら、 withだのsyncronizedだのscopeだの型推論だのプロパティだのとD節全開な自分のコードがそこに広がっていた。 (C++やJavaさえ知っていれば)習得が容易というのはDの売り文句なはずだけど、 誰かヲルタたんを止めないと…この調子でいったら……とおもった。 まぁ個人的にはバッチコイだけど。
syncronizedはJava、withはVBやJavascriptにあるから、それなりに知名度あると思う。 scope属性はC++のauto属性、scope文は他の言語では見たこと無いなぁ。
scope 文は C# の using 文じゃないの?
595 :
593 :2008/01/27(日) 18:30:47
間違えた。scope文じゃなくてスコープガード文ね。
>>590 全然関係ないけど、うちの同僚が「久々にムッチリコード書いたぜ」ってメールだしてきたのを思い出してワラタ
>>595 boostにスコープガードなかったっけ。
エントリポイントってmain固定?
main WinMain DllMain の3つじゃなかったかな
Version D 2.011 Jan 25, 2008 New/Changed Features * Re-enabled auto interfaces. Bugs Fixed * Bugzilla 1072: CTFE: crash on for loop with blank increment 更新内容が最近寂しいのは、そろそろ3.0ですよってことなのだろうか
602 :
デフォルトの名無しさん :2008/01/29(火) 17:46:00
>>601 >そろそろ3.0ですよってことなのだろうか
だめだはやくウォルタンを止めないと・・・
D2は黒歴史ってことなのか
604 :
デフォルトの名無しさん :2008/01/29(火) 18:54:58
その問いにはまずD1.0が黒歴史か否かを答えねば
605 :
デフォルトの名無しさん :2008/01/29(火) 19:54:59
早くtangoを標準にしてくれ...
tangoは命名規則きもちわるいんだよなあ
だよなー どうして推奨の命名規則を守らないのか 訊いてみたいが言葉の壁ががが
auto interfaceってなんだっけ。
tangoキモいキモい言いながら、実際に使ってみるとphobosよりもいい感じなんだよなぁ
tangoはStdoutのopCallのオーバーロードがきもすぎ。 C++のシフト演算子よりも寒気のする記法があるとはおもわなんだ。
>>610 >C++のシフト演算子よりも
そんなまさか
613 :
デフォルトの名無しさん :2008/01/30(水) 02:35:20
おまいらキモイキモイ言いたいだけちゃうんかと
opCall使わないほうのやつなかったっけ?
foo("")(1)(2)(3)(4)(5); みたいな形だっけ?
Stdout("foo")(bar)とかもう何ひとつ分からない。 「標準出力に"foo"、barを書き込む」って言わせてほしいのに、 「barを"foo"を標準出力したものする」と言わされるという不思議。 あ、なんか書いてて「標準出力って動詞じゃね? ”標準出力する”て自然じゃん」て思えてきた……。 「"foo"を標準出力先する」 うん、これならちゃんと不自然だ。 んあ? API Index見たら、tango.group以下のだけちゃんと小文字だな。 tango.group.collectionならtango.util.collection以下を全部public importするのか。ほほー。
実際はこういうことをやってるだけなんだよな auto o = Stdout(1); o = o(2); o = o.newline(); o = o(3); o.newline();
newlineをメソッドにしちゃうあたり、神経を疑うわ
無理にopCallのを使わなくても、tango.io.Print 使えばC#形式で使える。
620 :
619 :2008/01/30(水) 14:52:34
すまん。tango.io.Stdout だった。classがtango.io.Printな
2.011ってどこにあるの
をるたんのマシン
2.011は落とさせる気はないのか
まえもあったな、こんなこと。
作りかけので更新して気づいてないんじゃね。 それか気づいてても直すの面倒なだけか。
D2.0でコンパイル通るGUIライブラリないかね。 Winだけで動けばいいから、あまりごてごてしてなくて、 普通にWinAPIのオブジェクト指向ラッパみたいなのでも構わないんだが。
628 :
626 :2008/01/31(木) 22:05:19
どう探しても無いみたいだから、自分で作るかなあ。 激しく車輪の再発明なわけだが、勉強にはなりそうだし… 時代はWPFに遷りかけてるのに一体何をやってるんだか。
630 :
デフォルトの名無しさん :2008/01/31(木) 22:57:26
631 :
630 :2008/01/31(木) 22:59:50
↑なんでstatic importだよw そうじゃなくて「選択 import」ね。 でもstatic importも選択importも使ったこと無いなぁ。
バージョン1.026とbinding win32apiだけでコンパイルできる GUIライブラリを使わないでwin32apiだけを使ったウインドウをただ表示するだけのサンプルコードはどこかにありませんか?
>>632 わなDのが近い。書庫の展開とかやってるけど、main関数はまんま。
つか、その条件ならDじゃなくて、C/C++のサンプルコード探したほうがいいんじゃね?
634 :
デフォルトの名無しさん :2008/02/01(金) 15:28:53
635 :
デフォルトの名無しさん :2008/02/01(金) 17:39:16
>>634 そこからWin32のバインディングをダウンロードしたいのですが
やりかたがわかりません・・・
TortoiseSVNでやってみてるのですが・・・
636 :
デフォルトの名無しさん :2008/02/01(金) 18:22:12
637 :
636 :2008/02/01(金) 18:30:15
ちなみにあれってSVN使えばDL出来るのかな。一応試したんだけどエラーばかりだった。(自分の操作が間違ってた可能性大) それと今exeファイルのアイコンを変える方法探してるんだけど。。。無理?だよねぇ。 外部ツール使って書き換えでもいいけど、コマンドラインから使えるタイプのものってないだろうか。
>>636 ををっそんな小さなところに!
ありがとうございます
これすごいですね、DirectX10まである
642 :
636 :2008/02/01(金) 19:02:03
>>639 サンクス!これで出来た。dsssはresの扱い方知らないとか言ってきたけどw
643 :
636 :2008/02/01(金) 19:17:50
>>640 なるほどアドレスが違ったのか。そのままwww.dsource.org/でコマンド打ってたらそりゃ無理だ罠。
644 :
636 :2008/02/01(金) 19:34:46
dsssでも以下のようにするとresをつけれました。 dsss build main.d -L/RC:test.res
某所にあったシリアライザーをちっとだけ修正してみました {{は.diになったときのエラーよけ ubyte[] serialize(T)(in T t) { ubyte[] rv; static if( is(T==struct) ) {{ foreach(x;t.tupleof) rv~=serialize(x); }} else static if( __traits(isIntegral,T) ) {{ rv=(cast(ubyte*)[t].ptr)[0..T.sizeof]; }} else static if(__traits(isStaticArray,T)) {{ rv=cast(ubyte[])t; }} else static if(is(T U:U[][])) {{ rv=serialize(t.length); foreach( v; t) { rv~= serialize(v); } }} else static if(is(T U:U[])) {{ rv=serialize(t.length) ~ cast(ubyte[])t; }} else {{ assert(0,"unsupported"); }} return rv; }
template ReturnType(T) { static if(__traits(isStaticArray,T) && is(T U:U[])) { alias U[] ReturnType; } else { alias T ReturnType; } } ReturnType!(T) deserialize(T)(ubyte[] t) { ubyte* ptr = t.ptr; return _deserialize!(T)(ptr); }
private ReturnType!(T) _deserialize(T)(ref ubyte* t){ ReturnType!(T) rv; static if(is(T==struct)) {{ foreach(i,x;rv.tupleof) { static if(__traits(isStaticArray,typeof(x))) rv.tupleof[i][]/*x[]=*/=_deserialize!(typeof(x))(t)[]; else rv.tupleof[i]/*x=*/=_deserialize!(typeof(x))(t); } }} else static if(__traits(isIntegral,T)){{ rv=*cast(T*)t; t+=T.sizeof; }} else static if(__traits(isStaticArray,T)&&is(T U:U[])){{ rv=cast(U[])t[0..T.sizeof]; t+=T.sizeof; }} else static if(is(T U:U[][])){{ int len = _deserialize!(size_t)(t); rv.length= len; foreach( i; 0..len) { rv[i]= _deserialize!(U[])( t); } }} else static if(is(T U:U[])){{ int len = _deserialize!(size_t)(t); rv= (cast(U*)t)[0..len]; t+=len*U.sizeof; }} else {{ assert(0,"unsupported"); }} return rv; } だれか連想配列たのむ
>>647 単に長さを最初に入れて、キーと値を交互にserializeして詰めていけばおkじゃね?
こういうの見るとC++はつらかったな・・・と思いだす
>>633-634 どうもです。
そこの気合いの入った例のコードをとりあえずコンパイルしてみました。
何度かエラーが出たりしましたが何とかコンパイルできました。
出たエラーは
tchar.dのtc.TtoW().toUTF8()の部分。
no property 'toUTF8' for type 'int'といわれてしまった。
これはほかのサンプルソースを拾ってきて学習しているときにも、同様の形式でよく出た。
javascriptでこういう書き方を良くやったけど、出来ないのかな?
toUTF8(TtoW(tc))にしたらコンパイルは通った。
後はインポートするファイルがどれかわからなかったのと、
リンクするファイルもどれかわからなかった。
で、コンパイルのコマンドラインはtcharを同じディレクトリにおいて
dmd test tchar shell32.lib win32.lib main.def -version=Unicode
で
import win32.core;
import win32.shellapi; // DragQueryFile 等
import tchar;
import std.windows.charset;
をインポートしたら通った。
tchar.dの方は
module tchar;
import win32.windef;
import std.utf;
import std.string;
private import win32.winbase;
で通った。
ちょっとOpenGLでも触ってみるかと思って
Derelict落としてchar[]をstringに置換したりしつつdmdに突っ込んでみたら
例のAssertion: t->decoで泣ける。
>>550 を見つけて神かと思ったものの、
問題の箇所を見つけるのはなかなか大変そうだ……早く直してくれぇ。
あと.di食わせたら"Error: unrecognized file extension di"とか言われてしまった。
まさか仕様じゃないよな……?
>>651 .diはimportに使うだけで、コンパイラに与えるものじゃないよ。
>>653 ReturnTypeのinvariant外しが気になるなぁ。
ReturnTypeはinvariantを外さないようにして、invariantを外すMutableReturnTypeを作って、rvの型をMutableReturnType!(T)にして、returnをcast(ReturnType!(T))rvにすると良いと思うよ。
>>654 それをやったらかなり使えそうだね。。って
車輪の開発じゃね?どっかに絶対ありそう。
>>655 phobosのstd.conv.toが近いような。
マージできる予感?
それって、tangoのReaderとかWriterとかじゃないの? 残念ながらD2.0には対応してないけど。
やっぱりTangoにはあったか
/⌒ヽ
/ ´_ゝ`)すいません、ちょっと場所お借りしますよ・・・
| /
| /| |
// | |
U .U
D言語BOFを
オープンソースカンファレンス2008 Tokyo/Spring
http://www.ospn.jp/osc2008-spring/ セミナー会場にて開きます。
日程:3月1日(土) を希望していますが未定です。
会場:日本電子専門学校 7号館(東京都新宿区・JR大久保駅徒歩2分)
ustreamか何かで中継する予定です。
スピーカー
- k.inaba : D言語リファレンス 日本語版 わかったつもりになるD言語
- ABA : ABA Games
- shinichiro_h: SDL bindingほか
- bero: wxD
http://f17.aaa.livedoor.jp/~labamba/?D%B8%C0%B8%ECBOF /⌒ヽ
/ ´_ゝ`)それじゃ、お騒がせしました・・・
| /
| /| |
// | |
U .U
>>659 俺地方だから、高嶺の花。
動画、マジで配信してください。
>>659 中継じゃなく、Stage6とかニコニコにUPでお願い。
>>659 わざわざ言わなくても出ると思うけどページに当日レポうp頼むね
>>659 期日までに今作ってるものが形になったら見せびらかしにいくかも。
2.0でDirectX10アプリ納品したって勇者も来ないかな
666 :
デフォルトの名無しさん :2008/02/02(土) 23:21:04
>>659 俺も地方だから無理。
ってか東京に住んでたらちょっと駅数個行くだけで有名人の講演が聴けたりするんだよな。
上京したことない俺にとっては、そんなの考えられない。イイナ...
>>666 歩いて10〜20分程度置きに駅があるから実は数駅ではすまないwww
>>666 はやく上京しちゃいなよ!
田舎で競争もせずにボーっとしてちゃ
技術の発展なんてありえないぜ!
>>669 なんにしろ、こういう事を日本でやってるということを伝えねばなるまい
>>672 てっきり関係者が投稿するんじゃないかと思ってたんだが・・・
>>672 まだ日時とか確定じゃないんでちょっと待ってくれ
ustreamは中継と録画の両方が公開できるらしいので挙げたまでで、 どの配信方法がいいのかよく知らない。 実のところそんなんやったことはおろか、webcamもノートPCも持ってない。 ただ漏れも昔は地方在住だったから気持ちはわかるので、どうにかしたいと思った。 いざとなったら中古ノートでも買う気だけど、 みんな、オラにちからをわけてくれ
>>676 会場にそういうシステムはないの?
ノートPCやWebcamとかは大学から借りれそうにも思うけど
>>676 あとたぶん日本語オンリーだよね?
難しいかもしれないけど英語通訳がいればいいのにね
>>672 関係者以外が投稿するのはどう考えても迷惑だろ
書かれた方もどう反応しろと
680 :
デフォルトの名無しさん :2008/02/03(日) 17:51:25
>>673 >675 >679
了解しました
>>674 この辺がしびれるあこがれるw
Importance: Programming environment > Server > Users
>>676 ディレイ中継でもいい気がする
>>676 途中で切れると嫌なので、peercastで流してホスィ。
ustreamはチャット連動なのがいいよね
683 :
デフォルトの名無しさん :2008/02/03(日) 21:00:47
Dってかんたんなのか? Cでウィンドウ表示するだけで、めっちゃ長いプログラムをコピーしなきゃいけないんだが。
> ウィンドウ表示 それは OS の API やライブラリのレベルではないか?
とはいえ標準ライブラリにGUIが無いのは確かではある。 wxDのスピーカーの人って日本人?
>>683 ライブラリ化されていなければ同じ手続きを踏むことになる。
言いだしっぺの法則発動しとく?
HDハンディーカムとかで録画して後日公開がいいんじゃね? webcamだと解像度低すぎて、文字とか映されたら全然読めない気がする。
言いだしっぺの法則便利すぎわろた
692 :
デフォルトの名無しさん :2008/02/04(月) 14:01:33
>>689 字幕作成と変換はデータ送ってもらって家で作業できるからいいけど、撮影のために会場に行かなきゃならない
>>688 はきついなw
693 :
デフォルトの名無しさん :2008/02/04(月) 14:04:44
>>683 ウィンドウ操作は言語がどうこうじゃないな。
でもDが扱えるGUIライブラリはたくさんあるから、使いやすいのもある。はず。
今DFL使い始めだけど、印象は良い感じ。
DFLってD2.0で使えますか?
695 :
デフォルトの名無しさん :2008/02/04(月) 14:35:53
多分使えない。 俺はtango+DFL+DMD1で使ってる。tangoも2使えないからな...
Dで書いてて 「これこれ!これがDの醍醐味っていうか力だよねー」 みたいなのはありました?
C++からみたらね、Dは配列がすっごい便利だと思う。 スライスとリサイズと結合が簡単にできてGC搭載。メモリの負荷はどうなってるか知らないけども。 あれさ、配列が無責任にリターンできる感動は忘れがたい。 で、これの劣化版をC++で実装してみたんだけど、俺にはclass3個(カウンタ、アロケータ、それ)必要だったから保守が面倒。 参照カウントも正しいかわからんし。独自規格っぽいし。
>>697 けど数値シミュレーション屋からするとDの配列はまだ行列演算が実装されてないから不便w
これはEclipseに乗り換えざるを得ない…
>>698 FORTRAN みたいな配列演算ができればいいのにね、
って前にも言った事がある気がする。
>>702 並列演算最適化の意味も含めてその機能はほしいんだけどねえ。
real[4][4] a, b, c;
c = a * b;
いいような悪いような。
構文解釈のあいまいさを除かないと無理ぽ。
動的配列と静的配列が同じ構文で扱えるのも利点のひとつなだけに。
ベクトル演算はずっと昔からFutureのところに書いてあるよね。 どうするか決めかねてるのか、単に他にやりたいことがあって気が回らないだけなのか。
extern(Windows){int Beep(int, int);} void main(){ Beep(2000, 30000); } このコードを EXETYPE NT SUBSYSTEM WINDOWS,4.0 というdefファイルと dmd main win.def というコマンドでビルドすると、しばらくマウスポインタがバックグラウンドで作業中のもの(砂時計つき)に変わるんですが、 何ででしょうか?
ビルドしたexeを実行すると、でした。
Visual Dはまだかね
Fortran は嫌いではあるが、 配列演算に関しては優秀だと思う。
>>708 はげどう
Dに実装するならぜひFortanライクな配列演算を実現して欲しい
それなら数値計算屋にもアピールできる
>>705 30秒間音なってるから。耳壊す気ですか。
2kHzはうるさいなw
>>699 時代を一足飛びですなぁ。これがうわさの伝説のIDEか!!
stringが型名として認識されないなあ。 どうすればいいんだろう。
>>699 のおかげでEclipseを使えるようになりました!
今では女の子にモテモテです!
これって3.2.xじゃないといかんの? ついうっかり3.3.1.1落としちゃったんだが
>>716 同じく3.3.1.1だが、普通に動くっぽい。
まあ、あんま詳しくは使ってないが。
>>697 リターンといえば構造体も、
S f(){
S s;
s.a = 1;
return s;
}
が
void f(ref S s){
s.a = 1;
}
にコンパイラが最適化してくれて、とても速い、とかあるらしい。
戻り値最適化は C/C++ でも一般的だ
別にそこは講座なわけでも仕様書なわけでもないから、 そこを読むには C++ や Java は前提知識と思った方がいい。
仕様書でしょ。
というか、C/C++辺りをを知らない人にとってDのいいところってなんだ。 開発途上の嫌なとこが目につくだけのような気がするが。
Descent、とうとう日本語含んだソースでも正常に動くようになったね。ヽ(´∇`)ノ 伝説のIDE候補
>>724 少なくともいちばんはじめの言語学習には向いてないよなw
Descent、クラスのアクセス指定をC++式の public: void func() { } とかで書くとインデントがおかしい。俺だけかな。 フォーマッタの設定色々弄ったんだけど(弄ったから?)上手くできん。 Java式か、もしくは中括弧使えばいいんだけども。みんなどれ使ってるの?
>>721 まさかと思ったら、もう返信が…
dクスです。
属性のとこにあったんですね。
>>711 30秒なのはサンプルだからです。
他に簡単に長いこと起動させるのを思いつかなかったので。
その30秒のうち、最初の6秒間くらいはポインタが砂時計つきに変わるんです。
ほかのコンソールアプリケーションを
>>705 のdefファイルを使ってビルドしたときも
同様に砂時計つきに変わるので、どうしてかと思ったのです。
>>669 無茶言うな、と思ったけど
BO開くから日本のDユーザーにビデオかなんかでメッセージくれない? といったら
>That sounds great! What is the event where there will be the BOF? -Walter
割と好感触
>>672 投下してきました
このへん自分じゃ気づかなかったのでここに書いてみてよかった
EclipseのDLページに行くと落とせるファイルが いくつもあるんだけどどれを落としたらいいですか?
>>732 3.3系列のWindows向けC/C++版でインストールしたけどうまくいったよ
まだほとんどいじってないが。
だめだ、なぜだかわからないがDescentが "No features found on the selected site" ってなるorz -clearしてんだけどなぁ…
>>730 欲張るなら
オンライン講義かディスカッションができないかな?w
どちらかというとディスカッション希望
ところでBOってなに?
>>736 >>735 の追記だけどたまに国際会議や研究会でそういうのがあった
スクリーンに向こうの映像を表示してオンラインディスカッションとか
739 :
734 :2008/02/05(火) 13:54:17
descent.ui_0.5.0.20080203.jar から descent.ui_0.5.0.20080204.jar にあげるときに descent.ui_0.5.0.20080204.jar アップし忘れてるみたいだorz 全部落としてsite.xml編集するか…
>>737 BOF
Birds of a Featherかな?
初めて聞いたが情報系だと一般的な呼称なのかしら?
>>740 この手のイベントでは割とよく聞く言葉だな
742 :
デフォルトの名無しさん :2008/02/05(火) 14:51:46
descent.ui - 0.5.1.20080204 見つからない。どこいったんだ〜〜〜。 やっと。やっと伝説のIDEを使えると思ったんだけども。
>>726 GCのおかげで気楽に関数を書けるし、
慣れ親しんだ.exeファイルを自分で作れる点も考えると、
かなり初学者に向いた言語と言えるんじゃないだろうか。
特にGCが無いと、結果を受け取るバッファへのポインタを引数で渡すとか、
戻り値はエラーコードのために空けとかなきゃとか、
必要なメモリサイズをあらかじめ調べとかなきゃとか、
関数を作って使うだけの時点で既に敷居が高くなる。
その制限から抜け出せないまま育つと、
複雑怪奇なシグニチャの関数を書いたり、そもそも関数を書かなかったりして……ああ畜生、
プログラミングは設計だっつってんだろダラズ共が!
>>741 そか
計算物理畑の人だからかわからんかったw
あげちゃった。ORZ
って
>>739 にかいてあったか。
747 :
746 :2008/02/05(火) 15:08:17
変な意味で取らないでほしいんだが、 なんか経験がにじみ出てるみたいでちょっと面白かった。
変な意味ってどんな意味?
「
>>743 がおかしなことを言っているからワラタのではなく、
むしろ
>>743 の言ってることが妙に真に迫っていたことにワラタんだ」
ってことでしょ。
eclipse 使ってみたけど動作が不安定な感じだなぁ。 最初、保管機能はきいてるのに何故かセマンティックエラーでまくるし、 デバッグもブレークポイントはきくのにローカル変数が表示されず。 その後、何かの拍子にいきなり正常に動作し始めた。 機能はすごいんだが、eclipse を使い慣れてないせいでめちゃくちゃ使い辛い・・・
754 :
746 :2008/02/06(水) 00:49:12
"Hello"と"return"でスペルミス指摘されたのでぶち切れてスペルチェッカー切りました
>>751 一個前の入ったね。
VCに慣れた身としてはちょっと戸惑ってるけど問題なさげ。
>>755 すげー高機能だなぁ。。。
>>753 dll作るがよろし。
その後implib。
Eclipse試してみたら import std.stdio; ~~~~~~~~~ writefln( ~~~~~~~ とか言われて俺涙目w 時間あるときにひとつずつ設定していかないとダメだな・・・
759 :
752 :2008/02/06(水) 01:06:38
eclipse を起動しなおしたらまたうまく動作してねーやorz
なんか別の言語のパーサが動いている気がする。他の言語は切った方が良いのかな。
>>755 スペルチェックだけなら良いんですけど、ddoc 表示もできない。
正常動作中は import モジュールの上でF2押すと説明文出たのに、
セマンティックエラーが出てる状態だと
「単語`xxxx` のスペルが正しくありません。」なんてエラーが出る。
ずれた import std.stdio; ~~~~~~~~~
762 :
753 :2008/02/06(水) 01:08:05
763 :
デフォルトの名無しさん :2008/02/06(水) 01:18:11
>>753 gccじゃなくて、Digital Marsのdmc か Borlandのbcc
にオブジェクトファイルを吐かせるといけるとおもわれまる。
Linux(ubuntu)でhello world書いてみたらFLOCKがundefined言われた。 ソースみてなんとなくGCC_IOを定義するようにしてみたら行けたけど、これでいいのだろうか。 あとstringでエラーが出る。CompilerVersionちゃんと2.xにしたんだけどなぁ。 alias見てくれないのかなぁ。
765 :
753 :2008/02/06(水) 01:24:55
>>763 了解。まずそっちをやってからDLLをやります。
>>764 D2.0対応はまだ不完全で、invariant()まわりでちょっとバグがあるっぽいこと書いてあった。
767 :
753 :2008/02/06(水) 01:37:57
>>761 お ありがとう コンパイラの設定ができてなかったんだね
プロジェクト作成時に設定したらうまく行きました
>>766 そうなのかー。サンクス。
まさか本当にAutoCompleteが(曲がりなりにも)利用できる日が来るとはな……。
ひとつの到達点だな。いち早くたどり着いてくれたのがdescentで嬉しいEclipseユーザ俺。
意味のあるaliasと意味の無いaliasの区別がつきません><
しかしPoseidonがEclipseベースなんだからDescentと共同開発でもしてくれればいいんだけどな 俺のEclipseはDescent専用なのでこれのためだけに100M近く使うのがもったいないというだけだがw
PoseidonはDWTベースというだけで別にEclipse関係なかったような
例のBOFって、Dを試しに使い始めました程度の人でも 参加していいもの? 行くと場違いだったりしないかな。
福岡ならいけたのに(´・ω・`)
遠いw
776 :
デフォルトの名無しさん :2008/02/06(水) 17:25:26
マイクロソフトはどうしてかぶらない名前に出来ないのか。
MSらしい嫌がらせだよな。 Borlandの次は、をるたんが標的なのかw
どーせコードネームだろ。 本リリースではXのつく名前にするに違いない。
>776 DってDQNの略だよ。
MSに目をつけられるほど完成度の高い言語だったのかw
MSが肩入れすることで、ようやくD言語も日の目を見るな。
やばいwD言語の検索結果が少しM$に侵食されてるw
>>783 おいおい。「D」と名の付く全く別の言語だぞ。
> 「非開発者を対象とした宣言型言語」
ただでさえD言語の情報はWEB検索しづらいのに、
MSのせいで更に困難に・・・
SolarisにDスクリプトってのがあったよな
何処かにEclipseのわかりやすい使い方無いかな どこをどうさわっていいやらさっぱりだ
788 :
デフォルトの名無しさん :2008/02/07(木) 00:13:45
>>776 吹いたw
ところで、
module main;
import tango.io.Stdout;
void main(){
C c1 = new C();
c1.Func();
Stdout.formatln( "&c1 = {:X8}", &c1 );
}
class C{
void Func(){
Stdout.formatln( "Func-this = {:X8}", &this );
}
}
を実行すると
Func-this = 0012FE74
&c1 = 0012FE84
となって、二つが違うアドレスなのはなぜ?
C++で同じようにthis調べると一緒だったけど。
>>788 &c1はc1があるスタックを指していて、&thisはthisがあるスタック(thisはアセンブラ的にC.Funcの引数として渡される)を指してる、多分。
>>788 Dのクラスは参照型だから、C++でいうとC*に相当する。
だから、cast(void*)c1 == cast(void*)this; になるはず。
>>788 Cをstructでやってみれば、C++と同じ結果になると思うよ。
794 :
788 :2008/02/07(木) 01:18:41
>>792 なるほど。その通りになりました。
参照型。。。あれよく分からないんだよなあ。
struct内でもthisはポインタだった気がするんだけどまぎらわしいようそうでないような
796 :
788 :2008/02/07(木) 02:19:19
>>795 試してみたら、構造体ではthisは普通にポインタみたいです。
synchronized ( Expression ) ScopeStatement これの存在意義がわからないです・・ どなたか教えていただけますか
Object lock = new Object; void foo() { bar; synchronized(lock) { hoge; fuga; piyo; } buz; } とかでメソッド全体よりも細かい単位でロック制御できる
>>798 横レス失礼
それって、Mutexとどこか違うの?
逆に、Tangoのtango.core.sync.Mutexって意味あるの?
ブロックから出れば勝手にロックが解除される
802 :
799 :2008/02/07(木) 09:50:33
なるほど、ありがとう。把握した。 大した違いはないけど、より細かいことがやりたかったら synchronized ( Expression ) ScopeStatement だの、Mutexクラスだのを使えってことか。
803 :
797 :2008/02/07(木) 11:41:03
なるほど、Mutexとして使えばいいのですね ありがとうございました
この俺をさらに強固なアンチMSにしてくれたね。 痛い目を見るよ、この結果は。
でもぶっちゃけお前スライムより弱いべ?
かたやMSは絶好調時のムドーより強い
Descent 0.5.1
tangoの日本語ドキュメントは、何処かで公開されてないですかね?
Descentつかってる方におききしたいんですが、 デバッグ機能としてのbreak-pointや、watchもばっちりなんですか?
812 :
808 :2008/02/07(木) 20:52:35
>>810 ありがとうございます。
見て来ましたが、ぜんぜん日本語化進んでないって事ですねw
英語ダメダメだから、安物の翻訳ソフトでも買おうかな。
813 :
デフォルトの名無しさん :2008/02/07(木) 21:15:01
今Dでキーボードフック(グローバル)を書いてみてるんだけど、なぜか上手くいかない。 ちゃんとDLLからSetWindowsHookEx呼んでるし、SetWindowsHookExは成功してるみたいないんだけどな。 Dだとグローバルフックが出来ない理由ってある?(ローカルは出来た) もうちょっとコード見直してきます。
そーいやD言語でググってたらSunにもD言語があるのを見つけたっけなぁ。 ウォルタンはSunからは何も言われなかったんだろうけど。 Firebirdほど大きな問題にはならない気がするけど、 やっぱややこしいから変えてほしいところだ。
Sunのほうが5,6年後でしょ。
>>813 グローバルフックなら共有データセグメントとかメモリマップトファイルとか使って、
フックハンドルをプロセス間で共有できるようにしないといけないよ。
ローレベルフックを使うのも一つの手。
817 :
813 :2008/02/07(木) 22:02:14
>>816 今までずっとそう思ってたんですが、WindowsXP/2000ではCallNextHookExの第一引数はNULLでいいらしいです。
第一引数に何か渡しても無視されるそうな。
818 :
813 :2008/02/07(木) 22:04:11
D言語でもお麻衣さんの問題はAPIスレで面倒みてもらったほうがよろしかろ
821 :
819 :2008/02/07(木) 22:12:07
実はVC++2008で書いたコードでは上手くいっているのでAPIというよりDLLの問題かなと。 そのVCで作ったDLLをDのmainから呼び出した場合上手くいきました。
822 :
813 :2008/02/07(木) 22:13:18
失礼。↑は813です。
>>820 何回同じ話題振ったら気がすむんだよww
同じスレぐらい検索しろ
824 :
デフォルトの名無しさん :2008/02/07(木) 22:32:00
825 :
デフォルトの名無しさん :2008/02/07(木) 22:36:19
ネームぱくられました
たぶん、D言語では商標とれないよね。
828 :
813 :2008/02/07(木) 23:19:49
いろいろしてみたけど結局分からないorz
>>827 というわけで載せるためにソース整形してきます。
>>815 あ、ほんとだ。
向こうのnewsでも「"D"も有名になったもんだ =P」なんて皮肉られてる……のかな? 英語ヨクワカラナーイ。
830 :
813 :2008/02/07(木) 23:50:35
↓DLLのソース // test_hook.d module test_hook; import win32.winbase; import win32.windows; static import tango.stdc.stdio; import tango.stdc.stringz; import tango.io.Stdout; pragma( lib, "tango-user-dmd.lib" ); HANDLE g_hModule = cast(HANDLE) null; // DLLのモジュールハンドル HHOOK g_hHook = cast(HHOOK) null; extern (C){ void gc_init(); // GC初期化 void gc_term(); // GC終了 void _minit(); // モジュールリスト初期化 void _moduleCtor(); // モジュールコントラクタ実行 void runModuleUnitTests(); // 単体テスト実行 }
831 :
813 :2008/02/07(木) 23:51:14
extern(Windows) BOOL DllMain( HANDLE hModule, ULONG ulReason, LPVOID pvReserved ){ switch(ulReason){ case DLL_PROCESS_ATTACH: gc_init(); // GC初期化 _minit(); // モジュールリスト初期化 _moduleCtor(); // モジュールコンストラクタ実行 runModuleUnitTests(); // 単体テスト実行 g_hModule = hModule; break; case DLL_PROCESS_DETACH: gc_term(); // GC終了 tango.stdc.stdio._fcloseallp = null; // DLLが終了しても標準入出力を閉じないようにする。 break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: return false; } return true; } export extern(Windows) void HookStart(){ g_hHook = SetWindowsHookEx( WH_KEYBOARD, cast(HOOKPROC)&KeyboadProc, g_hModule, 0 ); }
832 :
813 :2008/02/07(木) 23:51:53
export extern(Windows) void HookStop(){ UnhookWindowsHookEx( g_hHook ); } extern(Windows) LRESULT KeyboadProc( int code, WPARAM wParam, LPARAM lParam ){ if( code != HC_NOREMOVE && code >= 0 ){ MessageBox( cast(HWND)null, toString16z( "Key pushed" ), toString16z( "test_hook" ), cast(UINT)0 ); return 0; //処理をした。 } return CallNextHookEx( cast(HHOOK)0, code, wParam, lParam ); }
833 :
813 :2008/02/07(木) 23:53:57
----------- ↓main.exeのソース // main.d module main; import win32.winbase; import win32.windows; import tango.stdc.stringz; pragma( lib, "tango-user-dmd.lib" ); const wchar[] HOOKDLLNAME = "test_hook.dll"; alias extern(Windows)void function() FUNC; FUNC HookStart, HookStop; void main(){ auto hMod = LoadLibraryW( toString16z( HOOKDLLNAME ) ); HookStart = cast(FUNC) GetProcAddress( hMod, "HookStart" ); HookStop = cast(FUNC) GetProcAddress( hMod, "HookStop" ); HookStart(); MessageBox( cast(HWND)0, toString16z("フックしています。"), toString16z("main"), cast(UINT)0 ); HookStop(); FreeLibrary( hMod ); }
834 :
813 :2008/02/07(木) 23:58:15
----- // test_hook.def LIBRARY 'TEST_HOOKDLL' EXETYPE NT CODE PRELOAD DISCARDABLE DATA PRELOAD SINGLE EXPORTS HookStart @1 HookStop @2 -------- 以上です。 環境はtango 0.99.4 ( dmd 1.024 ), Binding Win32API -Unicodeでコンパイル。
835 :
813 :2008/02/08(金) 00:03:33
あ、-version=Unicodeのことです; フック中に他のアプリでキーを押すとMessageBoxを出します。 が、実際は反応してくれません。メモ帳起動->main.exe->メモ帳でキーボードを押す、として反応しませんでした。 さっき気づいたのですが、なぜかほかのコマンドプロンプト上のキーボード操作には反応するみたいです。
Dがなんか特殊なことやってんのかもね。 俺もグローバルフックプロシージャ内で try/catch() 文書いたら全プロセスがこけた。 SEHフレームの構築で何かやらかしてんじゃないかと予想してるが。
2chにソースはるなボケ
罵倒するほどでもないが、読みにくいのは確かだな。
なんどめだ
841 :
813 :2008/02/08(金) 01:11:27
すみません、スペース入れようかどうか迷ったのですが結局入れませんでした。 全角スペース挿入だとコンパイルする人が半角に直すのが面倒かと思い、 nbspを入れるのも考えたんですけど、それが一般的なのかわからなかったので、そのまま入れました。 ソースを張るときはどうするのが一般的ですか?
1レスに収まりきらないなら、適当にアーカイブ化してどっかのアップローダにでも上げればいいんじゃないかな。 複数ファイルだとビルドするのも面倒だしねえ。
>807 stringがエラー扱いにならなくなってるな。ありがたい。
おお、Descentがstringをchar[]として認識するようになった。 全体的にautocompletionが賢くなって、aliasの扱いが改善されてるらしいな。 "str".tolower()とかはまだエラーって言われるけど。
847 :
デフォルトの名無しさん :2008/02/08(金) 01:45:45
>>846 ちょw DigitalMars完全否定w
tango入れてないので、Phobos用に少し書き換えてやってみたけど、症状ほぼ同じ。 自分とこの環境では、メモ帳が固まったまま応答無くなる。
849 :
813 :2008/02/08(金) 02:10:22
あ、出来た...
defファイルの
DATA PRELOAD SINGLE
を
DATA PRELOAD
にすることでちゃんとフック出来ました。
defファイルの書式(メモリ指定あたり)とか調べても見つからなかったからサンプルのまま使ってたけど、ここだったんですね。
C++の方ではdefファイルを書かずに作っていたので普通にフック出来ていたようです。
>>848 試していただいてありがとうございます。
次からは長いコードはアーカイブするなり気をつけますm
あと、defの書式やオプションの解説はどこかにありますか?
850 :
813 :2008/02/08(金) 02:17:40
勘違い。VC++の方でもdefは書いてたけど、EXETYPE/CODE/DATAの設定が無視されてました。
>>846 あれだな、情報操作に一番騙されるのって、「自分の頭で咀嚼する」意欲だけはあるけど、
調べる気があんまり無く、誘導されるままに「自分なりの見解」に辿り着いて満足しちゃうタイプの人間だよな。
この短いブログを書く時間で、D言語が既に存在するかどうかなんて調べられるのに、
「あるかどうか」という事実より、「実はなかったということのようです」という見解をひけらかすほうが大事なわけだ。
まったく思考が発展しない馬鹿のほうが、その点では無害かも。
製品化してないものは存在しないという考えかもね。 DMDなんて同人サークルが勝手に作った独自言語程度に思われてたらやだな。
digital marsって会社のポジションがよくわからん。 IT世界的に見たらどれくらいの影響力があるんだろう。
IT世界とかあやふやすぎるだろ・・・ Cコンパイラ界、ECMAScript界なら 結構いいはずだぜ! たぶん
トップページに会社情報がないあたりが何とも。 ウィキペディア(英語のほう)みた感じだと 小規模なベンチャーかな?って思った。
digitalmarsは本当にWalterタンの同人サークル程度のもんだが。 コンパイラ界でWalter Brightの名前を知らん人間はいないだろ常識的に考えて、くらいの影響力。
それはともかく次スレからはDigitalMars Dって書かないといかんな めんどくせえ
後発がMicrosoft Dって書くもんじゃね?
encoding周りをちゃんと実装してるライブラリは見ないね。 iconvとか使ってみるといいかも。
>>861 キミがそいつのバグを取ってくれたら、38万の日本のDユーザが喜ぶよ
865 :
デフォルトの名無しさん :2008/02/08(金) 18:58:46
Eclipse起動しただけでメモリ83MBくってる。。。でかすぎ. ちなみにVC++2008Expressは28M
もはやメモリ1G五千円の時代だよ。 28と83なんて大して変わらない。
誤差だな
868 :
809 :2008/02/08(金) 20:58:29
>865 GoogleDesktopに600Mほど食われたのに比べればどうということはない
870 :
デフォルトの名無しさん :2008/02/08(金) 21:06:11
>>866 メモリ512MBノート使ってますorz
増設しようかと思ったけど今主流のノートメモリの一つ前のタイプらしい。
新しいノートに変えたときに流用出来ないんで、やめときました。
>>866 >メモリ1G五千円
ノートか?
今は樋口一葉で2GB買えるだろw
バルクか
>>871 そりゃ味を選ばないならいくらでも食えるだろ。
875 :
809 :2008/02/08(金) 21:54:48
>>874 うわぁ、すいません m(_ _)m
ありがとうございます!
>>873 ノーブランドだったら1GBで英世2枚だよ
メーカー製でも4枚要らない
そのくらいのことも調べずに価格の最新事情を指摘されたくらいで「味を〜」とか騙らないでね
何を必死になってるのかさっぱり分からん。
言っとくけど俺をあまりナメないほうがいいよ vipでコテハンやってるしこのスレ潰すくらいの影響力は持ってるから くだらないことで刺激して後悔しないようにね
879 :
デフォルトの名無しさん :2008/02/08(金) 22:25:34
この味は! ・・・ウソをついている『味』だぜ・・・
じゃあつぶせば? それとも口だけ?
まったくだ
>>878 えーと・・・
この場合つっこんだら負けなんだろうな。
最近はやってきたコピペだしな
885 :
デフォルトの名無しさん :2008/02/08(金) 22:34:40
>>884 だよね。さっきSleipnirのスレで同じ文章見かけた。
俺もgdi++スレで見たよ
他所のスレで見かけたコピペをすぐに使いたくなっちゃう子って可愛いよね。
たった3行でここまで哀れみを誘うコピペ作ったやつも凄いな。 俺さっきから得も言われぬ哀れみを感じて表情が微妙なままだ。
それマジで言ったん?ソースあんならすぐ出せ マジなら2ちゃんねら総力を上げて潰すが
大漁だなw お前らコピペだと分かってるならスルーしろよw それくらいもできないのかこのオタクどもはww
この流れは参加しないと勿体ないとおもっちまって。 D言語スレでやるこっちゃないけどな。
いまどき、後釣り宣言は流行らねえだろ
class Fileを使いforeachで行ごとに処理する場合、 foreachの頭で毎回ディスクにアクセスしてデータを取り出してるんでしょうか? BufferedFileを使ったら速度が20倍になったんですが。
正直釣りや煽りならそういって欲しい派だけどな俺は 釣りも後味良いのと悪いのとがあるんだよな そういやなんだか2ちゃんねるの中で話されていること(煽りやら学歴厨やネトウヨその他の・・・)を マジに取ってしまってる人が最近出始めてきてるように思う こりゃあやばいかもわからんよ10年後は
>>893 そうだよ。それも1byteずつReadFileなりreadなりしてるよ。
なんで、ソースついてるのに読まないのか不思議だ。
知人の話ではいい年こいた大人が会社で自分はにちゃんねらだのVIPPERだの大喜びで宣伝してるらしい。 年の離れた上司がそんな感じで萎えるとか愚痴られた。10年経たなくとも一部はもう駄目かもしらんね!
897 :
デフォルトの名無しさん :2008/02/08(金) 23:03:46
Descentでtangoを使う為の設定が分からんorz
>>895 そうなんですか。。。
単純な文字列変換なんですがperlより遅くなってしまってどうなってるのかちょっと不思議に思ったので。
ソースは読んでも多分わからないので読まなかったのです。
モジュールの中身を知らなくても動くには動くので今まで気にしたことがなかったのですが。
これからは気にして読んで理解することからはじめようと思います。
どうもです。
>>897 TangoのウェブサイトからDMDバンドル落としてきて、
D>Installed Compilersからパスを設定すれば普通に動いたよ。
813氏いる? プログラムを実行してグローバルフックかけた状態で、ファイルのショートカットのプロパティを開いてリンク先を変更すると、エクスプローラがフリーズして電源切るしかなくなるのだが、同じ症状出る? 俺は、これがあるせいでDで作るのをあきらめた過去があって、ほかの人はどうなのかちょっと聞いてみたい。 GDCやVC++だと大丈夫なんだけどな。 ちなみにOSはXP。
901 :
813 :2008/02/08(金) 23:33:55
902 :
デフォルトの名無しさん :2008/02/08(金) 23:36:45
>>899 出来ました。設定する前にプロジェクト作って、その後に設定したからエラーのままだったらしい。
設定後に一端プロジェクト消してもう一回作ったらちゃんと動いた。
設定変えたらちゃんとプロジェクトに反映してほしいな。。再起動はさせてたんだけど。
903 :
900 :2008/02/08(金) 23:40:09
>>901 >>830 あたりのコードと同じ、普通のキーボードフック。
tango入れてないから試せないけど、このコードでも同じ症状が出るはずなんだけど。
904 :
デフォルトの名無しさん :2008/02/08(金) 23:42:23
あげ
905 :
813 :2008/02/08(金) 23:47:25
>>903 キーボードフック中にリンク先変更で?まさかねーw
と思いつつ試したらフリーズしましたorz|||
906 :
813 :2008/02/08(金) 23:49:27
しかもタスクマネージャからKILLしても死なないし、CPU使用率0%のまま。 explorer何者だよ...
907 :
813 :2008/02/09(土) 00:00:01
ちなみにWM_GETMESSAGEフックではならなかった。
908 :
900 :2008/02/09(土) 00:16:04
仲間がいたw GDCやVC++だとなんともないから、たぶんリンカが悪いと思うんだけど、モジュール定義ファイルをいくらいじくっても改善しなかったんだよね。 >ちなみにWM_GETMESSAGEフックではならなかった。 WM_GETMESSAGEはすべてのメッセージをピックアップするみたいだから、必要なメッセージを抽出すれば使えるかもしれない。 明日にでも試してみるよ。 ありがとう。
909 :
813 :2008/02/09(土) 00:30:21
WH_KEYBOARD_LLでも発生しなかった。 代用ならLLかGETMESSAGEだな。 ちょっと調べたことを列挙。 LLはNT/2000だけ、DLLも作成しなくていい。 GETMESSAGEはメッセージの書き換えとかも出来る。もちろんWM_KEY系も来る。 WH_KEYBOARDはWM_KEYUP/WM_KEYDOWNの時に呼ばれるらしい。おそらくGETMESSAGEの場合と同じタイミングのフック。 だからGETMESSAGEで代用は出来ると思います。 でもDLL自体の問題がどうにもならないのは少し気持ち悪いな。
911 :
813 :2008/02/09(土) 00:34:40
>>910 新しいタスクの実行も試してみたけど反応無しでした。既にexplorerのプロセスがあるから多重起動だと思われたんじゃないかと。
再起動じゃなくてタスクマネージャからログオフして回避した。
912 :
813 :2008/02/09(土) 00:38:59
>>910 解凍するとup31499って名前のファイルが一つだけ。。。
914 :
900 :2008/02/09(土) 00:48:31
>>909 俺もちょっと過去に調べたことを・・
LLはフックだけならDLL作らなくていいけど、他アプリでの固有の状態、たとえば、キーボードメッセージがきたときにコントロールキーの状態が知りたいというときには、やっぱりDLLを作る必要がある。
GetKeyboardStateはローカルな状態しか取得できないから、他アプリ上でフックしたときの状態はDLLの中のプロシージャから取得するしかない。
だから、GETMESSAGEにはちょっと期待。
>でもDLL自体の問題がどうにもならないのは少し気持ち悪いな。
これには同意。
915 :
813 :2008/02/09(土) 00:48:48
いえ、zipのDLまではしたんだけど、解凍するとなんか変です;一応二種類の解凍ソフトで試してみましたが。
916 :
910 :2008/02/09(土) 00:58:23
>>915 中身は、813さんが貼ったソースを、phobosで動くようにしただけの物です。
917 :
813 :2008/02/09(土) 01:02:50
>>916 えーと、
>>912 に書いたように、解凍すると中身がup31499というファイル一つになってます;
アップローダが何か変なことしたんじゃないかと思いますが。
918 :
900 :2008/02/09(土) 01:11:57
>>917 自分は
1.913のアドレスをブラウザで開く。
2.up31499.zipのリンクをクリックする。
3.さらにup31499.zipのリンクをクリックする。
でちゃんと
hook
-bin
--main.exe
--test_hook.dll
-src
--main.d
--test_hook.d
--test_hook.def
という内容のものが出てくるよ。
Noah使用。
919 :
813 :2008/02/09(土) 01:17:51
一応解凍出来ました。でも動作は変だ。 zipを保存->Lhaforgeで解凍->up31499.zip_extractedというファイルが出来る->それをLhaforgeで解凍->hookフォルダが出来る。 なんだろ、これ、二重圧縮?
920 :
813 :2008/02/09(土) 01:22:19
ちなみにLhaplusで解凍したら
>>912 の現象。
zip_extractedでぐぐって見たけど、同じような事例があるだけですね。
921 :
900 :2008/02/09(土) 01:26:25
>>919 こちらでは、7-zipでも正常だった。
ソフトとの相性?
ところで、TangoのGCではminimizeができるようになるのかな? なんかだれかほしがってた気がするけど。
極窓に投げると.gtzと判別されますよ、っと
924 :
813 :2008/02/09(土) 02:07:43
gtz...検索しても情報無し。と。
925 :
813 :2008/02/09(土) 02:21:16
でもC++やC#はCから派生したって意味だろうし、これは全く違う言語だからなあw
Eclipseってもっさりしてるし欲しい機能がどこにあるか分からなくて疲れる。
おまいら当然Dのリンカが吐くモジュールのOpt.OSVer[0]とOpt.SubSysver[0]って毎回書き換えてるよな?
>>929 素直にdefファイルなり/exet: /su:なりで指定しろよ…
-gオプション付きでコンパイルしたものって配布しちゃだめなの?
>900 確かにフリーズするが、ほっといたら直ったが(一分くらい?) たしかに、このバグはちょっと困るなぁ……
自分用に導入ガイド書いたんだが誰か添削してくれないかなぁ。
導入ガイド。@DMD+Phobos編@Windows@20080209
1,DIGITAL MARSのサイトからDMD.zipとDMC.zipを落としてくる。
--筆者はVer1.015で試している。
--dmd.2.010.zipでも同じ構成と思われる。
--圧縮ファイルは念のためとっておきましょう。
2,両方を解凍。
--DMD.zip->(DMDとDM)
--DMC.zip->(DM)
3,DMD側のDMにDMC側のDMを上書き。同じフォルダにDMDとDMになる。マージするんです〜。
4,任意でPATHを通す。
--c:\dmd\dmd\bin;c:\dmd\dm\bin とか。Pathの区切り文字は ; です。
---場所は貴方が決めます。
--XPの場合:マイコンピュータを右クリック->システムのプロパティ->詳細設定タブ->環境変数ボタン->Path
---開発ユーザのユーザPATHにするのが良いと思います。
5,テストします。
--ソースを用意しましょう。
---文字コードはUTF-8オンリーです。SJISとかEUCとかではだめです。
--お好みでbudやdsssを用意しましょう。
---dsss:
http://www.dsource.org/projects/dsss/ ----筆者は使ったこと無いです。
---bud:
http://www.dsource.org/projects/build/ ----budはpath上の日本語を許容しません。
わなDで十分な気もしないでもない
OSを良く吹っ飛ばすので実行ファイル系はいったんなくなっちゃうんです。ウイルス怖いので。 で、手元にまとめて置いておきたかったんです〜。 そういえば、わなD有りましたね。。。 ちょっとのぞいてこよう。
改めて読んでみるとわなDで十分なきがしてきた。orz Descentのことも書いてあるし。 車輪の再発明再び!XP
EclipseをDで書き直すって需要ある?
質問なんだけど、数学の行列って必ず長方形なり正方形なの?立方体にはならない?
>>938 誤爆?
なんとなく言いたいことが不明だが
テンソルのことかな?
行列の添え字が3つ以上あったりするやつ
>937 「もっさりしないEclipse」はEclipseユーザの誰もが夢見る代物だと思う。 実現するかはともかく。
>>937 D言語で書かれたIDEは、D言語が実用にたえることの証明になると思うよ。
がんばれ
>>939 あー、行列って言わないのね。もっと大きな体系があるのか。
勉強になった。Thx!
>>938 >>939 の追記だけど普通に多次元行列は定義できるよ
んで扱いやすい性質を持ってるのがテンソルと呼ばれてる
大雑把に言えばこんな感じかな?
>>943 把握した。・・・多分。
テンソルって言うのは初めて聞いたよ。
調べてみる。俺、文系だけど〜。^^;
ここ何スレだよwww XX年後、D言語にテンソル型が実装されることをこのスレの誰も知る由がなかった。
その前にD言語はMSに乗っ取られてしまいましたとさ。
しかしなんとMSがDMを買収 めでたしめでたし
テンソル使うならやっぱMathematicaじゃね? 計算の速さ考えるなら別だけど
その中間としてSun Fortressなんかが出てきたりとか。 いろいろありますねえ。
個人的には線形代数だと三角行列と対角行列が欲しい。 んで、対角化や特異値分解とかやってくれるの。 粗行列と Lanços 対角化もサポートしてくれると最高。
952 :
デフォルトの名無しさん :2008/02/09(土) 21:54:40
でOcamlも結構よくね? 手続き型と静的なシンボルリストをあわせもつSystem.out.println標準内蔵だしな
そういえばD言語に標準の国際化機能ってあるの?C#のサテライトアセンブリみたいな。 ないなら何が一般的かな?
>>802 遅レスだけど…。
tangoのmutexがどうゆう仕様かは知らないんだが、
synchronized文はロック・アンロック(ロック変数の処理)をプログラマが
気にしなくていいのが、pthreadとかのmutexと違うところ(良いところ)だと思う。
例外発生時とかのイレギュラーな動作の時もアンロック保証がされてる所。
変数に対してじゃなくて、制御フローに対するatomicの保障を言語レベルで行う
ってのはうれしいことじゃないかな。
(変数に対するatomic保障もできるけど)
スレッドプログラミング超初心者の時に、下みたいなプログラムを書いて泣いた覚えあり。
下は極端な例(&雰囲気)だけど…。
下の例で、ほかにたとえば関数func()内で例外が発生してどっか飛んだ場合のアンロックは…、とか。
まあ、他の人はそんなミスしないのかもしれない…。
int a; // ロックに使用するグローバル変数
int hoge() {
bool b;
lock(a); // ロック開始
b = func();
if (b){
return 10; // bがtrueだとロック解除されないで、hoge()を抜けてしまう…
}
unlock(a); // ロック解除、falseの時のみ解除される
return 0;
}
基本、クリティカルセクションは必要最低限で。
そういう意味で、上の例のプログラムはよくないかもね。
(もしfunc()内全体の処理をロックする必要がないなら)
スコープガードを使うのも手だね。 lock(a); scope(exit) unlock(a);
結構スコープガードって便利だよなー
便利すぎ あれ無しでは生きていけない体になりました 特に害も無さそうだし
>>953 マルチリソースっていう感じのはまだなさそう。
文字コード自体はUTF-8採用で国際化という感じになってる。
行列演算もいいけど、複素数演算ももうちょっと充実してくれないかな。 せっかくネイティブで複素数対応してるんだし。
960 :
デフォルトの名無しさん :2008/02/10(日) 01:47:55
ぱっと見C言語なんだが。
いきなりそんなこと言われてもどう返事してあげればいいのか分からない。
>>960 GC搭載ですよ。
Cライクって事は過去の遺産、コーディングの癖とか使えるって事です。適合してるかは別ですが。
GCってステキ
964 :
デフォルトの名無しさん :2008/02/10(日) 02:51:27
なるほど、{ } このトークンは亜種の言語処理系でもよく採用されている。 今更言語Dを勉強するほど若くもないので参考にしておきましょう。 デジタルマースにもこのDコンパイラが確かにあった。
日本語でおk
>>864 見落としてた。ありがと
>>668 本人かどうかわからんけど、発表する気があるなら時間配分とか(NDAがらみで録画公開不可とか)あると思うんでスピーカの誰かに連絡くれまいか
当日いきなり「お、そこに○○がきてるじゃないか。お前のほうが詳しいからお前話せ」みたいなのもカッコいいとは思いますが
>>686 漏れだ。ただ今のメンテナは漏れじゃないからサイトやドキュメントは任せてる
967 :
デフォルトの名無しさん :2008/02/10(日) 08:49:33
>>967 ゲームにもよると思うけどな。
でも、今時のGCで困るほどリアルタイム性が要求されるゲームなんて
そうそうないと思うぞ。
>958 そっか、ってことはまずはそこから作らなきゃならないのか。ありがとう
向かないつっても実際作って公開してる人はいるし(ABAさんとか)、企業製品でもGC使うゲーム結構多いと思う。 うぉるたんも力説してるけどGCは怖くないよ!
ストップザワールドが怖かったら、 その時だけ一時的に GC 止めればいいしな。
今時on the flyじゃないGCなんて・・・
そういう妄信的な姿勢って薄気味悪ささえ覚える
もともとGCは補助であってプログラムのメインじゃないし、シンプルなもので十分だと思う。
もっと高度なGCが必要ならプログラマ側で交換すればいいだけ。
Dって完全にGC使わないなんてことできるんですか? 無理無理無理無理
scope 文で事足りる処理しか書かなければ可能。 実用アプリじゃほぼ無理だろうが。
>>977 方法を調べたことは無いけど、
http://www.kmonos.net/alang/d/2.0/dll.html#Dcode のDLLのコンパイルの説明で
>dmd mydll.obj \dmd\lib\gcstub.obj mydll.def -g -L/map
>mydll.obj を mydll.dll という名前のDLLへとリンクします。 gcstub.obj は必須ではありませんが、これをリンクすることで、 不要なGCコードを省くことができます。 およそ12Kbの削減になります。
ってあるのが関係あるかも
GCをオフなるようにしてGCコードを省くようにすればGCの機能は消えるんじゃない?
980 :
979 :2008/02/10(日) 12:59:08
981 :
977 :2008/02/10(日) 13:34:57
俺が言いたいのは、そんな泥臭い方法でGCを無理に押さえつけなくてもC++なら使いたいときだけGCが使えて便利だねって話
何か妄信的なC++厨が迷い込んでるな そこまで言うならC++でGCを実装してABA GamesのOpenGLゲームやXNAのサンプルゲームと同じクオリティを省メモリで作って上げてくれ C++なら便利みたいだからD言語やC♯より楽にGCアプリを作れるんだろ?
>>981 まあ確かに簡単にオフに出来ないのなら言語仕様変えて欲しいな。(俺は今の言語仕様でGCを完全に切れるかは知らない)
でもDは標準でGC有り、C++は標準でGC無し。どちらも有り無し選択可能ってだけで変わらないんじゃないかな。
C++でGC使うのに外部ライブラリ使う準備する手間と、DでGCを切る手間はどちらも変わらない気がする。
C++ で GC って C++/CLI を想定しているのだろうか?
BoehmGCじゃないの
もうそろそろ次スレ必要じゃね?誰かよろ。俺はホスト制限で弾かれた。
>>975 というような事を言う奴にかぎってメモリリークさせるんだよw
GCの制御に多少手を取られても、 言語組込みの方がコードは圧倒的に読みやすくなると思う。 それでもC++を使う方がベターな分野は常にあるんだろうけど、 そういう分野はできればこの先減っていって欲しい。 GCをもっと簡単かつ細かに制御できるれば、Dの適用範囲を広げられるかもねぇ。
本来GCはOSに組み込まれいているべきで(ry
992 :
975 :2008/02/10(日) 15:16:55
>>987 すまんw 俺高校生の趣味プログラマだから、大規模プロジェクトとか経験無しで言ってるw
>>990 乙牌
しかし最近流れが速くなってきたな げいつのせいか
Descentのおかげじゃないか
だな。どうせMSのは製品になったら名前変えるだろうし、Descentのが気になる。
BoF、Descent、MS-Dと、話題が集中したからな…… むしろMSには、OSの開発言語を刷新するような モダンなDリスペクト言語を期待してたのになぁ。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。