D言語 Part23
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2009/09/20(日) 19:48:04過去スレ、関連スレは >>2
■前スレ
http://pc12.2ch.net/test/read.cgi/tech/1245602321/
■本家
ttp://www.digitalmars.com/d/
ttp://www.kmonos.net/alang/d/ (和訳)
■コンパイラ
http://www.digitalmars.com/d/dcompiler.html (DMD, 本家)
http://dgcc.sourceforge.net/ (GDC, gccフロントエンド)
http://www.dsource.org/projects/ldc (LDC, バックエンドにLLVM)
■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://f17.aaa.livedoor.jp/~labamba/?D%B8%C0%B8%ECBOF (D言語BOF)
ttp://dsource.org/ (dsource)
ttp://tinyurl.com/candcpp2d2 (C/C++に疲れた人のD言語2.0)
ttp://www.kmonos.net/alang/wnd/ (わかったつもりになるD言語)
ttp://shinh.skr.jp/d/ (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか)
ttp://shoo.s20.xrea.com/shoo/programing (D言語とTangoの入門講座)
ttp://www.nicovideo.jp/mylist/4453698 (D言語で作られた芝ゲー niconico動画)
ttp://www.asahi-net.or.jp/~cs8k-cyu/ (ABA Games)
■ IDE
ttp://forums.codeblocks.org/index.php?board=20.0 (Code::Blocks)
ttp://www.dprogramming.com/entice.php (Entice Designer)
ttp://www.dsource.org/projects/descent (Descent)
ttp://www.dsource.org/projects/poseidon (Poseidon)
ttp://dronten.googlepages.com/dscite (DSciTE ※404)
0002デフォルトの名無しさん
2009/09/20(日) 19:48:51http://makimo.to:8000/cgi-bin/search/search.cgi?q=D%8C%BE%8C%EA&sf=2&all=on&view=table&shw=5000
その他関連スレ
バイナリをゲロる言語の魅力って何?
http://pc11.2ch.net/test/read.cgi/tech/1160869311/
Eclipse統合M28【Java/C/PHP/Ruby/Python/Perl】
http://pc12.2ch.net/test/read.cgi/tech/1247051216/
eclipseってそんなに良いか?【エクリプス】
http://pc11.2ch.net/test/read.cgi/tech/1099300344/
統合開発環境Eclipseプラグイン開発QA
http://pc11.2ch.net/test/read.cgi/tech/1081517094/
"Code of the Nerds" Digital Mars C/C++
http://pc11.2ch.net/test/read.cgi/tech/1044210976/
0003デフォルトの名無しさん
2009/09/20(日) 19:50:55- "C/C++に疲れた人のD言語"のURL更新 (2.0のほうに)
- 関連スレ更新
0004デフォルトの名無しさん
2009/09/20(日) 19:58:560005デフォルトの名無しさん
2009/09/20(日) 22:49:20乙
うぉるたんかわいいようぉるたん
0006デフォルトの名無しさん
2009/09/21(月) 03:29:320007デフォルトの名無しさん
2009/09/21(月) 22:34:310008デフォルトの名無しさん
2009/09/22(火) 01:52:480009デフォルトの名無しさん
2009/09/22(火) 20:50:010010デフォルトの名無しさん
2009/09/22(火) 21:42:180011デフォルトの名無しさん
2009/09/22(火) 21:54:580012デフォルトの名無しさん
2009/09/22(火) 22:39:510013デフォルトの名無しさん
2009/09/22(火) 22:47:47布教活動って?
0014デフォルトの名無しさん
2009/09/22(火) 23:50:010015デフォルトの名無しさん
2009/09/23(水) 00:19:300016デフォルトの名無しさん
2009/09/23(水) 01:31:07というかphobosのstd.fileでロックかけられないのかな。
0017デフォルトの名無しさん
2009/09/23(水) 04:11:260018デフォルトの名無しさん
2009/09/23(水) 08:56:41foeach(char[] s; din)
このchar[]がいまだにconst char[]あるいはstringにできなくて悶絶した
0019デフォルトの名無しさん
2009/09/23(水) 09:00:550020デフォルトの名無しさん
2009/09/23(水) 12:44:300021デフォルトの名無しさん
2009/09/23(水) 17:27:05そのうち無かったことにされそう
0022デフォルトの名無しさん
2009/09/23(水) 20:12:05コンテナにいろいろしたいんだけど、bind2ndみたいに叙述関数に引数を
渡すにはどうしたらいいんだろう。
0023デフォルトの名無しさん
2009/09/23(水) 20:16:33C++にも機能的に同等なbindが入って
bind1st, bind2ndあたりが非推奨になる予定なのも
覚えておくと良いよ。
0024デフォルトの名無しさん
2009/09/23(水) 20:34:30import std.algorithm, std.stdio;
bool less(int x, int y){
return x < y;
}
void main() {
int[] a = [1,2,7,3,5,4,6];
auto r = filter!((int z){return less(z, 4);})(a);
foreach(e; r) write(e, ",");
}
0025デフォルトの名無しさん
2009/09/23(水) 23:24:49Error: 4invalid UTF-8 sequence
引数なしや-helpならエラーは出ないんですが、
ファイル名(存在しないファイル名であっても)を入力すると上記のエラーが出ます。
何が原因なのでしょうか?
0026デフォルトの名無しさん
2009/09/23(水) 23:29:47・*.dファイルの中身にUTF-8意外の文字列が含まれている。→保存する際に文字コードを指定する
・環境変数に日本語が含まれている。→環境変数の書き換えが必要。
だったかね。対応は。
0027デフォルトの名無しさん
2009/09/23(水) 23:36:30>Error: 4invalid UTF-8 sequence
この4はなんなの?
0028デフォルトの名無しさん
2009/09/23(水) 23:48:080029デフォルトの名無しさん
2009/09/24(木) 00:13:35アンケートのお知らせです。お題は「D3になったら来てほしい機能は?」です。
締め切りまで残り1週間となりましたが投票数がさみしい状況となっています。
どうか皆様のご助力を頂けたらと思います。
0030デフォルトの名無しさん
2009/09/24(木) 00:59:22もっと早く告示すりゃ良かった予感
ところでこれってウォルたんに送る予定ある? 是非前回のように送ってほすぃ。
0031デフォルトの名無しさん
2009/09/24(木) 03:21:38レスthx
DのソースはUTF-8で保存、システムの環境変数のPathは日本語は含まれてない、
dmd2とdmのsc.iniをUTF-8で保存しなおして、もう一度やってみましたがエラー。
うーん、どこが間違っているのかな・・・。
budの引数に存在しないファイル名を渡しても同じエラーになるんですが、
これは環境変数の方でうまくいってないと見ていいんでしょうか?
0032デフォルトの名無しさん
2009/09/24(木) 12:07:37そんな経験ないけどなあ
budはpathさえ通っていれば動いてるし
0033デフォルトの名無しさん
2009/09/24(木) 12:13:110034デフォルトの名無しさん
2009/09/24(木) 12:15:01と書いたら
auto x() { return t; }
の意味になったりしないかな。
0035デフォルトの名無しさん
2009/09/24(木) 13:02:32代入文を宣言文と見なすと何がメリットあるんですか?
0036デフォルトの名無しさん
2009/09/24(木) 13:28:33文法上はどちらも定義。
0037デフォルトの名無しさん
2009/09/24(木) 20:31:050038デフォルトの名無しさん
2009/09/24(木) 21:57:59budもdsssも使わずに、dmdだけでやってみたら?
0039デフォルトの名無しさん
2009/09/24(木) 22:07:06引数なしでヘルプを表示するのは、エラーなくできるのでpathは通ってるとは思うのですが謎です。
>>38
今まで直接dmdを起動していました。
これなら問題なくコンパイルできます。
0040デフォルトの名無しさん
2009/09/25(金) 20:37:06なんだろね
ほんとにBOMなのかな
0041デフォルトの名無しさん
2009/09/25(金) 21:03:26dmdを置いてあるパスに日本語が混じっている
ソースファイルを置いてあるパスに日本語が混じっている
環境変数(Path以外の)に日本語が混じっている
sc.iniに日本語が混じっている
…ここまで調べて原因が判らなかったら素直にレスポンスファイルかmakefile書いた方がいいんじゃないかな。
0042デフォルトの名無しさん
2009/09/25(金) 21:42:280043デフォルトの名無しさん
2009/09/25(金) 21:44:51でも一番新しい更新でdmdのパスにスペース含められるようになった(らしい)よ
0044デフォルトの名無しさん
2009/09/25(金) 23:33:44それもようやくだよなあw
何年越しだろう
0045デフォルトの名無しさん
2009/09/26(土) 01:10:48> ユーザー名が日本語
これが原因でした。
日本語のユーザー名は、PC使ってて度々問題になってるのにすっかり忘れていました。
ユーザー名に日本語使わなければよかった・・・。
0046デフォルトの名無しさん
2009/09/26(土) 03:41:08mixin を書いたところの __FILE__ 情報とかが出力されて欲しいんだけど。
今はこのテンプレートを書いたファイルの名前が出てしまう。
D2 では使える?
template CompileMsg(string MSG)
{
pragma(msg, __FILE__ ~ "(" ~ __LINE__.stringof[0..$-1] ~ "): " ~ MSG);
}
0047デフォルトの名無しさん
2009/09/26(土) 04:30:28{
pragma(msg, FILE ~ "(" ~ LINE.stringof[0..$-1] ~ "): " ~ MSG);
}
0049デフォルトの名無しさん
2009/09/26(土) 15:29:540050デフォルトの名無しさん
2009/09/26(土) 15:46:53分からない場合ってあるのかな
005149
2009/09/26(土) 16:55:35これをもっとスマートにできないかなぁということ。
0052デフォルトの名無しさん
2009/09/26(土) 17:52:32昔は出来た。ある時から出来なくなった。
0054デフォルトの名無しさん
2009/09/26(土) 18:41:29×>>51 ○>>52
0055デフォルトの名無しさん
2009/09/26(土) 18:43:23昔使えたのが偶然だと思うよ。
使えなくなったのは型のsemanticが走る順序の変更とかの影響だと思う。
0056デフォルトの名無しさん
2009/09/26(土) 19:38:250057デフォルトの名無しさん
2009/09/26(土) 19:47:030058デフォルトの名無しさん
2009/09/26(土) 22:09:280059デフォルトの名無しさん
2009/09/27(日) 03:25:35typedef F function(int) G;
typedef G function(int) F;
F f(int x) {
writeln(x);
return cast(typeof(return))&f;
}
void main() {
f(1)(2)(3);
}
0060デフォルトの名無しさん
2009/09/27(日) 03:26:27typedef G function(int) F;
のほうがよかったかも。
006149
2009/09/27(日) 04:02:28import std.stdio;
struct Func
{
Func delegate() dg;
alias dg this;
Func opCall() { return dg(); }
}
void main()
{
int a=0;
Func fn1, fn2;
fn1 = {a++; writefln("1 - %d", a); return fn2;};
fn2 = {a++; writefln("2 - %d", a); return fn1;};
Func fn = fn1;
while (a < 10) fn = fn();
}
0062デフォルトの名無しさん
2009/09/27(日) 14:38:15簡単なサンプルで試してもみても、phobos.libやSNN.libでエラーが出てしまいます。
0063デフォルトの名無しさん
2009/09/28(月) 00:32:24今のDだと以下のような制限がある
map!("a < 2")(arr) //できる
int n = 2;
map!("a < n")(arr) //できない
テンプレートが使用された周りのシンボルを参照できない
→新しい予約語__OUTER__を導入する
// 名前は__SCOPE__とか__FRAME__とかでもいいかも
template map(string cmp, alias o=__OUTER__){ ... }
o.n か mixin("o." ~ "n") で mapが使われたスコープのnを参照できる
0064デフォルトの名無しさん
2009/09/28(月) 00:33:39template loop(string code){
...
alias loop = mixin(ResultCode); //mixin式をテンプレートの結果にできる
}
int sum;
loop!q{|x; 1...10|
sum += x;
};
0065デフォルトの名無しさん
2009/09/28(月) 00:43:260066デフォルトの名無しさん
2009/09/28(月) 02:20:330067デフォルトの名無しさん
2009/09/28(月) 02:29:36Lispのコンパイラマクロと何が違うのか分からなくなってくる
0068デフォルトの名無しさん
2009/09/28(月) 03:52:260069デフォルトの名無しさん
2009/09/28(月) 05:14:01http://www.dsource.org/projects/dmd/timeline
…まえからdmdのリポジトリなんて見れたっけ。
0070デフォルトの名無しさん
2009/09/28(月) 05:20:100071デフォルトの名無しさん
2009/09/28(月) 18:40:13implement contract inheritance
なにこれ
0072デフォルトの名無しさん
2009/09/28(月) 18:50:000073デフォルトの名無しさん
2009/09/28(月) 18:52:070074デフォルトの名無しさん
2009/09/28(月) 22:07:59<pre>
class SubThread: Thread
{
alias void delegate() Proc;
private static
{
shared List!(Proc) m_queue;
}
static this() { m_queue = new shared(List!(Proc)); }
this() { super( &run ); }
private void run()
{
while( true )
{
if( m_queue.size > 0 )
{
m_queue.front();
m_queue.popFront();
}
}
}
}
</pre>
sharedって何なのでしょうか・・・
0075デフォルトの名無しさん
2009/09/28(月) 23:08:51Listの実装とかSubThreadで何をしようとしているのかが全く分からなくてエスパーできない。
やろうとしていることと、詰んだ時の状況を詳しく。
0076デフォルトの名無しさん
2009/09/28(月) 23:22:58えっと・・・とりあえずエラーはこんな感じでした。
D_thread.d(45): Error: function D_list.List!(void delegate()).List.size () is not callable using argument types ()
D_thread.d(47): Error: function D_list.List!(void delegate()).List.front () is not callable using argument types () shared
D_thread.d(48): Error: function D_list.List!(void delegate()).List.popFront () is not callable using argument types () shared
Listのsizeはデータの個数、frontは先頭のデータ、popFrontは先頭データ削除です。
やろうとしていることの詳細とまでは厳しいですが(汗)
SubThreadはメイン・スレッドと並行して走らせるスレッドでして、
ThreadManagerクラスによって実行が開始されます。
そしてm_queueにはメイン・スレッドと並行して処理したい関数を追加していくわけですが、
この追加関数はSubThreadに用意してThreadManagerから呼び出すつもりです。
解りにくくてすみません(;^^
0077デフォルトの名無しさん
2009/09/28(月) 23:52:42sharedオブジェクトから呼び出すことができない。
というエラーだな。
Dの型システムが、Listにマルチスレッドな場所からpushとかpopとかすると、
マルチスレッドに対応していない関数だから危険ですよ、と教えてくれている。
ttp://d.hatena.ne.jp/haru-s/20090925/1253864045
↑ここでそのエラー表示わからんという愚痴が見れて
ttp://dusers.dip.jp/modules/forum/index.php?topic_id=36#post_id118
↑ここでshared型とshared関数の関係についての愚痴が見れる
どうすればいいかは…スマンがよくわからない。
やりたいことは、ThreadPoolみたいなもんかな?
0078デフォルトの名無しさん
2009/09/28(月) 23:59:24shared修飾オブジェクトaのメンバ関数は
getterをconst memberに
setterをsynchronized memberにしてみて
0079デフォルトの名無しさん
2009/09/29(火) 00:08:52ThreadPoolみたいなスレッドの再利用を考えたものの、
どうもcore.threadにそれらしい機能が見つからなかったので(;^^
仕方なくメイン・スレッドが動いている間は常に動いているようなスレッドを考えたわけです。
それにしても、Listをsharedに対応させれば今回の件は解決なのでしょうか・・・
0080デフォルトの名無しさん
2009/09/29(火) 00:15:12Listのメンバをsharedに変えたら大量にエラーが・・・
他の手を考えます。
回答ありがとうございました!
0081デフォルトの名無しさん
2009/09/29(火) 00:27:07- List!(T)が同期未考慮だから、shared(List!(T))周りでエラーがでる
- List!(T)で同期考慮しろ。sharedメンバ関数やsynchronizedメンバ関数を使え
- もしくは使う側で同期考慮も可能。その場合はsharedの代わりに__gshared使え
0082デフォルトの名無しさん
2009/09/29(火) 00:52:53普通のオブジェクトにしたい時にpopとかpushとかできなくなる。
Listとは分けて新しく作った方がいいかも。
0083デフォルトの名無しさん
2009/09/29(火) 00:54:11sharedから__gsharedに変えたら動いたのですが、
これじゃ複数のスレッドで共有するという目的は果たせませんか?
すみません、sharedとかよく解ってないもので・・・
0084デフォルトの名無しさん
2009/09/29(火) 00:57:20見落としがあって、1週間掛けて想定外のバグに悩まされても泣かないこと。
0085デフォルトの名無しさん
2009/09/29(火) 01:06:59そうですね。。。
同期を考慮した簡易リストクラスを作ることにしました。
0086デフォルトの名無しさん
2009/09/29(火) 01:07:39まずマルチスレッドの基礎を勉強した方が良い。
…でもD言語前提のはない悪寒。immutableとかsynchronizedとかはJava由来、mutexとかtlsとかCは由来、sharedは独自だから上手く学ぶのは難しいかもな。
0087デフォルトの名無しさん
2009/09/29(火) 01:10:21mutexとかtlsとかCは由来→mutexとかtlsとかはC由来
0088デフォルトの名無しさん
2009/09/29(火) 01:31:46ですねorz
思ってたよりマルチスレッドは敷居が高いようです。
shared以外は理解しているつもりなのですが、
sharedに関する情報が少ない・・・
とりあえず、__gsharedはなんか違うということが解りました(;^^
sharedで頑張ります。
0089デフォルトの名無しさん
2009/09/29(火) 01:46:59- Javaのwaitsetに当たるものの代替実装
- メモリバリアとアトミック命令
- リングバッファ、RCU、デッカーのアルゴリズム
- rwlock
- spin lock (adaptive lockより時代遅れ)
- adaptive lock (効率的な実装はスケジューラ依存(ロックを保持しているプロセスが他のcpuで動いてるかの情報が必要)なのでユーザー空間での実装は無理。preempt対応(ユーザー空間プログラムはpreemptなので)で仮想メモリにフラグを
置くようにしたadaptive lockのAPIをユーザー空間に提供しているOSがあるかは知らん)
0090デフォルトの名無しさん
2009/09/29(火) 19:16:202. ネストした構造体からクラスのメンバにアクセス
これがコンパイルエラーになるのが納得いかない
納得いかないけどドキュメント見るとネスト構造体を「関数内」に定義できるとしか書いてないんだよな…
0091デフォルトの名無しさん
2009/09/29(火) 19:54:28内部構造体は使う周囲のシンボルを
テンプレートのaliasに取るだけのテンプレート構造体らしい
どこで読んだか忘れたけどね…
内部クラスは外部クラスのインスタンスから生成するけど、
構造体は外のインスタンス特定できないから仕方ないんじゃね?
それとも
class Hoge
{
class Huga { }
}
Hoge foo = new Hoge;
Huga bar = obj.new Huga;
みたいな構文が構造体用に存在するのかな?w
構造体を普通にクラスの中に書いたら、束縛されてる範囲がアレなだけで
同じファイルに書いた以上の意味はないんじゃね?
0092デフォルトの名無しさん
2009/09/29(火) 20:11:13なるほど、構造体のドキュメントの最後の方に書いてあったのはそれだったのね
微妙に不便…
0093デフォルトの名無しさん
2009/09/29(火) 20:34:59class C {
A a = new A;
}
みたいなのはいつになったら出来るようになるんだろうか
コンストラクタに書けばいいじゃん、って事なんだろうけど
mixinして使うプロパティみたいなテンプレートを書いてると初期化の所で詰むんだよな
せめて
dynamic this() {
a = new A;
}
とか書いとくとコンストラクタに自動で組み入れてくれるとか
0094デフォルトの名無しさん
2009/09/29(火) 21:59:46{
scope a = new A;
}
むしろこれがほしい
0095デフォルトの名無しさん
2009/09/30(水) 17:16:18スレッドセーフなライブラリに加えて,
スレッドアンセーフなライブラリも欲しいときは確かにあるかもしれないけど・・・
わざわざ同じ機能のものを両方提供しているメジャーなライブラリなんてあるんですかね
(boostとか他の言語のライブラリ含む)
0096デフォルトの名無しさん
2009/09/30(水) 17:28:590097デフォルトの名無しさん
2009/09/30(水) 17:53:29そうなんだ
Dならスレッドセーフかアンセーフかを
コンパイル時に切り替えて使うようなクラスライブラリは簡単に作れそうだね
Dらしくなくてもいいならポリシー化してやればいいんだろうきっと
0098デフォルトの名無しさん
2009/09/30(水) 18:33:08GC使わない関数からはGC使う関数を呼べなかったり、
GC使わないクラス内ではGC使うオブジェクトを変数に使えなかったり
0099デフォルトの名無しさん
2009/09/30(水) 18:37:27>コンパイル時に切り替えて
いや、利用側がそのクラス/構造体をマルチスレッド共有するかどうかによってスレッドセーフのを使うかアンセーフのを使うか選べるようにするのが正しいと思うが
そういやshared型からconst型への暗黙の変換ってあったっけか。今試せないので分からんが、これ無いときついと思う。
0100デフォルトの名無しさん
2009/09/30(水) 18:51:47なんできついの?
0101デフォルトの名無しさん
2009/09/30(水) 19:09:02tls・shared・immutableが同時に扱える型が無いと、全部対応させる関数の引数のconst shared/tlsもしくはshared/const分けが必要になり、表現力が狭まり複雑になるから。
んでその型の役目は(俺が何か見落としてない限り)constに負わせるのが実装的に一番良いと思うから。
0102デフォルトの名無しさん
2009/09/30(水) 19:38:18const関数はかならずスレッドセーフにしなければいけないってのもなぁ…
010399=101
2009/09/30(水) 19:55:34そんなことないはず。
スレッドセーフになってるものをスレッドセーフとして扱わない(shared→const)って話で。
010499=101
2009/09/30(水) 20:08:07どういう実装法が良いんだろ…。
0105デフォルトの名無しさん
2009/09/30(水) 20:36:40みたいな手法とconstは相性が悪い
というか両立不能
lazyフィールドとか出来ないかな
0107>>95=>>97
2009/09/30(水) 21:48:241つのたたき台としてだが・・・
下がスレッドセーフなのはsyncronizedのおかげなので
class A{
private int v;
public const int get() return v; }
public synchronized void set(int i) { v = i; }
}
auto a = new A;
a.set(999);//error
auto sa = new shared(A);
sa.set(999);// ok
shared型でなくてもsynchronized関数を呼び出せるようにする修飾子を加えるだけでいいはず
auto usa = new __threadUnsafe(A);
usa.set(999);// ok
0108>>95=>>97
2009/09/30(水) 22:08:53import std.stdio;
class X
{
const int f() {
writeln("const int f()");
return 1;
}
void f(int i) {
writeln("void f(int i)");
}
synchronized void f(int i) { // synchronized でオーバーロード
writeln("synchronized void f(int i)");
}
}
void main()
{
auto b = new X;
b.f = 10;
int s = b.f;
auto a = new shared(X);
a.f = 10; // synchronized メンバが呼ばれる
int r = a.f;
}
実装を各関数で共有したい場合は
別にprotected/privateメンバ関数を用意して両方から呼び出せばいいでしょう
あとは >>101 が言うようにこれ以上の支援をどうするか
0109デフォルトの名無しさん
2009/09/30(水) 22:17:110111デフォルトの名無しさん
2009/09/30(水) 22:20:34でも、オーバーロード規則ではthisポインタの型が違うからオーバーロードできる、ってなるっぽいね。
0112デフォルトの名無しさん
2009/09/30(水) 22:30:34納得した
0113デフォルトの名無しさん
2009/09/30(水) 23:20:45>派生クラスの関数で、基底クラスの関数と名前と引数の同じものは、 基底の関数を上書きします
thisポインタも引数と考えるならsharedとかconstとかでオーバーライドできないはず…?(なのに実際はできる…バグ?)
0114デフォルトの名無しさん
2009/09/30(水) 23:55:48is (typeof(new MyClass))がfalseになるせいだったんだけどそこを特定する手懸りがないから困る
0115デフォルトの名無しさん
2009/10/01(木) 02:38:58http://tinyurl.com/yc98z2e
1位(5票): リフレクション
1位(5票): フリー関数をメンバ関数のように使える機能
3位(4票): macro
4位(3票): メモリバリア&アトミック命令
5位(2票): 引数のenum名省略
5位(2票): D言語によるD言語の実装
5位(2票): ガベージコレクション使用選択
5位(2票): Windowsの標準出力のマルチバイト対応
9位(1票): ランタイムアセンブラ&コンパイラ
9位(1票): PEG用構文&コンパイラタイムコンパイラコンパイラ
9位(1票): Reactive Programming
9位(1票): std.typecons.Tuple相当をSML#のように使える機能
9位(1票): Multi-Return Function Call
9位(1票): 使いやすい&&わかりやすい構造体リテラル
9位(1票): 構造体のstatic opCallの撤廃
という結果となりました。
皆様のご協力感謝いたします。また、これら項目に関してより具体的な意見が出ましたら、
公式へのフィードバックも行おうかと考えています。
今月もアンケートがありますので、またよろしければご回答ください。
http://dusers.dip.jp/modules/forum/index.php?topic_id=37#post_id126
0116デフォルトの名無しさん
2009/10/01(木) 05:09:520117デフォルトの名無しさん
2009/10/01(木) 08:30:07synchronizedは書けない・・・なんでやねん
0118デフォルトの名無しさん
2009/10/01(木) 08:54:10しかしあまりにも票数が少なすぎる
0119デフォルトの名無しさん
2009/10/01(木) 09:49:57仮に一人二票で16人とするとこのスレずっと張り付いてる人数的に妥当な気もちょっとするw
0120デフォルトの名無しさん
2009/10/01(木) 10:17:250121デフォルトの名無しさん
2009/10/01(木) 13:39:500122デフォルトの名無しさん
2009/10/01(木) 13:57:11チューリングマシン乙
0123デフォルトの名無しさん
2009/10/01(木) 19:24:080124デフォルトの名無しさん
2009/10/01(木) 20:05:09コンテナがconstな時のopApplyも定義しようとしたらなんだか物凄い泥沼にはまった
int opApply(int delegate(ref C));
int opApply(int delegate(ref const C)) const;
だけで正常に動いてくれたのむ
0125デフォルトの名無しさん
2009/10/02(金) 08:08:040126デフォルトの名無しさん
2009/10/02(金) 08:32:450127デフォルトの名無しさん
2009/10/02(金) 09:28:50http://www.gnu.org/software/libiconv/
これをDLして使う事になりますか?
D言語の標準にはないんですね。
0128デフォルトの名無しさん
2009/10/02(金) 14:27:360129デフォルトの名無しさん
2009/10/02(金) 16:36:12末尾呼び出し最適化をするのはバックエンドだから、
結果的に末尾コールになってたらジャンプに置き換えられると思う。
思うだけ。
0130デフォルトの名無しさん
2009/10/02(金) 18:05:13std.windows.charset.toMBSz()じゃダメなの?
0131デフォルトの名無しさん
2009/10/02(金) 20:39:090132デフォルトの名無しさん
2009/10/02(金) 22:05:05ICUは著作権表示の必要があるっぽいし…
そういうのでないとPhobosには採り入れられないんじゃないかな?
0133デフォルトの名無しさん
2009/10/03(土) 02:29:110134デフォルトの名無しさん
2009/10/03(土) 02:36:07俺が前に書いたのがあるからstd.encodingのインターフェイスが確定したら投げてみるわ
0135デフォルトの名無しさん
2009/10/03(土) 03:36:27まさにこういうのが欲しかったです。
公式にドキュメントまでありますね。見落としてました。
0136デフォルトの名無しさん
2009/10/03(土) 08:58:09std.encodingは各自が拡張して使うもんなんじゃないかな?
phobosに投げても切りがないから一緒にしてくれないような気がして
0137デフォルトの名無しさん
2009/10/03(土) 10:32:29^!F5::
Clipboard =
Send ^c
ClipWait 2
FileDelete C:\hoge\hoge.d
FileAppend %Clipboard%, C:\hoge\hoge.d
Run run.bat, C:\hoge
return
---- C:\hoge\run.bat
type hoge.d
nkf -w hoge.d > hogeutf.d
dmd -run hogeutf.d | nkf -s
pause
0138デフォルトの名無しさん
2009/10/03(土) 11:59:44「実用的」をキーワードにゴリ押ししてみるとか
そして「こっち英語圏だからイラネーヨ」とか言われる
0139デフォルトの名無しさん
2009/10/03(土) 15:32:41テキストかishで配布
クリップボード経由で導入
というのを思いついた
0140デフォルトの名無しさん
2009/10/03(土) 16:11:38というかそれをさらに簡略化しようとするとdsssになるのでは
0141デフォルトの名無しさん
2009/10/03(土) 16:19:120142デフォルトの名無しさん
2009/10/03(土) 22:26:05これを組み込めば完璧だな
0143デフォルトの名無しさん
2009/10/03(土) 22:35:530144デフォルトの名無しさん
2009/10/04(日) 10:54:35こうなってくるとdmdには標準入力にも対応して欲しいな
0145デフォルトの名無しさん
2009/10/04(日) 18:48:43http://www.dsource.org/projects/dmd/changeset/200
とのことだけど、俺には何が変わったのかさっぱりだ…
結局今月のリリースまで待つしか…
0146デフォルトの名無しさん
2009/10/04(日) 23:52:23D1で、オーバーロードされている関数のアドレスを取ったらエラーにする変更のようだ。
0147デフォルトの名無しさん
2009/10/05(月) 03:47:37dmd con
0148デフォルトの名無しさん
2009/10/05(月) 12:59:16PhobosのChangeLogの差分を見たほうが分かりやすい。
http://www.dsource.org/projects/phobos/changeset/1284
0149デフォルトの名無しさん
2009/10/05(月) 13:48:05なるほど、これは目からうろこだ。
PhobosがBoost 1.0 Lisenceになるとかあるけど、どういうライセンスなのか調べてもよくわからなかった。
Must be simple to read and understand. とかなにこれ?
0150デフォルトの名無しさん
2009/10/05(月) 15:07:190151デフォルトの名無しさん
2009/10/05(月) 17:17:52「gdbでスタックトレイスが動くようになった」とあるけど、
私の環境ではそもそも行番号が取れないんだよ... orz
0152デフォルトの名無しさん
2009/10/05(月) 17:39:49http://twitter.com/WalterBright/status/4623634220
0153デフォルトの名無しさん
2009/10/05(月) 19:01:38とりあえず2.033だ!ワーイ
0154デフォルトの名無しさん
2009/10/05(月) 19:03:40sharedも放置だし、dflも使えないままだし…
循環参照してるようなimportがダメなのは仕様なのか?
0155デフォルトの名無しさん
2009/10/05(月) 19:04:140156デフォルトの名無しさん
2009/10/05(月) 19:15:56マジで?どこに書いてある?
0157デフォルトの名無しさん
2009/10/05(月) 19:21:090158デフォルトの名無しさん
2009/10/05(月) 19:52:070159デフォルトの名無しさん
2009/10/05(月) 20:04:48import宣言の循環(モジュールがお互いをimportしあう、循環依存)は、 どちらか一方が静的構築の不要なモジュールであれば、問題ありません。 双方とも静的構築が必要であった場合は、 実行時例外が発生します。
0160デフォルトの名無しさん
2009/10/05(月) 20:08:060161デフォルトの名無しさん
2009/10/05(月) 21:36:100162デフォルトの名無しさん
2009/10/05(月) 23:11:48意味論解析が早すぎるのが原因。
関数のデフォルトパラメタで循環importに引っかかるとか罠だった
パッチあて作業はこちら参照
ttp://d.puremagic.com/issues/show_bug.cgi?id=3301
0163デフォルトの名無しさん
2009/10/05(月) 23:24:30有志によるパッチあて作業とかカッコイイw
0164デフォルトの名無しさん
2009/10/05(月) 23:28:47ウォルたんの心遣い
0165デフォルトの名無しさん
2009/10/05(月) 23:32:400166デフォルトの名無しさん
2009/10/05(月) 23:35:340167デフォルトの名無しさん
2009/10/06(火) 00:08:350168デフォルトの名無しさん
2009/10/06(火) 00:15:25昔C++使ってたからか、気持ち悪く感じるんだよね…
0169デフォルトの名無しさん
2009/10/06(火) 00:16:46いつまでも待つことになるぞw
0170デフォルトの名無しさん
2009/10/06(火) 00:20:17× 循環参照
○ 循環import
0171デフォルトの名無しさん
2009/10/06(火) 11:13:10OSによっては動かないらしい
内部からdmdを呼ぶ標準入出力対応のdmd_con作るか
0172デフォルトの名無しさん
2009/10/06(火) 15:29:59buf.length = 1000000; //1桁小さければエラーは発生しない
普通のexeなら問題ないのですが、DLLの場合、上記のコードは実行時に落ちます。
ここから考えられる原因は何でしょうか?
0173デフォルトの名無しさん
2009/10/06(火) 18:00:210174デフォルトの名無しさん
2009/10/06(火) 21:01:33どうもです。
C++でこういう事が起きたことないんですが謎です。
ふと思ったのは、DLLのみエラーが発生するという事は、DllMainでの処理が問題なのか・・・?
0175デフォルトの名無しさん
2009/10/06(火) 23:16:450176デフォルトの名無しさん
2009/10/07(水) 00:13:370177デフォルトの名無しさん
2009/10/07(水) 00:37:300178177
2009/10/07(水) 00:38:49std.cover.setDestDir
0179デフォルトの名無しさん
2009/10/07(水) 03:07:31dmd2\src\druntime\src\compiler\dmd\cover.d
あたりにそれらしきコードを発見
extern(C) dmd_coverSourcePath(string);
とかすればできるかも?(試してないけど)
パッケージ名が違ってモジュール名が同じ時って対処しようがないのかね。
…と思ってちょっと探したら同じファイルに臭いところが…
FILE* flst = fopen( (addExt( baseName( c.filename ), "lst\0" )).ptr, "wb" );
baseNameとか嫌な香りがぷんぷんするぜ…
0181デフォルトの名無しさん
2009/10/07(水) 12:48:32がんばった結果をご報告
試したのはTangoの方でだけど、ランタイムライブラリを書き換えることで動作を変えることができた。
char[] getCovFileName( char[] f )
{
auto fname = f.dup;
foreach (ref c; fname)
{
if (c == '\\') c = '.';
else if (c == '/') c = '.';
else if (c == ':') c = '.';
}
if (fname.length >= 2 &&
(fname[$-2..$] == ".d" || fname[$-2..$] == ".D") )
{
fname = fname[0..$-2];
}
return appendFN(dstpath, baseName(fname ~ ".lst")) ~ "\0";
}
こんな感じのをcover.dのどこかに加えて、static ~this()内で、
if( !readFile( getCovFileName( c.filename ), lstbuf ) )
とか、
FILE* flst = fopen( getCovFileName( c.filename ).ptr, "wb" );
という感じにlstファイルを扱うっぽい部分を書き換える。
驚くべきことに、こう書き変えない限りdmd_coverDestPathで指定した出力先のパスも無視されるみたいだ。
ちなみに、D2の方だと型がstringとかになるので、適宜castすると良いと思われ
0182デフォルトの名無しさん
2009/10/07(水) 22:28:21__LINE__をどうやったら簡潔に文字列にできますか?
できればstd.conv含め外部のシンボルをimportしたくないんですけど…
自前でprivateなitoaテンプレート書くのがベストですか?
0183デフォルトの名無しさん
2009/10/07(水) 22:43:59自前で書くしかないかと
0184デフォルトの名無しさん
2009/10/07(水) 23:25:550185デフォルトの名無しさん
2009/10/08(木) 01:39:16std.metastrings? 使いたくないならしかたないけど
0186デフォルトの名無しさん
2009/10/08(木) 04:35:580187デフォルトの名無しさん
2009/10/08(木) 07:07:190188デフォルトの名無しさん
2009/10/08(木) 07:11:180189デフォルトの名無しさん
2009/10/08(木) 13:10:48import をいじるとクラッシュしたりしなかったり・・・。
どれが循環してるか調べる方法があればいいんだけど。
0190デフォルトの名無しさん
2009/10/08(木) 19:45:24だがその例外でどこが循環してるのかわからないのはどういうことだ
0191189
2009/10/08(木) 23:25:31flectioned をインポートするとクラッシュするように
なってしまった。。。
ひとまず外しておくか。
だいぶ時間を無駄にしてしまった・・・。
0192デフォルトの名無しさん
2009/10/08(木) 23:39:53svnのリポジトリではもう使えるようになってるみたい
0194デフォルトの名無しさん
2009/10/09(金) 00:13:290196デフォルトの名無しさん
2009/10/09(金) 02:46:060197デフォルトの名無しさん
2009/10/10(土) 01:23:09あったこれだ
http://codepad.org/OSyr9CVb
0198デフォルトの名無しさん
2009/10/10(土) 01:32:250199デフォルトの名無しさん
2009/10/10(土) 03:17:240200デフォルトの名無しさん
2009/10/10(土) 10:29:44Makefileは/でないとうまくいかない部分が、dmdは\でないとうまくいかない部分があるんですけど、
どっちかに統一して書く方法はないですかね?
0201デフォルトの名無しさん
2009/10/10(土) 10:49:450202デフォルトの名無しさん
2009/10/10(土) 11:43:20ちゃんと使わないとなあ
0203デフォルトの名無しさん
2009/10/10(土) 14:06:45簡単には解決できないんですね。
\と/の問題とかスペースが含まれる時の問題とか日本語とか含まれる時の問題とか
こういうの嫌だなぁ。
0204デフォルトの名無しさん
2009/10/10(土) 14:23:14allMembersとかで関数の名前は取れるんだけど
それをmixinする事ってできる?
0205デフォルトの名無しさん
2009/10/10(土) 14:45:48俺は$(subst /,\,PATH)ってやってる。gmake。
0206デフォルトの名無しさん
2009/10/10(土) 15:03:400207デフォルトの名無しさん
2009/10/10(土) 15:26:04\区切りパスが普通に使える
0208デフォルトの名無しさん
2009/10/10(土) 16:08:160209デフォルトの名無しさん
2009/10/10(土) 17:13:57mingw32-makeを使っているので基本は\が使えるのですが、
$(wildcard $(dir)\*.d)
とやった時などに\じゃうまくいかないです。
こういう部分だけ/を使えば、まあなんとかなるのですが、\と/が混ざっているのがいつかハマりそうで気持ち悪いです。
0210デフォルトの名無しさん
2009/10/11(日) 02:53:30opDot使って配列に転送するとしたらキモすぎるんだけど…
これだと配列使ってないと転送もクソもないし…
最近マルチスレッド周りはsharedでこけまくるし…
うぉるたんなんとかしてくれー!
0211デフォルトの名無しさん
2009/10/11(日) 11:11:27書けますか?
例えば
mixin GenFuncs!("Hoge", "Huga", "Test");
ってやると
void HogeFunc(){}
void HugaFunc(){}
void TestFunc(){}
などと定義される感じです。
0212211
2009/10/11(日) 11:16:23doFunc!("Hogee");
と書くとコンパイラさんに
HogeeFunc なんてねぇよ! HogeFunc, HugaFunc, TestFunc の
どれかを使ってくれ!
と手取り足取り教えてもらえるようにできないかなぁと
思ってます。
こうすると定義したソースをいちいち見に行かなくても
使える関数が分かるので楽かなと・・・。
0213デフォルトの名無しさん
2009/10/11(日) 12:00:33doFuncを特殊化(あるいは,static ifで分岐)するのじゃいかんの。
0214211
2009/10/11(日) 12:15:10そうですね、それでもいいんですが、出来れば一般化して
テンプレートとして定義できれば、ライブラリ化っぽく
できるかなぁと思ってまして。
テンプレートに文字列を複数渡せて、
それらを巡る static for みたいなのが使えれば
キレイに書けるんですが・・・。
0215デフォルトの名無しさん
2009/10/11(日) 12:57:55template GenFuncs(string f, Fs...) {
// define function f
mixin GenFuncs!Fs;
}
0216デフォルトの名無しさん
2009/10/11(日) 13:00:540217デフォルトの名無しさん
2009/10/11(日) 14:01:580218デフォルトの名無しさん
2009/10/11(日) 14:22:370219デフォルトの名無しさん
2009/10/11(日) 14:29:220220デフォルトの名無しさん
2009/10/11(日) 14:31:100221211
2009/10/11(日) 16:18:50ありがとうございます!できました。
こんな感じ。
template GenFuncs(string N)
{
mixin(` N を使って関数定義 `);
}
template GenFuncs(string N, Ns...)
{
mixin GenFuncs!(N);
mixin GenFuncs!(NS);
}
0222デフォルトの名無しさん
2009/10/11(日) 16:24:000223デフォルトの名無しさん
2009/10/11(日) 16:25:450225デフォルトの名無しさん
2009/10/11(日) 16:32:170226デフォルトの名無しさん
2009/10/11(日) 20:09:10extern (C) export void hoge(char* buffer)
こんな感じでCでアロケートされたメモリが渡された時、このメモリに対してGCは関与するのでしょうか?
0227デフォルトの名無しさん
2009/10/11(日) 20:19:26GC管理下の領域にそのポインタをコピーしたら、
そこから辿れる領域は使用中とマークされるんじゃないかな
0228デフォルトの名無しさん
2009/10/11(日) 20:25:20されない
0229デフォルトの名無しさん
2009/10/11(日) 20:42:07一つは、 ガベージコレクタで管理されたメモリを指すもの、もう一つは、そうでないものです。
後者の例としては、C の malloc() を呼んで作られたポインタや、 C のライブラリが返すポインタ、 あるいは静的データやスタックへのポインタなどがあります。
これらのポインタに対しては、Cで合法な操作は全て実行できます。
Dでnewした=GCが割り当てた=GCが管理している。
それ以外=GCは関知しない。
のかな。
0230デフォルトの名無しさん
2009/10/11(日) 20:45:46そう。
0231デフォルトの名無しさん
2009/10/11(日) 20:48:00レスありがとうございます。
Dでnewしたメモリだけが対象という事なら分かりやすいですね。
0232デフォルトの名無しさん
2009/10/12(月) 12:39:54DLL内で大きなメモリを確保しようとすると落ちます。
どうもトータルで1MBいったあたりで落ちるようです。
mallocを使えば1MB以上でも落ちません。
トータル1MBを超えるとGCが動作しだすというところが落ちる引き金になっている気がします。
exeの場合なら正常、DLLの場合に落ちるという事はDllMainでのGCの初期化がちゃんとできてないという事でしょうか?
http://www.kmonos.net/alang/d/2.0/dll.html
DllMainは、ここの最初の例をほぼそのままコピペしました(g_hInstの行を除く)。
どうすれば落ちなくなるのでしょうか?
0233デフォルトの名無しさん
2009/10/12(月) 17:45:51New/Changed Features
Bugs Fixed
* Bugzilla 258: Undefined identifier error for circular import
* Bugzilla 1140: ICE(cod1.c) casting last function parameter to 8 byte value
* Bugzilla 1592: dmd fail to resolve class symbol when i put files in a package
* Bugzilla 2687: ICE(statement.c): tuple foreach in an erroneous template.
* Bugzilla 2829: ICE(expression.c) static array block-initialized in struct literal
* Bugzilla 3006: ICE(e2ir.c, tocsym.c) template module using array operation
* Bugzilla 3041: Array slices can be compared to their element type: bad codegen or ICE
* Bugzilla 3042: Segfault on incorrect override
* Bugzilla 3101: Stack overflow: declaring aggregate member twice with static if
* Bugzilla 3119: Segfault(expression.c) template function overloads with function with same name in other module
* Bugzilla 3174: ICE(mtype.c): Compiler crash or compiler error with auto returns and const / immutable / invarient / pure
* Bugzilla 3176: Compiler hangs on poorly formed mixin in variadic template
* Bugzilla 3261: compiler crash with mixin and forward reference
* Bugzilla 3286: Default parameter prevents to resolve inter-module circular dependency
* Bugzilla 3301: Undefined identifier error dependent on order of imports when a circular import is involved
* Bugzilla 3325: ICE(func.c) function literal with post-contract
* Bugzilla 3343: Crash by "auto main(){}"
* Bugzilla 3344: ICE(e2ir.c) returning an invalid function from main()
* Bugzilla 3357: ICE(cod1.c) using 'in' with a static char array as AA key
* Bugzilla 3366: Segfault(declaration.c) variadic template with unmatched constraint
* Bugzilla 3374: [tdpl] ICE(init.c): Associative array type not inferred
0234デフォルトの名無しさん
2009/10/12(月) 18:07:200235デフォルトの名無しさん
2009/10/12(月) 20:24:46返り値が void の関数内で return true; してるところが
コンパイルエラーになった。
今まではなぜならなかった・・・!?
0236デフォルトの名無しさん
2009/10/12(月) 20:30:480237デフォルトの名無しさん
2009/10/12(月) 20:49:34循環importが死ぬ
0238デフォルトの名無しさん
2009/10/12(月) 21:12:270239デフォルトの名無しさん
2009/10/12(月) 21:18:260240デフォルトの名無しさん
2009/10/12(月) 21:20:06それってbugzilla登録してる?
0241デフォルトの名無しさん
2009/10/13(火) 00:08:03なんか、opEquals も toHash も opCmp も呼ばれてない...
http://codepad.org/bGC0SSRB
0242デフォルトの名無しさん
2009/10/13(火) 01:04:120243デフォルトの名無しさん
2009/10/13(火) 01:16:33foreach rangeのドキュメントには.next .retreatと書いてあるが、
動くのは.popFrontと.popBackだ
0244デフォルトの名無しさん
2009/10/13(火) 01:32:35下記バグのパッチが原因と思われる。
ttp://d.puremagic.com/issues/show_bug.cgi?id=3301
#258, #1592, #3286, #3301は直ってると聞くが、
かなり書き直したようなので、もうすこしバグ修正しないとだめそうね。
あそこのITSはbroken englishでもある程度大丈夫だから積極的に送るといい
コードとビルドログに片言で説明足しただけでもOK。
0245デフォルトの名無しさん
2009/10/13(火) 08:16:46c:\d\dmd2\src\dfl\internal\winapi.d(2078): Error: long has no effect in expression (0)
enum: LRESULT
{
TBDDRET_DEFAULT = 0, // <<<<<<<<<<<<<<<<<
TBDDRET_NODEFAULT = 1,
TBDDRET_TREATPRESSED = 2,
}
0246241
2009/10/13(火) 10:18:50他のメソッドもいろいろ試してみたけど、結局こうしないといけないみたいだな
hash_t toHash() const
equals_t opEquals(ref const(X) rhs) const
int opCmp(ref const(X) rhs) const
0247241
2009/10/13(火) 10:27:200248デフォルトの名無しさん
2009/10/13(火) 14:58:36import std.stream;
void main() {
try
{
char[] buff;
std.stream.File file = new std.stream.File("hoge.txt");
buff.length = file.available();
file.read(buff);
file.close();
}
catch (Object e)
{
writeln(e.toString());
}
while(1)
{ }
}
これを実行すると
hoge.txtの中身が半角3文字までなら
std.stream.readException: not enough data in stream
hoge.txtの中身が半角4文字以上なら
object.Error: Access Violation
と出力されます。
どこが間違っているのでしょうか?
0249デフォルトの名無しさん
2009/10/13(火) 16:54:10文字列の長さ(size_tのサイズ)のあとに実際の文字列が入るやつだから
前者はサイズ(おそらく4byte)がなくて読み込めず
後者は最初の4byteを読み込むべき文字列の長さと勘違いして膨大なデータを読もうとしてる
一度適当なファイルにfile.write("hoge");としてバイナリエディタで覗いてみるとわかりやすい
0250デフォルトの名無しさん
2009/10/13(火) 17:35:07なるほど。
シリアライズ/デシリアライズの処理も含まれているんですね。
ただのテキストファイルを読み込みたい時はstd.fileを使わないといけないんですね。。
0251デフォルトの名無しさん
2009/10/13(火) 18:01:06ubyte[1024] buff;
std.stream.File file = new std.stream.File("test.txt");
size_t sz;
char[] str;
while (!file.eof) str ~= buff[0..file.read(buff)];
こんな感じにしてシリアライズしないで読み込めばいい。(BOMなしUTF8を読み込む場合は。)
BOMはEndianStream通すんだったか?
あとavailableはバッファ使うときじゃなかったかな?
0252デフォルトの名無しさん
2009/10/13(火) 18:14:46なるほど。
read(ubyte[] buffer)は仕様が違うんですね。
0253デフォルトの名無しさん
2009/10/13(火) 19:13:090254デフォルトの名無しさん
2009/10/13(火) 19:23:57まじですか・・・。
代わりに推奨されている物は何になりますか?
0255デフォルトの名無しさん
2009/10/13(火) 19:36:350256デフォルトの名無しさん
2009/10/13(火) 20:00:59std.rangeですか。
これがstreamの代用かぁ。
0257デフォルトの名無しさん
2009/10/13(火) 20:51:050258デフォルトの名無しさん
2009/10/13(火) 21:58:37std.stdio.File
0259デフォルトの名無しさん
2009/10/14(水) 04:24:420260デフォルトの名無しさん
2009/10/14(水) 05:44:25ただコメントアウトとかがあって完成しているのかどうかは不明(LockingTextWriterとか見れば分かる)
参照カウントによる自動クローズとか普通に使う分には問題ないと思うけど
0261デフォルトの名無しさん
2009/10/14(水) 05:46:400262デフォルトの名無しさん
2009/10/14(水) 09:11:03phobosに入ってるソースストリームはファイルとソケットだけだから、
ソケットのレンジ化が完了すればストリームは捨てられる
0263デフォルトの名無しさん
2009/10/14(水) 10:14:270264デフォルトの名無しさん
2009/10/14(水) 10:25:08ラッパレンジを作るだけだろ
0265デフォルトの名無しさん
2009/10/14(水) 11:54:59R r;
static if(is(typeof({ r.put(ubyte.init); }()))) {
void put(ubyte x) { r.put(x); }
void put(int x) { /*ほげほげ*/ }
/*そのほか*/
}
}
0266デフォルトの名無しさん
2009/10/14(水) 14:44:24import std.file;
import std.windows.charset;
string tokenize(in char[] str,/*引数省略*/)
{
// コード省略
assert(0); // アサート1
return result;
}
char[] strMB = cast(char[])read("hoge.txt");
string str = fromMBSz(strMB.idup.ptr);
string token = tokenize(str,/*引数省略*/);
assert(0); // アサート2
resultに日本語の文字列が入る場合に問題が起きます。
・このまま実行するとアサート1の行でAssertion failureが発生。
・アサート1をコメントアウトするとInvalid UTF sequence: 133が発生。
アサート1とアサート2の間には戻り値のコピーしかないので、なぜこのようなエラーが出るのかさっぱりわかりません。
どんな原因が考えられるでしょうか?
0267デフォルトの名無しさん
2009/10/14(水) 17:11:47char*のバイナリを配列にキャストしたら関係ないデータが要素数として読みとられて
idupで関係ないところまでコピーしようとしてるとか
調べてないので適当です
0268デフォルトの名無しさん
2009/10/14(水) 18:15:230269デフォルトの名無しさん
2009/10/14(水) 18:24:53strをファイルに書き出して中身を確認したところ、
文字コードの違い以外はhoge.txtと同じなので、そこは問題ないと思います。
文字列が日本語の時のみ、Invalid UTF sequence: 133というエラーなので文字コードが関係してる気がするのですが、
エラーの発生箇所が戻り値のコピーなので謎です。
0270デフォルトの名無しさん
2009/10/14(水) 18:33:53コピー時に行われるそれがエラーになっているのだろう
0271デフォルトの名無しさん
2009/10/14(水) 19:09:25そもそもfromMBSzでShift_JISからUTF8に戻しているはずだから文字コードが問題でもない気がする。
tokenize内で何かしらの最適化が起こって、assert(0);の評価順が変わってるとかってことはないかな?
0272デフォルトの名無しさん
2009/10/14(水) 19:29:47生成コードが変わってしまう可能性があるよ。
デバッグのときは普通にprintfかthrowしたほうがいい。
0273デフォルトの名無しさん
2009/10/14(水) 20:40:12言語の基本仕様の部分に動的な値チェックがある事は考えていませんでした。
でも、配列もクラスのような物?ですね。
assert(0)の評価順が変わる可能性があるのも知らなかったです。
>>266のアサート1とアサート2の部分をthrowに変えてみましたが、
同じようにアサート1の行からアサート2の行の間でInvalid UTF sequence: 133が発生しているようです。
もうさっぱりわかりません・・・。
0274デフォルトの名無しさん
2009/10/14(水) 20:57:120275デフォルトの名無しさん
2009/10/14(水) 22:43:50もう少しコード載せられね?
もしかしてShift_JISな文字列をwritelnとかしてるとかいう落ちではないよねえ
0276デフォルトの名無しさん
2009/10/15(木) 04:56:520277デフォルトの名無しさん
2009/10/15(木) 08:49:53生成されるバイナリが変わる可能性があるだけで.
関係なくね
0278デフォルトの名無しさん
2009/10/15(木) 10:36:30大変申し訳ない事なのですが、ここに載せてないコードが原因でした・・・。
問題が発生するtokenizeの呼び出しよりも前に1回tokenizeを呼び出していて、これを見落としていました。
アサート1を有効にすれば1回目のtokenizeでエラー、コメントアウトすると2回目のtokenizeでInvalid UTF sequence: 133という事でした。
Invalid UTF sequence: 133が発生する箇所は
auto pos = find(str, '<');
これを
auto pos = find(str, "<");
に直したらエラーは出なくなりました。
お騒がせしました。
0279デフォルトの名無しさん
2009/10/15(木) 10:58:290280デフォルトの名無しさん
2009/10/15(木) 13:39:21http://www.digitalmars.com/d/2.0/changelog.html#new2_035
0281デフォルトの名無しさん
2009/10/15(木) 14:49:510282デフォルトの名無しさん
2009/10/15(木) 15:56:480283デフォルトの名無しさん
2009/10/15(木) 20:12:450284デフォルトの名無しさん
2009/10/15(木) 20:52:140285デフォルトの名無しさん
2009/10/15(木) 21:25:590286デフォルトの名無しさん
2009/10/15(木) 21:57:08http://lists.puremagic.com/pipermail/digitalmars-d-announce/2009-October/014214.html
現状はmodule必須だよ.
0287デフォルトの名無しさん
2009/10/15(木) 22:26:050288デフォルトの名無しさん
2009/10/15(木) 22:28:300289デフォルトの名無しさん
2009/10/15(木) 22:42:130290デフォルトの名無しさん
2009/10/16(金) 00:51:382.036はどこに行ったんだw
0291デフォルトの名無しさん
2009/10/16(金) 01:48:150292デフォルトの名無しさん
2009/10/16(金) 01:48:360293デフォルトの名無しさん
2009/10/16(金) 02:10:110294デフォルトの名無しさん
2009/10/16(金) 02:34:54以前MLで「2で実装したかった幾つかの機能は3に持ち越し」みたいなこと誰かが書いてたような気がする
希に名前は出てくるけどどうなってるかは分からない……(´・ω・`)
0295デフォルトの名無しさん
2009/10/16(金) 12:56:010296デフォルトの名無しさん
2009/10/16(金) 12:58:54boost::serializationみたいなのできないかなぁ。
0297デフォルトの名無しさん
2009/10/16(金) 13:02:20Dは、ぼちぼち実用できるレベルになったの?
得意分野を持たない物は、プログラミング言語に限らず公には
忘れられていくと思うんだけど、これ!こゆ事にはD!とかいう
分野は確定できた?
0298デフォルトの名無しさん
2009/10/16(金) 13:32:490299デフォルトの名無しさん
2009/10/16(金) 13:37:040300デフォルトの名無しさん
2009/10/16(金) 13:38:07Pythonは、とくに得意分野もないけど定着したね。
登場当初は「Perlあるからイラネ」と言われてたものでした。
0301デフォルトの名無しさん
2009/10/16(金) 13:47:37「こいつ何言ってるんだろう……」とか思ってしまう俺は本当によく訓練されてると思う。
0302デフォルトの名無しさん
2009/10/16(金) 16:14:51いや、perlに比べるとpythonは覚え易いっしょ。
0303デフォルトの名無しさん
2009/10/16(金) 16:15:280304デフォルトの名無しさん
2009/10/16(金) 16:56:310305デフォルトの名無しさん
2009/10/16(金) 17:59:42それに、どちらかで書かれた外部ライブラリだって使えるんだから、
プアーでない環境でのC/C++とほとんど同じ領域で実用できるさ。
スレッドやデリゲート、よりよいテンプレートなどがある分、C++03よりも実用的なくらいだ。
※ただし言語仕様の変更に応じてソースを修正できるならね(笑)
0306デフォルトの名無しさん
2009/10/16(金) 18:20:14ソースコンバータで一儲けできるまでに広まって欲しいっす。
0307デフォルトの名無しさん
2009/10/16(金) 19:52:21これだよこれ、やっとまともなDのライブラリになったな
0308デフォルトの名無しさん
2009/10/16(金) 23:54:40よく調教され(ry
0309デフォルトの名無しさん
2009/10/17(土) 18:15:02-c -o- -deps=ほげ source.d
ってやるとsource.dが依存するファイルが一覧で取れるって今知った
上手く解析すればbudみたいの作れないかなー
0310デフォルトの名無しさん
2009/10/17(土) 18:55:280311デフォルトの名無しさん
2009/10/17(土) 20:11:58コンパイラをバイナリレベルでリンクするのは前にC++コンパイラで試したけど面倒だったから
テキストで出力する方式にするっていってた。
0312デフォルトの名無しさん
2009/10/17(土) 20:26:21なぜかstd.file.readを使ったところで落ちる
QtDと組み合わせなければ落ちない
何やねん
0313デフォルトの名無しさん
2009/10/18(日) 00:30:37言葉と同じで、安定していないからモノを作れない、にはならないぜ!
って思う俺はやはり調教されてるのか。。。
0314デフォルトの名無しさん
2009/10/18(日) 02:22:520315デフォルトの名無しさん
2009/10/18(日) 04:56:120316デフォルトの名無しさん
2009/10/18(日) 05:32:380317デフォルトの名無しさん
2009/10/18(日) 07:57:09ふいたwwwww
0318デフォルトの名無しさん
2009/10/18(日) 15:26:35なんだか便利だね。
同一機能を複数、個別の名前をつけて委譲できる文字列 mixin が
重宝してます。
0319デフォルトの名無しさん
2009/10/18(日) 16:03:510320デフォルトの名無しさん
2009/10/18(日) 17:05:39クラスツリーを丸ごと放棄するか全面的な書き換え(少なくとも読み直し)が必要になって困るんだが
Dだとmixinを使ってうまく柔軟にやれるのかい?
0321デフォルトの名無しさん
2009/10/18(日) 17:15:25JavaBeansみたいなのを超強化したような事がやれると思う
0322デフォルトの名無しさん
2009/10/18(日) 21:58:150323デフォルトの名無しさん
2009/10/18(日) 22:04:32普段あんまり使わないからかもしれないけど。
どうやって書いたら可読性の高いmixinができるかな?
0324デフォルトの名無しさん
2009/10/18(日) 22:19:400325デフォルトの名無しさん
2009/10/18(日) 22:36:14文字列にしたらIDEからのサポートは絶望的になるな。
もしmixinでいろいろやるとしたらtemplate mixinの方がいいんじゃないか?
0326デフォルトの名無しさん
2009/10/18(日) 22:40:00class O {
Variant[] prototype;
O dup() {
auto o = new O;
o.prototype = this.prototype;
return o;
}
}
0327デフォルトの名無しさん
2009/10/18(日) 22:40:32template mixinと文字列mixinは名前こそ似てるが完全に別物だぞ
0328デフォルトの名無しさん
2009/10/18(日) 22:47:58なんだかオラわくわくしてきたぞ
0329デフォルトの名無しさん
2009/10/18(日) 22:49:110330デフォルトの名無しさん
2009/10/18(日) 22:50:220331デフォルトの名無しさん
2009/10/18(日) 22:55:36インスタンスへ静的にメソッドを追加できないかね
0332デフォルトの名無しさん
2009/10/18(日) 22:57:34じゃあこれでw
class Some(string method){
mixin(method);
}
0333デフォルトの名無しさん
2009/10/19(月) 01:07:10ぱっと思いつくところではRubyとかScalaとか
0334デフォルトの名無しさん
2009/10/19(月) 01:37:130335デフォルトの名無しさん
2009/10/19(月) 01:41:03レキシカルスコープになる気配ある?
0336デフォルトの名無しさん
2009/10/19(月) 08:59:54あっても英語ができない
ないけど
0337デフォルトの名無しさん
2009/10/20(火) 10:45:03Hoge hoge;
foreach(ref e, hoge.tupleof) {
e = 100;
}
こんな感じでtupleをforeachで回してstructのメンバに代入したいのですが、
foreachの行でコンパイルエラーError: no storage class for value eが発生してしまいます。
何か方法はないのでしょうか?
0338デフォルトの名無しさん
2009/10/20(火) 10:48:37○ foreach(ref e; hoge.tupleof) {
0339デフォルトの名無しさん
2009/10/20(火) 10:59:20struct Hoge { int a, b, c; }
void main(){
Hoge hoge;
foreach(i,e; hoge.tupleof) {
hoge.tupleof[i] = 100;
}
}
0340デフォルトの名無しさん
2009/10/20(火) 11:19:36書き間違えました。
>>339
なるほど。
使わないeを宣言してるところは格好悪いですね。
0341デフォルトの名無しさん
2009/10/20(火) 17:49:44import std.algorithm;
void main()
{
struct Hoge { int a, b, c; };
Hoge hoge;
fill(cast(int[])((cast(void*)&hoge)[0..Hoge.sizeof]), 100);
write(hoge);
}
何がなんだかわからなくなってきた
0342デフォルトの名無しさん
2009/10/20(火) 18:10:11int[10] arr;
func(arr);
Error: cannot have out or ref parameter of type int[10u]
静的配列をrefで受け取る事ってできないんですかね?
0343デフォルトの名無しさん
2009/10/20(火) 18:26:27そもそも静的配列は左辺値じゃないからな。
0344デフォルトの名無しさん
2009/10/20(火) 19:01:20import std.stdio;
void func(T)(ref T t){ t[0] = 1; }
void main(){
int[10] arr;
func(arr[]);
writeln(arr);
}
0345デフォルトの名無しさん
2009/10/20(火) 19:06:49thx
動的配列と似てるようで結構違うんですね。
0346デフォルトの名無しさん
2009/10/20(火) 19:27:00静的配列だと書き換えられないんだw
0347デフォルトの名無しさん
2009/10/20(火) 19:52:32refで渡した物に代入しても期待通りの結果にはならないと思う。
0348デフォルトの名無しさん
2009/10/20(火) 19:55:560349デフォルトの名無しさん
2009/10/20(火) 20:13:01静的配列をスライスすると、その静的配列を指す動的配列になる。
静的配列型変数も立派な左辺値な。ただ静的配列は変数の引数に使えない、返り値に使えないなどの謎な制限がある。ロス無しで制限回避するなら構造体にキャストするのが正解。まぁスライス取った方が読みやすいが。
0350デフォルトの名無しさん
2009/10/20(火) 21:43:26int[N] staArr;
auto slice1 = dynArr[0..2];
auto slice2 = staArr[0..3];
になったらそこらへんも一緒に改善されるかな?
0351デフォルトの名無しさん
2009/10/20(火) 21:45:53とか改善して欲しいところは昔から一杯残ったままだな
ちゃんとvotes使われてるのか?
0352デフォルトの名無しさん
2009/10/21(水) 08:39:22保留中のアイデア
Move 'delete' from language to library. Possibly even get rid of 'new'.
えー
0353デフォルトの名無しさん
2009/10/21(水) 13:35:12原因はD 2.0を使っているためだと思い、何分か試行錯誤して、使えるようにできた。
SDLフォルダ(SDL.dとかSDL_video.dとかがあるフォルダ)の中のD言語ソースファイルの「bit」というところを「bool」に書き換える。
これで動作するはず。
既出だったらごめんなさい。
0354デフォルトの名無しさん
2009/10/21(水) 13:39:37deprecatedになったのは覚えてるんだけどいつの間にかなくなってたよね
0355デフォルトの名無しさん
2009/10/21(水) 13:42:09bitは多分消えたと思う
0356デフォルトの名無しさん
2009/10/21(水) 15:30:24例えばstd.traits.Unqual!(const(char)[][])とやってもconstがはずれません。
0357デフォルトの名無しさん
2009/10/21(水) 17:12:060358デフォルトの名無しさん
2009/10/21(水) 18:08:53自作したテンプレートってたいてい標準で備わっていて欲しくなって困る
いや困らない
0359デフォルトの名無しさん
2009/10/21(水) 18:11:40Phobosにはないんですね。
まあ作るのは簡単そうですね。
0360デフォルトの名無しさん
2009/10/21(水) 20:22:53D1だとobject.dにboolのaliasで定義されてるんだけど
D2になる機会にスッキリ息の根を止めようってことみたいね
0361デフォルトの名無しさん
2009/10/21(水) 20:27:550362デフォルトの名無しさん
2009/10/21(水) 21:03:200363デフォルトの名無しさん
2009/10/22(木) 00:03:09二つの配列同時になめてく時はインデクスでアクセスしなきゃいけないのがなんか悔しい。
>>353
たしか前スレで出てた。
0364デフォルトの名無しさん
2009/10/22(木) 00:06:12のiの部分をindexに限定してることはforeachの幅を著しく下げてるよね
foreach (i; v1; a)とかにして
foreach (i; v1, v2; a1, a2)とかやりたいよね
0365デフォルトの名無しさん
2009/10/22(木) 00:08:40どこかにzipWithなかったっけ。
0366デフォルトの名無しさん
2009/10/22(木) 00:17:21そのためのrange
0367デフォルトの名無しさん
2009/10/22(木) 01:35:00D2.0ではエラー出るのを直す方法も考えた。
SDL_video.dの、SDL_LoadBMP関数の引数、「char* file」を
「immutable(char*) file」に書き換えておく。
こうすれば一応サンプルは動く。
これも既出だったらごめんなさい。
0368デフォルトの名無しさん
2009/10/22(木) 01:58:460369デフォルトの名無しさん
2009/10/22(木) 02:37:29SDL_LoadBMP(const char *file);
なので,そこは
SDL_LoadBMP(char* file);
にしとくべきだと思うが。
0370369
2009/10/22(木) 02:38:392行目がC言語,4行目がD言語な。
0371デフォルトの名無しさん
2009/10/22(木) 02:40:06SDL_LoadBMP(const(char)* file);
でしょ
0372デフォルトの名無しさん
2009/10/22(木) 02:41:370373デフォルトの名無しさん
2009/10/22(木) 02:42:31template関数じゃ駄目なの?
それとも更に構文糖が欲しいってこと?
0374369
2009/10/22(木) 02:49:22D の const は、型修飾子ではなく記憶クラスです。従って、 型修飾子として使われている const は全て除いてしまいます:
CのconstってDと違うし、外すべきだと思ったんだが。
0375デフォルトの名無しさん
2009/10/22(木) 02:56:49これならstringもimmutable(char*)にもchar[]にも対応できるSDL_LoadBMPができるかも
0376デフォルトの名無しさん
2009/10/22(木) 03:08:26それは一体いつの知識なんだ。
>>375
そもそもCでconst char*型で定義されているのだから、
Dではこれと同等の型であるconst(char)*型で宣言すべき。
stringすなわちimmutable(char)[]も、immutable(char)*も、char[]も
const(char)*に暗黙的に変換できる。
0377デフォルトの名無しさん
2009/10/22(木) 08:21:07const(char)*で成功しました。
ありがとうございます。
0378デフォルトの名無しさん
2009/10/22(木) 10:25:54zipってforeach(ref e; r){e = 1;}みたいに代入するのにも使えるの?
0379デフォルトの名無しさん
2009/10/22(木) 10:36:480380デフォルトの名無しさん
2009/10/22(木) 11:21:48array[i] = 1;のつもりでforeach(e; array){e = 1;}と書き間違うリスクが高いと思うんだが。
0381デフォルトの名無しさん
2009/10/22(木) 16:33:250382デフォルトの名無しさん
2009/10/22(木) 17:16:52おまえは何を言っているんだ
0383デフォルトの名無しさん
2009/10/22(木) 17:26:370384デフォルトの名無しさん
2009/10/22(木) 18:26:490385デフォルトの名無しさん
2009/10/22(木) 23:52:51for (i = 0; i < a.length; ++i)
0386385
2009/10/22(木) 23:54:340387デフォルトの名無しさん
2009/10/23(金) 00:10:48日本語使ってないんですが、上記のエラーが出ます。
なぜ?
0388デフォルトの名無しさん
2009/10/23(金) 00:51:500389デフォルトの名無しさん
2009/10/23(金) 01:31:58clsコマンドのようなことをしたいのですが、
0390デフォルトの名無しさん
2009/10/23(金) 01:45:380391デフォルトの名無しさん
2009/10/23(金) 01:54:40「#IFDEF _WIN32」のようなことをしたいのですが、、
どうすればいいのでしょうか。
0392デフォルトの名無しさん
2009/10/23(金) 02:06:42{
/* コード */
}
0393デフォルトの名無しさん
2009/10/23(金) 02:09:23import std.stdio;
import std.process;
void main() {
writeln("aaaaa");
version (Windows) {
system("cls"); // Winならclsでコンソールをクリア
} else {
system("reset"); // Win以外の環境だとこうなの?よく知らないけど
}
}
0394デフォルトの名無しさん
2009/10/23(金) 02:12:36$ clear | hexdump
0000000 5b1b 1b48 325b 004a
0000007
それと単にこのコード吐き出しゃ良い気もする
0395387
2009/10/23(金) 06:25:28private import tango.io.FilePath;
int main()
{
new FilePath("c:\\d");
return 0;
}
tango-0.99.7-bin-win32-dmd.1.033
です。
0396デフォルトの名無しさん
2009/10/23(金) 06:51:10private import tango.io.FilePath,tango.io.Stdout;
class MyForm: dfl.form.Form
{
this()
{
allowDrop = true;
text = "My Form";
clientSize = dfl.all.Size(248, 189);
this.dragOver ~= &this.dOver;
}
void dOver(Control sender, DragEventArgs ea) {
if ( ea.data.getDataPresent( DataFormats.fileDrop ) ) {
Stdout("1").newline;
char[][] fs = cast(char[][])ea.data.getData( DataFormats.fileDrop ).getStrings();
Stdout("2").newline;
foreach(int i , char[] f ; fs ) {
Stdout("3").newline;
FilePath fp = new FilePath(f);
}
}
}
}
int main()
{ int result = 0;
try { Application.run(new MyForm()); }
catch(Object o) { msgBox(o.toString(), "Fatal Error", MsgBoxButtons.OK, MsgBoxIcon.ERROR); result = 1; }
return result;
}
すいません。間違いました。こっちで。
0397デフォルトの名無しさん
2009/10/23(金) 07:44:53>>395
で、エラーの内容が\が入ってるとはっきり出ていたので、Text.substitute で置き換えたらあっさり通りました。
バックスラッシュが駄目なんですね・・・、なんでだろ。
後は、Application.autoCollect = false; がmain関数内に必要でした。
お騒がせしました。
0398デフォルトの名無しさん
2009/10/23(金) 13:44:290399デフォルトの名無しさん
2009/10/23(金) 18:59:09例外クラスを書いてthrowするしかない?
0400デフォルトの名無しさん
2009/10/23(金) 19:02:280401デフォルトの名無しさん
2009/10/23(金) 19:33:34簡単にできるんですね。
どうもでした。
0402デフォルトの名無しさん
2009/10/23(金) 19:45:33pure関数の契約の中で、convのtoを使って数値を文字列に変換しようとしたらpureじゃないって怒られました。
0403デフォルトの名無しさん
2009/10/23(金) 19:58:100404デフォルトの名無しさん
2009/10/23(金) 19:59:100405デフォルトの名無しさん
2009/10/23(金) 20:02:290406デフォルトの名無しさん
2009/10/23(金) 20:23:03言われてみれば確かにpureじゃないのが変な気がします。
何か理由でもあるんでしょうか?
今後に期待orz
0407デフォルトの名無しさん
2009/10/23(金) 20:24:000408デフォルトの名無しさん
2009/10/23(金) 20:58:10parseとかいくつか修正が必要なので素直にMLに投げてAndreiに修正してもらった方が楽かも
0409デフォルトの名無しさん
2009/10/23(金) 20:59:32CTFEで出来そうなのにそうなってない関数とかも
0410デフォルトの名無しさん
2009/10/23(金) 22:17:49Stack Overflowがあり得る以上、関数呼び出しもしちゃだめなのか?
nothrow double func(){
return func2();
}
nothrow double func2(){
return func();
}
void main(){
func();
}
これは今のところコンパイルも通る(dmd2.035)し、ちゃんと落ちますが。
0411デフォルトの名無しさん
2009/10/23(金) 22:23:410412デフォルトの名無しさん
2009/10/23(金) 22:36:45nothrowはExceptionを投げない関数なのでErrorを投げる可能性がある。
とはいえ、検査例外的な機能を入れるならJavaのように投げる可能性のあるものを列挙できるようにしないと
catch(Excepiton)するしかなくなるので、俺も使い道はよく分からない。
0413デフォルトの名無しさん
2009/10/23(金) 23:13:43class Error : Exception だと思ってた漏れを笑ってやってください。
なんだThrowableってw
0414410=413
2009/10/23(金) 23:42:14throw new Error("error!"); // <- new が may throw
}
nothrow void func2(){
try throw new Error("error!");
catch(Exception e) writeln("error!"); // <- writeln が may throw
}
nothrow void func3(){
try throw new Error("error");
catch(Exception) {} // OK >>412 するしかなくなる
}
ぬぅ。。。やっぱりよくわかりませんでした。>使い道
0415デフォルトの名無しさん
2009/10/24(土) 00:00:550416414
2009/10/24(土) 01:10:41>(newに)失敗すると、null を返すのではなく OutOfMemoryException 例外が投げられます。
らしいから、バグじゃないかも?
OutOfMemoryErrorじゃないのがバグ?
ところでobject.Error: Stack Overflowって catch(Error) で取れないんですね。
StackがOverflowしてるんだからしゃーないのか?
このぶんだとOutOfMemoryExceptionも取れないのだろうか。メモリ無いんだし。
0417デフォルトの名無しさん
2009/10/24(土) 17:50:00runtime exceptionを訳したのか
このruntimeを実行時って訳すのに違和感・・・
ランタイムに出る例外じゃなくてランタイムが出す例外だよね?
0418デフォルトの名無しさん
2009/10/24(土) 19:11:000419デフォルトの名無しさん
2009/10/24(土) 19:29:080420デフォルトの名無しさん
2009/10/24(土) 21:18:41実行時のエラーが原因で投げられるから実行時例外なんでしょ
0421デフォルトの名無しさん
2009/10/24(土) 22:43:30実行時のエラーが原因で投げられるのは検査例外も一緒じゃないの
0422デフォルトの名無しさん
2009/10/25(日) 00:25:430423デフォルトの名無しさん
2009/10/25(日) 00:33:15例外がない時代の用語を元にしているんだよなあ。
runtime libraryは言語仕様ライブラリとかの方がしっくりくる。
0424デフォルトの名無しさん
2009/10/25(日) 00:37:10http://d.puremagic.com/issues/show_bug.cgi?id=3050
0425デフォルトの名無しさん
2009/10/25(日) 01:07:08そもそもコンパイルタイムに例外なんて飛ばないんだから、
runtime exceptionを実行時例外と呼ぶことに違和感がある、んだけど・・・
0426デフォルトの名無しさん
2009/10/25(日) 01:10:47コンパイル時に処理漏れを検査できる検査例外に対して、
実行してみないとどこで飛ぶか分からないのがruntime exceptionだから
実行時例外でもいいでしょ
0427デフォルトの名無しさん
2009/10/25(日) 17:03:30import std.range;
makeIndex!("a.at!(0) == b.at!(0) ? a.at!(1) > b.at(1) : a.at!(0) > b.at!(0)")(zip(arr1, arr2), index);
functional.d(176): Error: static assert "Bad binary function q{a.at!(0) == b.at!(0) ? a.at!(1) > b.at(1) : a.at!(0) > b.at!(0)}. You need to use a valid D expression using symbols a of type Proxy and b of type Proxy."
「値が同じなら別の値を使ってソートする」という事をしたいのですがコンパイルエラーになります。
述語を関数やファンクタにするとなると、zipが返す型を記述しないといけなくなるのがなんだかなーといった感じです。
うまい方法はないでしょうか?
0428427
2009/10/25(日) 17:05:09b.at(1)をb.at!(1)に変えたら解決しました。
0429デフォルトの名無しさん
2009/10/25(日) 17:16:36Fatal error: unable to open input file 'assert.h'
というエラーが出て、不完全なファイルが出力されてしまいました。
どうすればいいのでしょうか。
0430デフォルトの名無しさん
2009/10/25(日) 17:22:030431デフォルトの名無しさん
2009/10/25(日) 17:31:08dmフォルダのsc.iniに書かれているインクルードパスもassert.hがあるフォルダに設定されています。
cv.hとは違うディレクトリに出力させているためでしょうか。
0432デフォルトの名無しさん
2009/10/25(日) 17:33:210433デフォルトの名無しさん
2009/10/25(日) 17:37:52それで成功しました。ありがとうございます。
しかし、cv.hの最初のほうの複雑な入れ子になっている#ifdefがそのままになっています。
このままでも使えるんですか?
0434デフォルトの名無しさん
2009/10/25(日) 17:51:16そのへんは自分で直す必要がある。
というか、htodの出力は一通り人の手で修正しないと使い物にならないよ
0435デフォルトの名無しさん
2009/10/25(日) 17:54:47プリプロセッサ削除ができていないところは修正するしかないですね。
OpenCVのhファイルの中でもコンパイルエラー出して変換できないものも多いですし
0436デフォルトの名無しさん
2009/10/25(日) 18:01:550437デフォルトの名無しさん
2009/10/26(月) 01:05:59上のほうでSDLについてその辺の話が出てるけど。
0438デフォルトの名無しさん
2009/10/26(月) 03:23:310439デフォルトの名無しさん
2009/10/26(月) 19:28:08int[] arr;
auto r = std.range.retro(arr);
auto r2 = r[0..2];
というのを考えたのですが、Retroには引数を2つ取るopSliceがないようです。
arr.reverseとするのは処理コストがかかりそうで、できれば避けたいのですが、
他に方法はないのでしょうか?
0440デフォルトの名無しさん
2009/10/26(月) 19:35:37// r = retro(arr)[m .. n]
auto r = take(n, retro(arr));
popFrontN(arr, m);
0441デフォルトの名無しさん
2009/10/26(月) 19:37:190442デフォルトの名無しさん
2009/10/26(月) 19:51:57thx
0443デフォルトの名無しさん
2009/10/26(月) 23:42:02import std.stdio;
import std.range;
void main(){
int[] arr = [1,2,3,4,5];
auto r = take(1, retro(arr));
popFrontN(r, 2);
foreach(int e; r) writeln(e);
}
0444デフォルトの名無しさん
2009/10/26(月) 23:42:490445デフォルトの名無しさん
2009/10/26(月) 23:45:21import std.range;
void main(){
int[] arr = [1,2,3,4,5];
auto r = take(4, retro(arr)).popFrontN(1); // これできないのなんでだろう
foreach(int e; r) writeln(e);
}
main.d(5): Error: no property 'popFrontN' for type 'Take!(Retro!(int[]))'
main.d(5): Error: function expected before (), not __error of type int
main.d(6): Error: foreach: int is not an aggregate type
0446デフォルトの名無しさん
2009/10/27(火) 01:06:080447デフォルトの名無しさん
2009/10/28(水) 02:00:150448デフォルトの名無しさん
2009/10/28(水) 02:53:050449デフォルトの名無しさん
2009/10/28(水) 03:20:10int at(int[] arr, uint index){
return arr[index];
}
int[] arr = [1,2,3];
assert(arr.at(1) == 2); // (*)
0450デフォルトの名無しさん
2009/11/02(月) 08:26:520451デフォルトの名無しさん
2009/11/03(火) 00:16:50Dのstruct関係が最適化が効いててやたら速いからなのだろうが、
値型でモジュールを書くのはC++の悪夢を思い出して嫌な感じがする。
0452デフォルトの名無しさん
2009/11/03(火) 02:31:43なんでかな
0453デフォルトの名無しさん
2009/11/03(火) 07:51:380454デフォルトの名無しさん
2009/11/03(火) 08:08:030455デフォルトの名無しさん
2009/11/03(火) 09:25:560456デフォルトの名無しさん
2009/11/03(火) 10:00:170457デフォルトの名無しさん
2009/11/03(火) 17:40:57クラスライブラリを使うとGoFのAdapterを使う場面が増える
Adapterに派生を使うと、そこから他のクラスを継承できなくなるので
自然に集約のAdapterを選択している
|
\ __ /
_ (m) _ピコーン
|ミ|
/ .`´ \
ハ_ハ
( ゚∀゚)')
(つ ノ
⊂__ノ
. し'
だったら最初から集約を強制すればいいじゃないか
0458デフォルトの名無しさん
2009/11/03(火) 18:17:44コードも一緒に載せてください m(..)m
0459デフォルトの名無しさん
2009/11/03(火) 19:59:26ちょw
0460デフォルトの名無しさん
2009/11/04(水) 01:35:18Dは基本的にクラスで統一、ただしC/C++の概念である構造体も相互運用のためサポートしてます、くらい明確に住み分けて欲しい。
クラスをはっきり値型として宣言できるとか、
変数をnullableと宣言しない限りnullを代入できないとか、
構造体的な使い方しかしなければ構造体と同じように最適化してくれるとか、
ああ畜生! なんでこの言語触ってると自分で言語作りたくなってくるんだ!
おかげでコンパイラの作り方とか本買っちまったじゃねーかYO!!
0461デフォルトの名無しさん
2009/11/04(水) 02:06:32普段python使ってて間に合っちゃってるし
0462デフォルトの名無しさん
2009/11/04(水) 03:11:21pythonいいな、Dよりもpythonの優れた箇所を知りたい
0463デフォルトの名無しさん
2009/11/04(水) 07:44:40むしろ逆にnewを消してクラスを構造体に近づけようという動きの方が盛んだと思うが
0464デフォルトの名無しさん
2009/11/04(水) 08:37:37class A{void f(){}}
A a;
a.f(); // これで動く
やっぱり,未初期化でインスタンスを指さない変数なんていらなくね?
それが欲しかったら
A a = null;
って明示すりゃあいいんだし.
nullよりインスタンスを指す変数の方がよく使うでしょ.
0465デフォルトの名無しさん
2009/11/04(水) 11:15:02コードの不吉な匂いの一種として「甘やかされたnull」なんてどこかで言われてたっけね。うまい言い方だと思った。
あれはプログラマーが甘やかしてるケースだったけど、いろんな言語の仕様からもnullは甘やかされてるって思う。
ある変数がnullであることが何を意味するのかってドキュメントでしか分からないんだし、
もーちょっとnullを使わなくてもよくする言語仕様ってのが欲しいね。
コンパイラには「nullにしときますね」じゃなく「これnullになるけどお前それでいいのか?どういう意味か分からないんですわ?お?」と言って欲しい。
0466デフォルトの名無しさん
2009/11/04(水) 19:06:420467デフォルトの名無しさん
2009/11/04(水) 19:39:51関数の引数で動的配列を受け取っていた部分は、全部テンプレートに書き直すことになるんですかね?
全て書き換えるのは大変なのですが、rangeから動的配列に変換する事はできないのでしょうか?
0468デフォルトの名無しさん
2009/11/04(水) 22:20:33どのような原因が考えられますでしょうか?
また、解決策として下記のようにしたのですが問題ありますでしょうか?
while( !m_thread.isRunning )
{
m_thread = new SubThread;
m_thread.isDaemon = true;
m_thread.start();
}
一応、何回か試したところ大丈夫そうなのですが・・・
0469デフォルトの名無しさん
2009/11/04(水) 23:01:36めちゃくちゃになっているから、とても使えたものではない
という話を聞いたことがある
0470デフォルトの名無しさん
2009/11/04(水) 23:31:450471468
2009/11/05(木) 00:20:09やっぱりバグの可能性もあるのですね(;^^
0472デフォルトの名無しさん
2009/11/05(木) 01:03:32daemon状態でjoinせずにmain関数終了させたとかないか?
>>469とか>>470はいつの話だ?相当昔のバグだった気がする。
import std.stdio;
import core.thread;
class SubThread: Thread{
this(){ super(&run); }
private void run(){
Thread.sleep(10_000_000);
writeln("finish");
}
}
void main(){
auto t = new SubThread;
t.start();
t.join();
}
0473デフォルトの名無しさん
2009/11/05(木) 01:53:03書き直した方がいいんじゃなかろうか
Rangeから動的配列を作り出すコストがかかるのでは
0474デフォルトの名無しさん
2009/11/05(木) 08:57:58std.array.array
0475デフォルトの名無しさん
2009/11/05(木) 09:38:010476デフォルトの名無しさん
2009/11/05(木) 11:27:14thx
> 入力レンジ r の内容を持った配列を新しくアロケートします。
これはコストが高そうですね。
range使うなら全部range用のコードにしないとあまり旨味がなさそうですね。
0477デフォルトの名無しさん
2009/11/05(木) 11:57:04なら、全部埋め込むとバイナリが大きくなるから、
コンパイル時に静的配列のシーケンスを生成することはできますか?
何らかの級数なりなんなりであれば、理論的には可能だと思うのですが。
0478デフォルトの名無しさん
2009/11/05(木) 13:10:30sequenceかなんかで数列を生成してコピーすればいいだけじゃないの?
0479デフォルトの名無しさん
2009/11/05(木) 13:18:03別にコストっていっても長さのわかってるrangeなら高々長さに比例した時間しか掛からないし、
遅延評価的な挙動では困るときは結局range長さ分のメモリを確保してコピーするしかないのだから
場合によるとしかいえないだろう
0480デフォルトの名無しさん
2009/11/05(木) 16:17:58これは、refやoutを指定しない限り、配列がコピーされるという事なのでしょうか?
少し上でも話題になっていますが、phobosがstructで書かれている事も含めて、
C++での「基本型以外を引数にする時はconst参照」という習慣をDでもやりたくなってきます。
でも、コピーのコストが気になるからといってrefをつけていたら、in,out,refの意味論からはずれてしまいますよね?(inが使えない)
またconst ref char[]ではstringを受け取れないという問題も発生します。
どういうスタイルで書けばいいのでしょう?
0481477
2009/11/05(木) 17:28:38すいません
気にしないで下さい
0482デフォルトの名無しさん
2009/11/05(木) 18:55:47>動的配列を関数の引数で受け取り、関数内で配列の中身を書き換えたら、実引数の配列には影響しませんでした。
>これは、refやoutを指定しない限り、配列がコピーされるという事なのでしょうか?
そんなはずはないでしょ。なにか間違えてるよ。
>少し上でも話題になっていますが、phobosがstructで書かれている事も含めて、
>C++での「基本型以外を引数にする時はconst参照」という習慣をDでもやりたくなってきます。
C++と違ってDのclassはもともと参照型なのでコピーのコストを理由に参照で渡す必要は全くないよね。
>でも、コピーのコストが気になるからといってrefをつけていたら、in,out,refの意味論からはずれてしまいますよね?(inが使えない)
inとref/outは意味として全く違うカテゴリに属すからいいんじゃないの。
まあ、このあたりの言語仕様は整理が必要だとは思うけど。
>またconst ref char[]ではstringを受け取れないという問題も発生します。
>どういうスタイルで書けばいいのでしょう?
immutable(T)[]* を const(const(T)[])* に変換できないのは当然だから、意味を考えてオーバーロードするしかないだろうけど、
動的配列は (size_t, void*) 程度の大きさしかないから参照渡しする必要はないと思うよ。
0483デフォルトの名無しさん
2009/11/05(木) 19:38:42import std.stdio;
void func(int[] arr) {// outでもrefでもない
arr.length = 10;
for (int i = 0; i != 10; ++i) { arr[i] = i; }
}
void main() {
int[] arr;
arr.length = 1;
arr[0] = 100;
func(arr);
writeln(arr);
while(1){}
}
実行結果は100と表示されます。
> C++と違ってDのclassはもともと参照型なのでコピーのコストを理由に参照で渡す必要は全くないよね。
structの時にコピーのコストが問題になります。phobosがstructを使っていますし。
> inとref/outは意味として全く違うカテゴリに属すからいいんじゃないの。
> まあ、このあたりの言語仕様は整理が必要だとは思うけど。
in ref int[] arrとしたくなります(意味論はinで、コピーコストを避けるためにref)。
> immutable(T)[]* を const(const(T)[])* に変換できないのは当然だから、意味を考えてオーバーロードするしかないだろうけど、
> 動的配列は (size_t, void*) 程度の大きさしかないから参照渡しする必要はないと思うよ。
mutableもimmutableも受け取れるconstは便利だと思うので、const refじゃだめだなーと思いました。
0484デフォルトの名無しさん
2009/11/05(木) 19:58:56長さを変えたらコピーされるのは当然だろうが。アホちゃうの
0485デフォルトの名無しさん
2009/11/05(木) 20:07:42動的配列って長さ変えたら参照先が別物になってしまうんですか・・・。
実質長さを変えられない(変えたら別物)っていうのは扱いづらく感じるなぁ。
0486デフォルトの名無しさん
2009/11/05(木) 20:07:45CoWのドキュメント読み直すべき
0487デフォルトの名無しさん
2009/11/05(木) 20:08:35そのためのrefだろ
0488デフォルトの名無しさん
2009/11/05(木) 20:09:190489デフォルトの名無しさん
2009/11/05(木) 20:10:19だから動的配列は長さとポインタのペアだって言ってるがな……
0490468
2009/11/05(木) 20:25:54ダメでした・・・
join()しても同じ状況になりました。
static this()でstart()しているのですが、
なぜかスレッドが実行されていないことがあるようですorz
0491デフォルトの名無しさん
2009/11/05(木) 20:29:10なるほど。
Copy-On-Writeなんですね。
しかし、C++の感覚のせいか
*p = ...
と
p = ...
の区別が表面に見えないのが気持ち悪く感じてしまいます。
>>489
長さとポインタのペアと言っても、C++のstd::vectorみたいなのを想像していました。
0492デフォルトの名無しさん
2009/11/05(木) 20:42:59それはcore.threadのstatic thisより先に実行される可能性があるからまずくないか
0493デフォルトの名無しさん
2009/11/05(木) 20:51:01GCが動き始めるときにスレッドの初期化は終わってるはずだから、それは心配しなくていいと思う。
0494468
2009/11/05(木) 20:59:5620回程度ためしてみたら問題ありませんでした^^
どうやらstatic this()がマズかったようですね・・・
回答ありがとうございました!
0495480
2009/11/05(木) 21:41:51structについて>>480はどう思われますか?
structのコピーのコストを気にするのはD言語らしくないのでしょうか?
0496デフォルトの名無しさん
2009/11/05(木) 21:58:38組込型はC++のconst T、その他はconst T&相当がデフォルトになるのを希望。
でもまぁ、アラインメント・inline・組み込み関数なんかも整備されないとどうせC++並の
速度は出せないのであまり気にしても仕方ないと思うことにしてる。
0497デフォルトの名無しさん
2009/11/05(木) 22:00:53なんて実際には起こらないかもしれない、ということを期待することができる。
なので、気にせずにどんどんinで値渡ししていいと思うよ
0498デフォルトの名無しさん
2009/11/05(木) 22:09:46レスthx
コンパイラの最適化にまかせておけば良さそうですね。
0499デフォルトの名無しさん
2009/11/05(木) 22:10:42引数を受け取った関数の中でさらに別の関数へ飛んだらその引数の
アドレスの何かが書き換えられるかもしれないと思うんだけど、
そういうのってどうやって判断するの?
0500デフォルトの名無しさん
2009/11/05(木) 22:47:170501デフォルトの名無しさん
2009/11/05(木) 23:10:23auto b = cast(immutable) a;
a.var = "c";
しちゃうぞー
0502デフォルトの名無しさん
2009/11/05(木) 23:54:15引数にimmutableなものを渡したからって引数渡しの方法が変わるとは
思えないんだけど、それってどっかに書かれてる?
0503デフォルトの名無しさん
2009/11/06(金) 00:03:400504デフォルトの名無しさん
2009/11/06(金) 01:22:45inにしたらその引数のアドレスを無理やり取って書き換えるようなことはしてはいけない。
その操作は未定義動作で、最適化によってバグった挙動になっても文句言えない。
でもまぁ現状そういう最適化はされてないみたいで、下記ベンチマークだとfugaの方が3万倍くらい速いみたい。
inの意味が現状のconst refと同じような挙動になればいいなとは思う。
struct XXX{int[0x10000] x;}
size_t gHoge;
void hoge(in XXX x){gHoge += cast(size_t)x.x.ptr;}
size_t gFuga;
void fuga(const ref XXX x){gFuga += cast(size_t)x.x.ptr;}
void main(){
XXX x=void;
foreach (i; 0..100000) hoge(x);
foreach (i; 0..100000) fuga(x);
}
0505デフォルトの名無しさん
2009/11/06(金) 02:57:57関数の引数を弄るとシグネチャが変わってしまったりしてやりづらいのかもしれない
0506デフォルトの名無しさん
2009/11/06(金) 04:17:13ベクトル演算遅いし。自動的に非仮想関数になるはずなのにfinalつけたほうが呼び出し早いし。
0507デフォルトの名無しさん
2009/11/06(金) 04:26:110508デフォルトの名無しさん
2009/11/06(金) 10:54:55その辺はコンパイラが適当に面倒をみてくれる方がいいとおもう
0509デフォルトの名無しさん
2009/11/06(金) 13:18:10引数型のサイズに応じてレジスタ、スタック、参照渡しを使い分けるようなのをだな……
0510デフォルトの名無しさん
2009/11/06(金) 17:25:54Σ(゚Д゚)
初めて知った
0511デフォルトの名無しさん
2009/11/06(金) 17:35:490512デフォルトの名無しさん
2009/11/06(金) 20:13:14キタコレ
0513デフォルトの名無しさん
2009/11/06(金) 23:04:19バグなかなか直らないな
0514デフォルトの名無しさん
2009/11/07(土) 00:51:000515デフォルトの名無しさん
2009/11/07(土) 16:40:29テンプレート絡みのコンパイルエラーのメッセージのわかりにくさってなんとかならないんですかね?
例えば、phobosのファイル名と行番号出されても、どこを修正すればいいのかわかりづらいです。
0516デフォルトの名無しさん
2009/11/07(土) 17:20:07* コンパイラがテンプレート展開のトレースを吐けるようにする
0517デフォルトの名無しさん
2009/11/07(土) 17:53:270518デフォルトの名無しさん
2009/11/07(土) 18:07:27テンプレート展開のトレースがあったら便利だと思うのですが、C++も含めてないですよね。
作るのが難しいんでしょうか。
>>517
呼び出し元の行番号が表示されてくれれば・・・と思うことがよくあります。
0519デフォルトの名無しさん
2009/11/08(日) 00:58:16void func(in int[] arr) // arrは読み取り専用
{ auto r = retro(arr); }
range.d(515): Error: this is not mutable
const配列のRetroは作れないんでしょうか?
0520デフォルトの名無しさん
2009/11/08(日) 04:55:37void func(in int[] arr) // arrは読み取り専用
{ auto r = retro(arr.dup); }
だとどうなる?
現状、retroがmutableしか受け取らないのが問題
0521デフォルトの名無しさん
2009/11/08(日) 12:34:00それならいけました。
しかし、const配列のRetroが作れないのって何か理由があるんでしょうか?
mutableの配列しか作れないのは不便だなぁ。
0522デフォルトの名無しさん
2009/11/08(日) 17:40:20dmd2036
0523デフォルトの名無しさん
2009/11/08(日) 20:00:562034を使っていたのですが、2036にしたらエラーでなくなりましたthx。
0524デフォルトの名無しさん
2009/11/09(月) 01:06:12{ return r.length; }
void main() {
int[] arr;
auto r = retro(arr);
int i = func(r);
}
Error: function std.range.Retro!(int[]).Retro.length () is not callable using argument types ()
in Range rをRange rに変えればエラーは出なくなります。
constのRetroのlengthを呼び出す事はできないのでしょうか?
0525デフォルトの名無しさん
2009/11/09(月) 01:35:27そのためにconst/immutableのところで
immutable性を取り除くキャストは、正しく静的型がついていないくて、 しかもそれが修正できないという場面で必要となってしまうことがあります。
って述べられてる。
0526デフォルトの名無しさん
2009/11/09(月) 08:51:37相当になってて欲しいな
0527デフォルトの名無しさん
2009/11/09(月) 09:01:560528デフォルトの名無しさん
2009/11/09(月) 12:05:55なるほど。
しかし、「lengthがRetroの中身を書き換えないことが明らか」なら、
>>526氏に同じく、constのRetroからlengthを呼び出せるようにして欲しいところです。
試しにrange.dの572行目をsize_t length()からsize_t length() constに変えたら呼び出せるようになりました。
単なるconstつけ忘れなんでしょうかね。
0529デフォルトの名無しさん
2009/11/09(月) 12:08:42ラップされたrangeのlength()がconstでない可能性を考慮するとそう単純な話ではない。
0530デフォルトの名無しさん
2009/11/09(月) 12:12:24それでも読み取り用のlengthはconstであるべきだし,必ずそうできるはずじゃないですか?
そうでなかったとしたら,constメンバ関数は非constメンバ関数とオーバーロードできるので,
せめて両方を定義しておくべきではないかな.
いや,immutableもあるので3つ定義・・・
いやいや,sharedもあるので4つ・・・・
これどうにかしてくれw
0531デフォルトの名無しさん
2009/11/09(月) 12:47:39たとえば、rangeの実体がネットワークの向こう側にあって、lengthの取得に通信が必要な場合、
意味的には何か状態を変更する訳じゃないんだけど、型システム上はconstにできないんだよね。
ちなみに今は(mutable), const, immutable, shared, shared constの5つのオーバーロードを用意する必要があるはず
0532531
2009/11/09(月) 12:50:36rangeのコンストラクタでコネクションを張って、デストラクタで切る、というようなのを想定してた。
0533デフォルトの名無しさん
2009/11/09(月) 12:52:45その5つにコンパイル時定数を加えて全部で6つだなw
0534デフォルトの名無しさん
2009/11/09(月) 12:52:57え?できない?
ダメだ.何でそうなるのかわからない・・・
0535デフォルトの名無しさん
2009/11/09(月) 12:58:470536デフォルトの名無しさん
2009/11/09(月) 13:02:10struct EmptyRange(T) {
enum empty = true;
enum length = 0;
const T front() { assert(0); }
void popFront() { assert(0); }
}
0537528
2009/11/09(月) 14:02:59でも、「const rangeはlengthを呼べません」と言われたら「えっ?」と思ってしまいます。
メンバ関数書く時、C++みたいにconstだけ考えればいいという訳じゃないのは面倒くさいなぁ。
0538デフォルトの名無しさん
2009/11/09(月) 16:11:05enumはオーバーロードセットに加わってくれないみたいだぞ
import std.stdio;
class A{
int f(){writeln("mutable");return 0;}
int f() const {writeln("const");return 0;}
int f() immutable {writeln("immutable");return 0;}
int f() shared {writeln("shared");return 0;}
int f() const shared {writeln("const shared");return 0;}
//enum f = 0;
}
void main(){
(new A).f();
(new const(A)).f();
(new immutable(A)).f();
(new shared(A)).f();
(new shared(const(A))).f();
}
0539デフォルトの名無しさん
2009/11/09(月) 16:33:530540デフォルトの名無しさん
2009/11/09(月) 16:42:03そもそもenumは関数じゃないからオーバーロードできない
>>533が言いたいのは「lengthが定数かもしれないからよきに計らえよ」ってことじゃないの
0541デフォルトの名無しさん
2009/11/09(月) 16:49:23constとconst sharedがいるんじゃね?
0542デフォルトの名無しさん
2009/11/09(月) 17:39:56だとしたら,shared const修飾されたオブジェクトからは,
shared constメンバしか呼べないようにならないといけないってことかい
0543デフォルトの名無しさん
2009/11/09(月) 17:41:29意味的に定数だったらenumを使って構文的にも定数にするケースがあるってことね
オーバーロードの文脈だったからもしかしてできるのかと思ったw
0544デフォルトの名無しさん
2009/11/09(月) 17:47:08enumを使うべきときと,オーバーロードしまくるべきときとはいつも別の場面になりそう
で,話題のlengthはプロパティだからenumでもいいかもしれないけど,
mutableなメンバ関数相当しかない現状からconst性とかを考慮するようにする場合,
lengthをenumで実現することはできなくなるんじゃないかな
0545デフォルトの名無しさん
2009/11/09(月) 17:53:16constで使用されること自体想定されておらず、
読み取り専用で使いたい時はInputRangeを作れっていう事なのかな。
0546デフォルトの名無しさん
2009/11/09(月) 18:39:24toUTCString(UTCtoLocalTime(getUTCtime()))とやっても
Mon, 09 Nov 2009 09:35:44 UTC
みたいになります。
0547デフォルトの名無しさん
2009/11/09(月) 19:56:21randomShuffle(a);
auto b = [1, 2, 3, 4, 5];
randomShuffle(b);
2.036にしたらいきなり後者がシャッフルされなくなって心臓止まった
0548デフォルトの名無しさん
2009/11/09(月) 19:58:570549デフォルトの名無しさん
2009/11/09(月) 22:05:570550デフォルトの名無しさん
2009/11/09(月) 22:25:01そうじゃないかな。sharedとれるのはおかしいし
0551デフォルトの名無しさん
2009/11/09(月) 22:28:17popFrontはレンジの状態を変更するわけだからconstなレンジは先頭を参照するしかできないよ。
constなコンテナはopSlice()でmutableなレンジを返すようにすればforeachに食わせられる
0552デフォルトの名無しさん
2009/11/09(月) 22:29:08toString
0553デフォルトの名無しさん
2009/11/09(月) 22:31:130554デフォルトの名無しさん
2009/11/10(火) 01:10:10toUTCStringになっているのを見落としていました。
しかし、toStringに変えても
Mon Nov 09 15:58:55 GMT+0000 2009
このように日本の時間にならないです。
どうすればいいのでしょうか?
0555デフォルトの名無しさん
2009/11/10(火) 02:10:30順調にお約束や罠が増えてきてるなあ
C++の二の舞だ
0556デフォルトの名無しさん
2009/11/10(火) 02:39:200557デフォルトの名無しさん
2009/11/10(火) 14:31:230558デフォルトの名無しさん
2009/11/10(火) 14:46:100559デフォルトの名無しさん
2009/11/10(火) 16:58:20タイムゾーンの設定してるか?
0561デフォルトの名無しさん
2009/11/10(火) 18:16:07auto b = [1, 2, 3, 4, 5];
randomShuffle(b[]);
こうしなきゃならんのか
今すぐref引数に改められるべき
0562デフォルトの名無しさん
2009/11/10(火) 18:18:09戻り値で返すように統一する方がいいか
0563デフォルトの名無しさん
2009/11/10(火) 18:59:47すみません、タイムゾーンはどこで指定すればいいのでしょうか?
0564デフォルトの名無しさん
2009/11/10(火) 19:03:22std.datebaseをimportすればよいかと。
http://www.digitalmars.com/d/archives/digitalmars/D/learn/D2_phobos_std.date_question_17086.html
0565デフォルトの名無しさん
2009/11/10(火) 19:43:13importしてみましたが、結果は変わりませんでした。
うーん、どこがいけないんでしょうか・・・。
0566デフォルトの名無しさん
2009/11/10(火) 20:12:35import std.stdio;
import std.date;
import std.datebase;
void main()
{
writeln(toString(getUTCtime()));
}
このコードで「Tue Nov 10 20:08:53 GMT+0900 2009」の結果が得られています。
(dmd 2.036 Windows Vista)
お望みの結果はこれで合っていますか?
そちらで同じ結果がでなければdmdのバージョンを上げてみてはいかがでしょう。
他の原因はちょっと思いつかないですね。
0567デフォルトの名無しさん
2009/11/10(火) 20:47:210568デフォルトの名無しさん
2009/11/10(火) 23:06:14環境はdmd 2.036 Windows XPなのですが、そのコードは望む結果(GMT+0900)になりました。
しかし、なぜか自分のプログラムに同じコードを書いてもGMT+0900になりませんでした。
違いと言えば、Cから呼び出せるようにextern(C)したDLLなぐらいだと思うのですが、ここに原因があるのかなぁ。
>>567
タスクバーの右の時刻のところでGMT+0900になっていることを確認しました。
0569デフォルトの名無しさん
2009/11/10(火) 23:10:380570デフォルトの名無しさん
2009/11/10(火) 23:20:000571デフォルトの名無しさん
2009/11/11(水) 15:29:31逆にrefなしで受け取ると呼び出し元に反映されないという罠・・・。
>>547の原因もこの変更が影響してるのかも?
0572デフォルトの名無しさん
2009/11/11(水) 18:29:54* Static arrays are now passed by value to functions rather than by reference
小さな配列を扱うには小気味いいが、大きな固定長配列だと怖いな。
仮引数に配列の長さを指定しなければいいだけの話ではあるが。
0573デフォルトの名無しさん
2009/11/11(水) 18:45:38公式に書いてある通りRuntime.initialize()を呼び出してるだけなのですが、これでは不十分なんでしょうか?
ググるとDllMainで色々やってるのも出てくるのですが、ページの更新日時が古い物も多くて何を信用すればいいのかわからないです。
0574デフォルトの名無しさん
2009/11/11(水) 22:35:07ttp://www.atmarkit.co.jp/news/200911/11/go.html
0575デフォルトの名無しさん
2009/11/11(水) 23:27:100576デフォルトの名無しさん
2009/11/11(水) 23:42:07文法はCというよりPascal風だ。
5年後くらいにD厨vsGo厨とかいう構図になるかもしれんな。
Py厨vsRuby厨みたいな感じで。
0577デフォルトの名無しさん
2009/11/11(水) 23:45:22それとは“違って”革新的なダックタイピング的なものだとすると、
DのRangeで形成されつつあるConcept的な方向性が強化されるかもな。
0578デフォルトの名無しさん
2009/11/12(木) 00:03:110579デフォルトの名無しさん
2009/11/12(木) 00:23:300580デフォルトの名無しさん
2009/11/12(木) 01:37:000581デフォルトの名無しさん
2009/11/12(木) 01:41:59やっぱりVS Goが見えてくるよな
と思ってたら話題になっててワロタ
0582デフォルトの名無しさん
2009/11/12(木) 01:57:09http://anchorage.2ch.net/test/read.cgi/bizplus/1257950853/81
81 名前:名刺は切らしておりまして[sage] 投稿日:2009/11/12(木) 00:58:01 ID:iye+GbXe
>>51
C#やJavaのinterfaceとはまた違うぞ。
C#のinterfaceは対象クラスがinterfaceを実装することを
明示的に記述していなければいけないが、Goだと
ユーザー定義型に対してあるinterface が要求する
メソッドが全て定義されてあれば、型は
そのinterfaceを実装しているとして自動的に看做される。
例えばC#だとinterface IHogeと interface IFugaが同じ
public void foo();を規定するインタフェースであったとしても、
IFugaをインプリメントとしてfoo実装したクラスTのインスタンスは関数
void func1(IHoge arg)
の引数にすることはできんのに対して、
Goだとユーザー定義型がfooを実装していればfunc1の引数にIHoge、IFuga
どちらの制約を要求されていても型のインスタンスは引数となることができる。
・・・・っていう理解であってますかね?
http://golang.org/doc/go_for_cpp_programmers.html
0583デフォルトの名無しさん
2009/11/12(木) 02:01:49Goのinterfaceはすべての関数が実装されていなければならないので,
Dなどのduck typingよりGoのinterfaceの方が制約力は強いってことか.
0584デフォルトの名無しさん
2009/11/12(木) 02:06:222つは何が異なるんだ
0585デフォルトの名無しさん
2009/11/12(木) 02:09:02その変数をIBの変数に代入できるってことかな
継承関係がなくてもいいってところが違う,でいいかな
0586デフォルトの名無しさん
2009/11/12(木) 02:19:380587デフォルトの名無しさん
2009/11/12(木) 02:21:34まーそんなとこだな。
要するにconceptみたいなもの
0588デフォルトの名無しさん
2009/11/12(木) 06:50:39をきれいに書けるようにしたものでしょ。
ダックタイピングを見えないようにするシンタックスシュガー。要するにコンセプト。
0589デフォルトの名無しさん
2009/11/12(木) 10:58:450590デフォルトの名無しさん
2009/11/12(木) 12:37:590591デフォルトの名無しさん
2009/11/12(木) 14:02:17なんて?w
0592デフォルトの名無しさん
2009/11/12(木) 14:33:13http://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D&artnum=100642
0593デフォルトの名無しさん
2009/11/12(木) 16:02:53GlantankでWebアプリ作ってみたりしてる俺には嬉しいぜ
webアプリ用ライブラリとかも充実してたら嬉しいなぁ
0594デフォルトの名無しさん
2009/11/12(木) 19:33:09「そこはDが11年前に通過した場所だッッッ」ってことか
0595デフォルトの名無しさん
2009/11/12(木) 19:46:560596デフォルトの名無しさん
2009/11/12(木) 19:59:40反面コピペコードは増えそうな感じだな。
アダプタでなんとかしろってことなんだろうけど、
その意味ではGoにこそalias thisとかopDotが必要な気がするんだが。あるんだっけ?
D規格のうちからbetter Goなサブセットを組むのは難しくないと思われ。
0597デフォルトの名無しさん
2009/11/12(木) 20:01:36Dにとっての大問題なわけで
goの方が先に完成するならそっちでもいい
0598デフォルトの名無しさん
2009/11/12(木) 20:26:03Goスレ見るとまだまだ終わってないなとは思い直した
しかしここでGoに対抗してDが変にがんばると
よくないような気もする
GoががんばるならDは身を引くべきじゃまいか
0599デフォルトの名無しさん
2009/11/12(木) 20:28:56Googleの事だから物凄い勢いで発展させるか放り出すかのどっちになることやら
0600デフォルトの名無しさん
2009/11/12(木) 20:31:12「無視されるなんてくやしいっ…ビクンビクン」というのも入ってるな
0601デフォルトの名無しさん
2009/11/12(木) 20:50:03> On Wed, Nov 11, 2009 at 11:25 AM, Bill Baxter wrote:
>> But that's a good list. In the video he makes it sound like generics
>> will probably happen eventually, they're just not sure how best to do
>> it yet.
>
> Just noticed, The Language FAQ[1] says the same thing about
> exceptions. They're interested, just not sure how to do it.
>
> [1] http://golang.org/doc/go_lang_faq.html#exceptions
So they are roughly where D was eleven years ago.
One thing I dislike about Go is the incult attitude it fosters.
Apparently its creators weren't aware about the existence of D, which is
quite difficult in this day and age (D is the *second* result when
searching for system programming language with Google after the
obligatory Wikipedia entry, so it takes a lot of effort to dismiss it as
not being "major" and essentially pretend it doesn't exist). The authors
failed to even exercise due diligence - there's a language called Go!
that has even a book written about (the news is all over
http://www.reddit.com/r/programming/).
Also, the language does not make use of many advances that PL technology
has made in the recent years. These things combined are quite indicative
of an attitude towards language design that I highly disapprove of.
Funny detail - one goal is to avoid "stuttering" (one of the first
examples in the video). Yet "Hello, World" defines package main and
function main in the main file, and imports fmt "fmt".
Andrei
0602デフォルトの名無しさん
2009/11/12(木) 21:51:28スレも立たなくなったときが本当に終わったときじゃまいかと
0603デフォルトの名無しさん
2009/11/13(金) 01:12:220604デフォルトの名無しさん
2009/11/13(金) 01:13:20むしろ張り合うべきだろ
0605デフォルトの名無しさん
2009/11/13(金) 01:24:500606デフォルトの名無しさん
2009/11/13(金) 01:50:410607デフォルトの名無しさん
2009/11/13(金) 01:56:560608デフォルトの名無しさん
2009/11/13(金) 02:25:34・Goとほぼ同等のことができて
・Dのサブセット
という規格を考えたが、妄想の中にしまっておくことにした
0609デフォルトの名無しさん
2009/11/13(金) 02:26:27本当にそう言ってるとはw
0610デフォルトの名無しさん
2009/11/13(金) 04:23:07http://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D&artnum=100668
ヲルタン「Google に出向いて二度も D のスピーチしたのに…D のこと聞いたことある人いるかな?
お手上げっピッ! って客席に聞いたらほぼ全員が挙手してくれたのに…無視だなんてくやしいっ…ビクンビクン」
http://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D&artnum=100681
ヲルタン「(∩゚д゚)アーアーきこえなーい」
0611デフォルトの名無しさん
2009/11/13(金) 04:42:42selector(x.f式の記法)が完全にオーバーロードセット的なものになっているが、
構造体の無名フィールドを作るとその型のフィールドとメソッドが外側の構造体のオーバーロードセットに加わることで
これが実装の継承として機能する、ということのようだね。
この仕様はalias thisやopDotより好きかもしれん。
多重継承がかなりやりやすくなる。
が、暗黙の型変換があるほうが好きなのでalias thisもいいなあとか。
集成体メンバなら複数alias thisできれば素敵なのに。
0612デフォルトの名無しさん
2009/11/13(金) 07:43:58Walter Bright wrote:
There's a lot in there we could use in the D library:
http://golang.org/pkg/
ワロタ
0613デフォルトの名無しさん
2009/11/13(金) 10:56:35Dの方は最近どうなの。仕様が固まったり良いことあったりしないのけ。
0614デフォルトの名無しさん
2009/11/13(金) 11:03:12今年中には本を出してD2の仕様を固めて、D3の開発に移行する予定
0615デフォルトの名無しさん
2009/11/13(金) 12:46:450616デフォルトの名無しさん
2009/11/13(金) 12:55:350617デフォルトの名無しさん
2009/11/13(金) 13:01:28alias this相当の機能もあるみたいだぜ
http://golang.org/doc/effective_go.html#embedding
_ とおりすがり (2009-11-13 10:35)
実装の共有は、型の埋め込み(embedding)で表現できるようです。
ttp://www.rubyist.net/~matz/20091113.html#c01
type A struct {
Foo;
x int;
}
コンポジションのように見えますが、このケースでは Foo のメソッドが
A のメソッドとして露出(昇格)するので、明示的な委譲は不要 です。
もちろん、Foo のメソッドを A のメソッドが上書きすることも可能ということで、
今後の発展をニヤニヤしながら見守りたいですね(えらそう)。
0618デフォルトの名無しさん
2009/11/13(金) 13:05:200619デフォルトの名無しさん
2009/11/13(金) 13:34:47ありがとう。D3の仕様が固まりつつある頃にまた戻ってくるかw
0620デフォルトの名無しさん
2009/11/13(金) 14:20:100621デフォルトの名無しさん
2009/11/13(金) 18:04:01うぉるたんが鬱になってないかどうか心配
0622デフォルトの名無しさん
2009/11/13(金) 19:52:23その根拠は説明してるみたいだけどえーご読めねぇや
「この先入れるかも」かもみたいに書いてある気がするけど
誰か翻訳してくれる人はいませんかねぇ……(チラリ
0623デフォルトの名無しさん
2009/11/13(金) 20:06:56複雑になるとかめんどいとかしか書いてないぞ。
0624デフォルトの名無しさん
2009/11/13(金) 21:44:49あ、そうっすか……ありがとうございます。
なんか見れば見るほど全然Dと被ってるようには見えなくなってきたんだけど、
俺が本質を見抜くだけの能力を持ってないだけなんだろうか。
個人的に期待したようなものではなさそうだけど、
Duck Typingとか言語レベルでのConcurrencyとか、
今まで何となく避けてきた概念をじっくり考察してみるかって気にはなってきた。
0625デフォルトの名無しさん
2009/11/13(金) 22:13:20と言ってしまうとDとGoのどっちも当てはまるけど、Dが言語レベルでの堅牢性や最適化の可能性を追求しているのに対して、
Goは「JavaScriptをネイティブで動くようにしてみました」なんて感じの雰囲気がするね。
GoがPythonに似てるとか言われてるけど、設計思想的にはDのほうがPythonに近いと思う。
0626デフォルトの名無しさん
2009/11/13(金) 23:46:030627デフォルトの名無しさん
2009/11/14(土) 00:06:04多少ダメでもないよりはあったほうがずっといいと思うが
0628デフォルトの名無しさん
2009/11/14(土) 00:16:380629デフォルトの名無しさん
2009/11/14(土) 00:19:58そうなの?>蔓延る
異常系のフローを正常系から独立させるのは例外の提唱以前からやられていたことなんだと想像するけど
0630デフォルトの名無しさん
2009/11/14(土) 00:31:05それをやってライブラリ同士を組み合わせて使用するのが難しくなるのが問題なんだよ
0631デフォルトの名無しさん
2009/11/14(土) 00:36:500632デフォルトの名無しさん
2009/11/14(土) 02:36:490633デフォルトの名無しさん
2009/11/14(土) 02:56:37面白いけどググりにくいなやっぱ。
0634デフォルトの名無しさん
2009/11/14(土) 12:37:510635デフォルトの名無しさん
2009/11/14(土) 14:23:42そこは「わが社の優秀な検索エンジンならこのとおり!」じゃね?
0636デフォルトの名無しさん
2009/11/14(土) 18:10:190637デフォルトの名無しさん
2009/11/14(土) 19:31:59公式はでるんだろうけど、その他のサイトとかがでない。
0638デフォルトの名無しさん
2009/11/14(土) 21:48:220639デフォルトの名無しさん
2009/11/15(日) 02:14:230640デフォルトの名無しさん
2009/11/16(月) 03:33:57- opPow, opDollarくれ
- 配列リテラルはimmutableにしてくれ
- ついでに配列リテラルの型も変えたい
- new廃止しようぜ
- typedef廃止しようぜ
- Cスタイルの関数宣言/配列宣言廃止しようぜ
- Goのあの機能いいよな
0641デフォルトの名無しさん
2009/11/16(月) 12:17:090642デフォルトの名無しさん
2009/11/16(月) 12:50:500643デフォルトの名無しさん
2009/11/16(月) 18:02:43これらも気になる
- switchはデフォルトbreakにしよう
- Cocurrencyそろそろ入るかも(Created by Sean?)
- Phobosにコレクション入れよう
- TangoはSeanとDonの部分はBoostライセンスOKなので問題は他
- foreachはRangeのindexとれるべき
opPowとか途中から追ってないんだけど結局どうなったの?
opPowは入っても他のオブジェクトでの使い道がいまいち
0644デフォルトの名無しさん
2009/11/16(月) 19:01:26これいつ書いても「誰かがやってるだろ」で誰もやらないんだよなw
0645デフォルトの名無しさん
2009/11/16(月) 21:12:290646デフォルトの名無しさん
2009/11/18(水) 11:46:210647デフォルトの名無しさん
2009/11/18(水) 18:09:16import std.algorithm;
import std.iterator;
auto r = find(range, value);
if(!r.empty){
index = begin(r) - begin(range);
}else{
...}
もっとすっきりと書く方法はないですか?
0648デフォルトの名無しさん
2009/11/18(水) 18:46:51仮に配列以外にイテレータが実装されたとしても、イテレータの差は求められるとは限らないからなあ。
0649デフォルトの名無しさん
2009/11/18(水) 18:50:35なるほど、rangeが何であるかによって>>647の方法も使えないんですね。
std.string.indexOfのような物が欲しい。
0650デフォルトの名無しさん
2009/11/18(水) 20:02:040651デフォルトの名無しさん
2009/11/18(水) 22:37:340652デフォルトの名無しさん
2009/11/18(水) 22:44:140653デフォルトの名無しさん
2009/11/18(水) 23:35:230654デフォルトの名無しさん
2009/11/19(木) 02:28:43これしか思いつかん
0655デフォルトの名無しさん
2009/11/19(木) 02:34:460656デフォルトの名無しさん
2009/11/19(木) 04:37:360657デフォルトの名無しさん
2009/11/19(木) 11:04:49そんなものがあったのか
0658デフォルトの名無しさん
2009/11/19(木) 15:29:18なるほど、untilが使えるんですね。
>>656
C++のstd::distance的な物ですね。
しかし、検索した要素のインデックスを得る処理に使う関数の名前がuntilというのも・・・。
やはりindexOfのような物がry
0659デフォルトの名無しさん
2009/11/22(日) 00:00:360660デフォルトの名無しさん
2009/11/22(日) 00:22:29今回の更新は期待大だ
0661デフォルトの名無しさん
2009/11/22(日) 01:04:330662デフォルトの名無しさん
2009/11/22(日) 03:48:58複数の区切り文字で分割したい時はどうやればよいのでしょう?
例えば" "または","を区切り文字として分割したいです。
0663デフォルトの名無しさん
2009/11/22(日) 03:51:100664デフォルトの名無しさん
2009/11/22(日) 04:18:50ありです。
std.string.splitは簡易版なんですね。
0665デフォルトの名無しさん
2009/11/22(日) 06:06:570666デフォルトの名無しさん
2009/11/22(日) 06:22:43だよね
いままでのんびりしすぎてたんだ
もっと危機感もってやらないと
0667デフォルトの名無しさん
2009/11/22(日) 08:21:40$(LI Conditional expressions ?: can now be modifiable lvalues.)
$(LI The type inferred from an
$(LINK2 expression.html#ArrayLiteral, $(I ArrayLiteral))
is now a dynamic array, not a static one.)
$(LI Added support for $(I op)= for array.length)
$(LI Array and associative array types are now determined by using ?: across
all the elements, not just using the first one.)
$(LI Array concatenation with elements now allows implicit conversion of
the elements to the array element type.)
$(LI No more comma operators allowed between [ ].)
$(LI ClassInfo now merged into TypeInfo_Class.)
$(LI $(BUGZILLA 3380): [tdpl] typeid(obj) should return the dynamic type of the object)
)
$(BUGSFIXED
$(LI $(BUGZILLA 111): appending a dchar to a char[])
$(LI $(BUGZILLA 3375): [tdpl] Ternary operator doesn't yield an lvalue)
0668デフォルトの名無しさん
2009/11/22(日) 08:24:29[1,2,3][]とかしなくてもいいぞ
0669デフォルトの名無しさん
2009/11/22(日) 08:30:180670デフォルトの名無しさん
2009/11/22(日) 08:45:26それでも性的配列にはならないだろう
0671デフォルトの名無しさん
2009/11/22(日) 08:58:350672デフォルトの名無しさん
2009/11/22(日) 09:00:17int[3] a; a[] = [1,2,3];
int[3] b = [1,2,3];
どっちかでいいんじゃないの
0673デフォルトの名無しさん
2009/11/22(日) 10:10:350674デフォルトの名無しさん
2009/11/22(日) 18:51:25分ける構文も思いつかない
0675デフォルトの名無しさん
2009/11/23(月) 00:50:55ttp://www.digitalmars.com/d/archives/D/gnu/Update_of_gdc_status_of_2009_10_04_3516.html
0676デフォルトの名無しさん
2009/11/23(月) 07:59:40とか
0677デフォルトの名無しさん
2009/11/23(月) 08:18:30import std.math;
struct pow {
static auto opDiv_r(T)(T x) {
struct S {
T x;
auto opDiv(T)(T y) {
return std.math.pow(x, y);
}
}
return S(x);
}
}
void main() {
writeln(2. /pow/ 3);
}
0678デフォルトの名無しさん
2009/11/23(月) 08:44:230679デフォルトの名無しさん
2009/11/23(月) 19:52:060680デフォルトの名無しさん
2009/11/23(月) 20:23:04auto b=[1,2,3];
これでどう?
0681デフォルトの名無しさん
2009/11/24(火) 12:49:010682デフォルトの名無しさん
2009/11/24(火) 18:10:55auto file = new std.stream.File("hoge", FileMode.In);
/* ここでTの型によって様々な処理 */
file.read(t);
}
ここでTがenum型Hogeである時、下記のエラーがでます。
Error: function std.stream.Stream.read called with argument types:((Hoge))
matches both:
std.stream.Stream.read(out int x)
and:
std.stream.Stream.read(out dchar x)
std.traitsにenumを判別する物がなく、enumの時だけ処理を挟む事もできなくて困っています。
このオーバーロードのエラーを解決するにはどうすればいいのでしょうか?
0683デフォルトの名無しさん
2009/11/24(火) 20:11:44static if( is( T == enum) ) ...
とかで分岐して、
file.read(cast(int)t);
型を明示して呼び出せばとかなんとか
0684デフォルトの名無しさん
2009/11/24(火) 20:28:02ありがとうございます。
static if( is( T == enum) ) .と簡単に判別できたんですね。
0685デフォルトの名無しさん
2009/11/24(火) 20:40:49static if( is(T X == enum) ) ...
とかするといいよ
0686デフォルトの名無しさん
2009/11/24(火) 21:23:55大丈夫、D1は変わってない
ごめんやっぱり大丈夫じゃない
0687デフォルトの名無しさん
2009/11/25(水) 03:32:16このエラーの箇所はどうやって特定するのが効率的でしょうか?
コードを目で追って、述語を使う関数に実引数Hoge型変数とchar[]型変数を渡して呼び出しているところを探す方法しか思いつきません・・・。
0688デフォルトの名無しさん
2009/11/25(水) 16:42:250689デフォルトの名無しさん
2009/11/25(水) 18:21:06それしかないですか・・・。
実引数の型名は分かってもインスタンス名は分からないし、"a == b"もデフォルトだから省略して書いてるだろうし、検索できないのがつらい・・・。
0690デフォルトの名無しさん
2009/11/25(水) 19:19:39どこまでコンパイルが進んでからエラーになったか確認すれば
どこがおかしいか分かるかもしれない
0691デフォルトの名無しさん
2009/11/25(水) 19:43:080692デフォルトの名無しさん
2009/11/25(水) 20:40:060693デフォルトの名無しさん
2009/11/25(水) 20:53:260694デフォルトの名無しさん
2009/11/25(水) 20:58:110695デフォルトの名無しさん
2009/11/25(水) 21:02:570696デフォルトの名無しさん
2009/11/25(水) 21:05:17VCならインスタンス化したとことエラーになったとこの両方を出してくれる
0697デフォルトの名無しさん
2009/11/25(水) 21:06:44型を渡したら型名出してくれるとか
0698デフォルトの名無しさん
2009/11/25(水) 21:19:48stringof
0699デフォルトの名無しさん
2009/11/25(水) 21:31:54でも
template Te(T) { pragma (msg, T.stringof); }
mixin Te!(int);
とやっても"int"とは出………るじゃないか
"T"って出て途方に暮れたような記憶があるがさてはスタンド攻撃か
0700デフォルトの名無しさん
2009/11/25(水) 21:42:59それいつの間にか直ってたね
俺もこないだ気づいた。
0701デフォルトの名無しさん
2009/11/26(木) 00:45:090702デフォルトの名無しさん
2009/11/26(木) 13:15:540703デフォルトの名無しさん
2009/11/28(土) 02:28:18{
In = "r", /// 読込用
OutNew = "w", /// 書込用
Append = "a", /// 追記用
}
Error: Integer constant expression expected instead of "r"
Error: Integer constant expression expected instead of "w"
Error: Integer constant expression expected instead of "a"
Error: Integer constant expression expected instead of "r"
Error: Integer constant expression expected instead of "w"
Error: Integer constant expression expected instead of "a"
どこが不正なのでしょう?
0704デフォルトの名無しさん
2009/11/28(土) 03:14:280705デフォルトの名無しさん
2009/11/28(土) 03:20:18なんかenumおかしいな
0706デフォルトの名無しさん
2009/11/28(土) 05:32:570707デフォルトの名無しさん
2009/11/28(土) 08:41:13"dynamic classes and duck typing" - Walter
One thing Java and Python, Ruby, etc., still hold over D is dynamic classes, i.e. classes that are only known at runtime, not compile time. In D, this:
s.foo(3);
could be emulated with:
s.dynamicMethod("foo", 3);
Unfortunately, that makes it impossible to use s with generic code (besides looking unappealing). But with a small feature, we can make this work:
struct S
{
...
T opDynamic(s : string)(args...);
}
and then s.foo(3), if foo is not a compile time member of s, is rewritten as:
s.opDynamic!("foo")(3);
and opDynamic defers all the nuts-and-bolts of making this work out of the language and into the library.
In particular, opDynamic's parameter and return types should all be instances of std.variant.
(This has come up in various forms in this n.g. before, but I don't have any references handy.)
0708デフォルトの名無しさん
2009/11/28(土) 08:59:060709デフォルトの名無しさん
2009/11/28(土) 09:32:470710デフォルトの名無しさん
2009/11/28(土) 10:10:150711デフォルトの名無しさん
2009/11/28(土) 10:16:380712デフォルトの名無しさん
2009/11/28(土) 11:11:52文字列でいいだろ
0713デフォルトの名無しさん
2009/11/28(土) 12:03:51読むのが怖いので誰か翻訳コンニャクを
0714デフォルトの名無しさん
2009/11/28(土) 13:03:18E4X級の離れ業ができればともかく、要素名で参照できる程度じゃあまり役に立ちそうにないな
0715デフォルトの名無しさん
2009/11/28(土) 18:19:180716デフォルトの名無しさん
2009/11/29(日) 06:03:26違うな。
C#はランタイムリフレクションを使うが、あくまでDはコンパイルに決定される
0717デフォルトの名無しさん
2009/11/29(日) 11:24:07T hoge(T)(T p){ return p; } まで推論してくれないかなあ
0718デフォルトの名無しさん
2009/11/29(日) 11:35:52パースするのに都合が悪いな
auto hoge(auto p) { return p; }
ぐらいならできるだろうが
0719デフォルトの名無しさん
2009/11/29(日) 12:18:49継続みたいなちょっと面白そうな気がしたんだけど
0720デフォルトの名無しさん
2009/11/29(日) 15:22:12外へ出すのはかまわないだろうが、opApplyから帰った後に呼ぶのはまずそう
0721デフォルトの名無しさん
2009/11/29(日) 15:45:47そんなことよりD2の安定化はまだですか…?
0722デフォルトの名無しさん
2009/11/29(日) 15:48:270723デフォルトの名無しさん
2009/11/29(日) 16:51:26│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘ おっぱい!おっぱい!
0724デフォルトの名無しさん
2009/11/29(日) 21:14:00Dで手っ取り早くコンソール(Windows)に日本語を出力しようと思ったら、
PhobosじゃなくてTangoを使ったほうがいいの?
writefln(toMBSz("日本語", 932));
とかやってもだめだったから、Tangoがこのへん頑張ってくれてるなら切り替えるつもり
0725デフォルトの名無しさん
2009/11/29(日) 21:28:11まあtangoの方がいいかも
しかし今時D1ってのもなぁ
0726デフォルトの名無しさん
2009/11/29(日) 21:57:52でいい
0727デフォルトの名無しさん
2009/11/29(日) 22:00:350728デフォルトの名無しさん
2009/11/29(日) 22:56:35お馬鹿さん!俺のお馬鹿さん!
0729デフォルトの名無しさん
2009/11/30(月) 00:21:090730デフォルトの名無しさん
2009/11/30(月) 00:44:120731デフォルトの名無しさん
2009/11/30(月) 09:16:53.net嫌いじゃないならPowerShellもutf16
出力だけならput(wchar) {WriteConsole.. }でrange対応できるかもな
0732デフォルトの名無しさん
2009/11/30(月) 09:42:34struct Con
{
import std.c.windows.windows;
void put(wchar a) { WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), &a, 1, null, null); }
}
void main()
{
copy("日本語"w, Con());
}
0733デフォルトの名無しさん
2009/11/30(月) 10:44:40struct Con
{
import std.c.windows.windows;
void put(wchar a) { WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), &a, 1, null, null); }
wchar front() { return ib; }
private wchar ib;
bool empty()
{
if (ib == 26) return false;
DWORD rn;
ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), &ib, 1, &rn, null);
return ib == 26; // eof
}
void popFront() {}
}
void main()
{
auto buffer = new wchar[10];
copy(take(10, Con()), buffer[]);
copy(buffer, Con());
}
入力にも対応した
0734デフォルトの名無しさん
2009/11/30(月) 10:53:51empty間違えてた
0735デフォルトの名無しさん
2009/11/30(月) 17:09:410736デフォルトの名無しさん
2009/11/30(月) 18:57:58{
void putc(dchar c) { Con().put(std.utf.toUTF16([c])[0]); }
std.format.doFormat(&putc, _arguments, _argptr);
}
0737デフォルトの名無しさん
2009/11/30(月) 19:07:490738デフォルトの名無しさん
2009/11/30(月) 21:04:06同意
0739デフォルトの名無しさん
2009/11/30(月) 21:50:570740デフォルトの名無しさん
2009/12/01(火) 05:14:15だってそれshellやん。コンソールが対応せな意味ない
0741デフォルトの名無しさん
2009/12/01(火) 14:34:38UTF-8のstringにうまく直せませんorz
s ~= std.windows.charset.fromMBSz( (std.conv.to!(string)( c ) ~ "\0").ptr );
何かいい方法はないでしょうか?
0742デフォルトの名無しさん
2009/12/01(火) 17:58:53string s = fromMBSz(cast(immutable char*)read("hoge.txt"));
0743741
2009/12/01(火) 20:41:01やはりマルチバイト文字だと文字コードの途中なため、
うまく直せないのかな?
0744デフォルトの名無しさん
2009/12/01(火) 22:04:56そりゃ無理だろ。普通に考えて
0745デフォルトの名無しさん
2009/12/02(水) 06:20:44std.randomのMTがfrontとpopFrontのなかで、
『ちゃんと初期化されてるかチェック』してるのが気持ち悪い(速度にも影響するだろうし)。
コンストラクタで初期化できれば必要なくなるのに……。
0746デフォルトの名無しさん
2009/12/02(水) 09:13:310747デフォルトの名無しさん
2009/12/02(水) 10:55:04初期化のチェックを省くのは class で作り直すか
言語の仕様変更がないと無理なんじゃないか?
あと多分 >746、 >745 は
「コンストラクタが引数をとれない〜」は
「引数を取れないコンストラクタが作れない〜」の
書き間違いの予感
std.random の MersenneTwisterEngine は引数ありの
コンストラクタが書いてあったので見てるはず
俺は書けない理由は分からないな
書きにくくしてあまり使われないようにしてるとかかな?
0748747
2009/12/02(水) 11:05:37書きこむ前にアルゴリズムの勉強が必要だった予感がしてきた
0749747
2009/12/02(水) 11:25:29俺のレスは全部なかった事に…orz
746もわかってあのツッコミだったのかな、スマヌ
でもチェック無くすにはstructじゃなくてclassなら出来るのと
今のstructの仕様だと引数無しのコンストラクタが書けても
front, popFront初期化チェックが省けないのは間違ってないよね?
コンストラクタ使わなくてもインスタンス化出来るんだし…
0750745
2009/12/02(水) 14:40:42いや、書き間違いです。全体的にその理解で合ってます申し訳ない。やっぱ人間寝ないと駄目だな……。
C++だと呼び出しなしのインスタンス化=引数無しのコンストラクタ呼び出しだったはずだから、そうなってないのは何でかなと。
POD型は"自明な"コンストラクタとデストラクタを持った型、らしいから、
そもそも構造体のコンストラクタは引数をそのままデータメンバに与えるような使い方しか想定してないってことかなあ。
0751デフォルトの名無しさん
2009/12/03(木) 00:01:510752デフォルトの名無しさん
2009/12/04(金) 11:31:560753デフォルトの名無しさん
2009/12/05(土) 13:35:27New/Changed Features
* Conditional expressions ?: can now be modifiable lvalues.
* The type inferred from an ArrayLiteral is now a dynamic array, not a static one.
* Added support for op= for array.length
* Array and associative array types are now determined by using ?: across all the elements, not just using the first one.
* Array concatenation with elements now allows implicit conversion of the elements to the array element type.
* No more comma operators allowed between [ ].
* ClassInfo now merged into TypeInfo_Class.
* Bugzilla 3379: [tdpl] Parameter names not visible in the if clause of a template
* Bugzilla 3380: [tdpl] typeid(obj) should return the dynamic type of the object
* Removed -safe command line switch, added -noboundscheck command line switch.
* Bugzilla 3481: PATCH: opPow(), x ^^ y as a power operator
* Added opDispatch
* properties can only have 0 or 1 arguments
* properties cannot be overloaded with non-properties
* std.math: Added FloatControl, IeeeFlags for enabling floating-point exceptions.
* std.math: Inverse trig functions are now pure nothrow.
0754デフォルトの名無しさん
2009/12/05(土) 13:52:320755デフォルトの名無しさん
2009/12/05(土) 13:53:19-safeがいつまで経ってもまともに使えるようにならないと思ったら
0756デフォルトの名無しさん
2009/12/05(土) 16:49:23お、嬉しい。けどプロパティ全般じゃなくて、配列長だけなのか……。
0757デフォルトの名無しさん
2009/12/05(土) 21:33:440758デフォルトの名無しさん
2009/12/05(土) 22:26:490759デフォルトの名無しさん
2009/12/05(土) 22:29:250760デフォルトの名無しさん
2009/12/05(土) 22:36:270761デフォルトの名無しさん
2009/12/05(土) 23:20:160762デフォルトの名無しさん
2009/12/05(土) 23:26:550763デフォルトの名無しさん
2009/12/06(日) 02:15:42char[] hoge;
hoges = remove!((char[] a){ return a == hoge; })(hoges);
Error: template instance remove is not a template declaration, it is a overloadset
2.037を入れたら既存のコードがコンパイルエラーになってしまいました。
どう修正すればいいのでしょうか?
0764デフォルトの名無しさん
2009/12/06(日) 04:04:310765デフォルトの名無しさん
2009/12/06(日) 04:06:100766デフォルトの名無しさん
2009/12/06(日) 07:56:05Unicodeシンボルって怖いよね
0767デフォルトの名無しさん
2009/12/06(日) 08:00:310768デフォルトの名無しさん
2009/12/06(日) 11:44:50片方removeAtとかにすればいいのに
0769デフォルトの名無しさん
2009/12/06(日) 22:33:54algorithm.dを見ても引数1つのremoveは1つしかないのに・・・と不思議に思います。
とりあえず古いverに戻す事にします。どうもでした。
0770デフォルトの名無しさん
2009/12/06(日) 23:16:21とかしてもだめなの?
0771デフォルトの名無しさん
2009/12/06(日) 23:44:49モジュール間ではオーバーロードセットを形成できないから関係ないと思うよ
0772デフォルトの名無しさん
2009/12/07(月) 00:11:27thx
それをやったらエラーが出なくなりました。
そしてもう1つ、2.036から2.037にした事によって出るエラーが・・・。
Error 42: Symbol Undefined _D9ClassInfo6__vtblZ
原因がわからないのでやっぱり2.036に戻すことにします。
0773デフォルトの名無しさん
2009/12/07(月) 00:48:210774デフォルトの名無しさん
2009/12/07(月) 00:51:42ChangeLogにあるけど,ClassInfoはTypeInfoにマージされたからそれの影響かと
0775デフォルトの名無しさん
2009/12/07(月) 12:13:500776デフォルトの名無しさん
2009/12/07(月) 12:54:210777デフォルトの名無しさん
2009/12/08(火) 05:20:20void foo(ref Hoge hoge){...}
void main(){
Hoge hoge;
hoge.foo();
}
D言語って関数をメンバ関数風に呼び出す事ってできませんでしたっけ?
エラーが出てしまいます。
Error: no property 'foo' for type 'Hoge'
Error: function expected before (), not __error of type int
0778デフォルトの名無しさん
2009/12/08(火) 05:29:01配列だけじゃない?
0779デフォルトの名無しさん
2009/12/08(火) 06:05:41どうもです。
配列だけかー。
0780デフォルトの名無しさん
2009/12/09(水) 03:52:040781デフォルトの名無しさん
2009/12/09(水) 04:03:20サマリなんて後からでも書き直せるし正直適当でいい
"Foo is wrong"みたいなのでも全然おk
0782デフォルトの名無しさん
2009/12/09(水) 04:28:390783デフォルトの名無しさん
2009/12/09(水) 04:47:51重複なんて後からduplicateとしてマークできるから正直適当でいい
むしろ何個も重複してる方がぱっと見て重要だとわかるから全然おk
0784デフォルトの名無しさん
2009/12/09(水) 05:40:04int x;
void foo(int y){
x = y;
}
}
void main(){
Hoge hoge;
int n = 10;
static if (is(hoge.foo(n))){
hoge.foo(n);
}else{
assert(0);
}
}
hogeが「int型の引数を1つ取るメンバ関数foo」を持っているかどうかで分岐(ダックタイピング?)をしたいんですが、
この例ではassert(0)の方を実行して止まってしまいます。
どのように書けばいいのでしょうか?
0785デフォルトの名無しさん
2009/12/09(水) 05:56:540786デフォルトの名無しさん
2009/12/09(水) 06:13:55でいいよ
0787デフォルトの名無しさん
2009/12/09(水) 06:41:57ありがとうございます。
関数リテラルに入れてそれを呼び出して戻り値の型を取得してis式で判定という流れになるのでしょうか。
結構ややこしいですね。
0788デフォルトの名無しさん
2009/12/09(水) 07:21:39でいいんじゃない?
戻り値のvoid型をisでtrueにしてくれた気がする
後ろの括弧の数がこんがらがってきた
0789デフォルトの名無しさん
2009/12/10(木) 10:14:18なるほど。存在するか調べる物が1つだけなら関数リテラルに入れる必要はないんですね。
0790デフォルトの名無しさん
2009/12/11(金) 21:22:060791デフォルトの名無しさん
2009/12/11(金) 21:31:37全部小文字が望ましいとか書いてあるの総スルーww
0792デフォルトの名無しさん
2009/12/11(金) 21:54:290793デフォルトの名無しさん
2009/12/12(土) 05:32:310794デフォルトの名無しさん
2009/12/12(土) 14:41:55モジュールスコープに識別子ばらまきたくなかったら全部structに放り込めばいいよ
0795デフォルトの名無しさん
2009/12/12(土) 15:34:28static importとかの対処はユーザ任せのほうが……。
命名に大文字入ってるのは気持ち悪いから、識別子とか関係なくコンパイルエラーにしようぜ、って話ならもうこのさい賛成。
0796デフォルトの名無しさん
2009/12/12(土) 16:25:17static import推奨でないといけない理由がわからない
0797デフォルトの名無しさん
2009/12/13(日) 23:17:12http://www.digitalmars.com/d/2.0/memory.html#stackclass
Dにむらむらしてきた。
何年も遅れててごめんw
0798デフォルトの名無しさん
2009/12/14(月) 01:09:08ただし実装されてな(ゲフンゲフン
0799デフォルトの名無しさん
2009/12/14(月) 01:21:34いや、実装されてるっぽいよ?
// 検証コード
import std.stdio;
class C{int[50] a;}
void main(){
int a;
int b;
scope c = new C;
int d;
writeln(&a);
writeln("\t", cast(ubyte*)&b - cast(ubyte*)&a);
writeln(&b);
writeln("\t", cast(ubyte*)c - cast(ubyte*)&b);
writeln(cast(void*)c);
writeln("\t", cast(ubyte*)&d - cast(ubyte*)c);
writeln(&d);
}
0800デフォルトの名無しさん
2009/12/14(月) 07:57:09struct Hoge { int x, y, z; }
Hoge[char[]] hoges;
hoges["aaa"].x = 1;
hoges["aaa"].y = 2;
hoges["aaa"].z = 3;
Hogeの各メンバ変数に代入したいのですが、キー"aaa"が3回探索されて効率が悪そうです。
どのように書けばいいのでしょうか?
0801デフォルトの名無しさん
2009/12/14(月) 07:59:11それはぬるぽだろう
0802デフォルトの名無しさん
2009/12/14(月) 08:16:49hoges["aaa"] = Hoge(1, 2, 3);
あるいは
hoges["aaa"] = Hoge.init;
with(hoges["aaa"]) {
x = 1; y = 2; z = 3;
}
とかでいいんじゃないか
0803デフォルトの名無しさん
2009/12/14(月) 08:33:08with文は初めて知りました。
ありがとうございました。
0804デフォルトの名無しさん
2009/12/14(月) 21:39:58構造体だからいいんじゃないの?
withって単純に書き換えるわけじゃなくてちゃんとインスタンスを参照するのね
0805デフォルトの名無しさん
2009/12/14(月) 21:56:380806デフォルトの名無しさん
2009/12/14(月) 22:10:51import std.c.windows.windows, std.windows.charset, std.cstream;
string foo() {
char[260] buf;
GetModuleFileNameA(GetModuleHandleA(null), buf.ptr, buf.length);
printf("%08x\n", cast(int)buf.ptr);
return fromMBSz(buf.ptr)//.dup;
}
void main() {
string a = foo();
printf("%08x\n", cast(int)a.ptr);
dout.writeLine(a);
}
0807デフォルトの名無しさん
2009/12/14(月) 22:28:54あとbufが使いまわされた場合も危険
const string text;
static this() {
char[260] buf;
GetModuleFileNameA(GetModuleHandleA(null), buf.ptr, buf.length);
text = fromMBSz(buf.ptr);//.dup;
buf[5] = '\0';
derr.writeLine(text);
}
0808デフォルトの名無しさん
2009/12/14(月) 22:45:33fromMBSzは文字列が全部ASCIIの場合、引数をそのまま返す。
D2なら第1引数はimmutable型になってるはず
0809デフォルトの名無しさん
2009/12/14(月) 22:57:03Copy-on-Writeはポインタを渡しているので関係ないかと、思っただけです。
0810デフォルトの名無しさん
2009/12/14(月) 23:11:21途中でGCに回収されて落ちた思い出
0811デフォルトの名無しさん
2009/12/18(金) 00:14:50private import tango.io.Console;
private import tango.net.http.HttpGet;
void main (char[][] args)
{
char[] url = (args.length is 2) ? args[1] : "http://www.digitalmars.com/d/intro.html";
// open a web-page for reading (see HttpPost for writing)
auto page = new HttpGet (url);
// retrieve and flush display content
Cout (cast(char[]) page.read) ();
}
0812デフォルトの名無しさん
2009/12/18(金) 00:43:14trunk最新版だからか、普通に正常動作しました。
HttpGetは5月に一度read関数の中身に修正が入っています。
(fixed bug related to missing Content-Length header)
以下のようにして表示できたらこのせいかと。
// open a web-page for reading (see HttpPost for writing)
auto page = new HttpGet (url);
// retrieve and flush display content
auto buf = page.open();
scope (exit) buf.close;
buf.load(page.getResponseHeaders.getInt(HttpHeader.ContentLength));
Cout(cast(char[])buf.slice)();
0813デフォルトの名無しさん
2009/12/18(金) 01:08:55ありがとうございます。
修正してみましたが、やはり終了できません。
Coutで正常にDLしてきたデータが表示されるのですが、その後反応しなくなり、強制終了が必要になります。
page.close;なども試してみたのですが、やはり上手くいきませんでした。
私の環境がおかしいのでしょうか…
0814デフォルトの名無しさん
2009/12/18(金) 01:32:52特にバージョンにこだわる理由がないのなら、dmdを最新にして、
Tangoもtrunkを試してみるといいと思うよ。
ソース: ttp://www.dsource.org/projects/tango/browser/trunk
インストール方法: ttp://www.dsource.org/projects/tango/wiki/CombineBuildInstructions
0815デフォルトの名無しさん
2009/12/18(金) 04:04:550816デフォルトの名無しさん
2009/12/18(金) 04:13:47バージョンアップしてもダメなら、Connection: close送るようにすれば
0817デフォルトの名無しさん
2009/12/18(金) 10:40:43なるほどなるほどなるほど
0818デフォルトの名無しさん
2009/12/19(土) 01:36:370819デフォルトの名無しさん
2009/12/19(土) 05:09:43必要があってJを付けたんじゃないか
0820デフォルトの名無しさん
2009/12/19(土) 11:31:44めんどくさかったら応答ファイルに-J.とか書いとけばいいんじゃね
0821デフォルトの名無しさん
2009/12/20(日) 01:39:23DescentもCBも微妙だったので…。
0822デフォルトの名無しさん
2009/12/20(日) 02:38:49たまに他の言語でIDE使うと涙が止まらなくなる
0823デフォルトの名無しさん
2009/12/20(日) 02:53:11VisualStudioか……何もかも皆懐かしい……
0824デフォルトの名無しさん
2009/12/20(日) 09:49:220825デフォルトの名無しさん
2009/12/20(日) 17:28:260826821
2009/12/20(日) 17:44:070827デフォルトの名無しさん
2009/12/20(日) 17:57:200828デフォルトの名無しさん
2009/12/20(日) 19:45:57よし、自分でIDEを作るんだ
そのためのやる気を出してもらうために誰か>>826にIDEを
0829デフォルトの名無しさん
2009/12/20(日) 19:51:270830デフォルトの名無しさん
2009/12/20(日) 21:28:410831デフォルトの名無しさん
2009/12/20(日) 22:17:310832デフォルトの名無しさん
2009/12/20(日) 23:55:07同梱のwindbgがことある毎に落ちるのでMSは流石だと思った
0833デフォルトの名無しさん
2009/12/21(月) 00:22:09それを加味してもPC上のツールとしてはDのツール周りは
アッドホックすぎるきらいがある
0834デフォルトの名無しさん
2009/12/21(月) 01:18:450835デフォルトの名無しさん
2009/12/21(月) 01:47:100836デフォルトの名無しさん
2009/12/21(月) 03:03:03D言語を普通にインデントできるエディタがあったら教えて欲しい
WindowsでもLinuxでもかまわない
0837デフォルトの名無しさん
2009/12/21(月) 03:06:40gVimは対応してたよ。
0838836
2009/12/21(月) 03:15:21d-mode.elはin/out/bodyでインデントがおかしくなってしまった。
0839デフォルトの名無しさん
2009/12/21(月) 03:47:33前の行と同じインデントになるってのだったらいくらでもあるだろう。
普通のテキストエディタの強みは、動作が単純なことにあるとおもうよ。
ところで、in/out/bodyってどんなインデントにしたらキレイに見えるんだ?
0840デフォルトの名無しさん
2009/12/21(月) 04:04:15前の行のインデントを覚えるのは当然として、
少なくとも{で一個インデントされて、}で一個デインデントされるのを期待してる。
それから文字列とコメントを正しく認識してほしい。
まあ、普通のプログラミング用のエディタならできそうなもんなんだけど、
汎用エディタでDの文法に完全に対応してるのは見たことない。
in/out/bodyは俺ならこんな感じで書くかな:
auto func()
→in {
→→//
→} out {
→→//
→} body {
→→//
→}
0841デフォルトの名無しさん
2009/12/21(月) 04:29:38俺はこう書いてる
auto func()
in
{
// do stuff
}
out(result)
{
// do stuff
}
body
{
// do stuff
}
0842デフォルトの名無しさん
2009/12/21(月) 04:49:58in/out/body以外にも、concept-ifとかも困るよね。
0843デフォルトの名無しさん
2009/12/21(月) 06:05:13いっそbodyと書くことを強要してくれれば納得できるのに
0844デフォルトの名無しさん
2009/12/21(月) 06:27:26ドキュメントに自動で反映させるとかしないことには。
0845デフォルトの名無しさん
2009/12/21(月) 07:04:43知ってるか、overrideというものがあるんだぜ
0846デフォルトの名無しさん
2009/12/21(月) 07:53:25そういえばそんなものがあったな。
恩恵に預かったことがないから忘れていた。
0847デフォルトの名無しさん
2009/12/21(月) 08:30:24}
else
{
とか見るとぶち殺したくなるんだが、
このコーディングスタイルって一体何が嬉しいんだ?
0848デフォルトの名無しさん
2009/12/21(月) 08:48:13void func()
{
}
形式は.hと.cを行き来するのに楽なのでC書くときはよく使う
でもelseは
} else {
0849デフォルトの名無しさん
2009/12/21(月) 09:26:23ttp://ja.wikipedia.org/wiki/%E5%AD%97%E4%B8%8B%E3%81%92%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB
>>841のようなスタイルはおそらく BSD/オールマンのスタイル
制御文とブロックを分離することで可読性を向上させることを目的としている。
>>848 のようなスタイルはおそらく K&Rのスタイル。
一度に表示できる量が多いので書籍や昔の端末画面、ネットの掲示板などでは有利か。
最近のコード(D含む)はどちらかというとオールマンスタイルをとることが多いように見える。
あくまで慣れの問題なので、プロジェクトで一貫していればどちらでも良しってのが定説。
0850デフォルトの名無しさん
2009/12/21(月) 10:47:06{←←←←←←←←←←←←←←ここに空行があるから構造が見渡しやすい
// hoge
}←←←←←←←←←←←←←←ここに空行があるから構造が見渡しやすい
else
{←←←←←←←←←←←←←←ここに空行があるから構造が見渡しやすい
// hoge
}←←←←←←←←←←←←←←ここに空行があるから構造が見渡しやすい
だぜ
0851841
2009/12/21(月) 11:47:24in/out/bodyは関数に合わせて上のように書いてるけど,ifとかは
if (cond) {
// do stuff
} else {
// do stuff
}
で書いてるよ
0852デフォルトの名無しさん
2009/12/21(月) 14:14:59//
}
else{
//
}
は、異端児ですか?
0853デフォルトの名無しさん
2009/12/21(月) 15:18:580854デフォルトの名無しさん
2009/12/21(月) 15:27:53対応する括弧が同じカラムにある事が重要
if (ながーい
&& 複数行の条件) {
hoge();
}
の場合。} から対応する { を探す時、if を探して、ifの条件の終りを探して次の { とかですごく面倒。
if (ながーい
&& 複数行の条件)
{
hoge();
}
これなら上を見ていって同じカラムの { を探すだけ。
0855デフォルトの名無しさん
2009/12/21(月) 15:45:25if(...){
...
}else{
だけど、条件が複数行に渡る時は
if(... &&
...)
{
...
}else{
にしてるな。一回インデントが戻るのが重要ということで。
0856デフォルトの名無しさん
2009/12/21(月) 15:48:28ナカーマ
0857デフォルトの名無しさん
2009/12/21(月) 15:51:19自動フォーマットツールを作ればいい
可読性高めたければリファクタリングすればいい
でもemacs vim
おまえらだけはだめだ
0858デフォルトの名無しさん
2009/12/21(月) 16:33:310859デフォルトの名無しさん
2009/12/21(月) 17:15:08ナカーマ
0860デフォルトの名無しさん
2009/12/21(月) 18:37:210861デフォルトの名無しさん
2009/12/21(月) 19:57:27if()
{
}
else
{
}
みたいなのは制御文をコメントアウトしたときに
ブロックをそのまま活かせるから、とかいう理由を聞いたことがある
0862デフォルトの名無しさん
2009/12/21(月) 20:25:530863デフォルトの名無しさん
2009/12/21(月) 20:29:300864デフォルトの名無しさん
2009/12/22(火) 22:32:01次のお題はmallocしたメモリは終了時にfreeしなくてはならないかどうかね
0865デフォルトの名無しさん
2009/12/22(火) 22:43:560866デフォルトの名無しさん
2009/12/22(火) 22:48:02それはしなくて大丈夫だろうけど…
というわけでデストラクタが呼ばれないかもしれない云々の話に突入だね。
0867デフォルトの名無しさん
2009/12/22(火) 23:05:510868デフォルトの名無しさん
2009/12/22(火) 23:07:170869デフォルトの名無しさん
2009/12/22(火) 23:18:05そういうわけではないのだけど、newされたままどこからも参照されなくなって放置された
オブジェクトが必ずGCによって回収されるという保証が仕様のどこにも書いてないから、
たとえばロックファイルとか、グローバルアトムみたいな、プロセスと関係なく存続する状態を
使った場合の後処理をデストラクタで行うことはできない。
(実際のdmdではちゃんとプロセスの最後にデストラクタを呼ぶみたいだけど。)
0870デフォルトの名無しさん
2009/12/22(火) 23:23:42書いていないだけで、
実際は心配ないってことでいいんかね
あとauto classじゃなくてscope classね
scope classをメンバに持つことができるのかどうかやってみなくちゃ
0871デフォルトの名無しさん
2009/12/22(火) 23:30:58できないんじゃなかったっけ。個人的には一番欲しい機能の一つなんだけど。
RAIIで書きたいシーンが意外と多い。
正直、メモリ周りはC++とshared_ptrのほうが気楽なんだよなー。
SDLとか使ってるとGC外からがっつりメモリ持ってくることも多いし、
解放をデストラクタ任せにできないのがちょっと辛い。
というか、デストラクタに解放処理書いて、んで明示的にdelete、みたいな感じにしてるけどめんどい。
0872デフォルトの名無しさん
2009/12/22(火) 23:33:570873デフォルトの名無しさん
2009/12/22(火) 23:51:29scopeメンバ変数とか、newsgroupで昔見かけたけどあまり盛り上がらずにスルーだったな…
0874デフォルトの名無しさん
2009/12/23(水) 00:18:170875デフォルトの名無しさん
2009/12/23(水) 05:40:290876デフォルトの名無しさん
2009/12/23(水) 06:41:560877デフォルトの名無しさん
2009/12/23(水) 17:45:18WindowsのAPIを呼ぶときには、UTF-16に変換したりするんでしょうか。
0878デフォルトの名無しさん
2009/12/23(水) 18:05:440879877
2009/12/23(水) 18:33:53なるほど。
char型のほうがDのライブラリでは便利そうなので、それを基本にしてみます。
ところで、GCによる再配置を防ぐもの(C#で言うfixed)はありますか?
そもそも、再配置するんでしょうか。
0880デフォルトの名無しさん
2009/12/23(水) 18:40:12GCのコンパクションのこと?まだ実装されてない
0881デフォルトの名無しさん
2009/12/23(水) 19:15:36デフォルト初期化子と疑似プロパティ(括弧の省略)とデリゲートは安心だわ
しかしメモリ使用の保守方法としてRAIIとCGはまだまだ関係が詰め切れてないんか……
クラスローカルのカスタムnewが活用できればいいんだが
0882877
2009/12/23(水) 19:19:27じゃあ今のところは気にしなくても良さそうってことですね。
Dの言語仕様的には、C#のfixedみたいなものは無いようなので
GCが管理しているメモリのポインタは使うなってことでしょうか。
http://www.digitalmars.com/d/2.0/type.html
この辺見てると、
Casting pointers to non-pointers and vice versa is allowed in D, however, do not do this for any pointers that point to data allocated by the garbage collector.
と書いてあるので、そう読み取れるんですが。
0883デフォルトの名無しさん
2009/12/23(水) 21:38:00> C#のfixedみたいなものは無いようなので
fixedが必要になるのはunsafeのコードとC#の環境の相性が悪いからで,
そもそもがunsafeなD言語だといらないんじゃないかと
キャストに関してはポインタの値を整数で持つとかあるけど
GCによって指してるオブジェクトが削除されるかもしれないから
「仕様上許可してるけど何が起きても知らんよ」ってことかな
今のdmdとかの実装だとコンパクション(や移動を伴うGC)は当分入らないだろうけど
いつかは実装されるかもしれないので,GCの隙間をつくようなコードは書かない方がいいかも
0884877
2009/12/24(木) 00:15:34C#のfixedは、オブジェクトの再配置を防ぐ目的だったと思うので、
オブジェクトがメモリ上で移動する可能性があるなら、D言語でも必要だと思いますが…。
まあ、結局DではGCに管理されているオブジェクトへのポインタを使うのは
やめておいたほうが良さそうということですね。
なんかいまいちGCのメリットが…
0885デフォルトの名無しさん
2009/12/24(木) 00:22:42API使うとかのためにやむをえず登場するときだけで
0886デフォルトの名無しさん
2009/12/24(木) 01:37:58> オブジェクトがメモリ上で移動する可能性があるなら、D言語でも必要だと思いますが…。
GCを実装する時,言語の設計をちゃんと考慮するならそうでもない(コピーGCとか採用してる言語でそんなの大抵気にしない)
C#の実装においてunsafeな環境でのポインタが,GCの影響を受けないからfixedが必要だと思ってるんだけども
D言語でも参照とオブジェクトの間にテーブルを用意すれば,fixedみたいなのはいらないだろうし(他にもやりようはあるけど)
> 結局DではGCに管理されているオブジェクトへのポインタを使うのは
D言語だとオブジェクトとかは参照使って普通にアクセスできるんだけど,わざわざポインタを使うのは何故?
>>885にあるように外部のAPIとか使おうとしてるの?
0887877
2009/12/24(木) 02:04:58ポインタを使う理由は、WindowsのAPIを呼ぶためです。
正確に言うと、クラスのメンバ変数としてAPIで使うための構造体を持った場合に
・そのメンバ変数へのポインタを直接APIへ渡すとまずいのか
・まずい場合、メモリ上に固定させることは可能か
という点を確認したかったわけです。
>C#の実装においてunsafeな環境でのポインタが,GCの影響を受けないからfixedが必要だと思ってるんだけども
違います。
http://msdn.microsoft.com/ja-jp/library/f58wzh21%28VS.80%29.aspx
0888デフォルトの名無しさん
2009/12/24(木) 03:48:43>正確に言うと、クラスのメンバ変数としてAPIで使うための構造体を持った場合に
>・そのメンバ変数へのポインタを直接APIへ渡すとまずいのか
>・まずい場合、メモリ上に固定させることは可能か
>という点を確認したかったわけです。
メンバをD言語側でずっと持ってるのであれば回収されることもないだろうし
今は問題ないかと(自信がないのでWin32 APIとか詳しい人のレス待ち)
コンパクションなどが実装されたら固定させる手段は提供されると思う
>違います。
>http://msdn.microsoft.com/ja-jp/library/f58wzh21%28VS.80%29.aspx
どこか違う?GCがポインタも考慮しているのであれば,fixedを使うまでもなく
ポインタは移動前も移動後もずっと同じオブジェクトを指してるよね(通常のC#の参照はそう)
勿論C#のオブジェクトを上で述べるように外部に渡すのであれば,その時はfixedは必須だと思う
0889デフォルトの名無しさん
2009/12/24(木) 09:14:190890デフォルトの名無しさん
2009/12/24(木) 10:23:390891デフォルトの名無しさん
2009/12/24(木) 14:22:030892デフォルトの名無しさん
2009/12/24(木) 21:13:31>そのメンバ変数へのポインタを直接APIへ渡すとまずいのか
仕様上、再配置される可能性があるので、マズい
>・まずい場合、メモリ上に固定させることは可能か
今のところは、アロケータ・デアロケータを自前で書くとか、GC管理外のメモリ領域を使う方向になる
現実的には、>>889の方向性かな。
0893デフォルトの名無しさん
2009/12/27(日) 12:09:00スケジュールとか
DIPは何が何なのかよくわからん・・・
0894デフォルトの名無しさん
2009/12/27(日) 15:15:37void foo()
in { assert(bar()); }
body {}
bool bar() { return true; }
}
class B: A { void foo() {} }
void main() { (new B).foo(); }
B.foo() を呼ぶと A.foo() の in で bar() を呼んだときに Access Violation
2.036と2.037で確認、2.030では起きない
0895デフォルトの名無しさん
2009/12/27(日) 15:20:400896デフォルトの名無しさん
2009/12/27(日) 20:24:27# Operator overloading: opBinary!("+"), opUnary!("--"), opIndexAssign!("*").
演算子オーバーロードをopBinaryとopUnaryのテンプレートでやろうという話
# opDollar (bugzilla 3474).
Rangeのスライスで$使えない事に対する対応策として、$演算子をオーバーロードできるようにしようというもの。すでにDonさんのパッチが出てると思った。
# Move complex and imaginary types from language into std.complex.
複素数型を取り除いてstd.complexにまとめようという話
# Fix the array stomping issue (T[new] was one proposal for this).
(なんだろう、これだけ良くわからない。たしかnewsgroupでそんな話題があった機がするけど…)
# Remove C-style declarations.
int a[10]; みたいな定義の仕方をできないようにするという案
# Remove typedef.
alias thisとかあるし、typedefイラネって案
# Remove struct initializers.
static A a = {10, 20}; みたいな構造体の初期化の仕方やめようっていう案。多分次回の更新で来る。
# Remove floating point NCEG operators
!<>= みたいな演算子覚えにくいし滅多に使わないからやめようって案
# Remove "length" from array index expressions (bugzilla 3474).
a[0..length-3]; みたいな配列の添字とかスライスの中でlength使えないようにして、$に統一しようっていう案(Rangeの$と併せて)
0897デフォルトの名無しさん
2009/12/27(日) 23:52:17おお…もう…
0898デフォルトの名無しさん
2009/12/28(月) 00:00:170899デフォルトの名無しさん
2009/12/28(月) 00:05:54配列作るときなんか特に
0900デフォルトの名無しさん
2009/12/28(月) 08:58:56あれだけ言っておいて・・・
0901デフォルトの名無しさん
2009/12/28(月) 08:59:52スライスと動的配列の構文を分けようってやつではなかったか
0902デフォルトの名無しさん
2009/12/28(月) 17:44:55もっと利用の幅が広い行列使った線形代数の計算に対応していてくれた方がありがたいな。
これをやると別物になりそうな気はするが
0903デフォルトの名無しさん
2009/12/28(月) 20:20:17このエラーはどういう意味なのでしょうか?
-debug -g -unittestでコンパイルすれば通るのですが、
-O -release -inlineでコンパイルすると上記のエラーになります。
0904デフォルトの名無しさん
2009/12/28(月) 23:13:14確かに行列の計算に対応してくれるとありがたい
0905デフォルトの名無しさん
2009/12/28(月) 23:53:480906デフォルトの名無しさん
2009/12/29(火) 01:01:49言語レベルでサポートされていればいいんだけど、わざわざ
複素数を基本の型に入れた割りに、中途半端な感じがするな。
でもなによりも、これだけ時間がたっているのに、基本の型を
変更するというdrasticな修正がされる可能性がある、というのが
さすがというか、なんというか・・・
0907デフォルトの名無しさん
2009/12/29(火) 01:45:380908デフォルトの名無しさん
2009/12/29(火) 02:11:11複素数の需要が多そうな、数学関連も強化した方がよかったのでは?
という話。
四則演算くらいしかサポートしないなら、結局複素数を扱う数学ライブラリを
使うことになるし、それなら複素数クラスも数学ライブラリで定義すればって
ことになるかと。
言語レベルのサポートだと自然な形で表示しやすいってメリットは
あると思うけど。
0909デフォルトの名無しさん
2009/12/29(火) 12:36:19行列リテラルはいらねw
E3 = [
[1,0,0],
[0,1,0],
[0,0,1]
];
配列リテラルで十分だろう
0910デフォルトの名無しさん
2009/12/29(火) 12:38:45ずっと typeid(typeof( expression )) ってしてたよ・・・
0911デフォルトの名無しさん
2009/12/29(火) 13:11:12みんな大好きユーザー定義演算子(もどき)を作りたいという下地なのか?
コンパイラを楽に書けるシステムと両立できるのか?
0912デフォルトの名無しさん
2009/12/31(木) 01:53:110913デフォルトの名無しさん
2009/12/31(木) 04:55:25MAKEWORDだのOPENFILENAMEだのをimportだけで使いたい
0914デフォルトの名無しさん
2009/12/31(木) 07:07:28その程度の短い関数はdiのほうに残るからimportだけで使えるはずだが
0915デフォルトの名無しさん
2009/12/31(木) 07:12:010916デフォルトの名無しさん
2010/01/01(金) 00:27:420917デフォルトの名無しさん
2010/01/01(金) 05:11:170918デフォルトの名無しさん
2010/01/01(金) 05:18:28phobosの一覧見辛くて困るのですがなんとかなりませんか?
Java Docのように階層化して欲しいです。
Streamにどんなクラスがあってどんなメソッドがあるのか、
スクロールして下まで見ないとそれすらも分かりません。
ちょっと心が折れそうです。
0919デフォルトの名無しさん
2010/01/01(金) 06:42:32CandyDocつかったら?
ほかにもdilとかでもできるのかな?
それと新しいバージョン来てるよ
Version D 2.038 Dec 30, 2009
New/Changed Features
* Added core.cpuid in Druntime
* Bugzilla 3514: opApply should be the first-choice foreach iteration method.
* Bugzilla 3577: Wrong precedence for opPow
* Added auto ref functions
* Added function template auto ref parameters
* Added isRef, isOut and isLazy to __traits
* Transporting return type from args to return type, see DIP2
0920デフォルトの名無しさん
2010/01/01(金) 06:49:09おお、これは嬉しい
…今年の11月にD3が出るんだっけ?
0921デフォルトの名無しさん
2010/01/01(金) 07:22:360922デフォルトの名無しさん
2010/01/01(金) 11:34:20void hoge( void )
{
}
って書きたいのに
以外に融通利かないな
0923デフォルトの名無しさん
2010/01/01(金) 12:21:15switchをそのまま取り入れた時の思想と矛盾するわけだが
0924デフォルトの名無しさん
2010/01/01(金) 12:27:41俺的にはmatchとか入れて欲しいけど・・
0925デフォルトの名無しさん
2010/01/01(金) 14:53:29そうなって欲しいと思ってるのは君だけやがな。
0926デフォルトの名無しさん
2010/01/02(土) 23:11:310927デフォルトの名無しさん
2010/01/03(日) 21:36:170928デフォルトの名無しさん
2010/01/03(日) 22:03:080929デフォルトの名無しさん
2010/01/03(日) 23:26:100930デフォルトの名無しさん
2010/01/06(水) 19:59:410931デフォルトの名無しさん
2010/01/10(日) 18:19:540932デフォルトの名無しさん
2010/01/10(日) 18:52:560933デフォルトの名無しさん
2010/01/11(月) 23:30:56うん、他のUnicode APIと同様にWriteConsoleWを使えばいいだけの話だと
思うんだけど。UTF-8→UTF-16の変換はDが勝手にやってくれるよね?
0934デフォルトの名無しさん
2010/01/15(金) 00:22:180935デフォルトの名無しさん
2010/01/15(金) 14:26:47面倒くさいけど自分で書くしかないのかなぁ・・・。
0936デフォルトの名無しさん
2010/01/15(金) 15:10:550937デフォルトの名無しさん
2010/01/15(金) 16:22:020938デフォルトの名無しさん
2010/01/15(金) 16:41:29push_backなどの操作が・・・と思ったけど、std.arrayを使えばいいのかー。
0939デフォルトの名無しさん
2010/01/15(金) 16:53:02Dは実装が簡単な言語(ただしC++比)らしいので、連想配列の中身がRBTreeなDコンパイラを937が作ればOK
0940デフォルトの名無しさん
2010/01/15(金) 19:10:37作ってくれ
0941デフォルトの名無しさん
2010/01/15(金) 20:56:40http://www.dsource.org/projects/aa
にコミットすればOK
0942デフォルトの名無しさん
2010/01/15(金) 21:05:39dcollectionsはD2に移植する気満々っぽいよ。
ライセンスもTangoのBSDライセンスと違ってPhobosと同じBoostライセンスにしたようだ。
もし作ったらチケット発行してパッチ投稿したら良いんじゃないかな?
0943デフォルトの名無しさん
2010/01/16(土) 05:03:17これ確か前MLで流れてたよね
「コレクションいる?」->「dcollectionsがあるじゃん」的な感じで
実装が進んでないのは,classのrangeとかshared辺りの問題なのかな?
変更がコミットされてないだけなのか分からないけど,D2中に入って欲しいなぁ
0944デフォルトの名無しさん
2010/01/16(土) 13:07:25おいおいメンテナンスされてないってえええ、みたいな
0945デフォルトの名無しさん
2010/01/16(土) 13:13:470946デフォルトの名無しさん
2010/01/16(土) 13:30:12出たり消えたりするんだから適当にぶちこめばいいのに
0947デフォルトの名無しさん
2010/01/19(火) 02:07:190948デフォルトの名無しさん
2010/01/19(火) 20:19:190949デフォルトの名無しさん
2010/01/19(火) 20:36:120950デフォルトの名無しさん
2010/01/19(火) 20:39:440951デフォルトの名無しさん
2010/01/19(火) 20:49:52どうもです。
UTF-8 or UTF-16 or UTF-32であるかチェックということになるんですかね。
boolじゃなくて例外なところがちょっと使いづらいなぁ。
0952デフォルトの名無しさん
2010/01/19(火) 20:51:44いやならtry〜catchでラッピングした関数を作るまでじゃね
0953デフォルトの名無しさん
2010/01/19(火) 20:55:300954デフォルトの名無しさん
2010/01/20(水) 00:09:080955デフォルトの名無しさん
2010/01/20(水) 00:12:340956デフォルトの名無しさん
2010/01/20(水) 00:17:000957デフォルトの名無しさん
2010/01/20(水) 03:40:16std.encodingにboolで返すisValidがありました。
0958957
2010/01/20(水) 11:46:110959デフォルトの名無しさん
2010/01/20(水) 18:25:550960デフォルトの名無しさん
2010/01/21(木) 02:22:190961デフォルトの名無しさん
2010/01/21(木) 15:55:07外部ツール使えばそこそこ見栄えがする表示はできるけど、
Windowsはそもそも端末エミュレータを変えられるようにできてないから、
実用に堪える環境じゃない。
0962デフォルトの名無しさん
2010/01/21(木) 19:21:55Dに関してははっきり「ない」と言える
0963デフォルトの名無しさん
2010/01/21(木) 19:59:470964デフォルトの名無しさん
2010/01/21(木) 23:18:390965デフォルトの名無しさん
2010/01/21(木) 23:26:03VB 1000000
PHP 500000
C/C++ 100000
Java 50000
Ruby 1000
D 0.02
0966デフォルトの名無しさん
2010/01/22(金) 00:05:40No.1はこの俺様だあああ!!
0967デフォルトの名無しさん
2010/01/22(金) 00:14:150968デフォルトの名無しさん
2010/01/22(金) 03:16:140969デフォルトの名無しさん
2010/01/22(金) 23:38:530970デフォルトの名無しさん
2010/01/22(金) 23:54:130971デフォルトの名無しさん
2010/01/23(土) 00:37:56強引すぎるベジータβさんの戦いは今日も続く・・・
0972デフォルトの名無しさん
2010/01/23(土) 02:04:31なんかNGみてたらD-IDEとかあったけど、これってどうなんだろう?
0973デフォルトの名無しさん
2010/01/23(土) 10:00:10レビューよろ
0974デフォルトの名無しさん
2010/01/23(土) 20:28:43俺の環境だとバグだらけで使い物にならなかった
0975デフォルトの名無しさん
2010/01/23(土) 20:44:420976デフォルトの名無しさん
2010/01/23(土) 20:46:23g++のバグが5000以上放置されているのに対してdmdは1000程度だとのこと(Walter曰く
0977デフォルトの名無しさん
2010/01/23(土) 21:24:090978デフォルトの名無しさん
2010/01/23(土) 22:07:440979デフォルトの名無しさん
2010/01/23(土) 22:16:350980デフォルトの名無しさん
2010/01/24(日) 03:56:130981デフォルトの名無しさん
2010/01/24(日) 09:05:570982デフォルトの名無しさん
2010/01/24(日) 14:27:10■参考URL
+ ttp://dusers.dip.jp (D言語友の会)
+ ttp://www.wish.sakura.ne.jp/desuno/game/Drawing (PrincessDrawing! D言語で作られた横スクロールSTG)
■ IDE
- ttp://dronten.googlepages.com/dscite (DSciTE ※404)
+ ttp://alexanderbothe.com/?id=27 (D-IDE)
+ ttp://codepoet.sourceforge.net (CodePoet ※計画中)
D言語研究は賞味期限切れかな?書き込めないけど。
0983デフォルトの名無しさん
2010/01/24(日) 19:10:41もう整備されてないんだよな
あれsakuraiさんだっけ?
レス数が950を超えています。1000を超えると書き込みができなくなります。