D言語 Part11

このエントリーをはてなブックマークに追加
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デフォルトの名無しさん:2006/12/09(土) 08:44:54
3デフォルトの名無しさん:2006/12/09(土) 09:07:27

The release of D version 1.0 is scheduled for Jan 1, 2007.

ttp://www.digitalmars.com/d/future.html
4デフォルトの名無しさん:2006/12/09(土) 17:22:32
static foreach
とか無いかな
5デフォルトの名無しさん:2006/12/09(土) 17:30:11
それ何度か聞いたけど
どういうコードを実現したいの?
6デフォルトの名無しさん:2006/12/09(土) 18:02:14
あ、やっぱり話に上がったことはあるんですね…

つい最近Dを勉強しはじめたばかりなので具体的なコードは書けないんですけど、
例えば、可変長引数テンプレートでaliasのリストを渡して、
それぞれの名前と対応するメンバ変数と、
それぞれ同じような処理をするメンバ関数(get、set用)を持ったクラスを宣言する…
という感じです

解りにくくてすみません
何と言うか、もっと具体的なコード書けるようになってから出直した方がいい感じですね
7デフォルトの名無しさん:2006/12/09(土) 18:11:49
>>6
タプルのforeachがまんまstatic foreach。ただし、関数内だけでしか使えないけど。
8デフォルトの名無しさん:2006/12/09(土) 19:44:07
D 0.177
9デフォルトの名無しさん:2006/12/09(土) 19:50:09
>>7
あ、そうなんですか
タプルが解るようになったら試してみます
10デフォルトの名無しさん:2006/12/09(土) 21:24:23
Casting a value v to a struct S is now rewritten as S(v).
Initializing a struct S from a value v is now rewritten as S(v).
これ、どうなんだろう
opCastの幅が広がりんぐってこと?
11デフォルトの名無しさん:2006/12/09(土) 21:31:17
>>10
違う。opCall。
cast(S)vがS(v)に、S s=v;がS s=S(v);に。
しかもポインタには使えない。いわいる一つの微妙。
1210:2006/12/09(土) 21:50:25
アッー!
13デフォルトの名無しさん:2006/12/10(日) 00:50:37
なにそれ
いまさらcast()がいらんようになるのか?
14デフォルトの名無しさん:2006/12/10(日) 01:05:57
>>13
struct S{
 int a;
 static S opCall(int v){
  S s;
  s.a = v;
  return s;
 }
}

void main(){
 S s = 3;
 printf("%d\n",s.a); // 3
 s = cast(S)6;
 printf("%d\n",s.a); // 6
}


