- 1 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 01:09:54 ]
- プログラミング言語 D について語るスレッドです。
過去スレは >>2 ■本家 ttp://www.digitalmars.com/d/ ttp://www.kmonos.net/alang/d/ (和訳) ■コンパイラ ttp://www.digitalmars.com/d/dcompiler.html (DMD, 本家) ttp://dgcc.sourceforge.net/ (GDC, gccフロントエンド) ttp://gdcmac.sourceforge.net/ (GDCのmac用バイナリ) ■参考URL ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究) ttp://dsource.org/ (dsource)
- 91 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 09:30:31 ]
- だから
property int x(){ } とかにしろと
- 92 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 09:34:41 ]
- キーワードが増えるのがお気に召さないんだろうかね。
- 93 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 09:34:50 ]
- 仕様いじくりまわして使えなくしてしまおうという
スパイの陰謀にしか思えない
- 94 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 09:53:19 ]
- どこのスパイだ
- 95 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 09:57:16 ]
- Microsoft
- 96 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 10:04:30 ]
- Jで始まる言語に関わる会社だな。
- 97 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 10:17:55 ]
- やっぱ問題は速度じゃ無いよなぁ。>>81の言うとおりだし。
可読性とか重複の排除とかそういう点を追求したい。 速度なんてユーザが違和感を感じなきゃそれでイイ、って分野では、ね。 >>57 遅いのは仕方ない。スピード追求したけりゃ可読性を犠牲にして普通のfor使おう。 まぁ、気にするほど可読性落ちやしないさ。for文にはCから引き継いだ「慣れ」があるし。 あと、>>39は確かに可読性はイイが、文法を拡張するとなると、そこまでは……と思う。 というか、みんなforeachステートメント前提に考えすぎじゃないか? foreachの基礎になってるのはdelegateのパラメータ渡しなんだから、 その際に利用者にdelegateキーワードを見せない、って方向の方がいい。 Let's言語拡張妄想。 Range[2004..3000].step(4) : (int year){ // Rangeオブジェクトは>>46を拝借 orimpicPlaceTable[year].doOrimpic(); } class Range{ void step(int stepValue, void delegate(int) yield){ /* 実装略 */ } // いっそ void step(int stepValue) : (void delegate(int) yield){ /* */ } てのも…… }
- 98 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 10:29:28 ]
- 可読性で気になるのは、
こっちでは foreach 使って、 こっちでは似た処理だけど foreach 使えないから for 使って、 っていう風な場合もかな。 統一性がないというか何というか。 使い分けに深い意味があるのかと思いきや、 言語的な制限から仕方なく、とかなるのがね。 >foreach前提 単なる回数ループだと foreach にする必然性はないかもしれないけど、 配列の一部だけ foreach したい場合とかは foreach にする必然性はあるね。 別のものをもってくると、可読性が落ちるけど、 かといって現状の foreach だとスライスするしかなくて、 それだと 0 からスライスする場合でないとインデックスがずれてしまって・・・と。
- 99 名前:97 mailto:sage [2007/02/13(火) 10:42:13 ]
- アレ? 文章考えてる間にだいぶ進んでた罠。
>>84 私ゃコンパイラの最適化実装なんてさっぱりなんですが、 ホントに最大限のinline化とか期待できるんでしょか。 onApplyが受け取るのがdelegateである以上 delegateをinline展開せにゃならんってことだと思うのだけど、 何となく、それは難しい事だと思ってたんですが。 # それでも、Walterならきっと何とかしてくれる……! とかちょっと期待も。
- 100 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 10:45:58 ]
- んまあ、あくまで最大限の最適化ってことで・・・。
そして、それを要求するよりは、言語的に実装する方が楽そうだ、と。
- 101 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 11:00:56 ]
- Range[2004..3000].step(4) = (int year){
orimpicPlaceTable[year].doOrimpic(); }; ってね。 できなくもなさそう。テストはしてない。 要はdelegateを渡すのに func({ Statement; }); こんな{}のが邪魔なだけだと思った。
- 102 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 11:01:50 ]
- >>98
rubyだとArrayのeachとeach_indexが微妙に統一感がない。each_with_indexとかさらに。
- 103 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 11:20:47 ]
- >>101
何か Ruby のイテレータっぽいね。 類する文法は作れそうな予感。 今でも似た事は無理矢理できそうだけど。 >>102 まあ、Ruby は動的型言語で オーバーロードできないからね・・・。 そのあたりは仕方がない気がする。 まあ、引数の個数で呼び分けくらいはして欲しいんだけど。
- 104 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 11:25:51 ]
- foreach(int sliceIndex, int num; array[10..20])みたいに書けなかった……よね。
10..20の部分、やはりrange型か何かに切り出して欲しいな。組み込み型として。 範囲を表すのに直感的でいい記法なのに、配列のインデックスにしか使えないのは勿体ない。 あと>>67も含めて。やっぱ10..20のとき20は含まないべきだよなァー。
- 105 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 11:32:20 ]
- >>104
書けるんだけど、sliceIndex は 0〜10 になって、10〜20 にはならない。 最適化もちゃんと効いて高速なんだけどなあ。
- 106 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 11:35:50 ]
- import std.stdio;
struct Times { int n; void opShr(void delegate(int) yield) { for(int i = 0; i < n; ++i) { yield(i); } } } Times times(int n) { Times t; t.n = n; return t; } void main() { times(5) >> (int i){ writefln("%d", i); }; } うほっ
- 107 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 11:37:00 ]
- auto arr = [0,1,2,3,4,5,6,7,8,9];
foreach (i=3, v; arr[3..8]) writef(i," ",v,";"); -> 3 3; 4 4; 5 5; ... と妄想
- 108 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 11:42:57 ]
- >>106
そこは static opCall で作ろうぜ
- 109 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 11:43:49 ]
- >>108
opCall でプロパティになるかと思ったら ならなかったんだよー。
- 110 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 11:44:32 ]
- 二項演算子に do とか欲しくなってきた。
オーバーロード専用でも良いから。
- 111 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 11:49:38 ]
- >>101
いけそうでいけない気がする……。 記法としてはとても良い感じなんですが。 演算子オーバーロードじゃ理想的な演算子無いし、 無理矢理あてたとしても末尾に}();なんて付いちゃいそう。 >>103 Rubyのイテレータはいいものだと思うです。 今じゃ”ブロック付き呼び出し”のが主流の呼び方っぽいけど。 Dでもdelegate引数が()の外に飛び出せさえすれば、 同じ表記(Dらしく型表記は付くけど)ができるんだけど……。
- 112 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 11:51:19 ]
- >>111
そこで代入形式で呼び出すプロパティなんですよ
- 113 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 11:55:15 ]
- 普通のプロパティならイケるね。
import std.stdio; struct IntEx { int value; void times(void delegate(int) yield) { for(int i = 0; i < value; ++i) { yield(i); } } } IntEx ex(int value) { IntEx ex; ex.value = value; return ex; } void main() { ex(5).times = (int n){ writefln("%d", n); }; }
- 114 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:03:42 ]
- >>112
あ、なるほど……。代入すると見せかけて、受け取ったdelegateを呼び出すのか。 わーい、超バッドノウハウ。でもそれがグッドな言語仕様に化けてくれれば儲けモノかな。
- 115 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:06:56 ]
- struct Times {
int n, m, s; static Times opCall(int n) { return Times(0, n); } static Times opCall(int n, int m, int s=1) { Times t; t.n = n; t.m = m; t.s = s; return t; } void opShr(void delegate(int) dg) { for(int i=n; i < m; i+=s) dg(i); } alias opShr opShl_r; } void main() { Times(5) >> (int i) { writefln("%d", i); }; (int i) { writefln("%d", i); } << Times(10, 15); } 自分でワロてしまった
- 116 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:08:40 ]
- ああ、static opCall ってそういう事か。
- 117 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:09:17 ]
- つか、後置www
- 118 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:14:49 ]
- import std.stdio;
struct If { bool b; static If opCall(bool b) { If i; i.b = b; return i; } void opShl_r(lazy void yield) { if(b) yield; } } void main() { writefln("false") << If(false); writefln("true") << If(true); } キモイヨー
- 119 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:16:11 ]
- >>105
書けはするんだ……でもarray[10..20]を評価した時点で 10と20の値は忘れられちゃうもんなぁ。 ああ、この堪らないなもどかしさ。Walterはやはり焦らしプレイの天才なのか。
- 120 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:17:39 ]
- opIn_r で
writefln("true") in If(true); とか 余計キモイか
- 121 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:18:48 ]
- 演算子オーバーロードってこんなに面白いかったのか。
- 122 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:20:46 ]
- イテレータ風の記述をするには、要するに、
最後に置いた delegate を呼ぶための演算子があればいいんだよね。 上がってる候補は : だったり = だったりなんだが、 Walter タンのこだわってる解析の楽さ的には : はラベルかどうかのチェックが必要になる場合がありそうだから無理そうだな。 = はプロパティあたりをいじくればできそうだけど、どうなんだろうか。 do はアリかも。キーワード追加しなくていいし。
- 123 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:27:09 ]
- 後置ifはRubyにもあるし、普通に使いどころはあるかも……。
しかし、何となくフォースの暗黒面に囚われかけてる感覚があるw 演算子オーバーロードは原則、元の意味から逸脱しない範囲で行うこと。 悪い子のみんな、Walterとの約束だ!
- 124 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:29:23 ]
- >>122
いや、必ず括弧を書く必要があれば、 ラベルとの混同はなしでいけるか。 Ruby やプロパティの癖で括弧無しで考えてしまった。 >>123 実用はしたくないけど、遊びで使う分には面白すぎるw これはヤバいね。
- 125 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:29:31 ]
- 個人的には
times(5)~(int i){ hoge(i); }; な感じが好きだな。
- 126 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:33:27 ]
- -, *, /, |, & とかも良さげ。
良さげなのがありすぎて、 逆に危険な香りがプンプン匂ってくるw
- 127 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:33:31 ]
- times(5) (int i){ hoge(i); };
いっそ記号無しは……無理、か? 読みづらいか。
- 128 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:33:50 ]
- >>123 IODCCで広く使われることでしょう
- 129 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:37:35 ]
- >>128 D言語ダークサイド友の会じゃねーかw
- 130 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:37:48 ]
- そういや、opAssign なんてのがあったんだっけ。
これ使えば = もいけるな・・・。
- 131 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:47:32 ]
- 笑えるソースの見せ合いで大会とか開いたりして
- 132 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:50:24 ]
- >>120
in 使うなら If じゃなくて case にしたら良さげだなw
- 133 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 12:59:46 ]
- import std.stdio;
struct case_that { bool b; static case_that opCall(bool b) { case_that i; i.b = b; return i; } void opIn_r(lazy void yield) { if(b) yield; } } void main() { writefln("false") in case_that(false); writefln("true") in case_that(true); } おおお。これくらいは使っていいんじゃという誘惑に駆られそうだ。
- 134 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 13:06:04 ]
- import std.stdio;
struct Times { static int index; static void opSliceAssign(lazy void v, size_t x, size_t y){ for(index=x; index < y; index++) v(); } } void main() { Times[10..20]=( writefln(Times.index), writefln(Times.index*2) ); } 良く解らないけど、とても気持ち悪いです。はい。
- 135 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 13:07:19 ]
- opSliceAssign www
- 136 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 13:10:40 ]
- どうせなら __dollar 使おうぜ
- 137 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 13:19:29 ]
- >>122
doはキーワード増やさない点、あとRubyと同じだという点もナイスだけど、 場所によってキーワードの意味が違う、となるとちょいと嫌だな。 かつてのautoとscopeのようなことにならなきゃいいが。 でも案外、do-whileのdoと似てると解釈も出来るか……?
- 138 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 13:22:38 ]
- import std.stdio;
struct range { static void opSliceAssign(void delegate(size_t i) yield, size_t x, size_t y) { for(size_t i = x; i < y; ++i) yield(i); } } struct times { static void opIndexAssign(void delegate(size_t i) yield, size_t n) { for(size_t i = 0; i < n; ++i) yield(i); } } void main() { range[3..10] = (size_t i) { writefln(i); }; times[5] = (size_t i) { writefln(i); }; } そういや、continue は return で代用できるとして、break が使えないや。 何か値を返すようにするのも面倒だし、限界はあるやね。 >>137 一応「イテレータ」を指向するという名目なら、 ループするということで do は意味的にオーケー? まあ、Ruby のイテレータよろしく、 結局そこから逸脱した使われ方もされるだろうけど。
- 139 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 13:30:51 ]
- >>138
do-whileで「ループ」のニュアンス持ってるのはwhileの方だから、 doだけならループに使われなくても問題無いんじゃないかな。 直訳したって「する」でしかないんだし。
- 140 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 13:45:40 ]
- >>138
>そういや、continue は return で代用できるとして、break が使えないや。 break用の例外を投げるという荒業はどうだろう。気持ち悪いと言えばそれまでだけど。
- 141 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 13:46:19 ]
- そういやそうね。
つまり、こんな妄想が・・・ import std.stdio; void times(size_t n, int delegate(size_t i) yield) { for(size_t i = 0; i < n; ++i) { int res = yield(i); if(res != 0) return; } } void main() { times(5) do (size_t i) { writefln(i); } } まあ、{ } 内で break, continue, return の意味が変わるというあたり、 どう実装するのかというのが気になるところか。
- 142 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 14:21:09 ]
- returnはreturnでcollectメソッドとかに使いたいので、
他の代用にされてしまうと困るかも。 char[][] titles = books.collect() do (Book book){ return book.title; }; opApplyはbreakとかサポートするために、 どうにも妙な作りになっちゃってるんだよね・・。 正直、Exception使ったほうがマシだった気がする。 Rubyじゃどう解決してたか、詳しい人いる?
- 143 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 14:27:02 ]
- こうできてほしいな。
times(size_t i;5){ writefln(i); } んでopApplyと同様にopStatementに対応して欲しい。
- 144 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 14:40:29 ]
- >>142
delegate じゃなくて yield という特別なキーワード使ってるから Ruby だとそこんところどうにでもなる。
- 145 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 14:45:41 ]
- 言語仕様としてマイクロスレッドが欲しいよ。
C#でいうとyieldね。
- 146 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 15:02:46 ]
- python の yield みたいな外部イテレータも面白い。
マイクロスレッドの代わりにもなる?
- 147 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 15:04:06 ]
- くだらないことでスレ延ばしてる香具師は自演厨か?
- 148 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 15:44:05 ]
- >>146
それマイクロスレッド。
- 149 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 16:12:31 ]
- てかもう、ステートメント自体を記述できるようにするのはどうだ?
statement LinkedForeach{ private int i; private Collection src; private Collection dest; public LinkedForeach(Collection src, Collection dest) { this.src = src; this.dest = dest; } public bool next(out Items items) { this.i++; if(this.src.length < this.i && this.dest.length < this.i) { items = new Items(this.src[this.i], this.dest[this.i]); return true; // 継続 }else { return false; // 終了 } } } ----- void functionX(Collection c, Collection d){ LinkedForeach(Items items; c, d) { // c, dのi番要素への操作が繰り返しで可能 } }
- 150 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 16:14:10 ]
- ちなみにstatementはステートメントとして使える + ステートメント終了時に自動で破棄(=auto)的なclassの仮想構文ね。
- 151 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 17:51:14 ]
- はいはいわろすわろす
- 152 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 17:51:33 ]
- delegateの構文としてdoを採用するんだったらこうなるわけか。
hoge(x, y, z) do|int x, int y| ... end どうみてもRubyです。 しかし盛り上がりすぎワロタw
- 153 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 20:40:42 ]
- D言語の正式版の存在の意味が分からないw
明らかに人柱版としか思えないんですけどwwwww
- 154 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 20:51:12 ]
- >>153
正式版も何も、単にバージョンが1になったというだけの話でしょw
- 155 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 21:05:47 ]
- とりあえず落ち着かないとIDEとか無理だよな
- 156 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 21:20:10 ]
- >>152
hoge(x, y, z) do (int x, int y) { ... } でいいんじゃねえの? パイプって左右の区別なくて気持ち悪い。
- 157 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 21:56:47 ]
- char[][] commentlessScript = File.collectLines("foo.myscript") do (char[] line){
if(line == "---EndOfScript---"){ break; } if(line.startWith("#")){ continue; } return line; }; class File{ static char[][] collectLines(char[] filePath) do (char[] delegate(char[]) yield){ char[][] result; open(filePath) do (File file){ while(!file.eof){ result ~= yield(file.readLine()); } } return result; } static void open(char[] filePath) do (void delegate(File) yield){ File file = new File(filePath); scope(exit){ file.close(); } yield(file); } } /* コンパイラは、delegateの呼び出しが行われるのがwhileやforの中のみと判断した場合に限り、 そのdelegate内でのbreak、continueを許します。それらが行われた場合、delegateの実行は中断され、 delegate呼び出しから最も近いforやwhileに対してbreak、continueが行われたものとして処理されます。 */ 妄想が窮まってきたので、いい加減もう寝ます……。
- 158 名前:157 mailto:sage [2007/02/13(火) 22:09:33 ]
- ……コメントに付け足させてくれ。
/* 検討事項: ... do (loop char[] delegate(char[]) yield){ ... のようにloopキーワードを付けるなどして、 delegate引数の宣言の側でbreak、continue可能なことを明示すべきかもしれません。 この場合、この`yield`はwhileやforの中で呼び出さない限りコンパイルエラーになることになります。 */ 今度こそ寝る。
- 159 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 22:25:00 ]
- >>156
「関数呼び出し do 関数リテラル」って形だな。 doを既存の演算子に置き換えて、 その演算子をオーバーロードしたクラスを関数呼び出しが返せば、 「関数呼び出し 演算子 関数リテラル ;」という形にはなりそう。 その場合、文じゃなくて式だけど。
- 160 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 23:16:44 ]
- forの方が単純でいいような気がしてきた。
- 161 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 23:34:45 ]
- トリッキーなコードには演算子オーバーロードは欠かせない。
我々にはopDoが必要だ。
- 162 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 05:40:33 ]
- ネタでしょ?
- 163 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 05:57:51 ]
- 括弧内に { } があるのってダサくね?
- 164 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 06:31:20 ]
- まさかこんなのが古きよきforループより分かりやすい、初心者にも
教えやすいとか思ってないよな? しかも性能が劣るのは確実 単なるジャンプに過ぎないbreakやcontinueの代わりに例外なんて 論外もいいところ 馬鹿じゃないの?ただのオナニーじゃん
- 165 名前:デフォルトの名無しさん [2007/02/14(水) 06:39:54 ]
- >>158
おまいばかじゃね? ネタだとしても、折角do使ってキーワード増やさない様にしてるのに何してんだ。 そんなんなら最初から新たな構文作るだろ。
- 166 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 06:41:12 ]
- くだらんことでスレ延ばしてる香具師は
仕様いじくりまわして使えなくしてしまおうという スパイの陰謀にしか思えない
- 167 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 06:44:17 ]
- どこのスパイだ
- 168 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 06:52:10 ]
- Jで始まる言語を使うところだな。
Japanese
- 169 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 06:52:26 ]
- for ループと do 記法の提案の話は別ジャン。
- 170 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 07:43:56 ]
- 一所懸命相手のレスをねじ曲げて馬鹿にしてるんだから水を差すな。
- 171 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 08:03:36 ]
- うそみたいだろ
全部ネタなんだぜ
- 172 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 08:20:55 ]
- Don't touch me!
- 173 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 09:11:02 ]
- sampleのhtmlget.dのhtml表示部分のprintfをwritefに変えたら4invalid UTF-8 sequenceってなった(printfのままだと通る。ちなみに接続先はwww.google.co.jp)
・・・なんで? もしかして、writefだとUTF-8通らないのか?
- 174 名前:173 mailto:sage [2007/02/14(水) 09:11:56 ]
- あっ、改行忘れてた。すまん
- 175 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 09:25:14 ]
- BOMとか関係あったりして
- 176 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 11:44:20 ]
- 逆だろ、writefはUTF-8とか16辺り以外通らない。
- 177 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 12:01:41 ]
- みんな速度には結構神経使うな……当然ちゃ当然だが。
一口に速度と言っても、みんなどれくらいのをイメージしてるんだ? 俺は元々Java/Webな人間だし、個人的に作りたいモノも大抵Winアプリだしで、 停止時間が0.3秒くらいに収まればいいかな、くらいに思ってるけど。 だからforよりパフォーマンス落ちるとか程度は、(多分)全然許容範囲。 やっぱゲームとかリアルタイム処理な人は、 1万回のループが1/60秒以内に収まらなきゃ論外(数値は適当)、 delegateとか話にならん、て感じなんだろか。
- 178 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 12:58:51 ]
- 停止時間とか言ってる意味がよく分からんが、
ループ箇所の処理時間はボトルネックになりやすいという 一般論を前提にして今の話は進行してたんだろ
- 179 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 13:04:37 ]
- >>176
たしかにそうみたいだな import std.stdio; void main() { printf("ほげほげ"); writef("ほげほげ"); } で、ちゃんと表示されてるから。 でも、なんでちゃんと表示できなかったんだろう・・・>htmlget.d
- 180 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 13:17:42 ]
- >>178
GC関係じゃね?<停止時間
- 181 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 13:30:43 ]
- >>177
別に性能がどうでもいいんならVM言語やスクリプト言語でいいし って話じゃねーの? 画像データをピクセル単位で弄くったりすることを考えると 遅いループなんて使う気にならないよ、少なくとも俺は。
- 182 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 13:47:42 ]
- >>178
停止時間は例えば「ユーザがメニューから項目を選択してから、 再びユーザに制御が戻るまでの時間」くらいのつもりだった。 >>181 性能がどうでも良いとしても、Dは結構魅力的だと思うけど。 ランタイム要らずで起動の早い単体exeを作れる、かつC/C++より幾分モダンだし。 とゆーか、ごめん。なんか分かり切った事を聞いた気が自分でもしてきた。
- 183 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 14:46:30 ]
- D言語そのものが人柱言語なんだからこのままイカレ仕様につっぱしってほしいぜ!
# 実用に使えるかどうかはプログラマの腕次第
- 184 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 15:00:48 ]
- Rubyのイテレータとか見てると、
複雑な制御構造やありがちな制御構造をモジュール化して、 名前を付けられるって点がありがたいなぁ、と思う。
- 185 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 15:13:57 ]
- >>177
意外と、会計処理でも、5時間かかるか、4時間で済むかは大問題だったりする。 夜間バッチのスケジュールが有って、会計処理なんて今時古いとか言われても、 必要なもんなんだし、お前らみたいにお絵かきやエロやってる訳じゃなく、従業員 が1万人関連取引先含めると20万人、顧客まで含めると100万人規模の、会社 にとっては、本当に死活問題。
- 186 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 15:18:17 ]
- >>173
www.google.co.jpはuser agentを見てUTF-8返したりShift_JIS返したりしてた気が。 たぶんSJISで送られてきてる。
- 187 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 15:43:07 ]
- >>186
つかさ。 普通にprintfで書き出して hoge.exe > tmp.txt でtmp.txtの文字コード調べりゃ済んだはずだよな
- 188 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 15:48:27 ]
- そういう高速な処理したい人は普通にfor書いて
それ以外の速度が死活問題にならない人は短くてわかりやすい構文が使えるってのでいいんじゃないかな。 コンパイルはもともと激速なんだし構文増えてもそんなに遅くはならないと思うし。
- 189 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 16:23:46 ]
- >>188
それはもったいないとおも
- 190 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 16:45:38 ]
- >My goal is to make the Boost implementation code look as obsolete as a muzzle-loading smoothbore.
ガンガレWalterタソ!
- 191 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 16:59:48 ]
- muzzle-loading smoothbore みた事無いからわかんないや
|

|