2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

D言語 Part11

1 :デフォルトの名無しさん:2006/12/09(土) 08:44:01
プログラミング言語 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
■過去スレ
Part10 http://pc8.2ch.net/test/read.cgi/tech/1158013550/
Part 9 http://pc8.2ch.net/test/read.cgi/tech/1146656260/
Part 8 http://pc8.2ch.net/test/read.cgi/tech/1137068104/
Part 7 http://pc8.2ch.net/test/read.cgi/tech/1122912733/
Part 6 http://pc8.2ch.net/test/read.cgi/tech/1109933426/
Part 5 http://pc5.2ch.net/test/read.cgi/tech/1102785854/
Part 4 http://pc5.2ch.net/test/read.cgi/tech/1091185216/
Part 3 http://pc5.2ch.net/test/read.cgi/tech/1079068715/
Part 2 http://f3.aaacafe.ne.jp/~null/cache/1079280501.html
Part 1 http://pc5.2ch.net/tech/kako/1003/10036/1003674814.html


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);に。
しかもポインタには使えない。いわいる一つの微妙。

12 :10: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
http://www.kernelthread.com/hanoi/
D版がなぃ!

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
たまには、gdc も思い出してあげてくださいね。

ttp://aur.archlinux.org/packages.php?do_Details=1&ID=7603&O=0&L=0&C=0&K=gdc&SB=&SO=&PP=25&do_MyPackages=0&do_Orphans=0&SeB=nd

ttps://svn.sourceforge.net/svnroot/dgcc/branches/gdc-0.20-dev/d/ChangeLog
r55 が 0.177 対応


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

gdc 2.0 RPM/DEB

ttp://gdcgnu.sourceforge.net/


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();
}

103 :100: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
>>103
>>101

105 :100:2006/12/26(火) 03:35:45
>>102
書き込んでから気付いたけど、一応
b.func(1);

b.A.func(1);
にすると通るね。この書式、知らんかった。ありがとう。

106 :100: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まで後二日
何時ごろ公開されるんだろ

35 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)