こういうことっぽい。
15デフォルトの名無しさん:2006/12/10(日) 01:26:51
ほほう
ふーん
へえ
うーん
・・・
構造体と組み込み型の間の垣根が少し下がったと思っておこう
16デフォルトの名無しさん:2006/12/10(日) 01:36:15
さりげなくopAssignが。
(http://www.digitalmars.com/d/operatoroverloading.html の一番下)
要らないと思うんだけどなあ...
17デフォルトの名無しさん:2006/12/10(日) 01:51:30
>>16
まじか

struct S{
 int a;
 static S opCall(int v){
  S s;
  s.a = v;
  return s;
 }
 void opAssign(int v){
  a = v;
 }
}
void main(){
 S s = 3;
 printf("%d\n",s.a); // 3
 s = cast(S)6;
 printf("%d\n",s.a); // 6
 s = 9;
 printf("%d\n",s.a); // 9
}

まじだ
18前954:2006/12/10(日) 03:00:53
>>1 乙です

.diの件報告しときました。さんくす。
http://d.puremagic.com/issues/show_bug.cgi?id=668

http://pc8.2ch.net/test/read.cgi/tech/1158013550/972
は仕方ないような…テンプレートを、使ってる各objのパブリックシンボルに
してしまうのは無理(すると複数のモジュールから同じテンプレートインスタンスを
使えなくなる)。なのでどうしようもないと思う。#突っ込み希望
19デフォルトの名無しさん:2006/12/10(日) 05:19:46
D 0.177
Dec 9, 2006
New/Changed Features

* Casting a value v to a struct S is now rewritten as S(v).
* Initializing a struct S from a value v is now rewritten as S(v).
* TypeInfo now always generated for enum, struct, and typedef's, to enable more thorough rtti.
* classinfo.name now has the fully qualified name
* Arrays no longer implicitly convert to pointers unless -d is used.
* Need to recompile because:
o Improved name mangling for floating point constants
o Nested and member functions needing 'this' are preceded by 'M' in the mangled type.
20デフォルトの名無しさん:2006/12/10(日) 05:47:23
バグ報告と言えば

Part9 の 799-814 あたりの const 配列が case で使えないあたりはどーなのだろう?
21デフォルトの名無しさん:2006/12/10(日) 15:43:14
structにあくまでコンストラクタが定義できないのは何でだろう。
staticなopCallで代用できるとはいえ、バッドノウハウの臭いが・・。
22デフォルトの名無しさん:2006/12/10(日) 22:04:21
構造体は構造体だってことなんジャマイカ
23デフォルトの名無しさん:2006/12/10(日) 22:55:37
記法は?クラスの場合コンストラクタってnewした時に呼ばれるじゃん。
構造体はnewしないでも作れることを考えるとなんか上手いのが思いつかん。
thisで自分型を返すstatic opCallが定義できるとか?
24デフォルトの名無しさん:2006/12/10(日) 23:00:23
>>23
ポインタでは無いからthisは無い。
25デフォルトの名無しさん:2006/12/10(日) 23:31:28
いやこういうことだとおも

struct A {
int a;
this(int x) { a = x; }
}

{
A a(10);
// a.a == 10
}
26デフォルトの名無しさん:2006/12/11(月) 00:07:17
リテラルがあればいいんでね?
27デフォルトの名無しさん:2006/12/11(月) 00:36:54
そうでもない
28デフォルトの名無しさん:2006/12/11(月) 12:02:38
構造体はクラス寄りなC++と違ってDでは組み込み型寄りなんだな
でもC++みたいに書きたいなあ
29デフォルトの名無しさん:2006/12/11(月) 13:11:56
>>前スレ996
なるほどー。初心者相手にいろいろとありがとうございます。。
30デフォルトの名無しさん:2006/12/11(月) 14:03:15
>>28
そういう時は、classとscopeを使え、ということなのかも
31デフォルトの名無しさん:2006/12/11(月) 15:48:20
>>23
>>25とすると「構造体はnewを省略できる」ってことになるな・・。
あ、C#じゃそうなってる。
でもDだとstatic opCallとの曖昧さを解決せにゃならんから、
それでopCallに統一したってことなのかな。

でもopCallって、後になってコンストラクタの代用として提案されたテクニックだったような。
32デフォルトの名無しさん:2006/12/11(月) 17:16:42
>>31
今回の変更は、
 ・cast式の動作を、cast先の構造体型で定義できるようになった
 ・構造体型の初期化の動作を定義できるようになった
 ・構造体型変数宣言の、汎用的な初期化を定義できるようになった
という変更で、>15の言うような意図だと思う。

だから、
> でもopCallって、後になってコンストラクタの代用として提案されたテクニックだったような。
これを踏まえて、すでに初期化用のopCallが定義されている構造体型について、
いままでなら S s = S(a); と書くところを、構造体の定義を変えなくとも
S s = a; と書けるようになることを意図してるんじゃないかな、たぶん。
33デフォルトの名無しさん:2006/12/11(月) 17:18:12
>>32
誤 > ・構造体型の初期化の動作を定義できるようになった
正: ・構造体型の代入式の動作を定義できるようになった
34デフォルトの名無しさん:2006/12/13(水) 14:48:42
書き手の意図は「構築」なのに、表現が「呼び出し」になっちゃうところが直感的じゃ無いな。
unittestやDbCまで取り入れて「コードによる表明」を重視してる言語なのに。


突然だが、Delphiみたくcreateメソッドとコンストラクタも
もっと歩み寄ってくれればいいのに、と妄想してみる。

class Obj{
 private int i;
 new (int i){ this.i = i; }
 new fromFile(char[] file){ int i = loadFromFile(file); new(i) }
}

Obj o = Obj.new();
Obj o2 = Obj.new(100);
Obj o3 = Obj.fromFile("obj.dat");

呼び出しをstaticメソッド的にして、名前も付けたい的な。
35デフォルトの名無しさん:2006/12/13(水) 17:53:27
なんだかこれはDらしくない気がする変更だなぁ?
36デフォルトの名無しさん:2006/12/13(水) 19:42:45
前提として、構造体とクラスは別物であるという思想は見えますね。
テンプレートのために妥協したというか、そんな感じがするけど。
37デフォルトの名無しさん:2006/12/13(水) 21:29:47
Dって理想を掲げたは良いものの、実装するに当たって色々迷走して結局ワケわかんなくなったって認識でいいですか?
38デフォルトの名無しさん:2006/12/13(水) 23:59:45
構造体の利点って?
newしないでいいだけ?
39デフォルトの名無しさん:2006/12/14(木) 04:15:12
値渡しだからクラスとは違うもんだよ。
40デフォルトの名無しさん:2006/12/14(木) 04:25:55
それってつまりポインタ使えばクラスと一緒ってこと? でいいのかな。
41デフォルトの名無しさん:2006/12/14(木) 04:47:12
どうだろう、>>21で話題にあがってる通りコンストラクタ無いみたいだし。
42デフォルトの名無しさん:2006/12/14(木) 08:35:33

ttp://www.codu.org/nestedvm-gdc/

This is a port of GDC to work with NestedVM, so you can generate Java bytecode from D.
43デフォルトの名無しさん:2006/12/14(木) 12:54:38
今こそ高らかに叫ぼう。

ver1.0マダーーーーーーーーーーーーーーーーーーーーーーーーーー?
44デフォルトの名無しさん:2006/12/14(木) 14:33:20
年明け、年明け。
45デフォルトの名無しさん:2006/12/14(木) 14:52:18
>>43 ノータリン
46デフォルトの名無しさん:2006/12/14(木) 17:26:07
(´・ω・`) マジレスされても困る
47デフォルトの名無しさん:2006/12/14(木) 18:34:00
そらそうだ
48デフォルトの名無しさん:2006/12/15(金) 04:36:35
49デフォルトの名無しさん:2006/12/15(金) 08:34:51
じゃあD言語版をささっと

private import std.c.stdio;
void hanoi(int n,int from,int to,int tmp,void delegate()next){
    if(!n)return next();
    hanoi(n-1,from,tmp,to,{
        printf("%d to %d\n",from,to);
        hanoi(n-1,tmp,to,from,next);
    });
}
void main(){
    int n;scanf("%d",&n);
    hanoi(n,0,1,2,{});
}
50デフォルトの名無しさん:2006/12/15(金) 08:44:31
俺もDっぽく書いてみた!
template hanoi(int n,char[] from,char[] to,char[] tmp){
    static if(n){
        mixin hanoi!(n-1,from,tmp,to);
        pragma(msg,from ~ " to " ~ tmp);
        mixin hanoi!(n-1,tmp,to,from);
    }
}
mixin hanoi!(2,"A","B","C");
51デフォルトの名無しさん:2006/12/15(金) 10:34:52
52デフォルトの名無しさん:2006/12/15(金) 19:04:44
○。・。○。・。○。・。○。・。○。・。○。・。○。・。○。・。○
このレスをみたあなたは・・・3日から7日に
ラッキーなことが起きるでしょう。片思いの人と両思いになったり
成績や順位が上ったりetc...でもこのレスをコピペして別々のスレに 5個貼り付けてください。貼り付けなかったら今あなたが1番起きて
ほしくないことが起きてしまうでしょう。
コピペするかしないかはあなた次第...
○。・。○。・。○。・。○。・。○。・。○。・。○。・。○。・。○

53デフォルトの名無しさん:2006/12/16(土) 04:03:13
class AAA
{
int opIndex( size_t i ){ return i; }
int length(){ return 5; }
}

int main()
{
auto a = new AAA;

writefln( a[3] );
writefln( a[length-1] );
writefln( a[$-1] );

return 0;
}

こんなかんじの事って出来ないのかね?
54デフォルトの名無しさん:2006/12/16(土) 16:25:19
できない
55デフォルトの名無しさん:2006/12/16(土) 16:51:31
無理すれば出来る気になれるよ!
import std.stdio;
int length;alias length __dollar;
class AAA
{
    int opIndex(lazy size_t i ){__dollar=this.length; return i(); }
    int length(){ return 5; }
}
int main()
{
    auto a = new AAA;
    writefln( a[3] );
    writefln( a[length-1] );
    writefln( a[$-1] );
    
    return 0;
}
56デフォルトの名無しさん:2006/12/17(日) 15:53:34
ddocのExample内で
  private:
って日常茶飯事的に入れたらセクション名と勘違いされて悲しいです

ていうかバグ?
57デフォルトの名無しさん:2006/12/17(日) 17:27:20
行頭?に置くと勘違いされたような・・・
全角スペースとかを手前に挿入すれば回避できたはず。
58デフォルトの名無しさん:2006/12/17(日) 18:38:55
>>56
あるいは、private { }にするとか、private ...と個別に書いて回避するか。
59デフォルトの名無しさん:2006/12/18(月) 22:06:09
GDC release 0.20

http://sourceforge.net/project/showfiles.php?group_id=154306

* Updated to DMD 0.177
* Fixes for synchronized code generation
* Better support for cross-hosted builds
* Fixed Bugzilla 307, 375, 403, 575, 578
* Applied Anders Bj-Av(Brklund's MacOS X build patches
* SkyOS support will return when GCC 4.1.1 is supported.
60デフォルトの名無しさん:2006/12/18(月) 22:39:00
ウェーハッハッハッハ。ようやくgdcが来た様だな。存分に遊ばせてもらうぜ。
61デフォルトの名無しさん:2006/12/19(火) 09:48:35
privateなthisでnew出来るんだけど仕様?
assert(0)しろってことかな
62デフォルトの名無しさん:2006/12/19(火) 09:52:18
あっ まちがえた
それにしても仕様?
63デフォルトの名無しさん:2006/12/19(火) 10:43:56
// aaa.d
class AAA { private this(){} }
// bbb.d
import aaa
void main() { auto x = new AAA; }

bbb.d(2): class aaa.AAA member this is not accessible
出来ないけど。同一モジュール内でprivateが見えるのは仕様。
64デフォルトの名無しさん:2006/12/19(火) 12:45:03
うあああ、そうだったか。
Dのfriend属性とか言うやつか、こんにゃろう・・・。

まりがとうございました・・。
65デフォルトの名無しさん:2006/12/19(火) 16:40:04
66デフォルトの名無しさん:2006/12/19(火) 16:45:16
FreeBSD使ってるからGDCはありがたい
67デフォルトの名無しさん:2006/12/19(火) 21:35:36
import std.ctype, std.stream;
した状態で isidigit をそのまま使おうとすると関数名が衝突して、
精神的に萎える。
std.stream のほうは private なんだから無視してくれるとありがたいんだけどなー
68デフォルトの名無しさん:2006/12/21(木) 01:10:52
D 1.0 まで あと 11 日
69デフォルトの名無しさん:2006/12/21(木) 22:30:26
version1.0マ… いえ、なんでもないです
70デフォルトの名無しさん:2006/12/21(木) 23:47:33
ノータ… いえ、なんでもないです
71デフォルトの名無しさん:2006/12/22(金) 00:07:59
クリスマスイブまで あと 2 日
72デフォルトの名無しさん:2006/12/22(金) 01:12:29
プロパティ書いてると時々auto型を返せたらいいなと思う。
パパッとかけて良い。

時々ね。実際は要らん。混乱のもと。
73デフォルトの名無しさん:2006/12/22(金) 07:49:22
プロパティなんて適当にtemplate使えばヨクネ?
template getter(alias T){final typeof(T) getter(){return T;}}
template setter(alias T){final typeof(T) setter(typeof(T)value){return T=value;}}
template property_(alias T){alias getter!(T) v;alias setter!(T) v;}
template property(alias T){alias property_!(T).v property;}
struct Point{
    int x_,y_;
    alias property!(x_) x;
    alias property!(y_) y;
}
void main(){
    Point v;
    v.x=100;
    v.y=120;
    printf("%d %d\n",v.x,v.y);
}
74デフォルトの名無しさん:2006/12/22(金) 09:56:49
>>73
Dはメンバ関数をプロパティ形式で呼び出せるからそんなことする必要ないんじゃ?

そういう話じゃなくて、
 auto Klass hoge(){
  return Klass.new;
 }
ってメンバ関数を定義したいという話じゃないかと思った。
用途は知らないけど。
75デフォルトの名無しさん:2006/12/22(金) 14:38:35
>>73
それは素直にメンバをpublicにすればいいんじゃないか……?
ご丁寧にfinalまでつけてるし。

オブジェクトはできるだけimmutableに、
副作用を避けるプログラミングを心がける俺。
76デフォルトの名無しさん:2006/12/22(金) 14:48:33
あ、getterだけ欲しい場合とかは使えるかも。

ところで>>74のKlass.newなんて書き方は通るの?
77デフォルトの名無しさん:2006/12/22(金) 16:34:24
>>72
軽いゲッタの時に時々ね

class AAA {
auto i(){ return(i_ + 2); }
private int i_;
}
78デフォルトの名無しさん:2006/12/22(金) 16:41:37
>>76
違う言語と間違えた。

>>77
ああー、型推論のことか。
RAIIがautoじゃなくてscopeになったの忘れてた。
字面的にはstaticとかとややこしいことになりそうね。
79デフォルトの名無しさん:2006/12/22(金) 16:46:19
>>78 そうか?
80デフォルトの名無しさん:2006/12/22(金) 19:34:33
autoがダブってるよりは数倍マシかと。
それにしても、都合よくscopeって予約語があったのはよかったなって感じ。
81デフォルトの名無しさん:2006/12/22(金) 20:20:00
あれはひどかった
82デフォルトの名無しさん:2006/12/22(金) 21:07:07
autoじゃなくてstatic指定のときも型推論されるんだろうから、
そのへんは別にややこしいところじゃないな。

ソースの見通しが悪くなるのが難点だけど、それは>72のとおり最初から
承知の上で、>77のような用途に限れば大した問題にならないから
「あったらいいな」と思うことはあるね、という話か。ようやく分かった。
83デフォルトの名無しさん:2006/12/23(土) 00:31:58
オペレータオーバーロード+templateを使ってるときにも欲しくなるわな。
でも以下が通ってないので面倒げ。戻り値の段階で引数を定義すればいいだろうけど。
typeof(i+10) test(int i){
  return i+10;
}
func.cのFuncDeclarationのsemantic3をsemanticの手前の方でも行うようにすればよさげ?
84デフォルトの名無しさん:2006/12/23(土) 05:32:23
# 俺も未だにauto->scopeの変更に頭が付いていかなくて困る。

>>72で"auto/自動的"に決定されるべきなのはメンバ変数の方じゃないか?
インターフェースであるプロパティの戻り値が、内部実装である_iの型に依存してちゃ、
クラスの利用者が困る。

要は、「プロパティ」と「その実体のメンバ変数」の間で
コードの重複を強要される、ってのが問題なんじゃないだろーか。
>>77だと、intの重複は消えたけど"i"と"i_"がまだ意味的に重複してる。
さらにgetterとsetterの間も同じ重複の問題が。

やっぱC#みたく真面目に「プロパティ」って論理単位をサポートすべきなんじゃないかなぁ。
んで、実体の変数なんていっそプロパティ内の暗黙変数にしちゃったらどうだろう。

class Point{
 var int x{ // プロパティ宣言。var修飾子により、内部では暗黙の変数varが使える
  get{ return var; }
  set{ var = value; }
 }
 var int y{ get; set; } // 余計な事しないならこれだけでもいいかも

 real distance{ // var修飾子がないので、コンパイラはvar変数を生成しない
  get{ return sqrt(x * x + y * y); }
 }
 private SomeObject inner; // プロパティが必要ないメンバも当然あるでしょう
}

とか。キーワード増やしすぎだけど。

プロパティが呼び出し側の書式の問題に過ぎないってのは、
いずれリファクタリングブラウザなんかが出てきた時とかにも困る気がする。
85デフォルトの名無しさん:2006/12/23(土) 11:34:28
>>84
その案だと、_iがvarに変わってわかりにくくなった気がする。
varだけでなくget,setという言葉も特別扱いせにゃならなくなって、
(もとの定義文にあった、)名前の共通からなる見通しのよさがスポイルされると思う。
あとどうやってクラス内部から実体にアクセスするの、とか。

> 要は、「プロパティ」と「その実体のメンバ変数」の間で
> コードの重複を強要される、ってのが問題なんじゃないだろーか。
そもそもは、
 ・フィールドxをプロパティxへと書き換えるときに備えて
  いちいちgetter/setter定義しておくのは無駄だし面倒
 ・フィールドxをプロパティxへと書き換えるときに、インターフェイスが
  変わらないようにしておけば、内部実装だけ書き換えれば済む
という経緯で現在に至るんだろうから、今度は内部実装の書き換えを
最小限にすることが正当進化じゃないかなと。

そこで、プロパティ実装後もクラス内部では依然として以前の名前で実体の変数に
アクセスできるなら、プロパティ経由でアクセスするように変える内部実装だけ
書き換えれば済む。
そのためには、要は外側からのインターフェイスだけ保存されればいいんだから、
アクセス権限に応じて異なるインターフェイスを定義できるようにできればいいと思う。
いまのprivateとかpublicとかだと、
 「publicからはこのインターフェイス、privateではこのインターフェイス」
といった風には定義できない(と思う)。
86デフォルトの名無しさん:2006/12/24(日) 15:30:55
D 0.178
87デフォルトの名無しさん:2006/12/24(日) 16:12:28
D 0.178
Dec 23, 2006
New/Changed Features

* Implemented Named Return Value Optimization
* If the first element of an array literal is a static array, it is converted to a dynamic array.
* Empty ; no longer allowed after conditional statements, see Bugzilla 576.
88デフォルトの名無しさん:2006/12/24(日) 19:05:47
おお、
char[][] names = ["alice", "bob", "carol"];
は書けるようになっている。
でも最初の要素を変に特別扱いするのは相変わらず……。

class Animal{}
class Dog : Animal{}
class Cat : Animal{}
Animal[] animals = [new Cat(), new Dog()]; // コンパイル通らない

ちゃんと配列リテラルの型を明示的に宣言できて、
型を省略した場合は”全要素の最大公約数な型”にするとかして欲しいなぁ。


あと、
unittest{ abstract class A{} }
がコンパイル通らないのはいいんだろうか。
89デフォルトの名無しさん:2006/12/24(日) 19:21:41
>>88
だわな。Walterたん、アドホックな対応好きだから。DMDが早いのもそのせい(おかげ?)。

>unittest{ abstract class A{} }
非staticなネストクラスにabstractか。多分バグ。
90デフォルトの名無しさん:2006/12/24(日) 22:25:25
wchar[][] w= [['A'], ['B','\u7000']]; // error
wchar[][] w= [cast(wchar[])['A'], [cast(wchar)'B','\u7000']]; //OK

あいかわらずwcharの肩身が狭い・・・
91デフォルトの名無しさん:2006/12/25(月) 05:03:55
どっちも静的コンストラクタ付きでモジュールの相互依存した時の「実行時エラー」てどうなの。
どっちかっつーとコンパイル時が欲しい。
92デフォルトの名無しさん:2006/12/25(月) 05:22:16
bit型かbool型を非推奨にするか削除するかもしたほうがいいんでない?
全く同じ方が二つあるのはめんどいだけだ
93デフォルトの名無しさん:2006/12/25(月) 11:51:24
>>92
その議論は3000年前に通過しているッ!
94デフォルトの名無しさん:2006/12/25(月) 13:57:49
0.148で廃止されて基本データ型のドキュメントにも載ってない話を一体どこから。

うおっ、phobosにalias定義がまぶしっ。こんなんあったのか。
95デフォルトの名無しさん:2006/12/25(月) 22:46:40
ふと思った。

bit b = true;
ってなんかおかしくね?
96デフォルトの名無しさん:2006/12/26(火) 00:17:58
現状の「違う物なんだったら違うんだー」って方向だったら
bool b = true; // or false
じゃあなくて
bit b = 1; // or 0
こうじゃないの
97デフォルトの名無しさん:2006/12/26(火) 00:23:04
あ,しまった
true != 0
false == 0
ってことか
98デフォルトの名無しさん:2006/12/26(火) 00:25:00
ってあってるじゃん( ゚д゚ ) ほげー
すまそ
99デフォルトの名無しさん:2006/12/26(火) 02:10:40
なにをいっているのかね
100デフォルトの名無しさん:2006/12/26(火) 02:42:39
スーパークラスのメソッドをサブクラスでオーバーロードすると、
サブクラスのオブジェクトからスーパクラスの元メソッドが
呼べなくなるのはイタクね?(コンパイルエラーデチャウヨ・・)

あとpackageがまともに動かんのもイタイ・・・
 package abstractなメソッドが使えんし・・orz
101デフォルトの名無しさん:2006/12/26(火) 02:52:55
>>100
alias SuperClass.method method; ?
102デフォルトの名無しさん:2006/12/26(火) 02:55:04
>>100
>スーパークラスのメソッドをサブクラスでオーバーロードすると、 
>サブクラスのオブジェクトからスーパクラスの元メソッドが 
>呼べなくなるのはイタクね?(コンパイルエラーデチャウヨ・・) 
ふつうに出来るわけだが。

class Hoge{void foo(){printf("Hoge\n");}}
class Huga : Hoge{void foo(){Hoge.foo();printf("Huga\n");}}
void main(){
    auto x = new Huga;
    x.foo();
    x.Hoge.foo();
}
103100:2006/12/26(火) 03:31:00
コード貼った方がよかった。スマソ

class A{
 void func(int a){}
}

class B : public A{
void func(int[] a){}
}

int main()
{
 B b= new B();

 b.func([1]);
 b.func(1);//function main.B.func (int[]) does not match parameter types (int)

 return 0;
}
104デフォルトの名無しさん:2006/12/26(火) 03:34:55
105100:2006/12/26(火) 03:35:45
>>102
書き込んでから気付いたけど、一応
b.func(1);

b.A.func(1);
にすると通るね。この書式、知らんかった。ありがとう。
106100:2006/12/26(火) 03:39:47
たびたびスマソ。
>>101でもイケました。
>>101,>>104ありがとです。
107デフォルトの名無しさん:2006/12/26(火) 04:06:58
なんていうか それ隠蔽
108デフォルトの名無しさん:2006/12/26(火) 11:22:35
へー。俺もこれ知らなかった。覚えておこう……。

ついでに「共変の戻り値」なる言語仕様があることに最近気づいた。
しかもJava5にもあったなんて、全く気づいてなかったし……。
109デフォルトの名無しさん:2006/12/26(火) 11:51:34
共変の戻り値はC++にもあるよね
110デフォルトの名無しさん:2006/12/26(火) 17:51:45
なるほどあれか。VC6のインテリセンスがしょぼかったから
x.func();の代わりによくx.A::まで書いてfunc();をリストさせてたお
111デフォルトの名無しさん:2006/12/27(水) 09:26:17
Boxに入っている数値に演算をしたいけど馬鹿正直にunboxableな奴を調べて足すコードだとかなりでかくなるよね・・・
テンプレート使えるかな?
112デフォルトの名無しさん:2006/12/28(木) 02:47:30
こゆこと?
void add(T)(inout Box b, T x){
 if ( .unboxable!(T)(b) ) b= .box( .unbox!(T)(b) + x );
}
なんか違う気もするが・・
113デフォルトの名無しさん:2006/12/28(木) 12:30:25
>>112
そんな感じなんだけど必要に応じてキャストも入れてるからややこしくなってる。
とりあえずmixin二つとテンプレート一つでなんとかやってるけど
114デフォルトの名無しさん:2006/12/28(木) 14:20:49
import std.boxer;
import std.typetuple;
alias TypeTuple!(int,uint,long,ulong,real,creal) typelist;
Box BinExp(alias F,alias t=typelist)(Box a,Box b,Box default_value = Box.init){
    foreach(_1;t)if(unboxable!(_1)(a))
    foreach(_2;t)if(unboxable!(_2)(b))
        return box(F(unbox!(_1)(a) , unbox!(_2)(b)));
    return default_value;
}
typeof(T+U) plus_(T,U)(T a,U b){return a+b;}
alias BinExp!(plus_) plus;
typeof(T*U) mul_(T,U)(T a,U b){return a*b;}
alias BinExp!(mul_) mul;
void main(){
    auto x = mul(plus(box(2),box(3.2)),box(3));
    printf("%.*s\n",x.toString());
}

素直に書いたけどでかいなぁ。
というかBoxerっている? いまいち使い道わからんのだけど。
115デフォルトの名無しさん:2006/12/28(木) 14:51:33
>>114
おお、すごい。俺の頭が足りないだけだろうけど。
いっかいBoxに入って渡ってくるから必要になる。
116デフォルトの名無しさん:2006/12/28(木) 17:09:37
今、javaのコードをDに移植してるんだけど、
下記コードのような構文が旨く動いてくれず、ドン詰まっております。
import宣言は循環してるけどstatic thisに関しては循環してないと思うんだけど・・
なんか、いい手はないスかね?(長くてスマソ)
-----module1/a.d-----
module module1.a;
import module1.b;
class A{
 static const int a;
 static this(){a= 1;}
 public static int func(){ return B.b; }
}
-----module1/b.d-----
module module1.b;
import module1.a;
class B{
 static const int b;
 public static this(){ b= A.a; }
}
-----main.d-----
import std.c.stdio;
import module1.a;
int main()
{
 printf("%d\n",A.func());
 return 0;
}

>bud main
>main.exe
Error: circular initialization dependency with module a
117デフォルトの名無しさん:2006/12/28(木) 17:21:22
>>116
相互import時、static thisが複数あると順序がどーのこーのという理由でエラーになるようになってる。
118デフォルトの名無しさん:2006/12/28(木) 17:29:07
static thisを複数持ってる時点でダメっスか・・orz
119デフォルトの名無しさん:2006/12/28(木) 17:46:27
constだったらmodule a;import b;class A{static const int a=10;static int func(){return B.b;}}、module b;import a;class B{static const int b=A.a;}ってできるけど、もっと複雑な状態?
120デフォルトの名無しさん:2006/12/28(木) 17:57:34
static const int a=1;
じゃなくて
static const int a;
static this(){a= 1;}
と書いたのは、1はコードを簡潔にするための暫定的な値で、
実際は関数で取得され、動的に決まるためです。(わかりづらくてスマソ)
したがって、static thisを複数持たざるを得ません。(多分・・)
121デフォルトの名無しさん:2006/12/29(金) 05:52:19
微妙にDのスレが減ってる気がする
まあ(良い意味で)減ってくれた方が嬉しいんだけど
たしか宿題スレってあったよね?
122デフォルトの名無しさん:2006/12/29(金) 06:35:48
ねえねえ opPos ってなんの役に立つの?
まじで知りたい。
123デフォルトの名無しさん:2006/12/29(金) 10:00:07
a-b=a+-b
124デフォルトの名無しさん:2006/12/29(金) 12:03:32
>>122
opなし=絶対値
opPos = 差分
みたいな変な記述法があると便利な場合
125デフォルトの名無しさん:2006/12/29(金) 12:08:14
>>122
ETで正規表現作りたいときに役に立つ。
126デフォルトの名無しさん:2006/12/30(土) 00:16:31
D 1.0まで後二日
何時ごろ公開されるんだろ
127デフォルトの名無しさん:2006/12/30(土) 13:22:11
時差があるから、1/2 になるかもね。
128デフォルトの名無しさん:2006/12/31(日) 06:45:37
鯖変わっててビビった

ところで
小数に通常realを使えって事は整数にも通常longを使えって事でいい?
129デフォルトの名無しさん:2006/12/31(日) 15:48:55
小数にrealを常用する理由はあるけど、
longを常用する理由はなんかあったっけ?


0.177の変更点の和訳、wikiも日本語リファレンスも
 > 値vから構造体Sへのキャストを S(v) と書けるようにしました
 > 値vから構造体Sを初期化するのを S(v) と書けるようにしました
という感じの文になってるんだけど、コンパイラがそう書き直すようになった、
という変更じゃなくて、和訳の文面通り、プログラマーがそう書けるようになった、
という変更なの?
プログラマは前からそう書いてたんじゃなかったっけ。
130デフォルトの名無しさん:2006/12/31(日) 17:04:05
>>128
realを常用する理由ってのはどうせ速度差大して無いから精度いい方を使っとけってこと?
整数の場合は計算精度は変わらないんだから、オーバーフローしないならintでいいんじゃないの?
……ってなんかすげえ当たり前のこと言ってるが。
131デフォルトの名無しさん:2006/12/31(日) 19:42:56
0.178になって通らなくなったコードがあるんだけど、
和訳もまだない上に英語分からんから本家 Change Log が読めん・・・
ゆえに原因がわからん・・・orz
132デフォルトの名無しさん:2006/12/31(日) 19:47:05
昔からfloatはdoubleより遅いって言われる原因は
OSの分解能をそれぞれの型に落とし込むときに、
floatが一番コストが掛かるからじゃないのかな。

型の精度の保障という余計なコストが支払われないrealがオススメってことかと。
133デフォルトの名無しさん:2006/12/31(日) 20:05:06
>>132
ちょっとまて、floatがdoubleより遅い具体的な環境ってどれよ?
134デフォルトの名無しさん:2006/12/31(日) 20:08:55
CでもJavaでもそうでは?
135デフォルトの名無しさん:2006/12/31(日) 20:14:40
CとかJava挙げたりOSがどうの言う時点でオワットル
136デフォルトの名無しさん:2006/12/31(日) 20:17:21
x86とでも言えばいいの?実際遅いだろ
137デフォルトの名無しさん:2006/12/31(日) 20:44:23
だからベンチマークなりなんなり具体事例あげてくれないか?>136

138デフォルトの名無しさん:2006/12/31(日) 20:44:47
>>131
 > * Implemented Named Return Value Optimization
コンパイラの戻り値がらみの(Named Return Value Optimizationって名前の)最適化
を実装したよ。(ユーザーにはあんまり関係なし)
 > * If the first element of an array literal is a static array, it is converted to a dynamic array.
配列リテラルで [[3,2],[3,1,5]] って書いても(int[][2]として)通るようになったよ。
 > * Empty ; no longer allowed after conditional statements, see Bugzilla 576.
static if(0) ; みたいな、条件文直後の空文はアウトになったよ。

3つめの変更に引っかかったのかなあ。
139デフォルトの名無しさん:2006/12/31(日) 21:00:29
double で d1 += d2 を5秒間
66792999
66309956
64364378

float で f1 += f2 を5秒間
66186868
64843398
63162083

遅いな
140デフォルトの名無しさん:2006/12/31(日) 21:10:31
えーっとそのね。

笑うところですか?
141デフォルトの名無しさん:2006/12/31(日) 21:11:46
何逃げに走ってんだか
142デフォルトの名無しさん:2006/12/31(日) 21:52:43
どうみても同じです。本当にありがとうございました。


とはいえ自分じゃまともなコードは書けそうもない。
小数点数演算以外の部分がどう影響を与えるかとかぜんぜん分からない。

import std.date;
void main(){
 int i=0; d_time t;
 float f1=0,f2=1;

 t = getUTCtime();
 while(i++ < 100_000_000) f1 += f2;
 t = getUTCtime()-t;

 printf("%d\n", cast(int)t);
}

という感じでアバウトに数回試してみたけど、
realだけ明らかに遅くなった。doubleもfloatも
680前後なのにrealだけ1400前後。
143デフォルトの名無しさん:2006/12/31(日) 22:47:06
realって10bitなんじゃね?
144 【だん吉】 【544円】 :2007/01/01(月) 00:03:08
いよいよですね…
145デフォルトの名無しさん:2007/01/01(月) 00:05:24
>>144
時差
146 【中吉】 :2007/01/01(月) 00:20:24
本当に1.0出るのか
147デフォルトの名無しさん:2007/01/01(月) 00:27:43
次の日には、1.01が出る予感
148デフォルトの名無しさん:2007/01/01(月) 00:35:40
次の日には出ないだろう。

その日だろ。
149 【大吉】 【541円】 :2007/01/01(月) 16:23:26
!omikuji !dama
150デフォルトの名無しさん:2007/01/01(月) 16:42:26
>>116

all.d
import a;
import b;

a.d
import all;
static this(){}
b.d
import all;
static this(){}
c.d
import all;
void main() {}

これで順番が解決されて大丈夫になるはず。
151デフォルトの名無しさん:2007/01/01(月) 20:18:09
-----s.d-----
import f;

void main() {
func!(int)();
func!(char[])();
}
-----f.d-----






void hoge( int i ) {}

void func( T )()
{
hoge(cast(T)1);
}
-----エラーメッセージ-----
f.d(11): Error: cannot cast int to char[]
f.d(11): function f.hoge (int) does not match parameter types (char[])
f.d(11): Error: cannot cast int to char[]
f.d(11): Error: cannot implicitly convert expression (cast(char[])1) of type cha
r[] to int
f.d(11): Error: cannot cast int to char[]
f.d(5): template instance f.func!(char[]) error instantiating  // ちょちょww


バグじゃね?
152デフォルトの名無しさん:2007/01/01(月) 20:29:32
ちなみにバグだった場合、
わたくし英語出来ませんのでどなたか本家に報告をお願い致します。
153デフォルトの名無しさん:2007/01/01(月) 20:42:00
>>151
cast(char[])1はエラー。エラーメッセージ嫁
154デフォルトの名無しさん:2007/01/01(月) 20:43:22
>>153
そんなことはわかってるんよ
エラー行嫁
155デフォルトの名無しさん:2007/01/01(月) 20:45:21
>>154
ああ、ファイル名が異なるって話ね。バグでしょ。
156デフォルトの名無しさん:2007/01/01(月) 23:08:35
整数をchar配列に変換出来る分けないだろ・・・常識的に考えて・・・
157デフォルトの名無しさん:2007/01/01(月) 23:15:58
>>156

>154-155
158デフォルトの名無しさん:2007/01/02(火) 00:05:35
まーだー?
159デフォルトの名無しさん:2007/01/02(火) 00:13:12
まさかAppleの二の舞演じる気じゃねぇだろうな。
デベッロッパ:アップルさん冬にリリースと言いましたがまだでしょうか?
アップル:ああ、冬って言うのはクパチーノに雪が降るときですからまだですね。
デベロッパ一同:ポカーン(クパチーノは雪が降るような気候じゃない)
160デフォルトの名無しさん:2007/01/02(火) 06:37:29
f.d(5):

s.d(5):
になってないのは仕様
161デフォルトの名無しさん:2007/01/02(火) 08:15:35
まじすか これは結構困るのだが
162デフォルトの名無しさん:2007/01/02(火) 14:24:47
1.0でた?
163デフォルトの名無しさん:2007/01/02(火) 14:48:21
1.0 Digital Mars
Walter Bright 2007/01/01 16:53

Here it is, and I'm not ready yet :-(
I want to fix a few more problems first.
164sage:2007/01/02(火) 17:04:05
ウォルターたん、やっぱり間に合わなかったのか
165デフォルトの名無しさん:2007/01/02(火) 17:16:03
つまらん言語増やすな
何がD言語だよ洒落のつもりか
166デフォルトの名無しさん:2007/01/02(火) 17:17:54
167デフォルトの名無しさん:2007/01/02(火) 17:24:34
>>166
ユーモアよりも愛を感じてワラタ
168デフォルトの名無しさん:2007/01/02(火) 18:24:49
>Basic、C言語、Pascal、L言語と順番に

なんでこの順番なんだ?
169デフォルトの名無しさん:2007/01/02(火) 19:45:23
BCPL
170デフォルトの名無しさん:2007/01/02(火) 19:45:25
>BCPL(Basic Combined Programming Language)に基づいてBasic、C言語、Pascal、L言語と順番に

もう少し前から読め
171デフォルトの名無しさん:2007/01/02(火) 23:14:49
>>170
それは知ってるよ
172デフォルトの名無しさん:2007/01/02(火) 23:42:57
もしかしてギャグの落ちを書かないといけない方向にむかってないか?
173デフォルトの名無しさん:2007/01/02(火) 23:46:13
落ちを書いても理解できないんじゃないか?
174デフォルトの名無しさん:2007/01/03(水) 00:18:15
プログラマーは下手なギャグが好きだからな。(確率65%)
175デフォルトの名無しさん:2007/01/03(水) 00:41:37
この2〜3日中に1.0が出るのか
それとももうきっぱり諦めてひたすらバージョンアップ再開するのか
どっちなんだ
176デフォルトの名無しさん:2007/01/03(水) 01:09:07
公開予告をしておいて当日に実行しない、この流れを俺は知っている。
177デフォルトの名無しさん:2007/01/03(水) 01:13:17
生温かく見守って逝くスレです
178デフォルトの名無しさん:2007/01/03(水) 02:02:54
焦らしプレイにも慣れたもんだ
ウォルターたんは生粋のS
間違いない
179デフォルトの名無しさん:2007/01/03(水) 03:49:57
>>328 誤爆乙
180デフォルトの名無しさん:2007/01/03(水) 07:24:59
ロングパスだなぁ。
181デフォルトの名無しさん:2007/01/03(水) 12:13:03
Ver 1.00!    !?
182デフォルトの名無しさん:2007/01/03(水) 12:17:28
バグ修正の数がハンパない
183デフォルトの名無しさん:2007/01/03(水) 13:34:50
おー来たか。
これでライブラリとか元気になるといいなあ。
184デフォルトの名無しさん:2007/01/03(水) 14:16:41
ついに1.00キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
185デフォルトの名無しさん:2007/01/03(水) 15:27:58
ん、マジで来たのか?
186デフォルトの名無しさん:2007/01/03(水) 15:38:07
187デフォルトの名無しさん:2007/01/03(水) 15:50:40
DL遅すぎ・・
サーバが非力なのか意外と人気なのか
188デフォルトの名無しさん:2007/01/03(水) 15:54:31
意外と注目は高いからな。
189デフォルトの名無しさん:2007/01/03(水) 15:54:34
>>187
/.edになってる。
190デフォルトの名無しさん:2007/01/03(水) 17:12:50
ver1としてはもう言語仕様が変わらないと思っていい?
191デフォルトの名無しさん:2007/01/03(水) 17:45:35
勉強始めようかと思うんだけどドキュメントって基本的に追いついてるとおもっていいの?
192デフォルトの名無しさん:2007/01/03(水) 18:07:17
>>190
コンパイル通らなくなるような変更はないとみんな信じたがっている。

>>191
本家和訳の話?
なら、中の人が頑張って追ってくれてるから信頼していいと思う。
193デフォルトの名無しさん:2007/01/03(水) 18:14:12
3分割DLしてるのに3つ目が固まってる(´Д`;)
194デフォルトの名無しさん:2007/01/03(水) 18:14:55
分割ダウンロードとかふざけんなよ
195デフォルトの名無しさん:2007/01/03(水) 18:15:15
>>192
俺も信じたがっているよ
でもガクブル
196デフォルトの名無しさん:2007/01/03(水) 18:16:10
皆torrent使えyo!
197デフォルトの名無しさん:2007/01/03(水) 18:16:10
>>193
ミラーから落とせよ
198デフォルトの名無しさん:2007/01/03(水) 18:20:33
ミラー

http://mrradar.dreamhosters.com/public/dmd/
http://s3.amazonaws.com/puremagic/dmd.1.00.zip?torrent
http://s3.amazonaws.com/puremagic/dmd.1.00.zip
ftp://63.99.9.206/dmd.1.00.zip

> P.S.: The MD5sum of dmd.1.00.zip is d237f95ed2c576438e0252b890e83075 in
> case you want to verify any mirrors that sprout up.
199デフォルトの名無しさん:2007/01/03(水) 18:28:08
200デフォルトの名無しさん:2007/01/03(水) 18:45:15
いま1.0落とせたんでワクワクしてall.sh走らせてみたんだが
dhry.dでいきなりコンパイルエラーがでる・・・これって既出?

dhry.d(607): function std.c.string.strcpy (char*,char*) does not match parameter types (char[30],char[29])
dhry.d(607): Error: cannot implicitly convert expression (Reg_Define) of type char[30] to char*
201デフォルトの名無しさん:2007/01/03(水) 18:56:39
>>200
D 0.177から暗黙的にchar[]からchar*に変換できなくなったんだけど、サンプルを修正しわすれたんだろうな。
202デフォルトの名無しさん:2007/01/03(水) 19:10:52
Dユーザはもうその程度のことでは 動 じ な い
203デフォルトの名無しさん:2007/01/03(水) 19:12:53
std.compiler.version_minorが古かったり

204デフォルトの名無しさん:2007/01/03(水) 19:13:47
>>202
かなしいことに・・
205デフォルトの名無しさん:2007/01/03(水) 19:18:41
>>200
dhry.dの607行目の
    strcpy(Reg_Define, "Register option not selected.");

    strcpy(Reg_Define.ptr, "Register option not selected.");
に変更すればおk
206デフォルトの名無しさん:2007/01/03(水) 19:29:16
うわい、書き込みで人大杉とか言われて困ってるうちに祭りに乗り遅れた。
おまいらはっぴーにゅーD言語。

これ以降仕様変更はおとなしくなるんだろうか。
>>88の配列の仕様とかは根本から修正して欲しい気も。
207200:2007/01/03(水) 19:52:21
>>201
>>205
サンクスコ.お陰様で試せましたよ
これは確かにコンパイルも実行速度も速くて,ヨサゲですな〜
LL感覚で使える.

ライブラリ次第だろうけど
matlabオンリーの業務シミュレーション業界に風穴を開けれるかも.
208デフォルトの名無しさん:2007/01/03(水) 20:10:38
>>199
ありがとう
本家落とせなかったから助かりました
あとmd5sumは合ってるけどなぜに167?
209デフォルトの名無しさん:2007/01/03(水) 20:31:06
アップローダーが勝手に付ける番号
210デフォルトの名無しさん:2007/01/03(水) 20:35:22
211デフォルトの名無しさん:2007/01/03(水) 20:47:06
'A'?
212デフォルトの名無しさん:2007/01/03(水) 21:56:29
>>150
116っす。
旨くいきました(all.dはpublic importにしたけど)。
ありがとうございます。

次期Dではこの辺、何とかしてもらいたい.
213デフォルトの名無しさん:2007/01/03(水) 22:17:47
Visual Studio にD言語ってありますか
214デフォルトの名無しさん:2007/01/03(水) 22:18:35
>>213
D.NETがあった気もします。
215デフォルトの名無しさん:2007/01/03(水) 22:40:53
Walter Bright先生の次回作に御期待ください
216150:2007/01/04(木) 03:30:46
>>212
解決できてよかったです。
publicつけないと駄目でしたね。すんません。
static thisの順番の解決をどうするといいの?という問題があるんですよねぇ。
static thisで他のモジュールに関係しているかどうかの検査ができれば
いいのだろうけど。それって案外、難しいわけで。
217デフォルトの名無しさん:2007/01/04(木) 05:38:56
>>213
VSpluginD - Visual Studio plugin for D Language
http://www.dsource.org/projects/vsplugind

VS2005〜用プラグイン

改行時のインデントがなんか変?なのと、
エラーメッセージの行数が1行ずれるのはご愛嬌。

作者、日本人っぽいから、見てたら直してくれないかなぁ
218デフォルトの名無しさん:2007/01/04(木) 09:52:52
すみません。インストールの仕方について教えてください。
以前のバージョンでD言語入門の本か何かで
/dmd 以下に /dm 内の /bin や /lib を移動してしまう
(つまり mv /dm/* /dmd/)
みたいな方法があったのですが、今も変わってないですか?

219デフォルトの名無しさん:2007/01/04(木) 13:58:56
>>207
コンパイルは早いけど正規表現が遅いからLLの代替にはならない気がする。
220デフォルトの名無しさん:2007/01/04(木) 14:15:32
>>218
dmcに入ってるdmフォルダをdmdに入ってるdmフォルダに上書き
221デフォルトの名無しさん:2007/01/04(木) 14:47:59
そいやしばらく前のバージョンから、
dmd/binの中に"dmd"て名前のELFバイナリが入ってて
cygwinからdmdと打ち込むと”実行できないバイナリ”とか言われてメドイ。
ウチだけ?
222デフォルトの名無しさん:2007/01/04(木) 15:04:39
>>221
それLinux用のバイナリ
223デフォルトの名無しさん:2007/01/04(木) 16:23:40
cygwinは知らんけど、exeを特別扱いしてくれないから"dmd"を実行しようとしてくれちゃうって話かな?
多分"dmd"を削除すればいいんだろうけどバージョン上げる度に消すのはたしかにメドイ。
224デフォルトの名無しさん:2007/01/04(木) 16:27:53
解凍したディレクトリにはパスを通さず、パスが通っているところにdmd.exeのシンボリックリンク作成とかでどうだろう?
225デフォルトの名無しさん:2007/01/04(木) 16:42:38
chmod 000 dmd
226デフォルトの名無しさん:2007/01/04(木) 17:45:54
GDC 0.21
ttp://sourceforge.net/project/showfiles.php?group_id=154306

* Updated to DMD 1.00
* Fixed Bugzilla 695, 696, 737, 738, 739, 742, 743, 745
* Implemented GCC extended assembler
* Implemented basic support for GCC attributes
227デフォルトの名無しさん:2007/01/04(木) 18:13:20
DLF
TreeNodeもMenuも日本語化ける〜
Tabは、直ってるのに
228デフォルトの名無しさん:2007/01/04(木) 19:04:59
>>227
DFL forum
ttp://dsource.org/forums/viewforum.php?f=39
に書き込んみては?
229デフォルトの名無しさん:2007/01/04(木) 20:11:15
プログラミング言語"D"、待望のバージョン1.0登場
http://journal.mycom.co.jp/news/2007/01/04/361.html
230デフォルトの名無しさん:2007/01/04(木) 20:31:48
>>219
よくわからんけど、正規表現の実装自体が悪いんじゃなくて
正規表現オブジェクトを毎回生成してたりするんじゃないの?
231デフォルトの名無しさん:2007/01/04(木) 20:39:19
Dを非x86のLinuxで動かす方法ってないの?
232デフォルトの名無しさん:2007/01/04(木) 20:42:30
>>231
GDC
233デフォルトの名無しさん:2007/01/05(金) 00:10:01
>>227
DFLは使っているWinAPIがワイドキャラ系とアスキー系まじりまくり
234デフォルトの名無しさん:2007/01/05(金) 01:30:51
>>229
ν速のDスレは結構伸びてた
以外にν速民ってD知ってたんだな
235デフォルトの名無しさん:2007/01/05(金) 02:12:22
このスレを見ている人はこんなスレも見ています。(ver 0.20)
w3m その7 [UNIX]
山本直樹 レッド Red 1969〜1972 [漫画]
【300P】ドリームブッククラブ!【出版化】 [創作文芸]
【Ogg Vorbis】iPodにROCKbox【ギャップレス】 [ポータブルAV]
過去ログ [Web制作]
236デフォルトの名無しさん:2007/01/05(金) 06:40:52
>>230
ファイル読み込みループの外で正規表現クラスを生成したり
GCを切ったりしてみたけど、やっぱ、Perlよりも遅い・・・
BufferdFileをreadLineしてるのがいかんのかなぁ?

auto file = new BufferdFile("sample.txt");
while(!file.eof){
  char[] line = file.readLine();
以下、行単位の正規表現

行単位でなくサイズ単位で処理した方が良いんだろうね、きっと。
237デフォルトの名無しさん:2007/01/05(金) 07:17:44
やたらと長い文字列を正規表現に渡すとかなり遅いから困る。
238デフォルトの名無しさん:2007/01/05(金) 10:44:00
>>233
見てみた、ほとんどA系しかないな
これは、使えないなぁ
239sage:2007/01/05(金) 11:59:28
とりあえずtoUnicode/toAnsi使うだけじゃだめ?
そんなのなかったっけ
240デフォルトの名無しさん:2007/01/05(金) 12:26:51
>>229
GCについて触れて欲しい所だなぁと思ったり。


そいやみんな、どんな機能に惹かれてDに手を出してる?

GC + 強い型付け + ネイティブコード生成の共存が俺のツボ。
241デフォルトの名無しさん:2007/01/05(金) 12:30:21
>>239
こんな感じでいけるけど
std.string.toString(std.windows.charset.toMBSz("ほげ"));

面倒
242デフォルトの名無しさん:2007/01/05(金) 13:16:05
>>240
最初C++出来なかったからDに手を出した。
243デフォルトの名無しさん:2007/01/05(金) 13:58:22
コンパイルが速い。
244デフォルトの名無しさん:2007/01/05(金) 13:59:50
dsource.orgは、
4invalid UTF-8 sequence
ばっかりじゃー

折角のUTF-8なのに
245デフォルトの名無しさん:2007/01/05(金) 14:36:14
結局GUIライブラリはどれがいいのよ?
246デフォルトの名無しさん:2007/01/05(金) 16:21:19
>>240
似たような理由。
研究職でプログラムが必須技能だが、専業プログラマがいない。
ネイティブコード生成が必要な場合、C/C++だと初心者が配列で詰まりコードの保守性が悪かったのだが、
Dを試験的に使ってみると結構保守性が高いことがわかった。
あとは機材で検証して確実性が保障できれば万々歳。
247デフォルトの名無しさん:2007/01/05(金) 16:45:57
正直、いけてるGUIライブラリはまだないと思う。
DWTが一番標準に近い扱いをされているだけで、
Dをフルに使い切るようなものではないよね。

オレのつぼはC++を置き換えられてさらに上回れるところ。
強力なコンパイルタイムプログラミングと高速なコンパイルは
STL/Boost以降のプログラミングスタイルには必須だと思うから。
248デフォルトの名無しさん:2007/01/05(金) 16:51:46
DFLとDWTしか触ってないんだが他によさげなのってある?
249デフォルトの名無しさん:2007/01/05(金) 16:58:02
wxDとか
250デフォルトの名無しさん:2007/01/05(金) 18:34:58
>>248
DWTは、日本語いけた
251デフォルトの名無しさん:2007/01/05(金) 18:46:09
初めて真剣に仕様見た。けっこう面白そうだなぁ。
C++で書いた俺Lispでも移植してみようかなw
252デフォルトの名無しさん:2007/01/05(金) 20:01:42
DからPostgresを使おうと思うんだが、ライブラリはどれがいいか教えてくれないか?
というか、2004年くらいから更新されてなかったりして、使うのが怖いんだが。。。
253デフォルトの名無しさん:2007/01/05(金) 20:05:37
>>241
バージョンアップごとにW系が増えてきてるから
バージョンアップ→4invalid UTF-8 sequence→修正みたいなことになった
全部Wになってくれるとよくなると思う

>>250
大体はいけてるけどStyledTextがダメだったと思う
DWTはJavaのStringをDのchar[]に置換しているから
lenghプロパティで文字を数えている部分で日本語がずれる
254デフォルトの名無しさん:2007/01/05(金) 20:10:32
>>252
古いとコンパイルできなかったりするからな
面倒でなければlibpqを直接使うか自分でDクラス作ったほうがいいんじゃない
そしてそれをD言語版のCPANに(ry
255デフォルトの名無しさん:2007/01/05(金) 20:22:19
>> 254
ありがと。やっぱ作るしかないか。。。
libpqを使うってことはC関数を持ってくるってことだよなあ。
その辺まだ使ったことないんで調べてみる。
256デフォルトの名無しさん:2007/01/05(金) 20:44:25
改めて言語仕様(日本語訳)を眺めていたが、

"Great, just what I need.. another D in programming." -- Segfault
anotherでないDって何?既出なのかしら

FAQ日本語訳でTypo
Q. DのIDEはどこで入手できますか?
A. Try Elephant, Poseidon, LEDS などがあります。
Tryを消し忘れとる。些細なことで申し訳ない。


日本語コミュニティがこれだけ充実してる理由ってなぜなんしょ。
257デフォルトの名無しさん:2007/01/05(金) 20:53:35
>>256
正直やねう。
258デフォルトの名無しさん:2007/01/05(金) 21:06:52
と見せかけて実はk.inaba
259デフォルトの名無しさん:2007/01/05(金) 21:08:22
俺は>>258

boostもそうだった。
260デフォルトの名無しさん:2007/01/05(金) 21:18:15
やねうは癌
261デフォルトの名無しさん:2007/01/05(金) 21:19:16
やねうは癌
262257:2007/01/05(金) 21:20:41
>>258-260
俺もDmemoのほうが先だったけど、どうもやねう辺りから急激に増えた気がする。
だからゲーム用ライブラリがやたら充実してるわけで。

やねうが癌だってのは同意
263デフォルトの名無しさん:2007/01/05(金) 21:46:19
ゲームはABAとかshinhとかそっち方面からだと思う。
いまも活動してるし。

俺はドラフト読んだよスレで初めて知った。

>>256
http://shinh.skr.jp/m/?date=20061204#p17
と、その下のコメント欄にそのへんの話が書いてあった。
 > なんか US だと ABCDF と、 D は日本で言う C とか可なので、
 > プログラミングの単位不可じゃなくてよかたーという
というようなことらしいそうな。
264デフォルトの名無しさん:2007/01/05(金) 22:36:25
>>255
基本的にDはCの関数を直接扱える
言語仕様のCとのインターフェイスってところ参照
265デフォルトの名無しさん:2007/01/05(金) 22:40:30
>>257
俺もやねうのglExcessでDの存在を知った
感謝しているのはk.inabaの人
266デフォルトの名無しさん:2007/01/05(金) 23:31:38
>>263
なる。Segfault本人に聞かないとまだわからん、みたいなところはあるけど。
駄洒落やらレトリックの類の訳出は相当悩むらしいので致し方ないところか。


Matrixなどテンプレートで書くべきクラスで、テンプレートを知らない初心者に使わせる場合に
シンタックスシュガーが欲しいときがあるのだが、擬似的に解決するトリックがあればなあと思う日々。

class Matrix(T = real) {}

// 基底クラス的用法、Matrix!()でもMatrix!(creal)でも通したい
void write(Matrix m) {}

// MatrixでMatrix!()とみなしたい
class Hoge {
 Matrix m;
}
267デフォルトの名無しさん:2007/01/06(土) 00:38:12
名前を変えてもいいのなら、aliasしておくとか。
268デフォルトの名無しさん:2007/01/06(土) 03:02:03
1.0が出たのを知って、試してみようとしているんだが、
Win32APIのA系とW系の扱いってDだとどうなってるの?
269デフォルトの名無しさん:2007/01/06(土) 04:09:15
void write(Matrix m) {}
は Matrixのstaticメソッドにするか
それ自体を関数テンプレートにするべきじゃないかなあ
とりあえず Matrixが増えるんだからwriteも増えないとね
270デフォルトの名無しさん:2007/01/06(土) 06:25:14
STL/Boostに辟易してるのでDに乗り換えようかとマジで思ってる
271デフォルトの名無しさん:2007/01/06(土) 07:17:30
>>266

template IsMatrix(T)
{
  static if( is(T U : Matrix!(U)) )
    const bool IsMatrix = true;
  else
    const bool IsMatrix = false;
}

void write(T)(T m) {
  static assert( IsMatrix!(T) )
  ...
}
272デフォルトの名無しさん:2007/01/06(土) 07:18:04
>>268
標準のstd.c.windows.windowsはAPIにWとかAとかつけないと呼び出せない。

dsource.org(>>1)のBindingsに入ってるやつが前スレ辺りで推奨されてた。
そっちはAPI名でエイリアスされててコンパイルスイッチで切り替えられたと思う。

A系に文字列を渡す時はstd.windows.charsetのtoMBSz使う。
W系にはwcharをそのまま渡して大丈夫。
273デフォルトの名無しさん:2007/01/06(土) 09:10:13
>>269 >271
誤解させて申し訳ない
↓みたくテンプレートクラスを引数とする関数はテンプレート関数にするってのはC++時代からの定石だということは承知しているんですが
class Matrix(T) {}
void write(T)(Matrix!(T) m) {}
なんとか初心者がテンプレートを知らずに書けるシンタックスシュガーができんものかと思いまして。
冷静に考えたら、MatrixのpublicメンバにTを引数ないし返値の型とするメソッドがあると、
基底クラス的な存在は作れませんですね。失礼しました。
274デフォルトの名無しさん:2007/01/06(土) 09:30:35
テンプレートも知らない初心者がDを使うこと を想定することに尊敬します。
275デフォルトの名無しさん:2007/01/06(土) 09:41:01
LabViewとかMatlabしか使ったことのない人にC++使わせてますorz
しかもリモートで。サポートを要求する電話がかかってくるし……
276デフォルトの名無しさん:2007/01/06(土) 10:51:52
クラスのサイズって得られなかったっけ?
構造体のsizeof的なことをしたいです。
クラスのsizeofは4だったでしょ
ていうかそれが4である必要とかあるのかな
277デフォルトの名無しさん:2007/01/06(土) 11:52:49
そして、クラスのサイズが得る、ありますか?
構造のsizeofのことをしたいと思います。
そしてクラスのSizeofが4歳である。
必要があります…、4、それ?
278デフォルトの名無しさん:2007/01/06(土) 12:35:33
classinfoになかったっけ
279デフォルトの名無しさん:2007/01/06(土) 14:03:56
classinfo.init.lengthで取得できる。
……ってことでいいのか? 知らなかった。
280デフォルトの名無しさん:2007/01/06(土) 14:05:13
>>276
http://www.kmonos.net/alang/d/property.html
.sizeofプロパティでええんかな。


やっぱりC++からの転向が多いな。と言いつつ俺もJava行く前はC++だったけど。
GCと構造化例外があると、関数の引数と戻り値が
メモリサイズやエラーコードに乗っ取られずに済むから
コードがずっと綺麗になるのが嬉しい。
281デフォルトの名無しさん:2007/01/06(土) 14:55:36
>>278-279
うおお
そうか 基本仕様を調べたい時は object も見た方が良いのか・・・。

サンクス
282デフォルトの名無しさん:2007/01/06(土) 15:26:31
C/C++の返値からエラー調べるのは正直ウザい
283デフォルトの名無しさん:2007/01/06(土) 15:42:43
個人的に、C/C++はプリプロセッサが面倒なんだよなぁ。
GCとか例外とかコンパイル速度とかも含めて、総合的にDは楽だと思う。

どの言語が最強かとかは知らん。Dが大好きだ。
284デフォルトの名無しさん:2007/01/06(土) 18:04:11
連想配列リテラルが欲しいなぁ。

struct/union の初期化のアレと同じで良いんじゃないかな。
あ でもそうすると型推論できなくなっちゃうか。
285デフォルトの名無しさん:2007/01/07(日) 02:29:21
そーいえば無いな連想配列リテラル。うんそのうちきっと欲しくなる。


ところで、こんな記述が通るのは仕様って事でいいんだろうか。

class A{
 static char[] typeID();
}
class B : A{
 static char[] typeID(){ return "b"; }
}

BのtypeIDが無いとコンパイルエラーになるかと思ったら、
コンパイラは素通りしてリンカでエラーになるってのが微妙に不安。
static abstract的な事が出来るので、ちゃんとした仕様だととても嬉しいのだけど。

というか本当はAのtypeIDにabstract付けたい。
286デフォルトの名無しさん:2007/01/07(日) 05:48:57
wxとかswtとかいいから、Qt移植しろ
287デフォルトの名無しさん:2007/01/07(日) 08:06:28
>>286
> Qt移植しろ
あー、Qt欲しいねぇ。
288デフォルトの名無しさん:2007/01/07(日) 09:04:31
>>272
> dsource.org(>>1)のBindingsに入ってるやつ

実体は↓でいいんかな?
http://www.prowiki.org/wiki4d/wiki.cgi?WindowsAPI

wcharの文字列操作関数って自分で用意しないといけないのかな?
日本語文字列はどの形式で扱うのが一般的?
289デフォルトの名無しさん:2007/01/07(日) 09:27:22
D.NET とか無理なの?
290デフォルトの名無しさん:2007/01/07(日) 09:27:39
コンパイル時にインポートするモジュール全部書くの面倒なんだけどなんとかならない?
291デフォルトの名無しさん:2007/01/07(日) 09:58:52
全部インポートすれば?
それか「全部インポートするモジュール」をインポートすれば?
292デフォルトの名無しさん:2007/01/07(日) 11:04:47
コマンドプロンプトでdmdするときの話じゃないのか?
293デフォルトの名無しさん:2007/01/07(日) 11:21:26
あ。 じゃbuildでもどうぞ
http://dsource.org/projects/build
294デフォルトの名無しさん:2007/01/07(日) 11:37:03
295デフォルトの名無しさん:2007/01/07(日) 18:43:52
Dの注目度は着実に上がっているのに日本じゃさっぱりだな
http://www.tiobe.com/tpci.htm
296デフォルトの名無しさん:2007/01/07(日) 18:46:01
いまひとつインパクトに欠けるんだよな。
ぷらぷらから乗り換えるとして具体的にどういうメリットがあるんかな。
297デフォルトの名無しさん:2007/01/07(日) 19:00:58
C++ がブレイクした大きな理由のひとつは C のソースコードがほぼそのまんまで
コンパイルが通るから C++ の機能の一部をツマミ食いしてベターCとして使えたことだけど、
D って確か、C++ のソースコードはコンパイル通してくれないんだよねぇ?
C のソースコードでもダメなんだっけ?
とにかくそんなんじゃちょっとやそっとのメリットがあってもブレイクするのは厳しい。
298デフォルトの名無しさん:2007/01/07(日) 19:08:22
その理屈だとC/C++互換の言語以外は流行らないということになるが
299デフォルトの名無しさん:2007/01/07(日) 19:10:33
>>297-298
Javaがそこそこ使われるようになるまで10年かかった
300デフォルトの名無しさん:2007/01/07(日) 19:15:11
>>298
まったく異なる言語ならともかく、C++のソックリさんで
メリットどころか用途的にはC++より狭い範囲でしか使えない。
その点、C++ の劣化コピーとはいえ、Java は環境を問わずに
使えるという大きなメリットを持っていた。

戦術・戦略で例えると D は戦術に長けているけど戦略的にはダメダメで、
Java は戦術的には超ヘタレだけど、戦略的に勝利を納めたとでもいったところ。
301デフォルトの名無しさん:2007/01/07(日) 19:22:43
dmd
DaMeDa
302デフォルトの名無しさん:2007/01/07(日) 21:01:16
>>299
なに言ってんだ? Java のバージョン1.0がリリースされた時には既にブレイクしていたぞ。
303デフォルトの名無しさん:2007/01/07(日) 23:02:22
よく読むとどちらも矛盾してない
最初のブレイク、爆発力がそこそこ普及するために必要なのかどうかだな
開発が長かったからじわじわとしか普及せんのだろう
304デフォルトの名無しさん:2007/01/07(日) 23:04:56
なんで 1 でも 1.0 でもなくて 1.00 なんだ
305デフォルトの名無しさん:2007/01/08(月) 00:14:08
それだったら1.000にしとくほうがよかった
それとも今度こそ+0.99までには2.0に行くつもりかもしれんがw
前例があるからな
306デフォルトの名無しさん:2007/01/08(月) 00:15:48
まるでネトゲの経験値収入みたいなカウントだなあ
一匹0.005%とか
307デフォルトの名無しさん:2007/01/08(月) 04:31:09
ソートしたときにversionで並ばないのが嫌だったのかね。
とにかく、なんか気持ち悪いな
308デフォルトの名無しさん:2007/01/08(月) 05:45:27
みんないきてるかーい?
309デフォルトの名無しさん:2007/01/08(月) 08:50:01
  _  ∩
( ゚∀゚)彡 IDE!IDE!
 ⊂彡

310デフォルトの名無しさん:2007/01/08(月) 11:42:17
D.NET
VS2005EEで使えるIDE
311デフォルトの名無しさん:2007/01/08(月) 12:15:02
井出さん?
312デフォルトの名無しさん:2007/01/08(月) 13:16:01
HDDの接続規格?
313デフォルトの名無しさん:2007/01/08(月) 13:50:48
コンパイラが出力するバージョン番号はv1.0なのね。
メジャーとマイナーの番号が単純にインクリメントされるDのバージョン付けは
シンプルなので嫌いじゃないな。

ところで、可変個引数テンプレートを特殊化することって出来ない?
template Hoge(T... : Object){
みたいに。
314デフォルトの名無しさん:2007/01/09(火) 03:34:09
static if を使う

template hoge(T...){
  static if (is(T == HogeTypeTuple)){ const hoge = 1; }
  else { const hoge = 0; }
}
315デフォルトの名無しさん:2007/01/09(火) 08:32:20
これを
void func( T... )( out T p ) {
  foreach (i, v; p) {
    p[i] = 3;
  }
}
こう書きたいとは
void func( T... )( out T p ) {
  foreach (inout v; p) {
    v = 3;
  }
}
思いませんか?
316デフォルトの名無しさん:2007/01/09(火) 08:35:27
ちなみに引数はintやreal限定だとでも思ってください。
タプルを書きかえる時にforeachでiが要るのにvまで出てくるのがもったいないと思っただけです。
317デフォルトの名無しさん:2007/01/09(火) 18:49:40
1.0に対応した、iconvやjcode無いの?
318デフォルトの名無しさん:2007/01/09(火) 20:00:26
ttp://www.wikiroom.com/sakurai/?DJcode
まだ1.0未対応で、JIS未対応らしい
319デフォルトの名無しさん:2007/01/09(火) 20:42:09
ttp://www.dsource.org/projects/mango/
ICUでよければmangoから使えたと思う(release版はダメだがtrunkは1.0対応してる)
320デフォルトの名無しさん:2007/01/09(火) 22:12:18
perlの変換系を真似るなら
Jcode.pmじゃなくてEncode.pmを手本にしてほしかったな。。。

Jcode.pmをベースにすると
AppleがShiftJISを独自に拡張したMacJapaneseとか
IBM/MSがShiftJISを独自に拡張したcp932とかを
Dで処理できるようにしたいときに結局自分で全部作んなきゃいけなくなる。

Encode.pmだったら用意されている以外のコードでも、
マッピング表を組み込んで拡張する仕組みがあらかじめ用意されてて
便利だし、日本語以外のマルチバイト扱う場合もEncode.pmでいいのに。
Jcodeって名前じゃ日本語以外は取り扱いませんってことじゃん・・・。
321デフォルトの名無しさん:2007/01/09(火) 22:15:26
>>320
DEncodeはお前に任せた
322デフォルトの名無しさん:2007/01/09(火) 22:27:09
>>321
あたまにDをつける意味あるの?
Encode.dでいいんでないの?
323デフォルトの名無しさん:2007/01/10(水) 14:12:40
324デフォルトの名無しさん:2007/01/10(水) 14:42:38
>217
VSpluginD落してみたけどinnstallできない.
 Visual Studio 2005 Standard Edition or above Edition.
とか言われる.
versionはEEからTeam Suiteにupgradeしたはずのもの.

ところで補完が効くんだよね?
325デフォルトの名無しさん:2007/01/10(水) 15:53:54
>324
Editionチェック部分がバグってるので
http://svn.dsource.org/projects/vsplugind/downloads/VSpluginD_fixed.zip
インストーラはこっち使ってください。
補完は付いてるけど、Ctrl+Space押したときの、変数名,型名の補完だけなので
あまり役にはたたないかと。

>217
見逃してました、すいません。
手元のソースでは直してあるので、次出すときにはfixされてると思います。
326324:2007/01/10(水) 16:16:08
>325
作者さん?!感激しまスタ.ありがたく使わせていただきます
327デフォルトの名無しさん:2007/01/10(水) 18:50:52
ttp://hp.vector.co.jp/authors/VA031566/d_direct3d9/ の hdklib.zip が make 通らなくなってるんですけど、
他に DirectX 扱うライブラリってありましたっけ?

…… 2005/01 更新ってことは、もう二年も前なのか orz
328デフォルトの名無しさん:2007/01/10(水) 22:06:22
329デフォルトの名無しさん:2007/01/10(水) 23:25:34
>>328
おおぅ。早速試してみるか。
330デフォルトの名無しさん:2007/01/11(木) 00:29:36
gdcでは未だ試してないけど、とりあえずwinで通った。
けど、
 char [] sjis = JcodeConvert("サンプル"c, "utf8", "sjis");
 writefln(sjis);
なんてのを、やったら 4invalid UTF-8 sequenceと怒られる。(´・ω・`)
しょうがないんで、ファイル出力して確認。
331デフォルトの名無しさん:2007/01/11(木) 00:40:17
writef/ln に sjis はダメなんぢゃ?

332デフォルトの名無しさん:2007/01/11(木) 09:22:58
これが通るのにやや感動した

class Hoge {
Hoge foo(Hoge d = null){ return this; }
}

scope foo = new Hoge;
foo.foo.foo;
333デフォルトの名無しさん:2007/01/11(木) 11:50:36
>>330-331
うん、writefなんかはUTF-8のチェックをしているから
バイナリ出力ができる関数じゃないとsjisは出力できない。

import std.cstream;
char [] sjis = JcodeConvert("サンプル\n", "utf8", "sjis");
dout.writeBlock(sjis, sjis.length);

とか。
334デフォルトの名無しさん:2007/01/11(木) 11:53:27
>>304
0.9の次に0.10が出たから。
335330:2007/01/11(木) 14:51:52
>>333
暗黙のルールで、わざわざ見てるのか。
ついでに、gdmd/gdcで、テスト→通った。

LANG=ja_JP.eucJP
--
dout.writeLine(utf8_euc("漢字テスト"));

336デフォルトの名無しさん:2007/01/11(木) 15:15:30
質問です。混乱してます。

文字列は、char[] str1;で

文字列の配列は、
char[] str2[]; もしくは、char[] [] str2;

このときの、char [(a)] [(b)]は、 char[(a)] str2[(b)];
で、いいわけですか?
それとも
char [(a)] [(b)]は、 char[(b)] str2[(a)];
ですか?

337デフォルトの名無しさん:2007/01/11(木) 15:21:27
>>336
便宜上括弧を付けると
(char[])[] strarr
(char[]) strarr[]
のような感じなはず。
338デフォルトの名無しさん:2007/01/11(木) 15:27:53
char[] str[]; なんて書き方は解りづらく得はないので止めましょう。
"char[][]"で一つの型と考えるべし。
こんなのの存在意義はC/C++とのソースコード互換性だけです。
とか言ってみる。
339デフォルトの名無しさん:2007/01/11(木) 15:43:36
>>337-338
ありがとうございます。
#でも、まだ混乱中

数値型の、動的二次元配列は、int[][] i;

そうすると
文字列の動的二次元配列は、char[][][] str;
こうですか?

340デフォルトの名無しさん:2007/01/11(木) 15:46:19
>>339
yes
341336:2007/01/11(木) 16:00:21
そこで、改めて質問です。

char[][][] str;
str[0] ~= "xxx";とするとArrayBoundsError
str[0][0] = "xxx";としてもArrayBoundsError

char[][][int] str;
str[0] ~= "xxx";エラーにならない
str[0][0] = "xxx";ArrayBoundsError

そもそも、char[][][int] str;こういう宣言の仕方はありなんですか?
で、str[0][0] = "xxx";でエラーにしないためにはどうしたらいいのでしょうか?
342デフォルトの名無しさん:2007/01/11(木) 16:04:51
>>341
>ありなんですか?
あり
>どうしたら(ry
char[][int][int]
343デフォルトの名無しさん:2007/01/11(木) 16:12:51
配列の初期の長さは0だろ。
344336:2007/01/11(木) 16:14:17
>>342
感動

char[][] str;は
char[][int] str;とも書けると

なるほど、混乱から醒めました
ありがとうございました
345デフォルトの名無しさん:2007/01/11(木) 16:16:34
ちょっと待った!!
それは意味が違ってるぞ。。
346デフォルトの名無しさん:2007/01/11(木) 16:18:09
>>344
おいおい
動的配列と連想配列が分からんてスクリプト系から流れてきたんか?
347デフォルトの名無しさん:2007/01/11(木) 16:23:17
char[][][] table;
char[][] list0;
list0 ~= "foo";
list0 ~= "bar";
table ~= list0;
char[][] list1;
list1 ~= "baz";
list1 ~= "hoge";
table ~= list1

小さい次元の配列を作っては大きい次元の配列に統合していく感じで。

配列の構造が最初から分かってるならこれでも。

char[][][] table = [
 ["foo", "bar"],
 ["baz", "hoge"]
];
348336:2007/01/11(木) 16:27:37
>>346
連想配列は、int[char[]] iやつじゃなくて?
この場合、int型の動的配列で、キーが文字列の連想配列なんでしょ?

char[] strは、文字の動的配列、キーが整数
char[][] strは、文字列の動的配列で、キーが整数

間違ってる?
349336:2007/01/11(木) 16:36:56
>>347
ありがとうございます。

そうでした
>> char[][][] table = [ ["foo", "bar"], ["baz", "hoge"]];
の方法は、頭から抜けてました。

ただ、
>>小さい次元の配列を作っては大きい次元の配列に統合していく感じで。
これの方法が、なんか馴染めないというか
別な変数名を用意するのが面倒で
350デフォルトの名無しさん:2007/01/11(木) 16:46:06
連想配列は "キー"(文字列型だけでなく、整数型だろうがオブジェクト型だろうが)に関連付けられた要素を検索して返す。
動的配列は 配列の先頭からの"インデックス"の位置の要素を返す。

これじゃ解りにくいかな……。
351デフォルトの名無しさん:2007/01/11(木) 17:04:52
str[0][0] = "xxx";ArrayBoundsError
これをエラー出さないようにするには ってんだろ?
素直に書いてみた。
あとC/C++やったこと無さそうなので(適当)そういう入門とか読めばほぼDの入門にもなりそうだよ。

char[] [][] str; // 全くの空なので
str.length = 1; // メモリ確保
str[0].length = 1; // メモリ確保
str[0][0] = "string"; // 代入
printf("%.*s", str[0][0]); // 表示
352336:2007/01/11(木) 17:12:52
int[][] n;
i[0][0] = 0;NG

int[int][int] i;
i[0][0] = 0;OK
int[int][int] n;
i[1][2] = 0;OK

なんで、int[int][int]だとOKなのかが、よくわかりません
キーを指定(連想配列)にすると
メモリ確保しなくていいということですか?
353336:2007/01/11(木) 17:19:45
言い方が、間違ってました。
動的なんだから
int[] i;
i[5] = 0;
とか、出来てもいいんじゃないの?って思ってるだけです。
354デフォルトの名無しさん:2007/01/11(木) 17:27:56
>>353
リリース時も毎回長さチェックしてたら効率が悪い。
355デフォルトの名無しさん:2007/01/11(木) 17:39:33
>>354
>>336じゃないけど、そいやそういう単純な問題になるのか……。

あれ? てことは-releaseとかつけてコンパイルすると、
領域外にアクセスしてもArrayBoundsError出なかったっけ?
356デフォルトの名無しさん:2007/01/11(木) 17:51:15
>>355
出ないでSEGVる。
357デフォルトの名無しさん:2007/01/11(木) 18:32:09
小一時間苦しんだ

writef("%d %d". length, lines.length); // 0, 100
line[length] = "hoge"; // ArrayBoundsError
358デフォルトの名無しさん:2007/01/11(木) 18:32:30
>>335
printf
359デフォルトの名無しさん:2007/01/11(木) 18:35:21
>>357
配列の添字は0から…って当り前の事のような。
360デフォルトの名無しさん:2007/01/11(木) 18:40:33
writef("%d %d", len, lines.length); // 0, 100
line[len] = "hoge"; // ArrayBoundsError
だったらうまくいったと言いたかった.
361デフォルトの名無しさん:2007/01/11(木) 18:50:47
流れ豚切って悪いがPoseidonの使い勝手ってどうなの?
362デフォルトの名無しさん:2007/01/11(木) 19:24:47
http://www.kmonos.net/alang/d/arrays.html
 > 静的/動的を問わず、配列の [ ] の中では、 lengthという名前の変数が暗黙に宣言され、
 > その配列の長さがセットされます。 $ という記号を使うこともできます。
これだよな。

Dでは外側のローカル変数の名前を隠すようなローカル変数の宣言は禁止されてるおかげで
こういう目にあいにくいから、これはうっかり忘れがちな罠だね。ややややこしい。
363デフォルトの名無しさん:2007/01/11(木) 19:44:47
>>360
それ俺も昔ひかかった
添え字の中にlengthって変数があると配列のlengthプロパティが優先される
364デフォルトの名無しさん:2007/01/11(木) 21:29:54
>>361
悪くない。
暫く更新してないと思ってたんだが、探してみるとposeidon-v0.22-bin.rarってのがあるのな。
365デフォルトの名無しさん:2007/01/11(木) 22:00:15
>>364
悪くないんだ
サンクス。落としてみるわ
366デフォルトの名無しさん:2007/01/11(木) 22:02:45
……と、思ってたんだが久々に使ってみたけど、あれ、utf-8使えないんだっけ?
日本語含むコード保存したらShiftJISになってるっぽいんだが。
367デフォルトの名無しさん:2007/01/11(木) 22:37:09
>>366
別のソフトでそのファイルをUTF-8として保存してから開き直せばok。
368デフォルトの名無しさん:2007/01/11(木) 22:41:49
std.randomのアルゴリズムってなんだろ。
boost::randomの使い勝手がいいので移植してみるか。
369デフォルトの名無しさん:2007/01/11(木) 22:43:42
インスコしたはいいが使い方がいまいちワカンネ
独学の旅に出てくるわ。ノシ
370デフォルトの名無しさん:2007/01/11(木) 22:45:05
>>368
ソース見れ
371デフォルトの名無しさん:2007/01/11(木) 22:46:49
いつまでも配列の話題引っ張りたい人はこっちでどうぞ
http://pc10.2ch.net/test/read.cgi/tech/1108172110/
372デフォルトの名無しさん:2007/01/11(木) 22:59:47
>>368
線形合同法じゃないか?
373デフォルトの名無しさん:2007/01/11(木) 23:07:46
>>372
ちょっと見ただけだが多分違う。
374デフォルトの名無しさん:2007/01/11(木) 23:12:13
>372
ソース見た。線形シフトレジスタみたいな感じ。
しかしたしかに擬似乱数をスレッド安全にするのはなかなか難しいな
375デフォルトの名無しさん:2007/01/12(金) 01:16:30
とうとう1.0でたんですね。
ひさしぶりに来たものですから驚きました。
ずっとv0.1台だったので永遠にβ版だと確信してたのですが飛びましたね。
いい加減標準出力時の文字コードの問題は解決されたのですか?
376デフォルトの名無しさん:2007/01/12(金) 01:20:19
全然
377デフォルトの名無しさん:2007/01/12(金) 01:31:30
線形合同法とメルセンヌツイスターを
利用者として知っているだけのヘタレには初耳だ……。
線形シフトレジスタってどんなもんなんでしょーか。
速さとか乱数としての品質とか。
378デフォルトの名無しさん:2007/01/12(金) 01:40:39
>>377
乱数に指向性がある
379デフォルトの名無しさん:2007/01/12(金) 09:27:39
>>377
とりあえず計ってみるとだいぶ遅かった。
380デフォルトの名無しさん:2007/01/12(金) 09:44:21
何と比べたんですか?
MTですか?線形合同法ですか?
381デフォルトの名無しさん:2007/01/12(金) 10:11:39
>>380
百万回繰り返してrdtscの値の平均取っただけだけども。
aba氏のところからとってきたMTのnextInt32が95前後で標準のrandが480前後だった。
自前で実装した線形合同法が40くらい(値が小さいからMTとの差は信用できるのか微妙な気がする)。

まあMTにしたって速いとされるアルゴリズムだし参考にはならないのかもしれんが。
結構質のいい乱数というやつを吐いてくれるのかねえ?>標準のrand
382デフォルトの名無しさん:2007/01/12(金) 10:41:22
理論上の周期はアルゴリズムから求めるとして、
一様性は検定にかけるしかないかな?
MTの論文持ってきて同様の検定法にかけるしかないかなあ。
それだとMT使ったほうが楽そうだが。
383デフォルトの名無しさん:2007/01/12(金) 11:40:13

では MT を使うことにしましょう

ハイ 次のひとどうぞ


384デフォルトの名無しさん:2007/01/12(金) 11:43:01
>>383
意味わからないなら無理に参加しなくてもいいのに
385デフォルトの名無しさん:2007/01/12(金) 11:51:59
標準のrandが気に入らないからMTで実装してくれと言ってるってことは分かる

386デフォルトの名無しさん:2007/01/12(金) 12:14:34
それはかなりのエスパー能力だな。
俺には誰一人そう言っているようには見えなかった。
387デフォルトの名無しさん:2007/01/12(金) 13:02:07
388デフォルトの名無しさん:2007/01/12(金) 15:09:21
【ネット】再来週にも2ちゃんねる停止? −ZAKZAK−★10 [01/12]
http://news22.2ch.net/test/read.cgi/newsplus/1168581936/

2ch
オワタ
389デフォルトの名無しさん:2007/01/12(金) 15:23:28
24 名前:名無しさん必死だな[sage] 投稿日:2007/01/12(金) 14:10:14 ID:4nd8YOTF
2chは法人化してるからひろゆきの個人資産じゃない、
尚且つ海外サーバだから日本の法の影響は受けない。
記者がアホ過ぎて話にならんね。




よかったな おめーら

390デフォルトの名無しさん:2007/01/12(金) 15:24:49
ほう。
スレ違いではあるが、ひろゆぎの個人資産ではないのか。

よかったな おれら
391デフォルトの名無しさん:2007/01/12(金) 15:38:55
ドメインはひろゆきで登録されているな
392デフォルトの名無しさん:2007/01/12(金) 15:46:25
ドメインを強制的に金に変えさせるんだけど、
2ch運営の誰かに売り払っちゃえばドメインの
所有者が変わるだけで2chはそのまま、
というオチだそうな。
393デフォルトの名無しさん:2007/01/12(金) 15:52:11
絶対バーボンだと思ったww
394デフォルトの名無しさん:2007/01/13(土) 13:30:39
いつのまにか1.0になったんですね。
おめでとうと言いたい
395デフォルトの名無しさん:2007/01/13(土) 17:01:13
linux版のdmdだと実行ファイルが馬鹿でかいサイズになってたのは修正されましたか?
alias 0.179 1.00
とか洒落になりませんか?
396デフォルトの名無しさん:2007/01/13(土) 17:09:54
D言語の売りってなに?
397デフォルトの名無しさん:2007/01/13(土) 17:21:40
>>396
せっかくだからttp://www.kmonos.net/alang/wnd/
398デフォルトの名無しさん:2007/01/13(土) 17:29:58
作者乙
399デフォルトの名無しさん:2007/01/13(土) 17:43:20
え?Dって日本人が作ったの?
400デフォルトの名無しさん:2007/01/13(土) 17:51:41
何の作者だ
401デフォルトの名無しさん:2007/01/13(土) 17:52:44
すべての言語は韓国が起源ニダ
402名無し募集中。。。:2007/01/13(土) 18:00:03
20年以上も前の話だが、ウォルター・ブライトはデータライトC,ゾーテックC++等の処理系で絶賛された人
D言語という名前からゲテモノだと思っても、この名前を知ったら、おっ、と思う人は多いのではないか
403デフォルトの名無しさん:2007/01/13(土) 18:40:02
(´-`).。oO(おっ)
404デフォルトの名無しさん:2007/01/13(土) 18:52:48
(´-`).。oO(うっ)
405デフォルトの名無しさん:2007/01/13(土) 18:52:58
まさに、コンパイラ製作の申し子だな
406デフォルトの名無しさん:2007/01/13(土) 19:02:45
逆に Java の作者は、GPL が作成される元になった事件を起こした張本人。
お、お前か、と思う人は多いのではないか
407デフォルトの名無しさん:2007/01/13(土) 20:55:30


        (##) パカッ
     \  T  /))
      ( ´∀`)
      (    )
      | || 
      (___)__)
408デフォルトの名無しさん:2007/01/13(土) 21:35:28
いまさらだが標準randをMTにはできんでしょ
ひとつインスタンス作るのに数キロバイトいるんじゃなかったかな
線形合同法で下位ビットを使わないってのがやっぱシンプルかと。
409デフォルトの名無しさん:2007/01/13(土) 22:27:08
>>397
おお!?リニューアルされてる?
休みのうちに読んでみっかー
410デフォルトの名無しさん:2007/01/13(土) 22:29:41
>>408
1ページ以下なら別にいいんじゃね?
411デフォルトの名無しさん:2007/01/13(土) 22:36:55
MTでも線形合同法でもいいけど、
グローバルじゃなくてインスタンスごとに状態持った乱数生成器が欲しいなあ。
412デフォルトの名無しさん:2007/01/13(土) 22:42:06
>>408
boostみたいにアルゴリズムを選択できるのが理想なのかね。
選ばなくても使えるように無難なのをデフォとして用意しとく必要もあるかもだが。

MTは内部ベクトルが623だか624個だから、32ビットなら最低で2500バイトくらい?
まあ少なくとも俺が使う環境で問題になることはなさそうな気がする。
413デフォルトの名無しさん:2007/01/13(土) 22:48:22
コンパイラにDI用のリソースファイルをかませられると面白いかもね。
デフォルトは線形合同法などの汎用的なものを採用しておいて
コンパイル時に採用するライブラリを指定する。プリプロセッサよりはマシ程度?
414デフォルトの名無しさん:2007/01/14(日) 01:16:27
boost::randomいいねー
移植されないかなあ
415デフォルトの名無しさん:2007/01/14(日) 01:42:08
このスレはクレクレ厨に占領されますた
416デフォルトの名無しさん:2007/01/14(日) 01:54:19
さっきVIPでプログラミングのプの字も知らない奴にDのソースを渡してコンパイル汁つったけど大丈夫かな・・・
417デフォルトの名無しさん:2007/01/14(日) 01:56:13
DはVIP発祥だから無問題
418デフォルトの名無しさん:2007/01/14(日) 10:40:37
>>417
さすがに無茶だw
419デフォルトの名無しさん:2007/01/14(日) 11:22:15
というか何でrandomのジェネレータをアダプティブにしなかったんだろう?
標準的なシードの与え方と次の値のインターフェースだけ持っているようなクラスがあれば
何でも後付けできたような気もするんだけど(これはDに限らないんだけどさ)
420デフォルトの名無しさん:2007/01/14(日) 11:30:43
そういうのは作者に言ってくれ
421デフォルトの名無しさん:2007/01/14(日) 15:33:34
直しとく
422デフォルトの名無しさん:2007/01/14(日) 19:22:02
walterはここ読んでるしね
423デフォルトの名無しさん:2007/01/14(日) 19:25:51
誰が翻訳するんだ
424デフォルトの名無しさん:2007/01/14(日) 19:34:09
日本語はメジャー言語だよ?
425デフォルトの名無しさん:2007/01/14(日) 19:42:29
>>424
D言語と比べりゃメジャーだけど、それでもマイナーじゃね?
426デフォルトの名無しさん:2007/01/14(日) 20:07:36
>>425
使用人口が1億を超える日本語、それ以上にメジャーな言語って数えるほどしかなくね?
427デフォルトの名無しさん:2007/01/14(日) 20:09:14
http://japan.wipgroup.com/useful-information/reference-material-data/gengosiyoujinkou.html

どう見てもメジャーな言語のひとつです。本当にありがとうございました。
428デフォルトの名無しさん:2007/01/14(日) 20:09:25
全部地球語だろ
429デフォルトの名無しさん:2007/01/14(日) 20:10:43
ベンガル語とかいうのに負けてることにショック。
430デフォルトの名無しさん:2007/01/14(日) 20:21:35
>>429
インド人に勝てるかよw
日本語は国内ではくまなく通じ、国外ではほとんど通じないというあたり特徴のある言語。

ところでCってエスペラントより使用人口多いよな。
431デフォルトの名無しさん:2007/01/14(日) 20:27:51
>>430
>インド人に勝てるかよw

タミールには勝ってるぞ。

>日本語は国内ではくまなく通じ、国外ではほとんど通じないというあたり特徴のある言語。

でも、ヲタ文化の影響で海外での日本語学習者が着々と増えてるらしいけどな。
432デフォルトの名無しさん:2007/01/14(日) 20:38:30
うちの研究室の留学生みんなオタばっかw
暴力的なの好きな奴(男も女も)が結構多い

もちろんそうでないのもいるけど
433デフォルトの名無しさん:2007/01/14(日) 20:45:56
ガイジンがそんなに多い日本の研究室なんて珍しいな。
434デフォルトの名無しさん:2007/01/14(日) 20:51:22
ウチの研究室なんて害人だらけだぜ?
435デフォルトの名無しさん:2007/01/14(日) 20:55:05
walterはここを読んでないという結論で、再開。
436デフォルトの名無しさん:2007/01/14(日) 23:02:04
終了
437デフォルトの名無しさん:2007/01/14(日) 23:41:22
今日から俺もDを勉強してみよう
438デフォルトの名無しさん:2007/01/14(日) 23:46:03
ぜーんぜん完成まで期待してないんだけど
今回の閉鎖騒動が原動力になってUNIX板でやってる
2ch代替システムのコアにDが採用されたら
話のネタとして楽しいなのになー






         
                       とか妄想してみるテスト
439デフォルトの名無しさん:2007/01/15(月) 00:15:51
>>437
がんばれ
440437:2007/01/15(月) 01:54:16
VS2005のデバッガでブレークポイントかけられなくて不貞寝orz
-g -debugオプションで何かすることあるのかな…
441デフォルトの名無しさん:2007/01/15(月) 07:38:35
てゆうか日本語より使用人口おおいプログラム言語はないだろ。
442デフォルトの名無しさん:2007/01/15(月) 08:48:37
HTMLあたりはどうなんだろか
443デフォルトの名無しさん:2007/01/15(月) 08:49:35
プログラミング言語か。バカかオレ。
444デフォルトの名無しさん:2007/01/15(月) 08:58:01
>>438
行ってみたが、どうせ閉鎖しないだろという前提でP2P化妄想が進んでるのか
プロトコルが確定したら互換クライアントはDでもVB.NETでもMozilla XULでも書けるだろうといってみるテスト
445437:2007/01/15(月) 09:47:53
VSPluginDの人のページ見たら
VS2005で上手くデバッグできないみたいなこと書いてあったんだけど
やっぱその通りなのか… そこの人はどうやってデバッグしてるんだろ
446デフォルトの名無しさん:2007/01/15(月) 11:07:18
Dの練習がてらDinnyでも創ってみようかな
447デフォルトの名無しさん:2007/01/15(月) 11:09:03
逮捕します
448デフォルトの名無しさん:2007/01/15(月) 11:40:00
>>446
ぜひ
449デフォルトの名無しさん:2007/01/15(月) 11:51:14
poeny じゃだめなのか?
450デフォルトの名無しさん:2007/01/15(月) 11:55:39
逮捕時にD言語のパッケージが押収される写真がww

>>449
そういや、それがあった
451デフォルトの名無しさん:2007/01/15(月) 14:06:04
std.string.toStringが
object.toStringと勘違いされて(´・ω・`)ショボーン
452デフォルトの名無しさん:2007/01/15(月) 14:07:47
先頭に.付けなきゃダメなのは地味にメンドイしキタナイ
453ロコン:2007/01/15(月) 14:39:04
2CHのリンク先に飛ぶときの広告ページって、JAVAでやってるんでしょうか?
454デフォルトの名無しさん:2007/01/15(月) 16:14:00
画像処理みたいなものを簡単にスレッド化できない?
といわれて、テンプレートとかMixinで簡単にできるようにしたいなあと思ったが、
mutableがないことに気づいた俺がいる
1.0になって本格的に使い始めたから気づかんかった。
455デフォルトの名無しさん:2007/01/15(月) 17:44:25
>445
VS2005の場合、asm{int 3;}を使えば一応ブレークポイントの代わりになる。
ソースレベルデバッグしたいなら、他にdmd/binにあるwindbgを使う手もある。
456デフォルトの名無しさん:2007/01/16(火) 08:42:42
import std.boxer;

void main() {
printf("%d", unbox!(int)( box(10) ));
}

リンク時に
Error 42: Symbol Undefined _D3std5boxer8__assertFiZv


わたくし、間違った事してますか?
457デフォルトの名無しさん:2007/01/16(火) 11:44:41
//Test.d
module Test;

private import std.stdio;

class Test{
public static void disp(){
writefln("Test");
}
}


//Main.d
import Test;
import std.stdio;

int main(char args[][]){
Test test = new Test();

test.disp(); // OK
Test.disp(); // ←コンパイルとおらない

return 0;
}

どおなってんの?
458デフォルトの名無しさん:2007/01/16(火) 11:55:04
モジュール名で優先的に検索してるから、
モジュール<Test>の中にdispと言う関数が無い、と言われてる。

っていうか、コンパイラのメッセージ見ろよ。
459デフォルトの名無しさん:2007/01/16(火) 12:05:01
そういう意味だったのか、ありがとう
460デフォルトの名無しさん:2007/01/16(火) 12:25:32
>>456
boxerは普段使わんから良くわからんけど、
"-release"オプション付けると普通に通る。
boxer.d自体にバグが有りそうな予感。
461デフォルトの名無しさん:2007/01/16(火) 12:58:59
DirextX / OpenGLを抽象化できるライブラリを考えていて、
ポリゴンオブジェクトを抽象化するクラスを作ろうとしています。

class Polygon {
 translate(real x, real y, real z) {
 // DirectX, OpenGL Code
 }
}

DirectXとOpenGLで別の実装が必要だが、
インターフェースは共通であることを保障したい。
versionごとにテンプレートを使うか、関数だけmixinするか、派生クラスにするか、
など考えているのですが、
同一バイナリでDirextX版とOpenGL版のどちらのライブラリにもリンクしたい……
といろいろ考えています。
この手の実装で常套手段あるんでしょうか。
462デフォルトの名無しさん:2007/01/16(火) 14:22:05
前スレ930-939のTcpSocket削除されたって件だけど、1.00には入っているんだね。
以前書いたソースを書き直そうとしたら、在ったので驚いたよ。
463デフォルトの名無しさん:2007/01/16(火) 14:25:35
class A
{
int val = 1;
}

typedef A B;

void main ()
{
auto b = new B;
printf("%d\n", b.val);
}
-------

これで

Error: this for val needs to be type A not type B

って言われるんですけど、こういうもんなの?
alias だと、まあ通るんだけど。
464デフォルトの名無しさん:2007/01/16(火) 15:39:46
>>463
どうかんがえてもバグだわな
465デフォルトの名無しさん:2007/01/16(火) 15:49:38
そうなんだ、バグなのね・・・
1.0 が出たーと思って本格的に触り始めたのにorz
466デフォルトの名無しさん:2007/01/16(火) 16:31:39
1.0は、あくまで仕様が、ということで、バグが無いということではないとおもうに。
467デフォルトの名無しさん:2007/01/16(火) 16:33:45
>>456
ちなみに、gdc だと、とおるね。
468デフォルトの名無しさん:2007/01/16(火) 16:35:43
>>466
dmdとDの両方が1.0なのだが。1.0リリース前はバグ修正優先だったし。
469デフォルトの名無しさん:2007/01/16(火) 16:36:47
>>466 あーなるほど。言語仕様が 1.0 って事ですか。
でも "DMD 1.0" ってあるからこれは勘違いしてしまうよなぁ
470デフォルトの名無しさん:2007/01/16(火) 16:43:29
class A{
 static{
  const int AAAA;

  this(){
   AAAA = 35;
  }
 }
}

これがstatic this()にならないのはバグ?
471デフォルトの名無しさん:2007/01/16(火) 16:45:14
ちなみに、私のバグ報告は11ヶ月後に直った。
472デフォルトの名無しさん:2007/01/16(火) 16:48:09
>>470
constは記憶クラスなのでちがうとおもうけど?
473デフォルトの名無しさん:2007/01/16(火) 16:50:39
>>470
既出なバグ。
474デフォルトの名無しさん:2007/01/16(火) 16:54:41
既出って報告されてるってこと?
475デフォルトの名無しさん:2007/01/16(火) 16:57:21
>>470
http://www.kmonos.net/alang/d/class.html
 > 静的コンストラクタ宣言の static は、属性ではありません。 必ず this の直前に書く必要があります:
バグじゃなくて仕様。
476デフォルトの名無しさん:2007/01/16(火) 22:45:55
>>475
エラーも警告もでなければバグだろ。
477デフォルトの名無しさん:2007/01/16(火) 22:49:58
公式がやたら重い気がする
皆注目してんだな
478デフォルトの名無しさん:2007/01/16(火) 22:52:50
>>476
仕様書に書いてあるとおりなので、仕様ですよ。
仕様そのものが間違ってるとか、不親切だというのは別として。
479デフォルトの名無しさん:2007/01/16(火) 23:16:15
>>476
> エラーも警告もでなければバグだろ。
その場合、エラーも警告もでないのがバグなんじゃない?
480デフォルトの名無しさん:2007/01/17(水) 00:41:06
意味のないstatic属性は無視されるのが仕様。
481デフォルトの名無しさん:2007/01/17(水) 11:19:55

当方C/C++はかなり使い込んでいます

これからDを使ってみようと思うのですが
生成されたexeの実行速度は問題ないですか?

最適化とかはコンパイラに期待してもいいのですか?
482デフォルトの名無しさん:2007/01/17(水) 11:47:40
http://www.kmonos.net/alang/d/comparison.html
このページにさまざまな他言語との比較があります。
もちろん速度の比較もあります。
参考にしてはどうでしょうか。
483デフォルトの名無しさん:2007/01/17(水) 12:39:08
>>481
ttp://www.kmonos.net/alang/wnd/whats.ja.html
ここの「ネイティブコンパイル」の項のリンク先へ行ってみるといいかも。
もちろん(このページに書かれているように)まんま鵜呑みにするものではないけれど、
とりあえず「不安に思う必要はまったくない」ってのは言えそう。

GCのメモリ回収とかで、多少「C/C++にはない注意の仕方」を求められることは
あるかもしれないけれど、それはまぁ、手法を身につければいい話だから。
484デフォルトの名無しさん:2007/01/17(水) 12:43:12

参考になりました
色々ありがとうございます

質問ばかりで申し訳ありませんが
Windowsアプリ用のフレームワークとかで
お勧めのものはありますか?
485デフォルトの名無しさん:2007/01/17(水) 12:57:35
http://www.kmonos.net/alang/wnd/whats.ja.html
に言語ベンチマークと「どんくらいアテになるかは知らないよ」との言。

GCが速度に与える影響についての主張は
http://www.kmonos.net/alang/d/garbage.html
「GCされたプログラムの方が高速です」との言葉。

作者のWalterはコンパイラの実装に関して結構な人物らしく、
最適化とかは期待できるのかもしれない。
でも少なくとも現時点ではいまいち最適化が実装されきってない説も。

Winアプリ書くことに関しては、言語としては申し分無い、って感じ?
でかいランタイム要らないから起動早いし。
ただしライブラリは全然足りないけど。
486デフォルトの名無しさん:2007/01/17(水) 14:48:49
inabaたん大人気だな
487デフォルトの名無しさん:2007/01/17(水) 14:59:32
100人乗っても大丈夫だから
488デフォルトの名無しさん:2007/01/17(水) 15:00:53
何人乗ってるかカウントすべきだな。
489デフォルトの名無しさん:2007/01/17(水) 15:15:18
そして実行速度の話に戻るんだな
490デフォルトの名無しさん:2007/01/17(水) 18:02:05
>>486

    /\___/ヽ   ヽ
   /    ::::::::::::::::\ つ
  . |  ,,-‐‐   ‐‐-、 .:::| わ
  |  、_(o)_,:  _(o)_, :::|ぁぁ
.   |    ::<      .::|あぁ
   \  /( [三] )ヽ ::/ああ
   /`ー‐--‐‐―´\ぁあ
491デフォルトの名無しさん:2007/01/17(水) 18:16:33
おすそわけ。
ttp://marmotfarm.com/cgi-bin/upload2/upload.cgi
up88211.zip

inabaたんゴメソ
492デフォルトの名無しさん:2007/01/17(水) 18:26:37
>>491
乙!
493デフォルトの名無しさん:2007/01/17(水) 18:40:59
GJ!!!
494デフォルトの名無しさん:2007/01/17(水) 18:42:37
非常にGJ
495デフォルトの名無しさん:2007/01/17(水) 19:34:23
配列を逆向きにスライスとかできないかな…
例えば構文をarry![〜]とすると、

int[] a = [11, 22, 33, 44, 55];
int[] x;

x = a![].dup; // x == [55, 44, 33, 22, 11]
x[1] = a![0]; // x[1] == 55 (末尾要素)
x ~= a![1..2] // x == [55, 44, 33, 22, 11, 44, 33]

分かり辛くてすんません
496デフォルトの名無しさん:2007/01/17(水) 19:36:28
あ、一番下2番目の結果反映してなかったorz
497デフォルトの名無しさん:2007/01/17(水) 20:05:17
俺はそこまで面倒でもないが。
reverseとlength($)で十分対応できる。
498k.i:2007/01/18(木) 02:52:02
>>491
超GJ!!!!

日本語訳のサイトに転載させてもらってよろしいでしょうか?
あと<pre>のスタイルがカコイイからパクらせてもらいたいので、
よろしければこれのフォント名教えていただけるとうれしい…
499デフォルトの名無しさん:2007/01/18(木) 03:05:18
>>495
struct r_impl(T)
{T[] a;
T opIndex(ulong i) { return a[$-1-i]; }
void opIndexAssign(T t, ulong i) { a[$-1-i] = t; }
T[] opSlice(ulong i, ulong j) { return a[$-j..$-i].dup.reverse; }
void opSliceAssign(T[] t, ulong i, ulong j) { a[$-j..$-i] = t.dup.reverse; }
T[] dup() { return a.dup.reverse; }
}
r_impl!(T) r(T)( T[] a ) { r_impl!(T) t; t.a=a; return t; }

x = r(a).dup;
x[1] = r(a)[0];
x ~= r(a)[1..2];

いまいち
500デフォルトの名無しさん:2007/01/18(木) 08:14:56
逆スライスあると便利そうだな。
応用してforeach_reverseをforeachに統一できるんじゃないだろうか。
501デフォルトの名無しさん:2007/01/18(木) 08:56:36
>>498
>>491ではないのですが。
ヘルプコンパイラhh.exeがあれば、
hh -decompile 出力先ディレクトリ chmファイル名
でhtmlソースへデコンパイルできます。
502デフォルトの名無しさん:2007/01/18(木) 09:12:43
>>501
GJ!!!
503デフォルトの名無しさん:2007/01/18(木) 12:51:05
リファレンスなんてfirefoxのScrapBookで十分だ、textにしてgrepだ
そう考えていた時期が私にもありました
504デフォルトの名無しさん:2007/01/18(木) 12:56:32
正直普通のchmレベルだと別に大して便利だとは思わない
素のhtmlでいい

MSDNのようなキーワード検索機能までついてると、大違いだがな
505デフォルトの名無しさん:2007/01/18(木) 13:48:44
何言ってんだ
506デフォルトの名無しさん:2007/01/18(木) 14:00:11
MSDNのキーワード検索の当てにならなさ具合はひどい
507デフォルトの名無しさん:2007/01/18(木) 14:10:51
chmって検索できなかったっけ?
508デフォルトの名無しさん:2007/01/18(木) 14:12:41
できる
509デフォルトの名無しさん:2007/01/18(木) 14:18:55
htmlは鯖に置いといてあちこちから使うときに便利だな
510デフォルトの名無しさん:2007/01/18(木) 16:23:09
みんな俺に黙ってver1.0を堪能してたんだね…ずるいよ…
511デフォルトの名無しさん:2007/01/18(木) 16:48:37
chmなんて読めない俺が登場。htmlの方が便利だよな
512デフォルトの名無しさん:2007/01/18(木) 17:42:58
htmlは専用アプリを起動せずに普段のブラウザで表示できて、
ブラウザの機能を使えるのが便利。

chmはページをあっち見てはコードにもどりこっち見てはコードに戻り、
な場合に楽なときがある。あと検索だな。

ローカルにMSDNみたいなUIのサイトを構築して自動的に更新されるようにすれば、
両者の利点を併せ持つリファレンスになる。
513デフォルトの名無しさん:2007/01/18(木) 18:49:38
interface Hoge {
static int foo;  // OK
static void bar(); // コンパイルは通るが実体はないので呼び出すと実行時エラー
static void huga() {} // コンパイルエラー
}

staticメンバはinterfaceであっても実体があるべきだと思うのだが
514デフォルトの名無しさん:2007/01/18(木) 19:45:43
abstract class と interface の違いってなに?
515デフォルトの名無しさん:2007/01/18(木) 19:48:09
雛形と仕様書の違い。interface -> abstract class -> class と繋ぐとJavaっぽくなる。
516デフォルトの名無しさん:2007/01/18(木) 20:09:40
>>514
多重継承出来るか出来ないかとか既存の型を継承できるとか。
517デフォルトの名無しさん:2007/01/18(木) 20:15:24
>>514
abstractなクラスは、実装を持つことができる。
518491:2007/01/18(木) 21:08:01
>>498
転載もちろんOKです。 元々k.iさん作成のコンテンツですから。

フォントの件
フォントを変えたつもりは無いのですが
htmlを加工した結果、スタイルシートの適用を変えてしまったのかもしれないです

chm作るのに使ったファイル一式です。
DLKey: help
ttp://up.uppple.com/upload.cgi?mode=dl&file=1691
519デフォルトの名無しさん:2007/01/18(木) 22:04:05
>>512
> htmlは専用アプリを起動せずに普段のブラウザで表示できて、ブラウザの機能を使えるのが便利。

chmページ上で右クリ→プロパティに表示されるURLは、普段のブラウザ(IE系)でも有効だよ。

大量にあるhtmlはchmに圧縮して、その中のURLをブックマークして利用すると便利〜。
520デフォルトの名無しさん:2007/01/18(木) 23:56:04
普通にPRE内のフォントはmonospaceがいいとおもう・・・おっとスレ違い
521デフォルトの名無しさん:2007/01/19(金) 00:43:51
>>519
知らん買った。も前頭いいな
522k.i:2007/01/19(金) 02:33:39
>>518
超さんくす!!!
523デフォルトの名無しさん:2007/01/19(金) 10:59:11
Javaのinstanceofみたいなのってどうやるの?

過去ログにtypeid(typeof(o)) is typeid(Hoge)ってあったけど上手く行きません。

class Hoge{
 public int opEquals(Object o){
  writefln(typeid(typeof(o)));
  return 0;
 }
}

object.Objectって表示される。
524デフォルトの名無しさん:2007/01/19(金) 11:39:04
UTF-8なら通るが

class 基底クラス {}
class 派生クラス : 基底クラス {}

auto 基底インスタンス = new 基底クラス;
auto 派生インスタンス = new 派生クラス;

// put classinfo
writefln(基底インスタンス.classinfo.name);  // => "modulename.基底クラス"
writefln(派生インスタンス.classinfo.name);  // => "modulename.派生クラス"

// check Type of instance
writefln(toString(基底インスタンス.classinfo == 基底クラス.classinfo));  // =>1
writefln(toString(基底インスタンス.classinfo == 派生クラス.classinfo));  // =>0
writefln(toString(派生インスタンス.classinfo == 基底クラス.classinfo));  // =>0
writefln(toString(派生インスタンス.classinfo == 派生クラス.classinfo));  // =>1

// compare Type between instances
writefln(toString(基底インスタンス.classinfo == 派生インスタンス.classinfo));  // =>0
525デフォルトの名無しさん:2007/01/19(金) 11:41:34
少なくとも1.0ではtypeofは静的に決まる式の型に基づいて型を指定する方法の模様
526デフォルトの名無しさん:2007/01/19(金) 12:26:32
ひさしぶりにC++使ってみたら
コンストラクタをthisって書いてそれがエラーだって気付く事に10分かかったorz
527デフォルトの名無しさん:2007/01/19(金) 12:29:34
あほす
528デフォルトの名無しさん:2007/01/19(金) 12:42:38
PHPからCに戻って変数名に$付けた漏れの立場は・・・
529デフォルトの名無しさん:2007/01/19(金) 13:13:05
わろす
530デフォルトの名無しさん:2007/01/19(金) 13:19:22
Rubyから戻ってきてフィールドに@から始まる名前をつけました
531デフォルトの名無しさん:2007/01/19(金) 13:29:58
Rubyから戻るとセミコロンを忘れるので困る
532デフォルトの名無しさん:2007/01/19(金) 13:45:20
関数定義の括弧を先に書いておくのも忘れやすいな
533デフォルトの名無しさん:2007/01/19(金) 16:32:42
>>525
Dはどうみても静的型付けだろ。
動的だともうちょっと遅くなると思う。
534デフォルトの名無しさん:2007/01/19(金) 19:01:08
535デフォルトの名無しさん:2007/01/19(金) 20:10:39
最近は正しいレスにそれやるのが流行りなのかな。

根拠訊ねたらムキになって繰り返してきそう。
536デフォルトの名無しさん:2007/01/19(金) 20:41:25
これはひどい

内容の誤りの話じゃなくて、頓珍漢なレスに対する
「そんな話してないよ」という突っ込みだと思うよ
537デフォルトの名無しさん:2007/01/19(金) 20:44:25
そんな話してなかったから
そんな話したのよねえ〜
538デフォルトの名無しさん:2007/01/19(金) 20:50:36
初心者の俺がD言語研究みて Hello World 作ろうとしたらエラーでコンパイルできなかった。
今はWikiのような書き方は駄目になってたのね。 かなりハマってたわ・・・・
539デフォルトの名無しさん:2007/01/19(金) 20:54:49
>>538
よう、過去の俺

ちなみに今はキーボード入力が分からない(scanfとか orz
540デフォルトの名無しさん:2007/01/19(金) 20:56:40
D言語はIDEがめんどくさそうだな。
VSみたいにクラスビュー情報をパースするエンジンが高く売れるかも。
541デフォルトの名無しさん:2007/01/19(金) 21:11:01
なあ、Socket関係なんだけど。
Linux(2.6x) or UNIX使ってるやつ、epoll/kqueue使って書き直す気のあるやついない?
selectで実装されてるからやる気なくなったんだけど。
542デフォルトの名無しさん:2007/01/19(金) 21:21:00
>>513
現状、派生クラスで実装を提供してやって
テンプレートと組み合わせたりすると、
コンパイル時ポリモーフィズムみたいのが出来てちょっと楽しい。

コンパイラの挙動がちょっと怪しいなぁとは思う。
そんな俺は>>285
543デフォルトの名無しさん:2007/01/19(金) 22:34:19
>>535
"typeofは静的型を扱うもの。(∴インスタンスの動的型判定には使えない)"
ていう発言に対して「Dはどうみても静的型付けだろ」って、
どう話が繋がってるつもりなのかむしろこっちが訊ねたいのだが…

それはともかく継承とかまで考えてJavaのinstanceof相当のことをやるなら、

bool instanceof(T)( Object o ) {
 for(ClassInfo ci=o.classinfo; ci; ci=ci.base)
  static if( is(T == class) )
   if( ci is T.classinfo )
    return true;
  else static if( is(T == interface) )
   foreach(ii; ci.interfaces)
    if( ii.classinfo is T.classinfo )
     return true;
 return false;
}

writefln( instanceof!(Hoge)(o) );

こんなもんじゃないでしょうか。
544デフォルトの名無しさん:2007/01/19(金) 23:53:58
>>540
それ以前にデバッガ使ってるのかと問い詰めたい。windbg使いにくいし…
545デフォルトの名無しさん:2007/01/19(金) 23:58:09
pythonみたいなソースだね
546デフォルトの名無しさん:2007/01/20(土) 01:12:11
むかーしでも同じこと言った記憶があるけどinstanceofは
cast(Hoge)o;
でいいじゃん。何が不満なの?
547デフォルトの名無しさん:2007/01/20(土) 01:30:22
opCast はオーバーロードされ得るとか。
まあ、C++のoperator&級に気にしなくていいアレだとは思うが。。。
548546:2007/01/20(土) 01:39:30
あーそうか当時のときはopCastなかったからその問題考えてなかったわ。
対策するなら暗黙の変換を挟んで
Object obj(Object o){return o;}
cast(Hoge)obj(o);
こうかな。

castと変換をひとつにまとめて
Object instanceof(T)(Object o){return cast(T)o;}
instanceof!(Object)(hoge);
こうでもいいか。
549デフォルトの名無しさん:2007/01/20(土) 01:48:56
後ろのほう少し間違えた。Object型返してたらTがinterfaceのときにうまく動かないな。
void* instanceof(T)(Object o){return cast(T)o;}
instanceof!(Hoge)(hoge);
こうだな。
あーでもこうすると
oがObject型へ暗黙変換できる == 引数がinterfaceで使用不可かー。
opCastうぜー。
550デフォルトの名無しさん:2007/01/20(土) 02:05:45
opCastがオーバーロードされた時の動作については
opCastを実装するやつ(モジュール側とか)の責任でOKだろう。
素直にcastしとけばいいと思う。
551デフォルトの名無しさん:2007/01/20(土) 02:32:08
>>544
VC6でデバックできるよ
テンプレートで変な行に飛んだり
クラスのメンバ変数が見えなかったりするけど。
552デフォルトの名無しさん:2007/01/20(土) 07:38:34
Dで.so作りたい
553デフォルトの名無しさん:2007/01/20(土) 11:25:05
作れると思うが・・・
554デフォルトの名無しさん:2007/01/20(土) 11:31:43
COM呼び出しがまんどい
555デフォルトの名無しさん:2007/01/20(土) 22:17:36
>>553
マジデスカー
作り方教えてplz
556デフォルトの名無しさん:2007/01/21(日) 14:45:42
タダで?
557デフォルトの名無しさん:2007/01/21(日) 14:48:51
>>455
ありがとう。アク禁食らって書けなかった…
結局、昔使ってたVS2003入れてステップ実行できるようになりました。
558デフォルトの名無しさん:2007/01/21(日) 23:03:03
Dって何かしらエラーで落ちたとき
エラーメッセージだとサッパリ原因が特定できないんですが
どうやってハングした場所の特定してる?
やっぱTRACE系統のコードを入れるしかない?
559デフォルトの名無しさん:2007/01/22(月) 02:04:59
恥ずかしながらwritefln挿入しております……。
デバッグモードの時スタックトレース出してくれたらなぁ。
560デフォルトの名無しさん:2007/01/22(月) 06:49:32
http://shinh.skr.jp/d/ の backtrace 1.0
561デフォルトの名無しさん:2007/01/22(月) 09:00:16
>>560
SymLoadModule: この操作を正しく終了しました。
ってズラーっと出るだけなんだけども俺だけ?使い方間違ってるのかな……。

入ってたlibを作業ディレクトリにコピーして、
void f() { throw new Exception("error!"); }
void main() { f(); }
を-gつけてコンパイルした。

どうも過去ログ読むに修正済みのエラーっぽいんだが。
C:\d\source.dで試してみたが同じ。
562デフォルトの名無しさん:2007/01/23(火) 02:13:02
Dのガベコレって特定のスレッドでfullCollectしたら
全スレッドのオブジェクトが対象になるんでしょうか?
563デフォルトの名無しさん:2007/01/23(火) 05:42:27
>>561
全然中身わかってないんだけどprintfで追ってdbginfo.dの711 行目を
- modules[i].SegInfo = &segarray[0];
+ modules[i].SegInfo = (segnum ? &segarray[0] : null);
にしてphobos.libをビルドしなおしたら直った。

http://up.uppple.com/upload.cgi?mode=dl&file=1789
Key: nlpo
564デフォルトの名無しさん:2007/01/23(火) 07:03:37
GaJ!!!
565デフォルトの名無しさん:2007/01/23(火) 08:13:47
>>563
使えた。gj
566560:2007/01/23(火) 21:52:20
shinichiroさんと>>563、ああもう>>560-561もみんな最高。
狂おしくGJ。
567デフォルトの名無しさん:2007/01/23(火) 21:54:18
>>566
さりげなく自分も最高と言う、お前がマジで最高
568デフォルトの名無しさん:2007/01/23(火) 23:06:02
>>567
あれ?w

assert(>>566 == >>559);
assert(>>566 != >>560); /* >>560には大変申し訳なく。 */
569デフォルトの名無しさん:2007/01/24(水) 02:29:11
accept()したSocketの挙動がどーもおかしい気がする……。
ブラウザにただhogeと返したいだけなんだけど、なんか間違ってる?

import std.stream, std.stdio, std.socket, std.socketstream;
void main(){
scope Socket server = new Socket(AddressFamily.INET, SocketType.STREAM, ProtocolType.IP);
server.bind(new InternetAddress(1969));
server.listen(10);
Socket client = server.accept();
scope SocketStream browser = new SocketStream(client, FileMode.In | FileMode.Out);

// クライアントのリクエストが終わるまで読み飛ばす
for(char[] line = browser.readLine(); line != ""; line = browser.readLine()){ }
// 固定の内容を返す
browser.writeString("HTTP/1.0 200 OK\r\n");
browser.writeString("Content-Type: text/plain\r\n");
browser.writeString("Connection: close\r\n");
browser.writeString("\r\n");
browser.writeString("hoge\r\n");
browser.flush();
browser.close();
}

全然ブラウザにデータが送られない。
ただしreadLineしてる行を消してtelnetで繋いでみると、途端に送られてきたり。
570デフォルトの名無しさん:2007/01/24(水) 07:40:00
結局Javaでいうinstanceofってどうするの?
571デフォルトの名無しさん:2007/01/24(水) 07:52:52
>>570
cast(Hoge)objで同じことを表現できる。
理由はDのキャストがC++のポインタを対象にしたdynamic_cast相当だから。
572デフォルトの名無しさん:2007/01/24(水) 08:14:52
っつかここの具体的説明見たほうがいいのではと
ttp://www.kmonos.net/alang/d/expression.html

オブジェクト o がクラス B  のインスタンスであることを判定するためには、キャストを使います:

if (cast(B) o)
{
    // o は B のインスタンス
}
else
{
    // o は B のインスタンスではない
}
573デフォルトの名無しさん:2007/01/24(水) 11:40:18
>>569
browser.flush();
の代わりに
client.shutdown(SocketShutdown.BOTH);
574デフォルトの名無しさん:2007/01/24(水) 11:56:10
What's New for D 1.001

Jan 23, 2007
New/Changed Features
tail recursion works again
New type aware GC

Bugs Fixed
Bugzilla 621: When inside a loop, if you call break inside a try block the finally block is never executed
Bugzilla 804: missing linux functions
Bugzilla 815: scope(exit) isn't executed when "continue" is used to continue a while-loop
Bugzilla 817: const char[] = string_literal - string_literal gets included for every reference
Bugzilla 819: mention response files in cmd line usage
Bugzilla 820: gc should scan only pointer types for pointers
Bugzilla 823: frontend: incorrect verror declaration in mars.h
Bugzilla 824: "mov EAX, func;" and "lea EAX, func;" generate incorrect code
Bugzilla 825: dmd segmentation fault with large char[] template value parameter
Bugzilla 826: ICE: is-expression with invalid template instantiation
575デフォルトの名無しさん:2007/01/24(水) 12:07:16
1_来ましたな
576デフォルトの名無しさん:2007/01/24(水) 12:28:31
やっぱり2桁にするくらいならいっそ3桁にするべきだよな、うん。
577デフォルトの名無しさん:2007/01/24(水) 12:46:38
きたきた
あのさあ
D2.000ってどんなものになるんだろう
今見えている予定のほかに考えられそうなのはLINQくらいかなあ
578デフォルトの名無しさん:2007/01/24(水) 13:30:06
なんでこんなにバージョンナンバーのつけ方がヘタクソなんだろうか。
もういっそのことUbuntuみたいに年月でバージョンつけてしまったほうがいいような気がする。
579デフォルトの名無しさん:2007/01/24(水) 15:18:05
> New type aware GC
さりげなくこれは素晴らしすぎるのではないかという予感が
580デフォルトの名無しさん:2007/01/24(水) 16:56:49
あいかわらず何なのかさっばりわからない罠
581デフォルトの名無しさん:2007/01/24(水) 17:07:54
やっぱ文字列扱うなら配列よりポインタだな。
582デフォルトの名無しさん:2007/01/24(水) 18:43:53
これは1.1000まで出るフラグ立ったな
583デフォルトの名無しさん:2007/01/24(水) 19:17:29
>>579
型情報を扱うようになったの?
584デフォルトの名無しさん:2007/01/24(水) 20:56:32
C:\>dmd
Digital Mars D Compiler v1.001
...

バージョンナンバーになんかワロタ
この抜けてる感じが好きだ
585デフォルトの名無しさん:2007/01/24(水) 21:09:54
千里の道も一歩からって感じだな。
586569:2007/01/24(水) 23:45:52
さすがに仕様変更は無いようだな……。
しかしこのバージョンNoは、今回はマイナーバージョン4ケタ目指します、という
Walter先生の意気込みではなかろうなw

>>569
ありがと。でも残念ながら変化らしい変化は見られず。
そちらで実験してみてくれてうまくいってるなら、何がどーなっているやら……。
というか、browser.writeString("hoge\r\n");を10000回ほど回してみたら表示されたり、
それでも最後の数バイトが受信しきれない場合があったり。
どう見てもバッファがらみです。本当に。

socketから直接sendしても正常に送れたサイズ返してくるし、
phobosのコード読んでも誰もバッファリングしてないし、
Winsock以下がしてるかとTCP_NODELAYまでセットしてみたのにダメだし。

うわーん。誰か正常に動作する鯖のサンプルをくれー
587569:2007/01/24(水) 23:47:48
だから俺は何をしているんだ何をorz
>>586のは>>573へのレスです……
588デフォルトの名無しさん:2007/01/25(木) 00:18:18
1.001とくるんだったら1.000にしとくべきだったのでは

TeXは3.1415→3.14159→とバージョンが上がっていってたな
589デフォルトの名無しさん:2007/01/25(木) 00:21:05
>>588
>TeXは3.1415→3.14159→とバージョンが上がっていってたな
ほんの百回バージョンアップしただけで破綻しそうなシステムだな。
590デフォルトの名無しさん:2007/01/25(木) 01:17:56
>>589
破綻する前に破産する
591デフォルトの名無しさん:2007/01/25(木) 04:29:31
TeXは出てからバグが5回しか見つかっていないということじゃないか?
確かあれってバグが1個見つかってフィックスされるたびに
桁が1個増えるとかどこかで聞いたのだけれど。
592デフォルトの名無しさん:2007/01/25(木) 09:38:41
TeXは、すでにはじょうしている。
存在自体がバグ
593デフォルトの名無しさん:2007/01/25(木) 10:29:03
破綻(はたん)
はじょうって何だ?>>592 が破綻してるのか?
594デフォルトの名無しさん:2007/01/25(木) 10:30:45
TeXは、バージョン1の時から、3になったら3.1415・・・と増えていき、
自分が死んだらπになるとクヌース先生は言ってるな
595デフォルトの名無しさん:2007/01/25(木) 10:36:24
Texは、既に波状している。

意味わかんね。
596デフォルトの名無しさん:2007/01/25(木) 13:17:45
ガイシュツみたいに流行らせようとしてんじゃね?
597デフォルトの名無しさん:2007/01/25(木) 13:45:06
がいしゅつだのふいんきだのはじょうだの・・・
ネタでやっても頭悪い印象しかないんじゃね?
598デフォルトの名無しさん:2007/01/25(木) 13:47:30
そんなことより

From: Walter Bright <[email protected]>
Newsgroups: digitalmars.D.announce
Subject: DMD 1.001 release is broken

I checked into the bugs Oskar and a couple others posted, and while
they're not hard to fix, they do render the release unusable. I'll try
to get an update as soon as I can, in the meanwhile, stick with 1.00.
599デフォルトの名無しさん:2007/01/25(木) 14:10:16
2_目に期待
600デフォルトの名無しさん:2007/01/25(木) 14:25:37
>>593-597
つられすぎだお前ら。>>592の思う壺だということにきづけ
601デフォルトの名無しさん:2007/01/25(木) 15:21:32
釣り、それは魔法の言葉。
602デフォルトの名無しさん:2007/01/25(木) 15:37:09
What's New for D 1.002
Jan 24, 2007
New/Changed Features

Bugs Fixed

* D.announce/6893: ClassInfo.flags incorrectly set
* D.announce/6906: Three subtle cases of tail recursion item 2
603デフォルトの名無しさん:2007/01/25(木) 16:00:09
そこでさらに「きずけ」と書いてほしかった
604デフォルトの名無しさん:2007/01/25(木) 21:38:57
Wikiの方に
ttp://f17.aaa.livedoor.jp/~labamba/?cmd=read&page=%A5%EC%A5%B7%A5%D4%BD%B8&word=COM
> Dのinterfaceは既にポインタなので ・・・
とありますが、
C++で
 ITypeInfo **ppTInfo
と書かれてある部分は、(ITypeInfoはinterface)
Dの場合
 ITypeInfo* ppTInfo
となるのでOKですか?
605デフォルトの名無しさん:2007/01/25(木) 21:50:03
>>604
ok
606デフォルトの名無しさん:2007/01/25(木) 22:18:45
>>605
d

ttp://www.prowiki.org/wiki4d/wiki.cgi?WindowsAPI
↑ここのヘッダを利用してるんですが、
ttp://www.dsource.org/projects/bindings/browser/trunk/win32/oaidl.d
の内容、間違ってないですか?
681〜691行のaliasに、 * いらいない気がするのですが・・・。
607デフォルトの名無しさん:2007/01/26(金) 07:52:48
bindingAPIってDCB構造体やCOMMCONFIG構造体の宣言をするとリンクに失敗するな。
608569:2007/01/27(土) 01:40:31
いーかげんウザがられてそうで申し訳ないが、
std.socket.Socketを自分で直接操作してみたら問題なく動作した罠。
SocketStreamに何か問題あるのかしらん。コード見た感じ私には特に……だけど。

誰かSocketStream周りで似たような現象が出たら是非。
609デフォルトの名無しさん:2007/01/27(土) 04:29:32
What's New for D 1.003
Jan 26, 2007

New/Changed Features
Bugs Fixed
D.announce/6929
D.announce/6953
610デフォルトの名無しさん:2007/01/27(土) 08:17:30
Walterたん・・・
611デフォルトの名無しさん:2007/01/27(土) 11:16:24
やっぱDはこうでなくっちゃいけねぇ……
612デフォルトの名無しさん:2007/01/27(土) 11:18:31
Walterたん萌え
613デフォルトの名無しさん:2007/01/27(土) 12:07:11
連想配列にはkey(だけ?)を削除するremoveがあるけど、
他にもclearみたいに全削除とかってできないの?
あと、普通の配列にもinsertとか欲しいんだけど・・・
614デフォルトの名無しさん:2007/01/27(土) 13:41:09
普通の配列にもinsert欲しいって正気か?
615デフォルトの名無しさん:2007/01/27(土) 14:03:00
前は
int *a = new int[100];
が通っていたのに今はエラーでるんだね。

これは
int *a;
int b = new int[100];
a = &b[0];
とかで書けばいいのかな。
616デフォルトの名無しさん:2007/01/27(土) 14:03:54
別に実装は可能なのだからあってもいいとは思うが。
たくさんの人が必要に迫られて自分でinsert()書いてるんだろーな……。

ところで「配列のプロパティとしての関数」が
配列のプロパティとして通らないのだけど、バグだよね?

private import std.utf;
unittest{
  int number(char[] string){
    return toUCSindex(string, string.length);
  }
  assert("あ".number() == 1);
  assert("あ".number == 1); // コンパイルエラー
}
617デフォルトの名無しさん:2007/01/27(土) 14:14:48
int a[] = new int[100];

これじゃダメなのかなぁ・・・
618デフォルトの名無しさん:2007/01/27(土) 14:47:05
最新型DMD使ったらこう・・・
Assertion failure: 'classinfo->structsize == CLASSINFO_SIZE' on line 316 in file 'toobj.c'

戻そ・・・
619デフォルトの名無しさん:2007/01/27(土) 14:54:27
>>616
普通の人は配列にinsertするようなアルゴリズムを選択しないと思うが
620デフォルトの名無しさん:2007/01/27(土) 14:59:34
writeよりreadの多いリストの実装として良く採用すると思うが
バイナリサーチみたいなランダムアクセス前提のアルゴリズムもあるわけで。

まあJavaみたいなコレクションライブラリをDにポーティングすりゃいいんじゃね。
621615:2007/01/27(土) 15:51:26
あ、int b〜でなくint[] bだった。

>>617
まぁそれで良いのだけどね。
前に書いてたソースでCの関数に渡すからわざとポインタで
宣言していたところがコンパイラのバージョン上げたらエラーでたので。
622デフォルトの名無しさん:2007/01/27(土) 15:56:13
>>621
int *a = (new int[100]).ptr;
623デフォルトの名無しさん:2007/01/27(土) 16:05:49
必要なときに.ptrした方がいろいろ都合が良いと思うんだが・・・
624デフォルトの名無しさん:2007/01/27(土) 16:10:02
>>622
なるほど。
ありがとう。
625デフォルトの名無しさん:2007/01/27(土) 16:21:09
D 1.004
Walterタソ迷走中
626デフォルトの名無しさん:2007/01/27(土) 16:33:20
なーに、千分の一刻みにした恩恵が早速表れて幸先が良い。
627デフォルトの名無しさん:2007/01/27(土) 16:38:01
opApplyの使い方が良くわからん

struct Hoge{
 char[] s;
}

main(){
 Hoge h;
 h.s = "abcd";
 foreach(char c; h){
  writefln(c);
 }
 return 0;
}

これでh.sの中身を一文字ずつ出すのはどうするの?
628デフォルトの名無しさん:2007/01/27(土) 18:58:03
>>627
struct Hoge{
 char[] s;

int opApply(int delegate(inout char) dg) { // opApplyの引数はdelegate
int result = 0;
for (int i = 0; i < s.length; i++) {
result = dg(s[i]); // 引数で渡されたdelegateに値を渡す
if (result) break; // delegateの返値が0でなければ、中止してその返値を返す
}
return result; // ループが正常に終了した場合は0を返す
}
}
629デフォルトの名無しさん:2007/01/27(土) 19:23:06
>>620
リストは配列じゃないし二分木も配列じゃないだろう。
たとえば二分木を配列の上に構築する場合なんかは、
必要なのは配列へのinsertじゃなくて二分木へのinsertでしょ?
630デフォルトの名無しさん:2007/01/27(土) 19:38:07
リソースの節約と速度を求めて配列採用するのに何でツリーを設けるんだ
631デフォルトの名無しさん:2007/01/27(土) 19:55:24
>>626
マイナーバージョンが3桁表示なのは、千分の一刻みなのとは違くね

>>630
バイナリサーチは二分木じゃなかった。insertの話とつなげてヒープソートとごっちゃになってた。
けどそうなると、配列にinsertするってのとバイナリサーチって独立の話だろ。なんでここで
(リストや)その話が出てきたんだろう。

一個一個insertするような仕様だとひどいことになるけど、そういう話じゃなくてなんか別の
話なんかね、配列へのinsertって。
632デフォルトの名無しさん:2007/01/27(土) 20:25:39
配列と線形リストとの比較ならバイナリサーチは配列側の必須機能じゃね?
=であるかだけがサーチじゃないっしょ
633デフォルトの名無しさん:2007/01/27(土) 21:14:08
D言語を初めて使ってみたのですが
UTF-8で保存しているのにコンソールでprintfやwriteflnで表示すると文字化けします。
どうすればいいのでしょうか?
634デフォルトの名無しさん:2007/01/27(土) 21:16:29
コンソールをUTF8表示対応にする、もしくはtoMBSz()
635デフォルトの名無しさん:2007/01/27(土) 21:35:11
>>633
使っているコンソールは、UTF-8に対応していますか?
WindowsのDOS窓だったりだめっしょ
636デフォルトの名無しさん:2007/01/27(土) 21:56:02
Consoleというinterfaceを作って各OS向けにカスタマイズしたらいい。
637デフォルトの名無しさん:2007/01/27(土) 22:02:55
>>634-635
thx.
コマンドプロンプトを使ってました。
writefln(toMBSz("ほげ"))とかをやると910FD0とかいう数字が表示されていたり。
仕方ないのでPoderosa-Cygwin経由で無理やりutf-8表示させてみますた。
638デフォルトの名無しさん:2007/01/27(土) 22:03:56
>>635
Win32 Console Windowなら、立派にUnicode対応してるじゃん
UTF-16に変換してWriteConsoleW()すればよい
639デフォルトの名無しさん:2007/01/27(土) 22:05:52
APIを直で使うなら、何も困らないわけで。
Phobosから使えないのが問題なんでしょ。
640デフォルトの名無しさん:2007/01/27(土) 22:08:11
もういっそのこと 1.00004 くらいにしとけばいいのにね。
641デフォルトの名無しさん:2007/01/27(土) 22:30:22
>>638
あれ?そうなんだ・・・知らん買った。
642デフォルトの名無しさん:2007/01/27(土) 22:33:37
>>641
その気になればWin32用のm17nなコンソールテキストエディタだって書けるんだぜw
643デフォルトの名無しさん:2007/01/27(土) 22:42:45
てかエディタなら普通_UNICODEで作るんじゃね?
もうマルチバイトはやめようぜ、これからはUTF32の時代さ
644デフォルトの名無しさん:2007/01/27(土) 23:01:46
どこの文字セットを使うんだよw
645デフォルトの名無しさん:2007/01/27(土) 23:36:23
>>644
は?
646デフォルトの名無しさん:2007/01/27(土) 23:42:43
せめてUTF32に_UNICODEディレクティブは関係ないとか突っ込んで欲しい
647デフォルトの名無しさん:2007/01/28(日) 13:12:31
>>637
亀レスでスマソがtoMBSzの使用例
printf("%s\n", toMBSz("ほげ"));

648デフォルトの名無しさん:2007/01/28(日) 13:49:55
T[] insert(T)(T[] source, T[] insertIt, size_t position){
  return source[0..position] ~ insertIt ~ source[position..$];
}
phobosにこれくらい入ってて欲しいなー、程度の意味じゃなかったの? ちなみに俺も欲しい。
パフォーマンスが極端に要求される場合は、別のデータ構造を使うだけだけだし。
649デフォルトの名無しさん:2007/01/28(日) 13:53:29
静的配列でinsertは危険が伴うと思うんだが、勝手に拡張してくれるのかな。
stlやcollection framework互換のライブラリ作るのがいいさね。
このスレ用のソースをうpする場所ってない?
650デフォルトの名無しさん:2007/01/28(日) 14:19:03
ていうかDTLはどうなったんだ
651デフォルトの名無しさん:2007/01/28(日) 14:24:06
ASCII/latin-1圏の人々って、絶対char[]のlengthを文字数の意味で使ってるんだろうなぁ。
バイト数なのに。それが通じるのはASCII/latain-1系文字だけなのに。
作ったソフトが思いの外世界でウケちゃったときに、
「日本語対応してねー」「パッチくれー」って右往左往することになるのに(日本人が)。

文字列は組み込みのStringクラスにして欲しいなー。
んでlengthとbyteSizeとか分けたプロパティを用意して、
文字とバイトの違いをちったぁ意識させて欲しい。
652デフォルトの名無しさん:2007/01/28(日) 14:49:52
>>637
> 仕方ないのでPoderosa-Cygwin経由で無理やりutf-8表示させてみますた。

ckのほうが軽いし文字の自動認識もしてくれていいよ!とか言ってみる。
……逆にcmd.exeで文字化けることに気づかないのが問題だが。
653デフォルトの名無しさん:2007/01/28(日) 14:50:07
とりあえず、動的配列.insert(pos,value)があったらいいなぁ。
んでもって連想配列.clearも
ってか、実はすでにあったりするの?

言語仕様の確定後かつ関数書けよって話でアレだが
a &== b みたいな構文で ( a & b ) == b と等価とか
a |== b みたいな構文で ( a & b ) != 0 が等価とかもちょっとほすぃ
654デフォルトの名無しさん:2007/01/28(日) 15:42:36
>>653
class つくって好きにやって下さい。
655デフォルトの名無しさん:2007/01/28(日) 16:16:10
>>653
>>654
利用頻度の高いユーティリティメソッドとか、
標準で入ってるかって点がかなり重要なんだよね……。
commons-langとかJVMに入れちゃおうよMr.ごすりーんー……とJavaマの嘆き。

何にせよ、言語仕様の方が1.0が出たことだし、
お次はphobosを強化・改善に取り組まんとな……今のままじゃやはり貧弱ゥと言わざるを得ない。
Javaや.Net、boostレベルまでもってくのは大変だろうけど。
656デフォルトの名無しさん:2007/01/28(日) 16:19:19
phobosでなくとも、何か標準で採用されるライブラリを作れれば良いんだ!
657デフォルトの名無しさん:2007/01/28(日) 16:31:17
各型用のエンディアン変換関数をphobosにいれた方がいい様な気がした。
658デフォルトの名無しさん:2007/01/28(日) 17:00:48
ライブラリは割と揃ってると思うけどな。Cの財産も使えるわけだし。
659デフォルトの名無しさん:2007/01/28(日) 17:03:19
×財産
○遺産
660デフォルトの名無しさん:2007/01/28(日) 17:14:09
命名規則が統一されてる新ライブラリを希望
661デフォルトの名無しさん:2007/01/28(日) 17:14:37
>>655
Java並になって欲しいのは確かだけど、Javaのように密林化して欲しくないな。
662デフォルトの名無しさん:2007/01/28(日) 17:26:22
Cのライブラリが遺産ってのは賛同できかねるな。
663デフォルトの名無しさん:2007/01/28(日) 17:31:23
>>662
ライブラリ同士のコンパチビリティが低いのがねぇ。
664デフォルトの名無しさん:2007/01/28(日) 17:36:46
なんでそんなもん気にしてるのよ?
どうせWindowsでしか使わないんでしょ?
665デフォルトの名無しさん:2007/01/28(日) 17:39:17
>>664
Linuxで使ってますが何か?
666デフォルトの名無しさん:2007/01/28(日) 18:54:00
俺もlinuxで使ってるよ。
667デフォルトの名無しさん:2007/01/28(日) 19:00:20
俺もlinux。
てかWindowsだと正直C#でいい感じ。
linuxにはいい言語が無かったところにDがきたって感じ。
668デフォルトの名無しさん:2007/01/28(日) 19:04:27
別にWindowsだからどうのって事が言いたいんじゃなくて、
コンパチビリティなんか気にする必要は無いだろうといいたいんだけどな。
Linux使っているなら、どうせLinuxでしか使わないんだろって言うよ。
669667:2007/01/28(日) 19:21:01
>> 668
なるほど。それなら俺も同意。
むしろコンパチビリティのためにやたら制限キツくなった言語とか使いたくない。
それこそDの言ってる”実用性”ってのがない。
670デフォルトの名無しさん:2007/01/28(日) 19:21:57
正直WindowsとLinux両方で使ってる。
671デフォルトの名無しさん:2007/01/28(日) 19:35:08
プラットフォーム間の互換性は重要だと思うが。
ユーザとしちゃ片方しか使わないかもしれんが、
ウチら開発者なんだから、どうせならWinユーザもLinuxユーザも使えるもの作りたい。

しかし>>663の言うコンパチビリティって、
複数ライブラリ間の相互運用性のことじゃないのか。

たとえばXMLパーサとYAMLパーサがあったとして、
どっちもstd.stream.Stream使ってデータを読むようになってれば、
FileStreamだろうとMemoryStreamだろうと自作のStreamだろうと使えるという。

Cだけじゃそういうのはちょいと手間かかりそうだね。
672デフォルトの名無しさん:2007/01/28(日) 20:12:55
JavaやC#のように、バイトストリームとテキストストリームの区別を
ちゃんとつけて、エンコーディング絡みの問題はI/Oレイヤに隠蔽すべきだろ。

テキストストリームの場合はデフォルトではシステムのコードページや
LC_CTYPEに従ってUTF-8との変換を行うべきだし、明示的にエンコーディングを
指定することも可能になっているべきだ。
ただしWin32かつコンソールI/Oの場合は、可能ならW系APIを使うようにすべき
だろう。

単にハローワールドしたいだけのユーザが、明示的に
std.windows.charset.toMBSz()なんてものを使わないといけないのは
馬鹿げている。
673デフォルトの名無しさん:2007/01/28(日) 20:48:48
std.file等へのtoMBSz()ハックが仕込まれているのがWin32だけなら、
Linux環境では実質UTF8ロケールじゃないと使い物にならないってことだよな。
……駄目じゃん。それじゃ実用的な言語にはならないよ。

char[]のエンコーディングをUTF-8と仮定した時点で、外部がそうとは限らない
実世界で使われる実用的プログラミング言語としては、システムとの界面において
エンコーディング問題の一切の泥仕事をを引き受ける必要が生じるって
ことなんだがな。
674デフォルトの名無しさん:2007/01/28(日) 20:55:23
> ウチら開発者なんだから、どうせならWinユーザもLinuxユーザも使えるもの作りたい。
VMっていう答えがもう出てるからなあ。

> 複数ライブラリ間の相互運用性のことじゃないのか。
そんなこと言い出したらきりが無いと思うんだけど。
その時その時で出来る限りのコードを書くしかないし。
俺らが今書いているコードだって、未来には別な概念を持った言語が生まれてて、
気持ち悪いとか言われてるんだぜ、きっと。
675デフォルトの名無しさん:2007/01/28(日) 21:02:37
>>674
ある程度移植性の高いコードはCでも書けるべ。
分野によっては厳しいけど。

んでも、ToMBSz()とか使わないといけない時点でDでは厳しいなw
何コレ。
Win32ベッタリじゃん。
676デフォルトの名無しさん:2007/01/28(日) 21:10:19
JavaのIOはホント理想的な設計だなぁ……
バイナリ担当のInputStream/OutputStreamと
文字担当のReader/Writerが分かれてて、
両者の境界では必ずエンコーディングが与えられる。

Dは文字とバイナリの区別が曖昧な気がする。
とりあえず英語環境じゃ困らないから、
Cの実装に丸投げして間に合わせたりして、
細かい設計は後回しにしてるのか……?

ちょっとソース読んでみるかねぇ。
677デフォルトの名無しさん:2007/01/28(日) 21:26:58
すまんが教えてくらさい
クラスの継承はすべてpublic継承なの?
private/protected継承はないのか
678デフォルトの名無しさん:2007/01/28(日) 21:43:16
仕様的にはできるはず

ClassDeclaration:
 class Identifier BaseClassListopt ClassBody
BaseClassList:
 : SuperClass
SuperClass:
 Protection Identifier
Protection:
 private
 package
 public
 export
679デフォルトの名無しさん:2007/01/28(日) 21:44:44
>>676
char[]がUTF-8と仮定することで多くのMBCS問題を回避することはできるが、
その代わりに、Cのcharがただのバイトでしかなかったことで避けていた
問題にブチあたってる感じ。

Javaや.NETのアプローチは流石に賢いし正しいね。
680デフォルトの名無しさん:2007/01/28(日) 21:46:12
>>675
かといって、Win32 UNICODEなプログラムを書こうとしても、
今度はwcharな文字列操作関数が全然ない。
681デフォルトの名無しさん:2007/01/28(日) 21:48:49
要するに1.0は出たものの、実用上まだまだだってことですかな。
682デフォルトの名無しさん:2007/01/28(日) 21:49:41
この辺、.NETはどう解決してるんでしょうか?
って、スレ違いか
683デフォルトの名無しさん:2007/01/28(日) 21:50:25
>>677
きっと、同一モジュール(ソース)内に、書いて private が効いてないとか言うオチの予感。


684デフォルトの名無しさん:2007/01/28(日) 21:54:02
>>682
.NETはほぼJavaと同じ。

Win32ベッタリなだけに、DLLやCOMとの相互運用性がもともとサポートされており、
ライブラリ側のchar*とのエンコード変換は、import指定の際に、簡単な
属性の形で記述できる。この辺はJavaより便利で楽な点かな。
685デフォルトの名無しさん:2007/01/28(日) 22:05:33
>>683
いやそれは大丈夫

C++と違ってクラスの初期アクセス指定と継承はpublicなんだね
モジュールがデフォルトでprivateなようにそれらもprivateかと思ってたよ
あと下のコードがコンパイル通るね
C++だと非public継承のとき通らないはず

// module x;
class A { /*public*/ void run(){} }
class B : /*public*/ A {}
class C : public A {}
class D : private A {}
class E : protected A {}
// hello.d
import x;
void main() {
A a = new A;
A b = new B;
A c = new C;
A d = new D;
A e = new E;
a.run();
b.run();
c.run();
d.run();
e.run();
}
686デフォルトの名無しさん:2007/01/28(日) 22:07:23
さすがにもう来ないんじゃね?
687デフォルトの名無しさん:2007/01/28(日) 22:07:32
こうするとちゃんとエラーになったが

A a = new A;
B b = new B;
C c = new C;
D d = new D;
E e = new E;

hello.d(16): class b.D member run is not accessible
hello.d(17): class b.E member run is not accessible
688デフォルトの名無しさん:2007/01/28(日) 22:35:03
端から見てるだけであんまり詳しくないのだけど、
int32とかint64とかそういうINTxx的なエーリアスが標準でついていて、保障されてるとうれしいなー。
689デフォルトの名無しさん:2007/01/28(日) 22:46:07
配列のメソッドっぽい方式の関数群を
ライブラリとして、Arraysって感じに集積してみてはどうだろうか。
cppのSTL並に有用なライブラリになりそうなんだけど。
690デフォルトの名無しさん:2007/01/28(日) 23:09:23
>>688
std.stdintが既にある
691デフォルトの名無しさん:2007/01/28(日) 23:18:43
もともと標準の型がサイズ保証されてるから、意味ないと言えば意味ないか。
692デフォルトの名無しさん:2007/01/28(日) 23:33:20
>>690
お。あるんですね。
CPPで開発してても標準でそういうものが無いみたいなのでいつもビクビクしながら作ってたんですよ。
それだけでも結構、価値があるように思いますー。
693デフォルトの名無しさん:2007/01/29(月) 00:02:39
結局D言語って、
今までの言語ですごくほしい、、と思ってた機能がある
かわりに
今までの言語で湯水のようにすんなりと使って、気づいてなかった
ところが、まだ実装されてない。

っていう状態なんだな。
694デフォルトの名無しさん:2007/01/29(月) 00:17:19
身の程を弁えないDeimos争いがこれから始まると思うとわくわくしてきた
695デフォルトの名無しさん:2007/01/29(月) 00:24:56
phobosが公式ライブラリ群でdeimosがユーザーライブラリ群という住み分けとか、そういうの?
696デフォルトの名無しさん:2007/01/29(月) 00:30:30
dtlのサイトがなくなってるっぽいところを見ると
dmあたりが統制を取ろうとしてるのではないかと邪推できる
697デフォルトの名無しさん:2007/01/29(月) 00:40:04
第二のMSにならないことを願ってる。なんてね。
まー、誰かが音頭取らないと発展しないし、カリスマ発揮して旨く転がしてほしいね。
698デフォルトの名無しさん:2007/01/29(月) 00:52:18
>>693
まだVer.1が出たばっかだから、粒の粗い方を処理してる感じなんだろうね。
俺はもうちょっと様子見かな。
でも、Dはホント普及してほしいよ。
メモリ管理が面倒でSTLに逃げたりnewしない方向ばかり検討したり、根性曲がってしもた。
699デフォルトの名無しさん:2007/01/29(月) 00:54:32
DとPHPがあればOKだと思っている俺がいる。
700デフォルトの名無しさん:2007/01/29(月) 01:05:06
700
701デフォルトの名無しさん:2007/01/29(月) 01:07:25
僕も発展したDがあれば永住しそうだ。(いいすぎかな。XP
702デフォルトの名無しさん:2007/01/29(月) 01:20:10
ares と mango が統合して tango とかになるんじゃなかったっけ?
703デフォルトの名無しさん:2007/01/29(月) 03:36:24
ちょっとstd.stdioとstd.cstreamを改造してマルチバイトで出すようにしてみた。

http://marmotfarm.com/cgi-bin/upload2/source/up88338.zip

直リンダメだったら以下からup88338.zipで。
http://marmotfarm.com/cgi-bin/upload2/upload.cgi

こんなんでも少しは役に立つかな……立たないかな……。
704デフォルトの名無しさん:2007/01/29(月) 04:44:38
toMBSz()はWideCharToMultiByte()なんぞを使わずとも
C標準のwcstombs()等で実装できるし、そうすればWin32依存性が無くなる。
libcの実装が正しければ、どの環境でもまともに動くはずだ。

C標準のstdioやstdlibのw系I/Oおよび変換関数は、あらかじめ
setlocale()を呼んでおかなければまともに機能しないという問題があるが、
ここはいっそ
setlocale(LC_CTYPE, "");
をDのスタートアップルーチンで実行しても良いぐらいだと思う。
UNIX+Cの世界でのI18N関連でもこうしたことは常識のはずだが、
一体何を考えているのやら。

I/Oレイヤに関しては、こう言っては何だが、ぶっちゃけ現状の設計が糞なので、
小手先でいじってもどうにもならんように見える。

そもそもDはせっかくbyteとcharを別の型として用意しているんだから、
もっとそれを意識すべき、させるべきだろう。
型が違えばユーザに変換の必要性を意識させることもある程度は可能なはずだ。

std.c.stdio.printf()のような物の引数が、平然とchar*として宣言されているのは、
正気とは思えない。
DはcharをUTF-8文字と定義しているのだから、Cインタフェースにおけるchar*は、
byte*と宣言されるのが正しい筈ではないか。

これは、byteとcharのキャストは一体どう扱われるべきか、という別の疑問点も
引き起こすが。
705デフォルトの名無しさん:2007/01/29(月) 09:45:59
toMBSzってwindows以外でも使うのか?
706デフォルトの名無しさん:2007/01/29(月) 10:14:50
使う
707デフォルトの名無しさん:2007/01/29(月) 11:28:32
>>704
Cに標準で入ってたんか……。試してみよう。
Cだとunsigned charをバイト値として使うのが当たり前だったせいか、
それを引きずる人が、そこかしこで混同してるみたいですな。
toMBSzの戻り値とかもUTF-8じゃない以上ubyte*あたりでないとおかしいですね。
そのうち"Invalid UTF-8 sequence."が出そうなのに。

Phobosの再設計が必要なのは明らかだし、
「Dの新ランタイム」たらんとしてるプロジェクトもいくつかあったはずだけど、
現状どうなってるんでしょ。
dsource.orgのLibraries-System見ても、
 ・Deimos - alpha
 ・dool - (何も書かれてないぞオイ)
 ・Ares - >>702で進行中?

というわけでares-mangoあたりが有望そう?
forumに"Deprecating Ares"てポストもあるし、ちょっと読んでみようか。
708デフォルトの名無しさん:2007/01/29(月) 12:56:48
>>707
C標準はwchar_tのサイズもエンコーディングも定義していないので、
そこんとこは注意。
今時の実装ではまず通常はUnicodeだが、2byteではなく4byteであることは多いし、
cygwinで使われているnewlibのように、localeまわりが非常にpoorでUnicode
ベースではない実装もある。
そうしたものは切り捨てるにしても、wchar_tのサイズによって、UTF-16か
UTF-32かの分岐は必要になるだろう。

完璧さを期すならD自身が変換を管理すべきだろうが、そういうことを
やっているとランタイムが大きくなってしまうんだよな。Javaレベルまでは
いかないにしても。
Unicode絡みでは定評のある、IBMのライブラリICUのicudt.dllは10MBもある。
これは単にデータを持っているだけのDLLで、関数やクラスは他で定義されている
というのに、だ。
709デフォルトの名無しさん:2007/01/29(月) 13:10:40
おはようございます
710デフォルトの名無しさん:2007/01/29(月) 13:20:57
そもそもCはunsignedでないcharをフツーに文字列として使ってるけど、
それって既に8bitクリーンじゃないって事にはならないの? 昔からの疑問……。
711デフォルトの名無しさん:2007/01/29(月) 13:26:52
>>704
versionは生かしたいところだな。あれは(#ifに比べて)いいものだ。
MacOSXが定義されてない、と思ったらdarwinと定義する人が多いね。
712デフォルトの名無しさん:2007/01/29(月) 13:33:18
>>710
charをそのままctype.hのマクロに渡したり、128以上の整数と比較したりする
コードがあればNG。
そういうことをやっていないのなら問題ない(と言い切ってしまうのは問題が
あるかもしれないが)。

マンドクセーから-funsigned-charだの-Jだのといったコンパイラオプションで
charを強引に無符号にしてしまうケースもしばしば見られるな。
713デフォルトの名無しさん:2007/01/29(月) 14:26:41
D言語のcharってubyteと同じではないの?
714デフォルトの名無しさん:2007/01/29(月) 15:34:00
Phobosはいずれ壊されるかな?結構不安だな。
715デフォルトの名無しさん:2007/01/29(月) 15:52:21
ttp://www.cgh.ed.jp/TNPJP/nineplanets/phobos.html
フォボスは、いずれ壊れる運命にあります。
なぜなら、フォボスの軌道が静止軌道の内側であるため、潮汐力がフォボスを火星の方に引っ張るからです。
1億年以内に、フォボス は破砕されて火星の輪になるか、火星表面に激突するでしょう。
716デフォルトの名無しさん:2007/01/29(月) 18:37:11
>>715
>1億年以内に...
なら安心だ。
717デフォルトの名無しさん:2007/01/29(月) 19:01:59
いや、以内なんだから今年かもしれんぞ
718デフォルトの名無しさん:2007/01/29(月) 21:06:35
Phobosは引力に惹かれ、いずれAresに、か……

>>708
なんだか訳が分からなくなってきたw
元々詳しい分野でもなかったんで、これからまったりと勉強してきまふ。
というか、WideCharとかMultiByteとかWinAPIのA版W版とか、
なんど勉強してもいまいち正確な定義やそれぞれの関連が理解しきれんw
719デフォルトの名無しさん:2007/01/29(月) 21:13:02
>>718
この手の物は完全にバットノウハウだしなw
720デフォルトの名無しさん:2007/01/29(月) 21:21:41
俺も何がなんだか、わからなくなった・・・

・WinAPIのA版は、ASCIIだけど、W版の文字コードは?
・D言語の標準的な文字コードは?
721デフォルトの名無しさん:2007/01/29(月) 21:26:20
>>720
・Windows A:ANSI, W:UTF-16
・D言語  char:UTF-8, wchar:UTF-16, dchar:UTF-32
・C言語  char:環境によっていろいろ, wchar_t:環境によっていろいろ
722デフォルトの名無しさん:2007/01/29(月) 21:52:59
typedef char ansi;
typedef char mb_char;
typedef mb_char utf8;
typedef mb_char shift_jis;
とかあると便利じゃないだろうか
723デフォルトの名無しさん:2007/01/29(月) 23:06:05
というか、Dの文字列って正直・・・

typedef ubyte UTF8
typedef ubyte ANSI
    ・
    ・
    ・

みたいな物がよかったよ。
で、charは無くてよし。
724デフォルトの名無しさん:2007/01/29(月) 23:09:43
WideCharという考え方:
 我らには1バイト256文字では到底足りぬ。ABCも特別扱いはせん。全て固定で2バイトじゃー。
 いやいや兄者、どうやら2バイトを持ってしても足りぬこともあるようだ。いっそ4バイトほど。
 ええい、とにかく固定サイズよ。
MultiByteという考え方:
 そうは言うがな大佐、今までのASCIIとの互換性というものがある。
 それに、確かにアルファベット以外も出てくるが、大半はアルファベットしか書かれない事も多い。
 ASCII文字は1バイト、それ以外は1文字が2バイト以上にもなりうる「可変」というのはどうだ?
SingleByte(?)という考え方:
 アジアの人とか大変だなぁ……。でも1バイトな僕らだけど、
 バイト数が固定(1だけど)という意味では、処理のされ方はWideCharの方が近いのか……。
 でもMultiByteだって普通ASCII互換だし、MultiByteで扱われても大抵困らないと。イェィ。
 え? 1バイト=1文字の仮定で文字列操作するな? 国際化対応とかめんどくさいなぁ……。

各エンコーディングの所属:
 WideChar派: UTF-16("Unicode"といえば一般的にはこれ)、UTF-32など
 MultiByte派: Shift_JIS、EUC-JP、UTF-8など
 SingleByte派: ASCII、Latin-1(ISO-8859-1)など

Windows曰く:
 WideCharは処理が単純だから速度的に有利っすけど、MultiByteよりメモリ食うっスね。
 せっかくWideCharは構造が単純なんだから、生かせる場合は生かしたいし……。
 で、WideCharにはW、MultiByteにはAを用意しといたっス。
 どっちでも各国語扱うことはできるんで、速度とかメモリとか、
 WideCharはどこでもUTF-16固定、MultiByteについては国と言語の設定から。
 皆さんだとShift_JISっすね。ちなみに他のエンコーディングを明示
 
……こういう理解で良いんでしょうか先生。Windowsの当たりかなり自信無いっす。
725デフォルトの名無しさん:2007/01/29(月) 23:13:10
むしろ世の中の方をUTF8,16,32にすりゃいい
726デフォルトの名無しさん:2007/01/29(月) 23:23:09
テキストエディタ自作してたオレからすると、メモリ上でUTF8とかアリエン。
ファイルフォーマットとしてなら許容するが
727724:2007/01/29(月) 23:44:14
うわん、Windowsのくだり途中で書き込んじゃったし。
もうどうせだから、もっと色々書いちゃう。

WideCharにはW、MultiByteにはAを用意しておきました。
具体的なエンコーディングで言うと、WideCharはどこでもUTF-16固定、
MultiByteは国と言語の設定から自動的に選択されます。たとえば日本ではShift_JISです。
どっちでも各国語扱うことはできるんで、速度とかメモリとか、いろいろ考えて選んでください。

ちなみにWideCharToMultyByteなどの変換などでは、
当然エンコーディングを明示することもできます。
ウチでは各エンコーディングにコードページという番号を付けて管理しており、
たとえばShift_JISなら932、UTF-8なら65001です。前述の関数にこの数値を渡して下さい。

我々の提供するwindows.hでは、W/Aを#define UNICODEの有無によって
切り替えるようになっており、代わりにW/Aの取れたマクロを使うことになります。


で、Dが利用するdmcのsnn.libというCランタイムは、
コンパイルするときに#define UNICODEなんてされてない。
故にシステムに対する文字入出力には問答無用でA系が使われ、
Shift_JISでなくUTF-8が流されるから文字化けする……と?
728デフォルトの名無しさん:2007/01/30(火) 00:45:54
Mac に DMD 入れて遊ぼうかと思ったんだけど、Mac版ってないのん?
729デフォルトの名無しさん:2007/01/30(火) 00:49:07
DMDはない。GDCならある。
730デフォルトの名無しさん:2007/01/30(火) 00:52:09
Shift-JIS と CP932 は厳密に言うと微妙に違うみたいだけどね。
731デフォルトの名無しさん:2007/01/30(火) 00:54:16
そっか。残念。←大のGNU/GPL嫌い。
732724:2007/01/30(火) 01:04:58
あ、いや違うか。
標準入出力はバイナリストリームなんだからAもWも無いのか。
WriteConsoleとかの文字列を扱うためのAPI以外は。

むしろcmd.exeが、標準出力から受け取ったデータをShift_JIS文字列として解釈する仕様で、
でもphobosがUTF-8にして流してるせいで文字化けする、と。

何を長々と書いているんだ俺は。みんなゴメンよ。もう寝ます。
733デフォルトの名無しさん:2007/01/30(火) 01:22:19
cmd.exeは普通にUTF-16解釈できるだろ
734デフォルトの名無しさん:2007/01/30(火) 04:38:30
もうどーでもいいから適当に統一してくれ…
735デフォルトの名無しさん:2007/01/30(火) 07:39:30
>>734
誰もがそう思ってるが実現されない不思議
736デフォルトの名無しさん:2007/01/30(火) 08:43:45
0〜9を連続するコードに割り当てた香具師が勝つ
737デフォルトの名無しさん:2007/01/30(火) 08:45:40
〇〜九だった〇九
738デフォルトの名無しさん:2007/01/30(火) 11:29:19
UTF-16は2byte/4byteのマルチバイト
ちゃんとした実装があるかは知らん
739デフォルトの名無しさん:2007/01/30(火) 11:37:48
サロゲートペアがあるからな。
2バイト固定は UCS-2 だな。
740デフォルトの名無しさん:2007/01/30(火) 13:52:47
interface I{}
static if(!is(I : Object)){
 static assert(false);
}

これが通らないのはバグと言えるんでしょか。
でないとしたら、テンプレートで受け取った型がtoString()持ってるかどうか
判定するにはどうすればいいと思います?

Is式の項目を見るとどうにも、
static if(!is(I : interface)){
static assert(false);
}
とか書けるように見えるような……。
741デフォルトの名無しさん:2007/01/30(火) 16:14:12
interfaceからObjectへの暗黙の変換はできないからバグじゃないだろう。

自分は
void tmpl(T)(T obj) {
static if( is(T == interface) ) (cast(Object)obj).toString() ...
else static if( is(T == class) ) obj.toString() ...
}
とかやってる
742740:2007/01/30(火) 20:37:52
>>741
なるほど==の方ですか……。
ありがとうございました。うまくいきました。
743デフォルトの名無しさん:2007/01/31(水) 01:20:00
とりあえず現状ではWindowsの多言語開発には向かないって事だね兄さん?
744デフォルトの名無しさん:2007/01/31(水) 01:22:49
そうだね。ギークが畑耕した頃に触るといいと思うよ。
745デフォルトの名無しさん:2007/01/31(水) 01:48:00
>>738
ICU

stdcのwcschrとかその辺のstring.hのcomplementsや、
stdc++のwstringは、
UTF-16の場合は結局MBCSと同じ泣き別れ問題を引き起こすわな。

>>743
Windowsに限った話じゃない。
実行環境がUTF-8ロケールでない「あらゆる」環境に向かない。
746デフォルトの名無しさん:2007/01/31(水) 02:24:03
英語しか使わなきゃいいんじゃね?
747デフォルトの名無しさん:2007/01/31(水) 02:52:02
中国語でおk
748デフォルトの名無しさん:2007/01/31(水) 02:52:24
>>746
米国人もTMだの(C)だのの非ASCIIなLatin-1記号は結構使うものだよ
749デフォルトの名無しさん:2007/01/31(水) 10:31:31
Windows2000ならDOS窓の設定でUTF-8表示にできるな
なんでXPでできなくなってんだよ
750デフォルトの名無しさん:2007/01/31(水) 10:43:24
chcpで変更はできるけど。
めんどいな。
751デフォルトの名無しさん:2007/01/31(水) 10:47:22
chcpで65001入れてもバケた俺は何がダメなんだろう。utf-8のコードページて65001ダヨネ?

もうみんなck使おうぜck。Dが日本語化けるなんて気づかなかったぜ俺。
752デフォルトの名無しさん:2007/01/31(水) 10:47:37
コードページならショートカットで指定できるけどUTF-8も?
753デフォルトの名無しさん:2007/01/31(水) 17:09:05
sizeをメンバ変数で使えないのは痛い・・・
754デフォルトの名無しさん:2007/01/31(水) 17:41:02
>>753
何の話?
755デフォルトの名無しさん:2007/01/31(水) 18:09:13
super size me!
756デフォルトの名無しさん:2007/01/31(水) 18:49:39
というかいつの話
757デフォルトの名無しさん:2007/02/01(木) 01:03:50
さっきまで問題になってたUTF8。
某すごい人が、blogですぱっと解決してくれたな・・・。
758デフォルトの名無しさん:2007/02/01(木) 02:46:16
>>757
どこ?
759デフォルトの名無しさん:2007/02/01(木) 02:49:06
ごめん、どこっていうのも恥ずかしいところでした。

D言語のリファレンス訳書いている人んところですね。
760デフォルトの名無しさん:2007/02/01(木) 03:25:24
秘密にするのはその方がカッコイイから?
761デフォルトの名無しさん:2007/02/01(木) 03:35:28
そうだね、ちょっとインパクトを加えたかった
762デフォルトの名無しさん:2007/02/01(木) 03:42:32
弟子にしてください
763デフォルトの名無しさん:2007/02/01(木) 10:17:27
おりょ? inabaしゃんのインターフェースでも、
UTFじゃないはずのネイティブな文字列データがchar[]扱いだ。
あんだけたくさんの言語に触れたあの人でも、Cのお約束引きずってるのかな。

それともwcstombsとかに渡すときに、いずれchar*にキャストしなきゃいかんから……か?
いや、ubyte[].ptrをchar*にcastしたところで、何の変換コードが走るわけもなし。
いっそstd.cのimport文をWalterに書き換えて貰わんと根本的な解決にはならんのか。

いやそれより、main引数のchar[][]て、
今までUTF-8変換されてなかったのかw
764デフォルトの名無しさん:2007/02/01(木) 12:52:12
>>763
今の用途だと、char[] 以外にしても単純に全部の使用箇所でcastが
必要になって使いにくいだけなので…
# ネイティブ文字コードなのに char[] で受け渡ししてくる
# ライブラリ(含Phobos)を応急処置で外から使うためのものなんで

自分で一からDの文字コード周りを再設計するならそりゃ別の型にするけども。
765デフォルトの名無しさん:2007/02/01(木) 14:17:24
>>764
お世話になっとります
766デフォルトの名無しさん:2007/02/01(木) 15:18:09
一番の問題はUTF8さえやっときゃいいんじゃねと思ってる1バイト圏の人が多いから
767デフォルトの名無しさん:2007/02/01(木) 15:29:50
質問です
D言語って代入はあるの?
768デフォルトの名無しさん:2007/02/01(木) 16:22:07
>>767
ある
と言っておけばいいのか
769デフォルトの名無しさん:2007/02/01(木) 16:27:21
すみません間違えました
挿入です
770デフォルトの名無しさん:2007/02/01(木) 16:52:04
Tango 0.95 beta1 released
771デフォルトの名無しさん:2007/02/01(木) 16:52:14
何を何に挿入したいのかわかんないと判断のしようがないと思うが。
772デフォルトの名無しさん:2007/02/01(木) 17:55:32
D言語を通して 彼女の後ろの穴に 挿入したい
C#やJavaでは 仮想的な実装になるので 現実味を帯びていない
773デフォルトの名無しさん:2007/02/01(木) 18:43:34
poseidon死んだのか?
774デフォルトの名無しさん:2007/02/01(木) 18:47:09
海を行け〜
775デフォルトの名無しさん:2007/02/01(木) 18:49:36
>>770
おー、やっと普通に
import tango.io.Stdout;
void main() { Stdout("Hello, world!")(); }
がコンパイル通るようになってる。
776デフォルトの名無しさん:2007/02/01(木) 18:52:18
>>773
poseidonってとっくに死んでたはずだけど。
777773:2007/02/01(木) 19:17:51
>>776
そうなんか、教えてくれてありがとう
となるとみんな何使ってんの?
778デフォルトの名無しさん:2007/02/01(木) 19:26:04
779デフォルトの名無しさん:2007/02/01(木) 23:03:46
俺はJmEditorかTeraPad

インテリセンス?なにそれおいしい?
780デフォルトの名無しさん:2007/02/01(木) 23:32:54
とっても甘美なのです
781デフォルトの名無しさん:2007/02/01(木) 23:43:12
>>764
うーむ。実はどことなく釈然としませんが、たぶん私が未熟なだけなのでせう。
もーちょいいろんなIO関係のコード読んで勉強しまっす。多謝。


で、Descentも使わずEclipseのテキストエディタ使ってるのなんてきっと俺だけ・・。
自動ビルダ設定とSVN統合だけが友達さー。他でも出来るなんて言わないでー。
782デフォルトの名無しさん:2007/02/01(木) 23:52:22
tangoってどこ?mangoとaresしか見つからんのだが。
783デフォルトの名無しさん:2007/02/02(金) 00:39:13
784デフォルトの名無しさん:2007/02/02(金) 01:53:54
連想配列いっきに初期化できないかなー・・・

int a[char[]]={
"aaa":1,
"bbb":2,
"ccc":3
}

なんてなー・・・
785784:2007/02/02(金) 02:08:16
おっとずいぶん前に
>>284-285
786デフォルトの名無しさん:2007/02/02(金) 10:43:09
>>784
あんまりきれいじゃないけど、こんなのどう?
cast(char[])が取れればなぁ

import std.stdio;

// 連想配列初期化
V[K] newAssocArray(K, V, R...)(K key, V value, R rest)
{
  static if (rest.length > 0)
    V[K] result = newAssocArray(rest);
  else
    V[K] result;
  result[key] = value;
  return result;
}

int main(char[][])
{
  int[char[]] a = newAssocArray(
    cast(char[])"Foo", 1,
    cast(char[])"Bar", 2,
    cast(char[])"Hoge", 3);

  foreach (char[] k, int i; a) {
    writefln(k, ": ", i);
  }
  return 0;
}
787デフォルトの名無しさん:2007/02/02(金) 12:59:11
適当に改造

template foo(T) { alias T foo; }
template foo(T:T[]) { alias T[] foo; }
foo!(V)[foo!(K)] AA(K,V,R...)(K key, V value, R rest)
{
 foo!(V)[foo!(K)] result;
 static if(rest.length > 0)
  result = AA(rest);
 result[key] = value;
 return result;
}

int[char[]] a = AA("Foo", 1, "Bar", 2, "Hoge", 3);
788784:2007/02/02(金) 13:32:34
>>786-787
うぉっ・・・
ありがとうございます!
789デフォルトの名無しさん:2007/02/02(金) 15:15:52
こういうのをバッドノウハウっていうの?
790デフォルトの名無しさん:2007/02/02(金) 18:36:13
templateって難しくて付いていけない orz
>>787のAA()は展開されると、どんな記述と等価になるの?
791デフォルトの名無しさん:2007/02/02(金) 19:25:49
連想配列の静的な初期化って出来そうで出来ないよな。
やっぱ実行時に動的に追加してるからかな。
792デフォルトの名無しさん:2007/02/02(金) 23:14:09
>>790
大体こんな感じかなあ

int[char[]] result1;
result1["Hoge"] = 3;

int[char[]] result2;
result2 = result1;
result2["Bar"] = 2;

int[char[]] result3;
result3 = result2;
result3["Foo"] = 1;

要素の数だけ連想配列のデフォルトコンストラクタ(?)を呼んでいるのが
ちょっと効率悪いような気がする。
793デフォルトの名無しさん:2007/02/02(金) 23:18:22
連想配列って、普通の配列と内部的に違うの?
794デフォルトの名無しさん:2007/02/02(金) 23:19:18
違う
795デフォルトの名無しさん:2007/02/02(金) 23:37:21
D言語ってパターンマッチできますか?
796デフォルトの名無しさん:2007/02/03(土) 00:26:57
>>792
調子に乗ってみた。

template tf(T) { alias T tf; }
template tf(T:T[]) { alias T[] tf; }

FV[FK] AA(K, V, FK=tf!(K), FV=tf!(V), R...)(K key, V val, R rest)
{
 FV[FK] result;
 
 SetAA(result, key, val, rest);
 
 return result;
}

void SetAA(K, V, FK=tf!(K), FV=tf!(V), R...)(inout FV[FK] result, K key, V value, R rest)
{
 result[key] = value;
 static if (rest.length > 0)
  SetAA(result, rest);
}

auto aa = AA("hoge", 12, "moge", 34, "mage", 56);
797デフォルトの名無しさん:2007/02/03(土) 02:02:00
Dってどんな言語?が緑色に染まってます、、、
308行目のspan閉じてないからみたいです
798デフォルトの名無しさん:2007/02/03(土) 04:02:41
>要素の数だけ連想配列のデフォルトコンストラクタ(?)
はただポインタコピーするだけだからほとんど無視できるはず

再帰関数テンプレートのinline展開はしてくれないぽいので、効率を求めるなら
FV[FK] AA(K, V, FK=tf!(K), FV=tf!(V), R...)(K key, V val, R rest){
 FV[FK] result;
 result[key] = val;
 foreach(i,k; rest)
  static if( i%2==0 )
   result[k] = rest[i+1];
 return result;
}
くらいしないとダメぽい
799デフォルトの名無しさん:2007/02/03(土) 10:01:39
> >要素の数だけ連想配列のデフォルトコンストラクタ(?)
> はただポインタコピーするだけだからほとんど無視できるはず
ただのポインタコピーで済むのはコピーコンストラクタの場合。
デフォルトコンストラクタではメモリを割り当てないといけないはず。
800デフォルトの名無しさん:2007/02/03(土) 10:33:00
いやデフォルトはnullだから
801デフォルトの名無しさん:2007/02/03(土) 11:51:17
null????
802デフォルトの名無しさん:2007/02/03(土) 14:41:08
ぬるぽ
803800:2007/02/03(土) 15:37:55
ぬるぽは空(連想)配列扱いで、たとえば>>792なら、ローレベルに書くと
AA_str2int* result1 = null;
if(!result1){result1=new AA_str2int;} result1->add("Hoge",3);
AA_str2int* result2 = null;
result2 = result1;
if(!result2){result2=new AA_str2int;} result2->add("Bar",2);
AA_str2int* result3 = null;
result3 = result2;
if(!result3){result3=new AA_str2int;} result3->add("Foo",1);
こういう感じの動作なので、普通に書くより遅いことはない、よ
804デフォルトの名無しさん:2007/02/03(土) 16:57:20
連想配列ってnullを代入したら初期化できたのか・・
805デフォルトの名無しさん:2007/02/03(土) 19:44:05
テンプレートが、意図した通りに展開されているかを
確認する方法はありますか?
806デフォルトの名無しさん:2007/02/03(土) 23:41:43
>>805
ユニットテスト

でも正直言わせてもらえればテンプレートもコードもかかれた通りに動作する
意図通りとは限らない。
807デフォルトの名無しさん:2007/02/04(日) 01:00:44
Dのコンパイラほど使ってて信用できない物はないと思うw
808デフォルトの名無しさん:2007/02/04(日) 02:34:08
>>786
うお、こんなことができるのか。syntax-rulesみたいだ
809デフォルトの名無しさん:2007/02/04(日) 03:52:45
Dは機能が面白い。
lazyとかテンプレートとかinoutとかプロパティとか
810デフォルトの名無しさん:2007/02/04(日) 08:49:56
でもプロパティって引数無しのメソッドと区別付かないよな。

public property int x(){
  :
  :
}
こんな風にならんかな
811デフォルトの名無しさん:2007/02/04(日) 09:57:20
なんかそれまえにもそんなかんじでいわれてたきがする
812デフォルトの名無しさん:2007/02/04(日) 09:59:47
何かを付けたら 括弧なし呼び出し と 代入みたいな呼び出し が可になるのは素直に良いと思った。
813デフォルトの名無しさん:2007/02/04(日) 10:08:46
そんなことされるとprintf="Hello, world!";というのが出来なくなるのでそのままがいいなぁ
814デフォルトの名無しさん:2007/02/04(日) 15:23:23
>>813
やめて無意味にシンプルを捨てるコード書かないで

と言わせてもらおう……。
「"書く"に"Hello, world!"を代入する」より
「"Hello, World!"を"書く"」の方がずっと判りやすいじゃん。

プロパティが呼び出す側のシンタックスシュガーでしか無いってのは、
それがオブジェクト「属性」なのか「アクション」なのか、
クラスの設計者が表明出来ないってことなんだよね……。
815デフォルトの名無しさん:2007/02/04(日) 15:52:02
>>812
ついでに通常の呼び出しが禁止されると尚良し。俺的に。
816デフォルトの名無しさん:2007/02/04(日) 15:55:06
>>814
>「"Hello, World!"を"書く"」の方がずっと判りやすいじゃん。 
Dで書くと
"Hello, world".printf();
...んーコレ、本当に判りやすいと思うのか? むしろ余計意味不明度が増してる気が。
817デフォルトの名無しさん:2007/02/04(日) 15:56:15
すっげーわかりやすいわ。今度からそれ使う。dクス
818デフォルトの名無しさん:2007/02/04(日) 16:09:00
英単語を日本語の語順で並べてるから違和感を感じてるんだと思う。
819デフォルトの名無しさん:2007/02/04(日) 17:30:53
out = "Hello" ~ " , " ~ "World";
とかになるとあら不思議。かな
820デフォルトの名無しさん:2007/02/04(日) 17:46:33
=を値のストリームと考えればおかしくない…のかな。。。
writefln=toString=10;
821デフォルトの名無しさん:2007/02/04(日) 17:49:34
それなんてモナド?
822デフォルトの名無しさん:2007/02/04(日) 18:16:50
\(=^o^=)/
823デフォルトの名無しさん:2007/02/04(日) 18:25:40
>>816
少なくともprintf = "Hello, world!";よりはマシでしょう……。
私ゃprintf("Hello, world!");と書きますが。
むしろOOP的にはcout.printf("... とか?

# というかcoutはstdoutと名乗ることはできなかったんだろーか……。

演算子使うとしたら、C++に習ってcout << "Hello, world!"; あたり……?
824823:2007/02/04(日) 18:30:20
あ、いけね。coutにゃprintfなんて無かったっけ……
825デフォルトの名無しさん:2007/02/04(日) 18:49:07
import std.stdio,std.cstream,std.conv,std.string;
int add10(int a){return a+10;}
void main(){writefln=toString=add10=toInt=din.readLine;}

delegate/functionリテラルが使えないのと演算子の優先順位がらみの問題で使いにくいのが難点か。
826デフォルトの名無しさん:2007/02/04(日) 19:12:06
すまぬ、だれかdwtについて教えてくれ。
以下の簡単なソースがコンパイルエラーになるのだが・・・
void run(char[][] args) {
    Display display = new Display();
    Shell shell = new Shell();
    shell.setText("Shell Test");
    shell.setSize(200,100);
    shell.open();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}
void main(char[][] args){
try{
run(args);
}catch(Object o){MessageBox.showMessage(o.toString(), "Exception");}
}
}
# 以下エラー
D:\usr\local\dmd\bin\..\lib\dwt.lib(imagelist)
 Error 42: Symbol Undefined _D40TypeInfo_PS3std1c7windows7windows6BITMAP6__initZ
--- errorlevel 1

これは examples の filllayout.d を弄っただけ。
元のソースは問題なくコンパイル&実行できるのだが。だれか助けてー
dmd 1.0, dwt for D1 (ttp://myweb.hinet.net/home5/kyovbdx/DWT_for_D1.rar)
827デフォルトの名無しさん:2007/02/04(日) 20:05:50
>>814
書ければそれでいいじゃないかと思う。
見て意味が分かればなおいい。
短ければもっといい。
828826:2007/02/04(日) 21:08:18
すみません、よく調べたら落とした dwt for D1 自体に問題がある模様でした。
スルーして下さい(´・ω・`)

829デフォルトの名無しさん:2007/02/04(日) 21:31:30
D言語でJSON記法があつかえるといいなあ
と思うけど
830デフォルトの名無しさん:2007/02/04(日) 22:20:24
>>827
書けるだけで判りづらいコードは有害だと思うのです……。
でも単に「書けるから書いた」ってだけでない、
見て意味がわかるコードを書くのは難しいことで、
だからこそ、それがマの技術力の一つだと思うわけで……。

可読性は神への信仰の次に大事です、とかいうファウラー信者な俺。
831デフォルトの名無しさん:2007/02/04(日) 22:27:50
>>829
dmdscript使えば良いじゃない。
...と言おうとおもって調べてみたけどソースが古すぎてdmdscriptのコンパイルとおらねー
832デフォルトの名無しさん:2007/02/04(日) 22:44:02
Webページのサンプルでよく見かける
std.stream.stdout.writeLine("Hello world");

import std.strem後のstdout.writeflnってコンパイル通らないよ。

素直にstd.stdio.writeflnに統一しろって事?
833デフォルトの名無しさん:2007/02/04(日) 22:45:34
>>832
std.stdioのwriteflnかstd.cstreamのdout.writeflnやdout.writeLine
834デフォルトの名無しさん:2007/02/04(日) 23:47:14
>>833 thx

ここのサンプルコードが早くfixされてほしい
ttp://www.wisdomsoft.jp/dev/prog/d/001
835デフォルトの名無しさん:2007/02/04(日) 23:59:21
>>834
それ以前に、全体的に古すぎ。
836デフォルトの名無しさん:2007/02/05(月) 00:09:34
dout/din は元々 stdout/stdin だったのが変更されますた
837デフォルトの名無しさん:2007/02/05(月) 00:11:18
>>834
>>323 でも見れ
838デフォルトの名無しさん:2007/02/05(月) 04:05:08
>>830
ヒント:ネタ
839デフォルトの名無しさん:2007/02/05(月) 15:17:21
k.inabaさんとこのtx使ってみたんだけど、
Windowsのcmd.exeで標準出力をリダイレクトすると空行が入らない?

あとサンプルだとtest.dを読みに行ってるけど、
普通Dソースはネイティブ文字コードじゃないはずだからまずくないかな?
少なくともBOMが入ってると
Error: ArrayBoundsError nu_mbwc(28)
が出る
840デフォルトの名無しさん:2007/02/05(月) 15:52:06
ttp://f17.aaa.livedoor.jp/~labamba/?%B9%F1%BA%DD%B2%BD%C2%D0%B1%FE
std.stdioのwritefxを、ここ↑のに書き換えて、phobosをmakeし直すのはどう?
841デフォルトの名無しさん:2007/02/05(月) 17:27:52
>>839
てきとうに修正しました

tangoのConsole IOはちゃんと変換してくれるのでそっちのがいいかも。# Windowsなら
842839:2007/02/05(月) 17:35:20
FileはWinAPIをラップしてるから改行コード変換はD側でやらないといけないけど、
doutとかのCFileはCのf〜系関数をラップしてるから改行コード変換をD側でやっちゃいけないのが問題だね。
そのおかげでフィルタストリームを作るときにファイルとコンソールで分けて実装しないとおかしなことになる。

CFileのコンストラクタでFILEをバイナリモードにかえてやって、
改行コード変換は全てD側でやるようにCFile.writeLineやらを修正すれば解決するのかな
843839:2007/02/05(月) 17:50:04
>>841
対応はやっ!

バッチリ直ってました
ありがとうございます
844デフォルトの名無しさん:2007/02/05(月) 18:04:12
あー、単純に全部"\n"で出すようにしただけなので、ほんとは>>842のようにやらないといかんと思います。

>>672さんも言ってるみたいに、テキストとバイナリのIOは明確に分けて欲しいよなあ…
845デフォルトの名無しさん:2007/02/05(月) 22:01:42
tangoにゃIReader/IWriterなんてのが入ってて嬉しくなりますた。
こういうコードというか、テキストIO/バイナリIOの考え方自体が
「標準ライブラリに」入り込んでくれないと困るんだよなぁ……。


んで、そのへんの標準ライブラリの設計が片っ端から改善されたとして。

そうするとDって、プログラミングに初めて触れるための言語として、
結構良いモノになれる可能性が高いんじゃないかと、ふと思った。

Javaや.Netみたく必ずしもオブジェクト指向を強制されないし、
GCと例外のおかげで「引数は入力で戻り値が結果・目的」とかの
ごく基本的な原則からも逸脱せずに済むし。
出来上がるのはみんなお馴染みの.exeだから
「exeってこうやって作られるのか」的感動もあり。
846デフォルトの名無しさん:2007/02/06(火) 05:31:37
FilterStream派生じゃだめなの?

class JpStream : FilterStream
{
this(Stream a)
{
super(a);
}

override void writeExact(void* buffer, uint size)
{
char[] a = new char[size];
for (int i = 0; i < size; i++) a[i] = (cast(char*)buffer)[i];
char* b = toMBSz(a);
char* e = b;
while (*e != 0) e++;
super.writeExact(b, e - b);
}
}

auto dout2 = new JpStream(dout);
dout2.writeLine("あいうもげもsげ");
847デフォルトの名無しさん:2007/02/06(火) 06:29:58
>>846
writeExactをオーバーライドしちゃうとバイナリ出力やワイド文字出力が使えなくならない?

それとFilterStream.writeLine(定義はStreamクラスの中)は環境ごとに改行コードを選んで出力するようになってるから、
doutをFilterStreamに包むとCライブラリの改行変換と重複して、改行として\r\r\nが出力されてしまう。
848デフォルトの名無しさん:2007/02/06(火) 12:07:57
Stream派生クラスがオーバーライドすべきなのはwriteBlock……のはず。

ちょっと新たな気持ちでJavaのio設計を読み直してみたり。
DのOutputStreamはたくさんメソッド定義しすぎだな。Inputもしかり。
「渡されたバイト(列)を独自の出力先に書き込む」メソッド1つあれば十分……というか、
それ以上の事を実装クラスにさせちゃダメなのに。
849デフォルトの名無しさん:2007/02/06(火) 12:57:51
write(int)とかのバイナリ出力までtoMBSzの洗礼を受けてしまう、という点も問題か。
JpStreamは文字入出力のためのクラスだ、write(int)とかは使うな!と
ドキュメントとかで主張はできるけど、所詮は大元のまずいクラス設計のごまかしに過ぎない。
850デフォルトの名無しさん:2007/02/06(火) 13:58:16
What's New for D 1.005
Feb 5, 2007
New/Changed Features

* -v now emits pragma library statements and imported file names
* deprecated === and !== tokens no longer recognized
* length can no longer shadow other length declarations
* Added MixinStatements, MixinExpressions, and MixinDeclarations.
* Added ImportExpressions.
* Added std.metastrings
851デフォルトの名無しさん:2007/02/06(火) 15:03:05
> * Added MixinStatements, MixinExpressions, and MixinDeclarations.
なんか猛烈なのキタ
852デフォルトの名無しさん:2007/02/06(火) 15:15:19
void foo()
{
// Prints contents of file foo.txt
writefln( import("foo.txt") );
}

これはすごいwwwwwww
853デフォルトの名無しさん:2007/02/06(火) 15:22:55
mixin(import("foo.d"));
こうすればC/C++の#include
854デフォルトの名無しさん:2007/02/06(火) 15:28:55
IODCCにwktk
855デフォルトの名無しさん:2007/02/06(火) 15:43:36
久しぶりに見たけど、まだ mix-in 導入されてなかったの?
856デフォルトの名無しさん:2007/02/06(火) 15:52:10
D 0.91 での変更点 May 27, 2004
バグ修正
    * mixin での super の問題を修正。

ただ、どういう意味でのmixinを言っているのかはっきりさせてくれれば
857デフォルトの名無しさん:2007/02/06(火) 15:52:46
>>855
久しぶりすぎ
858デフォルトの名無しさん:2007/02/06(火) 15:53:34
何でもありktkr wwwwwwwwwwwwwww
859デフォルトの名無しさん:2007/02/06(火) 16:01:29
GDC release 0.22

http://sourceforge.net/project/showfiles.php?group_id=154306

Changes:
* Added support for GCC 4.1.x
* Support for GCC 3.3.x is deprecated
* Updated to DMD 1.004
* Fixed Bugzilla 836, 837, 838, 839, 841, 843, 844, 889, 896
* Fixed problems with missing debug information
* Added Rick Mann's -frameowrk patch for gdmd
860デフォルトの名無しさん:2007/02/06(火) 16:44:48
ReadStreamでサイズ指定付きバイト列を読みこめないのは悲しい
861デフォルトの名無しさん:2007/02/06(火) 17:14:49
>>860
なんの話?
862デフォルトの名無しさん:2007/02/06(火) 19:16:37
1.0が出てちょっとは仕様追加とかおとなしくなるかと思ったら……
Walterのやろぉ、全っ然そんなつもり無ぇなてめぇぇぇぇーー!

やっぱDはこうでなくちゃな!


しかしこのMixinて、#includeとどう違うんだ?とかどうも嫌な感覚があるんだが。
まぁいいや、新仕様ちぇっくちぇっく……
863デフォルトの名無しさん:2007/02/06(火) 19:36:23
トップレベルで
mixin(import("foo.d"));
とすると#includeっぽい働きをするのかな。
そもそもの#includeっぽい用途ならmixinなんて
する必要ないだろうから、使い道は変わってきそうだ。

mixin(brainfuck!(import("foo.bf")));
とかしろってことだろうか。
864デフォルトの名無しさん:2007/02/06(火) 20:09:27
とりあえずimportの方は「文字列リテラルを外部ファイル化できる機能」って事でいいんでしょうか。
865デフォルトの名無しさん:2007/02/06(火) 20:14:28
ファイル名も文字列リテラルだ、ってところが
単なる外部ファイル化とはちょっと違うところかな。
866デフォルトの名無しさん:2007/02/06(火) 20:15:50
追加された、std.metastringsを使って人には言えないことをしようという試みかな
867デフォルトの名無しさん:2007/02/06(火) 20:34:51
なんか、「どこまでコンパイル時に解決できるか」の限界に挑んでる感があるなw
いや、関数型言語とかにゃ及ばないんだろうけど。

確かに「ユーザ側でシンボル名を指定できるライブラリとか作れたらなー」とか
思ったことはあったけどさ……。まさかここまでするとは。

強力なライブラリを作る基礎になりそうな気はするな。
しかしこうなると「コンパイル時に決定できる文字列」とそうでない文字列の区別が
面倒くさくなってきそう。
868デフォルトの名無しさん:2007/02/06(火) 20:35:17
std.metastringsとmixinを使うと、面白いこと出来そうだね
869デフォルトの名無しさん:2007/02/06(火) 20:56:37
うわーひでえwww
870デフォルトの名無しさん:2007/02/06(火) 21:24:38
なんか眺めてるうちに、
文字列リテラルやconst char[]と互換(等価?)な、
”メタ文字列リテラル”みたいな言語仕様が欲しくなってきた。
"文字列の内容"は関数名や変数名とかとは完全にレイヤが違う、って
感覚が染みついてるから、どうも気持ち悪くなるんだよね……。
871デフォルトの名無しさん:2007/02/06(火) 21:28:22
つ[お題 Hello World]

激しいのが見たい
872デフォルトの名無しさん:2007/02/06(火) 21:33:28
int main(){}
873デフォルトの名無しさん:2007/02/06(火) 21:38:08
void main(){}


                                                        static this(){
                                                        printf="Hello World";
                                                        }
874デフォルトの名無しさん:2007/02/06(火) 21:59:14
import std.typetuple;
template splits(char[]string,char[]sep,int i=0){
    static if(string.length-i < sep.length)
        static if(i == 0)alias TypeTuple!() splits;
        else             alias TypeTuple!(string) splits;
    else static if(string[i..i+sep.length] == sep)
        alias TypeTuple!(string[0..i],.splits!(string[i+sep.length..$],sep,0)) splits;
    else
        alias .splits!(string,sep,i+1) splits;
}
template split(char[]sep){template split(char[]string){alias splits!(string,sep,0) split;}}
template map(alias F,T...){static if(T.length == 0)alias TypeTuple!() map;else alias TypeTuple!(F!(T[0]),.map!(F,T[1..$])) map;}
typeof(mixin(map!(split!("->"),splits!(string,"\n"))[1]))[typeof(mixin(map!(split!("->"),splits!(string,"\n"))[0]))]
/*

875デフォルトの名無しさん:2007/02/06(火) 22:00:01
*/
hash(char[]string)(){
    typeof(mixin(map!(split!("->"),splits!(string,"\n"))[1]))[typeof(mixin(map!(split!("->"),splits!(string,"\n"))[0]))] result;
    alias map!(split!("->"),splits!(string,"\n")) array;
    foreach(i,v;array)static if(i%2==1)result[mixin(array[i-1])] = mixin(array[i]);
    return result;
}
void main(){
    char[][char[]] x = hash!(`
     "4"[] -> "Hello"[]
     "5"   -> ", "
     "6"   -> "world!"
    `);
    printf("%.*s",x["4"]~x["5"]~x["6"]);
}
876デフォルトの名無しさん:2007/02/06(火) 22:20:20
ここまで来ると、コンパイル後より、コンパイル前のデバックが大変だなwww
877デフォルトの名無しさん:2007/02/06(火) 22:22:31
>>876
うん、実は死にそうになった。
あと、>>875のままだとローカル変数とか触れないから後半ちょっと修正。
stringのエスケープ処理はさすがにめんど過ぎるからカンベンな。

template hash(char[]string){
    const char[] hash = `(){
        const char[]string = `"`"~string~"`"`;
        alias map!(split!("->"),splits!(string,"\n")) array;
        typeof(mixin(array[1]))[typeof(mixin(array[0]))] result;
        foreach(i,v;array)
            static if(i%2==1)
            result[mixin(array[i-1])] = mixin(array[i]);
        return result;
    }()
    `;
}
void main(){
    char[]a = "4";
    char[]msg="Hello";
    char[][char[]] x = mixin(hash!(`
      a    -> msg
     "5"   -> ", "
     "6"   -> "world!"
    `));
    printf("%.*s",x["4"]~x["5"]~x["6"]);
}
878デフォルトの名無しさん:2007/02/06(火) 22:46:11
これはひどい
879デフォルトの名無しさん:2007/02/06(火) 22:48:22
変態系プログラミングが楽しくなりそうな言語だな。
880デフォルトの名無しさん:2007/02/06(火) 22:55:46
たとえば、csvをimportして配列にするとか、そういう用途が本筋か?
881デフォルトの名無しさん:2007/02/06(火) 22:59:00
ふと気づいた。
実用重視はどこに行ったんだ?
882デフォルトの名無しさん:2007/02/06(火) 23:13:24
飽きたんじゃね?
883デフォルトの名無しさん:2007/02/06(火) 23:14:42
あそびねた☆
884デフォルトの名無しさん:2007/02/06(火) 23:19:36
コンパイル時でevalまがいのmixinはハッキリ言って要らないと思った
885デフォルトの名無しさん:2007/02/06(火) 23:19:54
tango の名称はこのままで良いものなの?
現に Java とかアイコンのプロジェクトとダブってるし
改称プロジェクト続出の例があるから心配。

・・・dango                                orz
886デフォルトの名無しさん:2007/02/06(火) 23:35:10
たとえばGUIフォームを定義したXMLファイルを、コンパイル時にimportとmixinでごにょごにょするようにすると、

--- form.xml ---
<MainForm type="NormalForm" caption="Login">
  <userName type="TextBox"/>
  <password type="passwordBox"/>
  <loginButton type="Button" onClick="onLoginClick"/>
</mainForm>

--- test.d ---
MysteryOfMetaprogramming!("form.xml");

scope MainForm form = new MainForm();
void main(){
  mainForm.run();
}
void onLoginClick(){
  if(mainForm.password.text == passwordTable[mainForm.userName.text]){
    login();
  }
}

XMLがDのソースファイルの一種として、自然にDコンパイラに組み込まれる形に。
……とか、可能になる……のか? のか?
887デフォルトの名無しさん:2007/02/06(火) 23:36:17
ウォルタータンに惚れたw




>>847
改行無効化ダメカナ

import std.cstream, std.stream;
void main()
{
auto dout = new 改行なんて許さないんだからぁ(dout);
dout.writeLine("イーアルサンイーアルサン");
dout.writeLine("onetwothreeonetwothree");
dout.writeLine("123");
}
class 改行なんて許さないんだからぁ : FilterStream
{
char[] 改行 = "";
wchar[] 改行w = "";
this(Stream a) { super(a); }
override void writeLine(char[] s) { writeString(s); writeString(改行); }
override void writeLineW(wchar[] s) { writeStringW(s); writeStringW(改行w); }
}
888デフォルトの名無しさん:2007/02/06(火) 23:47:59
>>886
Dコンパイラは汎用プログラミング言語コンパイラになりました\(^o^)/

v1.0出したからv2.0まで遊べるようになったもんな
もっとやれw
889871:2007/02/06(火) 23:54:27
>>877
正直すまんかった
読めんww
890デフォルトの名無しさん:2007/02/07(水) 00:07:35
ここはすごい連想配列初期化ですか?
ここはひとつJSONも・・・
891デフォルトの名無しさん:2007/02/07(水) 01:08:26
>>886
XAMLライブラリ作っちゃう猛者とか現れないかなあw
892デフォルトの名無しさん:2007/02/07(水) 01:47:02
Dもプラプラと同じように変態言語まっしぐらって感じだなあ
893デフォルトの名無しさん:2007/02/07(水) 01:55:47
じゃあD++作る
894デフォルトの名無しさん:2007/02/07(水) 01:58:54
>>893
明らかに悪化の一途を辿るだろwww
895デフォルトの名無しさん:2007/02/07(水) 02:02:32
正直不安になってきたwww
896デフォルトの名無しさん:2007/02/07(水) 02:40:11
これ色々やったら.h読めるんじゃね?
C/C++との互換性が意外な方向から解決、みたいな。
897デフォルトの名無しさん:2007/02/07(水) 02:49:06
プリプロセッサよりも凶悪って意見もあるけど
プリプロセッサは 副作用 と スコープの概念がない のが問題だったが
このimport/mixinにはそういう心配はなさそうじゃない?
それとも別の問題が考えられる?
898デフォルトの名無しさん:2007/02/07(水) 03:12:49
>>896

すでに、news の方で

> You know the next step, right? A template version of htod!
>
> include!("gl.h");

I did shy away from the "execute this shell command and insert its
output into a string literal" because that would turn a D compiler into
a huge security risk.

と、Walタンが答えてる。
899デフォルトの名無しさん:2007/02/07(水) 03:18:28
同じく news の方にあった

BuildBarserFromFileSpec!("foo.bnf")

これがそそる。
900デフォルトの名無しさん:2007/02/07(水) 03:21:21
void main(){printf(import(__FILE__));}
これワロタ
901デフォルトの名無しさん:2007/02/07(水) 03:37:57
static ubyte[] icon = cast(ubyte[])import("foo.ico");

ほぉ、コレは便利。
902デフォルトの名無しさん:2007/02/07(水) 07:19:47
そもそもMixinがなにかしらない俺ガイル
903デフォルトの名無しさん:2007/02/07(水) 07:50:17
staticに動くXMLパーサ&クラスジェネレータとか
いくら何でも作者が死ぬだろ……と自分でも思うが、
boostのSpiritとかそーいう変態的hackを見てると、
世のハッカー達ならひょっとして……とか思えてしまう。
実は自分には実装がホントに可能なのかすら全然想像もつかないけど。
ひょっとしたら意外に簡単だったりするんだろうか。

>>901
importは何らかの文字変換かけてbyte列壊したりはしないのかな。
試しにBOM付きのXMLテキストをimport&出力してみたら、
きっちり先頭に化け文字がくっついてくれたけど。
904デフォルトの名無しさん:2007/02/07(水) 07:52:58
importで実行ファイルを指定して標準出力をとってきてくれるとかどうだろう
こんなかんじで
import(exefile, cmdline, stdin)

そうするとコンバータを自作したりできるんだが
流石に狂ってるかね
905デフォルトの名無しさん:2007/02/07(水) 08:28:55
>>897
このMixinはStatement/Expression/Declarationの言語単位を認識してくれるのね。
コンパイラ内部にあるであろうStatementParserとかExpressionParserに
staticな文字列をソースとして放り込んで、結果を採用させる、って感じ?
確かにCの単純なプリプロセッサとはひと味違うわ。
906デフォルトの名無しさん:2007/02/07(水) 08:51:20
>>904
> importで実行ファイルを指定して標準出力をとってきてくれるとかどうだろう
> こんなかんじで
> import(exefile, cmdline, stdin)
>
> そうするとコンバータを自作したりできるんだが
> 流石に狂ってるかね

898見てみると、Walタンがセキュリティーに配慮してやらないようにしてるって答えたみたい。
907デフォルトの名無しさん:2007/02/07(水) 09:28:16
あ、読み飛ばしてた
サンクス
確かにセキュリティ的にやばいな
908デフォルトの名無しさん:2007/02/07(水) 09:33:53
拾ってきたソースコンパイルしてみたらrm -rf /が走ったなんて洒落にならんしな……
909デフォルトの名無しさん:2007/02/07(水) 09:35:46
ってかMakefileに
all:
        rm -rf /
なんて書かれてたら同じな気ガス
910デフォルトの名無しさん:2007/02/07(水) 10:07:13
>>909
それもそうだった……というかコンパイル後に実行するのも同じだったな。
その辺のセキュリティの話は嫌と言うほど各所で議論済みか。

実際の話、どう使われていくんでしょか。

MixinExpressionは>>880みたいな用途に使える……よな?
importしたのをコンパイル時にどう行分割したりするのか、俺は全然知らないけど。

MixinDeclarationは、型ジェネレータみたいなのに使えるはず。

MixinStatementは何か、今のままだとヤな感じ。ただその場にコードぶちまけるだけみたいな。
独自のSyntaxSugarを生成したりするのに使えるか……?
911デフォルトの名無しさん:2007/02/07(水) 10:33:38
テンプレートで、文字列と整数をあれこれいじった後に、
それらを使って宣言や定義や式を組み立てられるように
なったのが大きいと思う。
912デフォルトの名無しさん:2007/02/07(水) 11:02:06
エラー出力が多少は分かりづらくなる危険は……。

mixin(
  "int hoge = 0;\r\n"
  "hoge++;\r\n"
  "writefln(hage);\r\n" // Error: undefined identifier hage
);

hoge++の行でエラー、と出力。さすがにこれはズレるかw
n行目のmixin内 -> x行目でエラー、みたくエラーメッセージも階層化キボンヌ。
913デフォルトの名無しさん:2007/02/07(水) 11:46:49
この言語、Perl好きな人が嵌ってたりもするのかな。
なんでもありでおもしろそう。
914デフォルトの名無しさん:2007/02/07(水) 12:48:21
static switch ってなかったっけ・・・。
static if みたいに使えそうなんで欲しい
915デフォルトの名無しさん:2007/02/07(水) 12:51:43
それよかdynamicってのが欲しいな。
static{
dynamic if()
{

}
916デフォルトの名無しさん:2007/02/07(水) 12:52:44
>>915
間違えて途中で送った・・・。
static{
if()
{

dynamic if(xxx)
{
// 実行時の処理
}
}
917デフォルトの名無しさん:2007/02/07(水) 12:53:14
>>916
またやっちまった。。。
もう・・・言いたいことをつかんでくれたらうれしいorz
918デフォルトの名無しさん:2007/02/07(水) 13:04:36
普通のifと何か違うのかな
919デフォルトの名無しさん:2007/02/07(水) 13:28:56
>>918
staticなブロックの中に普通のifを書き込むってわけ。
staticなブロックで普通にif書いたらstatic ifになるって寸法。
920デフォルトの名無しさん:2007/02/07(水) 15:45:05
static ブロック内の変数宣言はどうなるの?
921デフォルトの名無しさん:2007/02/07(水) 16:20:15
流れ無視で申し訳ないんですが、
サクラのレンサバにD言語入れてる人いませんか?
922デフォルトの名無しさん:2007/02/07(水) 16:42:38
どうせなら隠し引数 _caller とかほしいかも。
void myassert(bool bCond, char[] message=null){
if(! bCond){
/* 独特な処理 */
throw new std.asserterror.AssertError(_caller.file, _caller.line, message);
}
}
923デフォルトの名無しさん:2007/02/07(水) 17:01:49
interface Archive でも作ってくれたら嬉しいな
924デフォルトの名無しさん:2007/02/07(水) 17:27:11
>>914
mixinを駆使して作ればいいよ。
というか気合いれれば普通に作れるんじゃね
925デフォルトの名無しさん:2007/02/07(水) 19:09:22
ストリームの available ってなんですかね。。。
ソケットストリーム用とかですか?

ファイルストリームを全読みこみする時にもこんなことやったほうがいいんでしょか。

ubyte[] buf, tmp;
stream.seekSet(0);
while (!stream.eof) {
tmp.length = stream.available;
stream.read(tmp);
buf ~= tmp;
}
926デフォルトの名無しさん:2007/02/07(水) 19:26:31
>>914,924
914じゃないが書いてみた。

template sswitch(TP...){
static if(TP.length == 1){
}else static if(TP.length == 2){
const char[] sswitch = TP[1];
}else static if(TP[0]==TP[1]){
const char[] sswitch = TP[2];
}else{
const char[] sswitch = sswitch!(TP[0], TP[3..$]);
}
}
void main(){
mixin(sswitch!(
1,
0,"int x=3;",
1,"int x=5;")
);
printf("x = %d\n", x); // x = 5
}

mixin文が使用者に直接見えてるところと
文を文字列で書かないといけないのが嫌だなあ。
927925:2007/02/07(水) 19:55:58
stream.d読んで解決しますた。リソースの無駄遣いゴメソ
928デフォルトの名無しさん:2007/02/07(水) 20:19:47
>>927
せっかくだから簡単に結論キボンヌ。
つーかこんなプロパティ気にしたことも無かったw
availableのサイズならreadExactしてもblockingしないことが保証されてるのかな?
929925:2007/02/07(水) 21:32:49
>>928
availableの結果はストリームの種類によって実装が違うみたいだけど、(当たり前?)
大体は (そのストリームの全体のサイズ - 現在位置) みたい。
実装できないストリーム(ソケットとか)は0を返すみたいです。
930デフォルトの名無しさん:2007/02/07(水) 21:56:24
>>929
ドキュメントは"現在すぐに読みとれるバイト数を返します。 "だけかぁ。
0は特別扱いとも書いてないし、
つまり「今すぐ全部読めます!」か「全く読めません!」な実装しかないんかい!
ソケットこそ有意な値(受信バッファに溜まってるデータサイズとか)返すべきだと思うけど……

まぁいいや。解説どもでした。
931デフォルトの名無しさん:2007/02/07(水) 23:03:53
「Dってどんなもんなんだろうなぁ」ってな感じで(そういえばやっと1.000が出たんだっけ)
BlowfishをDに移植してみたけど、いやはや、すごいね。
必要なコード量が少ないし、GCのおかげでメモリ管理とか省けるし。
932デフォルトの名無しさん:2007/02/07(水) 23:17:52
なんかこのスレでDが褒められているのを初めて見た気がするんだ。
933デフォルトの名無しさん:2007/02/07(水) 23:20:44
Dの出来があまりに良すぎるからもっと良くしようと思って皆が悪い部分を言いまくっているんだよ。
934デフォルトの名無しさん:2007/02/07(水) 23:28:57
まさにツンデレ
935デフォルトの名無しさん:2007/02/07(水) 23:38:06
日本語とかでツンツンしてる代わりに
言語仕様ではデレデレ。
936デフォルトの名無しさん:2007/02/08(木) 00:04:19
Qt使えるようになったらD仕事で使う
937デフォルトの名無しさん:2007/02/08(木) 00:48:29
Walterタソのアメとムチの使い分けがたまらんな。

D言語はGC、型安全、構造化例外にオブジェクト指向にメタプログラミングまでサポート。
思うようにすらすら書けて、なお生成されるのは軽量なネイティブexe、とどめにコンパイル爆速。

代わりにphobosの設計改善ほったらかしたり、
外部プログラムにまで平然とUTF-8で話しかけたり、
配列リテラルの仕様が何か変だったり、
連想配列のリテラルをついおねだりしちゃったり。

全く、変な趣味に目覚めてしまったらどうしてくれるんだWalter。
938デフォルトの名無しさん:2007/02/08(木) 01:21:43
もう今のPhobosを過去の産物として、
ウォルタータンが独自にDeimosとか、
現在のPhobosを旧Phobosとした新Phobosでも作るかした方が良いよ
939デフォルトの名無しさん:2007/02/08(木) 01:27:57
相変わらずD言語はダメダメですね(・∀・)ニヤニヤ
940デフォルトの名無しさん:2007/02/08(木) 01:54:35
転んでも泣かない2ちゃんねらーには最高の仕様だろw
941デフォルトの名無しさん:2007/02/08(木) 02:57:05
void main() { mixin(import(__FILE__)); }
これワロタ
942デフォルトの名無しさん:2007/02/08(木) 03:19:07
こんなalias便利そう

alias printf("[%s:%d] %.*s", __FILE__, __LINE__, ..) print_debug;
print_debug("hoge"); // -> printf("[%s:%d] %.*s", __FILE__, __LINE__, "hoge")

え?C?ナニソレ

ていうか__LINE__とか__FILE__ってのぁプリプロセッサがなくなった今、98%くらい使われてないんじゃねーの。
かと言ってプリプロセッサ自体はいらんし・・・
ってわけで。言語レベルでboostのbind(?)みたいなこと出来たら嬉しいなと。
943デフォルトの名無しさん:2007/02/08(木) 08:05:16
オレ的には>>922みたいにCallInfoなんてのが欲しいかな
mainをルートに呼び出し元の位置や関数名を辿ってデバッグしたい
944デフォルトの名無しさん:2007/02/08(木) 10:32:29
あーそうそう、unittestの仕様ももーちょい改善してほしい項目だな……。
もーちょっとこう、拡張可能というか、
assert以外で落ちた時、全然発生場所が分からんというか。

デバッグ時には詳細なスタックトレース出すのを標準化してくれれば最高なんだが。
>>563とかの有志によるハックはまだ動くのだろうか。
945デフォルトの名無しさん:2007/02/08(木) 14:08:57
リリース時にも有効なassertがあればデバッグ処理は全てassertに委ねられるのに。
946デフォルトの名無しさん:2007/02/08(木) 16:43:31
それって例外でよくね?
947デフォルトの名無しさん:2007/02/08(木) 17:13:46
>>945
C/C++での話だけど、俺は標準のassertとは別に
リリース版用の自作assertでエラー処理の一部をやってる。
あまくで一部であって、全部をそれでやろうとするのはナンセンスだと思う。
948デフォルトの名無しさん:2007/02/08(木) 18:16:14
要は行番号とかが勝手に一緒に乗せられて例外を投げてさらにリリース時にもコードがしっかり残るような物が欲しいんだろ・・・
949デフォルトの名無しさん:2007/02/08(木) 18:41:26
そんなときこそmixinをつかうべ。
import std.asserterror;
template myassert_(char[]file,int line){
    void f(Expr)(Expr e){if(!e)throw new AssertError(file,line);}
    void f(Expr,MSG)(Expr e,MSG msg){if(!e)throw new AssertError(file,line,msg);}
}
const char[]myassert = "myassert_!(__FILE__,__LINE__).f";
void main(){
    int x = 1;
    (mixin(myassert))(x == 0 ,"hoge");
}

うーん、微妙。mixinがウザイなぁしかも()がいる辺り文法破綻気味な気が。
950デフォルトの名無しさん:2007/02/08(木) 19:37:01
http://www.ddj.com/dept/cpp/184403864
をDに移植してみればいいかも。
951デフォルトの名無しさん:2007/02/08(木) 21:02:11
ところで、そもそもassertはエラー処理じゃない、と言いたい俺。
アレは「表明」であって、実行可能なコードによるドキュメンテーションなんだ。
このcreateHogeObj()はnullを返すことはありません、みたいに使うんだ。
alertみたいな警告っぽいニュアンスは無いんだ。
サポートの仕方がショボすぎる言語ばっかだけど……。

in/outに書いたassertとか、
自動生成されたドキュメントに出てくるようにすべきだと思うんだよね……
dmdの-Dオプションしか試してないけど。
952デフォルトの名無しさん:2007/02/08(木) 21:21:10
>>886みたいな事したくて、とりあえずstd.ctype, std.utf, std.uni の
テンプレート版を作ってみた。

ttp://midon3.hp.infoseek.co.jp/metastr.zip
953デフォルトの名無しさん:2007/02/08(木) 22:50:03
乙>952
でも、テーブルにしないほうがいいんじゃない?
954デフォルトの名無しさん:2007/02/08(木) 23:02:14
> in/outに書いたassertとか、
あ、俺も今そう思う
955886:2007/02/08(木) 23:26:44
>>952
言い出しっぺの俺がこんな事言うのも、非常にアレなのだけども。
普通にDでXML->Dのトランスレータ書いて
ビルドプロセスに組み込んだりした方が遙かにシンプルだなぁ、と今は思う。

むしろDコンパイラにプラグイン機構を盛り込むとかすれば
もっとスマートに>>886出来て面白そうだなーとか妄想したりして。
ん? .NetのXAMLとかって、ひょっとしてそういう技術なんだろうか。

でもそのコードはそれはそれで乙。
956デフォルトの名無しさん:2007/02/09(金) 00:53:49
D言語って仕様の策定には興味無さ杉でワロタ
こんなんじゃ言語使用互換コンパイラなんてできないだろうなwwwwww
957デフォルトの名無しさん:2007/02/09(金) 00:56:21
C99ですら碌に規格を満足するコンパイラがないんだ。気にすることじゃない
958デフォルトの名無しさん:2007/02/09(金) 00:57:33
>>956
そんなの要らんだろう、当面は。
959デフォルトの名無しさん:2007/02/09(金) 01:06:37
つか、D1.000になったんなら
 alias bool bit;
なくせよう
960デフォルトの名無しさん:2007/02/09(金) 01:39:03
そういえば1.0なのにdeprecatedが結構残ってる罠w
961デフォルトの名無しさん:2007/02/09(金) 01:56:16
1.0はdeprecatedを無くす良い機会だと思ってた
962デフォルトの名無しさん:2007/02/09(金) 02:25:49
charも不要
963デフォルトの名無しさん:2007/02/09(金) 02:28:59
intイラネ
これからはinpo
964デフォルトの名無しさん:2007/02/09(金) 02:37:29
2.0になったときを夢想すると、
・現在のdeprecated指定消滅。
・というか、Phobos消滅
・ついでにchar, wchar, dchar消滅
ってかんじか?いきなり消滅もなんだから、deprecatedでもつけるのがいいか?
965デフォルトの名無しさん:2007/02/09(金) 03:08:40
>>964
ぼけーっと眺めるの好きだからPhobosはバージョンアップ繰り返して残しておいて欲しいな
966デフォルトの名無しさん:2007/02/09(金) 07:49:01
>>954
ふと気になってdmd/src/phobs/std以下をgrep "body"してみたら約100個。
もったいないよな、これ……。


文字列の扱いに関しては、なんだか意見が分散してそうだな。
俺はとてもStringクラス化して欲しい。
D言語は「1文字」の実装を外に露出しすぎな感じ。
967デフォルトの名無しさん:2007/02/09(金) 11:52:18
DFLのところのdstringはどうなのかなあ
968デフォルトの名無しさん:2007/02/09(金) 13:04:05
>>967
文字列リテラルに c,w,dとかの
postfixが必要なのがちょっと面倒。

後、startsWithやendsWithでlengthプロパティそのまま使ってるので
内部の文字表現と引数の型が違った場合に正常動作しない.
969デフォルトの名無しさん:2007/02/09(金) 15:25:25
Stringクラスいらんわ。うんこ。
てか、クラスにする利点が分からん。
文字の配列のなにがいかんの。
970デフォルトの名無しさん:2007/02/09(金) 15:54:19
D言語内、プログラム内で使う分には、これ以上抽象化する必要はないよね。

外側の環境の文字をStringとして抽象化することを考えた場合、
D言語内の基本的な文字(列)型もStringとすると、プログラムと
外側の環境との境界をあまり意識する必要がなくなる、という
のが利点なのかな。
外側の環境といったって、単一プログラム内で複数の異なる
文字コードに触れる場合もあるから、そこで結局エンコード
指定するなら(|w|d)charを変換するのと変わらん気もするけど。

今は文字列をコンパイル時定数として扱えるけど、文字列をクラスにする場合は、
コンパイル時クラスインスタンス定数というようなものを導入して、
それをテンプレートの値引数として使えるようになるのかなあ。

でも、テンプレートであーだこーだする場合に、文字コードが型固定じゃないと
できることが減りそう。別の文字が同一文字とみなされるとか、そういういざこざ
を持ち込むことになりそうだし。
それとも、文字コードは今までどおり決めうちで、なんかとりあえずStringクラス
として抽象化しよう、ということなのかな。そうすると利点は分からん。
971デフォルトの名無しさん:2007/02/09(金) 16:12:59
そもそもDbCな人… ってか Bertrand Meyer に言わせれば
表明はリリース時にも残しておくべきものであり消すのは論外
って話だと思うんで消えなきゃいいんじゃないかね?
972デフォルトの名無しさん:2007/02/09(金) 16:21:16
RubyのERB見てて思ったんだけど、1.005で追加されたmixinとimportは、
もしかしてそういうものを実装することを想定したものなのかな。
なんかをDコードに変換するというよりは、Dコード以外のテキストに
埋め込まれたDコードをごにょごにょしたテキストを生成する、というような。
973デフォルトの名無しさん:2007/02/09(金) 19:00:51
vim の syntax ある?
974デフォルトの名無しさん:2007/02/09(金) 19:26:48
975952:2007/02/09(金) 21:46:00
std.stringとstd.convも一部メタ化してみた。
で、これでなんか作ろうと思ったけど、テンプレートの仕様が貧弱すぎて
できんかった。(泣)結局無駄骨です。
スレ汚してすいません。
976デフォルトの名無しさん:2007/02/09(金) 22:07:26
import std.stdio;

class A {
  this(int x = 0) { m_x = x; }
  private int m_x;
}

void main() {
  A a = new A;
  writefln(a.m_x);
}

これが通っちゃうんだけど、いいのか?
977デフォルトの名無しさん:2007/02/09(金) 22:08:41
>>976
何か問題ある。特に問題ないと思うが?
978デフォルトの名無しさん:2007/02/09(金) 22:16:21
>>976同じファイル内ではprivateにもアクセスできる。
979デフォルトの名無しさん:2007/02/09(金) 22:31:23
friend
980デフォルトの名無しさん:2007/02/09(金) 22:53:48
>>978
なるほど。了解。
981デフォルトの名無しさん:2007/02/10(土) 00:37:53
Stringをクラス化して何して欲しいかって、マルチバイト処理の隠蔽なのです。
ASCII圏の人々が、自分でも知らないうちに多言語対応してた、て事を実現したい。

何気なく文字列を扱おうと思ったとき、多分誰だって自然とchar型を選択するだろうと思うんですよ。
テキストエディタみたいな文字列処理特化アプリを書こう!と意気込んでる時でもない限り。

で、特にASCII圏の人は、単純に「2文字目を取り出したい」と思ったら、自然とstr[1]と書くわけですよ。
これが「1バイト目」へのアクセスに過ぎないとたとえ知っていても、それ考えるのは後にして、とか思って。
つーかウチら日本人でも書きたいですよ。こんな当たり前のコード。

んでお約束として、後になったって書き直される事なくリリースされるわけですよ。
当然strに"あいう"って入ったら速攻Error: 4invalide UTF-8 sequence。関係ないけどこの4て何だろ。

最初からstrがオブジェクトなら、str[1]は”2文字目”、str.lengthも”文字数”に抽象化できる。
UTF-8が文字列の基礎というDの現状を考えると、クラス化して生のバイト列を隠蔽してやるべきだと思う。
982デフォルトの名無しさん:2007/02/10(土) 00:54:42
行番号。

2バイト文字対応なchar型が出ると涙が出てくるのに。
983デフォルトの名無しさん:2007/02/10(土) 01:07:13
次スレ頼んだ
984デフォルトの名無しさん:2007/02/10(土) 01:11:39
>>982
wcharとかdcharとかじゃだめなのか?
985デフォルトの名無しさん:2007/02/10(土) 01:11:46
986デフォルトの名無しさん:2007/02/10(土) 01:14:18
配列はremoveやらinsertやらが無いし、
C++のvectorみたいなのも標準じゃないし、
C++より劣っているね。
987デフォルトの名無しさん:2007/02/10(土) 01:14:43
int foo(int hoge) { ... }

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

プロパティじゃなくてもこうなるんだけど、
正直これってどうなんだろうな。
988デフォルトの名無しさん:2007/02/10(土) 01:33:11
プロパティとの明確な区別が無いから今のところはしょうがない
989デフォルトの名無しさん:2007/02/10(土) 01:37:59
1バイト圏の人が好んでwcharやらを使うわけが無い。

ってか、char廃止とかしたらおもしろそうなんだけど。
990デフォルトの名無しさん:2007/02/10(土) 03:12:30
import std.stdio;

template apply(Ret, Args...) {
 Ret apply(Ret function(Args) func, Args args) {
  return func(args);
 }
}

template Tuple(T...) {
 alias T Tuple;
}

int add(Tuple!(int, int) x) {
 return x[0] + x[1];
}

void main() {
 writefln(apply(&add, Tuple!(1, 2)));
}

うーむ。タプルが必要になるのはあまりエレガントではないなあ。
991デフォルトの名無しさん:2007/02/10(土) 07:05:55
適当にString構造体は作ってるけどな
992デフォルトの名無しさん:2007/02/10(土) 15:06:37
poseidon復活したようやね
993デフォルトの名無しさん:2007/02/10(土) 15:29:04
>>992
0.21のままだけどね
994デフォルトの名無しさん:2007/02/10(土) 15:33:06
0.22は2ヶ月前に出ててそこから動き無しか。
995デフォルトの名無しさん:2007/02/10(土) 20:21:38
import std.stdio, std.stream, std.socket, std.socketstream;

void main()
{
char[] buf = new char[16];
Socket sock = new TcpSocket(new InternetAddress("somewhere", 80));
Stream s = new SocketStream(sock);
s.writeLine("GET / HTTP/1.0");
s.writeLine("");
s.read(buf);
}
これを実行するとメモリ使用量がとんでもないことになるんだけどなぜなんだぜ?
なぜか s.writeLine(""); を消すとなんともない
使用してるのは DMD v1.005 で Win2k SP4
996995:2007/02/10(土) 20:39:51
すまんかった
void read(out char[] s)が呼ばれて鯖から返って来た"HTTP/1.1 200 OK"のHTTPが
長さ0x80848472と認識されてメモリを確保しにいってたのか orz
997デフォルトの名無しさん:2007/02/11(日) 01:00:22
998デフォルトの名無しさん:2007/02/11(日) 01:00:41
999デフォルトの名無しさん:2007/02/11(日) 01:01:56
1000デフォルトの名無しさん:2007/02/11(日) 01:02:29
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。