D言語 Part12

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
プログラミング言語 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)
2デフォルトの名無しさん:2007/02/10(土) 01:10:56
3デフォルトの名無しさん:2007/02/10(土) 01:35:59
いちもつ
4デフォルトの名無しさん:2007/02/10(土) 06:18:03
もつもつ
5デフォルトの名無しさん:2007/02/11(日) 08:08:53
mixin("いちおつ");
6デフォルトの名無しさん:2007/02/11(日) 08:22:34
D言語ってJavaのJFrame並に簡単にGUI作れる?
7デフォルトの名無しさん:2007/02/11(日) 10:36:28
GUIビルダみたいなのは見たこと無し。

Frame frame = new Frame();
frame.children ~= new Label("UserID:");
frame.children ~= new TextBox();
Application.run(frame);

くらいの簡単さならDWTあたりが多分可能。
8デフォルトの名無しさん:2007/02/11(日) 14:28:08

9デフォルトの名無しさん:2007/02/11(日) 16:32:14
10デフォルトの名無しさん:2007/02/12(月) 00:49:18
char[] otu = ">>1乙";
mixin(`printf("` ~ otu ~ `");`);
11デフォルトの名無しさん:2007/02/12(月) 01:03:52
1.005のchangelog見たら萎えたw
12デフォルトの名無しさん:2007/02/12(月) 01:47:59
そこでむしろおっきしないと
13デフォルトの名無しさん:2007/02/12(月) 02:59:43
import std.stdio;

class A {
  int onApply(int delegate(inout int) yield) {
    return yield(1);
  }
}

void main() {
  foreach(n; new A) {
    writefln("%d", n);
  }
}

> foreach(n; new A) {
で n の型を推論できないと言われるんだが、
onApply の型から推論できるようにした方がいいよね?
単に未実装なだけ?
14デフォルトの名無しさん:2007/02/12(月) 03:03:53
しまった。opApply じゃなくて onApply になってた・・・。
15デフォルトの名無しさん:2007/02/12(月) 05:06:41
// app.d
import std.stdio, std.random, std.c.time;

class App {
 abstract void run();

 static void run(lazy App app) {
  rand_seed(time(null), 10);

  try {
   app.run();
  } catch(Exception e) {
   writefln("Exception: %s", e.msg);
  }
 }
}

// main.d
import app;

class AppHoge : App {
 // this() { throw new Exception("hoge"); }
 void run() {
  writefln("hoge");
 }
}

void main() {
 App.run(new AppHoge);
}

lazy のおかげで、AppHoge のコンストラクタで例外が投げられてもちゃんと catch されるね。
16デフォルトの名無しさん:2007/02/12(月) 06:16:20
unittest で「必ず例外が投げられる処理」を実行して、
例外が投げられたらそのまま実行を続け、
例外が投げられなかったら assert する、ということをしたいのですが・・・

先ず、try-catch-finally 文に
「例外が投げられなかった場合」の処理をする部分がないので、
実装にフラグが必要になってエレガントでないのと、
コールスタックのダンプの方法が分からないので、
その処理を関数化してしまうと、エラー箇所を表示するのに
引数に __FILE__ と __LINE__ を渡す必要が出てきます。

void mustThrow(lazy void expr, char[] filename, int line) {
 bool thrown = false;
 try {
  expr;
 } catch {
  thrown = true;
 }
 if(!thrown) {
  writefln("No exception was thrown: %s(%d)", filename, line);
  assert(false);
 }
}

前者の問題(エレガントでない)はともかくとして、
後者の問題(__FILE__, __LINE__ をいちいち指定する必要がある)は何とかなりませんか?

コンパイラ: GDC 0.22 for Mac OS X, based on DMD 1.004
17デフォルトの名無しさん:2007/02/12(月) 06:36:50
DMD1.005なら、こうもできるみたいだが http://d.hatena.ne.jp/shinichiro_h/20070208
"あのmixin"が無いなら、__FILE__を付けるのはどうしようもない希ガス。

あと、
 try { 
  expr; //どうせここでcatchに飛ぶはず
    assert(false);
 } catch { 
  ...
 } 
とかやってもいいんじゃないかと思った。
まともに動くかどうかは試してないから分からないけど。
18デフォルトの名無しさん:2007/02/12(月) 06:39:35
それだと assert(false); の例外が catch されてしまうのです。
expr が AssertError を投げる可能性を考えると、
catch(AssertError) で catch することもできませんし。

素直に DMD 1.005 対応の GDC を待つしかないようですね・・・。
19デフォルトの名無しさん:2007/02/12(月) 06:53:46
ひとつ閃いた。

bool throws(lazy void expr) {
 try {
  expr;
 } catch {
  return true;
 }
 return false;
}

void error() {
 throw new Exception("hoge");
}

void main() {
 assert(throws(error()));
 assert(throws(0));
}

二段階になるのがちょっとイマイチだけど、
それはそれで分かりやすい気もするのでこれでいいかも。
20デフォルトの名無しさん:2007/02/12(月) 07:21:27
scope(success)
21デフォルトの名無しさん:2007/02/12(月) 07:25:15
その発想はなかったわ
22デフォルトの名無しさん:2007/02/12(月) 07:41:53
expr の例外を catch すると scope(success) の条件外になり、
さもなくば expr の例外が外に漏れちゃって・・・
23デフォルトの名無しさん:2007/02/12(月) 08:06:44
ややこしいな
24デフォルトの名無しさん:2007/02/12(月) 08:27:38
悪名高い

for(int i = 0; i < 10; ++i) {
 ...
}

みたいなループは D でも for 使わないとダメ?
まあ、foreach(i; new Range(10)) { ... } みたいにできる Range は定義できるけど、
どうも -O3 でも遅いみたいだし・・・。

いっその事、foreach(i; 10) { ... } がその代わりになるように
言語仕様の変更を提案した方がいいんだろうか。
foreach(i; 2, 10, 2) で 2 から 10 まで 2 つごとに・・・とか。
25デフォルトの名無しさん:2007/02/12(月) 09:15:35
>悪名高い

kwsk
26デフォルトの名無しさん:2007/02/12(月) 09:19:38
ん? いや、C 教えた時によく
for 文分かりにくいー、とか言う人いるじゃん?
27デフォルトの名無しさん:2007/02/12(月) 09:30:42
お前のまわりだけだろ
28デフォルトの名無しさん:2007/02/12(月) 09:45:15
C 風の for 文を敢えて採用しない言語がちらほらあるのは、
C 風の for 文での指定回数ループが直感的じゃないからだぜ。
29デフォルトの名無しさん:2007/02/12(月) 09:47:36
直感的ではないがあれは便利だ
30デフォルトの名無しさん:2007/02/12(月) 09:56:51
まあ、便利だから、それはそれで別にあっていいんだけど、
foreach(i; 10) { ... } とかできたらさらに便利じゃない?
31デフォルトの名無しさん:2007/02/12(月) 10:37:20
foreach(i;createArray(10)){
 ...
}

int[] createArray(int n){
 int[] array;
 array.length = n;
 for(int i=0;i<n;i++)
  array [n]= i;
 return array;
}

とかやっとけば?
32デフォルトの名無しさん:2007/02/12(月) 10:57:56
いや、だから、やろうと思えばやれるけど、
最適化しても遅いからなんだかなあと・・・。
33デフォルトの名無しさん:2007/02/12(月) 11:11:32
んじゃmixinで配列リテラル生成しとくとかどうよ。
mixinよく判らんから例出せんけど、できるんじゃないかな。
34デフォルトの名無しさん:2007/02/12(月) 11:22:58
配列リテラルじゃ最適化しようがないから遅いじゃん?
35デフォルトの名無しさん:2007/02/12(月) 11:22:58
>>30
ぱっと見、直感的に見えるかもしれないけど、
変数で指定すると異様になるよ。
36デフォルトの名無しさん:2007/02/12(月) 11:24:27
変数か・・・。確かに aggregate 用の foreach と紛らわしいか。
作るなら別文法か?
37デフォルトの名無しさん:2007/02/12(月) 11:56:46
新しい文法を導入してまでforを置き換えるメリットはないね
38デフォルトの名無しさん:2007/02/12(月) 12:04:04
mixinを使うと...わかりにくいなこれ。

import std.metastrings;
template times(int n,char[]code){
    const char[]times=
        Format!(`cast(void)&null[
            ((){
                for(int __dollar=0;__dollar<%s;++__dollar)
                    {%s};
            }(),0)];`,
        ToString!(n),
        code);}
void main(){
    mixin(times!(10,`printf("%d\n",$);`));
}
39デフォルトの名無しさん:2007/02/12(月) 12:40:59
普通に
foreach(i; 1..10)
 write(i);
ってかけたらいいんじゃね?
40デフォルトの名無しさん:2007/02/12(月) 12:55:05
そこでrange型の導入ですよ
41デフォルトの名無しさん:2007/02/12(月) 13:16:28
ちうか、こういうのは匿名メソッドで条件指定できるのが一番いいんだがなあ。。。
C#のpredicateみたいな。
そうなってくるとyield構文もほしくなる・・・。
42デフォルトの名無しさん:2007/02/12(月) 15:47:35
ほらほら、Rubyから色々取り入れようよ、とRubyの好きな俺。

範囲型とブロックで(1..10).each(){ |i| hoge(i); }とか。
onApplyReverseとかforeach周りの妙な仕様が整理できるぜぇ。
43デフォルトの名無しさん:2007/02/12(月) 16:05:39
Rubyだったら10.times{|i|...}だろw
44デフォルトの名無しさん:2007/02/12(月) 17:20:04
void times( int[] n, void delegate(int) yield ) {
 for(int i=0; i<n[0]; ++i)
  yield(i);
}

void main() {
 [10].times((int i){
  printf("%d\n", i*i);
 });
}

うそですごめんなさい
4544:2007/02/12(月) 17:24:25
てか普通にPythonと同じやり方でいいんじゃね?
struct xrange {
 int limit;
 static xrange opCall(int limit) { xrange self; self.limit=limit; return self; }

 int opApply( int delegate(inout int) dg ) {
  for(int i=0; i<limit; ++i)
   if(int r = dg(i))
    return r;
  return 0;
 }
};

void main() {
 foreach(i; xrange(10))
  printf("%d\n", i*i);
}
46デフォルトの名無しさん:2007/02/12(月) 17:44:19
class Range {
static Range t;

static this() { t = new Range; }

static Range opSlice( int n, int m ) {
t.start = n; t.end = m;
return t;
}

int opApply(int delegate(inout int) dg) {
int result;
for (int i = start; i < end; i++) {
result = dg(i);
if (result) break;
}
return result;
}

int start, end;
}

void main() {
foreach (i; Range[3..8])
writefln(i);
}
既出ですかそうですか
47デフォルトの名無しさん:2007/02/12(月) 17:54:36
ム板でインデントを認識、表示して欲しいなぁとかスレ違い
48デフォルトの名無しさん:2007/02/12(月) 18:02:12
ループはfor文で十分。

>>47
インデント対応した2chブラウザ使えばいい。
49デフォルトの名無しさん:2007/02/12(月) 18:03:17
int main()
{
  writefln("こうするのは面倒だしね");
  return 0;
}
50デフォルトの名無しさん:2007/02/12(月) 18:05:23
貼る時全角に痴漢すれば
51デフォルトの名無しさん:2007/02/12(月) 18:10:19
>>50
置換するなら&nbsp;で良いんじゃ?
52デフォルトの名無しさん:2007/02/12(月) 18:16:57
慣れるとインデントなしで読めるようになる

困るのは Python とかかな
53デフォルトの名無しさん:2007/02/12(月) 18:30:17
>>49
それだと結局コピペ時には&#160;ってなるから、
&#32;の方を使ってくれた方がありがたい。
54デフォルトの名無しさん:2007/02/12(月) 18:31:24
foreach(int i; Range(2001, 2010)){ writefln(i); }
Range(2010, 2061).each((int i){ writefln(i); });
等々。

かなりRubyぽいところまで出来るけど、
やっぱりforeachキーワードや引数の呪縛から逃れたいなぁ。
55デフォルトの名無しさん:2007/02/12(月) 21:05:11
引っ張って悪いんだがインデント対応の2chブラウザってあるのか?
Jane使ってるんだけど実はできたりする?
56デフォルトの名無しさん:2007/02/12(月) 22:04:49
そのぐらいD言語で作れ
57デフォルトの名無しさん:2007/02/12(月) 22:48:37
>>45
それ、遅いのよね。-O3 でも。

>>39 はいい感じの文法だと思う。
というか、それも妄想してたんだ、そういや。
58デフォルトの名無しさん:2007/02/12(月) 23:00:10
foreachで回すことはできないけれど
1,2,3,...という連番アクセスが必要、
ってのはどういう状況があるだろうか。

ずるずると既存の機能を拡張してくのは
なんか微妙な感じがするから、もっと
個々の用途に即した形の機能が追加される
方がよい気がする。
59デフォルトの名無しさん:2007/02/12(月) 23:21:59
指定回数だけ同じ処理を実行したい場合とか、
配列の要素数より少ないだけ回したいときとか。
60デフォルトの名無しさん:2007/02/12(月) 23:30:44
後者はスライス使える。
最適化も効くみたいだ。
61デフォルトの名無しさん:2007/02/12(月) 23:45:45
スライスで前の方を削ると
インデックスがずれるので面倒っちい
62デフォルトの名無しさん:2007/02/13(火) 00:08:38
>>59
前者はカウンタ要らないから指定回数実行の構文があればその方が直感的かなと思う。

>>61
それは使ってて結構強烈に感じた。
配列の一部だけ回すって結構需要ありそうな気がするんだが。まー具体例は思いつかん。
63デフォルトの名無しさん:2007/02/13(火) 00:26:01
ペアで扱う場合に先頭1つだけループから外すとか。
もう片方のループの範囲を決めるのにそのインデックスが必要になるから、
そっちもずらさにゃいかんなる。
64デフォルトの名無しさん:2007/02/13(火) 00:33:28
foreach(i, n; array[1..array.length])
 foreach(j, n; array[0..i+1]) // ← ここで + 1 が必要
  ...

↓こっちの形なら不必要。ただ、j を使いたい場合にインデックスがおもっくそズレる。

foreach(i, n; array[0..array.length-1])
 foreach(j, n; array[i+1..array.length])
  ...
65デフォルトの名無しさん:2007/02/13(火) 00:49:39
「制御構造」を関数化(モジュール化)するスマートな方法は、て感じか。

「モジュールにdelegate渡してコールバックしてもらう」に
型推論+無名デリゲートまで組み合わせれば
既にかなりのことが出来ると思うんだけど。

それでも残る問題は、パフォーマンスと微妙な読みづらさ?

# あと、foreach特別扱いされすぎだろと思う……
66デフォルトの名無しさん:2007/02/13(火) 01:01:51
折角ネイティブ言語でちゃんと最適化もすることをウリにしてるんだし、
パフォーマンスと書きやすさ読みやすさの両立は欲しいね。

現状は、foreach+スライスよりは、
for の方が読みやすいし使いやすい感じか?
67デフォルトの名無しさん:2007/02/13(火) 01:05:53
(a..b)とは別に(a...b)がほしいな。意味はRubyと逆でもいいから。
68デフォルトの名無しさん:2007/02/13(火) 01:09:57
あと単純に、range型が欲しい、という要望も混ざってるかな。今の話では。
69デフォルトの名無しさん:2007/02/13(火) 01:28:38
foreach(i, 0, 10; null) ...
foreach(i, 0, 10, n; array) ...

こういうのでいい気がしてきた。
70デフォルトの名無しさん:2007/02/13(火) 01:29:46
前者はもう foreach(i, 0, 10) でいいか。
71デフォルトの名無しさん:2007/02/13(火) 01:45:45
foreach(i : 5..10; array)
foreach((i, j) : (0, 0)..(5, 10))
n次元ベクトルを走査できるぜw
72デフォルトの名無しさん:2007/02/13(火) 02:29:13
opApply との整合性も考慮する必要があるんだよな。
範囲指定があると、その範囲を引数に追加・・・という事になるんだろうけど、
int opApply(int delegate(inout size_t i, inout T n) dg, range rng) { ... }
この range がどちらの引数と対応しているかって問題がある。

先頭から対応させていくという制限をかければ、
rng は i と対応することになる。
そうすれば >>71 みたいなことが実現できそうだ。

class T[] { // 内部実装のイメージとして捉えて
 int opApply(int delegate(inout size_t, inout T) dg, range rng) {
  for(size_t i = rng.first; i <= rng.last; ++i) {
   int res = dg(i, elems[i]);
   if(res != 0) return res;
  }
  return 0;
 }
}

n 次元の場合は foreach(i : 0..5, j : 0..10) ... としたのでいい気がする。
73デフォルトの名無しさん:2007/02/13(火) 03:00:02
forくらい使いこなせよ・・・
74デフォルトの名無しさん:2007/02/13(火) 03:03:07
そういう問題じゃないだろ・・・
75デフォルトの名無しさん:2007/02/13(火) 07:11:59
for(int i; range(0, 10)){

}

int[] range(int a, int b){
int[] hoge = new int[b - a + 1];
for(int i = 0; i < hoge.length; i++){
hoge[i] = a + i;
}
return hoge;
}
76デフォルトの名無しさん:2007/02/13(火) 07:24:52
ループの予感。色んな意味で。
77デフォルトの名無しさん:2007/02/13(火) 07:39:34
最適化とかよくわからないんだけど

たとえば上で言ってるみたいに

foreach(i : 5..10, j : 3..5) {
    ...
}

こういう構文があったとしてそれを使った場合と

for(int i = 5; i < 10; i++)
    for(int j = 3; j < 5; j++) {
        ...
    }

という風に書いたのではやっぱり前者のほうがより効果的な最適化を期待できるの?
78デフォルトの名無しさん:2007/02/13(火) 07:47:52
前者が後者に最適化されればそれで十分。
あとは読みやすさや書きやすさ、学習しやすさや保守しやすさ等の問題。

for だと何度も同じ変数が出てきて、変数名変えるの面倒だとか、
初心者に意味を教えるのが面倒だとか、直感的じゃないとか、
まあ色々不満があるから、それを解消できればいいな、と。
79デフォルトの名無しさん:2007/02/13(火) 07:52:34
foreach(int i; range(0, 10)){
 :
}

int[] range(int start, int end, int step = 1){
 int[] array = new int[(end - start) / step + 1];
 for(int i = 0; i < array.length; i++){
  array[i] = start + i * step;
 }
 return array;
}
80デフォルトの名無しさん:2007/02/13(火) 07:54:39
配列の生成は超遅いんで、
opApply を持ったオブジェクトを返す実装にした方がいいけど、
それでも for には負ける。
81デフォルトの名無しさん:2007/02/13(火) 08:05:52
よくわからんなぁ。
BASIC風の
FOR I = 1 TO 10 STEP 2
のほうがC式よりマシってことか?

効率面で言えば、ループの度に関数呼び出しが発生するような
方式は遅くて当たり前だろ。話にならない。
C式のforループなら比較、インクリメント、ジャンプしかしないし
ループカウンタがレジスタに乗ることが期待できるからな。

学習しやすさ分かりにくさってのは正直疑問なんだが。
Cのシンタクスが美的であるかどうかはともかく、Cの後継言語は
現実問題としてありふれてるし、皆使い慣れてるだろ。
別に言うほど分かりにくいわけでもないしな。
82デフォルトの名無しさん:2007/02/13(火) 08:13:16
#define range(a, b, c) int i = a; i <= b; i +=c

for(range(0, 10, 2)){

}
83デフォルトの名無しさん:2007/02/13(火) 08:13:43
Dのコンパイラは短い関数のインライン化はしてくれないんだっけ?
84デフォルトの名無しさん:2007/02/13(火) 08:30:53
>>81
マシってこと。

効率面に関して話にならないのは当たり前じゃなくて、
opApply を使った方法が最大限 inline 化されて最大限最適化されれば
for ループと同じとこまで最適化される可能性はあると思う。
ただ、現状ではそこまで最適化されないようだし、
だからこそ「言語的に」サポートされて欲しいなあ、と。

あと、for 文がそんなにスバラシイんだったら
foreach 文なんて誰も同時に採用しない。
for 文がなくてもいいとは言わんが、
「もっと便利な方法考えられるけど、
 使い慣れてるから使いにくくてもオーケー」
というのは、ガンガン機能アップしていこうぜ的な
D 言語の雰囲気と反するんじゃないかね。
85デフォルトの名無しさん:2007/02/13(火) 08:32:56
引数付きマクロがDにあればいいんだろ?
86デフォルトの名無しさん:2007/02/13(火) 08:33:56
マクロはダメだろう。
常識的に考えて。
87デフォルトの名無しさん:2007/02/13(火) 08:41:57
writefln = "aaa";
まじでコレ通るじゃん

ええんか?
88デフォルトの名無しさん:2007/02/13(火) 08:49:42
987 名前:デフォルトの名無しさん [sage] :2007/02/10(土) 01:14:43
int foo(int hoge) { ... }

foo = 2; // foo(2); になる

プロパティじゃなくてもこうなるんだけど、
正直これってどうなんだろうな。

988 名前:デフォルトの名無しさん [sage] :2007/02/10(土) 01:33:11
プロパティとの明確な区別が無いから今のところはしょうがない


ということらしい。
ええんか?
89デフォルトの名無しさん:2007/02/13(火) 09:12:46
良いんじゃない?
あえてそのコードを書く必要性もないわけだし
90デフォルトの名無しさん:2007/02/13(火) 09:20:37
でもキモイヨー。

そういや、Ruby の attr_accessor みたいに
プロパティを自動的に作ってくれるようなものはあるの?
91デフォルトの名無しさん:2007/02/13(火) 09:30:31
だから
property int x(){

}
とかにしろと
92デフォルトの名無しさん:2007/02/13(火) 09:34:41
キーワードが増えるのがお気に召さないんだろうかね。
93デフォルトの名無しさん:2007/02/13(火) 09:34:50
仕様いじくりまわして使えなくしてしまおうという
スパイの陰謀にしか思えない
94デフォルトの名無しさん:2007/02/13(火) 09:53:19
どこのスパイだ
95デフォルトの名無しさん:2007/02/13(火) 09:57:16
Microsoft
96デフォルトの名無しさん:2007/02/13(火) 10:04:30
Jで始まる言語に関わる会社だな。
97デフォルトの名無しさん: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デフォルトの名無しさん:2007/02/13(火) 10:29:28
可読性で気になるのは、
こっちでは foreach 使って、
こっちでは似た処理だけど foreach 使えないから for 使って、
っていう風な場合もかな。
統一性がないというか何というか。
使い分けに深い意味があるのかと思いきや、
言語的な制限から仕方なく、とかなるのがね。

>foreach前提
単なる回数ループだと foreach にする必然性はないかもしれないけど、
配列の一部だけ foreach したい場合とかは foreach にする必然性はあるね。
別のものをもってくると、可読性が落ちるけど、
かといって現状の foreach だとスライスするしかなくて、
それだと 0 からスライスする場合でないとインデックスがずれてしまって・・・と。
9997:2007/02/13(火) 10:42:13
アレ? 文章考えてる間にだいぶ進んでた罠。

>>84
私ゃコンパイラの最適化実装なんてさっぱりなんですが、
ホントに最大限のinline化とか期待できるんでしょか。
onApplyが受け取るのがdelegateである以上
delegateをinline展開せにゃならんってことだと思うのだけど、
何となく、それは難しい事だと思ってたんですが。

# それでも、Walterならきっと何とかしてくれる……! とかちょっと期待も。
100デフォルトの名無しさん:2007/02/13(火) 10:45:58
んまあ、あくまで最大限の最適化ってことで・・・。
そして、それを要求するよりは、言語的に実装する方が楽そうだ、と。
101デフォルトの名無しさん:2007/02/13(火) 11:00:56
Range[2004..3000].step(4) = (int year){
 orimpicPlaceTable[year].doOrimpic();
};

ってね。
できなくもなさそう。テストはしてない。

要はdelegateを渡すのに
func({
 Statement;
});
こんな{}のが邪魔なだけだと思った。
102デフォルトの名無しさん:2007/02/13(火) 11:01:50
>>98
rubyだとArrayのeachとeach_indexが微妙に統一感がない。each_with_indexとかさらに。
103デフォルトの名無しさん:2007/02/13(火) 11:20:47
>>101
何か Ruby のイテレータっぽいね。
類する文法は作れそうな予感。
今でも似た事は無理矢理できそうだけど。

>>102
まあ、Ruby は動的型言語で
オーバーロードできないからね・・・。
そのあたりは仕方がない気がする。
まあ、引数の個数で呼び分けくらいはして欲しいんだけど。
104デフォルトの名無しさん:2007/02/13(火) 11:25:51
foreach(int sliceIndex, int num; array[10..20])みたいに書けなかった……よね。

10..20の部分、やはりrange型か何かに切り出して欲しいな。組み込み型として。
範囲を表すのに直感的でいい記法なのに、配列のインデックスにしか使えないのは勿体ない。
あと>>67も含めて。やっぱ10..20のとき20は含まないべきだよなァー。
105デフォルトの名無しさん:2007/02/13(火) 11:32:20
>>104
書けるんだけど、sliceIndex は 0〜10 になって、10〜20 にはならない。
最適化もちゃんと効いて高速なんだけどなあ。
106デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2007/02/13(火) 11:42:57
>>106
そこは static opCall で作ろうぜ
109デフォルトの名無しさん:2007/02/13(火) 11:43:49
>>108
opCall でプロパティになるかと思ったら
ならなかったんだよー。
110デフォルトの名無しさん:2007/02/13(火) 11:44:32
二項演算子に do とか欲しくなってきた。
オーバーロード専用でも良いから。
111デフォルトの名無しさん:2007/02/13(火) 11:49:38
>>101
いけそうでいけない気がする……。
記法としてはとても良い感じなんですが。
演算子オーバーロードじゃ理想的な演算子無いし、
無理矢理あてたとしても末尾に}();なんて付いちゃいそう。

>>103
Rubyのイテレータはいいものだと思うです。
今じゃ”ブロック付き呼び出し”のが主流の呼び方っぽいけど。
Dでもdelegate引数が()の外に飛び出せさえすれば、
同じ表記(Dらしく型表記は付くけど)ができるんだけど……。
112デフォルトの名無しさん:2007/02/13(火) 11:51:19
>>111
そこで代入形式で呼び出すプロパティなんですよ
113デフォルトの名無しさん: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デフォルトの名無しさん:2007/02/13(火) 12:03:42
>>112
あ、なるほど……。代入すると見せかけて、受け取ったdelegateを呼び出すのか。

わーい、超バッドノウハウ。でもそれがグッドな言語仕様に化けてくれれば儲けモノかな。
115デフォルトの名無しさん: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デフォルトの名無しさん:2007/02/13(火) 12:08:40
ああ、static opCall ってそういう事か。
117デフォルトの名無しさん:2007/02/13(火) 12:09:17
つか、後置www
118デフォルトの名無しさん: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デフォルトの名無しさん:2007/02/13(火) 12:16:11
>>105
書けはするんだ……でもarray[10..20]を評価した時点で
10と20の値は忘れられちゃうもんなぁ。

