D言語 Part11
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/12/09(土) 08:44:01過去スレは >>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)
0002デフォルトの名無しさん
2006/12/09(土) 08:44:54Part10 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
0003デフォルトの名無しさん
2006/12/09(土) 09:07:27The release of D version 1.0 is scheduled for Jan 1, 2007.
ttp://www.digitalmars.com/d/future.html
0004デフォルトの名無しさん
2006/12/09(土) 17:22:32とか無いかな
0005デフォルトの名無しさん
2006/12/09(土) 17:30:11どういうコードを実現したいの?
0006デフォルトの名無しさん
2006/12/09(土) 18:02:14つい最近Dを勉強しはじめたばかりなので具体的なコードは書けないんですけど、
例えば、可変長引数テンプレートでaliasのリストを渡して、
それぞれの名前と対応するメンバ変数と、
それぞれ同じような処理をするメンバ関数(get、set用)を持ったクラスを宣言する…
という感じです
解りにくくてすみません
何と言うか、もっと具体的なコード書けるようになってから出直した方がいい感じですね
0007デフォルトの名無しさん
2006/12/09(土) 18:11:49タプルのforeachがまんまstatic foreach。ただし、関数内だけでしか使えないけど。
0008デフォルトの名無しさん
2006/12/09(土) 19:44:070009デフォルトの名無しさん
2006/12/09(土) 19:50:09あ、そうなんですか
タプルが解るようになったら試してみます
0010デフォルトの名無しさん
2006/12/09(土) 21:24:23Initializing a struct S from a value v is now rewritten as S(v).
これ、どうなんだろう
opCastの幅が広がりんぐってこと?
0011デフォルトの名無しさん
2006/12/09(土) 21:31:17違う。opCall。
cast(S)vがS(v)に、S s=v;がS s=S(v);に。
しかもポインタには使えない。いわいる一つの微妙。
001210
2006/12/09(土) 21:50:250013デフォルトの名無しさん
2006/12/10(日) 00:50:37いまさらcast()がいらんようになるのか?
0014デフォルトの名無しさん
2006/12/10(日) 01:05:57struct 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
}
こういうことっぽい。
0015デフォルトの名無しさん
2006/12/10(日) 01:26:51ふーん
へえ
うーん
・・・
構造体と組み込み型の間の垣根が少し下がったと思っておこう
0016デフォルトの名無しさん
2006/12/10(日) 01:36:15(http://www.digitalmars.com/d/operatoroverloading.html の一番下)
要らないと思うんだけどなあ...
0017デフォルトの名無しさん
2006/12/10(日) 01:51:30まじか
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
}
まじだ
0018前954
2006/12/10(日) 03:00:53.diの件報告しときました。さんくす。
http://d.puremagic.com/issues/show_bug.cgi?id=668
http://pc8.2ch.net/test/read.cgi/tech/1158013550/972
は仕方ないような…テンプレートを、使ってる各objのパブリックシンボルに
してしまうのは無理(すると複数のモジュールから同じテンプレートインスタンスを
使えなくなる)。なのでどうしようもないと思う。#突っ込み希望
0019デフォルトの名無しさん
2006/12/10(日) 05:19:46Dec 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.
0020デフォルトの名無しさん
2006/12/10(日) 05:47:23Part9 の 799-814 あたりの const 配列が case で使えないあたりはどーなのだろう?
0021デフォルトの名無しさん
2006/12/10(日) 15:43:14staticなopCallで代用できるとはいえ、バッドノウハウの臭いが・・。
0022デフォルトの名無しさん
2006/12/10(日) 22:04:210023デフォルトの名無しさん
2006/12/10(日) 22:55:37構造体はnewしないでも作れることを考えるとなんか上手いのが思いつかん。
thisで自分型を返すstatic opCallが定義できるとか?
0024デフォルトの名無しさん
2006/12/10(日) 23:00:23ポインタでは無いからthisは無い。
0025デフォルトの名無しさん
2006/12/10(日) 23:31:28struct A {
int a;
this(int x) { a = x; }
}
{
A a(10);
// a.a == 10
}
0026デフォルトの名無しさん
2006/12/11(月) 00:07:170027デフォルトの名無しさん
2006/12/11(月) 00:36:540028デフォルトの名無しさん
2006/12/11(月) 12:02:38でもC++みたいに書きたいなあ
0029デフォルトの名無しさん
2006/12/11(月) 13:11:56なるほどー。初心者相手にいろいろとありがとうございます。。
0030デフォルトの名無しさん
2006/12/11(月) 14:03:15そういう時は、classとscopeを使え、ということなのかも
0031デフォルトの名無しさん
2006/12/11(月) 15:48:20>>25とすると「構造体はnewを省略できる」ってことになるな・・。
あ、C#じゃそうなってる。
でもDだとstatic opCallとの曖昧さを解決せにゃならんから、
それでopCallに統一したってことなのかな。
でもopCallって、後になってコンストラクタの代用として提案されたテクニックだったような。
0032デフォルトの名無しさん
2006/12/11(月) 17:16:42今回の変更は、
・cast式の動作を、cast先の構造体型で定義できるようになった
・構造体型の初期化の動作を定義できるようになった
・構造体型変数宣言の、汎用的な初期化を定義できるようになった
という変更で、>15の言うような意図だと思う。
だから、
> でもopCallって、後になってコンストラクタの代用として提案されたテクニックだったような。
これを踏まえて、すでに初期化用のopCallが定義されている構造体型について、
いままでなら S s = S(a); と書くところを、構造体の定義を変えなくとも
S s = a; と書けるようになることを意図してるんじゃないかな、たぶん。
0033デフォルトの名無しさん
2006/12/11(月) 17:18:12誤 > ・構造体型の初期化の動作を定義できるようになった
正: ・構造体型の代入式の動作を定義できるようになった
0034デフォルトの名無しさん
2006/12/13(水) 14:48:42unittestや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メソッド的にして、名前も付けたい的な。
0035デフォルトの名無しさん
2006/12/13(水) 17:53:270036デフォルトの名無しさん
2006/12/13(水) 19:42:45テンプレートのために妥協したというか、そんな感じがするけど。
0037デフォルトの名無しさん
2006/12/13(水) 21:29:470038デフォルトの名無しさん
2006/12/13(水) 23:59:45newしないでいいだけ?
0039デフォルトの名無しさん
2006/12/14(木) 04:15:120040デフォルトの名無しさん
2006/12/14(木) 04:25:550041デフォルトの名無しさん
2006/12/14(木) 04:47:120042デフォルトの名無しさん
2006/12/14(木) 08:35:33ttp://www.codu.org/nestedvm-gdc/
This is a port of GDC to work with NestedVM, so you can generate Java bytecode from D.
0043デフォルトの名無しさん
2006/12/14(木) 12:54:38ver1.0マダーーーーーーーーーーーーーーーーーーーーーーーーーー?
0044デフォルトの名無しさん
2006/12/14(木) 14:33:200045デフォルトの名無しさん
2006/12/14(木) 14:52:180046デフォルトの名無しさん
2006/12/14(木) 17:26:070047デフォルトの名無しさん
2006/12/14(木) 18:34:000048デフォルトの名無しさん
2006/12/15(金) 04:36:35D版がなぃ!
0049デフォルトの名無しさん
2006/12/15(金) 08:34:51private 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,{});
}
0050デフォルトの名無しさん
2006/12/15(金) 08:44:31template 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");
0051デフォルトの名無しさん
2006/12/15(金) 10:34:52ttp://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 対応
0052デフォルトの名無しさん
2006/12/15(金) 19:04:44このレスをみたあなたは・・・3日から7日に
ラッキーなことが起きるでしょう。片思いの人と両思いになったり
成績や順位が上ったりetc...でもこのレスをコピペして別々のスレに 5個貼り付けてください。貼り付けなかったら今あなたが1番起きて
ほしくないことが起きてしまうでしょう。
コピペするかしないかはあなた次第...
○。・。○。・。○。・。○。・。○。・。○。・。○。・。○。・。○
0053デフォルトの名無しさん
2006/12/16(土) 04:03:13{
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;
}
こんなかんじの事って出来ないのかね?
0054デフォルトの名無しさん
2006/12/16(土) 16:25:190055デフォルトの名無しさん
2006/12/16(土) 16:51:31import 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;
}
0056デフォルトの名無しさん
2006/12/17(日) 15:53:34private:
って日常茶飯事的に入れたらセクション名と勘違いされて悲しいです
ていうかバグ?
0057デフォルトの名無しさん
2006/12/17(日) 17:27:20全角スペースとかを手前に挿入すれば回避できたはず。
0058デフォルトの名無しさん
2006/12/17(日) 18:38:55あるいは、private { }にするとか、private ...と個別に書いて回避するか。
0059デフォルトの名無しさん
2006/12/18(月) 22:06:09http://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.
0060デフォルトの名無しさん
2006/12/18(月) 22:39:000061デフォルトの名無しさん
2006/12/19(火) 09:48:35assert(0)しろってことかな
0062デフォルトの名無しさん
2006/12/19(火) 09:52:18それにしても仕様?
0063デフォルトの名無しさん
2006/12/19(火) 10:43:56class 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が見えるのは仕様。
0064デフォルトの名無しさん
2006/12/19(火) 12:45:03Dのfriend属性とか言うやつか、こんにゃろう・・・。
まりがとうございました・・。
0065デフォルトの名無しさん
2006/12/19(火) 16:40:04gdc 2.0 RPM/DEB
ttp://gdcgnu.sourceforge.net/
0066デフォルトの名無しさん
2006/12/19(火) 16:45:160067デフォルトの名無しさん
2006/12/19(火) 21:35:36した状態で isidigit をそのまま使おうとすると関数名が衝突して、
精神的に萎える。
std.stream のほうは private なんだから無視してくれるとありがたいんだけどなー
0068デフォルトの名無しさん
2006/12/21(木) 01:10:520069デフォルトの名無しさん
2006/12/21(木) 22:30:260070デフォルトの名無しさん
2006/12/21(木) 23:47:330071デフォルトの名無しさん
2006/12/22(金) 00:07:590072デフォルトの名無しさん
2006/12/22(金) 01:12:29パパッとかけて良い。
時々ね。実際は要らん。混乱のもと。
0073デフォルトの名無しさん
2006/12/22(金) 07:49:22template 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);
}
0074デフォルトの名無しさん
2006/12/22(金) 09:56:49Dはメンバ関数をプロパティ形式で呼び出せるからそんなことする必要ないんじゃ?
そういう話じゃなくて、
auto Klass hoge(){
return Klass.new;
}
ってメンバ関数を定義したいという話じゃないかと思った。
用途は知らないけど。
0075デフォルトの名無しさん
2006/12/22(金) 14:38:35それは素直にメンバをpublicにすればいいんじゃないか……?
ご丁寧にfinalまでつけてるし。
オブジェクトはできるだけimmutableに、
副作用を避けるプログラミングを心がける俺。
0076デフォルトの名無しさん
2006/12/22(金) 14:48:33ところで>>74のKlass.newなんて書き方は通るの?
0077デフォルトの名無しさん
2006/12/22(金) 16:34:24軽いゲッタの時に時々ね
class AAA {
auto i(){ return(i_ + 2); }
private int i_;
}
0078デフォルトの名無しさん
2006/12/22(金) 16:41:37違う言語と間違えた。
>>77
ああー、型推論のことか。
RAIIがautoじゃなくてscopeになったの忘れてた。
字面的にはstaticとかとややこしいことになりそうね。
0079デフォルトの名無しさん
2006/12/22(金) 16:46:190080デフォルトの名無しさん
2006/12/22(金) 19:34:33それにしても、都合よくscopeって予約語があったのはよかったなって感じ。
0081デフォルトの名無しさん
2006/12/22(金) 20:20:000082デフォルトの名無しさん
2006/12/22(金) 21:07:07そのへんは別にややこしいところじゃないな。
ソースの見通しが悪くなるのが難点だけど、それは>72のとおり最初から
承知の上で、>77のような用途に限れば大した問題にならないから
「あったらいいな」と思うことはあるね、という話か。ようやく分かった。
0083デフォルトの名無しさん
2006/12/23(土) 00:31:58でも以下が通ってないので面倒げ。戻り値の段階で引数を定義すればいいだろうけど。
typeof(i+10) test(int i){
return i+10;
}
func.cのFuncDeclarationのsemantic3をsemanticの手前の方でも行うようにすればよさげ?
0084デフォルトの名無しさん
2006/12/23(土) 05:32:23>>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; // プロパティが必要ないメンバも当然あるでしょう
}
とか。キーワード増やしすぎだけど。
プロパティが呼び出し側の書式の問題に過ぎないってのは、
いずれリファクタリングブラウザなんかが出てきた時とかにも困る気がする。
0085デフォルトの名無しさん
2006/12/23(土) 11:34:28その案だと、_iがvarに変わってわかりにくくなった気がする。
varだけでなくget,setという言葉も特別扱いせにゃならなくなって、
(もとの定義文にあった、)名前の共通からなる見通しのよさがスポイルされると思う。
あとどうやってクラス内部から実体にアクセスするの、とか。
> 要は、「プロパティ」と「その実体のメンバ変数」の間で
> コードの重複を強要される、ってのが問題なんじゃないだろーか。
そもそもは、
・フィールドxをプロパティxへと書き換えるときに備えて
いちいちgetter/setter定義しておくのは無駄だし面倒
・フィールドxをプロパティxへと書き換えるときに、インターフェイスが
変わらないようにしておけば、内部実装だけ書き換えれば済む
という経緯で現在に至るんだろうから、今度は内部実装の書き換えを
最小限にすることが正当進化じゃないかなと。
そこで、プロパティ実装後もクラス内部では依然として以前の名前で実体の変数に
アクセスできるなら、プロパティ経由でアクセスするように変える内部実装だけ
書き換えれば済む。
そのためには、要は外側からのインターフェイスだけ保存されればいいんだから、
アクセス権限に応じて異なるインターフェイスを定義できるようにできればいいと思う。
いまのprivateとかpublicとかだと、
「publicからはこのインターフェイス、privateではこのインターフェイス」
といった風には定義できない(と思う)。
0086デフォルトの名無しさん
2006/12/24(日) 15:30:550087デフォルトの名無しさん
2006/12/24(日) 16:12:28Dec 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.
0088デフォルトの名無しさん
2006/12/24(日) 19:05:47char[][] names = ["alice", "bob", "carol"];
は書けるようになっている。
でも最初の要素を変に特別扱いするのは相変わらず……。
class Animal{}
class Dog : Animal{}
class Cat : Animal{}
Animal[] animals = [new Cat(), new Dog()]; // コンパイル通らない
ちゃんと配列リテラルの型を明示的に宣言できて、
型を省略した場合は”全要素の最大公約数な型”にするとかして欲しいなぁ。
あと、
unittest{ abstract class A{} }
がコンパイル通らないのはいいんだろうか。
0089デフォルトの名無しさん
2006/12/24(日) 19:21:41だわな。Walterたん、アドホックな対応好きだから。DMDが早いのもそのせい(おかげ?)。
>unittest{ abstract class A{} }
非staticなネストクラスにabstractか。多分バグ。
0090デフォルトの名無しさん
2006/12/24(日) 22:25:25wchar[][] w= [cast(wchar[])['A'], [cast(wchar)'B','\u7000']]; //OK
あいかわらずwcharの肩身が狭い・・・
0091デフォルトの名無しさん
2006/12/25(月) 05:03:55どっちかっつーとコンパイル時が欲しい。
0092デフォルトの名無しさん
2006/12/25(月) 05:22:16全く同じ方が二つあるのはめんどいだけだ
0093デフォルトの名無しさん
2006/12/25(月) 11:51:24その議論は3000年前に通過しているッ!
0094デフォルトの名無しさん
2006/12/25(月) 13:57:49うおっ、phobosにalias定義がまぶしっ。こんなんあったのか。
0095デフォルトの名無しさん
2006/12/25(月) 22:46:40bit b = true;
ってなんかおかしくね?
0096デフォルトの名無しさん
2006/12/26(火) 00:17:58bool b = true; // or false
じゃあなくて
bit b = 1; // or 0
こうじゃないの
0097デフォルトの名無しさん
2006/12/26(火) 00:23:04true != 0
false == 0
ってことか
0098デフォルトの名無しさん
2006/12/26(火) 00:25:00すまそ
0099デフォルトの名無しさん
2006/12/26(火) 02:10:400100デフォルトの名無しさん
2006/12/26(火) 02:42:39サブクラスのオブジェクトからスーパクラスの元メソッドが
呼べなくなるのはイタクね?(コンパイルエラーデチャウヨ・・)
あとpackageがまともに動かんのもイタイ・・・
package abstractなメソッドが使えんし・・orz
0101デフォルトの名無しさん
2006/12/26(火) 02:52:55alias SuperClass.method method; ?
0102デフォルトの名無しさん
2006/12/26(火) 02:55:04>スーパークラスのメソッドをサブクラスでオーバーロードすると、
>サブクラスのオブジェクトからスーパクラスの元メソッドが
>呼べなくなるのはイタクね?(コンパイルエラーデチャウヨ・・)
ふつうに出来るわけだが。
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();
}
0103100
2006/12/26(火) 03:31:00class 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;
}
0104デフォルトの名無しさん
2006/12/26(火) 03:34:55>>101
0105100
2006/12/26(火) 03:35:45書き込んでから気付いたけど、一応
b.func(1);
を
b.A.func(1);
にすると通るね。この書式、知らんかった。ありがとう。
0107デフォルトの名無しさん
2006/12/26(火) 04:06:580108デフォルトの名無しさん
2006/12/26(火) 11:22:35ついでに「共変の戻り値」なる言語仕様があることに最近気づいた。
しかもJava5にもあったなんて、全く気づいてなかったし……。
0109デフォルトの名無しさん
2006/12/26(火) 11:51:340110デフォルトの名無しさん
2006/12/26(火) 17:51:45x.func();の代わりによくx.A::まで書いてfunc();をリストさせてたお
0111デフォルトの名無しさん
2006/12/27(水) 09:26:17テンプレート使えるかな?
0112デフォルトの名無しさん
2006/12/28(木) 02:47:30void add(T)(inout Box b, T x){
if ( .unboxable!(T)(b) ) b= .box( .unbox!(T)(b) + x );
}
なんか違う気もするが・・
0113デフォルトの名無しさん
2006/12/28(木) 12:30:25そんな感じなんだけど必要に応じてキャストも入れてるからややこしくなってる。
とりあえずmixin二つとテンプレート一つでなんとかやってるけど
0114デフォルトの名無しさん
2006/12/28(木) 14:20:49import 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っている? いまいち使い道わからんのだけど。
0115デフォルトの名無しさん
2006/12/28(木) 14:51:33おお、すごい。俺の頭が足りないだけだろうけど。
いっかいBoxに入って渡ってくるから必要になる。
0116デフォルトの名無しさん
2006/12/28(木) 17:09:37下記コードのような構文が旨く動いてくれず、ドン詰まっております。
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
0117デフォルトの名無しさん
2006/12/28(木) 17:21:22相互import時、static thisが複数あると順序がどーのこーのという理由でエラーになるようになってる。
0118デフォルトの名無しさん
2006/12/28(木) 17:29:070119デフォルトの名無しさん
2006/12/28(木) 17:46:270120デフォルトの名無しさん
2006/12/28(木) 17:57:34じゃなくて
static const int a;
static this(){a= 1;}
と書いたのは、1はコードを簡潔にするための暫定的な値で、
実際は関数で取得され、動的に決まるためです。(わかりづらくてスマソ)
したがって、static thisを複数持たざるを得ません。(多分・・)
0121デフォルトの名無しさん
2006/12/29(金) 05:52:19まあ(良い意味で)減ってくれた方が嬉しいんだけど
たしか宿題スレってあったよね?
0122デフォルトの名無しさん
2006/12/29(金) 06:35:48まじで知りたい。
0123デフォルトの名無しさん
2006/12/29(金) 10:00:070124デフォルトの名無しさん
2006/12/29(金) 12:03:32opなし=絶対値
opPos = 差分
みたいな変な記述法があると便利な場合
0125デフォルトの名無しさん
2006/12/29(金) 12:08:14ETで正規表現作りたいときに役に立つ。
0126デフォルトの名無しさん
2006/12/30(土) 00:16:31何時ごろ公開されるんだろ
0127デフォルトの名無しさん
2006/12/30(土) 13:22:110128デフォルトの名無しさん
2006/12/31(日) 06:45:37ところで
小数に通常realを使えって事は整数にも通常longを使えって事でいい?
0129デフォルトの名無しさん
2006/12/31(日) 15:48:55longを常用する理由はなんかあったっけ?
0.177の変更点の和訳、wikiも日本語リファレンスも
> 値vから構造体Sへのキャストを S(v) と書けるようにしました
> 値vから構造体Sを初期化するのを S(v) と書けるようにしました
という感じの文になってるんだけど、コンパイラがそう書き直すようになった、
という変更じゃなくて、和訳の文面通り、プログラマーがそう書けるようになった、
という変更なの?
プログラマは前からそう書いてたんじゃなかったっけ。
0130デフォルトの名無しさん
2006/12/31(日) 17:04:05realを常用する理由ってのはどうせ速度差大して無いから精度いい方を使っとけってこと?
整数の場合は計算精度は変わらないんだから、オーバーフローしないならintでいいんじゃないの?
……ってなんかすげえ当たり前のこと言ってるが。
0131デフォルトの名無しさん
2006/12/31(日) 19:42:56和訳もまだない上に英語分からんから本家 Change Log が読めん・・・
ゆえに原因がわからん・・・orz
0132デフォルトの名無しさん
2006/12/31(日) 19:47:05OSの分解能をそれぞれの型に落とし込むときに、
floatが一番コストが掛かるからじゃないのかな。
型の精度の保障という余計なコストが支払われないrealがオススメってことかと。
0133デフォルトの名無しさん
2006/12/31(日) 20:05:06ちょっとまて、floatがdoubleより遅い具体的な環境ってどれよ?
0134デフォルトの名無しさん
2006/12/31(日) 20:08:550135デフォルトの名無しさん
2006/12/31(日) 20:14:400136デフォルトの名無しさん
2006/12/31(日) 20:17:210137デフォルトの名無しさん
2006/12/31(日) 20:44:230138デフォルトの名無しさん
2006/12/31(日) 20:44:47> * 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つめの変更に引っかかったのかなあ。
0139デフォルトの名無しさん
2006/12/31(日) 21:00:2966792999
66309956
64364378
float で f1 += f2 を5秒間
66186868
64843398
63162083
遅いな
0140デフォルトの名無しさん
2006/12/31(日) 21:10:31笑うところですか?
0141デフォルトの名無しさん
2006/12/31(日) 21:11:460142デフォルトの名無しさん
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前後。
0143デフォルトの名無しさん
2006/12/31(日) 22:47:060145デフォルトの名無しさん
2007/01/01(月) 00:05:24時差
0147デフォルトの名無しさん
2007/01/01(月) 00:27:430148デフォルトの名無しさん
2007/01/01(月) 00:35:40その日だろ。
0150デフォルトの名無しさん
2007/01/01(月) 16:42:26all.d
import a;
import b;
a.d
import all;
static this(){}
b.d
import all;
static this(){}
c.d
import all;
void main() {}
これで順番が解決されて大丈夫になるはず。
0151デフォルトの名無しさん
2007/01/01(月) 20:18:09import 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
バグじゃね?
0152デフォルトの名無しさん
2007/01/01(月) 20:29:32わたくし英語出来ませんのでどなたか本家に報告をお願い致します。
0153デフォルトの名無しさん
2007/01/01(月) 20:42:00cast(char[])1はエラー。エラーメッセージ嫁
0154デフォルトの名無しさん
2007/01/01(月) 20:43:22そんなことはわかってるんよ
エラー行嫁
0155デフォルトの名無しさん
2007/01/01(月) 20:45:21ああ、ファイル名が異なるって話ね。バグでしょ。
0156デフォルトの名無しさん
2007/01/01(月) 23:08:350157デフォルトの名無しさん
2007/01/01(月) 23:15:58>154-155
0158デフォルトの名無しさん
2007/01/02(火) 00:05:350159デフォルトの名無しさん
2007/01/02(火) 00:13:12デベッロッパ:アップルさん冬にリリースと言いましたがまだでしょうか?
アップル:ああ、冬って言うのはクパチーノに雪が降るときですからまだですね。
デベロッパ一同:ポカーン(クパチーノは雪が降るような気候じゃない)
0160デフォルトの名無しさん
2007/01/02(火) 06:37:29が
s.d(5):
になってないのは仕様
0161デフォルトの名無しさん
2007/01/02(火) 08:15:350162デフォルトの名無しさん
2007/01/02(火) 14:24:470163デフォルトの名無しさん
2007/01/02(火) 14:48:21Walter Bright 2007/01/01 16:53
Here it is, and I'm not ready yet :-(
I want to fix a few more problems first.
0164sage
2007/01/02(火) 17:04:050165デフォルトの名無しさん
2007/01/02(火) 17:16:03何がD言語だよ洒落のつもりか
0166デフォルトの名無しさん
2007/01/02(火) 17:17:54ここ見てから言え
http://ja.uncyclopedia.info/wiki/D%E8%A8%80%E8%AA%9E
0167デフォルトの名無しさん
2007/01/02(火) 17:24:34ユーモアよりも愛を感じてワラタ
0168デフォルトの名無しさん
2007/01/02(火) 18:24:49なんでこの順番なんだ?
0169デフォルトの名無しさん
2007/01/02(火) 19:45:230170デフォルトの名無しさん
2007/01/02(火) 19:45:25もう少し前から読め
0171デフォルトの名無しさん
2007/01/02(火) 23:14:49それは知ってるよ
0172デフォルトの名無しさん
2007/01/02(火) 23:42:570173デフォルトの名無しさん
2007/01/02(火) 23:46:130174デフォルトの名無しさん
2007/01/03(水) 00:18:150175デフォルトの名無しさん
2007/01/03(水) 00:41:37それとももうきっぱり諦めてひたすらバージョンアップ再開するのか
どっちなんだ
0176デフォルトの名無しさん
2007/01/03(水) 01:09:070177デフォルトの名無しさん
2007/01/03(水) 01:13:170178デフォルトの名無しさん
2007/01/03(水) 02:02:54ウォルターたんは生粋のS
間違いない
0179デフォルトの名無しさん
2007/01/03(水) 03:49:570180デフォルトの名無しさん
2007/01/03(水) 07:24:590181デフォルトの名無しさん
2007/01/03(水) 12:13:030182デフォルトの名無しさん
2007/01/03(水) 12:17:280183デフォルトの名無しさん
2007/01/03(水) 13:34:50これでライブラリとか元気になるといいなあ。
0184デフォルトの名無しさん
2007/01/03(水) 14:16:410185デフォルトの名無しさん
2007/01/03(水) 15:27:580186デフォルトの名無しさん
2007/01/03(水) 15:38:070187デフォルトの名無しさん
2007/01/03(水) 15:50:40サーバが非力なのか意外と人気なのか
0188デフォルトの名無しさん
2007/01/03(水) 15:54:310189デフォルトの名無しさん
2007/01/03(水) 15:54:34/.edになってる。
0190デフォルトの名無しさん
2007/01/03(水) 17:12:500191デフォルトの名無しさん
2007/01/03(水) 17:45:350192デフォルトの名無しさん
2007/01/03(水) 18:07:17コンパイル通らなくなるような変更はないとみんな信じたがっている。
>>191
本家和訳の話?
なら、中の人が頑張って追ってくれてるから信頼していいと思う。
0193デフォルトの名無しさん
2007/01/03(水) 18:14:120194デフォルトの名無しさん
2007/01/03(水) 18:14:550195デフォルトの名無しさん
2007/01/03(水) 18:15:15俺も信じたがっているよ
でもガクブル
0196デフォルトの名無しさん
2007/01/03(水) 18:16:100197デフォルトの名無しさん
2007/01/03(水) 18:16:10ミラーから落とせよ
0198デフォルトの名無しさん
2007/01/03(水) 18:20:33http://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.
0199デフォルトの名無しさん
2007/01/03(水) 18:28:08http://2chshare.net/mini/files/2chshare-mini_0167.zip.html
0200デフォルトの名無しさん
2007/01/03(水) 18:45:15dhry.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*
0201デフォルトの名無しさん
2007/01/03(水) 18:56:39D 0.177から暗黙的にchar[]からchar*に変換できなくなったんだけど、サンプルを修正しわすれたんだろうな。
0202デフォルトの名無しさん
2007/01/03(水) 19:10:520203デフォルトの名無しさん
2007/01/03(水) 19:12:530204デフォルトの名無しさん
2007/01/03(水) 19:13:47かなしいことに・・
0205デフォルトの名無しさん
2007/01/03(水) 19:18:41dhry.dの607行目の
strcpy(Reg_Define, "Register option not selected.");
を
strcpy(Reg_Define.ptr, "Register option not selected.");
に変更すればおk
0206デフォルトの名無しさん
2007/01/03(水) 19:29:16おまいらはっぴーにゅーD言語。
これ以降仕様変更はおとなしくなるんだろうか。
>>88の配列の仕様とかは根本から修正して欲しい気も。
0207200
2007/01/03(水) 19:52:21>>205
サンクスコ.お陰様で試せましたよ
これは確かにコンパイルも実行速度も速くて,ヨサゲですな〜
LL感覚で使える.
ライブラリ次第だろうけど
matlabオンリーの業務シミュレーション業界に風穴を開けれるかも.
0208デフォルトの名無しさん
2007/01/03(水) 20:10:38ありがとう
本家落とせなかったから助かりました
あとmd5sumは合ってるけどなぜに167?
0209デフォルトの名無しさん
2007/01/03(水) 20:31:060210デフォルトの名無しさん
2007/01/03(水) 20:35:22ttp://2chshare.net/mini/
ここ見れ
0211デフォルトの名無しさん
2007/01/03(水) 20:47:060212デフォルトの名無しさん
2007/01/03(水) 21:56:29116っす。
旨くいきました(all.dはpublic importにしたけど)。
ありがとうございます。
次期Dではこの辺、何とかしてもらいたい.
0213デフォルトの名無しさん
2007/01/03(水) 22:17:470214デフォルトの名無しさん
2007/01/03(水) 22:18:35D.NETがあった気もします。
0215デフォルトの名無しさん
2007/01/03(水) 22:40:530216150
2007/01/04(木) 03:30:46解決できてよかったです。
publicつけないと駄目でしたね。すんません。
static thisの順番の解決をどうするといいの?という問題があるんですよねぇ。
static thisで他のモジュールに関係しているかどうかの検査ができれば
いいのだろうけど。それって案外、難しいわけで。
0217デフォルトの名無しさん
2007/01/04(木) 05:38:56VSpluginD - Visual Studio plugin for D Language
http://www.dsource.org/projects/vsplugind
VS2005〜用プラグイン
改行時のインデントがなんか変?なのと、
エラーメッセージの行数が1行ずれるのはご愛嬌。
作者、日本人っぽいから、見てたら直してくれないかなぁ
0218デフォルトの名無しさん
2007/01/04(木) 09:52:52以前のバージョンでD言語入門の本か何かで
/dmd 以下に /dm 内の /bin や /lib を移動してしまう
(つまり mv /dm/* /dmd/)
みたいな方法があったのですが、今も変わってないですか?
0219デフォルトの名無しさん
2007/01/04(木) 13:58:56コンパイルは早いけど正規表現が遅いからLLの代替にはならない気がする。
0220デフォルトの名無しさん
2007/01/04(木) 14:15:32dmcに入ってるdmフォルダをdmdに入ってるdmフォルダに上書き
0221デフォルトの名無しさん
2007/01/04(木) 14:47:59dmd/binの中に"dmd"て名前のELFバイナリが入ってて
cygwinからdmdと打ち込むと”実行できないバイナリ”とか言われてメドイ。
ウチだけ?
0222デフォルトの名無しさん
2007/01/04(木) 15:04:39それLinux用のバイナリ
0223デフォルトの名無しさん
2007/01/04(木) 16:23:40多分"dmd"を削除すればいいんだろうけどバージョン上げる度に消すのはたしかにメドイ。
0224デフォルトの名無しさん
2007/01/04(木) 16:27:530225デフォルトの名無しさん
2007/01/04(木) 16:42:380226デフォルトの名無しさん
2007/01/04(木) 17:45:54ttp://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
0227デフォルトの名無しさん
2007/01/04(木) 18:13:20TreeNodeもMenuも日本語化ける〜
Tabは、直ってるのに
0228デフォルトの名無しさん
2007/01/04(木) 19:04:59DFL forum
ttp://dsource.org/forums/viewforum.php?f=39
に書き込んみては?
0229デフォルトの名無しさん
2007/01/04(木) 20:11:15http://journal.mycom.co.jp/news/2007/01/04/361.html
0230デフォルトの名無しさん
2007/01/04(木) 20:31:48よくわからんけど、正規表現の実装自体が悪いんじゃなくて
正規表現オブジェクトを毎回生成してたりするんじゃないの?
0231デフォルトの名無しさん
2007/01/04(木) 20:39:190232デフォルトの名無しさん
2007/01/04(木) 20:42:30GDC
0233デフォルトの名無しさん
2007/01/05(金) 00:10:01DFLは使っているWinAPIがワイドキャラ系とアスキー系まじりまくり
0234デフォルトの名無しさん
2007/01/05(金) 01:30:51ν速のDスレは結構伸びてた
以外にν速民ってD知ってたんだな
0235デフォルトの名無しさん
2007/01/05(金) 02:12:22w3m その7 [UNIX]
山本直樹 レッド Red 1969〜1972 [漫画]
【300P】ドリームブッククラブ!【出版化】 [創作文芸]
【Ogg Vorbis】iPodにROCKbox【ギャップレス】 [ポータブルAV]
過去ログ [Web制作]
0236デフォルトの名無しさん
2007/01/05(金) 06:40:52ファイル読み込みループの外で正規表現クラスを生成したり
GCを切ったりしてみたけど、やっぱ、Perlよりも遅い・・・
BufferdFileをreadLineしてるのがいかんのかなぁ?
auto file = new BufferdFile("sample.txt");
while(!file.eof){
char[] line = file.readLine();
以下、行単位の正規表現
行単位でなくサイズ単位で処理した方が良いんだろうね、きっと。
0237デフォルトの名無しさん
2007/01/05(金) 07:17:440238デフォルトの名無しさん
2007/01/05(金) 10:44:00見てみた、ほとんどA系しかないな
これは、使えないなぁ
0239sage
2007/01/05(金) 11:59:28そんなのなかったっけ
0240デフォルトの名無しさん
2007/01/05(金) 12:26:51GCについて触れて欲しい所だなぁと思ったり。
そいやみんな、どんな機能に惹かれてDに手を出してる?
GC + 強い型付け + ネイティブコード生成の共存が俺のツボ。
0241デフォルトの名無しさん
2007/01/05(金) 12:30:21こんな感じでいけるけど
std.string.toString(std.windows.charset.toMBSz("ほげ"));
面倒
0242デフォルトの名無しさん
2007/01/05(金) 13:16:05最初C++出来なかったからDに手を出した。
0243デフォルトの名無しさん
2007/01/05(金) 13:58:220244デフォルトの名無しさん
2007/01/05(金) 13:59:504invalid UTF-8 sequence
ばっかりじゃー
折角のUTF-8なのに
0245デフォルトの名無しさん
2007/01/05(金) 14:36:140246デフォルトの名無しさん
2007/01/05(金) 16:21:19似たような理由。
研究職でプログラムが必須技能だが、専業プログラマがいない。
ネイティブコード生成が必要な場合、C/C++だと初心者が配列で詰まりコードの保守性が悪かったのだが、
Dを試験的に使ってみると結構保守性が高いことがわかった。
あとは機材で検証して確実性が保障できれば万々歳。
0247デフォルトの名無しさん
2007/01/05(金) 16:45:57DWTが一番標準に近い扱いをされているだけで、
Dをフルに使い切るようなものではないよね。
オレのつぼはC++を置き換えられてさらに上回れるところ。
強力なコンパイルタイムプログラミングと高速なコンパイルは
STL/Boost以降のプログラミングスタイルには必須だと思うから。
0248デフォルトの名無しさん
2007/01/05(金) 16:51:460249デフォルトの名無しさん
2007/01/05(金) 16:58:020250デフォルトの名無しさん
2007/01/05(金) 18:34:58DWTは、日本語いけた
0251デフォルトの名無しさん
2007/01/05(金) 18:46:09C++で書いた俺Lispでも移植してみようかなw
0252デフォルトの名無しさん
2007/01/05(金) 20:01:42というか、2004年くらいから更新されてなかったりして、使うのが怖いんだが。。。
0253デフォルトの名無しさん
2007/01/05(金) 20:05:37バージョンアップごとにW系が増えてきてるから
バージョンアップ→4invalid UTF-8 sequence→修正みたいなことになった
全部Wになってくれるとよくなると思う
>>250
大体はいけてるけどStyledTextがダメだったと思う
DWTはJavaのStringをDのchar[]に置換しているから
lenghプロパティで文字を数えている部分で日本語がずれる
0254デフォルトの名無しさん
2007/01/05(金) 20:10:32古いとコンパイルできなかったりするからな
面倒でなければlibpqを直接使うか自分でDクラス作ったほうがいいんじゃない
そしてそれをD言語版のCPANに(ry
0255デフォルトの名無しさん
2007/01/05(金) 20:22:19ありがと。やっぱ作るしかないか。。。
libpqを使うってことはC関数を持ってくるってことだよなあ。
その辺まだ使ったことないんで調べてみる。
0256デフォルトの名無しさん
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を消し忘れとる。些細なことで申し訳ない。
日本語コミュニティがこれだけ充実してる理由ってなぜなんしょ。
0257デフォルトの名無しさん
2007/01/05(金) 20:53:35正直やねう。
0258デフォルトの名無しさん
2007/01/05(金) 21:06:520259デフォルトの名無しさん
2007/01/05(金) 21:08:22boostもそうだった。
0260デフォルトの名無しさん
2007/01/05(金) 21:18:150261デフォルトの名無しさん
2007/01/05(金) 21:19:160262257
2007/01/05(金) 21:20:41俺もDmemoのほうが先だったけど、どうもやねう辺りから急激に増えた気がする。
だからゲーム用ライブラリがやたら充実してるわけで。
やねうが癌だってのは同意
0263デフォルトの名無しさん
2007/01/05(金) 21:46:19いまも活動してるし。
俺はドラフト読んだよスレで初めて知った。
>>256
http://shinh.skr.jp/m/?date=20061204#p17
と、その下のコメント欄にそのへんの話が書いてあった。
> なんか US だと ABCDF と、 D は日本で言う C とか可なので、
> プログラミングの単位不可じゃなくてよかたーという
というようなことらしいそうな。
0264デフォルトの名無しさん
2007/01/05(金) 22:36:25基本的にDはCの関数を直接扱える
言語仕様のCとのインターフェイスってところ参照
0265デフォルトの名無しさん
2007/01/05(金) 22:40:30俺もやねうのglExcessでDの存在を知った
感謝しているのはk.inabaの人
0266デフォルトの名無しさん
2007/01/05(金) 23:31:38なる。Segfault本人に聞かないとまだわからん、みたいなところはあるけど。
駄洒落やらレトリックの類の訳出は相当悩むらしいので致し方ないところか。
Matrixなどテンプレートで書くべきクラスで、テンプレートを知らない初心者に使わせる場合に
シンタックスシュガーが欲しいときがあるのだが、擬似的に解決するトリックがあればなあと思う日々。
class Matrix(T = real) {}
// 基底クラス的用法、Matrix!()でもMatrix!(creal)でも通したい
void write(Matrix m) {}
// MatrixでMatrix!()とみなしたい
class Hoge {
Matrix m;
}
0267デフォルトの名無しさん
2007/01/06(土) 00:38:120268デフォルトの名無しさん
2007/01/06(土) 03:02:03Win32APIのA系とW系の扱いってDだとどうなってるの?
0269デフォルトの名無しさん
2007/01/06(土) 04:09:15は Matrixのstaticメソッドにするか
それ自体を関数テンプレートにするべきじゃないかなあ
とりあえず Matrixが増えるんだからwriteも増えないとね
0270デフォルトの名無しさん
2007/01/06(土) 06:25:140271デフォルトの名無しさん
2007/01/06(土) 07:17:30template 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) )
...
}
0272デフォルトの名無しさん
2007/01/06(土) 07:18:04標準のstd.c.windows.windowsはAPIにWとかAとかつけないと呼び出せない。
dsource.org(>>1)のBindingsに入ってるやつが前スレ辺りで推奨されてた。
そっちはAPI名でエイリアスされててコンパイルスイッチで切り替えられたと思う。
A系に文字列を渡す時はstd.windows.charsetのtoMBSz使う。
W系にはwcharをそのまま渡して大丈夫。
0273デフォルトの名無しさん
2007/01/06(土) 09:10:13誤解させて申し訳ない
↓みたくテンプレートクラスを引数とする関数はテンプレート関数にするってのはC++時代からの定石だということは承知しているんですが
class Matrix(T) {}
void write(T)(Matrix!(T) m) {}
なんとか初心者がテンプレートを知らずに書けるシンタックスシュガーができんものかと思いまして。
冷静に考えたら、MatrixのpublicメンバにTを引数ないし返値の型とするメソッドがあると、
基底クラス的な存在は作れませんですね。失礼しました。
0274デフォルトの名無しさん
2007/01/06(土) 09:30:350275デフォルトの名無しさん
2007/01/06(土) 09:41:01しかもリモートで。サポートを要求する電話がかかってくるし……
0276デフォルトの名無しさん
2007/01/06(土) 10:51:52構造体のsizeof的なことをしたいです。
クラスのsizeofは4だったでしょ
ていうかそれが4である必要とかあるのかな
0277デフォルトの名無しさん
2007/01/06(土) 11:52:49構造のsizeofのことをしたいと思います。
そしてクラスのSizeofが4歳である。
必要があります…、4、それ?
0278デフォルトの名無しさん
2007/01/06(土) 12:35:330279デフォルトの名無しさん
2007/01/06(土) 14:03:56……ってことでいいのか? 知らなかった。
0280デフォルトの名無しさん
2007/01/06(土) 14:05:13http://www.kmonos.net/alang/d/property.html
.sizeofプロパティでええんかな。
やっぱりC++からの転向が多いな。と言いつつ俺もJava行く前はC++だったけど。
GCと構造化例外があると、関数の引数と戻り値が
メモリサイズやエラーコードに乗っ取られずに済むから
コードがずっと綺麗になるのが嬉しい。
0281デフォルトの名無しさん
2007/01/06(土) 14:55:36うおお
そうか 基本仕様を調べたい時は object も見た方が良いのか・・・。
サンクス
0282デフォルトの名無しさん
2007/01/06(土) 15:26:310283デフォルトの名無しさん
2007/01/06(土) 15:42:43GCとか例外とかコンパイル速度とかも含めて、総合的にDは楽だと思う。
どの言語が最強かとかは知らん。Dが大好きだ。
0284デフォルトの名無しさん
2007/01/06(土) 18:04:11struct/union の初期化のアレと同じで良いんじゃないかな。
あ でもそうすると型推論できなくなっちゃうか。
0285デフォルトの名無しさん
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付けたい。
0286デフォルトの名無しさん
2007/01/07(日) 05:48:570287デフォルトの名無しさん
2007/01/07(日) 08:06:28> Qt移植しろ
あー、Qt欲しいねぇ。
0288デフォルトの名無しさん
2007/01/07(日) 09:04:31> dsource.org(>>1)のBindingsに入ってるやつ
実体は↓でいいんかな?
http://www.prowiki.org/wiki4d/wiki.cgi?WindowsAPI
wcharの文字列操作関数って自分で用意しないといけないのかな?
日本語文字列はどの形式で扱うのが一般的?
0289デフォルトの名無しさん
2007/01/07(日) 09:27:220290デフォルトの名無しさん
2007/01/07(日) 09:27:390291デフォルトの名無しさん
2007/01/07(日) 09:58:52それか「全部インポートするモジュール」をインポートすれば?
0292デフォルトの名無しさん
2007/01/07(日) 11:04:470293デフォルトの名無しさん
2007/01/07(日) 11:21:26ノ http://dsource.org/projects/build
0294デフォルトの名無しさん
2007/01/07(日) 11:37:03http://www.prowiki.org/wiki4d/wiki.cgi?DDotNet
0295デフォルトの名無しさん
2007/01/07(日) 18:43:52http://www.tiobe.com/tpci.htm
0296デフォルトの名無しさん
2007/01/07(日) 18:46:01ぷらぷらから乗り換えるとして具体的にどういうメリットがあるんかな。
0297デフォルトの名無しさん
2007/01/07(日) 19:00:58コンパイルが通るから C++ の機能の一部をツマミ食いしてベターCとして使えたことだけど、
D って確か、C++ のソースコードはコンパイル通してくれないんだよねぇ?
C のソースコードでもダメなんだっけ?
とにかくそんなんじゃちょっとやそっとのメリットがあってもブレイクするのは厳しい。
0298デフォルトの名無しさん
2007/01/07(日) 19:08:220299デフォルトの名無しさん
2007/01/07(日) 19:10:33Javaがそこそこ使われるようになるまで10年かかった
0300デフォルトの名無しさん
2007/01/07(日) 19:15:11まったく異なる言語ならともかく、C++のソックリさんで
メリットどころか用途的にはC++より狭い範囲でしか使えない。
その点、C++ の劣化コピーとはいえ、Java は環境を問わずに
使えるという大きなメリットを持っていた。
戦術・戦略で例えると D は戦術に長けているけど戦略的にはダメダメで、
Java は戦術的には超ヘタレだけど、戦略的に勝利を納めたとでもいったところ。
0301デフォルトの名無しさん
2007/01/07(日) 19:22:43DaMeDa
0302デフォルトの名無しさん
2007/01/07(日) 21:01:16なに言ってんだ? Java のバージョン1.0がリリースされた時には既にブレイクしていたぞ。
0303デフォルトの名無しさん
2007/01/07(日) 23:02:22最初のブレイク、爆発力がそこそこ普及するために必要なのかどうかだな
開発が長かったからじわじわとしか普及せんのだろう
0304デフォルトの名無しさん
2007/01/07(日) 23:04:560305デフォルトの名無しさん
2007/01/08(月) 00:14:08それとも今度こそ+0.99までには2.0に行くつもりかもしれんがw
前例があるからな
0306デフォルトの名無しさん
2007/01/08(月) 00:15:48一匹0.005%とか
0307デフォルトの名無しさん
2007/01/08(月) 04:31:09とにかく、なんか気持ち悪いな
0308デフォルトの名無しさん
2007/01/08(月) 05:45:270309デフォルトの名無しさん
2007/01/08(月) 08:50:01( ゚∀゚)彡 IDE!IDE!
⊂彡
0310デフォルトの名無しさん
2007/01/08(月) 11:42:17VS2005EEで使えるIDE
0311デフォルトの名無しさん
2007/01/08(月) 12:15:020312デフォルトの名無しさん
2007/01/08(月) 13:16:010313デフォルトの名無しさん
2007/01/08(月) 13:50:48メジャーとマイナーの番号が単純にインクリメントされるDのバージョン付けは
シンプルなので嫌いじゃないな。
ところで、可変個引数テンプレートを特殊化することって出来ない?
template Hoge(T... : Object){
みたいに。
0314デフォルトの名無しさん
2007/01/09(火) 03:34:09template hoge(T...){
static if (is(T == HogeTypeTuple)){ const hoge = 1; }
else { const hoge = 0; }
}
0315デフォルトの名無しさん
2007/01/09(火) 08:32:20void func( T... )( out T p ) {
foreach (i, v; p) {
p[i] = 3;
}
}
こう書きたいとは
void func( T... )( out T p ) {
foreach (inout v; p) {
v = 3;
}
}
思いませんか?
0316デフォルトの名無しさん
2007/01/09(火) 08:35:27タプルを書きかえる時にforeachでiが要るのにvまで出てくるのがもったいないと思っただけです。
0317デフォルトの名無しさん
2007/01/09(火) 18:49:400318デフォルトの名無しさん
2007/01/09(火) 20:00:26まだ1.0未対応で、JIS未対応らしい
0319デフォルトの名無しさん
2007/01/09(火) 20:42:09ICUでよければmangoから使えたと思う(release版はダメだがtrunkは1.0対応してる)
0320デフォルトの名無しさん
2007/01/09(火) 22:12:18Jcode.pmじゃなくてEncode.pmを手本にしてほしかったな。。。
Jcode.pmをベースにすると
AppleがShiftJISを独自に拡張したMacJapaneseとか
IBM/MSがShiftJISを独自に拡張したcp932とかを
Dで処理できるようにしたいときに結局自分で全部作んなきゃいけなくなる。
Encode.pmだったら用意されている以外のコードでも、
マッピング表を組み込んで拡張する仕組みがあらかじめ用意されてて
便利だし、日本語以外のマルチバイト扱う場合もEncode.pmでいいのに。
Jcodeって名前じゃ日本語以外は取り扱いませんってことじゃん・・・。
0321デフォルトの名無しさん
2007/01/09(火) 22:15:26DEncodeはお前に任せた
0322デフォルトの名無しさん
2007/01/09(火) 22:27:09あたまにDをつける意味あるの?
Encode.dでいいんでないの?
0323デフォルトの名無しさん
2007/01/10(水) 14:12:40http://rayerd.ddo.jp/pukiwiki/ingwiki/index.php?C%2FC%2B%2B%A4%CB%C8%E8%A4%EC%A4%BF%BF%CD%A4%CED%B8%C0%B8%EC
0324デフォルトの名無しさん
2007/01/10(水) 14:42:38VSpluginD落してみたけどinnstallできない.
Visual Studio 2005 Standard Edition or above Edition.
とか言われる.
versionはEEからTeam Suiteにupgradeしたはずのもの.
ところで補完が効くんだよね?
0325デフォルトの名無しさん
2007/01/10(水) 15:53:54Editionチェック部分がバグってるので
http://svn.dsource.org/projects/vsplugind/downloads/VSpluginD_fixed.zip
インストーラはこっち使ってください。
補完は付いてるけど、Ctrl+Space押したときの、変数名,型名の補完だけなので
あまり役にはたたないかと。
>217
見逃してました、すいません。
手元のソースでは直してあるので、次出すときにはfixされてると思います。
0326324
2007/01/10(水) 16:16:08作者さん?!感激しまスタ.ありがたく使わせていただきます
0327デフォルトの名無しさん
2007/01/10(水) 18:50:52他に DirectX 扱うライブラリってありましたっけ?
…… 2005/01 更新ってことは、もう二年も前なのか orz
0328デフォルトの名無しさん
2007/01/10(水) 22:06:22つ ttp://www.wikiroom.com/sakurai/index.php?DJcode#q4a42aff
0329デフォルトの名無しさん
2007/01/10(水) 23:25:34おおぅ。早速試してみるか。
0330デフォルトの名無しさん
2007/01/11(木) 00:29:36けど、
char [] sjis = JcodeConvert("サンプル"c, "utf8", "sjis");
writefln(sjis);
なんてのを、やったら 4invalid UTF-8 sequenceと怒られる。(´・ω・`)
しょうがないんで、ファイル出力して確認。
0331デフォルトの名無しさん
2007/01/11(木) 00:40:170332デフォルトの名無しさん
2007/01/11(木) 09:22:58class Hoge {
Hoge foo(Hoge d = null){ return this; }
}
scope foo = new Hoge;
foo.foo.foo;
0333デフォルトの名無しさん
2007/01/11(木) 11:50:36うん、writefなんかはUTF-8のチェックをしているから
バイナリ出力ができる関数じゃないとsjisは出力できない。
import std.cstream;
char [] sjis = JcodeConvert("サンプル\n", "utf8", "sjis");
dout.writeBlock(sjis, sjis.length);
とか。
0334デフォルトの名無しさん
2007/01/11(木) 11:53:270.9の次に0.10が出たから。
0335330
2007/01/11(木) 14:51:52暗黙のルールで、わざわざ見てるのか。
ついでに、gdmd/gdcで、テスト→通った。
LANG=ja_JP.eucJP
--
dout.writeLine(utf8_euc("漢字テスト"));
0336デフォルトの名無しさん
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)];
ですか?
0337デフォルトの名無しさん
2007/01/11(木) 15:21:27便宜上括弧を付けると
(char[])[] strarr
(char[]) strarr[]
のような感じなはず。
0338デフォルトの名無しさん
2007/01/11(木) 15:27:53"char[][]"で一つの型と考えるべし。
こんなのの存在意義はC/C++とのソースコード互換性だけです。
とか言ってみる。
0339デフォルトの名無しさん
2007/01/11(木) 15:43:36ありがとうございます。
#でも、まだ混乱中
数値型の、動的二次元配列は、int[][] i;
そうすると
文字列の動的二次元配列は、char[][][] str;
こうですか?
0340デフォルトの名無しさん
2007/01/11(木) 15:46:19yes
0341336
2007/01/11(木) 16:00:21char[][][] 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";でエラーにしないためにはどうしたらいいのでしょうか?
0342デフォルトの名無しさん
2007/01/11(木) 16:04:51>ありなんですか?
あり
>どうしたら(ry
char[][int][int]
0343デフォルトの名無しさん
2007/01/11(木) 16:12:510344336
2007/01/11(木) 16:14:17感動
char[][] str;は
char[][int] str;とも書けると
なるほど、混乱から醒めました
ありがとうございました
0345デフォルトの名無しさん
2007/01/11(木) 16:16:34それは意味が違ってるぞ。。
0346デフォルトの名無しさん
2007/01/11(木) 16:18:09おいおい
動的配列と連想配列が分からんてスクリプト系から流れてきたんか?
0347デフォルトの名無しさん
2007/01/11(木) 16:23:17char[][] list0;
list0 ~= "foo";
list0 ~= "bar";
table ~= list0;
char[][] list1;
list1 ~= "baz";
list1 ~= "hoge";
table ~= list1
小さい次元の配列を作っては大きい次元の配列に統合していく感じで。
配列の構造が最初から分かってるならこれでも。
char[][][] table = [
["foo", "bar"],
["baz", "hoge"]
];
0348336
2007/01/11(木) 16:27:37連想配列は、int[char[]] iやつじゃなくて?
この場合、int型の動的配列で、キーが文字列の連想配列なんでしょ?
char[] strは、文字の動的配列、キーが整数
char[][] strは、文字列の動的配列で、キーが整数
間違ってる?
0349336
2007/01/11(木) 16:36:56ありがとうございます。
そうでした
>> char[][][] table = [ ["foo", "bar"], ["baz", "hoge"]];
の方法は、頭から抜けてました。
ただ、
>>小さい次元の配列を作っては大きい次元の配列に統合していく感じで。
これの方法が、なんか馴染めないというか
別な変数名を用意するのが面倒で
0350デフォルトの名無しさん
2007/01/11(木) 16:46:06動的配列は 配列の先頭からの"インデックス"の位置の要素を返す。
これじゃ解りにくいかな……。
0351デフォルトの名無しさん
2007/01/11(木) 17:04:52これをエラー出さないようにするには ってんだろ?
素直に書いてみた。
あとC/C++やったこと無さそうなので(適当)そういう入門とか読めばほぼDの入門にもなりそうだよ。
char[] [][] str; // 全くの空なので
str.length = 1; // メモリ確保
str[0].length = 1; // メモリ確保
str[0][0] = "string"; // 代入
printf("%.*s", str[0][0]); // 表示
0352336
2007/01/11(木) 17:12:52i[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なのかが、よくわかりません
キーを指定(連想配列)にすると
メモリ確保しなくていいということですか?
0353336
2007/01/11(木) 17:19:45動的なんだから
int[] i;
i[5] = 0;
とか、出来てもいいんじゃないの?って思ってるだけです。
0354デフォルトの名無しさん
2007/01/11(木) 17:27:56リリース時も毎回長さチェックしてたら効率が悪い。
0355デフォルトの名無しさん
2007/01/11(木) 17:39:33>>336じゃないけど、そいやそういう単純な問題になるのか……。
あれ? てことは-releaseとかつけてコンパイルすると、
領域外にアクセスしてもArrayBoundsError出なかったっけ?
0356デフォルトの名無しさん
2007/01/11(木) 17:51:15出ないでSEGVる。
0357デフォルトの名無しさん
2007/01/11(木) 18:32:09writef("%d %d". length, lines.length); // 0, 100
line[length] = "hoge"; // ArrayBoundsError
0358デフォルトの名無しさん
2007/01/11(木) 18:32:30printf
0359デフォルトの名無しさん
2007/01/11(木) 18:35:21配列の添字は0から…って当り前の事のような。
0360デフォルトの名無しさん
2007/01/11(木) 18:40:33line[len] = "hoge"; // ArrayBoundsError
だったらうまくいったと言いたかった.
0361デフォルトの名無しさん
2007/01/11(木) 18:50:470362デフォルトの名無しさん
2007/01/11(木) 19:24:47> 静的/動的を問わず、配列の [ ] の中では、 lengthという名前の変数が暗黙に宣言され、
> その配列の長さがセットされます。 $ という記号を使うこともできます。
これだよな。
Dでは外側のローカル変数の名前を隠すようなローカル変数の宣言は禁止されてるおかげで
こういう目にあいにくいから、これはうっかり忘れがちな罠だね。ややややこしい。
0363デフォルトの名無しさん
2007/01/11(木) 19:44:47それ俺も昔ひかかった
添え字の中にlengthって変数があると配列のlengthプロパティが優先される
0364デフォルトの名無しさん
2007/01/11(木) 21:29:54悪くない。
暫く更新してないと思ってたんだが、探してみるとposeidon-v0.22-bin.rarってのがあるのな。
0365デフォルトの名無しさん
2007/01/11(木) 22:00:15悪くないんだ
サンクス。落としてみるわ
0366デフォルトの名無しさん
2007/01/11(木) 22:02:45日本語含むコード保存したらShiftJISになってるっぽいんだが。
0367デフォルトの名無しさん
2007/01/11(木) 22:37:09別のソフトでそのファイルをUTF-8として保存してから開き直せばok。
0368デフォルトの名無しさん
2007/01/11(木) 22:41:49boost::randomの使い勝手がいいので移植してみるか。
0369デフォルトの名無しさん
2007/01/11(木) 22:43:42独学の旅に出てくるわ。ノシ
0370デフォルトの名無しさん
2007/01/11(木) 22:45:05ソース見れ
0371デフォルトの名無しさん
2007/01/11(木) 22:46:49http://pc10.2ch.net/test/read.cgi/tech/1108172110/
0372デフォルトの名無しさん
2007/01/11(木) 22:59:47線形合同法じゃないか?
0373デフォルトの名無しさん
2007/01/11(木) 23:07:46ちょっと見ただけだが多分違う。
0374デフォルトの名無しさん
2007/01/11(木) 23:12:13ソース見た。線形シフトレジスタみたいな感じ。
しかしたしかに擬似乱数をスレッド安全にするのはなかなか難しいな
0375デフォルトの名無しさん
2007/01/12(金) 01:16:30ひさしぶりに来たものですから驚きました。
ずっとv0.1台だったので永遠にβ版だと確信してたのですが飛びましたね。
いい加減標準出力時の文字コードの問題は解決されたのですか?
0376デフォルトの名無しさん
2007/01/12(金) 01:20:190377デフォルトの名無しさん
2007/01/12(金) 01:31:30利用者として知っているだけのヘタレには初耳だ……。
線形シフトレジスタってどんなもんなんでしょーか。
速さとか乱数としての品質とか。
0378デフォルトの名無しさん
2007/01/12(金) 01:40:39乱数に指向性がある
0379デフォルトの名無しさん
2007/01/12(金) 09:27:39とりあえず計ってみるとだいぶ遅かった。
0380デフォルトの名無しさん
2007/01/12(金) 09:44:21MTですか?線形合同法ですか?
0381デフォルトの名無しさん
2007/01/12(金) 10:11:39百万回繰り返してrdtscの値の平均取っただけだけども。
aba氏のところからとってきたMTのnextInt32が95前後で標準のrandが480前後だった。
自前で実装した線形合同法が40くらい(値が小さいからMTとの差は信用できるのか微妙な気がする)。
まあMTにしたって速いとされるアルゴリズムだし参考にはならないのかもしれんが。
結構質のいい乱数というやつを吐いてくれるのかねえ?>標準のrand
0382デフォルトの名無しさん
2007/01/12(金) 10:41:22一様性は検定にかけるしかないかな?
MTの論文持ってきて同様の検定法にかけるしかないかなあ。
それだとMT使ったほうが楽そうだが。
0383デフォルトの名無しさん
2007/01/12(金) 11:40:13では MT を使うことにしましょう
ハイ 次のひとどうぞ
↓
0384デフォルトの名無しさん
2007/01/12(金) 11:43:01意味わからないなら無理に参加しなくてもいいのに
0385デフォルトの名無しさん
2007/01/12(金) 11:51:590386デフォルトの名無しさん
2007/01/12(金) 12:14:34俺には誰一人そう言っているようには見えなかった。
0387デフォルトの名無しさん
2007/01/12(金) 13:02:070388デフォルトの名無しさん
2007/01/12(金) 15:09:21http://news22.2ch.net/test/read.cgi/newsplus/1168581936/
2ch
オワタ
0389デフォルトの名無しさん
2007/01/12(金) 15:23:282chは法人化してるからひろゆきの個人資産じゃない、
尚且つ海外サーバだから日本の法の影響は受けない。
記者がアホ過ぎて話にならんね。
よかったな おめーら
0390デフォルトの名無しさん
2007/01/12(金) 15:24:49スレ違いではあるが、ひろゆぎの個人資産ではないのか。
よかったな おれら
0391デフォルトの名無しさん
2007/01/12(金) 15:38:550392デフォルトの名無しさん
2007/01/12(金) 15:46:252ch運営の誰かに売り払っちゃえばドメインの
所有者が変わるだけで2chはそのまま、
というオチだそうな。
0393デフォルトの名無しさん
2007/01/12(金) 15:52:110394デフォルトの名無しさん
2007/01/13(土) 13:30:39おめでとうと言いたい
0395デフォルトの名無しさん
2007/01/13(土) 17:01:13alias 0.179 1.00
とか洒落になりませんか?
0396デフォルトの名無しさん
2007/01/13(土) 17:09:540397デフォルトの名無しさん
2007/01/13(土) 17:21:40せっかくだからttp://www.kmonos.net/alang/wnd/
0398デフォルトの名無しさん
2007/01/13(土) 17:29:580399デフォルトの名無しさん
2007/01/13(土) 17:43:200400デフォルトの名無しさん
2007/01/13(土) 17:51:410401デフォルトの名無しさん
2007/01/13(土) 17:52:440402名無し募集中。。。
2007/01/13(土) 18:00:03D言語という名前からゲテモノだと思っても、この名前を知ったら、おっ、と思う人は多いのではないか
0403デフォルトの名無しさん
2007/01/13(土) 18:40:020404デフォルトの名無しさん
2007/01/13(土) 18:52:480405デフォルトの名無しさん
2007/01/13(土) 18:52:580406デフォルトの名無しさん
2007/01/13(土) 19:02:45お、お前か、と思う人は多いのではないか
0407デフォルトの名無しさん
2007/01/13(土) 20:55:30(##) パカッ
\ T /))
( ´∀`)
( )
| ||
(___)__)
0408デフォルトの名無しさん
2007/01/13(土) 21:35:28ひとつインスタンス作るのに数キロバイトいるんじゃなかったかな
線形合同法で下位ビットを使わないってのがやっぱシンプルかと。
0409デフォルトの名無しさん
2007/01/13(土) 22:27:08おお!?リニューアルされてる?
休みのうちに読んでみっかー
0410デフォルトの名無しさん
2007/01/13(土) 22:29:411ページ以下なら別にいいんじゃね?
0411デフォルトの名無しさん
2007/01/13(土) 22:36:55グローバルじゃなくてインスタンスごとに状態持った乱数生成器が欲しいなあ。
0412デフォルトの名無しさん
2007/01/13(土) 22:42:06boostみたいにアルゴリズムを選択できるのが理想なのかね。
選ばなくても使えるように無難なのをデフォとして用意しとく必要もあるかもだが。
MTは内部ベクトルが623だか624個だから、32ビットなら最低で2500バイトくらい?
まあ少なくとも俺が使う環境で問題になることはなさそうな気がする。
0413デフォルトの名無しさん
2007/01/13(土) 22:48:22デフォルトは線形合同法などの汎用的なものを採用しておいて
コンパイル時に採用するライブラリを指定する。プリプロセッサよりはマシ程度?
0414デフォルトの名無しさん
2007/01/14(日) 01:16:27移植されないかなあ
0415デフォルトの名無しさん
2007/01/14(日) 01:42:080416デフォルトの名無しさん
2007/01/14(日) 01:54:190417デフォルトの名無しさん
2007/01/14(日) 01:56:130418デフォルトの名無しさん
2007/01/14(日) 10:40:37さすがに無茶だw
0419デフォルトの名無しさん
2007/01/14(日) 11:22:15標準的なシードの与え方と次の値のインターフェースだけ持っているようなクラスがあれば
何でも後付けできたような気もするんだけど(これはDに限らないんだけどさ)
0420デフォルトの名無しさん
2007/01/14(日) 11:30:430421デフォルトの名無しさん
2007/01/14(日) 15:33:340422デフォルトの名無しさん
2007/01/14(日) 19:22:020423デフォルトの名無しさん
2007/01/14(日) 19:25:510424デフォルトの名無しさん
2007/01/14(日) 19:34:090425デフォルトの名無しさん
2007/01/14(日) 19:42:29D言語と比べりゃメジャーだけど、それでもマイナーじゃね?
0426デフォルトの名無しさん
2007/01/14(日) 20:07:36使用人口が1億を超える日本語、それ以上にメジャーな言語って数えるほどしかなくね?
0427デフォルトの名無しさん
2007/01/14(日) 20:09:14どう見てもメジャーな言語のひとつです。本当にありがとうございました。
0428デフォルトの名無しさん
2007/01/14(日) 20:09:250429デフォルトの名無しさん
2007/01/14(日) 20:10:430430デフォルトの名無しさん
2007/01/14(日) 20:21:35インド人に勝てるかよw
日本語は国内ではくまなく通じ、国外ではほとんど通じないというあたり特徴のある言語。
ところでCってエスペラントより使用人口多いよな。
0431デフォルトの名無しさん
2007/01/14(日) 20:27:51>インド人に勝てるかよw
タミールには勝ってるぞ。
>日本語は国内ではくまなく通じ、国外ではほとんど通じないというあたり特徴のある言語。
でも、ヲタ文化の影響で海外での日本語学習者が着々と増えてるらしいけどな。
0432デフォルトの名無しさん
2007/01/14(日) 20:38:30暴力的なの好きな奴(男も女も)が結構多い
もちろんそうでないのもいるけど
0433デフォルトの名無しさん
2007/01/14(日) 20:45:560434デフォルトの名無しさん
2007/01/14(日) 20:51:220435デフォルトの名無しさん
2007/01/14(日) 20:55:050436デフォルトの名無しさん
2007/01/14(日) 23:02:040437デフォルトの名無しさん
2007/01/14(日) 23:41:220438デフォルトの名無しさん
2007/01/14(日) 23:46:03今回の閉鎖騒動が原動力になってUNIX板でやってる
2ch代替システムのコアにDが採用されたら
話のネタとして楽しいなのになー
とか妄想してみるテスト
0439デフォルトの名無しさん
2007/01/15(月) 00:15:51がんばれ
0440437
2007/01/15(月) 01:54:16-g -debugオプションで何かすることあるのかな…
0441デフォルトの名無しさん
2007/01/15(月) 07:38:350442デフォルトの名無しさん
2007/01/15(月) 08:48:370443デフォルトの名無しさん
2007/01/15(月) 08:49:350444デフォルトの名無しさん
2007/01/15(月) 08:58:01行ってみたが、どうせ閉鎖しないだろという前提でP2P化妄想が進んでるのか
プロトコルが確定したら互換クライアントはDでもVB.NETでもMozilla XULでも書けるだろうといってみるテスト
0445437
2007/01/15(月) 09:47:53VS2005で上手くデバッグできないみたいなこと書いてあったんだけど
やっぱその通りなのか… そこの人はどうやってデバッグしてるんだろ
0446デフォルトの名無しさん
2007/01/15(月) 11:07:180447デフォルトの名無しさん
2007/01/15(月) 11:09:030448デフォルトの名無しさん
2007/01/15(月) 11:40:00ぜひ
0449デフォルトの名無しさん
2007/01/15(月) 11:51:140450デフォルトの名無しさん
2007/01/15(月) 11:55:39>>449
そういや、それがあった
0451デフォルトの名無しさん
2007/01/15(月) 14:06:04object.toStringと勘違いされて(´・ω・`)ショボーン
0452デフォルトの名無しさん
2007/01/15(月) 14:07:470453ロコン
2007/01/15(月) 14:39:040454デフォルトの名無しさん
2007/01/15(月) 16:14:00といわれて、テンプレートとかMixinで簡単にできるようにしたいなあと思ったが、
mutableがないことに気づいた俺がいる
1.0になって本格的に使い始めたから気づかんかった。
0455デフォルトの名無しさん
2007/01/15(月) 17:44:25VS2005の場合、asm{int 3;}を使えば一応ブレークポイントの代わりになる。
ソースレベルデバッグしたいなら、他にdmd/binにあるwindbgを使う手もある。
0456デフォルトの名無しさん
2007/01/16(火) 08:42:42void main() {
printf("%d", unbox!(int)( box(10) ));
}
リンク時に
Error 42: Symbol Undefined _D3std5boxer8__assertFiZv
わたくし、間違った事してますか?
0457デフォルトの名無しさん
2007/01/16(火) 11:44:41module 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;
}
どおなってんの?
0458デフォルトの名無しさん
2007/01/16(火) 11:55:04モジュール<Test>の中にdispと言う関数が無い、と言われてる。
っていうか、コンパイラのメッセージ見ろよ。
0459デフォルトの名無しさん
2007/01/16(火) 12:05:010460デフォルトの名無しさん
2007/01/16(火) 12:25:32boxerは普段使わんから良くわからんけど、
"-release"オプション付けると普通に通る。
boxer.d自体にバグが有りそうな予感。
0461デフォルトの名無しさん
2007/01/16(火) 12:58:59ポリゴンオブジェクトを抽象化するクラスを作ろうとしています。
class Polygon {
translate(real x, real y, real z) {
// DirectX, OpenGL Code
}
}
DirectXとOpenGLで別の実装が必要だが、
インターフェースは共通であることを保障したい。
versionごとにテンプレートを使うか、関数だけmixinするか、派生クラスにするか、
など考えているのですが、
同一バイナリでDirextX版とOpenGL版のどちらのライブラリにもリンクしたい……
といろいろ考えています。
この手の実装で常套手段あるんでしょうか。
0462デフォルトの名無しさん
2007/01/16(火) 14:22:05以前書いたソースを書き直そうとしたら、在ったので驚いたよ。
0463デフォルトの名無しさん
2007/01/16(火) 14:25:35{
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 だと、まあ通るんだけど。
0464デフォルトの名無しさん
2007/01/16(火) 15:39:46どうかんがえてもバグだわな
0465デフォルトの名無しさん
2007/01/16(火) 15:49:381.0 が出たーと思って本格的に触り始めたのにorz
0466デフォルトの名無しさん
2007/01/16(火) 16:31:390467デフォルトの名無しさん
2007/01/16(火) 16:33:45ちなみに、gdc だと、とおるね。
0468デフォルトの名無しさん
2007/01/16(火) 16:35:43dmdとDの両方が1.0なのだが。1.0リリース前はバグ修正優先だったし。
0469デフォルトの名無しさん
2007/01/16(火) 16:36:47でも "DMD 1.0" ってあるからこれは勘違いしてしまうよなぁ
0470デフォルトの名無しさん
2007/01/16(火) 16:43:29static{
const int AAAA;
this(){
AAAA = 35;
}
}
}
これがstatic this()にならないのはバグ?
0471デフォルトの名無しさん
2007/01/16(火) 16:45:140472デフォルトの名無しさん
2007/01/16(火) 16:48:09constは記憶クラスなのでちがうとおもうけど?
0473デフォルトの名無しさん
2007/01/16(火) 16:50:39既出なバグ。
0474デフォルトの名無しさん
2007/01/16(火) 16:54:410475デフォルトの名無しさん
2007/01/16(火) 16:57:21http://www.kmonos.net/alang/d/class.html
> 静的コンストラクタ宣言の static は、属性ではありません。 必ず this の直前に書く必要があります:
バグじゃなくて仕様。
0476デフォルトの名無しさん
2007/01/16(火) 22:45:55エラーも警告もでなければバグだろ。
0477デフォルトの名無しさん
2007/01/16(火) 22:49:58皆注目してんだな
0478デフォルトの名無しさん
2007/01/16(火) 22:52:50仕様書に書いてあるとおりなので、仕様ですよ。
仕様そのものが間違ってるとか、不親切だというのは別として。
0479デフォルトの名無しさん
2007/01/16(火) 23:16:15> エラーも警告もでなければバグだろ。
その場合、エラーも警告もでないのがバグなんじゃない?
0480デフォルトの名無しさん
2007/01/17(水) 00:41:060481デフォルトの名無しさん
2007/01/17(水) 11:19:55当方C/C++はかなり使い込んでいます
これからDを使ってみようと思うのですが
生成されたexeの実行速度は問題ないですか?
最適化とかはコンパイラに期待してもいいのですか?
0482デフォルトの名無しさん
2007/01/17(水) 11:47:40このページにさまざまな他言語との比較があります。
もちろん速度の比較もあります。
参考にしてはどうでしょうか。
0483デフォルトの名無しさん
2007/01/17(水) 12:39:08ttp://www.kmonos.net/alang/wnd/whats.ja.html
ここの「ネイティブコンパイル」の項のリンク先へ行ってみるといいかも。
もちろん(このページに書かれているように)まんま鵜呑みにするものではないけれど、
とりあえず「不安に思う必要はまったくない」ってのは言えそう。
GCのメモリ回収とかで、多少「C/C++にはない注意の仕方」を求められることは
あるかもしれないけれど、それはまぁ、手法を身につければいい話だから。
0484デフォルトの名無しさん
2007/01/17(水) 12:43:12参考になりました
色々ありがとうございます
質問ばかりで申し訳ありませんが
Windowsアプリ用のフレームワークとかで
お勧めのものはありますか?
0485デフォルトの名無しさん
2007/01/17(水) 12:57:35に言語ベンチマークと「どんくらいアテになるかは知らないよ」との言。
GCが速度に与える影響についての主張は
http://www.kmonos.net/alang/d/garbage.html
「GCされたプログラムの方が高速です」との言葉。
作者のWalterはコンパイラの実装に関して結構な人物らしく、
最適化とかは期待できるのかもしれない。
でも少なくとも現時点ではいまいち最適化が実装されきってない説も。
Winアプリ書くことに関しては、言語としては申し分無い、って感じ?
でかいランタイム要らないから起動早いし。
ただしライブラリは全然足りないけど。
0486デフォルトの名無しさん
2007/01/17(水) 14:48:490487デフォルトの名無しさん
2007/01/17(水) 14:59:320488デフォルトの名無しさん
2007/01/17(水) 15:00:530489デフォルトの名無しさん
2007/01/17(水) 15:15:180490デフォルトの名無しさん
2007/01/17(水) 18:02:05/\___/ヽ ヽ
/ ::::::::::::::::\ つ
. | ,,-‐‐ ‐‐-、 .:::| わ
| 、_(o)_,: _(o)_, :::|ぁぁ
. | ::< .::|あぁ
\ /( [三] )ヽ ::/ああ
/`ー‐--‐‐―´\ぁあ
0491デフォルトの名無しさん
2007/01/17(水) 18:16:33ttp://marmotfarm.com/cgi-bin/upload2/upload.cgi
up88211.zip
inabaたんゴメソ
0492デフォルトの名無しさん
2007/01/17(水) 18:26:37乙!
0493デフォルトの名無しさん
2007/01/17(水) 18:40:590494デフォルトの名無しさん
2007/01/17(水) 18:42:370495デフォルトの名無しさん
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]
分かり辛くてすんません
0496デフォルトの名無しさん
2007/01/17(水) 19:36:280497デフォルトの名無しさん
2007/01/17(水) 20:05:17reverseとlength($)で十分対応できる。
0498k.i
2007/01/18(木) 02:52:02超GJ!!!!
日本語訳のサイトに転載させてもらってよろしいでしょうか?
あと<pre>のスタイルがカコイイからパクらせてもらいたいので、
よろしければこれのフォント名教えていただけるとうれしい…
0499デフォルトの名無しさん
2007/01/18(木) 03:05:18struct 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];
いまいち
0500デフォルトの名無しさん
2007/01/18(木) 08:14:56応用してforeach_reverseをforeachに統一できるんじゃないだろうか。
0501デフォルトの名無しさん
2007/01/18(木) 08:56:36>>491ではないのですが。
ヘルプコンパイラhh.exeがあれば、
hh -decompile 出力先ディレクトリ chmファイル名
でhtmlソースへデコンパイルできます。
0502デフォルトの名無しさん
2007/01/18(木) 09:12:43GJ!!!
0503デフォルトの名無しさん
2007/01/18(木) 12:51:05そう考えていた時期が私にもありました
0504デフォルトの名無しさん
2007/01/18(木) 12:56:32素のhtmlでいい
MSDNのようなキーワード検索機能までついてると、大違いだがな
0505デフォルトの名無しさん
2007/01/18(木) 13:48:440506デフォルトの名無しさん
2007/01/18(木) 14:00:110507デフォルトの名無しさん
2007/01/18(木) 14:10:510508デフォルトの名無しさん
2007/01/18(木) 14:12:410509デフォルトの名無しさん
2007/01/18(木) 14:18:550510デフォルトの名無しさん
2007/01/18(木) 16:23:090511デフォルトの名無しさん
2007/01/18(木) 16:48:370512デフォルトの名無しさん
2007/01/18(木) 17:42:58ブラウザの機能を使えるのが便利。
chmはページをあっち見てはコードにもどりこっち見てはコードに戻り、
な場合に楽なときがある。あと検索だな。
ローカルにMSDNみたいなUIのサイトを構築して自動的に更新されるようにすれば、
両者の利点を併せ持つリファレンスになる。
0513デフォルトの名無しさん
2007/01/18(木) 18:49:38static int foo; // OK
static void bar(); // コンパイルは通るが実体はないので呼び出すと実行時エラー
static void huga() {} // コンパイルエラー
}
staticメンバはinterfaceであっても実体があるべきだと思うのだが
0514デフォルトの名無しさん
2007/01/18(木) 19:45:430515デフォルトの名無しさん
2007/01/18(木) 19:48:090516デフォルトの名無しさん
2007/01/18(木) 20:09:40多重継承出来るか出来ないかとか既存の型を継承できるとか。
0517デフォルトの名無しさん
2007/01/18(木) 20:15:24abstractなクラスは、実装を持つことができる。
0518491
2007/01/18(木) 21:08:01転載もちろんOKです。 元々k.iさん作成のコンテンツですから。
フォントの件
フォントを変えたつもりは無いのですが
htmlを加工した結果、スタイルシートの適用を変えてしまったのかもしれないです
chm作るのに使ったファイル一式です。
DLKey: help
ttp://up.uppple.com/upload.cgi?mode=dl&file=1691
0519デフォルトの名無しさん
2007/01/18(木) 22:04:05> htmlは専用アプリを起動せずに普段のブラウザで表示できて、ブラウザの機能を使えるのが便利。
chmページ上で右クリ→プロパティに表示されるURLは、普段のブラウザ(IE系)でも有効だよ。
大量にあるhtmlはchmに圧縮して、その中のURLをブックマークして利用すると便利〜。
0520デフォルトの名無しさん
2007/01/18(木) 23:56:040521デフォルトの名無しさん
2007/01/19(金) 00:43:51知らん買った。も前頭いいな
0523デフォルトの名無しさん
2007/01/19(金) 10:59:11過去ログにtypeid(typeof(o)) is typeid(Hoge)ってあったけど上手く行きません。
class Hoge{
public int opEquals(Object o){
writefln(typeid(typeof(o)));
return 0;
}
}
object.Objectって表示される。
0524デフォルトの名無しさん
2007/01/19(金) 11:39:04class 基底クラス {}
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
0525デフォルトの名無しさん
2007/01/19(金) 11:41:340526デフォルトの名無しさん
2007/01/19(金) 12:26:32コンストラクタをthisって書いてそれがエラーだって気付く事に10分かかったorz
0527デフォルトの名無しさん
2007/01/19(金) 12:29:340528デフォルトの名無しさん
2007/01/19(金) 12:42:380529デフォルトの名無しさん
2007/01/19(金) 13:13:050530デフォルトの名無しさん
2007/01/19(金) 13:19:220531デフォルトの名無しさん
2007/01/19(金) 13:29:580532デフォルトの名無しさん
2007/01/19(金) 13:45:200533デフォルトの名無しさん
2007/01/19(金) 16:32:42Dはどうみても静的型付けだろ。
動的だともうちょっと遅くなると思う。
0534デフォルトの名無しさん
2007/01/19(金) 19:01:080535デフォルトの名無しさん
2007/01/19(金) 20:10:39根拠訊ねたらムキになって繰り返してきそう。
0536デフォルトの名無しさん
2007/01/19(金) 20:41:25内容の誤りの話じゃなくて、頓珍漢なレスに対する
「そんな話してないよ」という突っ込みだと思うよ
0537デフォルトの名無しさん
2007/01/19(金) 20:44:25そんな話したのよねえ〜
0538デフォルトの名無しさん
2007/01/19(金) 20:50:36今はWikiのような書き方は駄目になってたのね。 かなりハマってたわ・・・・
0539デフォルトの名無しさん
2007/01/19(金) 20:54:49よう、過去の俺
ちなみに今はキーボード入力が分からない(scanfとか orz
0540デフォルトの名無しさん
2007/01/19(金) 20:56:40VSみたいにクラスビュー情報をパースするエンジンが高く売れるかも。
0541デフォルトの名無しさん
2007/01/19(金) 21:11:01Linux(2.6x) or UNIX使ってるやつ、epoll/kqueue使って書き直す気のあるやついない?
selectで実装されてるからやる気なくなったんだけど。
0542デフォルトの名無しさん
2007/01/19(金) 21:21:00現状、派生クラスで実装を提供してやって
テンプレートと組み合わせたりすると、
コンパイル時ポリモーフィズムみたいのが出来てちょっと楽しい。
コンパイラの挙動がちょっと怪しいなぁとは思う。
そんな俺は>>285。
0543デフォルトの名無しさん
2007/01/19(金) 22:34:19"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) );
こんなもんじゃないでしょうか。
0544デフォルトの名無しさん
2007/01/19(金) 23:53:58それ以前にデバッガ使ってるのかと問い詰めたい。windbg使いにくいし…
0545デフォルトの名無しさん
2007/01/19(金) 23:58:090546デフォルトの名無しさん
2007/01/20(土) 01:12:11cast(Hoge)o;
でいいじゃん。何が不満なの?
0547デフォルトの名無しさん
2007/01/20(土) 01:30:22まあ、C++のoperator&級に気にしなくていいアレだとは思うが。。。
0548546
2007/01/20(土) 01:39:30対策するなら暗黙の変換を挟んで
Object obj(Object o){return o;}
cast(Hoge)obj(o);
こうかな。
castと変換をひとつにまとめて
Object instanceof(T)(Object o){return cast(T)o;}
instanceof!(Object)(hoge);
こうでもいいか。
0549デフォルトの名無しさん
2007/01/20(土) 01:48:56void* instanceof(T)(Object o){return cast(T)o;}
instanceof!(Hoge)(hoge);
こうだな。
あーでもこうすると
oがObject型へ暗黙変換できる == 引数がinterfaceで使用不可かー。
opCastうぜー。
0550デフォルトの名無しさん
2007/01/20(土) 02:05:45opCastを実装するやつ(モジュール側とか)の責任でOKだろう。
素直にcastしとけばいいと思う。
0551デフォルトの名無しさん
2007/01/20(土) 02:32:08VC6でデバックできるよ
テンプレートで変な行に飛んだり
クラスのメンバ変数が見えなかったりするけど。
0552デフォルトの名無しさん
2007/01/20(土) 07:38:340553デフォルトの名無しさん
2007/01/20(土) 11:25:050554デフォルトの名無しさん
2007/01/20(土) 11:31:430555デフォルトの名無しさん
2007/01/20(土) 22:17:36マジデスカー
作り方教えてplz
0556デフォルトの名無しさん
2007/01/21(日) 14:45:420557デフォルトの名無しさん
2007/01/21(日) 14:48:51ありがとう。アク禁食らって書けなかった…
結局、昔使ってたVS2003入れてステップ実行できるようになりました。
0558デフォルトの名無しさん
2007/01/21(日) 23:03:03エラーメッセージだとサッパリ原因が特定できないんですが
どうやってハングした場所の特定してる?
やっぱTRACE系統のコードを入れるしかない?
0559デフォルトの名無しさん
2007/01/22(月) 02:04:59デバッグモードの時スタックトレース出してくれたらなぁ。
0560デフォルトの名無しさん
2007/01/22(月) 06:49:320561デフォルトの名無しさん
2007/01/22(月) 09:00:16SymLoadModule: この操作を正しく終了しました。
ってズラーっと出るだけなんだけども俺だけ?使い方間違ってるのかな……。
入ってたlibを作業ディレクトリにコピーして、
void f() { throw new Exception("error!"); }
void main() { f(); }
を-gつけてコンパイルした。
どうも過去ログ読むに修正済みのエラーっぽいんだが。
C:\d\source.dで試してみたが同じ。
0562デフォルトの名無しさん
2007/01/23(火) 02:13:02全スレッドのオブジェクトが対象になるんでしょうか?
0563デフォルトの名無しさん
2007/01/23(火) 05:42:27全然中身わかってないんだけど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
0564デフォルトの名無しさん
2007/01/23(火) 07:03:370565デフォルトの名無しさん
2007/01/23(火) 08:13:47使えた。gj
0567デフォルトの名無しさん
2007/01/23(火) 21:54:18さりげなく自分も最高と言う、お前がマジで最高
0568デフォルトの名無しさん
2007/01/23(火) 23:06:02あれ?w
assert(>>566 == >>559);
assert(>>566 != >>560); /* >>560には大変申し訳なく。 */
0569デフォルトの名無しさん
2007/01/24(水) 02:29:11ブラウザにただ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で繋いでみると、途端に送られてきたり。
0570デフォルトの名無しさん
2007/01/24(水) 07:40:000571デフォルトの名無しさん
2007/01/24(水) 07:52:52cast(Hoge)objで同じことを表現できる。
理由はDのキャストがC++のポインタを対象にしたdynamic_cast相当だから。
0572デフォルトの名無しさん
2007/01/24(水) 08:14:52ttp://www.kmonos.net/alang/d/expression.html
オブジェクト o がクラス B のインスタンスであることを判定するためには、キャストを使います:
if (cast(B) o)
{
// o は B のインスタンス
}
else
{
// o は B のインスタンスではない
}
0573デフォルトの名無しさん
2007/01/24(水) 11:40:18browser.flush();
の代わりに
client.shutdown(SocketShutdown.BOTH);
0574デフォルトの名無しさん
2007/01/24(水) 11:56:10Jan 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
0575デフォルトの名無しさん
2007/01/24(水) 12:07:160576デフォルトの名無しさん
2007/01/24(水) 12:28:310577デフォルトの名無しさん
2007/01/24(水) 12:46:38あのさあ
D2.000ってどんなものになるんだろう
今見えている予定のほかに考えられそうなのはLINQくらいかなあ
0578デフォルトの名無しさん
2007/01/24(水) 13:30:06もういっそのことUbuntuみたいに年月でバージョンつけてしまったほうがいいような気がする。
0579デフォルトの名無しさん
2007/01/24(水) 15:18:05さりげなくこれは素晴らしすぎるのではないかという予感が
0580デフォルトの名無しさん
2007/01/24(水) 16:56:490581デフォルトの名無しさん
2007/01/24(水) 17:07:540582デフォルトの名無しさん
2007/01/24(水) 18:43:530583デフォルトの名無しさん
2007/01/24(水) 19:17:29型情報を扱うようになったの?
0584デフォルトの名無しさん
2007/01/24(水) 20:56:32Digital Mars D Compiler v1.001
...
バージョンナンバーになんかワロタ
この抜けてる感じが好きだ
0585デフォルトの名無しさん
2007/01/24(水) 21:09:540586569
2007/01/24(水) 23:45:52しかしこのバージョンNoは、今回はマイナーバージョン4ケタ目指します、という
Walter先生の意気込みではなかろうなw
>>569
ありがと。でも残念ながら変化らしい変化は見られず。
そちらで実験してみてくれてうまくいってるなら、何がどーなっているやら……。
というか、browser.writeString("hoge\r\n");を10000回ほど回してみたら表示されたり、
それでも最後の数バイトが受信しきれない場合があったり。
どう見てもバッファがらみです。本当に。
socketから直接sendしても正常に送れたサイズ返してくるし、
phobosのコード読んでも誰もバッファリングしてないし、
Winsock以下がしてるかとTCP_NODELAYまでセットしてみたのにダメだし。
うわーん。誰か正常に動作する鯖のサンプルをくれー
0588デフォルトの名無しさん
2007/01/25(木) 00:18:18TeXは3.1415→3.14159→とバージョンが上がっていってたな
0589デフォルトの名無しさん
2007/01/25(木) 00:21:05>TeXは3.1415→3.14159→とバージョンが上がっていってたな
ほんの百回バージョンアップしただけで破綻しそうなシステムだな。
0590デフォルトの名無しさん
2007/01/25(木) 01:17:56破綻する前に破産する
0591デフォルトの名無しさん
2007/01/25(木) 04:29:31確かあれってバグが1個見つかってフィックスされるたびに
桁が1個増えるとかどこかで聞いたのだけれど。
0592デフォルトの名無しさん
2007/01/25(木) 09:38:41存在自体がバグ
0593デフォルトの名無しさん
2007/01/25(木) 10:29:03はじょうって何だ?>>592 が破綻してるのか?
0594デフォルトの名無しさん
2007/01/25(木) 10:30:45自分が死んだらπになるとクヌース先生は言ってるな
0595デフォルトの名無しさん
2007/01/25(木) 10:36:24意味わかんね。
0596デフォルトの名無しさん
2007/01/25(木) 13:17:450597デフォルトの名無しさん
2007/01/25(木) 13:45:06ネタでやっても頭悪い印象しかないんじゃね?
0598デフォルトの名無しさん
2007/01/25(木) 13:47:30From: 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.
0599デフォルトの名無しさん
2007/01/25(木) 14:10:160601デフォルトの名無しさん
2007/01/25(木) 15:21:320602デフォルトの名無しさん
2007/01/25(木) 15:37:09Jan 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
0603デフォルトの名無しさん
2007/01/25(木) 16:00:090604デフォルトの名無しさん
2007/01/25(木) 21:38:57ttp://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ですか?
0605デフォルトの名無しさん
2007/01/25(木) 21:50:03ok
0606デフォルトの名無しさん
2007/01/25(木) 22:18:45�d
ttp://www.prowiki.org/wiki4d/wiki.cgi?WindowsAPI
↑ここのヘッダを利用してるんですが、
ttp://www.dsource.org/projects/bindings/browser/trunk/win32/oaidl.d
の内容、間違ってないですか?
681〜691行のaliasに、 * いらいない気がするのですが・・・。
0607デフォルトの名無しさん
2007/01/26(金) 07:52:480608569
2007/01/27(土) 01:40:31std.socket.Socketを自分で直接操作してみたら問題なく動作した罠。
SocketStreamに何か問題あるのかしらん。コード見た感じ私には特に……だけど。
誰かSocketStream周りで似たような現象が出たら是非。
0609デフォルトの名無しさん
2007/01/27(土) 04:29:32Jan 26, 2007
New/Changed Features
Bugs Fixed
D.announce/6929
D.announce/6953
0610デフォルトの名無しさん
2007/01/27(土) 08:17:300611デフォルトの名無しさん
2007/01/27(土) 11:16:240612デフォルトの名無しさん
2007/01/27(土) 11:18:310613デフォルトの名無しさん
2007/01/27(土) 12:07:11他にもclearみたいに全削除とかってできないの?
あと、普通の配列にもinsertとか欲しいんだけど・・・
0614デフォルトの名無しさん
2007/01/27(土) 13:41:090615デフォルトの名無しさん
2007/01/27(土) 14:03:00int *a = new int[100];
が通っていたのに今はエラーでるんだね。
これは
int *a;
int b = new int[100];
a = &b[0];
とかで書けばいいのかな。
0616デフォルトの名無しさん
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); // コンパイルエラー
}
0617デフォルトの名無しさん
2007/01/27(土) 14:14:48これじゃダメなのかなぁ・・・
0618デフォルトの名無しさん
2007/01/27(土) 14:47:05Assertion failure: 'classinfo->structsize == CLASSINFO_SIZE' on line 316 in file 'toobj.c'
戻そ・・・
0619デフォルトの名無しさん
2007/01/27(土) 14:54:27普通の人は配列にinsertするようなアルゴリズムを選択しないと思うが
0620デフォルトの名無しさん
2007/01/27(土) 14:59:34バイナリサーチみたいなランダムアクセス前提のアルゴリズムもあるわけで。
まあJavaみたいなコレクションライブラリをDにポーティングすりゃいいんじゃね。
0621615
2007/01/27(土) 15:51:26>>617
まぁそれで良いのだけどね。
前に書いてたソースでCの関数に渡すからわざとポインタで
宣言していたところがコンパイラのバージョン上げたらエラーでたので。
0622デフォルトの名無しさん
2007/01/27(土) 15:56:13int *a = (new int[100]).ptr;
0623デフォルトの名無しさん
2007/01/27(土) 16:05:490624デフォルトの名無しさん
2007/01/27(土) 16:10:02なるほど。
ありがとう。
0625デフォルトの名無しさん
2007/01/27(土) 16:21:09Walterタソ迷走中
0626デフォルトの名無しさん
2007/01/27(土) 16:33:200627デフォルトの名無しさん
2007/01/27(土) 16:38:01struct Hoge{
char[] s;
}
main(){
Hoge h;
h.s = "abcd";
foreach(char c; h){
writefln(c);
}
return 0;
}
これでh.sの中身を一文字ずつ出すのはどうするの?
0628デフォルトの名無しさん
2007/01/27(土) 18:58:03struct 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を返す
}
}
0629デフォルトの名無しさん
2007/01/27(土) 19:23:06リストは配列じゃないし二分木も配列じゃないだろう。
たとえば二分木を配列の上に構築する場合なんかは、
必要なのは配列へのinsertじゃなくて二分木へのinsertでしょ?
0630デフォルトの名無しさん
2007/01/27(土) 19:38:070631デフォルトの名無しさん
2007/01/27(土) 19:55:24マイナーバージョンが3桁表示なのは、千分の一刻みなのとは違くね
>>630
バイナリサーチは二分木じゃなかった。insertの話とつなげてヒープソートとごっちゃになってた。
けどそうなると、配列にinsertするってのとバイナリサーチって独立の話だろ。なんでここで
(リストや)その話が出てきたんだろう。
一個一個insertするような仕様だとひどいことになるけど、そういう話じゃなくてなんか別の
話なんかね、配列へのinsertって。
0632デフォルトの名無しさん
2007/01/27(土) 20:25:39=であるかだけがサーチじゃないっしょ
0633デフォルトの名無しさん
2007/01/27(土) 21:14:08UTF-8で保存しているのにコンソールでprintfやwriteflnで表示すると文字化けします。
どうすればいいのでしょうか?
0634デフォルトの名無しさん
2007/01/27(土) 21:16:290635デフォルトの名無しさん
2007/01/27(土) 21:35:11使っているコンソールは、UTF-8に対応していますか?
WindowsのDOS窓だったりだめっしょ
0636デフォルトの名無しさん
2007/01/27(土) 21:56:020637デフォルトの名無しさん
2007/01/27(土) 22:02:55thx.
コマンドプロンプトを使ってました。
writefln(toMBSz("ほげ"))とかをやると910FD0とかいう数字が表示されていたり。
仕方ないのでPoderosa-Cygwin経由で無理やりutf-8表示させてみますた。
0638デフォルトの名無しさん
2007/01/27(土) 22:03:56Win32 Console Windowなら、立派にUnicode対応してるじゃん
UTF-16に変換してWriteConsoleW()すればよい
0639デフォルトの名無しさん
2007/01/27(土) 22:05:52Phobosから使えないのが問題なんでしょ。
0640デフォルトの名無しさん
2007/01/27(土) 22:08:110641デフォルトの名無しさん
2007/01/27(土) 22:30:22あれ?そうなんだ・・・知らん買った。
0642デフォルトの名無しさん
2007/01/27(土) 22:33:37その気になればWin32用のm17nなコンソールテキストエディタだって書けるんだぜw
0643デフォルトの名無しさん
2007/01/27(土) 22:42:45もうマルチバイトはやめようぜ、これからはUTF32の時代さ
0644デフォルトの名無しさん
2007/01/27(土) 23:01:460645デフォルトの名無しさん
2007/01/27(土) 23:36:23は?
0646デフォルトの名無しさん
2007/01/27(土) 23:42:430647デフォルトの名無しさん
2007/01/28(日) 13:12:31亀レスでスマソがtoMBSzの使用例
printf("%s\n", toMBSz("ほげ"));
0648デフォルトの名無しさん
2007/01/28(日) 13:49:55return source[0..position] ~ insertIt ~ source[position..$];
}
phobosにこれくらい入ってて欲しいなー、程度の意味じゃなかったの? ちなみに俺も欲しい。
パフォーマンスが極端に要求される場合は、別のデータ構造を使うだけだけだし。
0649デフォルトの名無しさん
2007/01/28(日) 13:53:29stlやcollection framework互換のライブラリ作るのがいいさね。
このスレ用のソースをうpする場所ってない?
0650デフォルトの名無しさん
2007/01/28(日) 14:19:030651デフォルトの名無しさん
2007/01/28(日) 14:24:06バイト数なのに。それが通じるのはASCII/latain-1系文字だけなのに。
作ったソフトが思いの外世界でウケちゃったときに、
「日本語対応してねー」「パッチくれー」って右往左往することになるのに(日本人が)。
文字列は組み込みのStringクラスにして欲しいなー。
んでlengthとbyteSizeとか分けたプロパティを用意して、
文字とバイトの違いをちったぁ意識させて欲しい。
0652デフォルトの名無しさん
2007/01/28(日) 14:49:52> 仕方ないのでPoderosa-Cygwin経由で無理やりutf-8表示させてみますた。
ckのほうが軽いし文字の自動認識もしてくれていいよ!とか言ってみる。
……逆にcmd.exeで文字化けることに気づかないのが問題だが。
0653デフォルトの名無しさん
2007/01/28(日) 14:50:07んでもって連想配列.clearも
ってか、実はすでにあったりするの?
言語仕様の確定後かつ関数書けよって話でアレだが
a &== b みたいな構文で ( a & b ) == b と等価とか
a |== b みたいな構文で ( a & b ) != 0 が等価とかもちょっとほすぃ
0654デフォルトの名無しさん
2007/01/28(日) 15:42:36class つくって好きにやって下さい。
0655デフォルトの名無しさん
2007/01/28(日) 16:16:10>>654
利用頻度の高いユーティリティメソッドとか、
標準で入ってるかって点がかなり重要なんだよね……。
commons-langとかJVMに入れちゃおうよMr.ごすりーんー……とJavaマの嘆き。
何にせよ、言語仕様の方が1.0が出たことだし、
お次はphobosを強化・改善に取り組まんとな……今のままじゃやはり貧弱ゥと言わざるを得ない。
Javaや.Net、boostレベルまでもってくのは大変だろうけど。
0656デフォルトの名無しさん
2007/01/28(日) 16:19:190657デフォルトの名無しさん
2007/01/28(日) 16:31:170658デフォルトの名無しさん
2007/01/28(日) 17:00:480659デフォルトの名無しさん
2007/01/28(日) 17:03:19○遺産
0660デフォルトの名無しさん
2007/01/28(日) 17:14:090661デフォルトの名無しさん
2007/01/28(日) 17:14:37Java並になって欲しいのは確かだけど、Javaのように密林化して欲しくないな。
0662デフォルトの名無しさん
2007/01/28(日) 17:26:220663デフォルトの名無しさん
2007/01/28(日) 17:31:23ライブラリ同士のコンパチビリティが低いのがねぇ。
0664デフォルトの名無しさん
2007/01/28(日) 17:36:46どうせWindowsでしか使わないんでしょ?
0665デフォルトの名無しさん
2007/01/28(日) 17:39:17Linuxで使ってますが何か?
0666デフォルトの名無しさん
2007/01/28(日) 18:54:000667デフォルトの名無しさん
2007/01/28(日) 19:00:20てかWindowsだと正直C#でいい感じ。
linuxにはいい言語が無かったところにDがきたって感じ。
0668デフォルトの名無しさん
2007/01/28(日) 19:04:27コンパチビリティなんか気にする必要は無いだろうといいたいんだけどな。
Linux使っているなら、どうせLinuxでしか使わないんだろって言うよ。
0669667
2007/01/28(日) 19:21:01なるほど。それなら俺も同意。
むしろコンパチビリティのためにやたら制限キツくなった言語とか使いたくない。
それこそDの言ってる”実用性”ってのがない。
0670デフォルトの名無しさん
2007/01/28(日) 19:21:570671デフォルトの名無しさん
2007/01/28(日) 19:35:08ユーザとしちゃ片方しか使わないかもしれんが、
ウチら開発者なんだから、どうせならWinユーザもLinuxユーザも使えるもの作りたい。
しかし>>663の言うコンパチビリティって、
複数ライブラリ間の相互運用性のことじゃないのか。
たとえばXMLパーサとYAMLパーサがあったとして、
どっちもstd.stream.Stream使ってデータを読むようになってれば、
FileStreamだろうとMemoryStreamだろうと自作のStreamだろうと使えるという。
Cだけじゃそういうのはちょいと手間かかりそうだね。
0672デフォルトの名無しさん
2007/01/28(日) 20:12:55ちゃんとつけて、エンコーディング絡みの問題はI/Oレイヤに隠蔽すべきだろ。
テキストストリームの場合はデフォルトではシステムのコードページや
LC_CTYPEに従ってUTF-8との変換を行うべきだし、明示的にエンコーディングを
指定することも可能になっているべきだ。
ただしWin32かつコンソールI/Oの場合は、可能ならW系APIを使うようにすべき
だろう。
単にハローワールドしたいだけのユーザが、明示的に
std.windows.charset.toMBSz()なんてものを使わないといけないのは
馬鹿げている。
0673デフォルトの名無しさん
2007/01/28(日) 20:48:48Linux環境では実質UTF8ロケールじゃないと使い物にならないってことだよな。
……駄目じゃん。それじゃ実用的な言語にはならないよ。
char[]のエンコーディングをUTF-8と仮定した時点で、外部がそうとは限らない
実世界で使われる実用的プログラミング言語としては、システムとの界面において
エンコーディング問題の一切の泥仕事をを引き受ける必要が生じるって
ことなんだがな。
0674デフォルトの名無しさん
2007/01/28(日) 20:55:23VMっていう答えがもう出てるからなあ。
> 複数ライブラリ間の相互運用性のことじゃないのか。
そんなこと言い出したらきりが無いと思うんだけど。
その時その時で出来る限りのコードを書くしかないし。
俺らが今書いているコードだって、未来には別な概念を持った言語が生まれてて、
気持ち悪いとか言われてるんだぜ、きっと。
0675デフォルトの名無しさん
2007/01/28(日) 21:02:37ある程度移植性の高いコードはCでも書けるべ。
分野によっては厳しいけど。
んでも、ToMBSz()とか使わないといけない時点でDでは厳しいなw
何コレ。
Win32ベッタリじゃん。
0676デフォルトの名無しさん
2007/01/28(日) 21:10:19バイナリ担当のInputStream/OutputStreamと
文字担当のReader/Writerが分かれてて、
両者の境界では必ずエンコーディングが与えられる。
Dは文字とバイナリの区別が曖昧な気がする。
とりあえず英語環境じゃ困らないから、
Cの実装に丸投げして間に合わせたりして、
細かい設計は後回しにしてるのか……?
ちょっとソース読んでみるかねぇ。
0677デフォルトの名無しさん
2007/01/28(日) 21:26:58クラスの継承はすべてpublic継承なの?
private/protected継承はないのか
0678デフォルトの名無しさん
2007/01/28(日) 21:43:16ClassDeclaration:
class Identifier BaseClassListopt ClassBody
BaseClassList:
: SuperClass
SuperClass:
Protection Identifier
Protection:
private
package
public
export
0679デフォルトの名無しさん
2007/01/28(日) 21:44:44char[]がUTF-8と仮定することで多くのMBCS問題を回避することはできるが、
その代わりに、Cのcharがただのバイトでしかなかったことで避けていた
問題にブチあたってる感じ。
Javaや.NETのアプローチは流石に賢いし正しいね。
0680デフォルトの名無しさん
2007/01/28(日) 21:46:12かといって、Win32 UNICODEなプログラムを書こうとしても、
今度はwcharな文字列操作関数が全然ない。
0681デフォルトの名無しさん
2007/01/28(日) 21:48:490682デフォルトの名無しさん
2007/01/28(日) 21:49:41って、スレ違いか
0683デフォルトの名無しさん
2007/01/28(日) 21:50:25きっと、同一モジュール(ソース)内に、書いて private が効いてないとか言うオチの予感。
0684デフォルトの名無しさん
2007/01/28(日) 21:54:02.NETはほぼJavaと同じ。
Win32ベッタリなだけに、DLLやCOMとの相互運用性がもともとサポートされており、
ライブラリ側のchar*とのエンコード変換は、import指定の際に、簡単な
属性の形で記述できる。この辺はJavaより便利で楽な点かな。
0685デフォルトの名無しさん
2007/01/28(日) 22:05:33いやそれは大丈夫
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();
}
0686デフォルトの名無しさん
2007/01/28(日) 22:07:230687デフォルトの名無しさん
2007/01/28(日) 22:07:32A 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
0688デフォルトの名無しさん
2007/01/28(日) 22:35:03int32とかint64とかそういうINTxx的なエーリアスが標準でついていて、保障されてるとうれしいなー。
0689デフォルトの名無しさん
2007/01/28(日) 22:46:07ライブラリとして、Arraysって感じに集積してみてはどうだろうか。
cppのSTL並に有用なライブラリになりそうなんだけど。
0690デフォルトの名無しさん
2007/01/28(日) 23:09:23std.stdintが既にある
0691デフォルトの名無しさん
2007/01/28(日) 23:18:430692デフォルトの名無しさん
2007/01/28(日) 23:33:20お。あるんですね。
CPPで開発してても標準でそういうものが無いみたいなのでいつもビクビクしながら作ってたんですよ。
それだけでも結構、価値があるように思いますー。
0693デフォルトの名無しさん
2007/01/29(月) 00:02:39今までの言語ですごくほしい、、と思ってた機能がある
かわりに
今までの言語で湯水のようにすんなりと使って、気づいてなかった
ところが、まだ実装されてない。
っていう状態なんだな。
0694デフォルトの名無しさん
2007/01/29(月) 00:17:190695デフォルトの名無しさん
2007/01/29(月) 00:24:560696デフォルトの名無しさん
2007/01/29(月) 00:30:30dmあたりが統制を取ろうとしてるのではないかと邪推できる
0697デフォルトの名無しさん
2007/01/29(月) 00:40:04まー、誰かが音頭取らないと発展しないし、カリスマ発揮して旨く転がしてほしいね。
0698デフォルトの名無しさん
2007/01/29(月) 00:52:18まだVer.1が出たばっかだから、粒の粗い方を処理してる感じなんだろうね。
俺はもうちょっと様子見かな。
でも、Dはホント普及してほしいよ。
メモリ管理が面倒でSTLに逃げたりnewしない方向ばかり検討したり、根性曲がってしもた。
0699デフォルトの名無しさん
2007/01/29(月) 00:54:320700デフォルトの名無しさん
2007/01/29(月) 01:05:060701デフォルトの名無しさん
2007/01/29(月) 01:07:250702デフォルトの名無しさん
2007/01/29(月) 01:20:100703デフォルトの名無しさん
2007/01/29(月) 03:36:24http://marmotfarm.com/cgi-bin/upload2/source/up88338.zip
直リンダメだったら以下からup88338.zipで。
http://marmotfarm.com/cgi-bin/upload2/upload.cgi
こんなんでも少しは役に立つかな……立たないかな……。
0704デフォルトの名無しさん
2007/01/29(月) 04:44:38C標準の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のキャストは一体どう扱われるべきか、という別の疑問点も
引き起こすが。
0705デフォルトの名無しさん
2007/01/29(月) 09:45:590706デフォルトの名無しさん
2007/01/29(月) 10:14:500707デフォルトの名無しさん
2007/01/29(月) 11:28:32Cに標準で入ってたんか……。試してみよう。
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"てポストもあるし、ちょっと読んでみようか。
0708デフォルトの名無しさん
2007/01/29(月) 12:56:48C標準は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で、関数やクラスは他で定義されている
というのに、だ。
0709デフォルトの名無しさん
2007/01/29(月) 13:10:400710デフォルトの名無しさん
2007/01/29(月) 13:20:57それって既に8bitクリーンじゃないって事にはならないの? 昔からの疑問……。
0711デフォルトの名無しさん
2007/01/29(月) 13:26:52versionは生かしたいところだな。あれは(#ifに比べて)いいものだ。
MacOSXが定義されてない、と思ったらdarwinと定義する人が多いね。
0712デフォルトの名無しさん
2007/01/29(月) 13:33:18charをそのままctype.hのマクロに渡したり、128以上の整数と比較したりする
コードがあればNG。
そういうことをやっていないのなら問題ない(と言い切ってしまうのは問題が
あるかもしれないが)。
マンドクセーから-funsigned-charだの-Jだのといったコンパイラオプションで
charを強引に無符号にしてしまうケースもしばしば見られるな。
0713デフォルトの名無しさん
2007/01/29(月) 14:26:410714デフォルトの名無しさん
2007/01/29(月) 15:34:000715デフォルトの名無しさん
2007/01/29(月) 15:52:21フォボスは、いずれ壊れる運命にあります。
なぜなら、フォボスの軌道が静止軌道の内側であるため、潮汐力がフォボスを火星の方に引っ張るからです。
1億年以内に、フォボス は破砕されて火星の輪になるか、火星表面に激突するでしょう。
0716デフォルトの名無しさん
2007/01/29(月) 18:37:11>1億年以内に...
なら安心だ。
0717デフォルトの名無しさん
2007/01/29(月) 19:01:590718デフォルトの名無しさん
2007/01/29(月) 21:06:35>>708
なんだか訳が分からなくなってきたw
元々詳しい分野でもなかったんで、これからまったりと勉強してきまふ。
というか、WideCharとかMultiByteとかWinAPIのA版W版とか、
なんど勉強してもいまいち正確な定義やそれぞれの関連が理解しきれんw
0719デフォルトの名無しさん
2007/01/29(月) 21:13:02この手の物は完全にバットノウハウだしなw
0720デフォルトの名無しさん
2007/01/29(月) 21:21:41・WinAPIのA版は、ASCIIだけど、W版の文字コードは?
・D言語の標準的な文字コードは?
0721デフォルトの名無しさん
2007/01/29(月) 21:26:20・Windows A:ANSI, W:UTF-16
・D言語 char:UTF-8, wchar:UTF-16, dchar:UTF-32
・C言語 char:環境によっていろいろ, wchar_t:環境によっていろいろ
0722デフォルトの名無しさん
2007/01/29(月) 21:52:59typedef char mb_char;
typedef mb_char utf8;
typedef mb_char shift_jis;
とかあると便利じゃないだろうか
0723デフォルトの名無しさん
2007/01/29(月) 23:06:05typedef ubyte UTF8
typedef ubyte ANSI
・
・
・
みたいな物がよかったよ。
で、charは無くてよし。
0724デフォルトの名無しさん
2007/01/29(月) 23:09:43我らには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の当たりかなり自信無いっす。
0725デフォルトの名無しさん
2007/01/29(月) 23:13:100726デフォルトの名無しさん
2007/01/29(月) 23:23:09ファイルフォーマットとしてなら許容するが
0727724
2007/01/29(月) 23:44:14もうどうせだから、もっと色々書いちゃう。
「
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が流されるから文字化けする……と?
0728デフォルトの名無しさん
2007/01/30(火) 00:45:540729デフォルトの名無しさん
2007/01/30(火) 00:49:070730デフォルトの名無しさん
2007/01/30(火) 00:52:090731デフォルトの名無しさん
2007/01/30(火) 00:54:160732724
2007/01/30(火) 01:04:58標準入出力はバイナリストリームなんだからAもWも無いのか。
WriteConsoleとかの文字列を扱うためのAPI以外は。
むしろcmd.exeが、標準出力から受け取ったデータをShift_JIS文字列として解釈する仕様で、
でもphobosがUTF-8にして流してるせいで文字化けする、と。
何を長々と書いているんだ俺は。みんなゴメンよ。もう寝ます。
0733デフォルトの名無しさん
2007/01/30(火) 01:22:190734デフォルトの名無しさん
2007/01/30(火) 04:38:300735デフォルトの名無しさん
2007/01/30(火) 07:39:30誰もがそう思ってるが実現されない不思議
0736デフォルトの名無しさん
2007/01/30(火) 08:43:450737デフォルトの名無しさん
2007/01/30(火) 08:45:400738デフォルトの名無しさん
2007/01/30(火) 11:29:19ちゃんとした実装があるかは知らん
0739デフォルトの名無しさん
2007/01/30(火) 11:37:482バイト固定は UCS-2 だな。
0740デフォルトの名無しさん
2007/01/30(火) 13:52:47static if(!is(I : Object)){
static assert(false);
}
これが通らないのはバグと言えるんでしょか。
でないとしたら、テンプレートで受け取った型がtoString()持ってるかどうか
判定するにはどうすればいいと思います?
Is式の項目を見るとどうにも、
static if(!is(I : interface)){
static assert(false);
}
とか書けるように見えるような……。
0741デフォルトの名無しさん
2007/01/30(火) 16:14:12自分は
void tmpl(T)(T obj) {
static if( is(T == interface) ) (cast(Object)obj).toString() ...
else static if( is(T == class) ) obj.toString() ...
}
とかやってる
0743デフォルトの名無しさん
2007/01/31(水) 01:20:000744デフォルトの名無しさん
2007/01/31(水) 01:22:490745デフォルトの名無しさん
2007/01/31(水) 01:48:00ICU
stdcのwcschrとかその辺のstring.hのcomplementsや、
stdc++のwstringは、
UTF-16の場合は結局MBCSと同じ泣き別れ問題を引き起こすわな。
>>743
Windowsに限った話じゃない。
実行環境がUTF-8ロケールでない「あらゆる」環境に向かない。
0746デフォルトの名無しさん
2007/01/31(水) 02:24:030747デフォルトの名無しさん
2007/01/31(水) 02:52:020748デフォルトの名無しさん
2007/01/31(水) 02:52:24米国人もTMだの(C)だのの非ASCIIなLatin-1記号は結構使うものだよ
0749デフォルトの名無しさん
2007/01/31(水) 10:31:31なんでXPでできなくなってんだよ
0750デフォルトの名無しさん
2007/01/31(水) 10:43:24めんどいな。
0751デフォルトの名無しさん
2007/01/31(水) 10:47:22もうみんなck使おうぜck。Dが日本語化けるなんて気づかなかったぜ俺。
0752デフォルトの名無しさん
2007/01/31(水) 10:47:370753デフォルトの名無しさん
2007/01/31(水) 17:09:050754デフォルトの名無しさん
2007/01/31(水) 17:41:02何の話?
0755デフォルトの名無しさん
2007/01/31(水) 18:09:130756デフォルトの名無しさん
2007/01/31(水) 18:49:390757デフォルトの名無しさん
2007/02/01(木) 01:03:50某すごい人が、blogですぱっと解決してくれたな・・・。
0758デフォルトの名無しさん
2007/02/01(木) 02:46:16どこ?
0759デフォルトの名無しさん
2007/02/01(木) 02:49:06D言語のリファレンス訳書いている人んところですね。
0760デフォルトの名無しさん
2007/02/01(木) 03:25:240761デフォルトの名無しさん
2007/02/01(木) 03:35:280762デフォルトの名無しさん
2007/02/01(木) 03:42:320763デフォルトの名無しさん
2007/02/01(木) 10:17:27UTFじゃないはずのネイティブな文字列データがchar[]扱いだ。
あんだけたくさんの言語に触れたあの人でも、Cのお約束引きずってるのかな。
それともwcstombsとかに渡すときに、いずれchar*にキャストしなきゃいかんから……か?
いや、ubyte[].ptrをchar*にcastしたところで、何の変換コードが走るわけもなし。
いっそstd.cのimport文をWalterに書き換えて貰わんと根本的な解決にはならんのか。
いやそれより、main引数のchar[][]て、
今までUTF-8変換されてなかったのかw
0764デフォルトの名無しさん
2007/02/01(木) 12:52:12今の用途だと、char[] 以外にしても単純に全部の使用箇所でcastが
必要になって使いにくいだけなので…
# ネイティブ文字コードなのに char[] で受け渡ししてくる
# ライブラリ(含Phobos)を応急処置で外から使うためのものなんで
自分で一からDの文字コード周りを再設計するならそりゃ別の型にするけども。
0765デフォルトの名無しさん
2007/02/01(木) 14:17:24お世話になっとります
0766デフォルトの名無しさん
2007/02/01(木) 15:18:090767デフォルトの名無しさん
2007/02/01(木) 15:29:50D言語って代入はあるの?
0768デフォルトの名無しさん
2007/02/01(木) 16:22:07ある
と言っておけばいいのか
0769デフォルトの名無しさん
2007/02/01(木) 16:27:21挿入です
0770デフォルトの名無しさん
2007/02/01(木) 16:52:040771デフォルトの名無しさん
2007/02/01(木) 16:52:140772デフォルトの名無しさん
2007/02/01(木) 17:55:32C#やJavaでは 仮想的な実装になるので 現実味を帯びていない
0773デフォルトの名無しさん
2007/02/01(木) 18:43:340774デフォルトの名無しさん
2007/02/01(木) 18:47:090775デフォルトの名無しさん
2007/02/01(木) 18:49:36おー、やっと普通に
import tango.io.Stdout;
void main() { Stdout("Hello, world!")(); }
がコンパイル通るようになってる。
0776デフォルトの名無しさん
2007/02/01(木) 18:52:18poseidonってとっくに死んでたはずだけど。
0778デフォルトの名無しさん
2007/02/01(木) 19:26:040779デフォルトの名無しさん
2007/02/01(木) 23:03:46インテリセンス?なにそれおいしい?
0780デフォルトの名無しさん
2007/02/01(木) 23:32:540781デフォルトの名無しさん
2007/02/01(木) 23:43:12うーむ。実はどことなく釈然としませんが、たぶん私が未熟なだけなのでせう。
もーちょいいろんなIO関係のコード読んで勉強しまっす。多謝。
で、Descentも使わずEclipseのテキストエディタ使ってるのなんてきっと俺だけ・・。
自動ビルダ設定とSVN統合だけが友達さー。他でも出来るなんて言わないでー。
0782デフォルトの名無しさん
2007/02/01(木) 23:52:220783デフォルトの名無しさん
2007/02/02(金) 00:39:13ttp://www.dsource.org/projects/tango/wiki/Download
0784デフォルトの名無しさん
2007/02/02(金) 01:53:54int a[char[]]={
"aaa":1,
"bbb":2,
"ccc":3
}
なんてなー・・・
0786デフォルトの名無しさん
2007/02/02(金) 10:43:09あんまりきれいじゃないけど、こんなのどう?
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;
}
0787デフォルトの名無しさん
2007/02/02(金) 12:59:11template 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);
0789デフォルトの名無しさん
2007/02/02(金) 15:15:520790デフォルトの名無しさん
2007/02/02(金) 18:36:13>>787のAA()は展開されると、どんな記述と等価になるの?
0791デフォルトの名無しさん
2007/02/02(金) 19:25:49やっぱ実行時に動的に追加してるからかな。
0792デフォルトの名無しさん
2007/02/02(金) 23:14:09大体こんな感じかなあ
int[char[]] result1;
result1["Hoge"] = 3;
int[char[]] result2;
result2 = result1;
result2["Bar"] = 2;
int[char[]] result3;
result3 = result2;
result3["Foo"] = 1;
要素の数だけ連想配列のデフォルトコンストラクタ(?)を呼んでいるのが
ちょっと効率悪いような気がする。
0793デフォルトの名無しさん
2007/02/02(金) 23:18:220794デフォルトの名無しさん
2007/02/02(金) 23:19:180795デフォルトの名無しさん
2007/02/02(金) 23:37:210796デフォルトの名無しさん
2007/02/03(土) 00:26:57調子に乗ってみた。
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);
0797デフォルトの名無しさん
2007/02/03(土) 02:02:00308行目のspan閉じてないからみたいです
0798デフォルトの名無しさん
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;
}
くらいしないとダメぽい
0799デフォルトの名無しさん
2007/02/03(土) 10:01:39> はただポインタコピーするだけだからほとんど無視できるはず
ただのポインタコピーで済むのはコピーコンストラクタの場合。
デフォルトコンストラクタではメモリを割り当てないといけないはず。
0800デフォルトの名無しさん
2007/02/03(土) 10:33:000801デフォルトの名無しさん
2007/02/03(土) 11:51:170802デフォルトの名無しさん
2007/02/03(土) 14:41:080803800
2007/02/03(土) 15:37:55AA_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);
こういう感じの動作なので、普通に書くより遅いことはない、よ
0804デフォルトの名無しさん
2007/02/03(土) 16:57:200805デフォルトの名無しさん
2007/02/03(土) 19:44:05確認する方法はありますか?
0806デフォルトの名無しさん
2007/02/03(土) 23:41:43ユニットテスト
でも正直言わせてもらえればテンプレートもコードもかかれた通りに動作する
意図通りとは限らない。
0807デフォルトの名無しさん
2007/02/04(日) 01:00:440808デフォルトの名無しさん
2007/02/04(日) 02:34:08うお、こんなことができるのか。syntax-rulesみたいだ
0809デフォルトの名無しさん
2007/02/04(日) 03:52:45lazyとかテンプレートとかinoutとかプロパティとか
0810デフォルトの名無しさん
2007/02/04(日) 08:49:56public property int x(){
:
:
}
こんな風にならんかな
0811デフォルトの名無しさん
2007/02/04(日) 09:57:200812デフォルトの名無しさん
2007/02/04(日) 09:59:470813デフォルトの名無しさん
2007/02/04(日) 10:08:460814デフォルトの名無しさん
2007/02/04(日) 15:23:23やめて無意味にシンプルを捨てるコード書かないで
と言わせてもらおう……。
「"書く"に"Hello, world!"を代入する」より
「"Hello, World!"を"書く"」の方がずっと判りやすいじゃん。
プロパティが呼び出す側のシンタックスシュガーでしか無いってのは、
それがオブジェクト「属性」なのか「アクション」なのか、
クラスの設計者が表明出来ないってことなんだよね……。
0815デフォルトの名無しさん
2007/02/04(日) 15:52:02ついでに通常の呼び出しが禁止されると尚良し。俺的に。
0816デフォルトの名無しさん
2007/02/04(日) 15:55:06>「"Hello, World!"を"書く"」の方がずっと判りやすいじゃん。
Dで書くと
"Hello, world".printf();
...んーコレ、本当に判りやすいと思うのか? むしろ余計意味不明度が増してる気が。
0817デフォルトの名無しさん
2007/02/04(日) 15:56:150818デフォルトの名無しさん
2007/02/04(日) 16:09:000819デフォルトの名無しさん
2007/02/04(日) 17:30:53とかになるとあら不思議。かな
0820デフォルトの名無しさん
2007/02/04(日) 17:46:33writefln=toString=10;
0821デフォルトの名無しさん
2007/02/04(日) 17:49:340822デフォルトの名無しさん
2007/02/04(日) 18:16:500823デフォルトの名無しさん
2007/02/04(日) 18:25:40少なくともprintf = "Hello, world!";よりはマシでしょう……。
私ゃprintf("Hello, world!");と書きますが。
むしろOOP的にはcout.printf("... とか?
# というかcoutはstdoutと名乗ることはできなかったんだろーか……。
演算子使うとしたら、C++に習ってcout << "Hello, world!"; あたり……?
0824823
2007/02/04(日) 18:30:200825デフォルトの名無しさん
2007/02/04(日) 18:49:07int add10(int a){return a+10;}
void main(){writefln=toString=add10=toInt=din.readLine;}
delegate/functionリテラルが使えないのと演算子の優先順位がらみの問題で使いにくいのが難点か。
0826デフォルトの名無しさん
2007/02/04(日) 19:12:06以下の簡単なソースがコンパイルエラーになるのだが・・・
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)
0827デフォルトの名無しさん
2007/02/04(日) 20:05:50書ければそれでいいじゃないかと思う。
見て意味が分かればなおいい。
短ければもっといい。
0828826
2007/02/04(日) 21:08:18スルーして下さい(´・ω・`)
0829デフォルトの名無しさん
2007/02/04(日) 21:31:30と思うけど
0830デフォルトの名無しさん
2007/02/04(日) 22:20:24書けるだけで判りづらいコードは有害だと思うのです……。
でも単に「書けるから書いた」ってだけでない、
見て意味がわかるコードを書くのは難しいことで、
だからこそ、それがマの技術力の一つだと思うわけで……。
可読性は神への信仰の次に大事です、とかいうファウラー信者な俺。
0831デフォルトの名無しさん
2007/02/04(日) 22:27:50dmdscript使えば良いじゃない。
...と言おうとおもって調べてみたけどソースが古すぎてdmdscriptのコンパイルとおらねー
0832デフォルトの名無しさん
2007/02/04(日) 22:44:02std.stream.stdout.writeLine("Hello world");
や
import std.strem後のstdout.writeflnってコンパイル通らないよ。
素直にstd.stdio.writeflnに統一しろって事?
0833デフォルトの名無しさん
2007/02/04(日) 22:45:34std.stdioのwriteflnかstd.cstreamのdout.writeflnやdout.writeLine
0834デフォルトの名無しさん
2007/02/04(日) 23:47:14ここのサンプルコードが早くfixされてほしい
ttp://www.wisdomsoft.jp/dev/prog/d/001
0835デフォルトの名無しさん
2007/02/04(日) 23:59:21それ以前に、全体的に古すぎ。
0836デフォルトの名無しさん
2007/02/05(月) 00:09:340837デフォルトの名無しさん
2007/02/05(月) 00:11:18>>323 でも見れ
0838デフォルトの名無しさん
2007/02/05(月) 04:05:08ヒント:ネタ
0839デフォルトの名無しさん
2007/02/05(月) 15:17:21Windowsのcmd.exeで標準出力をリダイレクトすると空行が入らない?
あとサンプルだとtest.dを読みに行ってるけど、
普通Dソースはネイティブ文字コードじゃないはずだからまずくないかな?
少なくともBOMが入ってると
Error: ArrayBoundsError nu_mbwc(28)
が出る
0840デフォルトの名無しさん
2007/02/05(月) 15:52:06std.stdioのwritefxを、ここ↑のに書き換えて、phobosをmakeし直すのはどう?
0841デフォルトの名無しさん
2007/02/05(月) 17:27:52てきとうに修正しました
tangoのConsole IOはちゃんと変換してくれるのでそっちのがいいかも。# Windowsなら
0842839
2007/02/05(月) 17:35:20doutとかのCFileはCのf〜系関数をラップしてるから改行コード変換をD側でやっちゃいけないのが問題だね。
そのおかげでフィルタストリームを作るときにファイルとコンソールで分けて実装しないとおかしなことになる。
CFileのコンストラクタでFILEをバイナリモードにかえてやって、
改行コード変換は全てD側でやるようにCFile.writeLineやらを修正すれば解決するのかな
0844デフォルトの名無しさん
2007/02/05(月) 18:04:12>>672さんも言ってるみたいに、テキストとバイナリのIOは明確に分けて欲しいよなあ…
0845デフォルトの名無しさん
2007/02/05(月) 22:01:42こういうコードというか、テキストIO/バイナリIOの考え方自体が
「標準ライブラリに」入り込んでくれないと困るんだよなぁ……。
んで、そのへんの標準ライブラリの設計が片っ端から改善されたとして。
そうするとDって、プログラミングに初めて触れるための言語として、
結構良いモノになれる可能性が高いんじゃないかと、ふと思った。
Javaや.Netみたく必ずしもオブジェクト指向を強制されないし、
GCと例外のおかげで「引数は入力で戻り値が結果・目的」とかの
ごく基本的な原則からも逸脱せずに済むし。
出来上がるのはみんなお馴染みの.exeだから
「exeってこうやって作られるのか」的感動もあり。
0846デフォルトの名無しさん
2007/02/06(火) 05:31:37class 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げ");
0847デフォルトの名無しさん
2007/02/06(火) 06:29:58writeExactをオーバーライドしちゃうとバイナリ出力やワイド文字出力が使えなくならない?
それとFilterStream.writeLine(定義はStreamクラスの中)は環境ごとに改行コードを選んで出力するようになってるから、
doutをFilterStreamに包むとCライブラリの改行変換と重複して、改行として\r\r\nが出力されてしまう。
0848デフォルトの名無しさん
2007/02/06(火) 12:07:57ちょっと新たな気持ちでJavaのio設計を読み直してみたり。
DのOutputStreamはたくさんメソッド定義しすぎだな。Inputもしかり。
「渡されたバイト(列)を独自の出力先に書き込む」メソッド1つあれば十分……というか、
それ以上の事を実装クラスにさせちゃダメなのに。
0849デフォルトの名無しさん
2007/02/06(火) 12:57:51JpStreamは文字入出力のためのクラスだ、write(int)とかは使うな!と
ドキュメントとかで主張はできるけど、所詮は大元のまずいクラス設計のごまかしに過ぎない。
0850デフォルトの名無しさん
2007/02/06(火) 13:58:16Feb 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
0851デフォルトの名無しさん
2007/02/06(火) 15:03:05なんか猛烈なのキタ
0852デフォルトの名無しさん
2007/02/06(火) 15:15:19{
// Prints contents of file foo.txt
writefln( import("foo.txt") );
}
これはすごいwwwwwww
0853デフォルトの名無しさん
2007/02/06(火) 15:22:55こうすればC/C++の#include
0854デフォルトの名無しさん
2007/02/06(火) 15:28:550855デフォルトの名無しさん
2007/02/06(火) 15:43:360856デフォルトの名無しさん
2007/02/06(火) 15:52:10バグ修正
* mixin での super の問題を修正。
ただ、どういう意味でのmixinを言っているのかはっきりさせてくれれば
0857デフォルトの名無しさん
2007/02/06(火) 15:52:46久しぶりすぎ
0858デフォルトの名無しさん
2007/02/06(火) 15:53:340859デフォルトの名無しさん
2007/02/06(火) 16:01:29http://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
0860デフォルトの名無しさん
2007/02/06(火) 16:44:480861デフォルトの名無しさん
2007/02/06(火) 17:14:49なんの話?
0862デフォルトの名無しさん
2007/02/06(火) 19:16:37Walterのやろぉ、全っ然そんなつもり無ぇなてめぇぇぇぇーー!
やっぱDはこうでなくちゃな!
しかしこのMixinて、#includeとどう違うんだ?とかどうも嫌な感覚があるんだが。
まぁいいや、新仕様ちぇっくちぇっく……
0863デフォルトの名無しさん
2007/02/06(火) 19:36:23mixin(import("foo.d"));
とすると#includeっぽい働きをするのかな。
そもそもの#includeっぽい用途ならmixinなんて
する必要ないだろうから、使い道は変わってきそうだ。
mixin(brainfuck!(import("foo.bf")));
とかしろってことだろうか。
0864デフォルトの名無しさん
2007/02/06(火) 20:09:270865デフォルトの名無しさん
2007/02/06(火) 20:14:28単なる外部ファイル化とはちょっと違うところかな。
0866デフォルトの名無しさん
2007/02/06(火) 20:15:500867デフォルトの名無しさん
2007/02/06(火) 20:34:51いや、関数型言語とかにゃ及ばないんだろうけど。
確かに「ユーザ側でシンボル名を指定できるライブラリとか作れたらなー」とか
思ったことはあったけどさ……。まさかここまでするとは。
強力なライブラリを作る基礎になりそうな気はするな。
しかしこうなると「コンパイル時に決定できる文字列」とそうでない文字列の区別が
面倒くさくなってきそう。
0868デフォルトの名無しさん
2007/02/06(火) 20:35:170869デフォルトの名無しさん
2007/02/06(火) 20:56:370870デフォルトの名無しさん
2007/02/06(火) 21:24:38文字列リテラルやconst char[]と互換(等価?)な、
”メタ文字列リテラル”みたいな言語仕様が欲しくなってきた。
"文字列の内容"は関数名や変数名とかとは完全にレイヤが違う、って
感覚が染みついてるから、どうも気持ち悪くなるんだよね……。
0871デフォルトの名無しさん
2007/02/06(火) 21:28:22激しいのが見たい
0872デフォルトの名無しさん
2007/02/06(火) 21:33:280873デフォルトの名無しさん
2007/02/06(火) 21:38:08static this(){
printf="Hello World";
}
0874デフォルトの名無しさん
2007/02/06(火) 21:59:14template 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]))]
/*
0875デフォルトの名無しさん
2007/02/06(火) 22:00:01hash(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"]);
}
0876デフォルトの名無しさん
2007/02/06(火) 22:20:200877デフォルトの名無しさん
2007/02/06(火) 22:22:31うん、実は死にそうになった。
あと、>>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"]);
}
0878デフォルトの名無しさん
2007/02/06(火) 22:46:110879デフォルトの名無しさん
2007/02/06(火) 22:48:220880デフォルトの名無しさん
2007/02/06(火) 22:55:460881デフォルトの名無しさん
2007/02/06(火) 22:59:00実用重視はどこに行ったんだ?
0882デフォルトの名無しさん
2007/02/06(火) 23:13:240883デフォルトの名無しさん
2007/02/06(火) 23:14:420884デフォルトの名無しさん
2007/02/06(火) 23:19:360885デフォルトの名無しさん
2007/02/06(火) 23:19:54現に Java とかアイコンのプロジェクトとダブってるし
改称プロジェクト続出の例があるから心配。
・・・dango orz
0886デフォルトの名無しさん
2007/02/06(火) 23:35:10--- 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コンパイラに組み込まれる形に。
……とか、可能になる……のか? のか?
0887デフォルトの名無しさん
2007/02/06(火) 23:36:17>>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); }
}
0888デフォルトの名無しさん
2007/02/06(火) 23:47:59Dコンパイラは汎用プログラミング言語コンパイラになりました\(^o^)/
v1.0出したからv2.0まで遊べるようになったもんな
もっとやれw
0890デフォルトの名無しさん
2007/02/07(水) 00:07:35ここはひとつJSONも・・・
0891デフォルトの名無しさん
2007/02/07(水) 01:08:26XAMLライブラリ作っちゃう猛者とか現れないかなあw
0892デフォルトの名無しさん
2007/02/07(水) 01:47:020893デフォルトの名無しさん
2007/02/07(水) 01:55:470894デフォルトの名無しさん
2007/02/07(水) 01:58:54明らかに悪化の一途を辿るだろwww
0895デフォルトの名無しさん
2007/02/07(水) 02:02:320896デフォルトの名無しさん
2007/02/07(水) 02:40:11C/C++との互換性が意外な方向から解決、みたいな。
0897デフォルトの名無しさん
2007/02/07(水) 02:49:06プリプロセッサは 副作用 と スコープの概念がない のが問題だったが
このimport/mixinにはそういう心配はなさそうじゃない?
それとも別の問題が考えられる?
0898デフォルトの名無しさん
2007/02/07(水) 03:12:49すでに、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タンが答えてる。
0899デフォルトの名無しさん
2007/02/07(水) 03:18:28BuildBarserFromFileSpec!("foo.bnf")
これがそそる。
0900デフォルトの名無しさん
2007/02/07(水) 03:21:21これワロタ
0901デフォルトの名無しさん
2007/02/07(水) 03:37:57ほぉ、コレは便利。
0902デフォルトの名無しさん
2007/02/07(水) 07:19:470903デフォルトの名無しさん
2007/02/07(水) 07:50:17いくら何でも作者が死ぬだろ……と自分でも思うが、
boostのSpiritとかそーいう変態的hackを見てると、
世のハッカー達ならひょっとして……とか思えてしまう。
実は自分には実装がホントに可能なのかすら全然想像もつかないけど。
ひょっとしたら意外に簡単だったりするんだろうか。
>>901
importは何らかの文字変換かけてbyte列壊したりはしないのかな。
試しにBOM付きのXMLテキストをimport&出力してみたら、
きっちり先頭に化け文字がくっついてくれたけど。
0904デフォルトの名無しさん
2007/02/07(水) 07:52:58こんなかんじで
import(exefile, cmdline, stdin)
そうするとコンバータを自作したりできるんだが
流石に狂ってるかね
0905デフォルトの名無しさん
2007/02/07(水) 08:28:55このMixinはStatement/Expression/Declarationの言語単位を認識してくれるのね。
コンパイラ内部にあるであろうStatementParserとかExpressionParserに
staticな文字列をソースとして放り込んで、結果を採用させる、って感じ?
確かにCの単純なプリプロセッサとはひと味違うわ。
0906デフォルトの名無しさん
2007/02/07(水) 08:51:20> importで実行ファイルを指定して標準出力をとってきてくれるとかどうだろう
> こんなかんじで
> import(exefile, cmdline, stdin)
>
> そうするとコンバータを自作したりできるんだが
> 流石に狂ってるかね
898見てみると、Walタンがセキュリティーに配慮してやらないようにしてるって答えたみたい。
0907デフォルトの名無しさん
2007/02/07(水) 09:28:16サンクス
確かにセキュリティ的にやばいな
0908デフォルトの名無しさん
2007/02/07(水) 09:33:530909デフォルトの名無しさん
2007/02/07(水) 09:35:46all:
rm -rf /
なんて書かれてたら同じな気ガス
0910デフォルトの名無しさん
2007/02/07(水) 10:07:13それもそうだった……というかコンパイル後に実行するのも同じだったな。
その辺のセキュリティの話は嫌と言うほど各所で議論済みか。
実際の話、どう使われていくんでしょか。
MixinExpressionは>>880みたいな用途に使える……よな?
importしたのをコンパイル時にどう行分割したりするのか、俺は全然知らないけど。
MixinDeclarationは、型ジェネレータみたいなのに使えるはず。
MixinStatementは何か、今のままだとヤな感じ。ただその場にコードぶちまけるだけみたいな。
独自のSyntaxSugarを生成したりするのに使えるか……?
0911デフォルトの名無しさん
2007/02/07(水) 10:33:38それらを使って宣言や定義や式を組み立てられるように
なったのが大きいと思う。
0912デフォルトの名無しさん
2007/02/07(水) 11:02:06mixin(
"int hoge = 0;\r\n"
"hoge++;\r\n"
"writefln(hage);\r\n" // Error: undefined identifier hage
);
hoge++の行でエラー、と出力。さすがにこれはズレるかw
n行目のmixin内 -> x行目でエラー、みたくエラーメッセージも階層化キボンヌ。
0913デフォルトの名無しさん
2007/02/07(水) 11:46:49なんでもありでおもしろそう。
0914デフォルトの名無しさん
2007/02/07(水) 12:48:21static if みたいに使えそうなんで欲しい
0915デフォルトの名無しさん
2007/02/07(水) 12:51:43static{
dynamic if()
{
}
0916デフォルトの名無しさん
2007/02/07(水) 12:52:44間違えて途中で送った・・・。
static{
if()
{
dynamic if(xxx)
{
// 実行時の処理
}
}
0917デフォルトの名無しさん
2007/02/07(水) 12:53:14またやっちまった。。。
もう・・・言いたいことをつかんでくれたらうれしいorz
0918デフォルトの名無しさん
2007/02/07(水) 13:04:360919デフォルトの名無しさん
2007/02/07(水) 13:28:56staticなブロックの中に普通のifを書き込むってわけ。
staticなブロックで普通にif書いたらstatic ifになるって寸法。
0920デフォルトの名無しさん
2007/02/07(水) 15:45:050921デフォルトの名無しさん
2007/02/07(水) 16:20:15サクラのレンサバにD言語入れてる人いませんか?
0922デフォルトの名無しさん
2007/02/07(水) 16:42:38void myassert(bool bCond, char[] message=null){
if(! bCond){
/* 独特な処理 */
throw new std.asserterror.AssertError(_caller.file, _caller.line, message);
}
}
0923デフォルトの名無しさん
2007/02/07(水) 17:01:490924デフォルトの名無しさん
2007/02/07(水) 17:27:11mixinを駆使して作ればいいよ。
というか気合いれれば普通に作れるんじゃね
0925デフォルトの名無しさん
2007/02/07(水) 19:09:22ソケットストリーム用とかですか?
ファイルストリームを全読みこみする時にもこんなことやったほうがいいんでしょか。
ubyte[] buf, tmp;
stream.seekSet(0);
while (!stream.eof) {
tmp.length = stream.available;
stream.read(tmp);
buf ~= tmp;
}
0926デフォルトの名無しさん
2007/02/07(水) 19:26:31914じゃないが書いてみた。
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文が使用者に直接見えてるところと
文を文字列で書かないといけないのが嫌だなあ。
0927925
2007/02/07(水) 19:55:580928デフォルトの名無しさん
2007/02/07(水) 20:19:47せっかくだから簡単に結論キボンヌ。
つーかこんなプロパティ気にしたことも無かったw
availableのサイズならreadExactしてもblockingしないことが保証されてるのかな?
0929925
2007/02/07(水) 21:32:49availableの結果はストリームの種類によって実装が違うみたいだけど、(当たり前?)
大体は (そのストリームの全体のサイズ - 現在位置) みたい。
実装できないストリーム(ソケットとか)は0を返すみたいです。
0930デフォルトの名無しさん
2007/02/07(水) 21:56:24ドキュメントは"現在すぐに読みとれるバイト数を返します。 "だけかぁ。
0は特別扱いとも書いてないし、
つまり「今すぐ全部読めます!」か「全く読めません!」な実装しかないんかい!
ソケットこそ有意な値(受信バッファに溜まってるデータサイズとか)返すべきだと思うけど……
まぁいいや。解説どもでした。
0931デフォルトの名無しさん
2007/02/07(水) 23:03:53BlowfishをDに移植してみたけど、いやはや、すごいね。
必要なコード量が少ないし、GCのおかげでメモリ管理とか省けるし。
0932デフォルトの名無しさん
2007/02/07(水) 23:17:520933デフォルトの名無しさん
2007/02/07(水) 23:20:440934デフォルトの名無しさん
2007/02/07(水) 23:28:570935デフォルトの名無しさん
2007/02/07(水) 23:38:06言語仕様ではデレデレ。
0936デフォルトの名無しさん
2007/02/08(木) 00:04:190937デフォルトの名無しさん
2007/02/08(木) 00:48:29D言語はGC、型安全、構造化例外にオブジェクト指向にメタプログラミングまでサポート。
思うようにすらすら書けて、なお生成されるのは軽量なネイティブexe、とどめにコンパイル爆速。
代わりにphobosの設計改善ほったらかしたり、
外部プログラムにまで平然とUTF-8で話しかけたり、
配列リテラルの仕様が何か変だったり、
連想配列のリテラルをついおねだりしちゃったり。
全く、変な趣味に目覚めてしまったらどうしてくれるんだWalter。
0938デフォルトの名無しさん
2007/02/08(木) 01:21:43ウォルタータンが独自にDeimosとか、
現在のPhobosを旧Phobosとした新Phobosでも作るかした方が良いよ
0939デフォルトの名無しさん
2007/02/08(木) 01:27:570940デフォルトの名無しさん
2007/02/08(木) 01:54:350941デフォルトの名無しさん
2007/02/08(木) 02:57:05これワロタ
0942デフォルトの名無しさん
2007/02/08(木) 03:19:07alias printf("[%s:%d] %.*s", __FILE__, __LINE__, ..) print_debug;
print_debug("hoge"); // -> printf("[%s:%d] %.*s", __FILE__, __LINE__, "hoge")
え?C?ナニソレ
ていうか__LINE__とか__FILE__ってのぁプリプロセッサがなくなった今、98%くらい使われてないんじゃねーの。
かと言ってプリプロセッサ自体はいらんし・・・
ってわけで。言語レベルでboostのbind(?)みたいなこと出来たら嬉しいなと。
0943デフォルトの名無しさん
2007/02/08(木) 08:05:16mainをルートに呼び出し元の位置や関数名を辿ってデバッグしたい
0944デフォルトの名無しさん
2007/02/08(木) 10:32:29もーちょっとこう、拡張可能というか、
assert以外で落ちた時、全然発生場所が分からんというか。
デバッグ時には詳細なスタックトレース出すのを標準化してくれれば最高なんだが。
>>563とかの有志によるハックはまだ動くのだろうか。
0945デフォルトの名無しさん
2007/02/08(木) 14:08:570946デフォルトの名無しさん
2007/02/08(木) 16:43:310947デフォルトの名無しさん
2007/02/08(木) 17:13:46C/C++での話だけど、俺は標準のassertとは別に
リリース版用の自作assertでエラー処理の一部をやってる。
あまくで一部であって、全部をそれでやろうとするのはナンセンスだと思う。
0948デフォルトの名無しさん
2007/02/08(木) 18:16:140949デフォルトの名無しさん
2007/02/08(木) 18:41:26import 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がウザイなぁしかも()がいる辺り文法破綻気味な気が。
0950デフォルトの名無しさん
2007/02/08(木) 19:37:01をDに移植してみればいいかも。
0951デフォルトの名無しさん
2007/02/08(木) 21:02:11アレは「表明」であって、実行可能なコードによるドキュメンテーションなんだ。
このcreateHogeObj()はnullを返すことはありません、みたいに使うんだ。
alertみたいな警告っぽいニュアンスは無いんだ。
サポートの仕方がショボすぎる言語ばっかだけど……。
in/outに書いたassertとか、
自動生成されたドキュメントに出てくるようにすべきだと思うんだよね……
dmdの-Dオプションしか試してないけど。
0952デフォルトの名無しさん
2007/02/08(木) 21:21:10テンプレート版を作ってみた。
ttp://midon3.hp.infoseek.co.jp/metastr.zip
0953デフォルトの名無しさん
2007/02/08(木) 22:50:03でも、テーブルにしないほうがいいんじゃない?
0954デフォルトの名無しさん
2007/02/08(木) 23:02:14あ、俺も今そう思う
0955886
2007/02/08(木) 23:26:44言い出しっぺの俺がこんな事言うのも、非常にアレなのだけども。
普通にDでXML->Dのトランスレータ書いて
ビルドプロセスに組み込んだりした方が遙かにシンプルだなぁ、と今は思う。
むしろDコンパイラにプラグイン機構を盛り込むとかすれば
もっとスマートに>>886出来て面白そうだなーとか妄想したりして。
ん? .NetのXAMLとかって、ひょっとしてそういう技術なんだろうか。
でもそのコードはそれはそれで乙。
0956デフォルトの名無しさん
2007/02/09(金) 00:53:49こんなんじゃ言語使用互換コンパイラなんてできないだろうなwwwwww
0957デフォルトの名無しさん
2007/02/09(金) 00:56:210958デフォルトの名無しさん
2007/02/09(金) 00:57:33そんなの要らんだろう、当面は。
0959デフォルトの名無しさん
2007/02/09(金) 01:06:37alias bool bit;
なくせよう
0960デフォルトの名無しさん
2007/02/09(金) 01:39:030961デフォルトの名無しさん
2007/02/09(金) 01:56:160962デフォルトの名無しさん
2007/02/09(金) 02:25:490963デフォルトの名無しさん
2007/02/09(金) 02:28:59これからはinpo
0964デフォルトの名無しさん
2007/02/09(金) 02:37:29・現在のdeprecated指定消滅。
・というか、Phobos消滅
・ついでにchar, wchar, dchar消滅
ってかんじか?いきなり消滅もなんだから、deprecatedでもつけるのがいいか?
0965デフォルトの名無しさん
2007/02/09(金) 03:08:40ぼけーっと眺めるの好きだからPhobosはバージョンアップ繰り返して残しておいて欲しいな
0966デフォルトの名無しさん
2007/02/09(金) 07:49:01ふと気になってdmd/src/phobs/std以下をgrep "body"してみたら約100個。
もったいないよな、これ……。
文字列の扱いに関しては、なんだか意見が分散してそうだな。
俺はとてもStringクラス化して欲しい。
D言語は「1文字」の実装を外に露出しすぎな感じ。
0967デフォルトの名無しさん
2007/02/09(金) 11:52:180968デフォルトの名無しさん
2007/02/09(金) 13:04:05文字列リテラルに c,w,dとかの
postfixが必要なのがちょっと面倒。
後、startsWithやendsWithでlengthプロパティそのまま使ってるので
内部の文字表現と引数の型が違った場合に正常動作しない.
0969デフォルトの名無しさん
2007/02/09(金) 15:25:25てか、クラスにする利点が分からん。
文字の配列のなにがいかんの。
0970デフォルトの名無しさん
2007/02/09(金) 15:54:19外側の環境の文字をStringとして抽象化することを考えた場合、
D言語内の基本的な文字(列)型もStringとすると、プログラムと
外側の環境との境界をあまり意識する必要がなくなる、という
のが利点なのかな。
外側の環境といったって、単一プログラム内で複数の異なる
文字コードに触れる場合もあるから、そこで結局エンコード
指定するなら(|w|d)charを変換するのと変わらん気もするけど。
今は文字列をコンパイル時定数として扱えるけど、文字列をクラスにする場合は、
コンパイル時クラスインスタンス定数というようなものを導入して、
それをテンプレートの値引数として使えるようになるのかなあ。
でも、テンプレートであーだこーだする場合に、文字コードが型固定じゃないと
できることが減りそう。別の文字が同一文字とみなされるとか、そういういざこざ
を持ち込むことになりそうだし。
それとも、文字コードは今までどおり決めうちで、なんかとりあえずStringクラス
として抽象化しよう、ということなのかな。そうすると利点は分からん。
0971デフォルトの名無しさん
2007/02/09(金) 16:12:59表明はリリース時にも残しておくべきものであり消すのは論外
って話だと思うんで消えなきゃいいんじゃないかね?
0972デフォルトの名無しさん
2007/02/09(金) 16:21:16もしかしてそういうものを実装することを想定したものなのかな。
なんかをDコードに変換するというよりは、Dコード以外のテキストに
埋め込まれたDコードをごにょごにょしたテキストを生成する、というような。
0973デフォルトの名無しさん
2007/02/09(金) 19:00:510974デフォルトの名無しさん
2007/02/09(金) 19:26:48ttp://www.vim.org/scripts/script.php?script_id=379
0975952
2007/02/09(金) 21:46:00で、これでなんか作ろうと思ったけど、テンプレートの仕様が貧弱すぎて
できんかった。(泣)結局無駄骨です。
スレ汚してすいません。
0976デフォルトの名無しさん
2007/02/09(金) 22:07:26class A {
this(int x = 0) { m_x = x; }
private int m_x;
}
void main() {
A a = new A;
writefln(a.m_x);
}
これが通っちゃうんだけど、いいのか?
0977デフォルトの名無しさん
2007/02/09(金) 22:08:41何か問題ある。特に問題ないと思うが?
0978デフォルトの名無しさん
2007/02/09(金) 22:16:210979デフォルトの名無しさん
2007/02/09(金) 22:31:230980デフォルトの名無しさん
2007/02/09(金) 22:53:48なるほど。了解。
0981デフォルトの名無しさん
2007/02/10(土) 00:37:53ASCII圏の人々が、自分でも知らないうちに多言語対応してた、て事を実現したい。
何気なく文字列を扱おうと思ったとき、多分誰だって自然とchar型を選択するだろうと思うんですよ。
テキストエディタみたいな文字列処理特化アプリを書こう!と意気込んでる時でもない限り。
で、特にASCII圏の人は、単純に「2文字目を取り出したい」と思ったら、自然とstr[1]と書くわけですよ。
これが「1バイト目」へのアクセスに過ぎないとたとえ知っていても、それ考えるのは後にして、とか思って。
つーかウチら日本人でも書きたいですよ。こんな当たり前のコード。
んでお約束として、後になったって書き直される事なくリリースされるわけですよ。
当然strに"あいう"って入ったら速攻Error: 4invalide UTF-8 sequence。関係ないけどこの4て何だろ。
最初からstrがオブジェクトなら、str[1]は”2文字目”、str.lengthも”文字数”に抽象化できる。
UTF-8が文字列の基礎というDの現状を考えると、クラス化して生のバイト列を隠蔽してやるべきだと思う。
0982デフォルトの名無しさん
2007/02/10(土) 00:54:422バイト文字対応なchar型が出ると涙が出てくるのに。
0983デフォルトの名無しさん
2007/02/10(土) 01:07:130984デフォルトの名無しさん
2007/02/10(土) 01:11:39wcharとかdcharとかじゃだめなのか?
0985デフォルトの名無しさん
2007/02/10(土) 01:11:46http://pc10.2ch.net/test/read.cgi/tech/1171037394/
0986デフォルトの名無しさん
2007/02/10(土) 01:14:18C++のvectorみたいなのも標準じゃないし、
C++より劣っているね。
0987デフォルトの名無しさん
2007/02/10(土) 01:14:43foo = 2; // foo(2); になる
プロパティじゃなくてもこうなるんだけど、
正直これってどうなんだろうな。
0988デフォルトの名無しさん
2007/02/10(土) 01:33:110989デフォルトの名無しさん
2007/02/10(土) 01:37:59ってか、char廃止とかしたらおもしろそうなんだけど。
0990デフォルトの名無しさん
2007/02/10(土) 03:12:30template 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)));
}
うーむ。タプルが必要になるのはあまりエレガントではないなあ。
0991デフォルトの名無しさん
2007/02/10(土) 07:05:550992デフォルトの名無しさん
2007/02/10(土) 15:06:370993デフォルトの名無しさん
2007/02/10(土) 15:29:040.21のままだけどね
0994デフォルトの名無しさん
2007/02/10(土) 15:33:060995デフォルトの名無しさん
2007/02/10(土) 20:21:38void 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
0996995
2007/02/10(土) 20:39:51void read(out char[] s)が呼ばれて鯖から返って来た"HTTP/1.1 200 OK"のHTTPが
長さ0x80848472と認識されてメモリを確保しにいってたのか orz
0997デフォルトの名無しさん
2007/02/11(日) 01:00:22次
http://pc10.2ch.net/test/read.cgi/tech/1171037394/
0998デフォルトの名無しさん
2007/02/11(日) 01:00:41次
http://pc10.2ch.net/test/read.cgi/tech/1171037394/
0999デフォルトの名無しさん
2007/02/11(日) 01:01:56次
http://pc10.2ch.net/test/read.cgi/tech/1171037394/
1000デフォルトの名無しさん
2007/02/11(日) 01:02:29http://pc10.2ch.net/test/read.cgi/tech/1171037394/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。