超乙
(tyou >> 1).otu();
ドット抜けた/(^o^)\
乙 ~= cast(void*)1;
int いちおつ; いちおつ; ^^
\ ^o^ /;
オブジェクト初期化構文使えるようにならんかなあ。 var foo = new Class { bar = 1, baz = 2 };
そういうような使い方はclassじゃなくてstructでやるべきなんじゃないかと思う。 構造体リテラルがそういうようなのをサポートしてくれたらいいんだけどね。
struct X { int a; int b; int c; int d = 7;} static X x = { a:1, b:2}; // c は 0, d は 7
イニシャライザは代用にならんだろ。
これって国内で実際にビジネスに使われたことある? 言語の使われるか否かは、その仕様よりIDEって印象があるので気になる。
あるわけがない。
>>4 リンク集つくるなら、タイトルぐらい書け('A`)
自分でやれよ
すいません質問です std.file.getAttributes の戻り値の意味はどこかに書いてありますか?
Linuxならman statでst_modeの説明のところ。 WindowsならMSDNのGetFileAttributesのところ。
>>16 正直言うと、12が何に使うものなのか分からんかった。
無名構造体みたいなものだろうか
オブジェクトのリテラルみたいなもんだろう。 newと同時にプロパティを設定することができる。 C#3.0にあるらしい。
25で言いたかったのは12じゃなくて13だった。
>>26 auto x = new class("foo", 3, "bar"){
char[] a; int n; char[] s;
this(...){
foreach(int i, v; this.tupleof){
this.tupleof[i] = va_arg!(typeof(v))(_argptr);
}
}
};
という感じのを、プロパティ名も指定可能にしたようなもの?
C#の、
var foo = new Class { bar = 1, baz = 2 };
は、Dだと
Class __tmp = new Class;
with(__tmp) { bar = 1; baz = 2 }
auto foo = __tmp;
と等価。
>>27 と等価なのはC#だと、
var x = new { a = "foo", n = 3, s = "bar" };
だね。同じ型・名前のプロパティを同じ順番で並べた匿名型は同じ型になるという優れもの。
先に前スレ埋めようぜ。
980を超えたスレは一定期間で勝手に落ちるよ。 なんか不都合あったっけ?
ないな
DMDなら不具合だらけですが><
無名クラスってマイナーなのか、DIとかってこのスレ住人にはあまり普及してない?
Dに無名クラスがありませんから DIってなに?
dependency injection でしょ。
>>33 は誤爆じゃないの?
>>36 Dにも無名クラス自体はあるからなあ。
auto x = new class{
/*クラス定義*/
};
>>37 既存のsc.iniを残す機能が欲しいような
Dの無名クラスマイナーだNE!( ^ω^)
俺はマイナー好き
メジャー好きがここにいる時点でおかしいだろ
Java の無名クラスみたいに基底を指定することはできないの?
できるよ。マニュアル読んできな。
(new Otsu()).res(1);
前スレ
>>1000 そうだといいな・・・
>>45 いやちょっと待て
世界が沈むとかどう考えても不吉な表現すぐるだろ
キン肉すぐる
そりゃだって世界を支えるあるいは盛り上げてゆくためのツールだろ 沈めてどうするんだよw
今更な話だけど、
>>45 みたいにnew Otsu()をカッコで括らないと
すぐにメンバにアクセス出来ないのは少しだけメンドイなぁ、と思う。
Javaだと不要だから余計……。C++とかC#じゃどうだっけ。
Javascriptも括弧でくくる必要ある。C++とC#も同じだったはず。 個人的にはOtsu.new()ってすべきだと思うけど、new() Otsu()が表現できなくなるしなぁ。
ありゃ、 >Javascriptも括弧でくくる必要ある。 は勘違いだったっぽ。スレ汚しスマソ。
>>50 C#は new Class().Memberでいけたと思う。
でも、視覚的に気持ち悪いから括弧つけてる。
class X{ int a = 3; static X opCall(){ return new X; } } void main(){ printf("%d\n", X().a); } これなら外側の括弧どころかnewもいらないよ!
CTFE時にassert(0);が無視されるのはバグ? (DMDv2.002)
http://www.kmonos.net/alang/d/expression.html > コンパイラーはassert式を全く評価しないことも許されています。
> コンパイラは、最適化やコード生成の段階で、 実行がassert(0)
> の部分には到達しないことを仮定してよいものとします。
だとさ。
でもこっちではassertに引っかかるコードで
> Error: assert(0) failed
> Error: cannot evaluate f() at compile time
って言われた。2.002。
更新こないね 修正箇所、機能追加箇所ともに期待が たかまってしまう
58 :
50 :2007/07/22(日) 19:37:55
>>51-54 どもども。
俺もOtsu.new()としたい派でつ。出来ればnew()以外の名前にも出来れば最高ネ。
> new() Otsu()が表現できなくなるしなぁ。
これ何のことだか全然知らないのだけど、どういう意味でしょか?
俺、なんか言語仕様見逃してる?
new(/*アロケータの引数*/) Otsu(/*コンストラクタの引数*/) という構文だから、 Otsu.new(/*コンストラクタの引数*/) とやっちゃうと、アロケータの引数は指定できなくなっちゃう、という話だと思う。
60 :
58 :2007/07/22(日) 19:47:46
>>58 に自己レス。自己解決しました。スレ汚しすいません。
アロケータに引数なんて渡せたのね……不勉強ですた。
なるほどそう簡単にはstaticメソッドと同じ呼び出し構文に出来ないわけだ。
61 :
58 :2007/07/22(日) 19:51:46
なんというリロードしろ俺。
>>59 ありがとです。まさにその話でした。
>俺もOtsu.new()としたい派でつ。出来ればnew()以外の名前にも出来れば最高ネ。 勝手にそう定義すればいいんじゃないの?
>>59 >Otsu.new(/*コンストラクタの引数*/)
>とやっちゃうと、アロケータの引数は指定できなくなっちゃう、という話だと思う。
個人的には ObjC 風に Otsu.alloc(argForAllocator).init(argForConstructor);
にすれば良いと思うのだけど。
それは、変な中間オブジェクトができるから好きじゃないなあ。
じゃあ Otsu.newWithCustomeAllocator(argAlloc, ArgConst) ならみんな納得なのかな。
Otsu.new!!(argAlloc)(argCtor) でいいよ。
67 :
65 :2007/07/22(日) 20:25:48
名前が長いと typo するな... そこら辺は Omni Complete で
カスタムアロケータを使うケースがそんなにあるとは思えない。 明示的にnew(allocator) Obj(construction); とすればいいだけじゃね? でなけりゃ、ファクトリクラスを作るとか。
これ何の話してんの
あまり無いケースの為に特殊な構文を付け加えるのもなんだかなあ…
>>50 ,53
そういうとき、
class C{ static class C_{ int n=3-1; } }
void main(){ printf("%d\n", (new C.C_).n); }
とかしたいときどうなるの?
new (C.C_).n とかいう感じ?
C#はnew C()の()の省略が認められてない。 Javaは白根。
DMD 1.019
What's New for D 1.019 Jul 21, 2007 New/Changed Features Added 0x78 Codeview extension for type dchar. Added extern (System) Bugzilla 345: updated std.uni.isUniAlpha to Unicode 5.0.0 System?
> System is the same as Windows on Windows platforms, > and C on other platforms. 'System'はWindowsプラットフォームでは'Windows'と同じであり、 それ以外では'C'と同じです。 要するにプラットフォーム依存のLinkageを指定できるってことだな。
What's New for D 2.003 Jul 21, 2007 New/Changed Features * Added 0x78 Codeview extension for type dchar. * Moved next member from Object.Error to Object.Exception * Added ForeachRangeStatement * . Added extern (System) * Added std.traits * Bugzilla 345: updated std.uni.isUniAlpha to Unicode 5.0.0
大きいのか小さいのか微妙な変化だな… 個人的には __traits よりも、デバッグ時に関数の隠し引数にでも _caller とか入れてくれたらと思う。
ええい、たった今初めてversion2系をちょっと試してみて速攻1系に戻したところだというのにw しかし何だろう、このforeach周りの不自然な強力さは。 RangeクラスとRangeリテラルを作ろうとは思わなかったんだろうか。 あと範囲を表す関係の演算子って最後を含むか含まないかで".."と"..."あたり二つ用意しないとどことなくメンドイのよね。 traitsはメタプログラミング関係か?
これは強力・・なのか?
>>77 debugブロック?内でしか使えないとか
ForeachRangeキタ━━━━━━(゚∀゚)━━━━━━ !!!!! これを待ってたんだよ。ウォルタたん大好き!
perlは、 for (0..3){print $_;} 0123なんだけど D 2.003 だと foreach (i; 0 .. 3){writef(i);} 012なのね
それは配列のスライスと一緒だな。
84 :
77 :2007/07/23(月) 17:23:02
>>80 import std.stdio;
struct Caller{ string fileName; int line; }
debug void func(Caller _caller, int x){
writefln("%s(%d) : x = %d", _caller.fileName, _caller.line, x);
writefln(x);
}
else void func(int x){ writefln(x); }
void main(){
debug func(Caller(__FILE__, __LINE__), 10);
else func(10);
}
こういうようなのを、
import std.stdio;
void func(int x){
debug writefln("%s(%d) : x = %d", _caller.fileName, _caller.line, x);
return x;
}
void main(){
func(10);
}
っていう風に書けたらいいなって思って。
これでは省いたけど、モジュール名とか呼び出し元の関数名とかモジュール名とか
呼び出し元の関数の_callerとかもあるとさらにいいかも?
長文で申し訳ない。
flectionedとか
86 :
77 :2007/07/23(月) 18:24:49
flectionedって、そこまで詳細な情報って得られるの? 呼び出し元のファイル名の取り出し方とか。 軽く見聞きした程度だからどこまでできるかよくわかってないのだけど… でもまぁ、とりあえず標準でそういう機能がほしいところですね…
>>66 // Otsu.new!!(argAlloc)(argCtor)
class Otsu{
template New_(aA...){
static typeof(this) New_(TaC...)(TaC aC){
return new(aA) typeof(this)(aC);
}
}
template New(aA...){
alias New_!(aA) New;
}
int n;
this(int n){ this.n = n; }
}
//任意のクラスに対応できる版
template niw_(T,aA...){
T niw_(TaC...)(TaC aC){
return new(aA) T(aC);
}
}
template niw(T, aA...){
alias niw_!(T,aA) niw;
}
void main(){
printf("%d\n", Otsu.New!()(3).n);
printf("%d\n", niw!(Otsu)(5).n);
}
とかどうだろう
ヲルターは日曜日にDつくってんのかな
__traitsのallMembersやgetMemberは列挙体にも対応してるのか。 願って止まなかった機能追加キタコレ。
なんで 1.x にはForeachRangeStatementが追加されていないんだああああああああああああああああああああああああ
あわてるな これはヲルターの罠だ
更新まだー
まぁこんなの全然必要無いですけどね…
やっとForeachRangeStatementきたか。 .. 演算子でタプルを作れたら面白そう。 void f(int[] a ...); f(0 .. 2); // == f(0, 1) auto x = [3 .. 6]; // == [3, 4, 5] あんまり使い道なさそうだけど
>>96 template t(T...){ alias T t; }
template range(int s, int e){
static if(s<e){ alias t!(s, range!(s+1,e)) range; }
else{ alias t!() range; }
}
import std.stdio;
void main(){
writefln((int x,int y){return x+y;}(range!(0,2))); // 1
writefln([range!(3,6)]); // [3,4,5]
}
とかテンプレートで
['a' .. 'z'] とかなら使いようもあるかも。
と思ったが、['a' .. 'z' + 1] か。汚いな。
Ruby みたいに .. と ... の使い分けがあれば
しかし今更 .. が末尾を含むことにされても困る
+1でよくねwww
どっちかというと使い分けするほうが俺的にはめんどい だいたい..と...とか似すぎで読み違え頻発wwするかは知らないけど
いまどきキーワードで色分け出来ないエディタを使ってる人は なかなかいないだろうから .. と ... で色を変えりゃいい そういう問題でもないか
直感的に反するだろうね
=== がなくなって is になったときって 間違いやすいから変わったのかな rubyで .. と ... が使われているなら 使い勝手はどうかリサーチしてみればいいんじゃね
VSPluginD アップデートしてくれないかなぁ
What's New for D 1.020 Jul 23, 2007 New/Changed Features Bugs Fixed Fixed extern (System)
109 :
デフォルトの名無しさん :2007/07/25(水) 07:52:30
久々にみてみたら、更新に古いバグジラ番号のFixが結構多い気がする これはそろそろか・・・?
>>106 ruby 使ってるけど .. と ... でどっちが末尾含むのか毎回混乱してる.
>>110 .が、一つ多いのだから
含むと覚えればよい
... は含まない方だよ。
余計どっちがどっちかわかんなくなるがなw
$[a,b) とかいう表記でもあればなあ。
Unicode使って含む表記を a〜b にするとか 嘘
1 to 5 とか。 予約語を増やす方向には行かなさそうだけど・・・ (というか、toは変数名に多く使われてそうだから余計可能性ないか)
3項演算子 in.. の追加まだー if(n in 2..4) writefln(n);
between演算子か。 クエリ言語でしか見たことないけど、 assert(index in 0 .. array.length); とか書ければ便利そうだな。
前から if (2 <= x < 4) とか書きたかったんだよ
python キタ━━━━━━(゚∀゚)━━━━━━ !!!!
ICFPの国際プログラミング・コンテストで日本のチーム「kuma-」が2位に >プログラミング言語としてはRuby,C,C++,D,Java,Perlを使用した。 Dが国際プログラミングコンテストの日本人チームで使われたとか。 メジャーになった…のか?
検索してみたらそれ去年の記事ジャマイカ 今年のコンテストが終わったばかりだからややこしい それはそれとして去年のkuma-はk.inaba氏含めたチームなんだから メジャーになったと言われてもちょっと納得できない罠
今年はk.inaba氏とshinh氏しか使ってないに100ガバス
今年はrope(C++)とHaskelあたりが主力だったのかね Dは残念でした
>>118 Rangeクラス化で二項を推すぜー
class Range(ValueType : Comparable){
ValueType min, max;
bool opIn_r(ValueType lhs){ return (min <= value) && (value < max); }
}
if(n in 2..4) writefln(n);
phobosを使って作ったアプリを配布するときはソースを公開すべき? phobosのライセンスはZlibライセンスに似ていますが、GPLとは 書いてないし、LGPLと解釈すれば自分で書いたソースは公開しなくても よいような気がする
>>126 なんか最適化を阻害しそうじゃね?
(x in a .. b) が
(x >= a && x < b) や
(x.opCmp(a) >= 0 && x.opCmp(b) < 0)
と見なされれば十分だと思う。
みんなデバッグどうしてるの? flectioned 使えば落ちたときのスタックトレースを見ることはできるけど ブレークポイント設定してステップ実行とかしたいのに windbg は不安定すぎて使い物にならないんだけど・・・
>>130 俺はwindbgでそんなに困ったことなかった…
ddbgはどう?使ったことないけど
>>130 参考にならないかもしれないけど、俺はVC++2003使ってる。
これだけで、ステップ実行、落ちたときの呼び出し履歴、リソースエディタと、
今のDに足りないものが補えてる。
>>131 thx ddbgというのもあるんだね 今度試してみるよ
VS2005でうまくいけば一番いいんだけども
_Dmainに関数ブレイクポイントを設定して頭からステップ実行するしかできてなくて不便
行ブレイクポイントを設定しても「このドキュメントのシンボルが読込まれていません。」と表示されて
ブレークポイントが無効化されてしまう
これは設定でなんとかなるのかな?
コンパイラに-opがあるのをつけてみたらどうかな あとasm{int 3;}がブレイクポイントになる。 過去スレにあった
>>132 VS がシンボル情報を認識できているってこと?
どうやるんだろう
>>134 -op をやるだけではダメだった
シンボル情報がないから対応するソースを表示できないって怒られた
asm はちゃんとブレークポイントになったよ
_Dmain に関数ブレークポイントを設定したらうまくソースとの対応を認識してくれるので map ファイルに出てくる他のシンボル名で関数ブレークポイントを設定したらどの関数でもうまくいった VS に map ファイルの内容をシンボル情報として使ってもらう方法をどなたかご存じないですか?
やっぱりリンカが PDB ファイルを出力してくれないと VS ではどうしようもない気がしてきたんですが・・・ orz オブジェクトファイルの形式が違うからなあ・・・
何度も書き込んですまん ddbg 試してみたけど出力に多バイト文字含んでると落ちるね ddbg を実行するディレクトリ名とか・・・ ddbg は Code::Blocks をフロントエンドとして動作できるらしいからそっちに期待してみる 前スレの人は失敗に終わったようだが・・・
enum Foo : ushort { HAGE = 11, HIGE = 22, HUGE = 33, HOGE = 999, } template Bar(T) { const char[] Bar = T.stringof; } void main() { /* ちゃんとHAGE HIGE HUGE HOGEが表示される */ foreach (str; __traits(allMembers, Foo)) { printf("%.*s\n", str); } Foo foo; printf("%.*s\n", Foo.stringof); //"ushort"が表示される printf("%.*s\n", (Foo).stringof); //"ushort"が表示される printf("%.*s\n", foo.stringof); //"ushort"が表示される printf("%.*s\n", Bar!(Foo)); //"ushort"が表示される } どうすればFooという型から(コンパイル時評価可能な)文字列"Foo"を取得できるんだ?
コンパイラのバグくさい気がするのでテケトーに回避策を試した結果。 template Bar(T) {invariant Bar = (T[]).stringof[0..$-2]; } でOK
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ <こいつ最高にアホ 彡、 |∪| / / __ ヽノ / (___) / ∩___∩ | ノ ヽ ! / ● ● | こいつも最高にアホ | ( _●_) ミ 彡、 |∪| / .\ / __ ヽノ / \ ...\ (___) / .│ ..│ / ヽ l..lUUU .U
うけけめけ
ばーじょんあっぷまだー?
>>129 考えてみたけど、インライン化やメンバをfinalにする、Rangeオブジェクトをスタックに置く等が行われれば、
案外いい感じに最適化されるんじゃなかろーかという気がした。
あとRangeクラスはあると実際便利なので、標準で入ってて欲しいなーという願望もあったり。
パフォーマンスを気にしてクラス作るのを敬遠しちゃって、
コードの可読性とかで大きく損をしてるケースを沢山見るのよねぇ。かなり歯がゆい気分になる。
D言語には是非とも、クラス化のリスクを徹底的に減らすような最適化を推進してもらいたいデス。
ところでForeachRangeStatementの箇所がまだ翻訳されてないんで自信無いけど、
Rangeとして書けるのは整数だけ?
いくつかの演算子が適用できればオブジェクトでも行けるようにも読める気がするけど。
>>145 イテレータにも使えるとWalter氏が言ってたような…
>>145 ForeachRangeStatementは今のところスカラーな数値(整数/実数/虚数)だけ。
ただ、構造体/クラスに対応する考えはあるみたい。
news://news.digitalmars.com:119/
[email protected]
void main() { int[5] a; foreach(p; &a[0] .. &a[$-1]) writefln(p); } ポインタ型にも適用できるけど、型の大きさにかかわらず1刻みになるようだな。
Cのdmcでdll作りたいんだけど、どこで聞けばいい?
DMCスレ落ちたんか
クラウザーさん
アップデートまだー?
関数が複数の値を返せたらいいのになあ・・・
Dにインデクサないの?
opIndex?
だよね
>>153 Tupleを返せたらいいんだけどな
なんでできないんだ
Tupleはコンパイルタイムにしか存在しないデータ型だから無理じゃね?
Dには集合型ないの?
>>158 タプル自体の構成を変更したりはできないけど、
タプルの各要素を実行時に変更するのはOK。
ので、
int n; char[] str;
Tuple!(int,char[]) retTupleFunc(){ return Tuple!(3,"hoge".dup); }
Tuple!(n,str) = retTupleFunc();
というような感じのが、もっとマシな構文で実現される整合性の余地はある。
早くタプルリテラルを追加してほしい。
$(int, char[]) だの @(int, char[]) だの、 まだ使ってない記号を導入するつもりはないんだろうかね。
それより、変数宣言以外での、式で使うカンマ構文をナシにして、 a,b,c = f(); で済むようにすりゃ簡潔でいいと思う。 f(x,y,z)とかf((x,y),z)とかやるときも構文の不整合起こさないで済みそうだし。
>>163 それ、不整合を起こさないためには必須だけど代わりの構文が無いと困る。
>>163 Luaでそんなことやってたけど、
便利だわな
カンマ演算子もタプルを生成するようにして、タプルをスカラーで評価したら一番最後の値が返されるようにするとか。
テンプレート型にstaticな演算子が適用できないのは仕様? struct S { static void opAssign(int a) { writefln(a); } } struct ST(T) { static void opAssign(int a) { writefln(a); } } void main() { S = 1; // ok ST!(int) = 1; // error ST!(int).opAssign(1); // ok }
alias ST!(int) STI; STI = 1; とすれば通るけどね
前にもそんな感じのテンプレートの挙動があったな。 まあ仕様じゃなくてバグだろう。
>>165 むちゃくちゃ好きだったLuaとSquirrelだけど
D言語にはまった以降いらなくなってしまった・・・
和訳の中の人はなんであんなにマメなんだ?
まあ、なんにしろありがたいことは確かだ。
FAQかもしれませんがGTK+ってDからも使えますか?
っ gtkD
inが通るなら、outも通らなきゃねとおも
コンパイラ自身がassertion failureって言ってるなら 間違いなくコンパイラのバグだと思うけど。
どっちが? inが通るのが? それともoutが通らないのが?
コンパイラのコード(.cファイル)内でassertion failureを起こしてるから コンパイラにバグがあるのは確定。 関数リテラルでは"FunctionBody"が書ける仕様になってる。 これはin、out、bodyが書ける構文要素のことなので、 outを書けないのはバグ。 inが書けるのは仕様通り。 delegateを省略した場合に事前・事後条件が書けないのはバグ。
ところでWin32APIを軽くラップしようとしたら、 char[]をnullに出来ないので困っていたりする。 func(char[] str){ win32api(toStringz(str)); } func(null); とするとnullが""に暗黙変換されちゃって、funcにnullが持ち込めない。 nullableみたいのって無かったっけ?
str is null ? null : toStringz(str) では
185 :
183 :2007/08/06(月) 15:31:32
>>184 func()と同じ理由でtoStringz()もnullを受け取ることはできないので、あまり意味はないかと。
toStringz(null)はtoStringz("")として呼び出される事になるので。
って、そう考えるとtoStringz()も使っちゃダメってことじゃないか。
めんどくせーなー。
void main() { int[3] a = [1,2,3]; } 実行時に "Error: Stack Overflow" ってなるんだけど、何が悪いのでしょうか? DMD 2.003を使ってます。
187 :
184 :2007/08/06(月) 16:05:29
>>185 いやいやいや、toStringzにnull渡してないから。こう。
void func(char[] str){
win32api(str is null ? null : toStringz(str));
}
実際には何回もつかうだろうから関数化すりゃいいと思う。
> toStringz(null)はtoStringz("")として呼び出される事になるので。
違う。nullはnull。toStringzの実装が特に""とnullを区別してないだけで
>>184 じゃないが
str is null ? null : toStringz(str)
なのに
toStringz(null)
が出てくる理由がわからんし、
ポインタ型にnullを渡すと(p==0)になるでしょ常考。
>>182 writefln(array[out(i) { assert(i<a.length); } body { return 4; }()]);
仕様によれば、こういう変態的なコードもありなんだな
これ試してて気づいたんだが、
writefln(array[{ return $-1; }()]); が、
writefln(array[{ return array.length-1; }()]); と等価になってないっぽい。
$の方値がぶっこわれてるな
>>186 DMDのバグ
>>185 空のchar[]とnullは区別できないよ。
import std.stdio;
void main() {
writefln("" is null); // false
// 文字列リテラルはNULターミネータを持っている。
char[] s;
writefln(s is null); // true
// 配列の初期値はnull
s = "".dup;
writefln(s is null); // true
// NULターミネータは複製されない。
s = "aa".dup; s.length = 0;
writefln(s is null);
// 長さを 0 にしても再利用のため(?)に同じ場所を指し続けている
}
ちなみに、こういう気持ち悪いことにもなってるから注意が必要。 import std.stdio; void main() { string a = ""; writefln(a is null); // false writefln(a == null); // true }
win32api(str.length ? toStringz(str) : null); で良くね?
win32api(str.ptr ? toStringz(str) : null); とかどうよ
196 :
183 :2007/08/06(月) 21:58:03
ウッヒョー。今まで仕様を勘違いして覚えてたのか俺は。
・配列はnull値を取れない
・nullは長さ0の配列に暗黙変換される
とばかり思ってました。
えーと、正しくはこういうこと、でいいんでしょうか?
・配列はnull値を取れる
・null配列はほとんどの場面で長さ0の配列と同じ挙動をする
・両者はis nullの結果で区別できる
>>184 さんごめんなさい。正しくその書き方で事足りました。
みんなもありがとう。おかげでアホな誤解から解放されました。
でも("".dup is null)がtrueになる理由だけよく分からない……。
>>196 ・要素数が0になった場合、変数自体がnullに書き換えられる場合がある。
200 :
デフォルトの名無しさん :2007/08/07(火) 05:20:19
って、あげてしまった (ご迷惑おかけしてすいません)
あげたら迷惑なの?
gdcはどうなってるんだい?
DFL 0.9.6 リリース
>>205 ちょっとコントロールが追加されたくらいかな
コンパイラにコンテンツアシストの支援機能を早く組み込め。 そしたらあっという間に普及するから。
こんな言語仕様が不安定な言語は普及しないよ。 D が流行るのは言語仕様が安定してからでいい。
つまりヲルターが死ぬまで流行ることはないということか
つまり、Rubyは、Matzが死ぬまで流行ることはないのだろうか
デリゲートリテラルの引数の型を推論できるようにならんかなあ。 void func(int delegate(int) dg); func( (i) { return i * 2; } ); とか、願わくば func(i => i * 2); とか書きたい。
後のほうの記法がきもい
素人乙
ラムダ記法はほしい
>>211 現状の戻り値推論だけなら、要求されているdelegate型と
生成したdelegate型が異なれば型エラー出るけど、
なんかその推論をやっちゃうとエラーの元になりそうだな。
むしろ仮引数名の方を省略したい。
(int){return @int * 2;}
みたいな。
普通の関数でも省略できるとなおよし。
今のままでいいよ 下手に省略すると、人間もコードから内容を推論しなきゃならなくなるからめんどい
DとObjective-Cを混ぜてみたいな。スクリプト言語より強力になりそうな気がしてね。
Objective-C++は失敗作だったけどな
開発環境>>ライブラリ>>>>>言語仕様 って感じで、D言語は3.0になったとしてもはやらなそう
ヲルタータンが「言語仕様はこれにて平定!」って言わない限り無理ぽ
これにて閉廷!
これにて閉経!
はたして、進化をやめたDに使う価値はあるのだろうか。
せめて処理系がほぼ下位互換でないと使う気にはなれんね
>>223 価値ないな…
D言語は変り続けることが美しいのさ…
罷り間違ってD言語が普及してしまったら 下位互換性を重要視するようになると思うよ
それは困る
そんときゃE言語作ればいいじゃない
それはいい言語になりそうだな。
E言語はもうあるけどな
かなりのものは既に使われてるよな。 何か昔一覧を載せてるサイト(不正確に見えたが)があったけど、見つからない。
scope File("hoge.txt") s; なんていう表現があったら時々便利そうだなあ いらんけど
>>234 scope s = File("hoge.txt");
でいいと思うよ。
更新マダー
>>238 なんだか誠に申し訳ないw
でもDはDで……仕様確定マダー?
そいやDの仕様もだいぶ増えてきた感があるけど、
まだコンパイラの実装はC++ほど大変でもないんかな?
だとしたらどっかに決定的な違いがあるんだろーか。
教えてC++の偉い人ー。
ウォルタたんがDの理念の一つに掲げているのに 「処理系の作りやすさ」があるから、そうなんだと思うよ。知らないけど。
だれかDコンパイラを自分で作ってる人とかいないのかな
少し前にd.D.announceに自分で作ってみたとかいう人がいたような
>>238 もうD言語使えよと言いたくなる場面ばっかりでわろた
DもC++0xも永遠に完成しない
C++ユーザがもっとDに流れてくれたらいいのに 似たような言語に人的資源が分散してるのがもったいない
やはりここは「ぼくらの」形式で間引きだな
C++用のライブラリ作ってるけど、 Dポーティングを念頭に書き換え始めてる というかDで類似の仕様設計を書き始めてる でも.NET用のポーティングもありかなと思い始めたり D#マダー
普及するしないの分かれ目は もはや言語がどうこうってところじゃなくなってるんだけどね
ちゃんと標準がTangoに置き換わるまで実質ライブラリさえ作れないような状況だろ。 今作ってもどうせ作り直しになるし。
本当に完全にTangoに置き換わるのなら、もうTangoでライブラリ作ればいいだけの話のような。 ……本当に標準がTangoに置き換わるって信じてもいいのか?
>>251 それが信じられないから困る
phobosがダメなところとTangoの良いところってどんなのがある?
phobosはダメだダメだと聞くがあまり具体的には出てこなくて
まずは文字コード周りかな
みんなエディタなに使ってるの?
個人的には入出力関係はTangoの方が好きかなぁ コンテナ(コレクション)についてもTangoがほしいね あと、ゆくゆくはTangoでXMLもいじれるようになりそう
ようやくTango1.0が出そうかなっていうときにもうD2.0だもんなぁ・・・・
D2.0ってなにそれはおいしいの? と思う俺とForeachRangeStatementが2.0だけってことはそろそろ対応お願いしますという Walterタンの無言の意思表示なのではと思う俺と…
もうv1はバグフィックスだけだろ。 美味しい機能《えさ》はv2にしか提供されない。
そもそもTangoが標準になるって発言元はどこなんだぜ?
まぁTangoのほうがモノが良いなら自然に置き換わっていくんじゃね?
どっちかが完全に上位互換ならうれしいんだけどね。 混在できたっけ?
>>261 無理じゃなかったっけ。前に似た話出てた気がする。
もともと置換を目的に作られてるしなあ。
つか本当に
>>255 に同意。
なんでここで互換性ないバージョンとか出して既存ライブラリぶっちぎれるのかと。
Phobosお話になんねー、みたいな声はウォルたんに届いてないんだろうか。
ウォルタ「いや、他にやりたいことあるし…」
ウォルタ「ライブラリのためにDを止めたくないのくらいわかってくれるだろ」
ウォルタ「ライブラリが追随すればいいだろwwwww更新おせーんだよwwww」
ウォルタ「俺の勝手だろwwwwwwwwwwef9swccnj3」
普遍条件にinvariant()って括弧がいるのはどうにかならんかなあ。 見た目が悪すぐる
ウ「本来のあるべき姿を追い求めた結果だから仕方ないだろ」
まぁdmd2.0のFinal Const Invariantの導入があるから整合性のために仕方がないよ。 struct{ final {int final_hoge = 0;} const {int const_hoge = 0;} invariant{int invariant_hoge = 0;} } これでinvariantだけ定数の宣言じゃなくて不変条件になると違和感が漂いすぎるし。
unittestにあわせて、ちょっと長いけどinvarianttestとかにしてくれりゃいいのに。
ちょっとD触ってみたんだけど試してみたいことがあってサンプルコード探して動かしてみようとしたら動かない、とかデフォ? メッセージボックスに日本語出力するだけですげー時間かかって泣きそうだったわ あとみんなは開発環境何使ってるの? Eclipse+Descentでやってたらソースにエラーの赤線引いてあるけど見た目どこも問題ないしコンパイル通るし動作するしで微妙だった
>>272 D2.0系だとサンプルコードってほとんどないんじゃないかな
今公開されてるサンプルコードって大半がD1.0時代のものだと思う(しかも今のD1.0系で動くとも限らない)
少なくとも日本語の文書においては
>>272 まだまともなIDEはないから、俺は普通のテキストエディタで書いて、コマンドラインからビルドしとるよ。
俺も
>>274 と同じくコマンドライン(というかバッチファイル作ってダブルクリック)
ポセイドンとかどうなんだろ?
>>273 そーなんか
とりあえず1.0系インスコしたんだけどみんな2.0系使ってるの?
2.0系って正式リリースされてないよね?
>>274-275 そーかー
Code::BlocksとPoseidonも使ってみるよ
コード補完がないとソース書いててだるい気がするしね
>>276 バージョンが0.001増えるだけで、大幅な書き直しを余儀なくさせられる言語。それがD
バージョンアップしたらHello, woldさえコンパイル通らなくなったときは泣きそうになった
書きまつがえた
>>276 予約語以外までまともにコード補完できるIDEなんてまだないかと
>>279 これのことかな s/stdout/dout/g
import std.cstream;
void main() {
stdout.writefln("Hello, world!"); // 古いコード
}
歴史は繰り返す(Tango)
Cout(Hello, world!").newline;
cout << "Hello, World!" << endl; とC++みたいに出力できるのを作ったことがあるがマニピュレータ周りでモチベーションが切れて終了
coutなんて飾りです
doutとかs(td)outとかじゃないのか
>>282 C++のストリームの記法が便利だと思ったことは一度も無いな
つかC++形式の利点って何なの? たぶんCのprintfが非型安全だから作られたんだと思うんだが、Dだと型安全な可変個引数関数が作れるわけで。
型安全、拡張可能、フォーマット文字列の解析が不要ってとこか その代償として、寄せ、桁、精度、基数等の指定が必要な場合の 記述が面倒くさすぎ ぶっちゃけ拡張可能性という面でもstreambufが継承可能であることが 重要で、入出力演算子なんてただのオモチャだと思ってる
tangoの方間違ってたらすまん phobosのwriteflnの方がピンと来るのは俺だけ? tangoのはどうなんだこれ CoutとStdoutの使い分けとか必要なのか? string hoge = "hoge", HOGE = "HOGE"; int a = 10, b = 20; //phobos writefln(hoge, a, "[%s%d]", HOGE, b); //tango Cout(hoge)(a)("[")(HOGE)(b)("]").newline; Stdout.formatln("{}{}[{}{}]", hoge, a, HOGE, b);
Coutキタナッ
tx好きー。
Code:Blocks使ってみた 入力補完させよーとするとC++かなんかの予約語を補完してくださった Poseidon使ってみた 日本語表示もできるし予約語の補完もできるし自分で書いたメソッドの入力補完もできるっぽい ちょっと幸せ でもエディタの挙動とか配色がキモい たぶん変更できるんだろうけどまだあんまし触ってない
writefln で十分だな。
printfで十分だ
うむ C++ ライクな入出力ストリーム表記はどうにも好きになれん
型安全であることと、色んなもんに出力できるという点は評価できるが、 printf ライクにそれを行うことも可能なわけで。
>>288 tangoはこれならstd::coutのほうがましだな
正直、これ位の簡易な実装で俺は良いんだけどなぁ。 void main(){ println(2,' ',3,' ',4); } static import std.string,std.stdio; alias std.string.toString toString; string toString(string x){return x;} string toString(Object o){return o.toString;} //構造体とか配列とか連想配列とかも同じノリで定義 void println(T...)(T x){ foreach(v;x){ string r = toString(v); std.stdio.fwrite(r.ptr,1,r.length,std.stdio.stdout); } std.stdio.putc('\n',std.stdio.stdout); }
結局型安全にした printf ライクなものが一番だよね。
writeflnに慣れすぎて手放せなくなってる
誰かD1.0を擬人化してみてくれ
>>297 それでprintf("%08X", n);
とかはどうやりますか?
304 :
297 :2007/08/14(火) 06:54:07
>>302 自分の書いた奴だと残念だけど不可能。
個人的にはそういう豪華な書式機能はいらないから、
安全で読みやすい出力用関数が欲しいという立場。
writefもprintfも書式文字列をコンパイル時に検証できないのが微妙。
opengl.d /* version (Win32) { private import std.c.windows.windows; extern(Windows): } else { extern(C): } */ private import std.c.windows.windows; extern(Windows): linuxは手元にないからわからない
>>306 ありがとうおかげで動いた。
関係ないがstd.c.windows.windowsのインポートは消しても別にエラーにならないな。
当該部分全消しでextern(System):にしておけば他環境でも元のコードと意味変わらんと思うので、とりあえずこれでいきます。
入出力に関しては、Java1.5のInput/OutputStreamあたりが 一番エレガントで高性能に思える。printf的な書式指定も可能になったし。 ただ標準出力ストリームはSystem.outなんてのじゃなくて変数stdoutとかにして欲しいところ。 あとTangoって、モジュール名がUpperCamelなのが解せないのよね。tango.core.Arrayとか。 Dのスタイルガイドからすればtango.core.arrayが推奨なのに。 それとtanto.util.foo.Barはほとんどtango.foo.Barで良いと思う……。
Dならprintf!("%d %s")(n, str);って具合にフォーマット文字列から動的に関数を生成すべきだろ。
それは面白いかも
むしろコンパイル時に生成するんなら意味があるかな printf()の非効率とおさらばできる(かもしれない)
>>311 ・フォーマット文字列からメソッドシグネチャを生成するため、
コンパイラが引数の型や数をチェックをできる
・フォーマット文字列の解釈やコードの生成がコンパイル時に行われるため、
コンパイラによる高度な最適化が期待できる。
こんなところか。
>>313 そか サンクス
誰か実装してくれないかなぁ・・・・
import package.*; まだー?
>>313 バイナリのサイズが増えるのが欠点か。
あと文字列の出力って、たぶん出力先のほうがネックになると思うから、フォーマット文字列をノーコストで解釈しても速度面がそれほど期待できるとは思えない。
(これはまあ、まあもちろん出力先によるんだろうが)
でも引数のチェックは魅力的。
なんでまあって二回言ってるの俺orz
>>309 なのとか、Dでboostレベルのライブラリが実装される時の事を考えると
なんだか非常にわくわくしてくるのだよな。
あと何年わくわくし続ければいいですか。
作ってもバージョン変われば動かなくなると思うと、 あまり大規模なライブラリは作る気がしない。
>>381 Dを使っているかぎりずっとわくわくしていられるよ…
>>316 DでもC++でテンプレート使いまくった時のような
code bloatが多少問題になったりするんだろーか。
あんま気にしなくても、とは思うが。
あと、フォーマット後に外部出力が必ず伴うとも限るまい……と思ったけど、
フォーマットってだいたい出力のために行う作業なんだな、考えてみると。
やっぱそれより型安全の魅力か。
更新まだー?
カンファレンス前に一度はあるかなと思ってたが これはもうカンファレンス後だろうな・・・・・
>>323 format使ってみたけどバッファサイズ気にしなくて済む利点の方が大きいと思ったよ
…
なんというか、打ち水のようなレスだよな
立て板に水のようなレス 横板にペンキのようなレス
ばーじょんうpまだ?
ネタがないので
>>309 やってみてる人いるのかな
TMP慣れてないから難しいや
最終的にどういう関数(群)に展開したらいいのかわかってないからなおさらだけど
試しにこんな感じでやってみたが構造体使ってていまいち・・・
Writef!("[%s](%d)<%f>")("hoge", 1, 0.5);
template Writef(string fmt) {
struct Writef {
static Writef opCall(U...)(U u) {
...
ふと、「コンパイル時実行」という仕様を生かせばもっとすっきり出来るのではと思った
template Writef(string fmt) { mixin("void Writef(arguments){...}"); } でいいんじゃないかな。
template tprintf(char[] fmt){ void tprintf(FormatToTypeTuple!(fmt) arg){ printf(fmt, arg); } } あとはFormatToTypeTupleを別途定義すれば、たぶんOK。
printfに渡すときはtoStringzしないとだめだじょ。
てか、printfの型を間違ったバグなんて、発見も修正も容易なんだから、型厳密にする必要性がねぇ。
tprintf!("h%do%dge")(1,2); alias tprintf!("h%do%dge") p; p(3,4);
>>338 お前がダウトだよ。
printfに違う型渡したバグで、何回悩んだんだよ。お前の人生は。
>>337 コンパイル時に型が分かるなら、
リアルタイムでコンパイルすればコード編集時にも型が分かる。
ならオートコンプリートも効くし、コード打ってる最中に赤線引いて指摘もできるべ。
まぁ、そんな贅沢なIDEが利用できるとこまで行くかという悲しい疑問もあるけれど(´・ω・`)
それに外部入出力のテストって、他に比べてややこしい性質があると思う。
コンソール出力なら人間の目でチェックするのがまずデフォだし、
リダイレクトとかして自動化するにも
少しだけ設計を工夫する必要があったり、手間がかかったり。
発見や修正が容易とは言えないんじゃねーかな。
(´◕ω◕`)
>>343 かわいいだろ あれお前を狙ってるんだぜ・・・・
>>341 > 上4行
だから、printfでそれがなされても大してうれしくねーだろ。
> 下5行
>コンソール出力なら人間の目でチェックするのがまずデフォだし、
はーん?なら型厳密になっても発見や修正が容易とはいえねーだろ。何が言いたいの?
嬉しいか嬉しくないかは人それぞれだろうが。 フォーマット文字列に合わせて、補完候補が絞り込まれるなら俺は便利だと思う。
人それぞれとも限らんからそれぞれの考えの理が問われてるんだろ。
Mango って名前がエロいが良く出来てるな
そいや昔から「printfはよろしくない」って言われてるのよく聞くけど、 そのよろしくない点を考察してまとめたページとかってどっかにない? 型安全でないとかはわかるけど、他にどういう問題があるのか ちゃんと知っておきたくなってしまった。
>>349 デバッグ出力のためにあちこちにprintfが散乱してて、リリース時に取り除くのが面倒になるから・・・とか言う話を聞いたことが。
まともなデバッグトレースの処理用意してないのが悪いんでしょうけど。
debug printf("hoge:%d, hige:%d\n", hoge, hige);
printfのフォーマットがコンパイル時にコードに展開されるって事は、 動的に出力内容を帰る事ができないって事?
文字列渡せば変えられるんじゃね?
mixin Printf!("%s %s", hoge, hoge2); ここまでいったら逆に楽しそうだな
mixin Printf!("%1 %2", hoge, hoge2);
DMDは writefln(user_input); みたいなのを警告しないから、 この手の実行時にしか気づかない欠陥を生み出さないような機構はほしい。
誰かPoseidonの使い方書いてあるページ知ってる? 英語読まないとダメ?
使い方いうてもほとんどコマンドないじゃん。
コマ…ンド…?
>>360 string user_input = "%d";
>>361 エスケープし忘れか
関数定義のすぐそばにちゃんとunittestを書くのがD言語流じゃね
%を特殊処理しないwriteflnつーか、文字列以外も可変長引数もとれるwriteLineつーか そういうものが用意されてりゃ問題ない気がするな
txのprintlnか。
俺だったら、最初からwrite, writef, writeln, writeflnの4つ用意するのになあ。
マッタクダー
とりあえず object.d の中にtchar型がほしいなぁ… あるいはwcharとdcharを廃止してversion(Unicode)とかでUTF8/UTF16/UTF32が切り替わるcharオンリーにするか…
tcharってなにに使うんだ?
俺はchar型を抽象化して、コンパイル時のスイッチでUTF-8/16/32選ぶようにして欲しい。 それぞれ明示的に扱いたいときはcchar, wchar, dcharを使うようにして。
>>368 コンパイル時の-versionスイッチに応じてchar/wchar/dcharと定義が変わる文字列型
要はWindowsプログラミングをしてるとLPCTSTRとかでてくるあれ…
LPCTSTRはubyte[]かdchar[]だげん。
const(ubyte)[]かconst(dchar)[]だな。
TCHARはWindows以外では要らんだろし Windowsでもそろそろ要らん気がする もう9xとかどうでもよくね?
version+aliasでいいじゃん。
versionにdebugみたいに数値を与えられるようにならんかなあ。 version(Library > 3) {`}else{ } とかできたらよさそうなのに。
そういうのって今できないの? constに暗黙キャストできるものをコンパイル時に参照っていうの?
static if(Library > 3){ }else{ } かな?
charやめれば? 日本のDのソースは全部wchar^^
charをやめたいがObject.toStringの戻り値がwcharにできないあたりで挫折しそうだぜ…
toWString やら toDString やらが必要だな。
wchar[] toWString() { return cast(wchar[])toString(); } はダメなの?
キャストはマズいでしょ。
v1.016ぐらいのときはWindowsアプリを非UNICODEビルドすると 全角パスが上手く処理できなかったりした。モノによるんだろうけど全角パスで起動しなかったり 最近はWindowsプログラム書いてないから判らないけど
DにもLINQくれ。
>>381 wchar[] toWString(char[] src) {
wchar[] dst = new wchar[0];
foreach(dchar ch;src){
dst~=cast(wchar)ch;
}
return dst.dup;
}
こういうのは?
foreachで渡ってくる各要素をdcharで受け取るとUNICODE文字単位に分解してくれるらしいっす。
そこから目的の文字型にキャストして連結してやれば変換できるんじゃないかな……と。試してないけど。
普通にstd.utf使えよ。
>>385 サロゲートペアが必要なときにおかしくなる。
すいません しょうもない質問で申し訳ないです std.string.succが出力する26進数(A,...,Z,AA,AB,...)を10進数に変換したいんですけどうまく書けません orz どういうコードになるんでしょうか
import std.stdio, std.string; uint 二十六進数(in string src) in { assert(countchars(src, uppercase) == src.length); } body { uint r; foreach(c; src) r = r * uppercase.length + find(uppercase, c) + 1; return r; } void main() { string s = "A"; foreach(i; 1..100) { assert(i == 二十六進数(s)); s = s.succ(); } }
短い・・・>< ありがとうございます!
ちょっとお前らDはじめたばっかの俺様にやらしく教えてください extern(Windows){ int MessageBoxW(void*, wchar*, wchar*, uint); } void main() { //MessageBoxW(null, (cast(wchar[])("メッセージ")).ptr, (cast(wchar[])("タイトル")).ptr, 0); MessageBoxW(null, "メッセージ"w.ptr, "タイトル"w.ptr, 0); } コメントアウトしてる方だと通るけど下のだと通らないんだが何かこれ違うのか?
どっちでもコンパイルできるが? utf-8, dmd1.020, Windows
>>391 "メッセージ"w の型は invariant(wchar)[] だから、
"メッセージ"w.ptr の型は invariant(wchar)*
これを wchar* に暗黙的にキャストすることはできない。
LPCWSTR は const(wchar)* にするのがいいよ。
これなら wchar* からも、invariant(wchar)* からも暗黙的にキャストできる。
>>391 それから、invariant型の文字列リテラルを普通の配列にキャストするのはオススメできない。
どこかで書き換えようとしてしまった場合に、わけのわからんエラーが発生する可能性がある。
書き換え可能な配列が必要な場合は "メッセージ"w.dup を使うようにするといいよ。
>>392 スマンコ 俺dmd2.003だった
>>393 ご教授の通り
int MessageBoxW(void*, const(wchar)*, const(wchar)*, uint);
にしてみたらどっちでも通るようになったよ ありがとー
今までGUIプログラムはJavaでしか作ったことないからWindowsのことはサパーリすぎて
LPCWSTRとかなんのことか分らんけどジリジリ勉強していくよ
LPCWSTRはLong Pointer Const Wide STRingのことだべ。
>>394 把握
MessageBoxW(null, "メッセージ"w.dup.ptr, "タイトル"w.dup.ptr, 0);
とかしろってことか?
>>396 ヒントさんくす ぐぐってみるよ
MessageBoxWはLPCWSTRを要求してるから、invariantな文字列渡して問題ないよ。
GDC 0.24 release
いつの間にかDescentが進化してるし・・・かなり感動した。 ○デバッガが動くようになった(Ddbgと正しく同期が取れるようになったよう)←私だけか? ○フォーマッターが実装されたみたい ○アウトラインが実装されてる ○コードテンプレートが実装されてる ×コンパイラ選択できるのにコンパイルしてくれない 出力先まで指定できるのに・・・(もう少しで実装されるのかも) ×コードアシストできない ×メソッドの宣言先を開けない、参照を検索できない かなり良い感じで進化しているようです。
誰かカンファレンスに行ってるひといないー?
え、そんなのあったのか 行きたかった・・・
>>402 シアトルだよ
日本でやってほしいなぁ。
だれか日本にウォルタたん招待してくれ。
>>400 うをを。DescentてEclipseプラグインのアレだよね。
俺もちょっと入れてみよう。
デバッガが動くのか……
なんだ日本じゃないのか・・・ せめて北海道〜九州くらいなら考えるんだがシアトルなんか行けないや
>>406 公式ページくらい見ろw
日本で開催されるわけないだろw
そう言わずに開催しようぜ!
日本ってユーザー数は結構世界的な割合で見ても多いはずなんだけどな 英語できる人少ないから開発やデバッグへの貢献度が低いと見なされてそう 日本でミニカンファレンス開催して意見や要望や成果等をまとめてウォルタンに提出したりするのは良いアイデアかもしれん 先立つものがないけどな
このスレの議論まとめればいいんじゃね?
ここで出たバグって誰か本家に報告してる?
このスレの議論のまとめ英語版をWikiとかで作ればいいんだよな
じゃ あとはまかせた
>>411 報告しといたってレスついてるのは報告されてるけど
それ以外は質問者が報告してないのなら誰も報告してないんじゃね
まとめWikiか。 既存のwikiにうんざりして自前でDのWikiを実装しようと計画して何もしてない俺。 k.inabaたんのdikiでも荒らしてくるか
DのCGIフレームワークとか作ってくれたら神
CGIってももどうかと… いっそWebサーバとWebアプリケーションフレームワークを作ってくれ
そして完成を目前にしてD3.0が出てうわああああああって
>>415 よく考えたら通信ライブラリも碌なのがないんだよな。
Tangoのもちゃちっぽいし。
DにWebサーバ系は期待してないんだよなぁ〜。Javaでいいじゃん。 どちらかといえば、パッケージウェア作るための強力な言語になってもらいたいなぁ。
確かMangoにHTTPサーバやサーブレットのライブラリがあった希ガス 大部分のMangoはTangoに吸収されたけど、プラスアルファなライブラリとして こっち系に特化してくらしい。ちなみにMangoに入ってる文字コード変換のICUも お手軽で便利だよ。(ICU本体のサイズは馬鹿デカイが)
ICUのDバインディングを提供してんのか それいいな あれのC++インタフェースはダサダサだからな……
Dにもannotationほしいなー bool nonNull(T : object)(T x) { return x !is null; } bool lessThan(T)(T max, T x) { return x < max; } class C { object getObject(object[] a, uint i @ lessThan(a.length)) @ nonNull { return a[i]; } int a @ lessThan(5); } これが、 class C { object getObject(object[] a, uint i) in { assert(i < a.length); } out(o) { assert(o !is null); } body { return a[i]; } int a; invariant(){ assert(a < 5);} } みたいになるの。 定義と契約を近い位置に書けて、結構いいと思うんだけどなあ。
それあったら使いたいなあ 契約のテンプレートみたいな?
>>422 上と下でそんなに書き易さが違うとも思えないのだが…
Javaのannotationの事だとしたら、アレは契約とは関係ないと思うが。
Dにゃ.classみたいな独自のコンパイル形式無いし(ああ欲しい)。
ん? それも込みでってことか?
でもDの契約に関しては、確かに
>>422 くらいのが欲しいって気はする。
特にIDEとかddocとかに優しくない。
たとえばこう書いたら、
bool nonNull(T : object)(T x) { return x !is null; } /// nullではない。
bool lessThan(T)(T max, T x) { return x < max; } /// @{max}未満。
ddocとか、IDEでgetObjectをポイントしたときのツールチップには
こう出てきて欲しいなぁって。
object getObject(object[] a, uint i)
(中略)
契約:
a: nullではない。[nonNullへのリンク]
i: a.length未満。[lessThanへのリンク]
戻り値: nullではない。[nonNullへのリンク]
昨日と今日のDカンファレンスはなんか面白いことなかったんかいのぅ?
あったはずなんじゃがのぅ 誰も行ってないのかもしれないのぅ
430 :
426 :2007/08/25(土) 00:17:48
>>427 あり? 違うのか。ごめん。
だとしたら何のannotation?
>>430 そのまんまJavaのアノテーションとは関係なくて
DbCの構文糖が欲しいという話じゃねーの
in-out-body構文はちょっと異端すぎるからな
>>428 どっかに報告上がってないのかな
わちきみたいなジャパニーズにはニュースグループの英語とか碌に読めんしのぅ くやしいのぅくやしいのぅ 公式とWalterたんのサイトとWiki4Dとdigitalmars.Dには情報出てない気がする 英語読めないからもしかしたら書いてあるのかもしんないけど
オフ会的な雰囲気ならなおさらジャパニーズの存在をアピールせならぬというのに・・・
どう書く?orgでのDの不人気は異常
泥臭い実用言語系なのにちっとも実用的じゃないからじゃね?
実用的じゃん
言語仕様だけは実用的なんだがな・・・
ころころ変わらなければな
言語仕様は実用性を目指してるんだが、 その言語仕様が ころころ変わるので実用にむいてない。
でもver 1.xxの範囲はある程度fixされるんじゃないのかな? そのためにブランチしたんだと思っていたけど・・・
そんな焦んなよー
>>443 1.xにはもう大きな変更はないと思うよ
変更するメリットないだろ
遊ぶなら2.xなんだけど今のwin32.windowsをimportして
Ansi/UnicodeスイッチできるようにTCHAR[]を使って
Windowsプログラミングをすると.dup.ptrの嵐になってひどいことに
TCHAR[]相当の型を考え直さないといけないな
Win32のラッパライブラリ書けばいいんじゃね?
447 :
デフォルトの名無しさん :2007/08/26(日) 04:15:26
windowsが糞なだけだろそれにDあわせるひつようねえ 実用性の話はしらんけど
windowsなら素直にC#使っとけって話だ
>>435 Haskellが意外に使われててびっくりした
スレの過疎ぶりから、てっきり終わった言語だと思ってたのだが
同じ関数型でLispの系列が人気あるのは分かるけど ML系列とかはそれほどでもないね PythonはRubyより人気高いね 勿論投稿者の層が偏っているというのはあるだろう 多分学術系寄りに(というか情報科の学生に) そう思えば大して意外な結果でもないな
色々言いたいけどAST macroとstatic foreachだけでお腹いっぱい。 Functions & Templates OverloadingとUniform Function Call Syntaxはやっとという感じ。 って事で次verまだー?
写真見たけど思った以上に参加人数少なめだな
今DirectX使ってちまちまなんか作ろうとしたら参考になるサイトある?
>>451-452 これは・・・
どこかのエロい人がいくつかピックアップして
どこかでコメントしてくれるのを期待
alias thisって委譲っぽい機能があるね。 COMプログラミングが楽になりそう。これは期待 struct M { int a; } struct S { M m; alias m this; int b; } S s; s.a; // refers to s.m.a s.b; // refers to s.b
>>456 Kris Bellの配列スライシングの話(無理やり改変コピペ)
LV0 D言語?どうせC++にもJavaにもなれない半端な言語だろ?どうでもいいよ…
LV1 ふーん…ネイティブバイナリを吐くのか。ってかGCあるから一定のスループットが必要な用途には不適じゃないの?
LV2 malloc/freeの直接呼出しとか…ちょっといいかも…
LV3 やっべnew & deleteオーバーライドまじヤッベ
LV4 やべぇ値型structとかscope属性とかフリーリストもすげぇ使える…返り値配列の手書きcopy-on-writeだけ邪魔だ
LV5 マジこの返り値配列どうにかなんねぇのか?マジウゼェ…
LV6 配列スライシング結婚してくれ!
LV7 やべぇ配列スライシング最高!配列スライシングの参照返しさえあれば生きていける!
LV8 配列スライシングでHTTPサーバ書いた!俺はDでGCほとんどゼロのHTTPサーバ書いたぞ!!
LV9 やっぱDは最高だわ
MAX ウォルターたんとちゅっちゅしたいよぉ〜
alias thisとな kwsk
>>458 CreateWindowAはwinuser.dの中で普通に関数定義されている(ポーティング関数ではない)から、bud(build)などを使って一緒にコンパイルするようにするか、または前もって.libを作っておいてそれをリンクするようにしないと使えない。
急場しのぎとしては、CreateWindowExAの方を使ってみるといい。
CreateWindowExAはポーティング関数だから、ライブラリをビルドしなくても使えるよ。
static foreach について誰か悔しく
>>459 おちゅ
配列にかたよっている気もするけど、
原文もそうなの?
俺もそんな感じで、いまLV7、9ってきがす
>>466 名前的に、
import std.metastrings;
static foreach(i; 0..10) {
mixin("int i" ~ ToString!(i) ~ ";");
}
とかできるんでないの?、と思ってスライドみたら、
コンパイラが最適化で勝手にやってくれてもよさそうな例しかのっとらんな。
469 :
461 :2007/08/27(月) 11:54:33
>>465 >win32.winuser.dのコンパイル後の物体をリンクせよってこと?
基本的にはそういうこと。
例外として、 -inline付きでコンパイルすると、関数がインライン化して消えるからOK、というのがある。
-inline付きでコンパイルすれば、CreateWindowAでもコンパイル通るんじゃないかな。
>importってCとかでいう#include <XXXX.h>とは違う動作?
importはシンボルを読み込むだけだから、Cで言うと、宣言だけが書かれたヘッダファイルをインクルードした状態と同じになる。
対象モジュールに実体があるときは、コンパイルしたものをリンクしないといけない。(基本的には)
うぉるたんのスライド見てDは難読コードコンテストで常勝できる言語になると確信したぜ
>>470 >難読
それはヲルタンの意図と反するんだろうねw
<⌒/ヽ-、___ macro実装されたら起こしてクリ。 /<_/____/
>>469 なるほど
ちゅうか公式のimportの説明読んだらシンボルうんぬんってちゃんと書いてあったわ うんこちゃんですまんこ
-inlineつけてやってみたけど相変わらず
Error 42: Symbol Undefined _D5win327winuser13CreateWindowAFPaPakiiiiT5win325win
nt6HANDLET5win325winnt6HANDLET5win325winnt6HANDLEPvZT5win325winnt6HANDLE
--- errorlevel 1
って言われる件 -inlineつけてもシンボルだけimportなら関数の中身とか展開してくれない気がするのは気のせい?
inlineは関係ないだろ
>>459 LV5 マジこの返り値配列どうにかなんねぇのか?マジウゼェ…
LV6 配列スライシング結婚してくれ!
え?これ何に気が付いたってことなのかな?
>>476 元ネタは知ってるんだけど
配列スライシングと返値配列がどう関係あるのかわからなくて
479 :
461 :2007/08/28(火) 00:21:58
>>473 >-inlineつけてやってみたけど相変わらず
確かに-inlineだけだとだめだった。
手元で試してみたら、-releaseと-inlineがあって-gが無い場合にインライン展開してた。
中途半端なこと言ってすまん。
>>477 dsss使ってみたら世の中のすごさに感動した
budのがいいの?
>>480 俺はbud派だけどDSSSでもいいよ
DSSSでうまくライブラリをインストールできないことが多かったから
使い慣れたbudでいいやと思ってそのままなだけだから
>>479 ほんとだ、-release -inlineで通ったわ なんで通るんだろ なんかキモい気がする
>>481 把握 dsssで難儀したらそっち使ってみるよ
bud は bud なのか build なのかハッキリしる
じゃあここではbudで
dsssの使い方がよくわからん……。 bud更新止まってるし移った方がいいかなと思ってるんだが。 budのbuild.brfとかbuild.cfgみたいに外部ファイル参照できるんだよね?
ポストインクリメントとプリインクリメントを使い分ける場面が思い浮かびません><
全部前置でいいよ。 いまどき長い式の中でインクリメントの結果を使うの流行らんし。
if(i++ == a) くらいでしかつかわん
俺はifよりはforの条件式で使うほうが多いけど、要するに同じ使い方だね。
490 :
489 :2007/08/29(水) 06:32:12
ってすまん、Cのスレと間違えた。
わなD消えた?
消えてないよ
昼頃なんか公式の日本語訳も繋がりにくかったな まぁなんかあったんじゃね?
一応文字は読めるけど表示がメタメタになるな。
gdcでモジュールを読み込むための デフォルトのフォルダを指定する方法ってない? C_INCLUDE_PATHみたいなやつ。 いちいち-Iで指定しないとダメかな?
dmdのsc.iniみたいなのはないのか?
498 :
496 :2007/08/30(木) 11:15:52
>>497 ないみたい。
また、環境変数でDFLAGSを定義しても、gdcには関係ないようだ。
specs ファイルでできんか?
まだかなまだかな更新まだかな
学研のおばちゃんまだかな
なぜ学研?
俺ももうおっさんなのかなと思ってしまった瞬間
そういやあのCM最近見ないな
こんなにも俺がいる
>>502 は平成生まれ
TangoのVer.1.0もリリース近いんだっけ?
Tangoなぜだか避けてたんだがPhobosから移るほどの価値ってある? 今は特に不自由してないんだが
人それぞれとしか言いようが無い Phobosは放置状態なのでバグもずっと残ったままになってる スレッド関係とかはまったく使い物にならない感じ
まぁうぉるたんにはD作ってほしいしなぁ Phobosってメンテナみたいなのいないの? あとTangoってPhobos乗っ取る!みたいなこと言ってるけど公式に置き換えられることってあるのかな?
おれもそれ気になるわ Tangoの位置づけがいまいちよくわからん 標準ライブラリに採用されるなら安心して使いまくれるんだけど
Tango1.0と2.0って互換性ある?
Tango1.0とD2.0のことならないだろ
>>512 スマンまぎわらしかった Tango1.0とTango2.0のこと
514 :
デフォルトの名無しさん :2007/08/31(金) 03:17:12
質問いいですか? コンストラクタ内で delete this; をすると、何か問題はありますか? コンストラクタ内で初期化に失敗したときに、例外を発生させて、 this() { scope(failure) delete this; A = new Class_A(); B = new Class_B(); C = new Class_C(); //C.this()で例外発生。 } ~this() { delete A; //delete. delete B; //delete. delete C; //C is null. } のようにして、例外が発生する前に生成したクラスオブジェクトを deleteしたいのですが、どうでしょうか?
515 :
デフォルトの名無しさん :2007/08/31(金) 06:20:14
あ、おばちゃんだ。
516 :
デフォルトの名無しさん :2007/08/31(金) 16:04:48
this() { A = new Class_A(); scope(failure) delete A; B = new Class_B(); scope(failure) delete B; C = new Class_C(); scope(failure) delete C; ... }
518 :
514 :2007/09/01(土) 00:45:14
レスありがとうございます。
>>516 そういう様にしたほうがいいですかね。
delete this を使うと、メンバオブジェクトへの delete は、
デストラクタに1度書けば済むので、楽かなと思いました。
>>517 この辺はあまりしっかり読んでいませんでした。
GCがデストラクタを呼び出すときのことですね?
明示的にdeleteを実行することを鉄則とすれば、
大丈夫そうな気もしますが少し悩みますね。
try-catch-finallyイディオムでのcatch内returnを書くのを躊躇するのと似てるな。
520 :
デフォルトの名無しさん :2007/09/02(日) 03:18:49
更新がほしいよう
休み明け更新あげ
Linux版のGDCはなんで0.22で更新止まってしまったん?(´・ω・`)
前Windowsのテーマ(ハックって)変更してるとTangoで作ったexeゲロ吐いて動かなかったけど直ってるかなぁ?
Tangoで作ったエロゲーexeが動かなかった と読んでしまった
それはないwwwwwwwww
>>527 D News Groups(news.digitalmars.com)のD.announceかD.gnuを見てればおk
Tangoのphobos.lib、なんかプログラム終了時にオブジェクトのデストラクタが呼ばれない…… 下はテストに使ったソースね extern (Windows) int MessageBoxA(void*, char*, char*, int); class A { ~this () { // Tango の phobos.lib だと呼び出されない... MessageBoxA(null, "destruct!", "Message", 0); } } extern (C) int printf(char*, ...); void main() { auto o = new A; printf("object: %p\n", o); }
保証したければ最後に fullCollect() を呼ぶ。
532 :
デフォルトの名無しさん :2007/09/02(日) 14:47:50
つまりGCによってメモリ開放されるのとデストラクタが呼ばれるのは別なの?
>>530-531 保証はないのか……
「デストラクタでリソースのハンドルを閉じる」とか、そのままじゃ出来ないな
>>531 みたいな感じでやってみます
情報に感謝
>>532 プロセスが終了すればそのプロセスが取得した記憶域はOSに返却されるわけで、
わざわざプログラムの終了時にガベッジコレクタがメモリを整理する必要はない。
>>533 RAIIの強制はこうするのがD言語流かと
scope class A {}
scope a = new A; // OK
auto a = new A; // NG
deleteで明示的に呼び出すよりはfinalizeとかreleaseとかdestroyとかの関数を作って呼び出す方がいいのかもしれないな。 class CLS{ private bool finalized=false; void somethingToDo(){/* ... */} void finalize(){ finalized = true; } ~this(){ assert(finalized == true); } } int main(){ auto x = new CLS; x.somethingToDo(); x.finalize(); }
scopeの落とし穴。 scope class A { this(){ writefln("A.ctor"); } ~this(){ writefln("A.dtor"); } } void main() { scope a = new A; a = null; }
>>537 それ、バグじゃね?
…いや、バグじゃないのか…?
というか、それが落とし穴になるならデストラクタっていらなくね?
539 :
デフォルトの名無しさん :2007/09/02(日) 17:44:59
scopeはfinalもつくべきってこと?
どうでもいいけどActorにみえた
たしか、scopeの挙動がおかしいのはずっと前にも出てたな。
Dで書いたXMLライブラリまだかよ。
interface書いてXercesでもラップしたら? Xercesって「ざーさす」じゃなくて「くせるせす」らしいですよ奥さん
545 :
デフォルトの名無しさん :2007/09/03(月) 01:44:49
>>539 finalは関係ないんじゃないかな
変数aの方ではなくて
オブジェクトそのものの方にscope性があるべきだと思う
>>543 Mango に SAX なパーザがあるぞ
Manco に SEX まで読んだ
dgccのD2.0の奴まだですか?
DMD2.004まだ?
import smjg.libs.util.all; void main(){ while (!cIn.eof()){ string line = cIn.readLine(); cOut.writefln("「", line, "」"); } } パイプを使うとエラー dir | main.exe リダイレクトならおk dir > out.txt a < out.txt
最後の行を間違えた main.exe < out.txt
>>554 こんにちは世界って書くとスクールデイズを思い出すな
DMD 2.004 リリース …ん? Aug 26, 2007?
見たとこCTFEの厄介なバグの大部分が修正されてるっぽい。 正直やっとという感じがしないでもないけど。 UTF-8関連のが入ってるのでWindowsな人感想よろ。 std.hiddenfuncはドキュメント無いけどバックエンドの変更っぽいのでユーザーは気にする必要なさそう。
CTFE、std.string.lettersとかがまだ駄目っぽい。
DMD 1.021 リリース に触れるの忘れてた
CTFEって何?
Compile Time Function Execution
What's New for D 2.004 Sep 5, 2007 New/Changed Features Added command line switches -defaultlib and -debuglib Bugzilla 1445: Add default library options to sc.ini / dmd.conf Changed result type of IsExpression from int to bool. Added isSame and compiles to __traits. Added optional TemplateParameterList to IsExpression. Added warning when override is omitted. Added std.hiddenfunc. Added trace_term() to object.d to fix Bugzilla 971: No profiling output is generated if the application terminates with exit Multiple module static constructors/destructors allowed. とりあえずはっとくね
2.004の隠し機能 -__EOF__ -q{test}やq"!test!"など -ClassInfoのgetMembersはまだ実装完了してないっぽい。
最近D言語wiki更新されませんね・・
>>567 macroはまだ来ないとおも。
リフレクションが先っぽ。
>>566 q{test} って不要なような気がするなあ、
というか、この構文は将来の言語拡張の可能性を大きく減じるんじゃないだろうか。
個人的には構造体・クラスリテラルに使ってほしかったんだけど。
>>570 rubyのようなイテレータを実装して且つpythonのように式で使えるようにしない限りは構文的問題は無いと思う。
でも別の理由からq{test}じゃなくてtoken("test")かもしくはtoken型として欲しいなぁ。
Delimited StringsとToken Stringsの両方が「q」では紛らわしいし、リテラルだとtoken(foo)とできないし。
>>566 >getMembers
うっひょー、そんなのくるんだ
Added command line switches -defaultlib and -debuglib これって、Tangoとか使いやすくするように―とかの思惑があったりするのかな。
>>573 リフレクションかなとおもた
例えばflectionedでスタックトレースを表示させようとしたら
-g付きでコンパイルしたphobos.libが必要だし
575 :
デフォルトの名無しさん :2007/09/07(金) 07:20:38
__EOF__ってなんにつかうの
ここが終わりですよとしらせるため 以降何があっても読みません ___EOF___
なんかちがうぞwww __EOF__の意味自体はほかの言語から予想ついてたけど、それ自体に使いどころって思い浮かばない
エスケープシーケンスの代わりじゃないかな
__EOF__以降にバイナリを埋め込んで自分自身をimport(__FILE__)して扱うとか。 ......どう考えても役に立ちそうにないか。
えろい人たちに質問! 某h.Sさんのとこから字句解析パクって来てDの色付けエディタもどきつくってるんだけど、 「コメント」と「ネスト可能なコメント」と「文字列」と「WISIWYG文字列」の正規表現がよくわからないんだ。 暇だったら教えてください。お願いします。 言語はJSです。
コード全体をコピペして、古いコードは__EOF__以下においてっと・・・ なんて事にならないといいな
__EOF__ が来るってことは __DATA__ も来るんだろうな?
>>580 そもそも正規表現ってネストを表現できたっけ?
正規表現はネストを表現できないよ perlの拡張文法とか使わんとミリ
有限の入れ子回数のネストなら表現できるよ。 あんまりスマートじゃないけど、コメントのネストなら 実用上はそれで十分じゃね?
__EOF__ って、コードの後ろにドキュメント書けるようにってことか?
ドキュメントならHTML埋め込みかDDocでいいだろ。
もっとお手軽なメモ的なものを書きたいときに使うんでしょ
dmd v2.004にしたら今までコンパイル通ってたプログラムがコンパイル通らなくなった件 Wiki4Dのwindows.hPort#201使ってるんだけどウィンドウ表示するだけのプログラムコンパイルすよーとすると怒られる Error: 'QuadPart' is not a member of 'const LARGE_INTEGER' 意味ワカンネ
>>586 import(__FILE__)で使うデータに決まってるだろ・・・
>>590 なんということであろうか
余は大変恐縮している
2.003に戻しとくか…
593 :
580 :2007/09/07(金) 21:02:05
Dで使えるソース整形ツールってある? ソース綺麗に書くのめんどくさくなってきた
めんどくさいからソースを汚く書くというのがよくわからん
そのうちツール使うのめんどくさくなるんじゃね?
俺がちゃんとエディタを使いこなしてないからなんだろーがswitch文とかなんかいろいろ書いてると気持ちよくインデントつけてくんないんだけど手動でイチイチ直すのまんどくせ
{}←EnterEnterBksp でブロック書き始める俺
writefln(q"EOS This is a multi-line heredoc string EOS" ); ( ^ω^)・・・
>594 DSciTEは?
Eclipse+Descentで良い感じで整形できますよ。
>>600 なんで `` があるのに q"" まで作るんだろ
なんか文字列リテラル周りの意図がわからん
>>601 使ってみた
とりあえずProgram Files以下につっこんだらマジメに働いてくれなかった
あとソース整形機能ついてる?
>>602 できんの?
今Descent 0.3.20070507入ってるけどやり方わかんねー
これはもう丁寧に気をつけて書きなさいということか
DSciTE環境変数自動登録されないから、登録しなきゃ動かないものもある。
他に比べてってことなんじゃない?知らないけど C++とかはひどいってことかな
>>605 例えばインデントゼロのウンコソース全体をぴゃっ!って直してくれるみたいなものを想像している俺です
>>607 DはC++と違って文脈自由文法だから、圧倒的に簡単なはず。
レキサと文法って何か関係あんのか
どちらかというと、パーサの方だな
>>604 ソースを「D Editor」で開いてから、「Ctrl+Shift+F」で整形されますよ。
Javaのフォーマッターと同じ使い方です。
バージョン0.4.3.20070907で確認しました。
↑落ち着いて書いた。
import()はデータのEXE埋め込みとデータとコードの分離をしてくれるスグレモノって解釈でおk?
ところでおまいら的にMiniDってどうよ?カッチリしたECMAScriptみたいな、けっこう至れり尽くせりな 仕様でDのコミュニティの中でローカルな存在になってるにはもったいないくらいの出来じゃないか。
たのしそう
>MiniD squirrelとの違いが全然わからないんだけど・・・ ぱくってる?
618 :
617 :2007/09/11(火) 22:23:56
ごめんなさい 中身は全部Dで書いてあったよ・・・ SquirrelをD言語に移植したって感じ Squirrelをいじってた俺にしてみりゃ、 こりゃすげーおもしろそうです。
だれかTangoのドキュメントのchm作ってくれーっ!!
っ [言いだしっぺの法則]
いい加減何回も繰り返したネタだが…Tangoは標準になりうるのか? というか、標準にならなくてもいいからPhobosと共存できさえすればいいのに…
miniDおもしろそー あとでよんでみよー
623 :
デフォルトの名無しさん :2007/09/12(水) 14:10:58
C++でデリゲートもどきやプロパティもどきを書いててDなら……と思うのだが、 C++でなければならない理由があって泣けてくる
C++でなければならない理由ってなに?
625 :
デフォルトの名無しさん :2007/09/12(水) 18:13:52
Direct X Squirrelを使えればまた便利なんだろうけど……MiniDに期待
DでもDirectX普通に使えるけど
628 :
デフォルトの名無しさん :2007/09/12(水) 19:57:28
>>626 dx9/dx10のSDKライブラリにリンクできましたっけ?
htodも使い方に慣れてないので勉強したいと思います。
いずれにしても、素人向けのライブラリで、OpenGL/MacOSXでも使われたり、
IDEを使わせるのが前提だったり、言語使用に変わられたりすると困ったりするので、
まだ移行できずにいる状態です。
>>628 >dx9/dx10のSDKライブラリにリンクできましたっけ?
本格的にやろうとするとポーティング作業がめんどいことになるけど、
基本的には難しいことは無いよ。
interface IDirect3DTexture9: IDirect3DBaseTexture9{
HRESULT GetLevelDesc(UINT Level, D3DSURFACE_DESC *pDesc);
HRESULT GetSurfaceLevel(UINT Level, IDirect3DSurface9* ppSurfaceLevel);
HRESULT LockRect(UINT Level, D3DLOCKED_RECT* pLockedRect, RECT* pRect, DWORD Flags);
HRESULT UnlockRect(UINT Level);
HRESULT AddDirtyRect(RECT* pDirtyRect);
}
とか宣言しておけばCOMオブジェクト使えるし。
>>628 PlatformSDKとMicrosoft DirectX SDK (August 2007)入れてWiki4DのWindows.hPortいれてDirectX勉強してるけど一応できるっぽいよ
今までGUIプログラミングなんかしたことねーから俺はまだ三角形描けるくらいしかできてないけど
Iron D だれかつくんねーかな。
D/CLIほしい
いらね
dsss使ってみたら「moduleの宣言がないよ!」ってwarning出まくって鬱陶しいんだけどこれって消せないの?
dsss「moduleの宣言をすればいいのに!なんでしないの!」
dsss使ってみたら「Could not detect versions」って出るんだけど、どうしたらいいの?
template TupleToArray(T, T[] ret, A...) { static if (A.length != 0) const TupleToArray = TupleToArray!(T, ret ~ A[0], A[1..$]); else const TupleToArray = ret; } import std.stdio; void main() { writefln(TupleToArray!(string, [], "hoge", "hage", "hige")); } こんなソースで hoge.d(1): Error: arithmetic/string type expected for value-parameter, not T[] こういうエラー出るんですけど、これどこかでおかしいことしてますか? 皆目見当つきません><
>>637 文字列以外の配列は値パラメタとして使えない。
既にタプルがあるなら、[]で囲うだけで配列になるよ。
template Tuple(T...){ alias T Tuple; }
void main() {
writefln([Tuple!("hoge", "hage", "hige")]);
}
>>635 いや、俺が書いたんじゃないソースをインポートしたらぶわーって出たんですよ。
俺はちゃんと宣言するようにしてますよ、勘弁してくださいよ。
>>638 はー、そうだったんだ・・・
char配列がいいなら他のもなんでもいいのかと思ってた・・・
>既にタプルがあるなら、[]で囲うだけで配列になるよ。
ほーほー、これは便利ww
代用できるようなのでそっちにしますね
回答トンクス!
世の中にエスパーはあんまりいないんだぜ?
むしろ世の中全員がエスパーだと思う
パーには事欠かないんだけどな。
switch文のcaseに .. を使えるようになるのはいつ? switch(i) { case 20..100: writefln("20 <= i < 100"); } ついでに不等号も使えるようにしちくり。 switch(i) { case is > 100: writefln("i is greater than 100"); }
if (i in 20..100) writefln("20 <= i < 100");
switch(i) { case 1,3..6,7: writefln("i is 1, 3, 4, 5, or 7"); break; } 終端が含まれないのがやはり気持ち悪いな。
いや、でも、スライスするとき array[0..length-1]; ってやる方が気持ち悪い。
俺もそう思う。 rubyみたいに..と...に分けてもいい気がするけどって既出ですねー
なんかお前ら面白い話題ないのかよー
HSPの代わりになる環境が一式揃った All-in-Oneインストーラみたいなのがあれば普及するかも。 テンプレートメソッドパターンで、 後はゲームループの中を書くだけみたいな感じで。
652 :
デフォルトの名無しさん :2007/09/15(土) 22:16:09
>>651 じゃあ俺が気長に開発してみるわ
miniDとの連携が取れるといろいろよさそうだな
そこまでしなくてもtxとかwin32あたりの(ゲーム用途ならSDLも?)使いそうなライブラリ集めたインストーラあるだけでだいぶ違う気がする。
(とか言うけどもしかし
>>652 にはwktkが止まらない)
HSPあたり使うような層にはインストールは環境変数設定してインクルードパスもiniファイル編集して……っていうのはちょっと敷居高いかもしれないよね。
しかもデフォだと日本語通らないから文字コード周りの知識必須だし。使用するための敷居を下げるのは結構いいんじゃないかと思った。
そろそろC/C++/Javaあたりの経験を前提にしない入門記事があってもいいのかもしれないとも思うんだけども他言語未経験者がDに魅力を感じるのか? っていうのがちょっと微妙かなあ。
Dはnerdにしか受けんよ。
>>654 たぶん売り込み方次第。優れたものが選ばれる世の中じゃないのは市場見てても明らかでは?
>>652 超ガンガッテくれ
>>653 まだ仕様も固まってない現状だとちょっと書きにくいんじゃなかなぁ・・・・
最新の安定版らしい1.016ならもしくは
新機能はver2系の方だと思うし、1の方はもう結構安定期じゃね? いや保証はないが。
>>652 wktkが止まらない!!
>>653 Dに限らずどんな言語やろうともCの経験は必要な気がする
ちなみに俺はC++やろうとしてめんどくさくなってDやり始めた
>>652 応援する。ある程度計画が固まったらスピンオフして別スレに誘導して欲しい。
> miniDとの連携が取れるといろいろよさそうだな
ユーザ視点だと資料の豊富さという観点でメジャーなスクリプトのが嬉しいんじゃない?
ECMAScript系かRubyか、ゲーム組み込みとしては有名なLuaあたり。
HSP並みの手軽さが手に入れば、同人ゲーム業界の新しい光になるな。
661 :
628=652 :2007/09/16(日) 10:18:44
「プログラミングなんて分かりません〜」っていう女子大生が、 1ヶ月間の勉強でアナログ三軸加速度計のデータから画像をリアルタイム制御する、 という無茶なライブラリを作るのを生業にしているので、 ド素人がキー入力を受け付けて画と音を出すというのはちょうどはまるもので。 現在はC++で書いているのですが、 「われわれのお客様はfor文のネストで挫折する人です」という状態なので、 配列が自身の大きさを知っていて気軽に関数に投げ入れられるとか、 関数の第一引数が配列だった場合、 その関数はあたかも配列のプロパティであるかのように呼び出せる機能とか、 そういうのが超重要なんで、願わくはDに行きたいんですよね。 半分税金を投入してもらってるのでこのくらいの還元はね、と。
662 :
デフォルトの名無しさん :2007/09/16(日) 10:32:31
そういえば表計算のシートみたいなものが気軽に作れるTableが欲しいんだよねえ…… Lua, Squirrel, MiniDのいずれでもハッシュテーブルがTableという名前なのが邪魔、といってみる。
>>661 そいつはいろいろと大変だね
超ガンガレ
2Dスプライト(Flyweight、Prototype、Compositあたりに対応) 音楽クリップ(SE音のメモリキャッシュ、パン、ボリューム調整に対応) 後は入力インタフェース抽象化と、フルスクリーン対応 ここら辺を押えたらHSPだけじゃなくFlashユーザも食指を伸ばすだろうね。
MiniD Tangoでできてるのかぁ・・・
> ここら辺を押えたらHSPだけじゃなくFlashユーザも食指を伸ばすだろうね
|
|
|
| /  ̄  ̄ \
(=) /、 ヽ
J
>>664 |・ |―-、 |
q -´ 二 ヽ |
ノ_ ー | |
\. ̄` | /
O===== |
/ |
/ / |
アポロに夢見てる方ですか?
ドラゴに殴り殺されて終わりだよ。
C#が気持ち悪い方向に進化しようとしてるけど、Dはそれを取り込む気は無いのかな。 DはDで超絶気持ち悪い方向に進化してはいるけれど。 とりあえずC#3.0の拡張メソッドとかすぐにでも取り込んでほしいな。
C++でゲーム作るのは正直しんどい… かと言って HSP じゃ遅いし… って思う俺は超期待してしまう
DにObjCのカテゴリでもあればいいのに
クロージャがほしい C#ですらあるのに デリゲートがクロージャじゃないのは中途半端すぎ
デリゲート=クロージャだと思ってた。 違うんだ…
クロージャってその時の環境を保持するんだよね? 素のデリゲートだと、外側の変数にアクセスできる、無名関数ってくらいだけど、 クロージャって、スコープから外れても、外の変数にアクセスできたりするじゃなかったけ? Lisp由来だったと思うけど、 識者の方kwsk
ちょっと前にD言語は多分コケると思っている人の数→のほうにその話題が出てた。 たぶん一般的にいうクロージャが実装されてると、 int delegate(int) func(int x) { int dg(int y) { return x + y; }; return &dg; } void main() { auto plusFive = func(5); stdout.println(plusFive(10)); } こんなようなコードで15が出力されてくれるんだと思う。 実際今のDだとfuncの引数xがスコープ外れた時点で破棄されてるのでよくわからん値+10=よくわからん値が出力されちゃう。
いつもインデントのことを忘れる……orz 波括弧が狙ったように一行おきに出てきて謎々みたいになってるな、ごめん。
書き直してくれw int delegate(int) func(int x) { int dg(int y) { return x + y; }; return &dg; } void main() { auto plusFive = func(5); stdout.println(plusFive(10)); } つまり、クロージャ生成した中のものを外に持ち出しても、問題なく使えるということか?
現状だと無名クラスでむにゃむにゃするくらいしか方法がないんだよなあ new delegate(args) { statement; } みたいな感じで出来ないかなあ
679 :
672 :2007/09/17(月) 16:30:16
>>677 >つまり、クロージャ生成した中のものを外に持ち出しても、問題なく使えるということか?
それに加えて、「ループの中でクロージャ生成したらそのときのローカル変数の値を保持する」
という特徴もある。
680 :
672 :2007/09/17(月) 16:32:52
例えばね、スレッド使うときに、デリゲート放り込めばいいようになってるけど、 スレッドごとにデータを保持させたいと思ったら、クロージャじゃないから いちいちクラス作らないといけなくなって、なんか中途半端だなと。
効率面では割りと保守的なんだよね。他の言語より遅くなる事が嫌なんだろうね。
ネイティブの言語で、クロージャサポートしている言語って他にあるのかな?
x ネイティブの言語で、 o ネイティブコンパイラの言語で、
Common Lisp
Haskell
OCaml
SML
Dylan
Concurrent Clean
おまいらどれだけマニアックなの言えるかになってきてないか
ばれた
>>690 いやいや、カラクリはもっと単純だよ。つまり、
(1)関数型言語は大抵クロージャ持ってる
(2)多くがネイティブコンパイルできる
(3)でもユーザー人口少ない世界だから、有名なのから普通に述べていっても瞬く間にマイナー言語の出番が来る
>>679 >ループの中でクロージャ生成したらそのときのローカル変数の値を保持する
Javascriptのアレはクロージャじゃなかったのか!!
いや、よくわからんけど。
とりあえずデリゲートと関数ポインタってのが両方あるんだから無名関数作れるようにして、
どっちかをクロージャ、どっちかを現在のデリゲートって風にすればいいとおもうんだ。
そうしたら実行効率はなんとかなる?
Dならfunction、delegateに並ぶクロージャ用のキーワードが出てくるに一票
特に関係ないけどローカル変数保存で思い出したからコルーチンが標準でほしいといっておく。
そうやって何でも予約語にしてればいいんだよ…
何でも予約語ってのは COBOL みたいなのを言うんだよ
そろそろ終了条件なしのループも追加してくれよ。 loop { } みたいな。
while(true)かfor(;;)でいいじゃねえか・・・
> while(true) while(1) でも while(4.7i) でも問題のないところが気持ち悪い。 > for(;;) 空文っぽいのが真として扱われるのが気持ち悪い。
unless, until, do-untilのが欲しい
unlessはたしかにほしい
成功するまでtryする構文みたいなのもほしいかも。 try(100){ // 100回例外を投げるまで繰り返される anythingToDo(); }while(Exception ex){ // 99回目の例外発生までここ Sleep(10); }catch(Exception ex){ // 100回目の例外発生はここ writefln(ex.toString()); } // 例外を投げなければスルー
仕様呼んでて気づいたんだが、こんな書き方できるんだな。 for({ writefln("a"); } false; ) { }
unlessとかいれるんならLLでおなじみの hoge() if (fuga == "hage"); とかもほしいな
if (fuga == "hage") hoge(); でよくね
>>704 for({for(;;){}} false; ) {}
ほんとだ怖えぇ
for({int i=0;char c='a';} i<100; ++i) { ... }
たまに違う型の変数を2個宣言したくなることがあるので便利かなとは思った。
>>704 うわ、始めて知った。これは凄い。
それとInitializeが; | NoScopeNonEmptyStatementになってるのが気になった。なんでNoScopeStatementじゃないんだろうか。
>>707 for(for(;;){} false; ) {} とも可能。
for(pragma(msg,"test");false;){}とかfor(mixin("int i;");i<10;i++){}とかが使えそう?
for(scope(exit)writefln(1);false;){} 内部エラーなった
>>705 後置記法って、ifの後に、Dだと単文おいても成り立つから、
(カッコや、endなどを強制されないから)意味なくないすか?
perlなんかだと、後置ifの()を省略できるから存在価値があるんだろう。
後置 if と普通の if って微妙に挙動違わなかったっけ。
if (!(key in aa)) hoge(); が unless (key in aa) hoge(); ってかけたらうれしい。つーか連想配列にhasプロパティ追加してくれ
ソース不正だ でもまあいいか
718 :
717 :2007/09/19(水) 19:26:34
D言語でネットワークプレイのゲーム作ろうと思っているんですが、 チャット入力部分のためにIMEのAPIなどを叩きたいです。 (文字入力+変換 を ゲーム画面上で行いたい) D言語のライブラリで必要な機能をサポートしているものは既にありますか? また、チャット入力を可能にした場合、Windowsでしか動かないソースになってしまいますか? そうであれば、違う環境にしようかな、と思っています。
ソース一か所も変えずに色んなプラットフォームで動かすとか無理じゃね?
良く知らないけれどチャット入力部分のためにIMEのAPI叩く必要があるの?
>>720 DirectX使ったらMacに移植するのは大手術ですが、OpenGLだったらそうじゃないでしょ
IMEの制御はどのくらいOSに依存するのでしょう
リロード直後にレス増えてました、連レスになってすいません。
>>721 フルスクリーンで動作させようと思うので、
ゲーム画面とは別の サブウィンドウ上でOSのGUI部品のエディットボックスを張る、
という実装にはしたくないです。
そうすると、変換するためには叩かないと無理だとおもうんです。
英数字だけにしといたほうが身のため
>>724 猫でも分かるC言語のIMEの項を読みつつ
DelphiでDirectX画面上での文字入力は作ってみたことがありますが
それより数倍困難だとしたら今回は諦めようと思います。
D言語で実装されてるサポート機能はどんなもんがありますかね?
>>725 D言語に限らなければIMEを抽象的なAPIのレイヤーを介してアプリから扱えるのか?
現時点では言語に関係なくかなり大変な印象があるんだが
>>726 MozillaのソースからIME関係の部分を取ってきてライセンスをMPLで使うとか。
SKK使っても意味ないかな?
>>726 カーソルキーとローマ字入力のための英数字情報のキー入力を渡してやって、
変換指示を出して 文節分割状態(と選んでる文節と)と変換候補一覧(と選んでる候補)をもらって
確定文字列をもらって
みたいな処理だけだったと思います。
あとはバックスペースで削除とかカーソル位置の移動とかです。
変換範囲の変更(shift+→とか)はキー入力を渡せばIME側がやってくれました。
ただ、そのキー入力を渡すためにウィンドウのKeyPressをIMEリレーする部分を
OpenGL環境でどうやったものかとかが未知なんです。(あと上に上げたいろんな処理が仕様が同じかどうかとか)
delの時はonKeyPressイベントから普通にやったんですけど、
そんときはDirectXの画面はウィンドウのキャンバスがポートだったからできた(あってるか微妙)けど、
OpenGL直実行とかの場合はGUIウィンドウは出てないような気がするし・・・?
OpenGLスレで聞いてみたほうがいいかもな
>>728 ふーんこんなのあるのか
SKKはエンドユーザ層には使えんからダメじゃね
>>727 既存のアプリのソース公開されてるのを見るのは盲点でした。
でも今ちょっとぐぐったけどMozillaはC++じゃ無いんですか?
>>728 初めて聞いたのでググッてみました。
Emacsってエディタですよね、ライブラリとして使えたら良さそうです。
>>730 行って来ます
とりあえず俺はD言語で実装されてるものは見たことがない
734 :
727 :2007/09/19(水) 21:56:48
>>732 >でも今ちょっとぐぐったけどMozillaはC++じゃ無いんですか?
そう。
>D言語に限らなければ
の話ね。
D言語に限るならMozillaからの移植が一番だと思う。MPLはGPLに比べて緩いし。
たまには wxD も思い出してあげてください。
SDL-IM使えば?
へえ SDL-IMを使えばDirectShowでもOpenGLのサーフェイスでも 自分で書くコードは同じにできるようだね? wxDは後で見るけどIM関係あったっけ?
739 :
デフォルトの名無しさん :2007/09/20(木) 20:34:20
プラットフォーム非依存のライブラリを作っているのですが、 mainとWinMainを抽象化するいい方法はないでしょうか。 DMDを使っているのですが、ライブラリ側にWinMainを混ぜようとしたらきちんとリンクしてくれませんでしたorz
>>738 wxって基本的にはWin32ならWin32、UnixならGTKみたいにネイティブのコンポーネントを
そのまま使ってるから、下のレイヤがIME対応してりゃ自動的に動くんじゃねぇか?
逆に、IMEをプログラマが手で制御するための手段は用意されてないかも
741 :
719 :2007/09/20(木) 21:05:25
>>737 おお〜ありがとうございます。調べてみます。
>>739 mainでいいんじゃね?
Windowsアプリ時にも別にWinMain書く必要はないってどっかでみた。
744 :
デフォルトの名無しさん :2007/09/20(木) 21:45:44
俺も>743だと思って半信半疑でやってみたのだが、 EXETYPE NT SUBSYSTEM WINDOWS を含んだ.defをリンカに食わせてやったら、 MessageBoxAのみのmain関数を実行しても黒い窓が出なかった。 あとhInstanceを正しく持ってこれるかどうかにかかってる感じ この辺はwin32apiスレで聞いたほうがよさそうなのでそっちに行ってくる あとは初期化処理をinitializeとか書かせずに実行したり、 流れてくる例外を自動的に拾ったりが出来るかどうかだな
もしくはリンク時に -L/su:windows:4.0 とかつければOK
D言語で手ごろにスプライト機能が使えるライブラリってなるとSDLでしょうか?
みんなエディタ何使ってる?
vimだろ常識的に考えて。
インテリセンスって響きがインテリっぽくない…
JmEditer
751 :
デフォルトの名無しさん :2007/09/21(金) 00:02:54
opNegの返り値にC++の一時オブジェクトみたいなものを返したいのですが、 これはnewで作っちゃっていいのでしょうか なんとなくscopeつきで返したい気もしますが。
>>744 >あとhInstanceを正しく持ってこれるかどうか
これでおk
HINSTANCE hInst;
static this(){
hInst = GetModuleHandle(null);
}
>>751 scope付きだと無くなってしまうがな
D・F・L!
756 :
デフォルトの名無しさん :2007/09/21(金) 16:25:37
>>755 おとなしくForthで書きたいと思います
というのは置いといて、
C++で行列をExpression Templateで書いていて、
演算子でExpressionの一時オブジェクトを生成し、
デストラクタで実計算をやっていたので、
さて同等品をどう実装したものかとちょいと考えておりまして。
Dと他の言語(C/C++,C#,java)との処理速度の比較ってどこかのサイトでやってませんか? できれば、画像処理系での比較だどうれしいです。
>>758 ありがとうございます。
なんかDが使えそうな気がしてきました。
760 :
デフォルトの名無しさん :2007/09/22(土) 16:48:38
C++の string str; while(cin >> str) { 〜 } をDで書こうと思って foreach(str;din) { 〜 } と書いたら何時まで経っても処理が終わらない。。。 パイプを使ったプログラミングは眼中に無いのか
メチャクチャな論理
>>760 cin >> str
ってそんなに使うか?
空白文字が字句区切りで、かつエスケープやクオートのようなものは考慮しなくても
良いようなケースでしか使えないだろう。
それって凄く稀だと思うんだが。
ただの行入力をやりたいならgetline()で、そっちはわりと使うけどな。
(のろいけど)
std::getlineは脆弱性があるので使ってはならない
?
古いD(ver. 0.173)で作られたABAさんのTitanionを最新のD(2.004かなあ?)でビルドしようとしていました。 使えない名前とか、できなくなったキャストとかのエラーはチマチマ直したらコンパイルは通ったのですがリンクでエラーが出てしまいました。 [apply] [apply] OPTLINK (R) for Win32 Release 8.00.1Copyright (C) Digital Mars 1989-2004 All rights reserved. [apply] C:\work\D\ttnNewD\src\abagames\ttn\boot.obj(boot) [apply] Error 42: Symbol Undefined _D8abagames3ttn6screen6Screen7__ClassZ [apply] C:\work\D\ttnNewD\src\abagames\ttn\boot.obj(boot) [apply] Error 42: Symbol Undefined _D8abagames4util3sdl3pad13RecordablePad7__ClassZ [apply] C:\work\D\ttnNewD\src\abagames\ttn\boot.obj(boot) [apply] Error 42: Symbol Undefined _D8abagames4util3sdl3pad13RecordablePad5_ctorMFZC8abagames4util3sdl3pad13Recorda blePad [apply] C:\work\D\ttnNewD\src\abagames\ttn\boot.obj(boot) ・ ・ ・ [apply] Error 42: Symbol Undefined __init_11TypeInfo_Aa [apply] C:\work\D\ttnNewD\src\abagames\util\iterator.obj(iterator) [apply] Error 42: Symbol Undefined _D6object9Exception8toStringFZAa [apply] C:\work\D\ttnNewD\src\abagames\util\iterator.obj(iterator) [apply] Error 42: Symbol Undefined _D6object9Exception5printFZv [apply] C:\work\D\ttnNewD\src\abagames\util\iterator.obj(iterator) [apply] Error 42: Symbol Undefined __Class_9Exception [apply] C:\work\D\ttnNewD\src\abagames\util\sdl\recordableinput.obj(recordableinput) [apply] Error 42: Symbol Undefined _D6object9Exception5_ctorFAaZC9Exception [apply] --- errorlevel 29 BUILD FAILED C:\work\D\ttnNewD\build.xml:45: apply returned: 29 Total time: 0 seconds このようにError 42のSytmbol Undefinedが大量に出ているのですが、これってどういう意味ですか?意味がわからないので何をしたらいいのかさっぱりです。
std::getlineは悪意あるユーザーが改行の無い10GBのデータを送り込んだとしても 1度に全て読み込もうとするためメモリを食い尽くしそのままプログラムが落ちる。 つまり、潜在的DoS脆弱性を含む事になる。 ifstream.getlineは引数にバイト数が指定できるため正しく使えば問題は無い。
使えるメモリ量を制限して例外処理を正しくしてれば問題にならない。 std::getlineは使ってはならないは使ってはならない。
768 :
デフォルトの名無しさん :2007/09/22(土) 21:11:04
列挙体の前方参照がうざすぎる
// エラー デバッグ ブラウザ ツール
//
http://www.mozilla-japan.org/ // シンプル プログミング ツール
//
http://proforceone.web.fc2.com/ // 素因数分解サンプルプログラム
// Calculation processing にコピーして[RUN]
MAX=1000;br();
for(x=2;MAX>=x;x++){write(" "+x+" ⇒");
for(i=2;x>=i;i++){if(0==x%i){k=0;
for(j=2;(i>=j)&&(1>=k);j++){
if(0==i%j){k++;}
} if(1==k){write(" "+i);}
}} br();
} br();
>>767 std:getline Considered Harmful Considered Harmfulってやつか
そうだなあ。
>>766 を脆弱性と言ってしまうと、配列、リスト、コレクションなどの
サイズに特に制限を設けないようなほとんど全ての言語が脆弱だということに
なるんじゃなかろうか。
今時の言語はほぼ全部ダメじゃないか?
別にネットワークストリームを直に変換したりはしないでしょ。 ファイルサーバ内のファイルを信頼するのを脆弱性と呼ぶのは違う気がするし。
C++ + boost > D
774 :
765 :2007/09/23(日) 01:15:25
自己解決しました。ant cleanしたあとantしたらうまくいきました。D言語仕様は関係なかったです。 結果的に直す必要があったのは、 ポインタに配列を代入しようとしているところでエラーがでているのをcast(kata *)つけていくだけでした。
C++ < D C++ + STL > D C++ + STL < D + Tango C++ + STL + IDE >>>>> 越えられない壁 >>>>> D + Tango
>>775 そんな軟弱野郎にD言語は使って欲しくないね。むしろ使うな。
さてと、VS Expressのインストールでもするか。
C++ + STL < D は譲れない
>>775 誰かVS並の機能実装したIDE作って壁超えてくれんだろうか、
VS のD Pluginでもいいから。
言いだしpp(ry
VS触ったこと無い俺は幸せなのかな
便利なツールを知らないって事では不幸せ、 便利なツールが無くてもそつなくこなせて行けてるって事では幸せ。
どのくらい便利なんだろ 趣味レベルでメモ帳から始まった俺的にはJmEditor、Poseidonにそれはもう歓喜したんだが
インテリセンスとデバッガが動けばどれも大差ないと思う俺はどうすれば・・・
複雑なテンプレートマジックやCTFEを解釈できるIDEきぼん
.打つごとに3分待たされてもいい?
xyzzy用のメジャーモードとかある?
>>784 そんなあなたにはぜひVisualStudio2005+C#を体験してもらいたい
binding win32apiが最新のDMDでコンパイルエラー起こす問題対処されたっぽい
お これで但し書き消せる
IDEから入ったゆとり世代なんだがD始めてここ一年ちょいくらいで急速にエディタに慣れた。 今はどっちもストレスなく使えるバランス状態なんだが、そろそろどっちかに偏りそうで怖いw
そこでviですよ
emacsとか使ってるとemacs以外でもC-Pとかやっちゃう。 しかしviなら、vi以外で「:w」とか「kkkkkkkkkkkkkk」 とか書いちゃうことは、それほど無い。
メモ帳で C-x C-s なら何度もやったw
確かにEmacsのほうが依存性は強い、C-aとかC-fとかを脊髄反射で押して痛い目を みることが多いが、 viでもエスケープ連打してたり0押しちゃってたりすることは多いぞ。とくに 直前に使ってた場合とか。
viはもともとモード意識せなあかんエディタだし 普通のエディタの入力画面はviの入力モードに見える(編集モードには見えない)んで 間違ってj連打とかはやらんな
そもそもviユーザはエスケープを連打したりしない というかそろそろスレ違いだな
俺は vi ユーザだけど、MUA 付属のエディタで文章書く時は Esc 連打してしまうわ。 0 や j は押さないけど。
俺、dosからずっとmifes使ってる・・・
んもう!
enumを含む循環importのやり方で躓いています。 // foo.d import hoge; class Foo { enum Bar { FOO, BAR } Hoge hoge; } // hoge.d import foo; class Hoge { this(Foo.Bar foo) { } } fooを先にすればHogeが見つからない、 Hogeを先にすればenumの前方参照といわれます。 定型的な解決法はありますでしょうか。
そもそもファイルが違うような関係のクラス間に循環依存をさせない。 循環依存していいのはJavaのinner classのようなとっても蜜なクラス間だけ。
なる。 プラットフォーム依存する部分を別ファイルで切り離そうと思ったんですが、 mixinにしてみます。
すいません。だれか添削してもらえませんか? C++はSTL使えるくらいの者なんですが、 今日からちょっと遊んでみようとおもってはじめたんですけど、 なんかエラーが英語でわからなくて困っています。 template Array.print(T) does not match any template declaration template Array.print(T) cannot deduce template function from argument types (int[],int) T[] print(T)(T[] Array,uint N){ foreach(uint i,T val;Array){ writef("%s ",Array.toString()); if(i%N >= N-1) printf("\n"); } return Array; } int main(char[][] args){ int[] Array = new int[16]; print(Array,8); // Array.print=8;//最終的にはこうしたい。 return 0; } お願いします。
配列のプロパティ風に代入ってできたんだっけ 最近Dいじれる環境無くしたから確認できねえ><
>>805 仮引数Nはuintなのに、実引数がintだから型推論が上手くいってないみたいね。
>>806 Array.print(8); が限界だね。
出来ました。型推論か〜。結構厳格なんですねぇ。 今度から気をつけます。 =で代入は記憶違いだったっぽいです。 最後に、ありがとう!! import std.stdio; void print(T)(T[] Array,int N){ foreach(uint i,T val;Array){ writef(val,' '); if(i%N >= N-1) printf("\n"); } //return Array; } int main(char[][] args){ int[] Array = new int[16]; int single=16; Array.print(9);//最終的にはこうなった。 return 0; }
809 :
デフォルトの名無しさん :2007/09/25(火) 01:17:35
dmd1.020 までは大丈夫だったテンプレートがdmd1.021ではエラーが出てしまった・・・。 ひとまず1.020に戻しとこうっと・・・。
バージョンうpまだー もう待ちくたびれたー
ま、まさか 安定期にはいったのか・・・
DがDで書かれるまでヲルタンは止めないはず
使い回す配列のインスタンスを明示せずに済む点が優れてるわけだな perlだと、関数の引数を省略したときに 前の処理結果が自動的に渡される、 という感じの暗黙の一時変数があるんだっけ?
$_か? あれなかなか便利だよね
>>814 なんかバグ呼びそうな仕様だなぁ・・・。
while(<>){print}とかそんな。
>>817 perlでも完全性が要求される部分ではあまり使わんねえ。
手軽にパッパと書くには重宝するが、C系言語に飼いならされると存在を忘れる
>>818 それすごいね。説明されないと読めないけどさ。
>>819 複雑になるほど邪悪なかんじだなぁ。
俺、C系の人間だから、使うこともないけどねぇ。
perlは昔から慣れないなぁ ちょっと触らなくなると直ぐにカオス世界に彷徨ってしまう。 i18n周りが落ち着いたらD言語スクリプトで書きたいところだ。
DでPythonみたいなインタプリタ誰かかかないかなあ
char* toWstringz(const(char)[] s) { return toUTF16z(s); // return する前にconstを取らないといけない } const(char)[]の配列からconstを取り除くには.dupするだけですが 配列を.ptrしたものからconstを取り除くにはどうしたらいいでしょうか
気合
そのポインタがどれだけの長さの領域を指してるかわからんから、 汎用的に使える方法はないと思う。 今回の場合なら、 char* toWstringz(const(char)[] s) { return cast(wchar*)(toUTF16(s) ~ '\0'); } でいいとおもう。
あ,戻り値の型を間違えてました(連鎖してますね),すいません 今のところこういう風にしていたんですけど,やっぱりこれくらいしかないんですかね どうもです wchar* toWstringz(const(char)[] s) { return (toUTF16(s)~"\0").ptr; }
std.utf.toUTF16zは内部で動的に文字列を生成してるんだし、 躊躇なくcastでconst除去で良いような。
でもcastでconst除去したとしてもそれを書き換えていいわけじゃない。 書き換えられないようにプログラマが責任持てって公式で言ってるし。 そもそもDigital Mars以外が作ったPhobosが完全に同じ実装とは限らないわけで… .dupしても勝手に最適化でうまいことしてくれないかなぁ…
そういやDM以外がPhobosを作るときのPhobosの仕様とかあんの?
>>828 win32apiとかがchar*じゃなくてconst(char)*で文字列を受け取ってくれたら
当面の問題は解決するんですけども
extern (Windows) { //int MessageBoxW(uint, wchar*, wchar*, uint); // こうじゃなくて int MessageBoxW(uint, const(wchar)*, const(wchar)*, uint); } void main() { MessageBoxW(0, "hello", "sample", 0); } 試しに書いてみたら配列からポインタに暗黙変換されるんだが これは仕様と食い違うのでは・・・
コンパイラのインストールがうまくいかない。 DMD 2.004、Ubuntu 7.04、AMD64だとダメなのかな。 no such file or directoryとかcommand not foundとか言われるんだよ。 パス通したし、dmd.confとlibphobosもちゃんとコピーしたし、 chmod u+xもやってるんだけど。 % cd ~/dmd/bin % which dmd /home/[ユーザ名]/dmd/bin/dmd % dmd zsh: command not found: dmd % ./dmd zsh: no such file or directory: ./dmd % file ./dmd ./dmd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), stripped % ldd ./dmd not a dynamic executable %
会社でもD言語の利用を検討し始めたぜ! Solarisのスクリプトのほうだけどな…
ツールとしてバイナリエディタもどきを作ったのだが、エレガントできたのでよかった。 以下自己満足 // 配列の部分要素列を任意の比較対象とマッチしてインデックス配列を返すテンプレート int[] listSub(T)(in T[] arr, in T[] sub) { int[] match; foreach( int i, T c; arr[0..$-sub.length] ) if(arr[i..i+sub.length] == sub[] ) match~=i; return match; } // バイナリ配列(っぽいもの)から、C++のreinterpret_cast風の変換を行うテンプレート void reinterpret(T, S)(ref T x, out S y) { void* tmp = cast(void *)&x; y = *(cast(S*)tmp); } // バイナリファイルから"Search Target"文字列を検索してインデックスを列挙し、 // そのインデックスから定数バイトずれた場所の値をintとして再解釈する例 void analyseREC(char[] filename) { auto rec = cast(byte[])read(filename); auto sub = cast(byte[])"Search Target"; auto indices = listSub(rec, sub); int tmp; real[] result; foreach(i; indices) { reinterpret(rec[i-13], tmp); result ~= tmp*0.01; } }
威勢よく書いておいて、シンプルに *(cast(int*)&(some_pointer)) で解決することに気づいて、恥ずかしい限りです。 reinterpret_cast!(TYPE) ... と書くC++風の構文のテンプレートを考えております……
>>833 うは 配列はすべて.ptr必須なのかと思ってた
>>836 なんか考えなきゃいけない問題点とかあったっけ?
template reinterpret_cast(U){
U reinterpret_cast(T)(ref T x){
return*cast(U*)&x;
}
}
Dに安全なキャストかどうか判定するやつってあったっけ
クラスインスタンスはキャストに失敗するとnullが返るんだっけな
>>838 同名のテンプレートでさらにくるむというのは(個人的に)盲点でした……
ありがとうございました。
>>839 Dの警告に関するページで、
# 普通に暗黙のキャストが許される場面でのみ動作する、 と定義する implicit_cast をテンプレートで実装する。
と書かれています。
>>840 class A {
}
class B : A {
}
int main()
{
auto b= new B;
auto a= cast(A)b;
assert( !(a is null) );
return 0;
}
うは、まじだwwwww
ごみおいときます・・
T checkcast(T)(Object o)
{
ClassInfo ci= o.classinfo;
while( 1 ) {
if( T.classinfo == ci ) return cast(T)o;
if( ci == Object.classinfo ) break;
ci= ci.base;
}
return null;
}
ひましにperlみたいになっていってるな。
2chも連続半角スペースとか行頭半角スペースとかタブ文字とか認識してくれるといいのにねえ
単にHTMLの仕様そのまま持ってきただけだからな つーか実は2ch自体は空白そのまま持ってるから ブラウザ側で対応すれば良いんだぜ? 確かいくつかの2chブラウザは空白も表示するハズ
フツーのブラウザもオプションで変えられるようになってればいいのにね
void foo(T)( T as) { T.keytype key; foreach( i, a; as) { key= i; break; } } int[string] array; foo( array); なんてことできないかな 連想配列のKeyTypeをとりたいのです
でもまー、HTMLとか普通のwebブラウザ的には コード書くならpreタグやcodeタグを使ってくれ、って立場だからねえ。 やっぱ2chや2chブラウザでなんとか処理するのが筋かと。
まあ2chがpreにしなかったのが悪いんだよな。 今更言っても詮無いことだが。 お陰でソースコードの類は張りにくいし読みにくいわ MS Pゴシック12ptでしかマトモに見れないプロポーショナルAAなどという代物が 流行るわ ロクなことがない。 CGIにしても、改行だけは<br>に置換するけど空白は放置ってのも微妙に半端な仕様。 どっちかに統一しろよ。
ってもそれで困るのは一部の板だけだと思う ム/マとWebProg…後はUNIXとかLinux辺り? 逆にAA系の板は今の仕様が良かったんだろうし 板によってpre標準にできんものかねぇ …まぁスレ違いの気がするが
>>847 ふつうにis式でおk
template key_type(T){
static if(is(T A:U[A],U))
alias A key_type;
}
void foo(T)(T as){
key_type!(T) key;
foreach(i,a;as){
key = i;
break;
}
}
>>851 おお・・ありがとうございます m(_ _)m
>>851 D2.0でしか動かないのね・・・
乗り換え時かな
is式は1.0からあったように思うが
851のisの中は一体どうなってるの
C++やってたんですけど、 //stageとdoorはenum. stageInfoAry[stage.t1].doorAry.length = 4; stageInfoAry[stage.t1].doorAry[0] = door.r2; stageInfoAry[stage.t1].doorAry[1] = door.y7; stageInfoAry[stage.t1].doorAry[2] = door.y1; stageInfoAry[stage.t1].doorAry[3] = door.y5; これが、 with(stageInfoAry[stage.t1]) { doorAry.length = 4; with(door) doorAry[] = [r2, y7, y1, y5]; } こう書けたことに感動した。
>>856 doorAry.length = 4;
いらん気がする。
with(stageInfoAry[stage.t1]) with(door) doorAry[] = [r2, y7, y1, y5]; ってか
[]なくてもいいよね・・・今気付いた
with(door) stageInfoAry[stage.t1].doorAry = [r2, y7, y1, y5]; でおk
enumにwithするという発想はマジでなかった これいいね便利
862 :
856 :2007/09/28(金) 23:07:07
レスありがとうございます。 doorAry.length = 4;なしで書けますね。 勉強になりました。 因みに、 自分が最初にやっていたのは配列要素へのコピーで、 教えてもらったのは参照先の変更?みたいなことですね。
>>863 thx
しかしこのis式はなんて複雑なんだ
使いこなせるようになるまで時間かかりそうだ
しかしBoostのような変態ライブラリの開発者にしか縁のなさそうなis式だな。
でも、変態ライブラリがかなり簡潔になるよ。
std.bind
いつのまにかstd.bindの使い方変わってねえ? 有効だったコードが今のdmdだと通らなかったりするんだけど 正しい使い方をどこかで数種類示してくれないかなあ
phobosにあったんですね。すいません…… テンプレート関数にデフォルト引数を使えるようにするには、とかちょいと考えていてこれが使えないものかと。
871 :
851 :2007/09/29(土) 11:36:37
そういえば書くの忘れてた
>>853 ちと泥臭いけど1.0でもOKな方法あるよ
template key_type(T){
alias typeof(T.keys[0]) key_type;
}
個人的にはD2.0マンセーなので、
1.0でも動く書き方知ってても
ついつい2.0用の書き方してしまう。
何度もすまない std.bindが動かないことを話題にしている人が どこにもいないのはなぜなんだぜ?
std.c.locale内の定数が違っててsetlocaleに失敗したり wcstombs関数宣言でmbs側にinが付いてたり 標準ライブラリの問題を語りだすと話題が尽きなくなる
>>872 以前にも何度か話題に上がってるが、正直何が原因で動かないのか分からないし
ウォルタたんが直してくれないことにはどうしようもない。
一回報告してみたけど誰にもつつかれず流れたorz
だから誰かもう一回報告しておくれ
自分でやれよ・・・
>>876 カワイソス MLに流したの? 一般用MLではなくバグ用MLだよね?
やり方がまずかったのかもしれない もう一度やってみた
えらいなぁ・・・ 俺もやってみようとしたけど、こわくなってやめてしまった・・・ 入力後のスクショなどうpしてくれませんでしょうか
もっと日本人のプログラマもDに対して主張していけたらいいね。 言語の壁は厚いなぁ…
873のは報告上がってるのかな 他のphobosのバグも上がってないのあったら ここにコード書いてくれたら報告できるかもしれない
国際化の一歩としてヲルタァたんに日本語を習得してほしい。とか、余計なこと考えてみる。Lv4だっけね。日本語って。
どう考えても俺らのほうが英語やるべきだろw
残ねぇーーーーーーーーーーーーーーーーーーーーん!! ま、それはいいか。。。
文字コードUTF8にするだけで解決とか思ってるんだろうな だれかうぉるたんにわかり易く説明してやる香具師はいないのかな
OSが扱うコードがユニコードで統一された時代に 使うことを想定してるんじゃないかと思っている
明らかにコンパイラのバグらしきものを発見したのだが、 条件の再現が面倒くさすぎて報告する気にならん
>>884 inaba san
o tegami wo domou arigaou gozaimasu.
実行してすらいないのだが s/inout/ref/g か Array.d(191): private void Swap(T)(inout T A,inout T B){//i am not public. hope make good swap by others DTLは更新されてないような
>>892 あれ?ウチではちゃんとうごいたんだけど。。。ま、それはいい。
refってforeach専用だと思ってた。
しってたらそれ使うっていうかつぎからそうする〜!!多謝!
ってかね、そっちの失態より妖しい英語のほうが恥ずかしい!!
で。
DTLちょっと0.2.1ってのがあったからのぞいてみたけど、STLの後追いっぽいねぇ。人のことは言えないけどさ。
最終更新日が2004年あたりだったなぁ。
感想としては、Dに足りないのはList構造くらいじゃないかな。
ほかのは配列ラップすれば適当なSTL相当のはできそう。連想配列も標準でサポートしてるし。アロケータ用意しなくても良いし。
>>891 STLとboostからのポートがあるとうれしいなあ。
random周りはジェネレータだけ移植(ってかCでコンパイルしてリンクだけ出来るように)して、分布はtangoからパチればいいかな?
そこでbindが欲しくなるんだが……
あとinabaさんは大して意味はないですw
ishidaさんが訳者なんで、マニュアルの訳者のinabaさんを選んでみたってわけですわ。
refできたー。指摘感謝! inoutいらない子。。。
実は未だにinout/refどっちでも動くw
>>894 ネタに混じれ酢しちゃったか。こりゃ申し訳ない。
俺もさ、翻訳できるくらい英語できたら原書がよめてハッピーだろうなー。とか思うわけですよ。(TT
>>896 あ、まちがってなかったか。良かった。
でも、refの方がかっこいいから次からref使う〜。
まー、C++からの感覚だとそっちのほうがリファレンス!ってかんじで覚えやすい。かも。
>>894 俺、boostはむりです。
触ったことないんで。STLが限界です。
っていうか、時間があったら、言いだしっぺの法則やってみません?(汗
>>897 refにウォルタたんが変なものを追加しようとしてるとの未確認情報もあるから、inout使っとけ。
ええぇぇぇ その未確認情報plz
>>900 boost::any とか std.boxでいいだろとかw
random周りは個人的に必要なので適当に作りますわ。
さて、>652で予告してたライブラリですが、
現在C++版からポートしつつ、ちょびちょびいじってます。
一応簡単な表示まではできるようになってきたという程度ですが、
ちょいと説明書きをつけてどっか載せますね。
そっかー。仕様が変わるって恐ろしいことなんだねぇ。
C89とかでやってきたから、仕様が変わるって局面に出会ったのはじめてかもしれん。C99はVCだと半端っぽいし。
強烈!の一言につきるかも。でも、よりよくなってほしいね、今のうちに。
で、
>>898 の解説を軽く眺めてきたけど、TangoにArrayってライブラリあるのね。
はぁ〜、また車輪の〜 か。(TT
ま、それはいい。
いい解説だねぇ。結構自分には合ってる感じだ。ワクテカしててもいいですか!?
DでDxLib使えたらうれしそうだよね
portした上で戻り値を確認して例外を投げるらぱーを
tango.text.Regex がうんこすぎて死ねる
ああ、std.regexp も同じなのか 正規表現周りが腐ってるとか、ああああああ
>>910 正規表現ライブラリの`鬼車`ってやつを使うことを考えては?
一応Win/Linux両方で使えたはず・・・
どううんこなのかkysk
キラリと光るのに何かとうまくいかない言語だなぁ……もうずっとw こうなったらもうD以外の言語を発掘するしか。 ネイティブバイナリ吐けて基本OOPでGCと構造化例外があってメタプログラミングが強力で、 さらに標準ライブラリが強力で設計もクールで文字列の扱いもIO含めて問題無しでIDE開発の相性も良くて、 できればRubyばりのクロージャなんかあって構文はC系列が良くて、 そんな言語がどっかに存在しませんか。時空のどこかに。
標準ライブラリが非力で設計がダメダメとみんな言うが 俺には質の善し悪しはわかんねーや・・・ Dの文字列の国際化対応が微妙なのはかろうじて感じるが Windowsのコンソールで化けなければ当面納得できるような IOはC++のiostreamとboost::asioくらいのものがあれば納得されるのだろうか すまんがJavaは知らないんだ
なんというかphobosはつぎはぎ感がして使いづらい。
918 :
デフォルトの名無しさん :2007/10/02(火) 17:24:06
ぼくはphobosでものを考えてるからTangoの良さが分かりません
tangoはモジュール名がPascalCaseなのが気に食わない
tangoの名前が気に食わないおれは少数派?w phobosのときは火星の衛星だからなるほどーって思ってたのに・・・・w
でも、Deimosってのもなあ…
んじゃSuper Phobos
そんな事いったら、Ultimate Phobosとか作るやつでてきそうじゃん。
>>913 機能的には別に困らないんだが、関数のインタフェースが珍妙だなと思ったのよ
他のスクリプト言語をメインにやってる俺からすると扱いづらくてね
うんこは言い過ぎだったかもしれない
Phobos 2.0でいいよw
Phobosつくってるのもヲルターだよね
>>914 言いたかないけど言っちゃうけど、それなんてcommon lisp?
任意のクラスTについて、要素をnewした配列を返してくるテンプレートを考えています。 C++のnew T[n]みたいな構文で書ければいいんですが、常套手段がありましたらご教示ください。
俺、素人なんでこんなのしか思いつかないぃ。 他の人を待つ! import std.stdio; T[] Alloc(T)(size_t N){ return new T[N]; } int main(char [][]){ auto R = Alloc!(int)(10); foreach(V;R){ writef(V,' '); } return 0; }
Dってnew CLASS[n]できないの?
出来ないわけないと思う。
nullじゃなくて要素ごとにインスタンスを生成して初期化したいってこと?
>>935 はい。そういうことです。
一度foreachをまわしてインスタンスを生成するのがちょいと面倒なもので。
>>931 俺ならこう書くかな。
T[] alloc(T)(size_t n) {
auto ts = new T[n];
static if(is(typeof(new T) == T))
foreach(ref t; ts) t = new T;
return ts;
}
うは、今実験して初めてわかったが、参照の配列生成するんだな。。。 Dのクラス使ったの初めてだから知らなかった。申し訳ない。 しかしなー、こんなところに穴があるとは、コレクション作りにくいなぁ。。。 import std.stdio; import std.string; class C{ static int i; int Val; this(){ Val = i++; } char[] toString(){ char[] str = "I am " ~ std.string.toString(Val) ~"th Class"; return str; } } T[] ClassAlloc(T)(size_t N){ T[] Array = new T[N]; foreach(ref T V;Array){ V = new T; } return Array; } int main(char [][]){ auto R = ClassAlloc!(C)(10); foreach(V;R){ writefln(V,' '); } return 0; }
939 :
デフォルトの名無しさん :2007/10/03(水) 17:33:44
しつもーん。質問。 static if(is(typeof(new T) == T)) これって何やってるの?
>>939 typeof(new int) == int*
typeof(new Struct) == Struct*
typeof(new Class) == Class
ところでTangoのMap系のコレクションにopIn_r関数がないのはなぜなんだぜ?
組み込み型と辻褄合わせる為には、要素のポインタを返さないといけないからじゃね?
要素のポインタを返すようなものがあってもいい気もするけど…
945 :
872 :2007/10/03(水) 21:05:00
あれだよ、おまいらの意見がウォルタンの目に留まるように、Wiki かなんか立ち上げてさ、 このスレを英語に逐次翻訳して、ウォルタンの巡回コースに追加させればいいんじゃね?
英語に逐次翻訳できるヤツがいるならそいつはそんなまだるっこしーことしないでメーリングリストに投げてるんじゃね
やっぱ翻訳は責任が伴うし投げっぱなしってわけにもいかんだろ 向こうから返答があったら日本語訳してこっちに貼り付けるのか?w
お前らが英語でここに書けばいいじゃん。
Eigo de Ok
with文の中で、withの括弧に与えてる値を貰う方法ってありますか? hoge=getMugamugaInstance(); with( hoge ){ val=100; vol=200; vel=300; fuga=hoge; } これを with( getMugamugaInstance() ){ val=100; vol=200; vel=300; fuga=/* ★ */; } て感じで書きたいのです
val=100; vol=200; vel=300; fuga=getMugamugaInstance();
hogeに自分自身を返すプロパティを追加するとか。
自分用のwindowsのフレームワーク作っててはまったこと。 switchのcase句を書き忘れてWM_DESTROYがgoto関係のラベル化してコンパイル通ったこと。 あー疲れた。。。
そんなんでいいのかよw
そんなんって? フレームワークは自分用だから結構チープですよ。あ、俺の腕もねぇ・・・。 えーっと、昔、C++で作ったやつをポートしてんです。 後処理がなくなってちょっと原本よりシンプルになりそうです。
投稿時刻見る限りは955に対するレスじゃないな
あ、ごめん。勘違いか。
Dの連想配列って範囲外指定すると例外飛ぶの? C++のマップは0返すからそのようにやってたんだけど、やっベー完成できねー。 ってか8割つくってから気づくなんて。。。Orz
>>962 0なんか返されたら困る場合が出てくるからな。
in演算子使うのが常套句。
たしかここで拾ったやつだけど、こんなの愛用してる。 TV get(TK, TV)(TV[TK] aa, TK key, TV _default = TV.init) { auto p = key in aa; return p != null ? *p : _default; }
in演算子ってそういう風につかうんですね。なるほど。
>>963 見てネットで探したけど引っかからなくて困ってました。
とりあえず、例外捕まえるように実装したんだけど、
やっぱ例外フリーのほうが精神的に良いのですが、なんとかなりそうですねぇ。
>>963 >>964 の人たち感謝!
if文の中だけで有効なシンボルvを介する書き方はよく使ってる int[string] aa; aa["hoge"] = 999; if (int* v = "hoge" in aa){ writefln(*v); }
ポインタ返すのは結構意表をつかれますねぇ。 理屈が良くわからないですけど。。。
bool返すと値を得るのにハッシュテーブルを二回引かないとだめになるからだろう。
>>966 それができてなぜ
with( auto hoge = getMugamugaInstance() ){
val=100;
vol=200;
vel=300;
fuga=hoge;
}
ができないのかね。。。
これができれば
>>951 の苦悩もある程度晴れるかと思うのだが。
やっぱ with は TemplateInstance とかもあるから面倒くさいのかな…?
俺は英語の勉強もかねて、バグの報告してたんだけど、 めんどくさくなってしまったというか、 なんというかで、最近サパーリですなぁ。 ウォルターたんにコメントもらえたりすると、 なんか嬉しいのでバグ気になるならどんどん、 報告してみたらいいのにと思うのでした。 英語なんて、正確じゃなくてもつたわりゃいいのよ。 伝わんないときもあったけど、大体通じてたように思ふ。 ちゃんとした、サンプルソースがあれば、英語は 半分くらいしか通じなくても、大丈夫。 ビビッてないで、報告すべし!!
さあどれ?w ・ビビってる ・英語アレルギー ・めんどくさい/ひまがない
ちょっと質問。 ファイルAに未実装の関数をあえて残しておいて、 ファイルBでその実装をしたいときってどうやればいいの? できればその際のモジュール宣言とかも教えてください。
973 :
972 :2007/10/05(金) 03:40:12
ねます〜。
また明日〜。
余裕があったら、
>>972 おねがいします〜。
extern
Visual D とかないのかよ。 使いやすいIDEがほしい。
VS 2005用のプラグインがあるよ まじで愛用してるんだが、バージョンアップしてくれないかなぁ・・・
>>975 VSじゃないけど、
Code Blocks、Dの設定回りがごちゃごちゃしてるけど、そこさえ終えれば結構快適
流れぶった切って悪いけど、以下のコードがdmd2.004で通らないんだが・・・ import std.stdio; void main() { string str = "hoge"; writefln("%s", str); } # dmd hoge # ./hoge Error: std.format formatArg これは2.003でも使っとけって事なのか?
とおるぽ
D:\>type d.d
import std.stdio;
void main() {
string str = "hoge";
writefln("%s", str);
}
D:\>dmd -run d
hoge
D:\>dmd -v
Digital Mars D Compiler v2.004
Copyright (c) 1999-2007 by Digital Mars written by Walter Bright
Documentation:
http://www.digitalmars.com/d/index.html
Linuxか Windowsなら通るぜ
Visual Dまだー? リアルタイムに赤線引いてくれるエディタまだー? 文字列mixinの中身まで面倒見てくれるIDEまだー?
それよか更新まだー?だろ そろそろでかいのがきそうじゃないか
スレ消費の方が早い
v2になってからバグでまくってるから、ちょっくら修正して欲しいな。
じゃあ次スレまだー?
IDEいらね
>>987 こういう奴がいるからD駄目駄目なんだよ
Visual Dまだー?
リアルタイムに赤線引いてくれるエディタまだー?
文字列mixinの中身まで面倒見てくれるIDEまだー?
まぁIDEイラネー派もいるだろうけど
俺もIDEマダー?派だな
DWTでポトペタ開発できるようになったらルンルン気分で書き捨てアプリ書くんだけどなぁ
>>990 次スレよろ
立ててくるか。
なにげにうめ
ume;
JmEditerでコード書いて、バッチファイルにドラッグアンドドロップでコンパイルって感じにしてる。(Windowsだよ。) 込み入った開発はしてないからまだ良いけど、統合IDEはほしいねぇ。
Dてメタプログラミングで書き方ちょっとミスると、
コンパイル時に無限ループでコンパイラが落ちたりするとか聞いたっけ。
IDE作るときに問題になったりしなかろうか。
あと亀。
>>930 サーセン、やっぱり関数型言語のひとつくらい覚えておくべきっすよね・・。
ていうか、関数型言語てそんなにいいもんでしょか。
どなたか埋めがてらに、その良さを力説してもらえないでしょか。
確かにLispは関数型言語ではあるんだけど。 Lispの良いところは文法が簡単なことじゃないかな! Cとかと違って!
>>996 文法が簡単過ぎる分関数名でだまされたときの痛みはひでぇんだよな〜。(とずいぶん昔の自分のコードにだまされた俺様)
>>995 関数型言語といってもいろいろあるから一概には言えないけど、Haskellを触ってみた感想としては、
<長所>
・共通の処理を関数でくくり出すことが、的確にできる。プログラムをぶった切ってやったって感じで結構気持ちがいい。
・処理の流れをデータに落とし込んで処理することができる。例えば、手続き型言語で乱数を扱うときはそのつど関数を呼ぶのに対して、Haskellでは乱数の無限リストを生成したりする。これの何がうれしいのかというと、複数の乱数をいじくるときに、
手続き型言語だと制御構文を使って無理やり目的のものを作らなきゃいけないのに対して、Haskellだとリストを扱う関数が使える。制御構文は使い回しがきかないから、毎回自力で書かないといけないが、リストを扱う関数は使い回しが効くから楽。
<短所>
・オブジェクトのようなもの(入れ子になったレコードを書き換え可能データとして保持したりとか)を扱うのがかなりめんどくさい。
・ちょっと遅い
総論としては、関数型言語が手続き型言語に比べて優れているかは、微妙な感じ。
関数型言語も手続き型言語もそれぞれに長所、短所があって、どちらが優れているかは、使う人が言語機能の何を重視するかで決まる気がする。
結局俺は、実行速度が要求されるアプリを作ることが多いのでDに戻ってきた。
lispを使い始めたころ (for (i 0 10) (print i)) って書きたいなって思ってマクロでforが簡単に作れたときは感動したな 遠い昔のことだが
留まることを知らないウォルターたんについていく我らはレミングス
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。