ああ、この堪らないなもどかしさ。Walterはやはり焦らしプレイの天才なのか。
120デフォルトの名無しさん:2007/02/13(火) 12:17:39
opIn_r で
 writefln("true") in If(true);
とか

余計キモイか
121デフォルトの名無しさん:2007/02/13(火) 12:18:48
演算子オーバーロードってこんなに面白いかったのか。
122デフォルトの名無しさん:2007/02/13(火) 12:20:46
イテレータ風の記述をするには、要するに、
最後に置いた delegate を呼ぶための演算子があればいいんだよね。
上がってる候補は : だったり = だったりなんだが、
Walter タンのこだわってる解析の楽さ的には
: はラベルかどうかのチェックが必要になる場合がありそうだから無理そうだな。
= はプロパティあたりをいじくればできそうだけど、どうなんだろうか。
do はアリかも。キーワード追加しなくていいし。
123デフォルトの名無しさん:2007/02/13(火) 12:27:09
後置ifはRubyにもあるし、普通に使いどころはあるかも……。

しかし、何となくフォースの暗黒面に囚われかけてる感覚があるw
演算子オーバーロードは原則、元の意味から逸脱しない範囲で行うこと。
悪い子のみんな、Walterとの約束だ!
124デフォルトの名無しさん:2007/02/13(火) 12:29:23
>>122
いや、必ず括弧を書く必要があれば、
ラベルとの混同はなしでいけるか。
Ruby やプロパティの癖で括弧無しで考えてしまった。

>>123
実用はしたくないけど、遊びで使う分には面白すぎるw
これはヤバいね。
125デフォルトの名無しさん:2007/02/13(火) 12:29:31
個人的には
times(5)~(int i){
 hoge(i);
};
な感じが好きだな。
126デフォルトの名無しさん:2007/02/13(火) 12:33:27
-, *, /, |, & とかも良さげ。
良さげなのがありすぎて、
逆に危険な香りがプンプン匂ってくるw
127デフォルトの名無しさん:2007/02/13(火) 12:33:31
times(5) (int i){ hoge(i); };

いっそ記号無しは……無理、か? 読みづらいか。
128デフォルトの名無しさん:2007/02/13(火) 12:33:50
>>123 IODCCで広く使われることでしょう
129デフォルトの名無しさん:2007/02/13(火) 12:37:35
>>128 D言語ダークサイド友の会じゃねーかw
130デフォルトの名無しさん:2007/02/13(火) 12:37:48
そういや、opAssign なんてのがあったんだっけ。
これ使えば = もいけるな・・・。
131デフォルトの名無しさん:2007/02/13(火) 12:47:32
笑えるソースの見せ合いで大会とか開いたりして
132デフォルトの名無しさん:2007/02/13(火) 12:50:24
>>120
in 使うなら If じゃなくて case にしたら良さげだなw
133デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2007/02/13(火) 13:07:19
opSliceAssign www
136デフォルトの名無しさん:2007/02/13(火) 13:10:40
どうせなら __dollar 使おうぜ
137デフォルトの名無しさん:2007/02/13(火) 13:19:29
>>122
doはキーワード増やさない点、あとRubyと同じだという点もナイスだけど、
場所によってキーワードの意味が違う、となるとちょいと嫌だな。
かつてのautoとscopeのようなことにならなきゃいいが。

でも案外、do-whileのdoと似てると解釈も出来るか……?
138デフォルトの名無しさん: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デフォルトの名無しさん:2007/02/13(火) 13:30:51
>>138
do-whileで「ループ」のニュアンス持ってるのはwhileの方だから、
doだけならループに使われなくても問題無いんじゃないかな。
直訳したって「する」でしかないんだし。
140デフォルトの名無しさん:2007/02/13(火) 13:45:40
>>138
>そういや、continue は return で代用できるとして、break が使えないや。
break用の例外を投げるという荒業はどうだろう。気持ち悪いと言えばそれまでだけど。
141デフォルトの名無しさん: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デフォルトの名無しさん:2007/02/13(火) 14:21:09
returnはreturnでcollectメソッドとかに使いたいので、
他の代用にされてしまうと困るかも。

char[][] titles = books.collect() do (Book book){
 return book.title;
};

opApplyはbreakとかサポートするために、
どうにも妙な作りになっちゃってるんだよね・・。
正直、Exception使ったほうがマシだった気がする。

Rubyじゃどう解決してたか、詳しい人いる?
143デフォルトの名無しさん:2007/02/13(火) 14:27:02
こうできてほしいな。
times(size_t i;5){
  writefln(i);
}
んでopApplyと同様にopStatementに対応して欲しい。
144デフォルトの名無しさん:2007/02/13(火) 14:40:29
>>142
delegate じゃなくて yield という特別なキーワード使ってるから
Ruby だとそこんところどうにでもなる。
145デフォルトの名無しさん:2007/02/13(火) 14:45:41
言語仕様としてマイクロスレッドが欲しいよ。
C#でいうとyieldね。
146デフォルトの名無しさん:2007/02/13(火) 15:02:46
python の yield みたいな外部イテレータも面白い。
マイクロスレッドの代わりにもなる?
147デフォルトの名無しさん:2007/02/13(火) 15:04:06
くだらないことでスレ延ばしてる香具師は自演厨か?
148デフォルトの名無しさん:2007/02/13(火) 15:44:05
>>146
それマイクロスレッド。
149デフォルトの名無しさん: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デフォルトの名無しさん:2007/02/13(火) 16:14:10
ちなみにstatementはステートメントとして使える + ステートメント終了時に自動で破棄(=auto)的なclassの仮想構文ね。
151デフォルトの名無しさん:2007/02/13(火) 17:51:14
はいはいわろすわろす
152デフォルトの名無しさん:2007/02/13(火) 17:51:33
delegateの構文としてdoを採用するんだったらこうなるわけか。

hoge(x, y, z) do|int x, int y|
...
end

どうみてもRubyです。

しかし盛り上がりすぎワロタw
153デフォルトの名無しさん:2007/02/13(火) 20:40:42
D言語の正式版の存在の意味が分からないw
明らかに人柱版としか思えないんですけどwwwww
154デフォルトの名無しさん:2007/02/13(火) 20:51:12
>>153
正式版も何も、単にバージョンが1になったというだけの話でしょw
155デフォルトの名無しさん:2007/02/13(火) 21:05:47
とりあえず落ち着かないとIDEとか無理だよな
156デフォルトの名無しさん:2007/02/13(火) 21:20:10
>>152
hoge(x, y, z) do (int x, int y) {
...
}

でいいんじゃねえの?
パイプって左右の区別なくて気持ち悪い。
157デフォルトの名無しさん: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が行われたものとして処理されます。 */

妄想が窮まってきたので、いい加減もう寝ます……。
158157:2007/02/13(火) 22:09:33
……コメントに付け足させてくれ。

/* 検討事項: ... do (loop char[] delegate(char[]) yield){ ... のようにloopキーワードを付けるなどして、
  delegate引数の宣言の側でbreak、continue可能なことを明示すべきかもしれません。
  この場合、この`yield`はwhileやforの中で呼び出さない限りコンパイルエラーになることになります。 */

今度こそ寝る。
159デフォルトの名無しさん:2007/02/13(火) 22:25:00
>>156
「関数呼び出し do 関数リテラル」って形だな。

doを既存の演算子に置き換えて、
その演算子をオーバーロードしたクラスを関数呼び出しが返せば、
「関数呼び出し 演算子 関数リテラル ;」という形にはなりそう。
その場合、文じゃなくて式だけど。
160デフォルトの名無しさん:2007/02/13(火) 23:16:44
forの方が単純でいいような気がしてきた。
161デフォルトの名無しさん:2007/02/13(火) 23:34:45
トリッキーなコードには演算子オーバーロードは欠かせない。

我々にはopDoが必要だ。
162デフォルトの名無しさん:2007/02/14(水) 05:40:33
ネタでしょ?
163デフォルトの名無しさん:2007/02/14(水) 05:57:51
括弧内に { } があるのってダサくね?
164デフォルトの名無しさん:2007/02/14(水) 06:31:20
まさかこんなのが古きよきforループより分かりやすい、初心者にも
教えやすいとか思ってないよな?
しかも性能が劣るのは確実

単なるジャンプに過ぎないbreakやcontinueの代わりに例外なんて
論外もいいところ

馬鹿じゃないの?ただのオナニーじゃん
165デフォルトの名無しさん:2007/02/14(水) 06:39:54
>>158
おまいばかじゃね?
ネタだとしても、折角do使ってキーワード増やさない様にしてるのに何してんだ。
そんなんなら最初から新たな構文作るだろ。
166デフォルトの名無しさん:2007/02/14(水) 06:41:12
くだらんことでスレ延ばしてる香具師は
仕様いじくりまわして使えなくしてしまおうという
スパイの陰謀にしか思えない
167デフォルトの名無しさん:2007/02/14(水) 06:44:17
どこのスパイだ
168デフォルトの名無しさん:2007/02/14(水) 06:52:10
Jで始まる言語を使うところだな。
Japanese
169デフォルトの名無しさん:2007/02/14(水) 06:52:26
for ループと do 記法の提案の話は別ジャン。
170デフォルトの名無しさん:2007/02/14(水) 07:43:56
一所懸命相手のレスをねじ曲げて馬鹿にしてるんだから水を差すな。
171デフォルトの名無しさん:2007/02/14(水) 08:03:36
うそみたいだろ
全部ネタなんだぜ
172デフォルトの名無しさん:2007/02/14(水) 08:20:55
Don't touch me!
173デフォルトの名無しさん:2007/02/14(水) 09:11:02
sampleのhtmlget.dのhtml表示部分のprintfをwritefに変えたら4invalid UTF-8 sequenceってなった(printfのままだと通る。ちなみに接続先はwww.google.co.jp)
・・・なんで?
もしかして、writefだとUTF-8通らないのか?
174173:2007/02/14(水) 09:11:56
あっ、改行忘れてた。すまん
175デフォルトの名無しさん:2007/02/14(水) 09:25:14
BOMとか関係あったりして
176デフォルトの名無しさん:2007/02/14(水) 11:44:20
逆だろ、writefはUTF-8とか16辺り以外通らない。
177デフォルトの名無しさん:2007/02/14(水) 12:01:41
みんな速度には結構神経使うな……当然ちゃ当然だが。

一口に速度と言っても、みんなどれくらいのをイメージしてるんだ?
俺は元々Java/Webな人間だし、個人的に作りたいモノも大抵Winアプリだしで、
停止時間が0.3秒くらいに収まればいいかな、くらいに思ってるけど。
だからforよりパフォーマンス落ちるとか程度は、(多分)全然許容範囲。

やっぱゲームとかリアルタイム処理な人は、
1万回のループが1/60秒以内に収まらなきゃ論外(数値は適当)、
delegateとか話にならん、て感じなんだろか。
178デフォルトの名無しさん:2007/02/14(水) 12:58:51
停止時間とか言ってる意味がよく分からんが、
ループ箇所の処理時間はボトルネックになりやすいという
一般論を前提にして今の話は進行してたんだろ
179デフォルトの名無しさん:2007/02/14(水) 13:04:37
>>176
たしかにそうみたいだな
import std.stdio;

void main()
{
printf("ほげほげ");
writef("ほげほげ");
}
で、ちゃんと表示されてるから。
でも、なんでちゃんと表示できなかったんだろう・・・>htmlget.d
180デフォルトの名無しさん:2007/02/14(水) 13:17:42
>>178
GC関係じゃね?<停止時間
181デフォルトの名無しさん:2007/02/14(水) 13:30:43
>>177
別に性能がどうでもいいんならVM言語やスクリプト言語でいいし
って話じゃねーの?

画像データをピクセル単位で弄くったりすることを考えると
遅いループなんて使う気にならないよ、少なくとも俺は。
182デフォルトの名無しさん:2007/02/14(水) 13:47:42
>>178
停止時間は例えば「ユーザがメニューから項目を選択してから、
再びユーザに制御が戻るまでの時間」くらいのつもりだった。

>>181
性能がどうでも良いとしても、Dは結構魅力的だと思うけど。
ランタイム要らずで起動の早い単体exeを作れる、かつC/C++より幾分モダンだし。

とゆーか、ごめん。なんか分かり切った事を聞いた気が自分でもしてきた。
183デフォルトの名無しさん:2007/02/14(水) 14:46:30
D言語そのものが人柱言語なんだからこのままイカレ仕様につっぱしってほしいぜ!
# 実用に使えるかどうかはプログラマの腕次第
184デフォルトの名無しさん:2007/02/14(水) 15:00:48
Rubyのイテレータとか見てると、
複雑な制御構造やありがちな制御構造をモジュール化して、
名前を付けられるって点がありがたいなぁ、と思う。
185デフォルトの名無しさん:2007/02/14(水) 15:13:57
>>177
意外と、会計処理でも、5時間かかるか、4時間で済むかは大問題だったりする。
夜間バッチのスケジュールが有って、会計処理なんて今時古いとか言われても、
必要なもんなんだし、お前らみたいにお絵かきやエロやってる訳じゃなく、従業員
が1万人関連取引先含めると20万人、顧客まで含めると100万人規模の、会社
にとっては、本当に死活問題。
186デフォルトの名無しさん:2007/02/14(水) 15:18:17
>>173
www.google.co.jpはuser agentを見てUTF-8返したりShift_JIS返したりしてた気が。
たぶんSJISで送られてきてる。
187デフォルトの名無しさん:2007/02/14(水) 15:43:07
>>186
つかさ。
普通にprintfで書き出して
hoge.exe > tmp.txt
でtmp.txtの文字コード調べりゃ済んだはずだよな
188デフォルトの名無しさん:2007/02/14(水) 15:48:27
そういう高速な処理したい人は普通にfor書いて
それ以外の速度が死活問題にならない人は短くてわかりやすい構文が使えるってのでいいんじゃないかな。

コンパイルはもともと激速なんだし構文増えてもそんなに遅くはならないと思うし。
189デフォルトの名無しさん:2007/02/14(水) 16:23:46
>>188
それはもったいないとおも
190デフォルトの名無しさん: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デフォルトの名無しさん:2007/02/14(水) 16:59:48
muzzle-loading smoothbore みた事無いからわかんないや
192デフォルトの名無しさん:2007/02/14(水) 17:01:40
>>188
ここらで直交性について触れておくべきだろうか。
まぁDはとっくに醜悪な恐竜になりつつあるがな。C++のように。
193デフォルトの名無しさん:2007/02/14(水) 17:12:22
> muzzle-loading smoothbore
ググって見たら軍事用語かいな。どういう喩えなのかさっぱり解らんw

>>192
STLだと型、データ構造、アルゴリズムだっけ。
Dが醜くなりつつあるというなら、どっかを削るべき?
194デフォルトの名無しさん:2007/02/14(水) 17:21:11
> muzzle-loading smoothbore

muzzle-loadingは先込め式銃で銃口から玉を込める銃のこと。
そしてsmoothboreはライフリングがない銃の事らしい。
とりあえず火縄銃なのかな?
195デフォルトの名無しさん:2007/02/14(水) 17:26:15
> 火縄銃
なるほど、obsoluteだな
196デフォルトの名無しさん:2007/02/14(水) 17:34:46
つまりDの目標はBoostを現在の銃と火縄銃くらい時代が違う物にしたいと
197デフォルトの名無しさん:2007/02/14(水) 17:36:10
要は「ちょwwBoostwwwwww」ってなるくらいってことだろ
198デフォルトの名無しさん:2007/02/14(水) 17:43:37
for や do のあたりの話をまとめると、こんな感じか。

・ foreach(i : 1..array.length, n; array) { ... }
 ってできたら、インデックスもズレないし、便利だよね?

・ ついでに
 foreach(i : 0..TIMES) { ... }
 ってできてもいいんじゃね?

・ それとは別に、Ruby のイテレータみたいなの欲しいな。
 times(5) do (size_t i) { ... }
 void times(size_t n, int delegate(size_t) yield) { ... }
 みたいな。
199デフォルトの名無しさん:2007/02/14(水) 17:44:36
boostが出てくるということは、
強力で設計の良いライブラリも持ちたいという意志はあるのねw
頑張れWalter! 出来れば「標準」ライブラリで頼むぜ!
200デフォルトの名無しさん:2007/02/14(水) 17:46:57
>>199
>強力で設計の良いライブラリ
boostはそんなライブラリじゃない訳だが。
201デフォルトの名無しさん:2007/02/14(水) 17:48:39
頑張れWalter!
202デフォルトの名無しさん:2007/02/14(水) 17:49:35
>>200
Walterはboostを持ちたいと言っている訳じゃないんだからいいんじゃね?
203デフォルトの名無しさん:2007/02/14(水) 17:52:26
boost は標準化目指してなかったっけ?
204デフォルトの名無しさん:2007/02/14(水) 17:53:56
>>202
既にtupleとかbindとか標準ライブラリでサポートされてきてるじゃん。
205デフォルトの名無しさん:2007/02/14(水) 17:54:41
>>198
そのあたりHaskellだとキレイにかけそう。
206デフォルトの名無しさん:2007/02/14(水) 17:55:59
>>203
C++0xで採用される予定のtr1はboostが基になってるのが多いね。
207デフォルトの名無しさん:2007/02/14(水) 18:04:07
とりあえず boost は糞で桶?
208デフォルトの名無しさん:2007/02/14(水) 19:30:05
"Boost implementation code look as..." だから、
boostの「実装コードが」時代遅れに見えるくらいにしたい、じゃね。
boostと同じ(or以上の)レベルの事を、もっと奇麗なコードで出来る言語仕様を……
というニュアンスとも。
209デフォルトの名無しさん:2007/02/14(水) 20:33:13
>>208
俺にもそう読めた
boostライブラリを言語仕様で実現したいんじゃないの
210デフォルトの名無しさん:2007/02/14(水) 22:02:34
209が208に同意してるのに微妙に違うこと言ってて混乱。

Boostみたいなライブラリをダーティハック(とかいったらC++の人に叱られそう)なしで出来るようにしたいって話では。
211デフォルトの名無しさん:2007/02/14(水) 22:13:58
変態っていえば多分彼らは納得してくれる。
212デフォルトの名無しさん:2007/02/14(水) 22:25:59
たしかにやべえ変なことしてるなあコレwって部分に興奮してる部分はあるかもだよな、>C++の人
213209:2007/02/14(水) 22:40:39
>>210
よく読んでみたら確かに微妙に違ったみたい
ニュアンスを完全には把握できてないや

ところでさあ
TangoってErrorクラスがなくなってたりして
dfl(dwtも?)と一緒に使うことができないっぽいんだがどうしようもないのかこれ
214デフォルトの名無しさん:2007/02/15(木) 09:26:23
ファイルコピーてstd.fileに無いの?
215デフォルトの名無しさん:2007/02/15(木) 10:20:57
>>214
? ふつうにvoid copy(char[] from, char[] to); が載ってるが。
216199:2007/02/15(木) 10:33:07
>>200
boostを思い出してみるに、確かに何となく違った気がする。
C++の言語仕様ならこれだけのことが可能なんだから、
これくらいは基礎として入っているべきだ、て感じ? 実際>>206な話だし。

GUIに通信にXMLにと何でも最初から入ってる、Javaみたいな意味での”強力”さってのは、
Dの標準ライブラリでは目指して無さそう? それはそれでいいのだけど。
217デフォルトの名無しさん:2007/02/15(木) 11:33:55
>>216
標準ライブラリにバイナリ本体を載せなくても、標準的なインターフェースは定義予約しておいてほしいと思う。
218デフォルトの名無しさん:2007/02/15(木) 13:05:53
>>186
あぁ、本当だ
よくよく見たらcharset=Shift_JISになってたわ
219デフォルトの名無しさん:2007/02/15(木) 20:28:59
IEやExcelを操作したいのだけど
COMを扱うライブラリを、紹介してもらえないですか?
出来れば、スクリプト並みに楽に扱えるものだと嬉しいです

あー、DもCOMも検索しづらい
220デフォルトの名無しさん:2007/02/15(木) 23:33:38
伸びてるな
221デフォルトの名無しさん:2007/02/16(金) 00:54:15
>>113-152
この流れ、おもしろすぎwwww
はたから見てて、久々にD言語使いたくなったwwww


222デフォルトの名無しさん:2007/02/16(金) 02:18:21
yield欲しい……。
223デフォルトの名無しさん:2007/02/16(金) 02:24:25
てかマイクロスレッド自体は実現できるんだったな・・・。
うらおの奴が作ってたような・・・。
224デフォルトの名無しさん:2007/02/16(金) 02:33:01
>>223
使用メモリを自分で決めるのと例外が投げられないのがちょっと気になる。
225デフォルトの名無しさん:2007/02/16(金) 02:46:26
>>224
あー確かにそうだったな・・・。
でもスタックって最初からサイズ決まってるんじゃないっけ。
226デフォルトの名無しさん:2007/02/16(金) 03:35:21
What's New for D 1.006
Feb 15, 2007
New/Changed Features

* Added -Jpath switch, which is now required in order to import text files.
* Enhanced -v output to include actual filename.
* name string for TypeInfo_Struct now part of the TypeInfo_Struct comdat.
* Compile time execution of functions
227デフォルトの名無しさん:2007/02/16(金) 03:42:17
* Compile time execution of functions
コンパイル時ユニットテストが・・・!!
228デフォルトの名無しさん:2007/02/16(金) 10:34:50
> * Compile time execution of functions
定数要求されてるところに関数書いておくと、それが
いくつかの条件をみたす関数ならコンパイル時に実行しとくよ、
という話で、ユニットテストとはちょっと違う気が
229デフォルトの名無しさん:2007/02/16(金) 12:00:35
class Person{
 MyArray!(Person) children = new MyArray!(Person)();
}

とか、ひょっとして通るようになったんでせうか。
230229:2007/02/16(金) 12:44:32
ダメだた……orz
231デフォルトの名無しさん:2007/02/16(金) 13:24:14
よー考えたら、newはGCにメモリをねだる処理なんだから、
コンパイル時実行で解決できるわきゃなかったか……。スレ汚し失礼。
232デフォルトの名無しさん:2007/02/16(金) 16:00:13
Web鯖みたいの作っててacceptしたSocketをスレッド作ってどんどん渡してってるんだけど
GCが自動的に動いたときに Error: Thread error: cannot pause とかいってデッドロックしてしまう
これはphobosかなんかのバグ?
233デフォルトの名無しさん:2007/02/16(金) 17:41:38
GCが動く時には全てのスレッドを停止しなければならないとかは聞いたが、
どういう順番でどう停止させているのか、あたりに問題が潜んでる可能性はあるかも。

ただ、普通にデッドロックが発生する設計になっちゃってるせいじゃないか?
という疑念がひしひしと。同期の設計を慎重に見直してみたら?
234デフォルトの名無しさん:2007/02/16(金) 18:09:04
235デフォルトの名無しさん:2007/02/16(金) 19:05:41
std.threadを見てみたが、これはいたるところ微妙すぎないか?
というか書き直したほうがいいなこれ
Walterタンがんばって><
236デフォルトの名無しさん:2007/02/17(土) 01:44:30
>>235
ひどい奴だな、そこまでわかってるなら手伝ってやれよ。

つか別インプリメントして投稿ってのはナシなの?
237デフォルトの名無しさん:2007/02/17(土) 01:57:01
std.threadをてきとうに応急処置してみたんだがどうだろうか?
だれかえろいひと見てもらえると助かる
http://grugru.mine.nu/file.cgi?v=guru_guru_2560.zip
238237:2007/02/17(土) 02:07:30
あああ 間違った
void wait(uint milliseconds)
のほう変更し忘れた
239237:2007/02/17(土) 02:41:23
http://grugru.mine.nu/file.cgi?v=guru_guru_2561.zip
イベントのあたりがいろいろ間違ってたのをなおしました
240デフォルトの名無しさん:2007/02/17(土) 21:30:04
なんちゅ〜かDっぽくなくて恐縮なんだが、
テンプレートクラスA(T)とクラスBがあったとして、
A!(B)のオブジェクトのclassinfoをたどって、
Tの(ここではB)のClassInfoなりTypeInfoって取得可能?
241デフォルトの名無しさん:2007/02/17(土) 21:53:22
テンプレートクラスの引数はclassinfoだとメンバ変数nameが一応持ってはいるけど、文字列だしどうしようもない。
242デフォルトの名無しさん:2007/02/17(土) 22:26:49
mixinはどうだろ
243デフォルトの名無しさん:2007/02/17(土) 23:29:10
>>239

しかし俺には評価できない罠
どういう問題が解決されているのかな
244デフォルトの名無しさん:2007/02/17(土) 23:46:11
>>243
http://f17.aaa.livedoor.jp/~labamba/?BugTrack%2F26
たぶんこれが直ってるのと、スレッドハンドルがどんどんリークしていたのを修正しました
245デフォルトの名無しさん:2007/02/18(日) 01:25:19
>>242
classinfo.nameはコンパイル時定数じゃないから…
246デフォルトの名無しさん:2007/02/18(日) 02:13:13
>>244
>>234で絶賛放置中のBugであり>>232の原因の疑いアリという代物じゃないっすか。
問題ないならcommitして欲しいくらいですねぇ。
私ゃ評価も翻訳もできない身ですけど・・。
247デフォルトの名無しさん:2007/02/18(日) 02:58:27
>絶賛放置中
クソワロタ


身に覚えがあるし・・・
248デフォルトの名無しさん:2007/02/18(日) 09:11:54
>>240

import std.stdio;

class A(T){}
class B{}

template TypeOfA( T )
{
static if( is(T U : A!(U)) )
alias U TypeOfA;
else
alias void TypeOfA;
}

int main()
{
alias A!(B) A_B;

writefln( typeid( TypeOfA!(A_B) ) ); // modulename.B

return 0;
}

こんなんじゃだめ?
249240:2007/02/18(日) 10:35:53
>>248
A_Bの型からじゃなくて、A_Bのオブジェクトから取得可能か、知りたいんだよね。
Dっぽくなくて恐縮なんだが。

>>241のゆうように無理っぽそうだが。(dクス)
250デフォルトの名無しさん:2007/02/19(月) 01:35:01
SDLの話なんだが・・・
hoge.dとsdltest.dっていう名前のソースが二つあって、
以下のようにコンパイルすると、sdltest.dのほうだけ128が返るんだが・・・どうしてだろう?
この128はdmdが返してるのか、SDLが返してるのか・・・それすらも分からないorz
%dmd hoge.d SDL.lib #SDL.libはあらかじめPATHが通ってる
%dmd sdltest.d SDL.lib
ソースは以下の通り
import std.stdio;
import SDL

int main(char[][] args)
{
  if (SDL_Init(SDL_INIT_VIDEO))
    throw new Error("Could'nt initialize video");
  printf("hello,SDL!");
  return 0;
}
251デフォルトの名無しさん:2007/02/19(月) 01:36:24
あっ、import SDLに;忘れてた・・・orz
もう寝る。
252デフォルトの名無しさん:2007/02/19(月) 01:37:51
あぁ・・・orz
if (SDL_Init(SDL_INIT_VIDEO)) > if (SDL_Init(SDL_INIT_VIDEO) < 0)
でした・・・
こんどこそ寝る。
253デフォルトの名無しさん:2007/02/19(月) 01:50:54
あぁ・・・そうかDLLだ
おし、原因分かったから寝る。
254デフォルトの名無しさん:2007/02/19(月) 01:52:03
寝ろwww
255デフォルトの名無しさん:2007/02/19(月) 03:34:23
Nero Burning Rom
256デフォルトの名無しさん:2007/02/19(月) 03:45:00
std.socketのブロッキングモードがすごく使いにくいんだけどなんとかならんもんかなー
GCが動いたときにSIGUSERが発生してacceptとかreceiveがEINTRで抜けてくるから
期待してるブロッキングモードの利点があんまり無い(´・ω・)
257デフォルトの名無しさん:2007/02/19(月) 11:23:05
そいやDLLの話で思い出したが。
implibとか使ってDLLからインポートライブラリ作ろうとしても、
なんか現状、すんなりとできないよね?

extern(Windows)つけた関数がDのマングリング受けてて、リンカでコケまくり。
呼び出し規約とマングリングの区別で俺の頭が混乱してくる始末。
extern(Windows)な関数て、"FunctionName@8"みたく
マングリングされてくれなきゃいかんのでは……?
258257:2007/02/19(月) 12:12:51
あれ? ごめん、なんか全然違った気がする。

extern(Windows)使うと"_FunctionName@8"みたいなマングリングがされて、
DLLの方は素直に"FunctionName"みたいなエクスポート名になってるのに困るなぁ、
ということだった。
259デフォルトの名無しさん:2007/02/19(月) 13:21:44
.defを書け、というのがドキュメントに書いてあったような
260デフォルトの名無しさん:2007/02/19(月) 15:35:14
def tech
261デフォルトの名無しさん:2007/02/19(月) 21:43:13
>>259
あい。だからdefファイル作ったんだけども、やっぱりメンドイなぁ、て。
特に@以降の引数のサイズ表す数字が。

htodで.dファイル作って、
そこに含まれる関数定義を関数呼び出しコードに変換するスクリプトなんて書いて、
それをdmdに食わせてリンカにエラーメッセージ出力させて、
それをパースしてdefに変換するスクリプトなんて書いて……とか。

なんだかとても無駄なことをしてる気が。誰かいい方法知りません?
262デフォルトの名無しさん:2007/02/20(火) 00:31:08
>>256
signalでも抜けちゃうから、結局なんかやらないといけないけどな
263デフォルトの名無しさん:2007/02/20(火) 00:36:48
ってGCのときにSIGUSERが発生するので困ってたのか。

recvのwraper作ってEINTRを無視すれば良いんじゃないの?
264デフォルトの名無しさん:2007/02/20(火) 02:57:13
>>263
receiveとかsendはラッパ作れば問題ないけど、acceptの返り値がSocketなのがマズー
ラップクラスでオーバライドした関数を使ってくれない orz
acceptで返ってきたSocketのソケットディスクリプタだけコピーして、
自分のクラスにセットしようと思ってもモジュール外だからSocketのprivateにアクセスできないし。
結局ほとんど全部自前で作るはめに(´・ω・`)
phobosの方でなんとかしてもらえれば助かるんだけど。。
265デフォルトの名無しさん:2007/02/20(火) 10:36:58
>>264
acceptingをオーバーライドすればacceptで自前のSocketクラスを返せたはず
266デフォルトの名無しさん:2007/02/20(火) 12:59:45
>>265
キター できました。ありがとうございます
一生懸命 *((cast(int*)newSock)+2) = *((cast(int*)sock)+2);
とかやってたのは内緒
267336:2007/02/21(水) 13:52:55
What's New for D 1.007
Feb 20, 2007

・Comparison operators are no longer associative; comparison, equality, identity and in operators all have the same precedence.
・out and inout parameters are now allowed for compile time function execution.
・The .dup property is now allowed for compile time function execution.
・Updated lib to insert COMDATs into symbol table.
・Class references can no longer be implicitly converted to void*.
268デフォルトの名無しさん:2007/02/21(水) 15:08:40
What's New for D 1.007
Feb 20, 2007

・ 比較演算子を結合できないようにしました。比較に関する演算子は全て同じ優先順位になります。
 (a < b == c とか書けないようになった。
  どうしてもやりたい場合は多分 (a < b) == c でイケるんじゃないかと。
  c が bool だとありうるよね、一応)
・ out と inout 引数があっても、コンパイル時に関数を実行できるようになりました。
・ .dup プロパティがコンパイル時に実行できるようになりました。
・ COMDAT を lib のシンボルテーブルに含めました。
・ クラスの参照を暗黙に void* へキャストできないようにしました。
269デフォルトの名無しさん:2007/02/21(水) 15:25:56
微妙な修正群・・・
やはりこれは真の1.000への修正だろうか。
270デフォルトの名無しさん:2007/02/21(水) 15:28:59
>>269
かなり重要な修正じゃん。
それと今dmdが目指してるのは2.0。
271デフォルトの名無しさん:2007/02/21(水) 21:31:32
1.0はただの踏み台ですかw
安定志向という考えはD言語開発陣の辞書には無いということですかwwww
272デフォルトの名無しさん:2007/02/21(水) 21:34:51
そんなもん。D言語はWalterタソの玩具。安定指向な言語使いたければJavaとかC#とかC++とか使ってなって話で。
273デフォルトの名無しさん:2007/02/21(水) 22:40:45
なんと穏やかで小粒な修正……侘び寂びを感じるな。

実際の話、WalterもDの開発を通して新たに学ぶことがあるんだろうか。
Dで色々試して要るもの要らないものを見極めたら、
その集大成としてD--でも作ったほうがいいんじゃなかろーか、とか思う。
274デフォルトの名無しさん:2007/02/21(水) 22:42:08
1.005でぶっ飛んだ機能をつけたので、小粒な修正がしばらく続くかと。
275デフォルトの名無しさん:2007/02/21(水) 23:34:14
面白いおもちゃだよなあ。
276デフォルトの名無しさん:2007/02/22(木) 06:40:21
Walterタンは仕事でC++のコンパイラを作っててフラストレーションがたまってるから
趣味でDを作ってるンよ
277デフォルトの名無しさん:2007/02/22(木) 07:27:11
D言語って言うくらいだからC言語やC++より高性能なわけ?
278デフォルトの名無しさん:2007/02/22(木) 07:50:41
高性能ですが別に速かったり表現できることがすごいというわけでは無いんです
279デフォルトの名無しさん:2007/02/22(木) 08:06:03
高性能ですが
高性能ですが
高性能ですが
280デフォルトの名無しさん:2007/02/22(木) 08:10:09
C++厨がファビョったかな。
281デフォルトの名無しさん:2007/02/22(木) 11:00:34
D言語(笑)
282デフォルトの名無しさん:2007/02/22(木) 11:31:30
言語の性能ってのも微妙な話な気がするが、
「高機能」となら言ってもいい・・よな?

あと、綺麗なコードを書けるという意味では、
「表現できること」は比較にならんほど向上してると思う。
283デフォルトの名無しさん:2007/02/22(木) 11:32:16
>>277
おまいに問いたい。Z言語は最高に高機能なんですか?
ttp://ja.wikipedia.org/wiki/Z%E8%A8%80%E8%AA%9E
284デフォルトの名無しさん:2007/02/22(木) 13:18:45
D 言語は素晴らしいけど、
仕様が固まらないと実用する気にならないのが難点。
285デフォルトの名無しさん:2007/02/22(木) 13:20:56
仕様が固まったD言語なんてD言語じゃない><
286デフォルトの名無しさん:2007/02/22(木) 13:25:07
仕様が固まったD言語はD言語じゃなくてD-だよ
287デフォルトの名無しさん:2007/02/22(木) 13:57:55
正直、Walterタンの中では ver 1.000 って ver 0.1.000 くらいの感覚だよね。
288デフォルトの名無しさん:2007/02/22(木) 14:45:10
てゆーか正月にむりやりD1.0にしたからこんな「真のD1.0」とかなんとかいわれちゃうんだよね
289デフォルトの名無しさん:2007/02/22(木) 15:30:32
名前がDのせいで必要以上に期待されてるんだろな。
290デフォルトの名無しさん:2007/02/22(木) 16:38:09
名前がMarsのままならマイナー言語で終わるヤカン
291デフォルトの名無しさん:2007/02/22(木) 17:06:32
Dが完成する時=WalterタンがE言語に手を出す時
じゃないかな。
292デフォルトの名無しさん:2007/02/22(木) 17:09:31
Dが完成する時=Walterタンが飽きたとき
293デフォルトの名無しさん:2007/02/22(木) 18:18:25
他の誰かが受け継ぐ可能性も・・・
294デフォルトの名無しさん:2007/02/22(木) 18:29:57
      ☆ チン     マチクタビレタ〜
                        マチクタビレタ〜
       ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        ヽ ___\(\・∀・) < コルーチンまだ〜?
            \_/⊂ ⊂_ )   \_____________
          / ̄ ̄ ̄ ̄ ̄ ̄ /|
       | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
       |  愛媛みかん  |/
295デフォルトの名無しさん:2007/02/22(木) 18:42:53
多倍長整数とかもあると嬉しい。
296デフォルトの名無しさん:2007/02/22(木) 19:40:27
多倍長型組み込まれないかなぁ
ライブラリでの提供より組み込み型の方がパッと見見やすい気がする
そんなもんどうでも良いと言うなら今から作る
297デフォルトの名無しさん:2007/02/22(木) 19:53:46
OutBufferがあってもInBufferがない。ついでにエンディアン関連も充実させてくれ。
298デフォルトの名無しさん:2007/02/22(木) 20:12:34
OutBufferって完全にMemoryStreamと役割かぶってて微妙なんだよなー
phobosを一度整理してこの手のライブラリ間の重複をなくして欲しい。
299デフォルトの名無しさん:2007/02/22(木) 20:40:27
このスレを見ている人はこんなスレも見ています。(ver 0.20)
【PS2】オトスタツOtostaz [家ゲー攻略]
べアルファレスを語るスレ part14 [家ゲーRPG]
【肉食いたい】お金くださいPart27【米もない】 [借金生活]
★合法的に誰かが金を貸してくれるスレ その42★ [借金生活]
45歳以上の転職Part7 -25 OR 6 TO 4- [転職]
300デフォルトの名無しさん:2007/02/23(金) 07:04:14
内部utf-16処理にしようとして、はてunicodeリテラルがあったかと我に帰る
301デフォルトの名無しさん:2007/02/23(金) 11:17:31
え、無かったっけ
302デフォルトの名無しさん:2007/02/23(金) 13:45:26
ttp://video.google.com/videoplay?docid=-7073020265668105471
Walter Bright @ NWCPP: Advanced D Programming Language Features
303デフォルトの名無しさん:2007/02/23(金) 14:25:07
手前の男の食い物が気になって気になって
304デフォルトの名無しさん:2007/02/23(金) 15:45:50
>>300
"ほげ"w
どっちにしろwcharを扱えるphobosの関数が足りてなくてどうしようもない。
305デフォルトの名無しさん:2007/02/23(金) 15:51:52
cast(wchar)hoge でもたしかUTF8からUTF16に変換してくれた気がする
306デフォルトの名無しさん:2007/02/23(金) 18:57:34
>>304-305
thx.

wchar[] apology =
"プログラムは動作を停止しました"w
~"解決策を確認しています"w
~"ご迷惑をおかけしまして申し訳ありません"w;

vip的になってしまった
307デフォルトの名無しさん:2007/02/23(金) 19:15:12
>>306
まぁD言語だと文字列は文脈に応じて自動的にwchar[]とかdchar[]にもなるからこれでいんだけどな
wchar[] apology = 
"プログラムは動作を停止しました"
"解決策を確認しています"
"ご迷惑をおかけしまして申し訳ありません";
308デフォルトの名無しさん:2007/02/23(金) 19:18:15
>>307
×文字列
○文字列リテラル
309デフォルトの名無しさん:2007/02/23(金) 20:23:26
>>308
お、すまんすまん。確かにその通り。
あんがと。
310デフォルトの名無しさん:2007/02/23(金) 20:34:39
>>302
Northwest C++ Users Groupの2007年集会で行われた、
WalterによるD言語のプレゼン……でいいのか?

トーク内容どころか右の要約(らしきもの)すらよく分からん(´・ω・`)
DとC++のコードを比較しながら
「mixinとかtupleとかscope guardとか良いものだー」って感じ?
311デフォルトの名無しさん:2007/02/23(金) 22:48:27
まぁ確かにmixinとかtupleとかscope guardは良いものだ
312デフォルトの名無しさん:2007/02/24(土) 00:01:09
tuple リテラルがないのは、いい文法が思いつかないからか?
313デフォルトの名無しさん:2007/02/24(土) 00:15:49
tupleってなにに使うのかよくわからない俺に誰か教えて欲しい。
314デフォルトの名無しさん:2007/02/24(土) 01:00:20
>>313 可変個引数テンプレートでしか使ってない俺
315デフォルトの名無しさん:2007/02/24(土) 02:04:17
nippleってなにに使うのかよくわからない俺に誰か教えて欲しい。
316デフォルトの名無しさん:2007/02/24(土) 02:21:11
サラミはおつまみですよ。
317デフォルトの名無しさん:2007/02/24(土) 02:39:16
D言語のエディタってまさかwindbg.exeじゃないよね?
318デフォルトの名無しさん:2007/02/24(土) 03:39:55
319デフォルトの名無しさん:2007/02/24(土) 05:24:43
エディタなんて付いてない
320デフォルトの名無しさん:2007/02/24(土) 08:30:58
>>313
適当に複数の値を戻り値にしたい場合に使える。
例えば Ruby だと

d, m = divmod(5, 2)

def divmod(x, y)
 return x / y, x % y
end

みたいにできる。
構造体使うのは各値に名前がつくからバグ抑制にはいいんだが、
適当にちょっとしたプログラムを作る時には少々うざったい。
321デフォルトの名無しさん:2007/02/24(土) 11:16:08
Dのtupleは関数から戻せないだろ
322313:2007/02/24(土) 12:04:27
おう成る程と思って試してみたらできなかったからちょい迷ってた。
公式で「関数からタプルを返せるように」 する予定は一応あるみたいだけども。
323デフォルトの名無しさん:2007/02/24(土) 12:25:44
%(int, int) divmod(int x, int y) {
 return %(x / y, x % y);
}

%(d, m) = divmod(x, y);

少しダサイか。
単項 % はないから導入可能な文法ではあるんだろうけど。
いくつか候補はあるけど、どうよ?

/(int, int) divmod(int x, int y) { return /(x / y, x % y); }      /(d, m) = divmod(x, y);
%(int, int) divmod(int x, int y) { return %(x / y, x % y); }      %(d, m) = divmod(x, y);
?(int, int) divmod(int x, int y) { return ?(x / y, x % y); }      ?(d, m) = divmod(x, y);
^(int, int) divmod(int x, int y) { return ^(x / y, x % y); }      ^(d, m) = divmod(x, y);
|(int, int) divmod(int x, int y) { return |(x / y, x % y); }       |(d, m) = divmod(x, y);
:(int, int) divmod(int x, int y) { return :(x / y, x % y); }       :(d, m) = divmod(x, y);
.(int, int) divmod(int x, int y) { return .(x / y, x % y); }       .(d, m) = divmod(x, y);
=(int, int) divmod(int x, int y) { return =(x / y, x % y); }      =(d, m) = divmod(x, y);
<(int, int) divmod(int x, int y) { return <(x / y, x % y); }      <(d, m) = divmod(x, y);
>(int, int) divmod(int x, int y) { return >(x / y, x % y); }      >(d, m) = divmod(x, y);
<<(int, int) divmod(int x, int y) { return <<(x / y, x % y); }    <<(d, m) = divmod(x, y);
>>(int, int) divmod(int x, int y) { return >>(x / y, x % y); }    >>(d, m) = divmod(x, y);
>>>(int, int) divmod(int x, int y) { return >>>(x / y, x % y); }  >>>(d, m) = divmod(x, y);
<=(int, int) divmod(int x, int y) { return <=(x / y, x % y); }    <=(d, m) = divmod(x, y);
>=(int, int) divmod(int x, int y) { return >=(x / y, x % y); }    >=(d, m) = divmod(x, y);
324デフォルトの名無しさん:2007/02/24(土) 13:51:11
こういうのはあかんのんか?

@(int, int) divmod(int x, int y) { return @(x / y, x % y); } @(d, m) = divmod(x, y);
$(int, int) divmod(int x, int y) { return $(x / y, x % y); } $(d, m) = divmod(x, y);
\(int, int) divmod(int x, int y) { return \(x / y, x % y); } \(d, m) = divmod(x, y);
325デフォルトの名無しさん:2007/02/24(土) 14:00:43
これがいいんだけどラベル構文があるから無理だし。
int:int divmod(int x, int y) { return x / y : x % y; } d:m = divmod(x, y);
""wのように[int,int]tって方法もありそう。

#タプルの連結を~でできるようにならないかなぁ。
326デフォルトの名無しさん:2007/02/24(土) 20:48:00
>>323
タプルリテラルがかけなくとも、単に型タプルを戻り値型のところに
書けるようになれば十分じゃない? Tuple!(int,int)てな感じで。
関数が(値タプルだけではなく)型タプルも返せるようになれば、
 template tuple(T...){
  Tuple!(T...) tuple(T...){
   return Tuple!(T...);
  }
 }
とかテンプレート関数を定義できるようになるだろうから、
テンプレート関数をコンパイル時実行させることを利用して
 tuple(int,int) func(){
  return 3,6
 }
とか書けるようになるだろうし。
castとかと類似の文面になる方がよいと思う。
327323じゃないけど:2007/02/24(土) 21:34:53
>>326
型タプルを返せるようになったならこうでしょ。
TL tuple(TL...)(TL tl){
  return tl;
}
下もこう。
tuple(int,int) func(){
  return tuple(3,6);
}
でも、やっぱタプルリテラルは必要。内部機能を使うのにimportをするのはダサい。
328デフォルトの名無しさん:2007/02/24(土) 23:21:12
キーワード導入したくないんだろうな、やっぱ。
でも、ここは導入してもいい気がする。

あと、タプルの展開もできるようにして欲しい。
Ruby だと配列を展開して引数に渡せるけど、あれみたいなやつを。

double foo(double x, double y) {
 return x / y;
}
auto x = tuple(1.0, 2.0);
writeln(foo(*x));

みたいな。


Ruby の関数の引数は確か実はタプルとして実装されてたと思うけど、
あれはコンマ演算子がタプル生成演算子になってるからできる芸当なんだよな。

D で C と同様の仕様のコンマ演算子って本当に必要なんだろうかね・・・と思ったけど、
三項演算子の中で複数の式を実行したい場合に必要と言えば必要か。
コンマ演算子は評価順が決まってるべきだけど、
引数は評価順が決まってない方が都合がいい場合もあるから、
両者を同一のモノで実装するのは速度との両立という観点からすればアレだし、
D では Ruby と同じにしない方が良さげだな。
329デフォルトの名無しさん:2007/02/24(土) 23:32:04
>>328
既にできるじゃん。
double foo(double x, double y) {
  return x / y;
}
auto x = TypeTuple!(1.0, 2.0);
writeln(foo(x));
330デフォルトの名無しさん:2007/02/25(日) 00:00:28
しまった。確認してなかった。
そうか、できるのか・・・。
331デフォルトの名無しさん:2007/02/25(日) 00:08:11
{
scope hoge = new File("foo.bar", FileMode.OutNew);
with(hoge){
writefln("Foo");
}
}

これを、

with(scope new File("foo.bar", FileMode.OutNew)){
writefln("Foo");
}

こうかけるようになったらいいなって思った。
332デフォルトの名無しさん:2007/02/25(日) 00:08:21
なんかD言語のタプルなんてどうでもよくて
Rubyの話をしに来てるみたいだな
333デフォルトの名無しさん:2007/02/25(日) 03:03:18
>>331
文法上は"with(Expression)"だからなぁ。
scopeは属性だからExpressionにはくっつけられないのよね。

でも、withのExpressionの値を保持しておく変数って、内部的に生成されてるはずだよね?
だとしたらその変数の型とかって、値から推論されて決まってるのかな。
「勝手に推論が使われて明示的な宣言ができない」部分があるってのは、良くない事な気がする。
推論は明示的な宣言を省略して簡略化できる機能、であってほしい。

……"with"を文法上は変数宣言っぽく扱って、修飾子がつけられるようにする、とか。

scope synchronized char[] with(["foo", "bar", "baz"]){
 writefln("Foo");
}

ああ、scopeとsynchronized以外に意味のある宣言が見当たらないや。
scopeのブロック外に出てるとかキモいし。
334デフォルトの名無しさん:2007/02/25(日) 04:31:48
絶賛放置中してしまっててすんません
335デフォルトの名無しさん:2007/02/25(日) 08:31:38
>>334

1,日本語覚えたてのウォルターたん
2,アスカが見参しちゃってるinabaたん
3,誤爆
336デフォルトの名無しさん:2007/02/25(日) 09:31:40
4, Dコンパイラ
5, GDC
337デフォルトの名無しさん:2007/02/25(日) 22:40:19
7,オレ達
8,2byte圏のみんな
338337:2007/02/25(日) 22:41:05
あぁw
6忘れてたw
339デフォルトの名無しさん:2007/02/25(日) 22:46:16
6 が絶賛放置中
340デフォルトの名無しさん:2007/02/26(月) 01:55:53
6, 後楽園遊園地で僕と悪臭
341デフォルトの名無しさん:2007/02/26(月) 05:30:09
>>340
空気嫁
342デフォルトの名無しさん:2007/02/26(月) 07:03:36
>>341 無理強いイクナイ
343デフォルトの名無しさん:2007/02/26(月) 09:46:49
あーあ……

いや、流れが潰れたからこれでいいのか。
344デフォルトの名無しさん:2007/02/26(月) 10:37:13
Dでコンソールアプリ作って
QtでGUIフロントエンドを作ると良い感じかもしれない。
345デフォルトの名無しさん:2007/02/26(月) 12:34:26
>>344
D言語のQtportingってもうあるのか?
346345:2007/02/26(月) 12:37:04
あっそっか、デザイナを使うってことね。
347デフォルトの名無しさん:2007/02/26(月) 13:38:01
Dにポーティングされていればベストなんだけどねぇ。
しかしQtのおかげでまたC++使い出すようになった・・・
348デフォルトの名無しさん:2007/02/26(月) 15:24:33
TrolltechがDに乗り換えるように仕向ければいいんだよ!
でもそんなことしたらKDEが凄い事になりそうだな。
349デフォルトの名無しさん:2007/02/26(月) 16:02:40
あるパッケージ(=ディレクトリ)内のモジュールを一括してimportする方法ってありましたっけ?
350デフォルトの名無しさん:2007/02/26(月) 16:21:40
ない
hoge.allというファイルでまとめてインポートする
351デフォルトの名無しさん:2007/02/26(月) 16:49:45
ここで流れをぶった切って質問。
Dって基本的な言語仕様とライブラリ関係のバグは一通り取れてる感じ?
ネイティブでモダンな言語として、C/C++の代わりにできれば使いたいんだけど。
(スレを一通り読んだ感じでは非常に心配なんだが・・・・)
352デフォルトの名無しさん:2007/02/26(月) 16:52:21
D言語はいつまでもunstable精神で躍進して参ります
353デフォルトの名無しさん:2007/02/26(月) 17:34:55
基本的な所の仕様が全然駄目だわな。
354デフォルトの名無しさん:2007/02/26(月) 17:40:36
Shift-JISとかEUC-JPとかUTF-16を扱いたいなら別の言語を使った方がいい。
UTF-8しか使わないならお勧め。
355デフォルトの名無しさん:2007/02/26(月) 17:47:56
QtってGPLでしょ。話にならない。LGPLならいいんだけど。
356デフォルトの名無しさん:2007/02/26(月) 20:17:49
>>351
本当にC/C++に疲れてるんだったら触れてみるのも良いかも。
まぁ大規模な仕様変更は無いにしても、機能追加やバグフィックスはまだあるだろうけどね。
357デフォルトの名無しさん:2007/02/26(月) 20:20:50
すまん。書いてる途中でエンター押しちまった・・・
後、他のやつが言うようにエンコードあたりはダメだけど、その辺はtangoとか使えば良いかもしれん。
358デフォルトの名無しさん:2007/02/26(月) 21:48:23
>>355
金払えばソース公開しなくていいよ
359デフォルトの名無しさん:2007/02/26(月) 22:34:12
GPLをそこまで毛嫌いする意味がわからない。
やっぱり売り物作ってると邪魔なのかなぁ。
360デフォルトの名無しさん:2007/02/26(月) 23:00:32
>>359
キモイGPL信者にGPLのソフトをしつこく薦められたことがあるから。
361デフォルトの名無しさん:2007/02/26(月) 23:02:21
感染力強すぎるからなあ
他に使いたいライブラリとぶつかってしまう場合もしばしばある
362デフォルトの名無しさん:2007/02/26(月) 23:07:57
>>360
なるほど。
なんにせよ押し付けはよろしくないよね。
俺も気を付ける。

>>361
まぁ感染力強すぎるのはあるよね。
363デフォルトの名無しさん:2007/02/27(火) 00:01:49
>>362
>なんにせよ押し付けはよろしくないよね。
>俺も気を付ける。

頼むからそうしてくれ。
オープンソース系のソフトで、よさそうなのがあっても
自分が他人からキモイ信者達と同じ人種に見られるのが
恥ずかしくて採用を見送ることがよくある。
364351:2007/02/27(火) 00:04:03
遅れたけど、みなさん情報感謝。
とにかく使い始めてみる。
365デフォルトの名無しさん:2007/02/27(火) 18:54:51
const char[][] x = ["a","b"];
static assert(x[0] == "a");
これってできないの?
366デフォルトの名無しさん:2007/02/27(火) 19:21:59
>>365
static assert(x[0] == "a"); → static assert(x[0] == 'a');
じゃないか?
367デフォルトの名無しさん:2007/02/27(火) 19:28:18
>>365
現状では無理。もしそれをできるようにするならdmdの配列リテラルの設計を文字リテラルと同じようにしないといけない。
368365:2007/02/27(火) 19:44:13
あぁ、むりなんだ。なんか直感的じゃないね。
特別な理由でもあるんかな
369デフォルトの名無しさん:2007/02/27(火) 19:46:59
Walterタソが配列リテラルの実装を手抜きしただけな予感。
370デフォルトの名無しさん:2007/02/27(火) 22:41:12
constが型修飾子じゃないから、
配列xがconstなだけでxの要素(である配列)はconstじゃないよ、
とかそういう理由かな。
371デフォルトの名無しさん:2007/02/27(火) 23:10:47
>>370
違うとおも。文字列リテラルだと宣言された型をスルーして値型(静的配列)として内部で扱ってたはずだけど、配列リテラルでは宣言時点でオブジェクトに書き込むようになってたはず。
372デフォルトの名無しさん:2007/02/28(水) 00:43:33
なるほど
仕様バグという話じゃないなら、今後の改善に期待か
373デフォルトの名無しさん:2007/02/28(水) 06:50:58
非常に亀レスなんだけども
lazyをdelegateに変換する時にこういうのはどうだろう

int delegate() dg;
void hoge( int delegate()[] d... ) {
dg = d[0];
}
int n = 12;
hoge(n);
374デフォルトの名無しさん:2007/02/28(水) 15:14:23
>>373
どこにlazyが
375デフォルトの名無しさん:2007/02/28(水) 19:24:01
age
376C++最強伝説:2007/02/28(水) 20:56:33
[C++] 攻撃:97 素早さ:98 防御:98 命中:54 運:66 HP:273
[D] 攻撃:97 素早さ:15 防御:22 命中:92 運:42 HP:291

C++ vs D 戦闘開始!!
[C++]の攻撃 HIT [D]は149のダメージを受けた。
[D]の攻撃 HIT [C++]は69のダメージを受けた。
[C++]の攻撃 HIT [D]は191のダメージを受けた。
[C++]が[D]を倒しました(ラウンド数:2)。
魔法のMD5 - MD5バトル http://www.newspace21.com/mix/btl.php
377デフォルトの名無しさん:2007/02/28(水) 23:30:10
それにしてもC++は強すぎないか
378デフォルトの名無しさん:2007/02/28(水) 23:36:50
一番良い線行ってるC#ですら大差で負けてるし
379デフォルトの名無しさん:2007/02/28(水) 23:47:03
トキに勝てるのを探す途中で試したなあ>C++
結構強くて「おお!」とか思ったのを覚えてる。Dも結構強いな。
380デフォルトの名無しさん:2007/02/28(水) 23:48:17
このスレ見てたらノウハウとバッドノウハウの区別がつかなくなったので区別を教えて欲しい
381デフォルトの名無しさん:2007/02/28(水) 23:56:39
バッドノウハウ

ソフトウェアなどを使いこなすために、
ストレスを感じながらもしぶしぶ覚えなければならないようなノウハウ。
高林哲による造語。

氏によると、バッドノウハウは、
複雑な設定を「奥が深い」として有難がってしまう
マニア独特の感性によってはびこるという。
382デフォルトの名無しさん:2007/03/01(木) 00:31:33
構造体にstatic opCallで疑似コンストラクタつけるのはどうなの?
あれは公式に認められた使い方?
383デフォルトの名無しさん:2007/03/01(木) 00:42:37
>>382 それ認めるくらいなら構造体用のコンストラクタ付けるんじゃね、うぉるたーたんなら
384デフォルトの名無しさん:2007/03/01(木) 03:05:31
>>382
http://www.kmonos.net/alang/d/struct.html
> opCall がその構造体でオーバーライドされていて、
> 別の型の値で構造体が初期化されようとしているときには、
> opCall 演算子が呼び出されます:
ということだから、
opCallを初期化用途に使うこともOKじゃないかな、たぶん。
385デフォルトの名無しさん:2007/03/01(木) 13:07:45
foobarとhogefugaではhogefugaの方が強いんだなw
386デフォルトの名無しさん:2007/03/02(金) 10:26:51
import mylibs.hoge; なんてやってると
import std.hoge; でなくて
import phobos.hoge; の方がいい感じに見えてくる
387デフォルトの名無しさん:2007/03/02(金) 17:29:53
つまりphobosを標準ライブラリとして認めないということだな!

賛成
388デフォルトの名無しさん:2007/03/02(金) 17:30:55
勢い余ってsakura editorのD言語キーワード作っちゃたんだけど、既存なら自殺する。
389デフォルトの名無しさん:2007/03/02(金) 17:38:11
さらしてからにしろよw
390デフォルトの名無しさん:2007/03/02(金) 18:37:15
>>388
tarballでくれ
391デフォルトの名無しさん:2007/03/02(金) 18:58:53
392デフォルトの名無しさん:2007/03/02(金) 19:10:26
sakura editorのD言語版じゃなくてキーワードだけかw
ShiftJISやEUCの漢字コードの変換がどうしてもしたくて、
勉強のためにgreen padをいじってD版でも作ろうかとなんとなく考える俺ガイル
393デフォルトの名無しさん:2007/03/03(土) 02:32:12
>>392
後は頼んだ
394デフォルトの名無しさん:2007/03/03(土) 09:09:28
プログラムほとんど初心者なんだが、readStringみたいな
  int[] hoge readInt(5);
があったらいいなと思うんだけれど
395394:2007/03/03(土) 09:12:07
ごめん
>int[] hoge readInt(5);
int[] = hoge readInt(5);
396394:2007/03/03(土) 09:14:20
なにしてんだか

完璧レス汚し
>int[] hoge readInt(5);
int[] hoge = readInt(5);
397デフォルトの名無しさん:2007/03/03(土) 09:39:12
んなもん、自分で書きゃいいじゃん。
import std.stream,std.bind;
int delegate(int delegate(inout T)) readTApply(T)(Stream strm,int n){
    return bind(function(Stream strm,int n,int delegate(inout T)dg){
        T v;
        while(n-- && strm.readf(&v))
            if(int r = dg(v))return r;
        return 0;
    },strm,n,_0).ptr;
}
T[] readT(T)(Stream strm,int n){
    T[]r;
    foreach(x;readTApply!(T)(strm,n))r~=x;
    return r;
}
import std.cstream;
void main(){
    foreach(c;readT!(int)(din,2))
        printf("%d\n",c);
}
398デフォルトの名無しさん:2007/03/03(土) 14:42:16
dmdで作られたexeってどこに配置されるの?
399398:2007/03/03(土) 15:22:11
すみません、調べていくうちに Document and Setting\(ユーザ) にexeが作られると言う事は分かったんですが、
これを他の場所に変えるにはどうすれば良いんでしょうか
400デフォルトの名無しさん:2007/03/03(土) 15:23:59
日本語でおk
401398:2007/03/03(土) 15:25:26
度々すみません、自己解決しました。
402デフォルトの名無しさん:2007/03/03(土) 16:08:46
( ゚д゚)ポカーン
4033_9_8:2007/03/03(土) 16:27:37
><
404デフォルトの名無しさん:2007/03/03(土) 16:30:22
初々しいねえ。
405デフォルトの名無しさん:2007/03/03(土) 16:51:07
久々なんだけど名前空間どうなった?
406デフォルトの名無しさん:2007/03/03(土) 17:01:07
dsource.orgがうまく見れないの俺だけ?
407デフォルトの名無しさん:2007/03/03(土) 17:19:28
>>406
にゅーすぐるーぷみれ
408デフォルトの名無しさん:2007/03/03(土) 22:55:21
やべぇ、今日中にbudを手に入れないとダメなのに・・・
409デフォルトの名無しさん:2007/03/03(土) 23:11:59
なんだこの流れ
410デフォルトの名無しさん:2007/03/04(日) 00:17:04
411デフォルトの名無しさん:2007/03/04(日) 18:40:40
Dのバグジラ見ると、オープンなヤツがかなり残ってると思うだが、
この規模のプロジェクトで、この数はふつ〜なの?

なんかをるたーたんがおもろいとこだけ推し進めてる感があるんだが・・
412デフォルトの名無しさん:2007/03/04(日) 18:41:39
所詮は趣味の世界なんだろ
413デフォルトの名無しさん:2007/03/04(日) 19:13:20
要するに、stableのための作業はほとんどやってないということか。
414デフォルトの名無しさん:2007/03/04(日) 19:36:31
stable の前に、言語仕様を固めたいんじゃないか?
415デフォルトの名無しさん:2007/03/04(日) 20:06:00
どうせ2.0リリースの手前にバグフィックス月間があるでしょ。
dmd 1.0なんてしょせんただの通過点だし。
416デフォルトの名無しさん:2007/03/04(日) 20:46:26
おまえら所詮って言葉好きだな
417デフォルトの名無しさん:2007/03/04(日) 20:47:20
stableなDなんかDじゃないんだい!
418デフォルトの名無しさん:2007/03/04(日) 21:29:36
>>416
全部同一人物だしこのスレ3人しかいないんだけどな。
419デフォルトの名無しさん:2007/03/04(日) 23:23:42
四人目です。XCodeで使う方法が分からず挫折。
420デフォルトの名無しさん:2007/03/04(日) 23:46:14
言語仕様を固めるにも、いろいろユーザから要望は来るし、
ウォルター自身もいろいろ浮かんじゃって……って、一向に安定しない予感。
そんな状況だけど、それでも使いたくなっちゃう俺なんだけど。

ホントに仕様固めるとしたら、
せめて配列リテラルの型は明示できるようにしといて欲しいなぁ……。
あと連想配列のキーにopCmp要求するのやめて'hashCmp'とか別のにしてとか、
せめてmain引数くらいはちゃんとUTF-8変換しといてとか、
ああ、山積みだ。
421デフォルトの名無しさん:2007/03/04(日) 23:49:07
構造体を静的にしかあーいう形で初期化できないのはどうしたものか。
必ず static opCall 作れということなのか?
422デフォルトの名無しさん:2007/03/05(月) 10:52:49
よく考えたらDって結構キーワード多いのな
423デフォルトの名無しさん:2007/03/05(月) 11:28:49
クラスの定義には class
構造体の定義には struct
共用体の定義には union
関数の定義には function

ってならないの?不公平じゃね
Cとかのいらないものを継承してんのかね
424デフォルトの名無しさん:2007/03/05(月) 11:38:13
激しく意味不
425デフォルトの名無しさん:2007/03/05(月) 12:44:48
そーいやunion使ったことないや
426デフォルトの名無しさん:2007/03/05(月) 13:28:17
x64向けにコンパイルできないの?<D言語
427デフォルトの名無しさん:2007/03/05(月) 13:30:57
428デフォルトの名無しさん:2007/03/05(月) 13:43:15
function void hoge(int i){ ... }
ってか。
Cからの継承だろうけど、別に要らないものではないだろう。
明示できるとコンパイラにも人間の読み手にも優しそうではあるが、必須だとメドイし。

……とかいいつつ、
property void foo(int value){ this.value = value; }
みたくプロパティを明示させてくれよー、と主張したい俺としては
`property`に対応する`function`もあってもいいような気がしてきた。妄想しすぎか。
429デフォルトの名無しさん:2007/03/05(月) 14:24:12
functionとやっちゃうと関数ポインタの宣言と被るよね。
むしろfunctionとprocedureとpropertyでそれなんてDelphi
430デフォルトの名無しさん:2007/03/05(月) 17:30:17
DFL 0.9.5 リリース
431デフォルトの名無しさん:2007/03/05(月) 18:34:36
いやっほう。なにげに待ってたぜDFL。

しかしhelloworld.dのコンパイル後サイズは433KBか……。
ちょっと、その、太ったんじゃないか……?
432デフォルトの名無しさん:2007/03/05(月) 19:08:48
Delphiに比べれば・・・!!
433デフォルトの名無しさん:2007/03/05(月) 19:11:32
つ upx
434デフォルトの名無しさん:2007/03/05(月) 19:52:06
alias void procedure;
435デフォルトの名無しさん:2007/03/05(月) 20:14:34
お,DFLまじかー
さっそくupdateしよ
436デフォルトの名無しさん:2007/03/05(月) 21:16:12
訳してくれ
437デフォルトの名無しさん:2007/03/05(月) 22:31:29
D言語研究
http://f17.aaacafe.ne.jp/~labamba/
見てたらいまさっきNotFoundになった
438デフォルトの名無しさん:2007/03/05(月) 22:31:55
>>437
みられるが?
439デフォルトの名無しさん:2007/03/05(月) 22:32:09
あれ復活したすんません・・・
440デフォルトの名無しさん:2007/03/06(火) 05:50:25
aaacafeは全体的に不安定だよ
しかも一度落ちたら酷いと半年以上復活しないことも(そしてデータが消えてることもしばしば)
すぐ復活したのは運が良かったな
441デフォルトの名無しさん:2007/03/06(火) 06:16:57
>>440
初期の頃、ちょっとだけ利用してたけど
いまだにそんな学生商売な体質でやってんのかよ。
442デフォルトの名無しさん:2007/03/06(火) 11:28:18
でも、Firefoxで"D言語"でぐぐってもD言語研究が表示されない・・・
443デフォルトの名無しさん:2007/03/06(火) 11:44:49
>>437
URL
444デフォルトの名無しさん:2007/03/06(火) 11:45:25
途中で書き込んじゃった
>>437
URL変わってるよ
ブラウザがリダイレクトしなかったんじゃない?
ttp://f17.aaa.livedoor.jp/~labamba/
445442:2007/03/06(火) 14:13:32
いや、すまん言葉足らずだったかも。表示されないってのは検索結果の事。
それに、今ブクマ確認したら前にグーグルの検索結果に表示されてた時と同じURLだったから違うとおも。
ttp://www.google.co.jp/search?q=D%E8%A8%80%E8%AA%9E&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox
これで検索結果に表示されなくなってる。
446442:2007/03/06(火) 14:15:13
それか、pagerankがものすごく下がってるのかもしれん
447442:2007/03/06(火) 14:16:39
げ、あぼられた・・・
ちょっと確認。
448442:2007/03/06(火) 14:19:01
あれ?ちゃんと表示されてる。bbs2chreaderのバグか?
後、連レスすまそ。
449デフォルトの名無しさん:2007/03/06(火) 15:02:52
>441
ってもLDショック後の再建の影響か最近復帰早め
相変わらずデータはよく飛ぶからバックアップは必須だけどな
っていい加減スレ違いなのでやめとくね
450デフォルトの名無しさん:2007/03/06(火) 17:39:50
gdc 0.23 March 5, 2007
451デフォルトの名無しさん:2007/03/07(水) 15:23:19
x64対応か
452デフォルトの名無しさん:2007/03/08(木) 00:34:12
>>432
delphiはhelloworldでも400KB以上にはならないと思うけど
453デフォルトの名無しさん:2007/03/08(木) 01:00:18
おまいらに質問なんだけど
標準ライブラリってphobos使ってる?それともtango?
454デフォルトの名無しさん:2007/03/08(木) 01:44:07
libstdc
455デフォルトの名無しさん:2007/03/08(木) 08:27:31
tangoに移行中
456デフォルトの名無しさん:2007/03/08(木) 10:37:27
tangoだとDLLが作れないんで、今はphobos
457453:2007/03/08(木) 10:58:24
>>454
おまwwでも、dmc側で使ってるんだっけ?

>>455,456
ふ〜ん・・・そうか、やっぱりtangoか・・
でもDLL作れないってどういうこと?linkで弾かれるのか?
458デフォルトの名無しさん:2007/03/08(木) 12:05:23
そうだよ
459456:2007/03/08(木) 12:14:43
>>457
DLLのガベコレの設定に必要なsetGCHandleとendGCHandleが無かったんで、
それでtango導入をあきらめた過去がある。
ただ、今ソースを見てみたんだけど、必要なものはそろってるから、
dmd\src\phobos\internal\gc\gc.dのgetGCHandleとsetGCHandleとendGCHandleを
tango\lib\gc\basic\gc.dにコピペしてやれば、何とかなるかもしれない。

それ以外にも引っかかった点は、
プリティプリンタがphobosに比べて弱い。
phobosにあってtangoにないものが結構ある。(bind、traits、typetuple、boxer)

「tangoさえあればそれでOK」という感じではなかった。
過去のソースの書き換え&ほかのライブラリが動かないリスクを考えると、
今はまだ様子見の時期かな、と俺は判断した。
「過去のソースの書き換え&ほかのライブラリが動かないリスク」が無ければ
使ってもいいんだけどね。
しかし、エラーの原因がtoStringのtoUtf8化とErrorクラスの削除ってのも微妙というか、
しょうもないことで動かなくなるのは萎える。
460453:2007/03/08(木) 13:13:17
>>459
typetubleとか、boxerとか無いんだな・・・
へぇ・・・今後の参考になる。
まぁでも、いつかはtangoか、またはtangoをベースにしたphobosになるだろうから、オレもtangoを導入してみるかな。
後もう一つ質問なんだけど、deimosって何?Waltarタンが新たに構築してる標準ライブラリって聞いたけど?D Runtime Libraryってことは・・・でもDってネイティブだよな
461453:2007/03/08(木) 13:14:56
あぁwtubleってなんだよw・・orz
後、改行してなかった、すまん
462デフォルトの名無しさん:2007/03/08(木) 20:40:01
gdcに例のmixinまだ?
463デフォルトの名無しさん:2007/03/08(木) 23:07:26
DFL…つかってみて、どうもFontが変更されないと思ったら、
font = new Font(cast(char[])(wincs.toMBSz("MS 明朝"))[0..9], 24f);
とすることで解決することが判明…これはイカンよなぁ…
464デフォルトの名無しさん:2007/03/09(金) 00:23:45
わなDキタ
465デフォルトの名無しさん:2007/03/09(金) 00:57:51
>>463
listview.font = new Font("MS 明朝", 16);
これでちゃんと変更されたが?

どのコントロールだ?
0.9.5から全コントロールがUnicodeサポートされたことになってるから
対応作業の抜けがあるのかも
466465:2007/03/09(金) 02:10:14
あ サイズだけしか変化してなかったのかもしれんので
もっかい確認してきまつ
467465:2007/03/09(金) 02:19:32
>>463
ほんとだ
確かにMBSに変換してからじゃないとダメみたいだわ
468デフォルトの名無しさん:2007/03/09(金) 11:12:02
>>463
dfl/drawing.d の 2965〜2968行
469デフォルトの名無しさん:2007/03/09(金) 13:16:36
dのxmlの処理ライブラリってあったっけ?
急ぎではないがちょっとほしいなと思っていて、
なければ書こうかと思っているところ。
470デフォルトの名無しさん:2007/03/09(金) 13:40:27
expatのポーティングくらいならどこかにあった気が……。

XMLじゃないけどもしかしたら代用になるかもしれないbogoYAML。
http://shinh.skr.jp/d/bogoyaml.html
471デフォルトの名無しさん:2007/03/09(金) 16:15:02
>>469
お蔵入りにしてるSAXパーサなら俺がもってる。
472デフォルトの名無しさん:2007/03/09(金) 17:12:30
>>471
願わくば頂きたい。ライセンスとかはご随意に。
NYSL by k.inabaならうれしいw
ちなみに俺が書こうとしていたのはDOMです。
完成したらdsourceかどこかで公開いたします。
ライセンスはもちろんNYSL。なぜならこれも特別でないライブラリだからです。
473デフォルトの名無しさん:2007/03/09(金) 17:25:51
わなD凄いっす!
474デフォルトの名無しさん:2007/03/09(金) 17:36:22
>>472
http://www.vipper.net/vip194365.zip.html
役に立つか分からんけど一応。
ライセンスは勿論NYSLです。
未だ名前空間にウマく対応出来てないし途中で作りかけの奴もあるうえに、
文字コード変換が抜けてるけど勘弁して。
475デフォルトの名無しさん:2007/03/09(金) 17:37:04
D言語研究がgoogleで見れないと結構、不便。
google サーチ最高!みたいな、書き込みでテンプレートのページが
上書きされてたの消したのだけど、なんか、あるのかなぁとか思ったり。
新しい情報少ないのでいいんじゃないかとも思ったり。
476デフォルトの名無しさん:2007/03/09(金) 17:44:21
>>474
頂きました。ってかOSXすかw
YAMLではNGだったんですが、用途が
OSXユーザから、GPSのトラックデータ(XML)からGoogle Earthのレイヤ(XML)に変換したいという依頼を受けた
っつー理由だったんですわw
Xcode用のDテンプレートを書こうとしたが、思っただけでやっておりませぬ。
477デフォルトの名無しさん:2007/03/09(金) 17:45:51
>>476
何故バレた?ちなみにPPCのOSXだぜwww
478デフォルトの名無しさん:2007/03/09(金) 17:52:27
>>477
OS9のStuffitやOSXの標準zipを使うと、リソースフォークが別ファイルになって保存されるので、*xやWindowsのユーザーからはすぐ判別つきますよ。
.DS_Storeとか__MACOSXで検索すると理由はわかるはず。
私は卒論書いてたころはOS9で、いまはMacBook Proだす。コンパイル速いっすよ。
479デフォルトの名無しさん:2007/03/09(金) 17:54:57
>>478
そんな事があるのか。ありがと。
480デフォルトの名無しさん:2007/03/09(金) 18:01:35
煮るなり焼くなり好きにしろライセンスキタ━━━━━━(゚∀゚)━━━━━━ !!!!
481デフォルトの名無しさん:2007/03/09(金) 18:02:37
Thumb.db が入ってたら Windows ユーザだな。
482デフォルトの名無しさん:2007/03/09(金) 21:01:37
NYSL : winNY iS his Life.
483デフォルトの名無しさん:2007/03/09(金) 21:05:06
むりがあるだろ
484デフォルトの名無しさん:2007/03/09(金) 21:16:15
NYSL = NewYork StyLe
485デフォルトの名無しさん:2007/03/09(金) 21:16:32
>>463-468
自前でこんなん書いて逃げるしかないのかなあ
Font createFont(char[] font, uint size) {
 return new Font(toMBSz(font)[0..font.length], size);
}
作者にtoMBSzを使わなくてもいいようにしてもらうべきか?
自分でやろうにもフォント関係は経験なくてわからんのだが・・・
486デフォルトの名無しさん:2007/03/09(金) 21:28:08
NYSL Yields Synonym License.
487デフォルトの名無しさん:2007/03/09(金) 21:29:19
しまった。これじゃGPLみたいだ、、、
488デフォルトの名無しさん:2007/03/09(金) 22:18:00
>>475
確かに、1.007がリリースされたのに、まだ1.006だったり。
489デフォルトの名無しさん:2007/03/09(金) 23:11:49
各自が勝手に追加すればいいんじゃない?
それがwikiってもんでしょ。
490デフォルトの名無しさん:2007/03/09(金) 23:21:03
うー。やぱし文字列はもっと簡単に扱いたい……。
UTF-8/16/32の生のバイト列をドンと置かれただけで、
「この言語はUnicode対応、文字列を簡単に扱えます」とか言われても納得いかーん。
491デフォルトの名無しさん:2007/03/09(金) 23:29:14
うむ。もうちとコードポイントを抽象的に扱う手段が欲しいな。
492468:2007/03/09(金) 23:42:51
>>485
dfl/drawing.d の 2965〜2968行
####################################
  if(name.length >= lf.lfFaceName.length)
    throw new DflException("Invalid font name");
  lf.lfFaceName[0 .. name.length] = name;
  lf.lfFaceName[name.length] = 0;
####################################
を、とりあえず
####################################
  { char* p = toAnsiz(name);
    for( int i = 0; (lf.lfFaceName[i] = p[i]) != 0; i++ )
      if( i >= lf.lfFaceName.length-1 ) throw new DflException("Invalid font name");
  }
####################################
と、書き換えてみた。
493デフォルトの名無しさん:2007/03/09(金) 23:59:56
で、もうパーサコンビネータライブラリは登場した?
494485:2007/03/10(土) 00:23:01
thx
>>492 を誰か
ttp://dsource.org/forums/viewforum.php?f=39
にコミットしてくんない?
495デフォルトの名無しさん:2007/03/10(土) 01:27:00
chappy * <= penis.toAnal(name);
まで読んだ
496デフォルトの名無しさん:2007/03/11(日) 09:37:22
>>495 二項演算子inをオーバーロードしようぜ
497デフォルトの名無しさん:2007/03/11(日) 16:48:45
1.008とばして1.009か。
498デフォルトの名無しさん:2007/03/11(日) 16:56:11
新しいフィーチャーはないのね。
499デフォルトの名無しさん:2007/03/11(日) 16:57:45
ノーフューチャー
500デフォルトの名無しさん:2007/03/11(日) 20:46:15
フィーチャーで思い出したけど、
1.Template inheritance.
2.Array operations.
この辺の更新ってやる気ないんかね。
そもそもできて何の得があるのか…
501デフォルトの名無しさん:2007/03/11(日) 20:57:09
>>500
1.0よりずっと前から絶賛放置中。
502デフォルトの名無しさん:2007/03/11(日) 21:32:09
いまのWalterタンの興味の対象はなんなんだぜ?
503デフォルトの名無しさん:2007/03/11(日) 21:42:51
コミュニティに振り回されてるのでは・・・・
504デフォルトの名無しさん:2007/03/11(日) 22:09:02
1.Template inheritance.
は,コードの重複をさらに減少させることができて
2.Array operations.
は,マルチコアCPU時代には必要な物では
505デフォルトの名無しさん:2007/03/11(日) 22:10:16
1.008ないのかよww
バージョン番号を無駄遣いし始めたら
1.998->1.999->1.1000も夢ではないなw
506デフォルトの名無しさん:2007/03/11(日) 22:14:43
>>502
C++0x
507デフォルトの名無しさん:2007/03/12(月) 21:04:40
マジで1.008どこにいったんだ。
普通にウォルタータンの間違い?まさかギャグ
508デフォルトの名無しさん:2007/03/12(月) 22:11:08
1.4.2 → 5.0 の Java よりはマシ。
509デフォルトの名無しさん:2007/03/12(月) 22:12:04
1.5じゃないのか・・・
510デフォルトの名無しさん:2007/03/12(月) 22:56:45
>>507
本人曰くスペシャルビルドらしい。詳細は不明。
511デフォルトの名無しさん:2007/03/12(月) 23:02:16
なんかやばい機能をつけて、出す前に封印したとか?
512デフォルトの名無しさん:2007/03/12(月) 23:08:03
10.21Hzの低周波で暴走する機能が付いたはず
513デフォルトの名無しさん:2007/03/12(月) 23:48:46
HOS?
514デフォルトの名無しさん:2007/03/12(月) 23:56:39
SRAM隔離しとくか。
515デフォルトの名無しさん:2007/03/13(火) 00:00:31
>>492
import dfl.all, dfl.internal.utf;
{
Font font = new Font(toAnsi("MS 明朝"), 16);
}
これで解決できてしまうので投稿はやめようかと思う
自分で変換しなきゃいけないのは誰が悪いんだ?
OSがフォント名をUnicodeで受け付けてくれないのが悪いのか
dflが変換してくれるべきなのかどっちだろう
dflが変換するべきならどうやって切り替えるべきだろう?
516デフォルトの名無しさん:2007/03/13(火) 00:03:33
そういうのはライブラリが吸収すべきだと思うんだが
517デフォルトの名無しさん:2007/03/13(火) 00:25:37
>>515
> OSがフォント名をUnicodeで受け付けてくれないのが悪いのか
OS側は勿論Unicodeフォント名に対応してるよ。
CreateFont(Indirect)()にしろ、LOGFONTにしろね。

糞な現状では、ttp://www.kmonos.net/alang/wnd/topics/winapi.ja.html
に書いてある方法が比較的マシな対処法かと。
少なくともTCHARマクロに慣れているC/C++プログラマにとっては親しみやすい
方法だろう。
518デフォルトの名無しさん:2007/03/13(火) 00:33:48
charはUTF-8文字(のうちの1オクテット)ってことになってるのに、
他のバイナリデータを平気で代入してるなんて気持ち悪すぎる。
519デフォルトの名無しさん:2007/03/13(火) 00:44:11
DのGCってポインタ再配置されたりする?
Cの関数に渡すようなポインタはmalloc()とかGlobalAlloc()とかすべき?
520デフォルトの名無しさん:2007/03/13(火) 00:51:56
>>517
あーそうかわかったわかった
-version=Unicode かどうかで CreateFontIndirectA/W を使い分けてもらえばいいだけっぽいな
521デフォルトの名無しさん:2007/03/13(火) 01:00:43
dfl 内部で CreateFontIndirectA / LOGFONTA を使ってしまっているからダメなんだな
CreateFontIndirect / LOGFONT に alias してそっちを使ってもらおう
522デフォルトの名無しさん:2007/03/13(火) 01:37:30
1byte圏の人がW版のAPIの使い所がわからないからA版使ってるなんてオチは都市伝説でいいんだよな
523デフォルトの名無しさん:2007/03/13(火) 01:52:08
>>522
Latin-1とかでもUTF-8エンコーディングならマルチバイトになるよ。
な〜んも気にしないでいいのは、ASCIIしか使わない人だけ。
524デフォルトの名無しさん:2007/03/13(火) 10:52:16
結局sjisつかえないの?
525デフォルトの名無しさん:2007/03/13(火) 11:27:54
リテラルは無理なのかな。
CGIならDで十分いけますか?
526デフォルトの名無しさん:2007/03/13(火) 12:18:16
日本語で始まる引数がとれないんです><
ver1.009, XPpro

// jp.d
import std.cstream;
void main(char[][] arg) { dout.writeString(arg[1]); }

>jp 日本語
{語
>jp 0日本語
0日本語
527デフォルトの名無しさん:2007/03/13(火) 12:33:55
過去ログ嫁
528デフォルトの名無しさん:2007/03/13(火) 12:34:57
>>526
引数はshiftjisじゃね?
出力先もshiftjisだから微妙に表示できて混乱するだろうが。
529デフォルトの名無しさん:2007/03/13(火) 13:18:38
>527
テンプレの過去ログは全滅っぽくて見つからないのです・・・
どこかに倉庫ありますか?

>528
引数はshiftjisだと思います・・・
でもJcodeConvert通してもだめで,
argの配列に切り分けるときにすでに失敗してるんじゃないかと
530デフォルトの名無しさん:2007/03/13(火) 13:24:43
inabaさんのとこのtxのargvfix使え。
でもあれも\が消えるんだよね。仕様?
531デフォルトの名無しさん:2007/03/13(火) 14:20:03
void main(char[][] _args){
 char[][] args;
 foreach(char[] arg; _args){
  args ~= fromMBSz((arg ~ '\0').ptr);
 }

なんてのをわざわざ入れてる俺。
ホントはスタートアップルーチンでやってくれなきゃ困るんだけどなぁ。
532531:2007/03/13(火) 14:27:23
って、これをそのままwriteStringしてもやっぱ文字化けしちゃうか。
さんざ語られた文字コード問題だけど、過去ログ消えてるのは痛いか。

困ったときはinabaさんに頼るか。
http://www.kmonos.net/alang/wnd/topics/pitfall.ja.html#mojibake
533デフォルトの名無しさん:2007/03/13(火) 18:47:10
>529
にくちゃんねる

Part8 >50-100
Part9 >509-
534デフォルトの名無しさん:2007/03/14(水) 01:25:00
>>532
>正しくは、標準ライブラリが画面出力の直前に、その環境の文字コードへと変換をかけるべきです。
(「利用者がwriteflnする直前に変換する」のは間違いです、念のため…)。

そうかなぁ?おいら的には、正しくはコンソールがUTF-8を表示出来るべきです。
で、次善の策としては、利用者がwriteflnする直前に変換するで、最後が、
標準ライブラリで対応だと思う。

D言語はUTF-8(UNICODE)で動くんだから、環境の問題は環境で解決するべきだと思う。
535デフォルトの名無しさん:2007/03/14(水) 01:34:21
>>534
> D言語はUTF-8(UNICODE)で動くんだから、環境の問題は環境で解決するべき

そういう言語は決して実用的な言語にはなりえません。
そのようなポリシーで開発されたソフトウェアを多くの人に/多くの環境で
使ってもらうことは不可能です。
536デフォルトの名無しさん:2007/03/14(水) 02:33:19
いい加減UTF8環境に移行しても良いと思うんだ。
537デフォルトの名無しさん:2007/03/14(水) 02:38:31
>>536
Windowsでは無理だからそれ。
538526:2007/03/14(水) 02:38:45
>528
できました!が\はやっぱり無視されたみたいです...

// jp.d
import std.cstream, tx.all, jcode;
void main(char[][] arg)
{
argvfix(arg);
dout.writeString(JcodeConvert(arg[1],"auto","sjis"));
}

>jp 日本語\ほげ
出力:日本語ほげ

>531
解決しないみたいです.同じような症状になってしまいました.

>533
ありがとうございます><
今から見ているところです.

part8 res69にある"で括る方法は使えそうです
>test "もうだめぽ"

>自
ファイルのパスを与えるのが目的だったので
-fパス
のような形式にしたらとりあえずちゃんと動きました
皆さんありがとう
539>526:2007/03/14(水) 02:41:12
>538の,
>528は>530の間違いです
540デフォルトの名無しさん:2007/03/14(水) 02:48:27
日本語WindowsのシステムコードページはCP932固定。
UTF-8のコードページはあってもMultibyteToWideChar()等で使えるだけの
偽コードページ。
コンソールコードページも当然UTF-8なんてものはない。
日本語版MSVC++もCP932なソースしか通さない。

そんな環境だぞWindowsは。
MBCS=DBCSと決めうち、mb_len()は2以下で決めうちなコードがあまりにも
はびこっているために、もはや修正不可能であるらしい。
541デフォルトの名無しさん:2007/03/14(水) 03:17:40
>>535
そりゃそうだ、だから、しょうがなしに標準ライブラリで対応(サービス)するのは
構わないと思う。
んがぁ、「正しくは」と言い切るかどうかに、引っかかるわけ。

理念を曲げる、余計な装飾を施すことを否定しないけど、そっちを正しいとするのには
違和感が有るんですよ。
542デフォルトの名無しさん:2007/03/14(水) 04:13:23
でも仮に「Windowsが対応してないのが悪いんだよ!」ってウォルターたんに言われたらやっぱり開き直りに感じない?
一応Dは現実的に実用的っていうポリシーがあるわけだし。
標準の入出力が化けるって実用上冗談にもならないじゃん。
543デフォルトの名無しさん:2007/03/14(水) 04:14:43
D言語で作られた有名なアプリって何がある?
544デフォルトの名無しさん:2007/03/14(水) 05:07:24
開き直りとは思わないなかな。
まだ、やりたくない事をやってもらえる段階じゃ無いと思うし。
あと、そんな所に時間を使って欲しくないのもあるな。
ほっときゃWindowsが対応して時間が解決してくれるかもしれないし。
545デフォルトの名無しさん:2007/03/14(水) 08:36:04
おうぷんそおすなのでそうすをおくりつけることでたいおうしてもらいたいおとしごろ
546デフォルトの名無しさん:2007/03/14(水) 08:48:32
いつDはおうぷんそおすになったんだよw
ソース公開してねぇじゃんよw
547デフォルトの名無しさん:2007/03/14(水) 09:04:48
xml関係に関して。いろいろほじってみました。
ttp://www.prowiki.org/wiki4d/wiki.cgi?AllLibraries/XmlLibraries
ttp://www.dsource.org/projects/mango/browser/branches/v2.1/mango/xml

Boost::Randomみたく、
DOM, SAXともにinterfaceが定義してあって、
実装を任意に結合できるようにすると賢い気もするがどうなんだろ。

個人的にはECMAScript系(JavaScriptとかActionScriptとか)のDOM結合が
使いやすかったりしなくもないので、そういう拡張が無理なくできるとうれしいのだが。
548デフォルトの名無しさん:2007/03/14(水) 10:26:15
>>546
例えば、dmd/src/dmd/*とか、厳密な意味でのオープンソースでも仕様が公開されてるし、日本人が書いたpatchをオフシャルに取り入れたりとか。
549デフォルトの名無しさん:2007/03/14(水) 11:45:31
>>542
そう言う問題じゃないし、標準ライブラリの話だし。
550デフォルトの名無しさん:2007/03/14(水) 13:02:27
>>530
1週間以内になおしまっす

>>534,>>541
言語の都合に環境の方を合わせるっちゅーのは変だと思うのですが。
特定の(かなり限定された)条件の環境でしか動きませんというのは汎用言語としてはダメじゃないかなあ。

環境はOSごとマシンごとユーザー毎に違うのが当然で、それを全部吸収して
言語から統一的に扱えるようにすることこそが標準ライブラリの役目では。
551デフォルトの名無しさん:2007/03/14(水) 13:14:19
コンソール側でUTF-8対応するのは大いに結構なのだけど。
POSIXで定められた標準入出力はバイナリストリームなので、
アプリ側の出力するテキストに何のエンコーディングが使われてるかは
コンソール側ではどれか1つと仮定するしかないべ。
SJISとUTF-8なプロセスを2つ立ち上げたらどっちかが文字化け。

ckなんかはSJISもUTF-8も表示できるけど、アレも内容から推論してるだけだろうし。
1つに仮定するならどれかと言われれば、環境デフォルトので、ってのが妥当だと思う。

Walterも文字列の国際化に関してはそれほど詳しいわけじゃ無いって気がする。
「時代はUnicodeです・言語は文字列を簡単に扱えるべきです」なんて言ってた割には
まだ「英語環境でしか動作しねぇじゃん」て箇所多いし。
あっちも「マルチバイト環境のノウハウあんだろーくれよー」とか思ってんじゃ?
うちら日本人も本家にがんがんフィードバックを提供すべきなんだろうけど、
英語/日本語の壁はASCII/Shift_JISよりも厚いなぁ……。
552デフォルトの名無しさん:2007/03/14(水) 14:51:57
ま、言語実装にしか興味が無いっつか、要は趣味なんじゃないの。
I18N化の泥仕事なんて、実用上は必要だけれども、退屈なだけだろうし。

しっかし、OS内部を早々とUTF-16化していたWindows NTファミリが、
UTF-8には対応しない(出来ない)ってのも、何か笑えるものがあるな。
553デフォルトの名無しさん:2007/03/14(水) 19:46:56
>>550
お世話になってます
554デフォルトの名無しさん:2007/03/14(水) 20:32:44
>>550-551
君達は要不要で議論してると思う。要不要で言えば有れば便利。
ここには争いが無いんですよ。
555デフォルトの名無しさん:2007/03/14(水) 21:08:20
あらゆる状況を考えると、言語側で変な細工をするよりも、
ユーザープログラムが吐く文字コードに環境があわせるか、
ユーザープログラムが吐く文字コードを環境にあわせるか、
で考えるべきだろう、という理屈は納得できる。
(吐く出力だけじゃなくて、入力についても同じことね)

利便性を考えると、各々の(言語)ユーザーがその時々で対処するよりも、
ライブラリで既存の環境に応じて処理されるのが自然で、それを実現する
ライブラリが標準でついてくるのが当然だ、というのも分かる。


入出力を標準ライブラリ側でD言語の文字型に変換してくれるのをデフォとして、
それぞれの入出力関数について無変換(つまりubyte列)で入出力できるものを別途用意、
というのが自然だと思う。
556デフォルトの名無しさん:2007/03/14(水) 21:29:45
>>555
それはかなり言語一般に対する議論が混ざってると思う。
D言語はその言語仕様で高らかに、Unicodeが言語仕様です。
と唱えてるんだから、「本当は」とか「当然」が使えないはず。
本当はUnicodeが前提なので、当然環境に合わせる処理が必要。
と考えるのが自然。

まず、一番良いのは環境側が受け入れてくれること、(コンソールのUTF-8対応)
次にプログラムで明示すること、(作り込み)
そして最後が標準ライブラリでの対応(サービス、サービすぅう)
557デフォルトの名無しさん:2007/03/14(水) 21:41:37
まあ、自然だろうが何だろうが、
肝心の Walter タンにやる気がなきゃどうにもならんなあ。
558デフォルトの名無しさん:2007/03/14(水) 21:43:11
>>557
だから、ライブラリの話だって。
Walterタンのやる気はあんまり関係ないと思う。
559デフォルトの名無しさん:2007/03/14(水) 21:54:55
>>556
> D言語はその言語仕様で高らかに、Unicodeが言語仕様です。
> と唱えてるんだから、「本当は」とか「当然」が使えないはず。
> 本当はUnicodeが前提なので、当然環境に合わせる処理が必要。
ここらへんどういう意味なのかよく分からんけど、
D言語では文字型とソースコードはUTFである、ってだけで、
D言語が想定する文字コードはそれだけだ、とは仕様は
言ってないと思うんだけど、どっかでそんなこと言ってたっけ?
560デフォルトの名無しさん:2007/03/14(水) 21:55:17
つまりおいらが言いたいのは、標準ライブラリで当然(本当は)コード変換に対応すべき。
と言う考え方に立つと、日本限ってみても、標準ライブラリに当然EBCDIC対応もJEFコード対応も、
EUC対応も、TRON対応も、DEC漢字対応、ISOも必要という話になるわけで、こんな行為が、「本当は」
と言える事なのか疑問という事。

ここの交通整理をするために、D言語はその言語仕様で「Unicodeです」と宣言してるんだから、
「本当は」というのは、もの凄く間違った考え方だと思う。
561デフォルトの名無しさん:2007/03/14(水) 21:56:26
>>559
議論を混ぜ返してるだけだと思う。
他文字コード対応を標準ライブラリで行うことが、「本当は」に当たるか否かを議論してる。
562デフォルトの名無しさん:2007/03/14(水) 22:02:23
もちろんD言語に限らず、言語一般の議論に拡張すれば、実行環境に対応した文字コード変換ライブラリの
存在を言語標準に規定する方法や、実行環境の文字コードで言語を記述することを仕様とする(C言語)など、
色々有ると思う。

でも、D言語は、言語仕様でUnicodeとする道を選んでるんだから、「本当は」は使えないと思う。
563デフォルトの名無しさん:2007/03/14(水) 22:03:21
>>560
> も必要という話になるわけで
ならんでしょ。
あらゆる状況に対応することまでは要求されてないだろうし。

>>561
>560の
> ここの交通整理をするために、D言語はその言語仕様で「Unicodeです」と宣言してるんだから、
とかいうのがどこから出てきた話なのか訊いてるわけで、
混ぜ返すとかよく分からん意図じゃないよ。
564デフォルトの名無しさん:2007/03/14(水) 22:04:54
# レガシーエンコーディングももう少しマトモに扱えるようにならんもんかなあ
# 現状、Unicodeもだめだめだけど
565デフォルトの名無しさん:2007/03/14(水) 22:07:26
>>563
ここまでかみ砕いて説明してるのに、まだそんなこと言ってるのなら、
君は文字コードを理解してるとは思えない。
566デフォルトの名無しさん:2007/03/14(水) 22:09:11
>>564
そこで必要なのは、ICUをDに移植することだと思う。
567デフォルトの名無しさん:2007/03/14(水) 22:10:32
コンソールの標準エンコードがutf-8じゃないレガシーなOSなんて窓から(ry
568デフォルトの名無しさん:2007/03/14(水) 22:18:03
>>556
望み通り「コンソールがUTF-8対応」したとして、
SJISを吐くプログラムとUTF-8を吐くプログラムを
コンソール側はどうやって見分けるんだ?
569デフォルトの名無しさん:2007/03/14(水) 22:19:17
>>568
どうも議論がかみ合わないんだけど、Win厨なのか?
570デフォルトの名無しさん:2007/03/14(水) 22:24:17
>>567
乱暴な話だけど、その通りだと思う。
Winはかなり特殊な環境だと言う自覚が無いから、「本当は」とか言っちゃうんだと思う。
571デフォルトの名無しさん:2007/03/14(水) 22:28:40
>>566
あいや待たれよ、移植しただけではDのchar[]と入り乱れて混乱する。
いっそICUのUnicodeStringをDに丸ごと組み込んでStringという名を与え、
文字列リテラルもStringのインスタンスとしてしまう方が……。
572デフォルトの名無しさん:2007/03/14(水) 22:33:18
たしかに文字列が文字配列ってのは潮流に乗り損ねてる気がしないでもないよなあ。
573デフォルトの名無しさん:2007/03/14(水) 22:33:57
>>571
なんだよねー。

で、そうなってくると、Walterタンのやる気が問題になってくるか…
というか今更出来ないになってしまうか・・・
574デフォルトの名無しさん:2007/03/14(水) 22:47:27
結局、
 > D言語はUTF-8(UNICODE)で動く
というのを、
 > D言語はその言語仕様で高らかに、Unicodeが言語仕様です。と唱えてる
 > ここの交通整理をするために、D言語はその言語仕様で「Unicodeです」と宣言してる
 > D言語は、言語仕様でUnicodeとする道を選んでる
と拡大解釈したために、文字コード関係の標準ライブラリ対応を
 > 理念を曲げる、余計な装飾を施す
と捉えて、
 > 正しくはコンソールがUTF-8を表示出来るべきです。
と考えた、
ということかな。一連の引用部が同一人物かどうかは知らんけど。

http://www.kmonos.net/alang/d/overview.html
 > 宗教やおおげさな哲学とも縁がありません。
 > 現実的なプログラマのための、 現実的な言語です。
という(そのうえ後発言語である)D言語としては、
やっぱり標準ライブラリ対応が自然だと思った。
575デフォルトの名無しさん:2007/03/14(水) 22:51:51
Win厨とか言い出すやつの相手はしないほうがいいぽ
576デフォルトの名無しさん:2007/03/14(水) 23:33:42
DにC99の複合リテラルっぽいものないの?
577デフォルトの名無しさん:2007/03/15(木) 00:08:23
>>574
>やっぱり標準ライブラリ対応が自然だと思った。

>>560
578デフォルトの名無しさん:2007/03/15(木) 00:10:15
>>575
というか、Win厨は相手に出来ないレベルの話をしてるんで、
お願いだからWin厨は出てこないで。
579デフォルトの名無しさん:2007/03/15(木) 00:12:36
>>574
同一人物でしょ。>>550でK.Inaba氏に突っ込まれてるのと同じ人じゃないの。

Javaや.NETのようにcharがUnicode文字であるような言語は
UTF-8環境でしか使えなくて当然、とでもいいたいのかね。

「現実的なプログラマのための、現実的な言語です」ってのも立派に
「理念」のウチ、なんだけどね。

>>570とかもう、アホかと。
580デフォルトの名無しさん:2007/03/15(木) 00:15:34
>>560は極論だろ。「対応している環境において」まともに動くのであれば
さしあたり問題は無い。その環境が広ければ広いほど言うことはないが。

現状では、Linuxに対応しているとは言っているが、実際にはUTF-8ロケール
でなければ明白な問題が生じるわけだ。
UTF-8ロケールにしろ、ってのは現実的な言語としては論外な選択肢。
581デフォルトの名無しさん:2007/03/15(木) 00:18:48
>>577
すでに>563で突っ込んでるな
(それに対して>565では説明放棄。説明する義務はないけど)

>>579
> 「現実的なプログラマのための、現実的な言語です」ってのも立派に
> 「理念」のウチ、なんだけどね。
意味はわかるけど、それ以上は言葉遊びになっちゃう危険が
582デフォルトの名無しさん:2007/03/15(木) 00:25:47
>>579-581
頭悪いだろお前達(w
583デフォルトの名無しさん:2007/03/15(木) 00:26:04
>ここの交通整理をするために、D言語はその言語仕様で「Unicodeです」と宣言してるんだから、
これはじめて聞いた
584デフォルトの名無しさん:2007/03/15(木) 00:26:58
ただの煽り厨房か。
585デフォルトの名無しさん:2007/03/15(木) 00:36:53
argvすら化ける言語/ライブラリなんてサービスレベル低すぎるっしょ?
使う気にならんでしょ?

皆が皆同じような変換コード書くのは馬鹿馬鹿しいでしょ?
標準ライブラリ側で吸収してくれれば皆が幸せになれるでしょ?

実際Javaとか.NETとかTclとかPythonとか、Unicode対応の言語は
皆そうやって変換してるでしょ?

そこを「UTF-8環境なら動く、そうしなさい」ってのは、Walterタンが
述べている「現実的な〜」という「理念」に合致してますか?
彼は「世界はUTF-8になるべきだ。俺はUTF-8な世界しか相手にしない」
という「理念」でも語ったんですか?
ってだけの話なんだけどね。
586デフォルトの名無しさん:2007/03/15(木) 00:39:47
>>585
> 使う気にならんでしょ?
は同意できない
587デフォルトの名無しさん:2007/03/15(木) 00:53:47
言語側で何もしたくないのなら、いっそ(エンコーディング面は)
Cと同じ仕様にしてくれたほうがなんぼかマシだったかも。
588デフォルトの名無しさん:2007/03/15(木) 01:03:15
>>587
何もしたくないとかしなくて良いって言う話はしてない。
>>534での指摘を良く嫁。

標準ライブラリがやる必要は無いし、
サービスとして提供するにしても、WritefInする直前に変換するのが正しい。
589デフォルトの名無しさん:2007/03/15(木) 01:11:34
>>534の指摘は、
> WritefInする直前に変換するのが正しい

という理由や根拠の説明にまるでなっていないと思うのだが。
なぜ、それが正しい?
逆に言えば、プログラマに陽に変換することを強いない他の言語は、
間違っているとでも言うの?

少なくともプログラマが「陽に」変換するコードを書くスタイルは、I18N/L10Nと
真っ向から対立する。
そこで"iso-8859-1"などとエンコーディングを直接指定してしまえば、
もう他所へは持っていけないプログラムの出来上がりだ。
(無論、それが必要なことなら、そうすることも出来るべきだが)

だから、Cのlocaleシステムでは、「実行環境の」LC_CTYPE環境変数
(Windowsの場合はコードページ)を見て、よきに計らうようなデザインに
なっている。Javaも、同様のデザインがなされている。当然だろう。
590デフォルトの名無しさん:2007/03/15(木) 01:13:13
>>589
よくもまぁ、そんな稚拙な意見を長々書けると思う。
長々書くから、なんか考えてるのかな?と思えばWin厨の意見だし。
591デフォルトの名無しさん:2007/03/15(木) 01:14:13
D言語をUnicode原理で統一したい人にとっては
それが正しい言語周辺の設計なんだろ。
ただ、それが現実的じゃないだけで。
592デフォルトの名無しさん:2007/03/15(木) 01:15:29
とりあえずここで無駄な論争する時間があるんだったら自分で作れよって思った。
593デフォルトの名無しさん:2007/03/15(木) 01:16:48
出力をSJISに変換したとしてバイト列で書き出すのに、C互換関数を使わなきゃならんのがなんとも
594デフォルトの名無しさん:2007/03/15(木) 01:17:07
>>591
いや、実際に標準関数に自動変換は組み込まれてないわけで(w
それは言語外の提供ライブラリで行うべき仕組みと考えてる訳で、
となると、WritefInする直前に変換するのが正しいありかたなんで(w

現実と向き合えば良いと思う。
595デフォルトの名無しさん:2007/03/15(木) 01:21:06
>>593
試しにそれをなるべく移植性の高い方法で書いてみそ。
反吐が出そうになるから。
wcs系ルーチンが両可能なことを前提にするとしても、
Cのwchar_tのサイズは固定じゃないし。
596デフォルトの名無しさん:2007/03/15(木) 01:24:03
Win厨的には_MBCS=D言語ならUTF-8と_UNICODEそれぞれのWin32APIを提供してくれればそれでいい。
ネームスペースとか有効に活用してさ。

あとtoUTF32メソッドがあれば嬉しい。普段、文字列属性チェックとかUTF16に変換してからやってるし。
597デフォルトの名無しさん:2007/03/15(木) 01:28:25
>>594
論点ズレ杉。あるべき論の文脈として「正しい」かどうかの話を
していたのに、

現状全肯定の上で「現状ではプログラマとしてこうするのが正しい」
ってなんだそら。
598デフォルトの名無しさん:2007/03/15(木) 01:30:58
>>597
だから、有るべき論として、標準関数に頼るのは間違いという話をしてるんで。
Win厨のWin厨に取って便利という話を幾らされても困るわけ、何億回されても
聞けない。

599デフォルトの名無しさん:2007/03/15(木) 01:31:54
お前がDじゃあるまいに。
600デフォルトの名無しさん:2007/03/15(木) 01:32:11
>>597
と、言うか汎用機〜組み込みまで一通り組んだこと無いのに
議論に参加しようとすると、相手の言い分を理解できないと思うよ。
601デフォルトの名無しさん:2007/03/15(木) 01:33:15
あからさまな偏見持ちとまともに取り合わないほうが良いんじゃないか?
602デフォルトの名無しさん:2007/03/15(木) 01:35:18
変換しないといけない箇所は、main()の引数と、コンソールの出力/入力だけだよね?
603デフォルトの名無しさん:2007/03/15(木) 01:36:04
>>600
それ前提が間違ってるわ。
GCを採用し、内部コードをUTF-8に選んだ時点で、Dの実行環境って
かなり限定的に仮定されてると見ていいでしょ。
604デフォルトの名無しさん:2007/03/15(木) 01:36:39
自分の意見を通したいがために印象操作に忙しいんだからほっとけ。
605デフォルトの名無しさん:2007/03/15(木) 01:36:45
>>602
違う。実行環境の外部ライブラリ、システムコール、API等とテキストを
やりとりするあらゆる場所。
606デフォルトの名無しさん:2007/03/15(木) 01:37:47
>>601
というか、彼の振りして便乗で煽ってる人がいる気がしないでもない。
607デフォルトの名無しさん:2007/03/15(木) 01:41:58
コードページ依存のデフォルト値はコードページ。
ここらへん基本はどのOSでも同じだと思うが違うのか?
VC厨およびJava厨だからわかんないです><
608デフォルトの名無しさん:2007/03/15(木) 01:51:02
>>607
日本語でおk
609デフォルトの名無しさん:2007/03/15(木) 04:24:50
内部ではうにでもいいけど
外部に繋げるときは簡単に処理できるようにしてちょ
610デフォルトの名無しさん:2007/03/15(木) 06:14:46
>>605
俺は標準入出力だけ対応してくれればかまいませんが。
外部ライブラリやAPIなんて環境依存が前提の場所でない?
あるいはtangoなりなんなりコミットして書いとけば済むことかと。
611デフォルトの名無しさん:2007/03/15(木) 06:50:41
もう誰かパッチ投げるなり、ライブラリ書くなりすればいいのに・・
612デフォルトの名無しさん:2007/03/15(木) 07:58:12
相手をWin厨と決め付けたがる厨大活躍。
もういいよ、くだらん。
613デフォルトの名無しさん:2007/03/15(木) 08:09:08
>>612
逃げるのか。まぁ今の君の選択としてはいいんじゃないかなそれで。
次に人に絡むときは、もうちょっと勉強してからにした方がいいよ。
でないと、また同じように敗走するだけだから。
614デフォルトの名無しさん:2007/03/15(木) 08:23:34
>>610
んー。同じことだと思いますよ。

結局システムレベルの標準入出力をラップしてくれ、ちゃんと
変換してくれってことでしょう。

同様に、Dランタイムが特定のシステムコールなりAPIなりを
呼んでいる箇所では、ちゃんとエンコーディング変換を一貫して
行わないと、ユーザ側につけがまわることになります。

ユーザ側でtoMBSz()をかませば良い、と思われるかもしれませんが、現状の
toMBSz()は(機能的にはWin32に限らず必要なものであるにも関わらず)
Win32ベッタリの仕様であり、コードの移植性を保持するのが困難に
なりますし、いかにも「一時しのぎ」的で、今後のバージョンでは
それが不要になり、コードが新しいバージョンでは動かなくなる可能性も
大です。

char[]で受け取る関数にtoMBSz()で変換したホストエンコーディングの
バイト列を渡すことにも問題があります。char[]をUTF-8文字列と定めている
Dの仕様に反することですし、
例えばその関数の中で文字列を解析した上でシステムコールを呼んでいる
かも知れません。実際に文字列の中身を見ている関数に、
UTF-8以外のエンコーディングの文字列を与えることは、明らかな
問題を引き起こします。

ガタガタなコアライブラリの上に何かを積み上げようとしても、砂上の楼閣に
過ぎません。土台が駄目ではどうしようもないのです。
615デフォルトの名無しさん:2007/03/15(木) 09:19:30
char[]がUTF-8って定まってたっけ?
616デフォルトの名無しさん:2007/03/15(木) 09:30:34
617デフォルトの名無しさん:2007/03/15(木) 11:05:08
初心者スレ、質問スレを除くとこのスレがこの板で一番盛り上がってるようだな
618デフォルトの名無しさん:2007/03/15(木) 11:16:00
昨日は約一名へんなひとが暴れまわってたからなw
619デフォルトの名無しさん:2007/03/15(木) 12:24:07
>>614
argsの文字コードが環境依存することに気づいてげんなりしてきた
620デフォルトの名無しさん:2007/03/15(木) 12:31:30
伸びまくってて全然読んでないけど
コンパイラの方がおちついてPhobosを弄れる余裕ができれば
おまいらが考えるようなことはWalterタンも気づくでしょ
内部と密接に絡んでるようなthread.dが微妙なとこを見ると、
あまりPhobosはテストされてないようだし
そんなにすぐDを使いたかったらTangoを使えと
621デフォルトの名無しさん:2007/03/15(木) 13:12:11
>コンパイラの方がおちついてPhobosを弄れる余裕ができれば
そんな日がおとづれるのだろうか?(反語)
622デフォルトの名無しさん:2007/03/15(木) 13:46:56
>>621 そんなこと言うけどさ、結局はいつか落ち着くんじゃないかなぁ、現実的に。まぁそれに何年かかるか分からんけど
623デフォルトの名無しさん:2007/03/15(木) 15:45:23
>>622
おれも数年前はそう思ってた…
# 待つなら10年単位で覚悟して待て。待てないなら自分で動け
624デフォルトの名無しさん:2007/03/15(木) 17:21:13
Dのエッセンスをパkゲフンゲフン受け継いだ言語を
どこか別の企業が出してくれるとか……。
Windowsアプリ開発がメインターゲットってことでGUIビルダも付けて。

というか、DigitalMarsが会社としてDをどう扱うつもりなのか、
いやそもそも、DigitalMarsがどういう会社なのかすら
サパーリ分からんのは俺だけだろうか。
625デフォルトの名無しさん:2007/03/15(木) 17:23:48
後にプログラマーを悩ませる悪名高い変態言語D++が誕生するとは、このとき誰が想像し得ただろうか。
626デフォルトの名無しさん:2007/03/15(木) 17:40:52
それがC++0xなわけでして
627デフォルトの名無しさん:2007/03/15(木) 19:28:20
C++0xdになった時に、D言語の偉大さがようやく分かるのさっ
628デフォルトの名無しさん:2007/03/15(木) 20:15:00
CやJavaで既にできてることがDで出来ないわけあるかっての
見るべき環境変数なりシステム情報なりをちゃんと見れば出来ること。
629デフォルトの名無しさん:2007/03/15(木) 20:16:06
コルーチンまだ〜?
630デフォルトの名無しさん:2007/03/15(木) 20:36:38
ほんとコルーチンほしいよな
631デフォルトの名無しさん:2007/03/15(木) 20:47:35
特に考えずにargvをwriteflnで出力してなんの問題の無かった人ですが

とりあえず文字列まわりのライブラリが揃うの待ってます
632デフォルトの名無しさん:2007/03/15(木) 20:59:41
っTango
633デフォルトの名無しさん:2007/03/15(木) 21:16:19
コルーチンじゃ柔軟性が低いから継続をください。
634デフォルトの名無しさん:2007/03/15(木) 21:24:26
継続は言語機能に加えただけで使わなくても実行速度が遅くなるから、無くていい
635デフォルトの名無しさん:2007/03/15(木) 21:32:05
callcc相当を呼び出した時にスタックをコピーする方式にすれば未使用時の実行速度低下を避けれるんじゃね?
636デフォルトの名無しさん:2007/03/15(木) 21:55:36
いっそ関数呼び出しとかの挙動をプログラム側で再実装できりゃ
いいんじゃなかろうか。どんな実行順序だろうがやりたい放題。
637デフォルトの名無しさん:2007/03/15(木) 23:03:56
>>535
Rubyを馬鹿にするなーwww

>>543
ABA氏のゲームは、国内より、むしろ海外で有名

>>630
こるーちんて実際何に使うの?
ゲームでも微妙なのに
638デフォルトの名無しさん:2007/03/16(金) 06:31:29
>>637
えっ、びみょうなのか?
結構つかってるんだが、
世はそういう判断なのか・・・
639デフォルトの名無しさん:2007/03/16(金) 07:15:37
>>638
プログラミングが下手くそなんじゃない?
640デフォルトの名無しさん:2007/03/16(金) 07:26:38
>>639
もうしわけない
641デフォルトの名無しさん:2007/03/16(金) 13:44:13
>>638
いや、あっても、組み込みスクリプト言語レベルで実装されてりゃいいやって感じなんだけど、
使いどころある?
642デフォルトの名無しさん:2007/03/16(金) 15:10:58
よく聞く利用法だと、シューティングゲームとかの各キャラクターの挙動で、
1フレーム分動かしてsuspend()とか?
Stateパターンするには大げさだろー、とか思う時に欲しいことがある。

でも、言語組み込みせんとコルーチンて使えないの?
643デフォルトの名無しさん:2007/03/16(金) 15:16:22
静的変数とラベルで実現できないことはないが、
自分で状態管理する羽目になるから本末転倒だろ
644デフォルトの名無しさん:2007/03/16(金) 16:10:47
要するにシンタックスシュガーだから、簡単にかけないと意味がないってことか。
645デフォルトの名無しさん:2007/03/16(金) 22:49:43
いざとなればスレッド+同期処理を纏めて、ユーザライブラリとして作れると思うが。
まぁ無駄なオーバーヘッドはかかるが、分野によっちゃどうでもいいだろうし。

もっと低レベルな実装だとWin32ならFiberが使えるけど、Linuxにはそういうのあるん?
646デフォルトの名無しさん:2007/03/16(金) 23:01:49
TangoにFiberってなかったっけ
647デフォルトの名無しさん:2007/03/16(金) 23:09:54
あ、ホントだ。
http://www.dsource.org/projects/tango/wiki/ChapterThreading

休日はじっくりtango探索でもしようか……
648デフォルトの名無しさん:2007/03/17(土) 04:08:39
>>433 残念ながらなぜかDのexeにはupxが効かない
649デフォルトの名無しさん:2007/03/17(土) 09:35:45
>>648
効いたよ。upxは最新版使ってる?
650デフォルトの名無しさん:2007/03/17(土) 14:29:49
>>649 ギャフン
651デフォルトの名無しさん:2007/03/17(土) 18:56:50
import pkg.*;
はガチで欲しい
652デフォルトの名無しさん:2007/03/18(日) 11:26:05
そろそろDでも触ってみようと思っているのですが、
eclipse のプラグインとしての開発環境で、
現在も開発が続けられているものはないでしょうか?

653デフォルトの名無しさん:2007/03/18(日) 11:47:34
>>652
http://www.kmonos.net/alang/wnd/devenv.ja.html#ide

Descentはリアルタイムにコンパイルエラー表示してくれたりしたけど、やっぱまだまだ途上っぽ。
結局エディタ+コマンドラインに落ち着くことになるんじゃないかな……。
654デフォルトの名無しさん:2007/03/18(日) 11:54:04
インテリセンス互換、参照コードへのジャンプ、そしてデバッガ
D言語が普及言語を名乗るならここへんが最低水準になってくるね
最大のライバルはVC6.0だから。
655デフォルトの名無しさん:2007/03/19(月) 03:05:37
インテリセンスって未だに実現されないけどそんなに難しいのか
656デフォルトの名無しさん:2007/03/19(月) 03:22:51
>>655
お前、本格的なGUIコンポーネントの類の開発やったことないだろ。
確かにただ作るだけならそれほど難しくはない。が、
インテリセンスのような類の機能はただ作るだけじゃそれこそ
無いほうがましだ!ぐらいの悪評を買うだけなんだよ。
657デフォルトの名無しさん:2007/03/19(月) 08:06:57
ふーん、そういうもんかな
具体的には何が悪評を買わせるのか聞きたいな
658デフォルトの名無しさん:2007/03/19(月) 08:35:32
ためしにEclipseでC++プログラミングしてみるといい
659デフォルトの名無しさん:2007/03/19(月) 11:39:50
VC++にしたってncbファイルが結構なサイズになってるし。
情報集めるためにレスポンス遅くなったりするしな。(これは俺の環境がしょぼいせいかもわからんが)。
660デフォルトの名無しさん:2007/03/19(月) 12:15:29
DFL 0.9.5.01 リリース
661デフォルトの名無しさん:2007/03/19(月) 15:19:34
eclipse/javaやVC#おまけにDelphiあたりはレスポンスも十分早いこと考えると、
C++のは言語仕様の複雑さのせいって気がする。

インテリセンス作ろうと思ったら、
やっぱりコンパイラのソースから構文解析部分を引っこ抜いてくるのかな?
だとしたら、言語仕様がコロコロ変わるのが一番の問題なのか?
662デフォルトの名無しさん:2007/03/19(月) 18:31:14
finalとprivateを同時に付けるのってどんな意味あるの?
privateな時点である意味finalみたいなもんだと思ってたんだけど
663デフォルトの名無しさん:2007/03/19(月) 18:48:23
final privateだとサブクラスでオーバーライド(ぽいこと)ができる?
664デフォルトの名無しさん:2007/03/19(月) 19:19:38
>>662
http://www.kmonos.net/alang/d/function.html

多分finalは「決して仮想関数にならない」が保障される予感。
あとはクラス設計者の意思表示として、かなぁ。

個人的には、よほどの理由が無い限りメンバをfinalになんてして欲しくないが。
665デフォルトの名無しさん:2007/03/19(月) 19:34:36
俺はむしろ基本finalで
重要な一部分だけ仮想関数の方が挙動が読みやすいし好きだな。
666デフォルトの名無しさん:2007/03/19(月) 21:02:18
>>665
C++の仕様か
関数名(と引数の型)の意味論を基準として実装を信用するか、
他者の実装を信用せず特定のクラスの実装のみを信用する、という差かと
667デフォルトの名無しさん:2007/03/19(月) 21:05:16
意図しない再実装をするのは他人なんだから、
そんな状況でfinalにしてあったら余計ひどいことになるような気が。
668デフォルトの名無しさん:2007/03/19(月) 22:20:00
Tango 0.96 beta 2 リリース
669デフォルトの名無しさん:2007/03/20(火) 01:52:27
ん? privateでもすでに「決して仮想関数ならない」ことになるのか。
そいや意思表示の点でも同じことだよな。
んじゃprivateにfinalを重ねるのは、ほぼ意味無しと言っていいのかも。

>>665
private+finalの話とはまた違う話で恐縮なのだけど。
経験的に、予期せぬオーバーライドを行いたいってニーズは結構あった。
派生やUnitTestなんて考慮されてない既存のクラスに対してUnitTest書きたいって時に、
DBアクセスするメソッドだけスタブに置き換えるとか。
基本finalだとそういうときに融通が利かなくなっちゃうんだよねぇ。
virtualとかで”オーバーライド考慮してます”ってマーク付けられるのは良い事だと思うけど。
670デフォルトの名無しさん:2007/03/20(火) 01:58:42
そういやさ、メンバ変数にfinal付けてる人たまに居るけどさ、あれって意味あるの?
671デフォルトの名無しさん:2007/03/20(火) 07:22:55
Java だと定数になるんだっけか
672デフォルトの名無しさん:2007/03/20(火) 08:18:32
テンプレートで型の前にinとか付けるとコンパイラエラー出るけど仕様?gdc使ってる
673665:2007/03/20(火) 12:58:46
>>669
オーバーライドを意識してないメソッドをオーバーライドって
元のコードを丹念に追いかけないと何が起こるか予測しきれないから恐くて自分は出来ない。
で、元のコードを追いかけるなら元のコードを,
ついでに継承を意識した形に置き換えちゃうから結局基本finalでも自分は困らないんだよな。

自分の場合は元のコードを弄れる状況が多いからこういう持論になるけど、
こればっかは普段相手にするコードの種類によって考えもかわってくるんでしょうね。
674デフォルトの名無しさん:2007/03/21(水) 00:28:05
>>670
サーセン、Javaの癖でconstと間違えました……
675デフォルトの名無しさん:2007/03/22(木) 00:37:06
tangoてホントに根本から入れ替えちゃうんだなぁ……。
Objectクラスのインターフェースから変わってるとか、
ちょっとそーいう感覚は無かったからビックリ。
標準ライブラリを変えるというのが何を意味するのかなんて
深く考えてなかったんだなぁ俺。

Dを追っかけ始めてからなんか色々と、
普段気にしないような知識が身に付いてきた気がする……。
676デフォルトの名無しさん:2007/03/22(木) 01:30:34
tangoってGCも変わるの?
677デフォルトの名無しさん:2007/03/22(木) 02:27:07
実行時のGC制御は、std.gc.disable()の代わりに
tango.core.Memoryをimportしてgc.disable()とかするらしい。
実装自体はパッと見、Phobosのをまんま流用してるように見える。
細かいところは違うのかもしれんけど。

標準として採用されて、パッケージ名の先頭のtango.取れんかな。
あとutil.以下の諸々も、util.外して一階層上げていい気が。
678デフォルトの名無しさん:2007/03/22(木) 16:30:28
むしろphobosがstd.*からphobos.*に降格するだけでいいとおも
679デフォルトの名無しさん:2007/03/23(金) 07:01:16
tango名前悪すぎ
680デフォルトの名無しさん:2007/03/23(金) 07:01:40
辞書猫の tango だよ!
681デフォルトの名無しさん:2007/03/23(金) 09:57:37
tangoは魅力的だけど、
乗り換えるのはめんどくさい。
tangoはjava.*みたいなかんじで、
d.*とかにしてしまうとかがいいかもね。
682デフォルトの名無しさん:2007/03/23(金) 15:01:27
でもやっぱ今後tangoがレガシーになることがあるかもしれないから
phobos.*とtango.*がいいと思う
683デフォルトの名無しさん:2007/03/23(金) 15:34:58
tango入れてみた。インストーラで入れて
buildでコンパイルするんだな。
下手な翻訳でもしてみるか。。。
684デフォルトの名無しさん:2007/03/23(金) 18:09:26
>>683
影でひっそり応援するよ
685デフォルトの名無しさん:2007/03/23(金) 18:28:57
ライブラリ使うときにいちいちファイル配置とかコンパイルオプションとか気にするのマンドクセーなー。

なのでそろそろD言語独自の中間コンパイル形式が欲しくなってきたなぁ、と思う今日この頃。
プロジェクト内にポンと単一のファイルをコピーして、
$ dmd myapp.d some_d_library.dlib
とかできれば楽なのになー。
現状の*.libと*.diをまとめてtar化する程度の手間でできんもんかな。
686デフォルトの名無しさん:2007/03/23(金) 22:12:07
>>685
つ sc.ini
687デフォルトの名無しさん:2007/03/25(日) 00:32:08
ガベコレ付きIDEのない言語なんて…
688デフォルトの名無しさん:2007/03/25(日) 01:30:33
ポイズン

っていうかイミフ
689デフォルトの名無しさん:2007/03/25(日) 04:54:03
そうだね プロテインだね
690デフォルトの名無しさん:2007/03/25(日) 20:37:06
まあEclipseでVS2005Ex程度の開発環境ができれば最高なんだけどね
691デフォルトの名無しさん:2007/03/25(日) 22:40:44
そうだね プロテインだね
692デフォルトの名無しさん:2007/03/26(月) 01:02:20
VSのプラグイン開発してた人ってソース公開とか
してくれんかな。。。
俺もプラグイン作ってみたいけど、
英語の資料しかない。
693デフォルトの名無しさん:2007/03/26(月) 11:51:02
tangoでかいなぁ。とりあえず、D言語研究にごちゃごちゃ乗せてるので
誰か適当でいいので翻訳手伝って欲しいです。
一人じゃ手におえそうにないし、気力も持たん。
694デフォルトの名無しさん:2007/03/26(月) 13:35:10
>>692
VSIP SDKって使用するのにマイクロソフトと特別な契約交わして
クローズドソースにしないといけなかったと記憶してるんだが、改定されたんかな。
695デフォルトの名無しさん:2007/03/26(月) 15:22:31
マジスカ。
うーむ、そういう項目は見たことないんだけど。
Affiliateが無料で、その上が再販権とか宣伝協力があって有料じゃないのかな。
まぁそういうのあるならしょうがないか。
696デフォルトの名無しさん:2007/03/26(月) 18:37:00
1.010なんかいっぱいきたぞ
697デフォルトの名無しさん:2007/03/26(月) 18:50:15
一番上がよく分からん
Object.factory()はリフレクション関係…?
698デフォルトの名無しさん:2007/03/26(月) 19:28:57
New/Changed Features

* Added template partial specialization derived from multiple parameters.
 複数パラメータの(?)テンプレートの部分特殊化を追加
* Added Object.factory(char[] classname) method to create class objects based on a string.
 文字列からクラスオブジェクトを作成するメソッド Object.factory(char[] classname) を追加
* Added std.gc.malloc(), std.gc.extend() and std.gc.capacity().
* Added std.string.isEmail() and std.string.isURL().
* Added std.stdio.readln().
* Improved gc performance for array resize and append.
 配列のリサイズと追加時におけるガベコレのパフォーマンスを向上
* Bugzilla 64: Unhandled errors should go to stderr
 ハンドルされていないエラーを標準エラー出力に出力
* Added predefined Ddoc macro DOCFILENAME
 組み込み Ddoc マクロ DOCFILENAME を追加

一番上がよくワカラン。
699デフォルトの名無しさん:2007/03/26(月) 19:30:14
> Bugzilla 931: D Strings vs C++ Strings Page Incorrect
Page って、コードページのことか?
700デフォルトの名無しさん:2007/03/26(月) 19:45:12
>>699
ttp://www.digitalmars.com/d/cppstrings.html
この「ページ」のことだよ。
701デフォルトの名無しさん:2007/03/26(月) 19:54:53
>    *  Fixed problem with CTFE and array literals
が気になる。
702デフォルトの名無しさん:2007/03/26(月) 20:01:04
>>700
ああ、なるほど。
703デフォルトの名無しさん:2007/03/26(月) 20:49:15
>>698
ttp://www.digitalmars.com/d/template-comparison.html
ここでpartial specializationとページ内検索すれば例が出てくる

Partial specialization derived from multiple parameters

// D
class Foo(T : Bar!(T, U), U)
{
  ...
}

// C++
template<class T, class U>
    class Foo< Bar<T,U> >
{
  ...
};
704デフォルトの名無しさん:2007/03/26(月) 23:23:05
うーむ。最近GCまわりがどんどん、良くなってきてますなぁ。
素晴らしい。大規模アプリに使えないとか言えなくなってきてる。
気がする。
705デフォルトの名無しさん:2007/03/27(火) 00:11:16
あとは仕様確定とライブラr(ry
706デフォルトの名無しさん:2007/03/27(火) 00:12:28
まだまだ仕様が足りないなぁ。やりたいことができないことが多すぎ。
707デフォルトの名無しさん:2007/03/27(火) 00:34:18
C++のときも標準ライブラリが生まれるのかなり後だったんだから気長に待とうぜ
708デフォルトの名無しさん:2007/03/27(火) 00:43:53
C:\dmd\tango\tango\io\Console.d(82): class tango.io.Console.Console.Input D compiler and phobos/object.d are mismatched
って感じのエラーが連発して出るんですが、何をしくじってるんでしょう?
インストーラーのTangoを使ってみたんですが。
スイッチしても戻しても同じエラーが・・・

709デフォルトの名無しさん:2007/03/27(火) 00:49:00
>>708
tangoはまだdmd 1.010に対応していない。
710デフォルトの名無しさん:2007/03/27(火) 01:00:30
おおう
ありがとう。
動きました。その上日本語も出た。

ウホ
711デフォルトの名無しさん:2007/03/27(火) 01:11:09
んー?
なんで >>708 がエラーになるようになったんだ
712デフォルトの名無しさん:2007/03/27(火) 01:18:58
>>711
ClassInfoの構造が変わった。
713デフォルトの名無しさん:2007/03/27(火) 01:24:11
>>712
そうか
dくす
714デフォルトの名無しさん:2007/03/27(火) 03:00:12
今度はDFLがダメポ('A`;

C:\dmd\import\dfl\internal\dlib.d(27): module Thread cannot read file 'tango\core\Thread.d'
該当するソースを見ても何がわるいんかわかりません。

DFLとTangoはインストーラーでインスコしました。
TangoのLibフォルダの中身空っぽなんですが。
これはまずってますか?
715デフォルトの名無しさん:2007/03/27(火) 03:54:01
オプションスイッチが必要ではなかったか
716デフォルトの名無しさん:2007/03/27(火) 03:58:16
今回のClassInfoの変更で思ったんだが
-v1オプションはマジで飾りか?w
717デフォルトの名無しさん:2007/03/27(火) 04:21:10
なんかわけわからんようになったス...
コンパイルは出来てもEXEができんくなったり
EXEが出来てるのに実行しても何もおこらんかったり。
import.dがないと連呼されたりと。
718デフォルトの名無しさん:2007/03/27(火) 12:18:37
DFL 0.9.5.02 リリース
719デフォルトの名無しさん:2007/03/27(火) 12:48:02
出来ました。

dmd .1007とdmを解凍後にC:\直下においてパスを通し、
その後DFLインストーラー・Tangoインストーラーを実行して
Rebuildをdmdフォルダに。

後は適当なサンプルを
-Ic:\dmd\import -Ic:\dmd\tango -dc=dmd-win-tango -debug -v1 -L/exet:nt/su:windows:4.0
をつけてrebuildしたら出来ました。

Poseidonでも再生マークついてる所いじったらいけました。

720デフォルトの名無しさん:2007/03/27(火) 22:20:44
DWTよりDFLが主流?
721デフォルトの名無しさん:2007/03/27(火) 22:52:41
Tioportが頑張ってくれれば、DWTが勢いづくんだがな
722デフォルトの名無しさん:2007/03/28(水) 00:16:34
>>720
ここしばらく放置気味だからなあ>DWT
DFLは文字コード周りが適当だったのが多少改善されてきたらしいし。
結構いいんじゃないかなと。

わなDで推奨されてたwxDはマルチプラットフォームは嬉しいんだけどexeがちょっとデブ過ぎませんか。
723デフォルトの名無しさん:2007/03/28(水) 00:37:16
ひさびさに情勢を除いてみたらTangoとかいうのが本家に喧嘩うってるん?
Javaみたいにライブラリが乱造された世界が結構好きなので期待。
724デフォルトの名無しさん:2007/03/28(水) 11:20:47
なにをいっているんだ
725デフォルトの名無しさん:2007/03/29(木) 01:55:45
tangoのソースのなかにはウォルターたん名前も出てきてるぞ。
なんでかしらんけど。
726デフォルトの名無しさん:2007/03/29(木) 02:36:45
phobosからパクってきたものだろ
727デフォルトの名無しさん:2007/03/29(木) 07:25:19
DってC#のeventみたいなことをするには、独自くらす作くらなアカン?
言語仕様として似たようなのあるのかな?
728デフォルトの名無しさん:2007/03/29(木) 11:02:13
関数1個なら delegate でいいけど、
複数の関数を登録したいなら
独自クラス作る事になるのかな。
なんかライブラリにないのかな?
729デフォルトの名無しさん:2007/03/29(木) 11:15:55
DFLはC#式のイベントだな。
自分で作っても難しくなさそうなもんだが。
730デフォルトの名無しさん:2007/03/29(木) 13:40:11
std.signalsを使えない?
731デフォルトの名無しさん:2007/03/29(木) 14:28:40
何気にphobosのObjectの仕様が変わったか……。
tangoの方も同じものが追加されるんだろかね。
というか、コレObjectのstaticメソッドでなく普通の関数じゃ駄目だったのか?

ちゅーか、クラス情報てコンパイル後も必ず残るようになってたのか。
メタ情報はビルド時にだけ使われてexe生成後には綺麗さっぱり消えてる、
そんな鮮やかさが好きなのに。
732デフォルトの名無しさん:2007/03/29(木) 19:19:07
Objectは、GC関連でも結構変わってる。
733デフォルトの名無しさん:2007/03/29(木) 20:45:35
tangoとphobosは混在使用できますか?それとも排他使用?
734デフォルトの名無しさん:2007/03/29(木) 22:22:37
少なくとも混在できる設計には 今は なっていないはず
735デフォルトの名無しさん:2007/03/29(木) 22:41:08
-version=PhobosCompatibility
試したことは無いんだけど、これじゃだめなの?
736デフォルトの名無しさん:2007/03/29(木) 22:50:15
それはphobos互換にするだけなんでは?
737デフォルトの名無しさん:2007/03/30(金) 02:06:11
ある特定のライブラリと一緒に使えないなんてライブラリとしてちょっと微妙臭い
738デフォルトの名無しさん:2007/03/30(金) 08:54:33
よくある事だ。
739デフォルトの名無しさん:2007/03/30(金) 11:00:52
置き換え用のライブラリなのに同時に使えてどうすんだよwwwww
コアの部分はかぶってるし、Phobosにしかないクラスとかは
個別にコンパイルして使えばいいじゃん
740デフォルトの名無しさん:2007/03/30(金) 13:10:11
toMBSzの類がtangoに見当たらなくて困る罠。
WideCharToMultyByte直呼びだとWin依存だし、
wcstombsでもwchar_tの扱いとかsetlocale()とか色々メドイし、
ああ自分でやりたくない。
741デフォルトの名無しさん:2007/03/30(金) 13:44:30
phobosでもtoMBSzはWin32環境にしかないわけだが
というかそんな長いもんでもないしコピペしてくればいいじゃん
742デフォルトの名無しさん:2007/03/30(金) 16:43:09
何その永続型車輪の再開発
743デフォルトの名無しさん:2007/03/30(金) 19:02:15
ヌ?
Tangoって日本語おkじゃないの
744デフォルトの名無しさん:2007/03/30(金) 20:33:03
ググってたら、いいもの見つけた
tango用phobosが入っていた最後のリビジョン
http://www.dsource.org/projects/tango/browser/trunk?rev=1236
ページ下部にある Zip Archive のリンクからダウンロードできる。
ソースは少し古いので、多少修正が必要。
中のphobosフォルダを配置して、そのlibを作成したら、
tangoとphobosの混在使用できました。(Win32)
745デフォルトの名無しさん:2007/03/30(金) 20:37:29
C99 vs D
746デフォルトの名無しさん:2007/03/31(土) 00:43:30
dflってイベント関係どうなってるんでしょうか。
click ~= delegate(Object sender, EventArgs ea)
{
msgBox("befu");
};

無反応です。
wndProckとかオーバーライドしてやれという事ですか。
747デフォルトの名無しさん:2007/03/31(土) 01:51:56
うーぬ、
ListViewだけか。
なんでだろう。
748デフォルトの名無しさん:2007/03/31(土) 22:49:35
ちょっと質問しさせてください。

char[]->char*は.ptr渡せばいいみたいなんですが、
char*->char[]の方法がわかりません。
cast(char[])とやってもキャストできんと言われてしまうんですが、
どうすればいいんでしょうか。
749デフォルトの名無しさん:2007/03/31(土) 22:53:25
>>748
>char[]->char*は.ptr渡せばいいみたいなんですが、
よくない。std.string.toStringz使うべき。
>cast(char[])とやってもキャストできんと言われてしまうんですが、どうすればいいんでしょうか。
std.string.toString
750デフォルトの名無しさん:2007/04/01(日) 00:52:24
おお。
ありがとうございます。

751デフォルトの名無しさん:2007/04/01(日) 15:02:46
Tangoのドキュメント作ってみた(英語)
ttp://up.uppple.com/src/up2852.zip
詳しくは同梱のreadme読んでね
752デフォルトの名無しさん:2007/04/01(日) 23:24:31
>748
お節介かもしれないけどCの文字列とDの文字列は全然違うものだよ。
753デフォルトの名無しさん:2007/04/03(火) 09:48:47
Dでキャスト多用するのって格好悪いですか?
754デフォルトの名無しさん:2007/04/03(火) 15:25:53
そんなのプログラムによって違う
755デフォルトの名無しさん:2007/04/03(火) 23:46:37
AllegroがDでできるようになったら使う
756デフォルトの名無しさん:2007/04/04(水) 00:54:47
ご自由に
757デフォルトの名無しさん:2007/04/04(水) 21:48:34
http://www.kmonos.net/alang/wnd/topics/flectioned.ja.html
> (標準で添付されているphobos.libは-gなしでコンパイルされているため、
> 実はうまくリフレクションが効きません。phobosを-gつきで
> コンパイルし直すのが推奨されています。)

phobosを-g付きでコンパイルする方法をどなたかまとめてもらえませんか?
758デフォルトの名無しさん:2007/04/04(水) 22:53:08
makeでDFLAGSに-g指定すりゃ済むだけの話じゃないの?
759デフォルトの名無しさん:2007/04/04(水) 23:34:21
>>757
以前、俺も少し戸惑ったよ。 その時のメモより…

dmd/src/phobos/ にある、 .MAKファイルをテキストエディタで開く。
DMD=\dmd\bin\dmd
CC=dmc
などとある行の、各コンパイラのパスを、自分の環境に合うよう書き換える。
DFLAGS=-O -release -nofloat -w
とある行に、-g を書き加える。 編集が終わったら保存して閉じる。

dmd/src/phobos/minit.obj のファイル更新日時を、
dmd/src/phobos/internal/minit.asm よりも新しくしておく。(アセンブルにはmasmが必要!?)

dmd/src/phobos/ をカレントフォルダにしてから、makeを実行
例: make phobos.lib -f win32.mak
しばらくすると、カレントフォルダに phobos.lib が作成されるはず。それをlibフォルダへ入れる。

dmd/src/phobos/ に作成された大量のオブジェクトファイルは不要なので削除していい。
だけど minit.obj だけは、今後のmakeの為に残して置く。
760デフォルトの名無しさん:2007/04/04(水) 23:42:44
thx
後でやってみる
761759:2007/04/04(水) 23:44:32
補足
「ファイル更新日時を新しく・・・」は、更新日時を書き換えるツールなどで行います。
これは、アセンブルを回避したいためです。
762デフォルトの名無しさん:2007/04/05(木) 00:03:53
Descent を入れたのですが、他にもコンパイラーを入れる必要があるでしょうか?
どうにも、コードのエラーチェックはしてくれるのですが、コンパイルされないし、
そもそも構成及び実行でも、Dらしきものが出てきません。
Eclipse3.2 なのですが、それがまずいのでしょうか?
763デフォルトの名無しさん:2007/04/05(木) 00:07:29
>>761
cygwin 入れてるんで touch minit.obj した

> dmd/src/phobos/ にある、 .MAKファイルをテキストエディタで開く。
いじった .mak ファイルは2つ
dmd\src\phobos\win32.mak
dmd\src\phobos\internal\gc\win32.mak

さて phobos.lib はできたがちゃんと使えるかな?
764デフォルトの名無しさん:2007/04/05(木) 00:14:18
http://www.kmonos.net/alang/wnd/topics/flectioned.ja.html
これのサンプルを実行してみたが
>hello
Error: ArrayBoundsError hello(10)
としか表示されないな・・・再コンパイル前と状況は変わらないようだ

何が悪いのでしょうか?
765デフォルトの名無しさん:2007/04/05(木) 08:12:30
D Frameworkってのを落として中身覗いてみたら
グリッドついてるしW系APIメインで使われてるし
これは使えるのかなと思ったら1年以上更新されてないのね><
766デフォルトの名無しさん:2007/04/05(木) 12:16:49
チミが続きをやればいいのだよ
767デフォルトの名無しさん:2007/04/05(木) 12:18:09
リンクplz
768デフォルトの名無しさん:2007/04/05(木) 12:54:49
>>764
D 1.010で
>> Bugzilla 64: Unhandled errors should go to stderr
ていう変更が入ったせい。
flectionedはException.printを置き換えて表示を変更してるんだけど、
DMDがException.printじゃなくてException.toStringを使うようになた。
769デフォルトの名無しさん:2007/04/05(木) 14:55:08
>>768
まだ最新版には対応してなかったのか
残念
770デフォルトの名無しさん:2007/04/05(木) 18:56:59
>>769
DMDの仕様変更が活発である限り常にそう
771デフォルトの名無しさん:2007/04/05(木) 19:04:02
main.def(2) : Error 112: SUBSYSTEM Directive
SUBSYSTEM CONSOLE,4.0

^
main.def(2) : Error 52: .DEF Syntax Error
SUBSYSTEM CONSOLE,4.0

これは一体何のエラーでしょうか。
772デフォルトの名無しさん:2007/04/05(木) 19:43:49
>>770
まあね
丁度 flectioned を使おうと思ったタイミングで
それが使えなくなるような変更があったなんて
運悪すぎだろ常識的に考えてとかおもて
早く更新されないかなー
773デフォルトの名無しさん:2007/04/05(木) 20:11:41
乗り遅れるの覚悟でバージョン下げればいいじゃくぁwせdrftgyふじこlp;
774デフォルトの名無しさん:2007/04/06(金) 17:14:54
>>773
DMDの仕様変更が活発である限りそれはやめたほうがいい
775デフォルトの名無しさん:2007/04/06(金) 17:16:29
void tester(float[2] bad, float[] good)
{
assert (&good[1] - &good[0] == 1); // ok
assert (&bad[1] - &bad[0] == 1); // !!!!!??????

if (bad.ptr == good.ptr) // 静的配列ってポインタ渡しだっけ?
{
assert (&bad[0] == &good[0]); // ok
assert (&bad[1] == &good[1]); // !!!!!??????
}
}

void main()
{
float[2] test;
tester(test, test);
}

なぜだ……
776デフォルトの名無しさん:2007/04/06(金) 19:27:45
仕様にないことやろうとしてねえ?
777デフォルトの名無しさん:2007/04/06(金) 19:29:17
>>775
http://www.kmonos.net/alang/d/abi.html

>静的な配列を関数へ渡すと、例え静的な配列として宣言されていても、
>結果は実際には静的配列への参照となります。
ということで、静的配列は参照渡しされますね。
778デフォルトの名無しさん:2007/04/06(金) 21:00:40
>>775
適当に試してみたけど
assertが失敗するのはdmdのバグっぽいから適当に報告するのが吉。
779デフォルトの名無しさん:2007/04/08(日) 20:50:26
dflのツリービュー、+-の所しかマウスクリック判定しやがらん。
英語の達者な誰か報告したって。
780デフォルトの名無しさん:2007/04/08(日) 23:00:43
>>779
テストめんどいから最小の再現コード張って
781デフォルトの名無しさん:2007/04/09(月) 20:48:38
private import dfl.all;
class MyForm: dfl.form.Form
{dfl.treeview.TreeView treeView1;
this()
{ text = "My Form";
clientSize = dfl.drawing.Size(240, 245);

treeView1 = new dfl.treeview.TreeView();
treeView1.name = "treeView1";
treeView1.bounds = dfl.base.Rect(0, 0, 232, 228);
treeView1.parent = this;
TreeNode tn = new TreeNode("hoge");
tn.nodes.add("omg");
treeView1.nodes.add(tn);
treeView1.click ~= &testClick;
treeView1.doubleClick ~= &testClick;
}
void testClick(Object sender, EventArgs e)
{
msgBox("piko-n");
}
}
int main()
{
Application.run(new MyForm());
return 0;
}
他のダブルクリックとかは何やっても正常。
HitTestですらラベル無視なんだけど、なんでだろう。
782デフォルトの名無しさん:2007/04/09(月) 21:00:15
ちなみにイメージリスト作ってビットマップ置いて
ダブルクリックイベントでHitTestするとすべて正常。

やっぱりクリックだけぽい。
783デフォルトの名無しさん:2007/04/10(火) 00:44:28
std.c.stdioにfilemode関数があるんですが、
これを呼び出すと
Symbol Undefined _filemode
と出てリンクができなくなってしまいます。

何かコンパイルオプションをつける、環境変数を指定する等しなければならないことがあるのでしょうか。

それともDMDのバージョンが古い(1.005)のが原因なのでしょうか。
784デフォルトの名無しさん:2007/04/10(火) 00:55:00
>>783
うちの std.c.stdio にはないけど?(dmd1.010)
785デフォルトの名無しさん:2007/04/10(火) 01:05:30
>>781
確かに click は + - でしか反応しないけど
afterSelect / beforeSelect を使えばいいのでは?
786デフォルトの名無しさん:2007/04/10(火) 04:06:04
bud を導入して実行してみたらsc.iniが見つからないと言われました。
bud.exe とソースコードをdmd.exeと同じフォルダに入れたら成功したので
環境変数の問題だと思うのですが、どうすればいいのでしょうか。

Error: bud:Unable to find Config File 'sc.ini' in
[.\,,C:\Documents and Settings\ユーザ名,C:\作業フォルダ\]
787デフォルトの名無しさん:2007/04/10(火) 05:43:48
>>784
すいません。間違えました。
filenoでした。

extern(C) int fileno(int);

とかやってもだめでした。
788デフォルトの名無しさん:2007/04/10(火) 05:48:57
fileno()は大抵マクロ
非標準だし
789デフォルトの名無しさん:2007/04/10(火) 06:15:47
じゃあDで標準入力をバイナリモードで開きたい時はどうすればいいのですか?
790デフォルトの名無しさん:2007/04/10(火) 07:36:26
さあ。phobosにはそんな概念ないからの。
791デフォルトの名無しさん:2007/04/10(火) 12:04:17
どうせ構造体の中の変数1つ拾ってるだけだろうから、
そういうインライン関数作っちゃえ。
792デフォルトの名無しさん:2007/04/10(火) 14:01:38
version(Win32) stdout._flag |= _F_BIN;

としても効かんな。なんでだろ
793783:2007/04/10(火) 16:03:35
とりあえずDMCのstdio.hをのぞいてみると、filenoで参照しているのは構造体の_fileメンバだたt。

といわけでこんなプログラムを書いてみた。

import std.c.stdio;

version(Windows) extern(C) int setmode(int, int);

char[] readStdIn(ulong size) {
char[] buf;
char c;
version(Windows) {
int O_BINARY = 0x8000;
setmode(stdin._file, O_BINARY);
}
while(buf.length < size && (c = getchar) != EOF)
buf ~= c;
return buf;
}
void main() {
char[] str = readStdIn(500000);
FILE* fp = fopen("output.jpg", "wb");
fwrite(str.ptr, str.length, 1, fp);
fclose(fp);
}
test.exe < input.jpg
とやってみても壊れたファイルしか出力されませんでした。
テキストを入力して実験した結果、バイナリモードに切り替わっていないようです。
同じようなCのプログラムを書いてみたところ、
BCCならきちんとバイナリモードになっていましたが、DMCはテキストモードのままでした。
どうやらDMCのバグか仕様の予感です。
794デフォルトの名無しさん:2007/04/10(火) 16:12:57
Cライブラリの問題な気が
795デフォルトの名無しさん:2007/04/10(火) 16:22:51
そもそも標準入出力がテキスト以外を扱うように出来てるかが問題だな。
796デフォルトの名無しさん:2007/04/10(火) 16:44:24
つまり解決策無し?
797デフォルトの名無しさん:2007/04/10(火) 16:51:53
phobosをコンパイルしなおせばいけるんじゃないか?
798デフォルトの名無しさん:2007/04/10(火) 17:02:34
>>793で試したCのプログラムがちゃんと動くようなCライブラリとリンクしてやれば、うまくいきそうな気がするなあ。
799デフォルトの名無しさん:2007/04/10(火) 21:49:11
つまりまだニヤニヤする以外の目的で使うなって琴田。
800デフォルトの名無しさん:2007/04/11(水) 00:15:02
そうでもないか
801デフォルトの名無しさん:2007/04/11(水) 02:34:20
import std.cstream, std.c.windows.windows, std.stream;
extern (Windows) HANDLE GetStdHandle(DWORD nStdHandle);
const STD_INPUT_HANDLE = -10;
const STD_OUTPUT_HANDLE = -11;
void main()
{
auto din2 = new File(GetStdHandle(STD_INPUT_HANDLE), FileMode.In);
auto dout2 = new File(GetStdHandle(STD_OUTPUT_HANDLE), FileMode.Out);
auto buffer = new ubyte[256];
while (true)
{
auto len = din2.read(buffer);
if (len == 0) break;
dout2.write(buffer[0..len]);
}
}
こうか?
802783:2007/04/11(水) 08:03:20
>>801
あ、できた。

つまり標準入力をバイナリモードで得たければOSのAPIを叩けということなんですね。

ありがとうございました。
803デフォルトの名無しさん:2007/04/11(水) 09:20:55
D言語はあんまりわからんけどC/C++ @Win32 なら
freopen("CON","rb",stdin);
でいけるからこれでいいんじゃね?
804デフォルトの名無しさん:2007/04/11(水) 21:43:55
D言語っていつのまにやら、Version1.0になってたんだね。
1.0越えたら手を付けてみようと思ってたんで、今後このスレにはお世話になると思います。
よろしくお願い
805デフォルトの名無しさん:2007/04/11(水) 21:45:28
名前だけ 1.0 になったけど、
今までと変わらず仕様変更してます。
どう見ても名前だけです。
本当にありがとうございました。
806デフォルトの名無しさん:2007/04/11(水) 22:53:44
1.010で-v付けても1.0互換じゃなくなっちまったしなw
807デフォルトの名無しさん:2007/04/11(水) 23:02:34
>>806
-v1 が1.0互換で、
-v はverboseなんじゃないの?
808デフォルトの名無しさん:2007/04/11(水) 23:07:31
1.*って以上の意味はないんだろうな…
809デフォルトの名無しさん:2007/04/11(水) 23:09:52
>>807
すまんそのとおり
810デフォルトの名無しさん:2007/04/12(木) 01:04:09
>>803
標準入力とCONでは意味が違う。
リダイレクトやパイプ越しのケースがあるからな。

Cランタイムライブラリに依存せず標準入力から読み出したければ
GetStdHandle(STD_INPUT_HANDLE)でハンドル取ってきて
ReadFile()
これでいい。
811デフォルトの名無しさん:2007/04/12(木) 07:44:57
D言語関連の和書って、まだなにもないんだっけ?
812デフォルトの名無しさん:2007/04/12(木) 07:48:56
ググったらパーフェクトガイドとかってのがでてきたけど、古い上に売れ切れてるし。
813デフォルトの名無しさん:2007/04/12(木) 08:01:35
>>812
むっちゃ古い
k.inabaさん以外全部沈没
814デフォルトの名無しさん:2007/04/12(木) 08:05:18
コンパイラが0.106とかの時代だからまだ新しい方じゃない?
815デフォルトの名無しさん:2007/04/12(木) 08:16:10
inabaタンが、頑張ってくれてるみたいだから一括ダウンロードしてみたけど
これ壊れてない? 目次だけで内容が見れないんだけど。 vista で見てるからかなぁ?
816デフォルトの名無しさん:2007/04/12(木) 11:57:09
新しいキーワードのmacroってなに?
817デフォルトの名無しさん:2007/04/12(木) 12:41:12
For the future (unimplemented) AST macro feature.
818デフォルトの名無しさん:2007/04/12(木) 13:29:12
819デフォルトの名無しさん:2007/04/12(木) 13:55:14
What's New for D 1.011
Apr 11, 2007
New/Changed Features
Extended Codeview symbolic debug output with LF_OEM types.
Extended Dwarf symbolic debug output with DW_TAG_darray_type, DW_TAG_aarray_type, and DW_TAG_delegate types.
Added keywords ref and macro.
final classes cannot be subclassed.
final for variables now works.
ref now works as a replacement for inout.
Fixed so multiple type inferring declarations like auto a=1,c=2; works.

Bugs Fixed
Fixed problem with overloading of function templates that have the same template parameter list, but different function parameters.
Fixed problems with type deduction from specializations that are template instances.
Fixed assert template.c(2956) s->parent
Got .property to work for typeof.
Fixed bug in DW_AT_comp_dir output for some linux versions.
D.announce/8027
D.announce/8047
D/51800
Bugzilla 1028: Segfault using tuple inside asm code.
Bugzilla 1052: DMD 1.009 - aliasing functions from superclasses may result in incorrect conflicts
Bugzilla 1080: Failed to link to std.windows.registry
Bugzilla 1081: with using real and -O option, dmd generate bug code
Bugzilla 1082: The .offsetof property yields a signed int, a size_t would be more appropriate
Bugzilla 1086: CodeView: missing line information for string switch
Bugzilla 1092: compiler crash in ..\ztc\cod1.c 2528
Bugzilla 1102: switch case couldn't contain template member
Bugzilla 1108: Indexing an int[] not evaluatable at compile time
Bugzilla 1122: dmd generate bad line number while reporting error message
820デフォルトの名無しさん:2007/04/12(木) 14:02:31
今になってrefを導入してくるか……っ!
「inoutはrefに置き換えるかもしれません」って確かに言ってたけど!
821デフォルトの名無しさん:2007/04/12(木) 14:13:22
コード書き換えの嵐ktkr

いつかはやらなくちゃだったかもだけど、1.00になったときがよかったなぁ
822デフォルトの名無しさん:2007/04/12(木) 14:46:21
それでこそD言語
823デフォルトの名無しさん:2007/04/12(木) 15:32:12
D 0.1011 でいいんじゃね?
824デフォルトの名無しさん:2007/04/12(木) 16:14:34
>>823
なんか二進数みたいに見えてきた・・・orz
825デフォルトの名無しさん:2007/04/12(木) 16:16:16
実は16進数で
0.D0.1011
826デフォルトの名無しさん:2007/04/12(木) 18:17:07
>>825
その投稿時間はネタに合わせたのか
827デフォルトの名無しさん:2007/04/12(木) 19:49:04
>>825
みらくるだなぁ
828デフォルトの名無しさん:2007/04/12(木) 20:44:25
>>825の16揃いはバネを使ったインチキだったので
警察に捕まりました。
829デフォルトの名無しさん:2007/04/12(木) 20:50:07
>>825
上手いねえ
830815:2007/04/12(木) 21:57:56
>>818
d
831デフォルトの名無しさん:2007/04/13(金) 06:46:32
ドキュメント生成が見た目いまいちなんですけども標準以外でツール作られてたりしないの?
832デフォルトの名無しさん:2007/04/13(金) 10:49:14
Doxygen は、Dに対応してるらしいぞ。

見た目はdmdでも、.ddocファイルで指定すれば、在る程度好きなようになるでしょ。
.ddocでユニークな文字列を埋め込んでおいて、スクリプトなどで再加工するとか…。
833デフォルトの名無しさん:2007/04/13(金) 13:44:06
1.012きた
バグ修正オンリーか
834デフォルトの名無しさん:2007/04/13(金) 16:27:23
digitalmars重すぎる。ミラーとか無いのかな?
835デフォルトの名無しさん:2007/04/14(土) 09:08:50
>>831
candydocとかいいかんじかも。
836デフォルトの名無しさん:2007/04/15(日) 01:22:12
すみません。
最近始めたものですが、無名クラスについて教えていただけないですか。

Java で書くと以下のようになるものは、Dだとどのように書けば良いのでしょうか。

Player player = new Player(new Strategy(){
  public void method() {
  }});
837デフォルトの名無しさん:2007/04/15(日) 01:39:16
auto player = new Player(new class Strategy {
    public void method() { }
});
838デフォルトの名無しさん:2007/04/16(月) 05:31:38
>>835
サンクス。
無駄に格好いいなこれw
839デフォルトの名無しさん:2007/04/16(月) 12:23:53
DでAjaxやってるひといますか?
840デフォルトの名無しさん:2007/04/16(月) 13:23:20
DとAjaxに何の関係が?
DでCGIするって話?
841デフォルトの名無しさん:2007/04/16(月) 17:45:13
CGI用のFrameworkっぽい物あったっけ?
842デフォルトの名無しさん:2007/04/16(月) 21:41:05
ttp://www.wikiroom.com/sakurai/index.php?FrontPage
ここくらいしか知らない
843デフォルトの名無しさん:2007/04/16(月) 21:52:10
dsource.orgにあった気がする。
844デフォルトの名無しさん:2007/04/17(火) 03:52:07
GWTみたいなのをDでやりたいんです
845デフォルトの名無しさん:2007/04/17(火) 04:19:04
Dのような低レベル言語でWebアプリ作るの大変そうだな〜。
PHPとかとはまた違った面白さがありそうだが。
846デフォルトの名無しさん:2007/04/17(火) 04:49:42
いやD言語は高レベルだし。ライブラリが揃ってないのが激しく面倒だけど。
847デフォルトの名無しさん:2007/04/17(火) 09:23:20
これが歳の差か
848デフォルトの名無しさん:2007/04/17(火) 09:26:47
Dは中レベルだよ。
849デフォルトの名無しさん:2007/04/17(火) 10:03:03
Dでファイルのアップに対応したCGIライブラリ作ったけど、
1.4MB以上のファイルを食べさせるとしぬという素敵仕様になってしまったorz
850デフォルトの名無しさん:2007/04/17(火) 10:06:31
Dで使えるODBCアクセス用クラスみたいなのありますか
851デフォルトの名無しさん:2007/04/17(火) 10:15:44
言語仕様の変更が怖くて
D でライブラリ作る気しないなあ。
852デフォルトの名無しさん:2007/04/17(火) 11:47:19
あなたにはD言語はおすすめできません
853デフォルトの名無しさん:2007/04/17(火) 12:18:31
>>850
Cで使えればDでも使えますが
ttp://www.kmonos.net/alang/wnd/topics/ddbi.ja.html
こんなのもあります
854デフォルトの名無しさん:2007/04/17(火) 12:21:48
しかしinout->refの変更は結構痛いなw
DMD1.012だとDirectXのヘッダーとかDFLとか使えなくなったし
自分ですぐ直せるけど早く公式の方で対応されないかなー
855デフォルトの名無しさん:2007/04/17(火) 12:27:00
Tango 0.97 RC1 has been released.
856デフォルトの名無しさん:2007/04/17(火) 13:08:24
s/inout/ref/g で直しとけ
857デフォルトの名無しさん:2007/04/17(火) 17:06:36
さらにs/ref/inout/gで直さなきゃならないなんてことは無いよな?
858デフォルトの名無しさん:2007/04/17(火) 17:09:29
もしかして、参照も導入されることになったの?
859デフォルトの名無しさん:2007/04/17(火) 18:31:30
860デフォルトの名無しさん:2007/04/17(火) 19:44:52
文字列をコードとしてミックスイン
なんていう機能があるんですか。
861デフォルトの名無しさん:2007/04/17(火) 19:46:16
はい。あるんです。
862デフォルトの名無しさん:2007/04/17(火) 19:52:28
なんかリフレクションできそうだな。
これでjarみたいなリンクが出来たら主戦言語にかえるかも。
863デフォルトの名無しさん:2007/04/17(火) 19:55:12
flectioned
864デフォルトの名無しさん:2007/04/17(火) 19:55:34
>>856-857
s/ref/ref_/g
s/inout/ref/g
としないと死ねるぞ
865デフォルトの名無しさん:2007/04/18(水) 16:53:15
std.boxerでバグ見つけた
Mac OS X 10.3.9 PowerPCなんだけど4bytes未満のデータをboxするとデータが壊れる。
866デフォルトの名無しさん:2007/04/18(水) 17:09:49
Box box(TypeInfo, void*)のコード読んでみたらどうみてもstd.stdarg使ってないな。
しかもリトルエンディアン前提でコード書いてやがる。まあ仕方ないか。
867デフォルトの名無しさん:2007/04/18(水) 19:15:01
既出かもしれないが、
void func(void[] v) { }
void main() { func(cast(void[])['a']); }

で落ちる。
868デフォルトの名無しさん:2007/04/18(水) 19:58:24
これだけで落ちるな。

void main() { void[] v = cast(void[])['a']; }

配列リテラルを void[] にキャストするのが無理っぽいね。
869デフォルトの名無しさん:2007/04/18(水) 19:59:08
というか、

void main() { cast(void[])['a']; }

これだけでいいか。
870デフォルトの名無しさん:2007/04/18(水) 20:16:15
落ちないなあ… dmd v1.012 windows xp
871デフォルトの名無しさん:2007/04/18(水) 20:27:51
>>867-869
落ちない gdc 0.23 @ Mac OS X 10.3.9 PowerPC
872デフォルトの名無しさん:2007/04/18(水) 21:27:12
ああ、コンパイラ古いからなのか?

gdc 0.21 @ MacOSX 10.4.9 Core 2 Duo
873デフォルトの名無しさん:2007/04/18(水) 23:53:54
可変個引数テンプレートで悩んでいます。

class foo(T...)
{
 int opApply(int delegate(ref T) dg)
 {
  int result = 0;
  return result;
 }
}

void poo()
{
 foo!(int) hoge;

 foreach(int i ; hoge)
 {
 }
}

Compile Error:
function foo!(int).foo.opApply (int delegate(ref (int)))
does not match parameter types (int delegate(ref int __applyArg0))

foreachを動作させるにはどうすればよいのでしょうか?
どなたかご教授お願いいたしますm(_ _)m
874デフォルトの名無しさん:2007/04/19(木) 00:07:34
class foo(T...)
Tが複数なんだから
int opApply(int delegate(ref T[0]) dg)
あと foo!(int) hoge; は
auto hoge = new foo!(int);
それともタプルをforeachで回したいのかな
875デフォルトの名無しさん:2007/04/19(木) 00:12:36
foo!(int)とやればforeach(int n; hoge)に対応できて、
foo!(int,int)とやればforeach(int i, int n; hoge)に対応できる、
ってやりたいんじゃない?
876デフォルトの名無しさん:2007/04/19(木) 00:19:47
>> 875
はい、そのとおりです
877デフォルトの名無しさん:2007/04/19(木) 07:41:46
そこで文字列mixinですよ

import std.metastrings;
template F(int i,T...){
  static if(T.length == 0)
    const char[] F="";
  else
    const char[] F="ref T["~ToString!(i)~"]" ~
      (i+1==T.length?"":","~F!(i+1,T[1..$]));
}
struct A(T...){
  mixin("alias int delegate("~F!(0,T)~")dg_t;");
  int opApply(dg_t dg){
    return 0;
  }
}
void main(){
  A!(int,char)X;
  A!(int)Y;
  foreach(int x,char c;X){}
  foreach(int y;Y){}
}
878873:2007/04/19(木) 12:38:15
>> 877
ありがとうございます!無事動作しました。

ただ、
(i+1==T.length?"":","~F!(i+1,T[1..$]));
だと期待する動作ではなかったので(引数が一つ足りない)、
(i==T.length?"":","~F!(i+1,T[1..$]));
とさせていただきました。

文字列mixin、すごいですねえ!!
879デフォルトの名無しさん:2007/04/19(木) 14:57:54
頼むから>>の後にスペースを入れないでくれ
880873:2007/04/19(木) 15:26:42
>>879

はっっ
ごめんなさい
881デフォルトの名無しさん:2007/04/19(木) 15:31:09
gdc固有のバグは何処に報告すればいいんだ?
882デフォルトの名無しさん:2007/04/19(木) 17:27:22
インターフェーステンプレートなんてものも出来るのか・・・
883デフォルトの名無しさん:2007/04/19(木) 18:49:12
>>881
バグ報告? 自分で修正してパッチ公開だろ。
そのコードが良かったら誰かがいつかマージしてくれる。
884デフォルトの名無しさん:2007/04/19(木) 18:51:00
>>881
bugzilla
885デフォルトの名無しさん:2007/04/20(金) 06:24:59
DFL 0.9.5.03 リリース
DMD 1.013 リリース
886デフォルトの名無しさん:2007/04/20(金) 07:33:15
> DMD
バグ潰しか
887デフォルトの名無しさん:2007/04/20(金) 08:44:43
DFLキター
888デフォルトの名無しさん:2007/04/20(金) 11:54:54
あぁ・・昨日アップデートしたばかりなのに・・・
889デフォルトの名無しさん:2007/04/20(金) 13:49:00
毎日アップデートするのを楽しむのじゃ
890デフォルトの名無しさん:2007/04/20(金) 15:57:00
>>889
D言語ってそうゆうワクワク感がいいですよね。
アップデートを確認してバグが大量にフィックスされていた時は
いつも感動の連続ですよ。
891デフォルトの名無しさん:2007/04/20(金) 15:59:11
結局ダメ言語
892デフォルトの名無しさん:2007/04/20(金) 21:55:55
Richard Deyman って誰?
893デフォルトの名無しさん:2007/04/20(金) 22:02:00
readlnがバグってるの早く直してほしいな
894デフォルトの名無しさん:2007/04/21(土) 00:49:55
久しぶりにJavaで仕事したらスイスイ書けてこんなに便利だったのかと改めて思った
Dにも頑張って貰いたい
895デフォルトの名無しさん:2007/04/21(土) 00:58:13
便利なのはEclipse
896デフォルトの名無しさん:2007/04/21(土) 10:41:01
IDE マダァ?(・∀・ )っ/凵⌒☆チンチン
897デフォルトの名無しさん:2007/04/21(土) 11:06:36
>>896
CodeBlocksがまあまあ使える
898デフォルトの名無しさん:2007/04/21(土) 13:31:18
Code::Blocksは、DddgがGUIで使えて嬉しいのだが
CodeCompletionがDに対応してくれないかなあ。
Code::Blocks本家で公開されてるソースの、src/plugins/codecompletion/ 内がそうなんですけど。
pluginSDKとwxとかいうのを入れればコンパイル出来るのかな? というかC++よくわからんし。
C++出来るエロイ人、どうかお願いします。

Code::Blocksの日本語化は、zipに入っている拡張子XRCのxmlファイルを編集すれば出来ます。
<label><help><tooltip>の箇所を書き換えてUTF8で保存し、zipに戻すだけ。
pluginの日本語化は、pluginDLL内のUnicode文字列をバイナリエディタなどで書き換える。
899デフォルトの名無しさん:2007/04/21(土) 13:36:19
あ、スペルミスってた。Ddbgです。
http://ddbg.mainia.de/
900デフォルトの名無しさん:2007/04/21(土) 14:10:45
>>898
その日本語化したファイル( ゚д゚)クレ
901デフォルトの名無しさん:2007/04/21(土) 17:20:05
CodeBlocksでDのために環境設定する方法どっかに載ってないですか orz
902デフォルトの名無しさん:2007/04/21(土) 19:25:57
>>901
表の方で配布してるバージョンじゃなくて、
ttp://forums.codeblocks.org/index.php?board=20.0
で配布してる Nightly builds がDの設定を含んでいます。

Settings -> Compiler and debugger -> Global compiler Settings -> Selected compiler
で、Digtal Mars D Compiler を選択。
そのすぐ下のコンボボックスを切り換えると細かな設定できます。
ここが、ベースとなる設定。コンパイラのpathなど。

各プロジェクトごとでの設定は、
Project -> Properties -> Project's build options
の所で出来ます。
903デフォルトの名無しさん:2007/04/21(土) 20:31:46
帰ってからやってみます ノシ
904デフォルトの名無しさん:2007/04/22(日) 00:20:02
>>902
落とせないんだけども俺だけ?
905デフォルトの名無しさん:2007/04/22(日) 15:21:48
((関数を返す関数)を返す関数)を返す関数…ってどうやって書けばいい?

while(p !is null) p = p(); みたいなことがしたいんだけど、
alias int function() func; ってするとコンパイラ死んじゃうし…
906デフォルトの名無しさん:2007/04/22(日) 16:19:28
alias foo_func function() foo_func;
ってやったらコンパイラ死んだwwwww
907デフォルトの名無しさん:2007/04/22(日) 16:22:47
p をクラスにして opCall をオーバーロードすればいいんじゃない?
908デフォルトの名無しさん:2007/04/22(日) 16:53:33
>>907
ありがとう

そういえばそんなものがあるんでしたね。
プロパティもつけられて一石二鳥です
909デフォルトの名無しさん:2007/04/22(日) 18:33:51
>>905
alias でなく typedef を使う。
910デフォルトの名無しさん:2007/04/22(日) 18:40:02
typedefでも循環参照なってたらダメだろ
911デフォルトの名無しさん:2007/04/22(日) 18:54:10
どっちにしろ、コンパイラがエラーをはかないのはバグだけどな。
912デフォルトの名無しさん:2007/04/22(日) 19:01:02
再帰 alias は馬鹿正直に解決しようとして死ぬみたいだな
913デフォルトの名無しさん:2007/04/22(日) 19:04:37
どうせ書けても意味ないし、書かなきゃ良いだけだから、
バグではあるけど、放置されるかもしれんな。
914デフォルトの名無しさん:2007/04/22(日) 19:13:35
みなさんはD用のエディタに何を使っていますか?

自分はSciteを使っているのですが、``でくくった内容を文字列として認識してくれないみたいであまり使い物になっていません。
915デフォルトの名無しさん:2007/04/22(日) 19:45:28
J-cref v3
まともなインテリセンスの機能が付いたエディタがない以上
これで十分かなって。
916デフォルトの名無しさん:2007/04/22(日) 20:35:02
>>910
できるよ。
あまり意味無いけど。

int main(char[][] args){
auto chain = new Chain();
chain.push(&a, &b, &c);
chain.exec(1)(2)(3);
return 0;
}

void a(int n){
printf("%d: a_func\n", n);
}

void b(int n){
printf("%d: b_func\n", n);
}

void c(int n){
printf("%d: c_func\n", n);
}
続く
917916:2007/04/22(日) 20:35:48
続き

class Chain{
public:
void push(F ...)(F fs){
foreach(f; fs){
funcs ~= f;
}
}

Self exec(int n){
pos = 0;
return exec_(n);
}

Self exec_(int n){
funcs[pos](n);
pos++;
return &exec_;
}

private:
typedef typeof(Self) delegate(int) Self;

void function(int)[] funcs;
int pos;
}
918デフォルトの名無しさん:2007/04/22(日) 21:18:24
// typedef f function() f;
typedef typeof(f) function() f;

typeofとすれば通るのか。ちょっとその辺よく分からんな…
919デフォルトの名無しさん:2007/04/23(月) 00:19:13
>>892
Richard Feynmanのもじり。
920デフォルトの名無しさん:2007/04/23(月) 23:36:34

eclipseでD書いてる人はいないの?

921デフォルトの名無しさん:2007/04/23(月) 23:41:40
もう色分け以上できるようになってるん?
922デフォルトの名無しさん:2007/04/24(火) 01:15:03
文法がまだまだ頻繁に変わる(キーワードの変更程度ならまだしも)言語で
IDEを作ろうとする(組み込もうとする)人を尊敬する。
923デフォルトの名無しさん:2007/04/24(火) 18:22:06
D に C++ の throw() や Java の throws みたいな例外指定はないの?
924デフォルトの名無しさん:2007/04/24(火) 18:26:07
一応埋め込みドキュメントにThrowsがあるけど。
925デフォルトの名無しさん:2007/04/24(火) 18:28:12
throwsなんて糞文法はJavaだけだろw
ドキュメントジェネレータ、IDEでサポートするのが筋。
926デフォルトの名無しさん:2007/04/24(火) 18:39:13
コンパイル時にチェックしたり、実行時にチェックするルーチンを
埋め込むのはコンパイラじゃないとできないんじゃないか?
いや、出来ないことはないが、in-out-bodyやinvariantと同じレベルの話だろう。
927デフォルトの名無しさん:2007/04/24(火) 18:59:03
>>924
そうか、ないのか。
あってもよさそうだと思ったんだが…

>>925
そんなプログラマの意思を読めるような賢いIDE見たことないんだが…
関数の戻り値型を明記していないのに、returnしている値が型において正当かどうかを判断するなんて無理だろ
928デフォルトの名無しさん:2007/04/24(火) 19:04:53
C++の例外指定はウンコすぎて滅多に使われてない
929デフォルトの名無しさん:2007/04/24(火) 19:16:45
いや、ヲルタさんが画期的なものを追加しているかどうか気になっただけで、
C++の例外指定がウンコだろうがJavaのが糞だろうが、それはどうでもいいんです。
930デフォルトの名無しさん:2007/04/24(火) 19:18:06
他言語の失敗仕様を取り込むほど暇ではなかろう
931デフォルトの名無しさん:2007/04/24(火) 19:24:10
ん?Javaのthrowsはよく出来た文法だと思うが。
書きやすいよりバグりにくいことのが大切。
932デフォルトの名無しさん:2007/04/24(火) 19:33:57
投げるべきではない例外を投げてしまわないようにする仕組みは必要だと思う。
throwの後ろにはクラスオブジェクトなら何でも書けるってのは問題ありじゃないかな。
タイポしたって意味さえ通ればエラーにならんわけでしょ?
933デフォルトの名無しさん:2007/04/24(火) 23:09:33

edlipse
934デフォルトの名無しさん:2007/04/24(火) 23:17:27
class の後ろには新しいクラスなら何でも書けるってのは問題ありじゃないかな。
935デフォルトの名無しさん:2007/04/25(水) 02:44:32
JavaからC#に行ったときは、メソッドが何をthrowするか宣言できないんじゃ、
何をcatchすりゃいいんだよと思ったなぁ・・。
今はどっちが良いのか自分でもよく分からんや。
一概にどちらがいいとは断言できない、設計思想によるって感じかねぇ。

その辺の例外の設計ついて詳しく突っ込んだ書籍とかってあったっけ?
936デフォルトの名無しさん:2007/04/25(水) 04:05:55
throws は面倒だけどより安全にはなると思う。
どっちがいいかは俺もワカンネ
937デフォルトの名無しさん:2007/04/25(水) 06:02:11
Javaの話だけど
DateTimeFormatでparseしようとしたらうまくいかなくて悩んでたら
throwされたのを拾ってなかったのが原因だった
だけどコンパイルエラーは出てなかったんだよね
throwsあるのに書いてないクラスが存在するってバグじゃね?
938デフォルトの名無しさん:2007/04/25(水) 06:04:02
>>935
EiffelTheLanguage
939デフォルトの名無しさん:2007/04/25(水) 06:54:44
わなDのWindows API プログラミング見ながらWinAPI使ってみようと思って↓みたいにしたんですけど
--- a.d ---
import win32.core;
extern (Windows) void main() {
WNDCLASSEX wndcls;
}
----
>dmd a.d
略)\link.exe a,,,user32+kernel32/noi;
略)
a.obj(a)
Error 42: Symbol Undefined _D5win327winuser11WNDCLASSEXA6__initZ
--- errorlevel 1

って怒られます。このシンボルはどうやって解決すればいいんでしょか?
940デフォルトの名無しさん:2007/04/25(水) 07:41:29
>>935
.NETはthrowされるはずの例外がMSDNにちゃんと載ってないからなあ。最悪
941デフォルトの名無しさん:2007/04/25(水) 07:43:42
a.def
--------
EXETYPE NT
SUBSYSTEM WINDOWS

--------
942デフォルトの名無しさん:2007/04/25(水) 14:46:02
>>939
bud -gui a.d

dmd a.d win32\winuser.d

WinAPIのDモジュールを全部コンパイルしてライブラリにしといて
dmd a.d CompileZumiLibrary.lib
943デフォルトの名無しさん:2007/04/25(水) 16:04:57
>>935
そもそもthrowsで書かれるのはそのメソッド自身で発行する例外のみで、
そのメソッドが呼び出すメソッドによって発行される例外は
そのメソッドの定義だけ見ても分かんないんじゃ?
どんな例外がthrow送られてくるのか確定するには、結局コードを追わないことには…。


偶然意味が通ってしまうtypoなんてのは心配しだしたらきりがないと思うけど、
「仕様をコードに明示する」って考え方はDの作法にあうものだと思う。

import文で読み込むすべてのモジュールについて、コードをimport 式で読み込んで、
想定外の例外クラスをthrowしてたらassert(0)するようなunittestを書ければいいのかな。
944デフォルトの名無しさん:2007/04/25(水) 16:26:52
動的な委譲やdelegateがはさまるとますます混沌としてくる科
945デフォルトの名無しさん:2007/04/25(水) 16:27:47
>>943
throws T となっているメソッドを呼び出す場合は、catchして握りつぶすか、
呼び出す側の関数に throws T とつけないといかんのではなかったか?
946デフォルトの名無しさん:2007/04/25(水) 17:38:24
.NetでとっくにApplicationExceptionが非推奨になっていたという事実に驚愕。
いやまぁ賢明な判断だと思うけど。

やっぱJavaのthrowsによるチェック例外方式が、一番Dに合ってる気がするなぁ。
アレは上手に設計して利用すれば、バグ防止の強力なツールになるから。
メソッド名・引数・戻り値とかと同じように、
大事なメソッドの設計事項としてきちんと認識されれば……。
あ、Dの場合さらに契約も含まれるのか。
947デフォルトの名無しさん:2007/04/25(水) 17:48:53
ただあれ書くの結構めんどいんだよな
IDEの支援があればいいんだけど
948デフォルトの名無しさん:2007/04/25(水) 17:52:04
>>945
そうなの?Java知らないから、
http://www.javaroad.jp/java_exception3.htm
 > ※例外ハンドラが見つからない場合、Java実行システムはさらにメソッド呼び出し元(この場合はmainメソッド)へ、
 > 例外ハンドラを捜しに行きます。最終的に例外ハンドラが見つからなかった場合はJavaのデフォルトの例外処理を実行します。
って書いてあったの読んで
一度投げられた例外は勝手に遡行していくものだと思ったんだけど。

945の言うとおりなら、筋が通ってる仕様だと思う。
ただ、それを強制するとなんでもcatchで握りつぶす悪癖につながるだろうから
Dに盛り込むには仕様を再考しなきゃならんだろうな。現実的な言語としては。
949デフォルトの名無しさん:2007/04/25(水) 18:53:46
alias int func(int);
って書式で関数型のaliasを宣言できるけど、
alias int(int) func;
っていう形では宣言できないんだね。
なんでここだけC式順序しか許されないんだろう。

alias int function(int) func;
ってやったら関数ポインタ型のaliasになった。
950デフォルトの名無しさん:2007/04/25(水) 18:56:42
Javaの例外指定の利点は、ライブラリ制作者が「これは処理しとけよ」って例外を、
処理するようにし向けることができることだと思う。
これは、Javaのように、どちらかと言えば例外を多く使うライブラリには有効だと思う。

たとえばCなら、定石的に、
if ((fp = fopen("file",rb)) == NULL) { ...
ってなコードを書くけど、
そういう処理をやれってことが、言語仕様から明確にサジェストできる。
951デフォルトの名無しさん:2007/04/25(水) 19:07:57
>>948
Javaだと、きっちり層分けして、別の層へ投げちゃうことになりそうな例外は
実行時例外でラッピングしてcatchを握りつぶされないようにするのが基本。
952デフォルトの名無しさん:2007/04/25(水) 20:07:06
Win32API使いたのですが
DLLから、リンク為の.libファイルを作りたいときどうやるんでしょうか?

pragma(lib, "shlwapi.lib");
extern(Windows) int PathFileExistsW(wchar*);
void main(char[][] args) {
 int b = PathFileExistsW("c:\\dmd\\bin\\dmd.exe"w.ptr);
 printf("%.*s\n", (b ? "exist" : "not exist"));
}

ttp://www.digitalmars.com/download/freecompiler.html からimplibを入手して、
shlwapi.dllからshlwapi.lib生成してみたのですが、
  implib /noi /system shlwapi.lib %windir%\system32\shlwapi.dll
リンクでエラーになってしまいます。
  Error 42: Symbol Undefined _PathFileExistsW@4
dmdやdmcに付属の.libには、 _hoge@数字 形式のデータが入っているようなんですが
自分が生成した.libは _hoge 形式であって、一致しないようなんです。 lib -l shlwapi.lib
どうやったら _hoge@数字 形式の.lib作れるんでしょうか?
953デフォルトの名無しさん:2007/04/25(水) 20:08:19
>>948
catch して握りつぶすようなプログラムを検出して
コンパイルエラーには出来ませんか?
954デフォルトの名無しさん:2007/04/25(水) 20:09:44
>>953
不可能。なぜなら、「エラー処理として何もしない」という処理を意図的にできなくなるから。
955デフォルトの名無しさん:2007/04/25(水) 20:12:37
>>952
LoadLibraryじゃだめ?
956デフォルトの名無しさん:2007/04/25(水) 20:16:16
catch説で何もしない場合に署名書かないとコンパイルエラーになるようにしようぜ。

try
{

}
catch(IOException @nouse)
{
@@I really want to nothing exec this exception catch caluse. I,m understood how it means. yyyy/mm/dd xxxx xxxx.@@
}
957デフォルトの名無しさん:2007/04/25(水) 20:18:19
先を越されたww
Cの/* fall through */みたいなもんやね
958デフォルトの名無しさん:2007/04/25(水) 20:20:27
959デフォルトの名無しさん:2007/04/25(水) 20:26:12
>>952
Platform SDKの.libファイルをcoffimplibで変換してやればおk
俺がextern(Windows)の関数を使うときには、そうしてる。(DirectXとか)
960デフォルトの名無しさん:2007/04/25(水) 20:30:37
>>956のような英語もどきが増えるならそんな縛りはいらないw
961デフォルトの名無しさん:2007/04/25(水) 20:31:27
>>959
ありがとうございます。
DLLから直接生成する事しか頭になかったです。頭固いorz
962デフォルトの名無しさん:2007/04/25(水) 20:39:02
>>953
ソースコードをimport式で読み込んで
想定外の例外クラスをthrowしてるようだったら
assert(0)するようなunittestを書く、
というのはできなくもないような気がしないでもない。
963デフォルトの名無しさん:2007/04/25(水) 20:50:01
テンプレートで自分自身のソースを構文解析するのか。
964デフォルトの名無しさん:2007/04/25(水) 21:47:52
D言語で作られたアプリって何があるの
965デフォルトの名無しさん:2007/04/25(水) 21:48:58
>>964
D言語ヲタがフリーのゲームを作ってる
966デフォルトの名無しさん:2007/04/25(水) 22:07:23
>>958
おつかれ。
次スレ:D言語 Part13
http://pc11.2ch.net/test/read.cgi/tech/1177499924/l50
 と、
D言語に光あれ!
967デフォルトの名無しさん:2007/04/25(水) 22:08:12
DoDoDoしようぜ!
968デフォルトの名無しさん:2007/04/25(水) 22:13:05
template foo(){
template foo(){
int foo=3;
}
}

ってインスタンス化できないのかな。
fooとかfoo!()とかfoo!()!()とかfoo!().foo!()とか
いろいろやってもうまくいかなかった。
static ifと組み合わせて、テンプレートを返したり
関数を返したりとかやりたいんだけど。
969デフォルトの名無しさん:2007/04/25(水) 22:16:58
すまん、>968は言ったそばから
alias foo!() f1;
というように一段ずつやればできた。

しかしこれなら暗黙の同名メンバ参照を使わずに
やった方がマシだなあ……。
970デフォルトの名無しさん:2007/04/25(水) 22:23:50
971939:2007/04/25(水) 22:23:54
レスくれた人ありがとう。いま>>942試して解決しました
dmd製のlibにしておかないとだめだったのね
972デフォルトの名無しさん:2007/04/26(木) 03:13:42
俺も例外を明示的に無視したりdefault:ですることが無かったりする時
// do nothing とかよく書くけど、
何らかの言語サポートが受けられんかなーとちょっとだけ思うのよねぇ。
まぁあったとしても効果は無いんだろーけどなー。

……そーいやdefault:無しのswitch文が
何ゆえコンパイル時じゃなく実行時エラーなのか、
いまだに理由が分からん。
973デフォルトの名無しさん:2007/04/26(木) 04:09:56
それはコンパイラからみて
defaultへ逝くケースがあるかないかは実行時にしか判らないけど
プログラマの意図としてはdefaultへ逝くことがありえないと判断して
書いてるような場合は仕方無いのではないかと

コメント書かないと警告出すとかは賛成です
974デフォルトの名無しさん:2007/04/26(木) 07:27:14
defaultなしのswitch文は default:assert(0); が書いてあるように扱われてるんじゃないのか?
975デフォルトの名無しさん:2007/04/26(木) 07:51:38
assert(0);なら問題ないと思う
976デフォルトの名無しさん:2007/04/26(木) 10:04:23
コンパイラがコメントの中身見るって気味悪いな・・・
いっそdoNothing()でw
977デフォルトの名無しさん:2007/04/26(木) 10:52:02
defaultでdefaultにdefault:assert(0);が書いてあるとするなら
コメントでdoNothing();するってことは
defaultをdefaultじゃなくするってことに過ぎないだろ
978デフォルトの名無しさん:2007/04/26(木) 11:05:32
想定外の例外や想定外のdefaultへのジャンプがデフォルトで
エラーとして検知されるようになってるのがD言語だから、
catchするなりdefaultを書くなりするってことそのものが
「明示」にあたるんじゃないかな。

だからdo_nothingは、すくなくとも例外とswitchについては用が足りてると思う。

べつにdefaultを省略しちゃいかんわけじゃない。そこに到達しないなら。
例外も補足しなきゃならんわけじゃなくて、処理できないものは
catchせずにスルーしちゃっていいわけだし。
(もちろん停止しちゃいけないとかいうときには停止しない範囲の
どこかで処理する必要はあるわけだけど)

にもかかわらず闇雲なdefault:とか条件が広すぎるcatchを仕掛けるのは、
「エラー処理はしなければならない」っていう強迫観念からくるごまかしな
わけで、それはdo_nothingを強制したところで今度は「do_nothingと書きつつも
do_nothingじゃまずかった」という状況を生むだけで不毛だと思う。

具体的なブツを明示するのと違って、「具体的に問題を認識してなくとも
同様に書ける」ような踏み絵はあんまり意味ないんじゃない?


単にdefault抜けをコンパイル時に指摘してほしい場合は-wオプションで
警告を出せばいいと思う。
http://www.kmonos.net/alang/d/warnings.html
http://www.digitalmars.com/d/warnings.html

そこ読んでて気づいたけど、
 > warning - array 'length' hides other 'length' name in outer scope
ってあるけど、これ警告からエラーに昇格したんだよね。
979デフォルトの名無しさん:2007/04/26(木) 14:12:07
あれー? Dのswitchってdefault:が無いと、
switchに入った途端に問答無用でErrorじゃなかったっけ?
実際の値に対応するcaseが存在しようがしまいが。
980デフォルトの名無しさん:2007/04/26(木) 15:01:48
>>979
NO
http://www.kmonos.net/alang/d/statement.html#SwitchStatement
 > 更にdefault文もなかった場合は、 SwitchError例外が送出されます。
981デフォルトの名無しさん:2007/04/26(木) 15:58:00
なんという糞仕様・・・
982デフォルトの名無しさん:2007/04/26(木) 16:03:25
問答無用で default: 入れさされたら
最適化が悪くなるじゃん。
983デフォルトの名無しさん:2007/04/26(木) 16:31:58
DFLってWin専用なのな・・・
984デフォルトの名無しさん:2007/04/26(木) 19:04:14
caseですべて尽くしてるのに
その上default必要って言われたら
アホかと
985デフォルトの名無しさん:2007/04/26(木) 19:25:15
尻が痒い
986デフォルトの名無しさん
>>984
全部尽くしてるなら書かなければいいんじゃね