トップページ⇒tech
1001コメント293KB

D言語 Part10

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2006/09/12(火) 07:25:50
プログラミング言語 D について語るスレッドです。
過去スレは >>2

■本家
ttp://www.digitalmars.com/d/
ttp://www.kmonos.net/alang/d/ (和訳)

■コンパイラ
ttp://www.digitalmars.com/d/dcompiler.html (DMD, 本家)
ttp://dgcc.sourceforge.net/ (GDC, gccフロントエンド)
ttp://gdcmac.sourceforge.net/ (GDCのmac用バイナリ)

■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://dsource.org/ (dsource)
0002デフォルトの名無しさん2006/09/12(火) 07:28:29
■過去スレ
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/09/12(火) 07:31:19
日テレはルパンにひどいことをしたよね(´・ω・`)
0004デフォルトの名無しさん2006/09/12(火) 07:37:28
C/C++ Java C# の反省点を踏まえて良いとこ取りした
ネイティブコンパイラというところは嬉しいけど
FrameWorkやIDEがまだ準備不足感があります

言語仕様を煮詰めなおしたり設計し直すと言った話も重要ですが
最近の開発スタイルからするとFrameWorkの拡充が急務であって
後者を優先しつつ(手遅れにならないように)前者についても
細かいところが改善されていくことを願います
0005デフォルトの名無しさん2006/09/12(火) 19:52:41
>>1
乙
0006デフォルトの名無しさん2006/09/12(火) 21:53:55
>>4
先ず、それを英語で云えるようになってから発言してね
0007デフォルトの名無しさん2006/09/12(火) 23:30:28
・build (D言語用ビルドツール)
ttp://www.dsource.org/projects/build/
自動的にインポート関係を調べてコンパイル/リンクしてくれるツール。
ソースに、特定のpragma文を記述することで、コンパイル/リンクの制御ができる。

・Windows API (WindowsAPI用のヘッダファイル群)
ttp://www.prowiki.org/wiki4d/wiki.cgi?WindowsAPI
現在も進行中のプロジェクト。 最新バージョンは、
ttp://www.dsource.org/projects/bindings/browser/trunk/win32
ページの一番下、「Zip Archive」の部分からダウンロードできる。
0008デフォルトの名無しさん2006/09/12(火) 23:37:50
木構造のリスト表現 を言語ネイティブにサポートして欲しいです
0009デフォルトの名無しさん2006/09/13(水) 00:45:35
>>8
まずは言語に組み込むメリットとライブラリでは何故いけないのかを述べよ。
0010デフォルトの名無しさん2006/09/13(水) 06:31:53
まずは誰がどこで「いけない」と言ったのかを述べよ。
0011デフォルトの名無しさん2006/09/13(水) 06:59:06
>>10
ライブラリで良いならライブラリ組めよ。
0012デフォルトの名無しさん2006/09/13(水) 08:44:20
そうだそうだ。米は自分で育てろ。家は自分で建てろ。
0013デフォルトの名無しさん2006/09/13(水) 09:14:16
標準ライブラリでサポート、ではなく、あえて言語でサポートして
ほしいという理由を訊ねられているんだろうから、12は的外れだな。
0014デフォルトの名無しさん2006/09/13(水) 12:25:03
「ライブラリ組めよ」っていう返しに対する反応だから、12は妥当だな。
0015デフォルトの名無しさん2006/09/13(水) 12:44:55
>>14
おまえ馬鹿だろ 行間読めよ
誰と誰の主張が同じかまとめてみよう

8:「言語ネイティブを希望」
9=10:「ライブラリで充分」
11=12:「ライブラリ組めよ」

こういう流れなんだから
11と12の意見がいかに的外れか分かるだろ
そうでなければ「言語ネイティブ」の意味を分かってない馬鹿
0016デフォルトの名無しさん2006/09/13(水) 12:46:18
コンパイル時に初期化とかされるなら組み込んでもいいと思うけどね。
0017デフォルトの名無しさん2006/09/13(水) 13:01:11
>>15
事実的にも比喩的にも、11に「行間」はない。
0018デフォルトの名無しさん2006/09/13(水) 13:19:12
>木構造のリスト表現
なんてライブラリで十分
しかも自分で組める程度のもの
人に希望してる暇があるなら、自分で書いたほうが早い
それともこの程度のこともできないような低能ですか
あー、そうですか
0019デフォルトの名無しさん2006/09/13(水) 13:23:15
興奮するのはいいけど、それでやってるのがテーマのすげ替えなのが救えない。
0020デフォルトの名無しさん2006/09/13(水) 14:35:36
      |
      |
      |    こうですか!?わかりません!
      |
     J
0021デフォルトの名無しさん2006/09/13(水) 14:48:43
9=10とか11=12とか言ってるから、>20の言うとおりだろう。
>8は、基地外は放置してお話を再開していいよ。

単に標準ライブラリに追加でもいいならそう言い直しとけばOK。
そうじゃないなら追加の説明すれば問題なし。
0022デフォルトの名無しさん2006/09/13(水) 15:25:21
8ですが、標準ライブラリに追加でも良いですよ。

言語ネイティブでの表現なら、

(初期化)
any a[@] = [ "a", 'b', 123, [ "d", e ], [ "f": "f", "g": g, "h": 234] ];

[ "f": "f", "g": g, "h": 234]は、map-list表現(連想配列と言えば良い?)

(アクセス)
a[2] => 123
a[3] => [ "d", e ]
a[4]["h"] => 234

* typeof 演算子が必要になっちゃいますけどね。


標準ライブラリでの表現なら、

(初期化)
any_list a = new any_list( "a", 'b', 123, new any_list( "d", e ), new any_maplist( "f": "f", "g": g, "h": 234) );

(アクセス)
a.get(2) => 123
a.get(3) => [ "d", e ]
a.get(4).get("h") => 234

なんて書き方になるのかな?
0023デフォルトの名無しさん2006/09/13(水) 15:32:01
それのどこが木構造なんだ?
0024デフォルトの名無しさん2006/09/13(水) 15:36:10
せっかくの新スレなのに相手してて良いの?
0025デフォルトの名無しさん2006/09/13(水) 15:46:59
>>23
木構造のリスト表現 って一般用語だと思ってたのですが、一々説明しなきゃいけないのですか?
0026デフォルトの名無しさん2006/09/13(水) 16:20:49
>>22
代入だけ書いて、木構造だとわかれよ!は無理ありすぎ。
0027デフォルトの名無しさん2006/09/13(水) 16:23:46
>>25
それって、JavaScriptのArrayオブジェクトみたなやつですよね?
格納するデータの型に、制約の無い配列。

もしライブラリにするして・・・
どんな型でも返せる関数ってD言語でどう書くんですか? 教えてD言語のエロイ人。
0028デフォルトの名無しさん2006/09/13(水) 16:45:31
全てのクラスがObjectから派生してるんじゃなかったっけ?
0029デフォルトの名無しさん2006/09/13(水) 16:53:15
Boxに突っ込む
0030デフォルトの名無しさん2006/09/13(水) 16:55:23
22の説明は、いまいちなにを望んでるのか分かりかねると思う。

木構造のリスト表現、という言葉にその言葉以上の意味がなければ
ただのCompositeパターンで済む話だと思うんだが。
念のため"木構造のリスト表現"でぐぐったが、全13件中1件しか表示
されない、といった具合だったよ。

そうじゃなくて、基本データ型まで含めた任意の型のデータを突っ込めて、
なおかつ実行時に型一致をチェックするような型を仕様に含めてくれ、
という話なんだろうか。
そうすると木構造のリスト表現云々とは本質的に別の話だよな。

はたまた単に構文が欲しいだけなのか。Lisp周辺のようにリストを扱うのに
便利な関数群を実装して欲しいのか。なにを望んでるんだろう。
0031デフォルトの名無しさん2006/09/13(水) 16:57:54
>>25
Objectの配列にしかみえねぇじゃん。
0032デフォルトの名無しさん2006/09/13(水) 17:06:51
辞書順 binary-tree を表現するのに

[[['abc'],['def']],[['uvw'],['xyz']]]

みたいなことをしたいんじゃなかろうまいか
0033デフォルトの名無しさん2006/09/13(水) 17:10:13
>Lisp周辺のようにリストを扱うのに便利な関数群を実装して欲しいのか。

それだ!
0034デフォルトの名無しさん2006/09/13(水) 17:12:54
>>33

木構造関係ないやん・・・。
0035デフォルトの名無しさん2006/09/13(水) 17:32:09
新スレ立って早々これかよ。┐(´ー`)┌
00368,22じゃないけど2006/09/13(水) 17:38:04
AVLn分探索木クラスほしーなー
0037デフォルトの名無しさん2006/09/13(水) 18:03:10
>>7
GJ!!
0038デフォルトの名無しさん2006/09/13(水) 21:53:49
いい加減ネタにつられるのはやめにして
まともな話題を投下してくれ
0039デフォルトの名無しさん2006/09/13(水) 22:07:04
よろしく
0040デフォルトの名無しさん2006/09/13(水) 22:37:28
みなさん私のことも忘れないでね
つ hash table
0041デフォルトの名無しさん2006/09/13(水) 22:45:59
M$に見向きもされない件について
0042デフォルトの名無しさん2006/09/13(水) 23:37:04
見向きされたらもう終わり
0043デフォルトの名無しさん2006/09/13(水) 23:44:36
Visual D.net













まぁ、visual族は basic c++ j++ って決まってたしな
0044デフォルトの名無しさん2006/09/14(木) 03:15:27
日本語でおk
0045デフォルトの名無しさん2006/09/14(木) 03:48:47
(゚д゚) ← M$
0046デフォルトの名無しさん2006/09/14(木) 03:53:42
ここは Borland に頑張ってもらって Turbo D を出して欲しい。
せっかくのネイティブコンパイラなんだから
.NET 環境が無くても動作することが必須だけど。
0047デフォルトの名無しさん2006/09/14(木) 06:20:17
多分、中途半端に機能をVC辺りに盛り込まれて終わりじゃないかな
0048デフォルトの名無しさん2006/09/14(木) 10:41:15
lazyってすっげえ便利だな。
void hoge( lazy uint tgt ); に
hoge( timeGetTime() );
ってしてから気付いた。
0049デフォルトの名無しさん2006/09/14(木) 11:12:47
なんでこんな複雑になってしもうたん?
0050デフォルトの名無しさん2006/09/14(木) 11:22:41
またそれか ウゼ
0051デフォルトの名無しさん2006/09/14(木) 12:01:59
どこがふくざつなんだ?
0052デフォルトの名無しさん2006/09/14(木) 12:17:15
複雑なのではなくて>>49が脳足りんなだけだろ
0053デフォルトの名無しさん2006/09/14(木) 13:40:34
しばらく見てないうちに遅延評価まで導入されたのか?
何から何まで導入するんだな。
0054デフォルトの名無しさん2006/09/14(木) 14:14:16
lazyってコードを読みにくくするだけじゃない?
呼び出し側は普通の値渡しとおなじ構文だし。
0055デフォルトの名無しさん2006/09/14(木) 14:50:45
呼び出し側にも lazy って付けるべきだな。
0056デフォルトの名無しさん2006/09/14(木) 15:18:12
複雑だな
0057デフォルトの名無しさん2006/09/14(木) 16:28:31
呼び出し側からは、特に意識する必要はないと思うけど。
0058デフォルトの名無しさん2006/09/14(木) 19:34:49
逆だろ…。なんだこの仕様。
手続きの副作用を認識出来るのは関数を使う側、つまり呼び出し側だろ。

もはや、ある式が必ず実行されるかすら、保証されなくなる。
当然、その分プログラマの神経を削る種が増えるわけだ。

Haskell見て興奮した口なんだろうけど、それとこれは場合が違いすぎるわけで…。
0059デフォルトの名無しさん2006/09/14(木) 19:42:49
auto みたいに、両方に書くべきだろうな
0060デフォルトの名無しさん2006/09/14(木) 19:43:17
>>58
仮に、同じ考えの人が居た場合は
newsgroupで、そういう意見が出てるんじゃないの?
0061デフォルトの名無しさん2006/09/14(木) 19:48:43
λ式使えばいいだけに見えるんだけどね。
0062デフォルトの名無しさん2006/09/14(木) 20:05:52
>>58
必ず実行したい式をそこに書きいれるのはどうかと思う。
それに、関数の作用も分からずに使うわけ?
その関数の作用が分かればそれが遅延評価だって事にもすぐ気付くだろうに。

でも実際は delegate だけで十分だよな・・・。
lazyってなんのためにあるんだろうか。

「実用的」な言語なら少しの簡単さを生む代わりにバグを生みやすくする必要は無かったと思う。
0063デフォルトの名無しさん2006/09/14(木) 20:12:17
lazyがないとexpを{return exp;}と書く必要があるけど
そういう、決まりきった事をコードに書くのは微妙にストレスを感じる。
そういう意味でD言語の何でもかんでも言語に追加するという思想は俺は好きだな。
0064582006/09/14(木) 20:17:04
s/手続き/式/

>>62
ということは、気づかなくてはならない、ってことでは?
それだけでドキュメント必須になり、過去に使った関数さえ記憶の状態によっては過ちを犯す事がありえる。
遅延評価を言語要素として持っている限り、いかなる場所でのいかなる式が
遅延評価されてしまう可能性があるわけで。
ひょっとしたら、必ず実行されることが必要かも分からない、副作用のある式が遅延評価されてしまうかも知れない。
0065デフォルトの名無しさん2006/09/14(木) 20:27:09
今日からこのスレは

          D言語の感想を言い合い罵倒するスレ part10


になりました
引き続きお楽しみください ...
0066デフォルトの名無しさん2006/09/14(木) 20:34:13
「罵倒」が見当たらない件。
0067デフォルトの名無しさん2006/09/14(木) 20:39:37
>ということは、気づかなくてはならない、ってことでは?
>それだけでドキュメント必須になり、過去に使った関数さえ記憶の状態によっては過ちを犯す事がありえる。

それは、lazyに限ったことじゃないよね。だんだん的が外れてきてる。

要するに、評価されたりされなかったりすることがあるから、
間違いがあったときに、わかりにくいってのが問題なんでしょ。
0068デフォルトの名無しさん2006/09/14(木) 20:50:20
>>67
元々俺が問題にしていることは、最初のレスの通り
この言語要素がプログラマの負担になるということなんだが。

lazyに限った、限らないの話ではない。
それが確実にプログラマにメリットよりも大きなデメリットをもたらすと言いたかっただけ。
0069デフォルトの名無しさん2006/09/14(木) 21:01:01
>>68
lazyに限らんいまさらな話だから
 > メリットよりも大きなデメリット
なんて大げさなものじゃないだろ、
という話じゃないかな。
0070デフォルトの名無しさん2006/09/14(木) 21:06:00
なるほど。そのメリットに対するデメリットの大きさが伝わらなかったのなら、俺の力不足だな。
出直してくる。
0071デフォルトの名無しさん2006/09/14(木) 21:45:25
俺ずっとlazyたんのこと好きだったのに>>58みたいに思ってた(´・ω・`)
けど>>57のおかげでlazyたんのことが少しわかった気がした(`・ω・´)

呼び出し側から「遅延評価されること」を意識する必要がない状況を考えてみたら、少なくとも、
関数の引数を除く、すべての環境(いわゆるクロージャが持ち運べる環境の意味での環境)
に影響を受けない/与えないような関数なら>>57の言うとおりだと思った

逆に、 void hoge(lazy uint tgt) { ... } がメンバ関数であってメンバ変数を書き換える関数だったり、
コンソールに文字を出力する関数だったら>>57の言うことは成り立たないと思った
0072デフォルトの名無しさん2006/09/14(木) 22:22:37
少なくとも、現時点では環境を束縛できないので、どのみちたいした問題ではないという考え方もある。
0073デフォルトの名無しさん2006/09/15(金) 08:31:43
ま、なんだかんだ言ってもそれなりに使いこなせるだろ
このスレの住人ならさ
0074デフォルトの名無しさん2006/09/15(金) 08:45:05
>>68
夢板はID制じゃねーでげすよぉおおおおお。
最初のレスなんてわからんでごじぇーますよ、お代官様。
0075デフォルトの名無しさん2006/09/15(金) 15:29:49
lazy って void 初期化子と同程度の重要性だと思ってた。
だって遅延評価って、ある条件下で評価しない代わりに高速化を望める仕様なんでしょ?
他に使い道があろうが、他の使い道はあんまり推奨してないんでは?
0076デフォルトの名無しさん2006/09/15(金) 15:33:28
Dの遅延評価って高速化の効能あるの?
0077デフォルトの名無しさん2006/09/15(金) 15:36:10
本家行って嫁
0078デフォルトの名無しさん2006/09/15(金) 15:41:06
大分前にLunaがDで使えないか、って言ってた奴居たけど、今公開されてる簡易版ならC用だから、割と楽に動かせるっぽい。
全然流れと関係なくてすまん。
0079デフォルトの名無しさん2006/09/15(金) 15:41:37
本来匿名デリゲートで書く構文を簡略化しただけであって
高速化は関係ないでしょ
0080デフォルトの名無しさん2006/09/15(金) 15:45:57
俺としては速度の向上よりも必要に応じて評価を意図的に行わないのが利点だな。
&&とか||とか?:の利点と同じ。
0081デフォルトの名無しさん2006/09/15(金) 15:48:32
「それを英語で言ってこい」スレ
0082デフォルトの名無しさん2006/09/15(金) 15:48:47
ようはつかいよう


0083デフォルトの名無しさん2006/09/15(金) 17:01:19
>>77
反語のつもりですた
ないよねぇ
0084デフォルトの名無しさん2006/09/15(金) 18:06:51
>>83
え?無いの?
本家では「パフォーマンスの向上に繋がる」ってあるけど
0085デフォルトの名無しさん2006/09/15(金) 18:20:13
速度の向上ってのは遅延評価によって無駄な
評価を行わないことによる速度の向上のことであって、
べつにdelegate渡しが高速にできるとか、そういういみじゃないぞ。
だいぶ勘違いしているようだけど。
0086デフォルトの名無しさん2006/09/15(金) 18:46:33
マシン語上では
int manko(Chinko chn) {
 if(todayIsKikenDay()) {
  if(c.isHohke) return 0;
  return c.siggeki();
 }
}

manko((Chinko) createHuman("俺", SEX_NEWHALF).bodyParts.getParts("ちんこ"));

↑これが、

int manko() {
 if(todayIsKikenDay()) {
  Chinko c = (Chinko) createHuman("俺", SEX_NEWHALF).bodyParts.getParts("ちんこ");
  if(c.isHohke) return 0;
  return c.siggeki();
 }
}

manko();

こんな感じになるんぢゃない?
スコープとかスレッドとか考えるとこんな簡単じゃないのかも知れない。
0087デフォルトの名無しさん2006/09/15(金) 18:48:03
>だって遅延評価って、ある条件下で評価しない代わりに高速化を望める仕様なんでしょ?
遅延評価とはある条件下で評価をしないことによって高速化を望む手法なんだよ。
0088デフォルトの名無しさん2006/09/15(金) 20:09:06
ある条件下というか、必要になるまで評価しないので、必要にならない場合は評価されない。
0089デフォルトの名無しさん2006/09/15(金) 21:16:14
「ある条件で評価しない」
「条件来るまで評価しない、条件来なきゃ評価されない」

使用意図っつーか視点が違うだけで2つとも同じ主張に見える。
0090デフォルトの名無しさん2006/09/15(金) 22:31:17

lazyな引数が渡された場合、
その関数内で(引数が)最初に評価される式が現れるまで、評価はされない。

というだけの話を、何でややこしく書くんだろう。
0091デフォルトの名無しさん2006/09/15(金) 22:57:20
遅延評価は速度的な問題よりは、
遅延評価する事により簡潔に書けることがある
という点の方が重要なんじゃないの?
0092デフォルトの名無しさん2006/09/15(金) 23:36:28
lazy使ったこと無いからこのスレで交わされてる内容から推測するんだけど

なんだかlazyって論理型言語の推論機構っぽいですね
0093デフォルトの名無しさん2006/09/16(土) 01:13:39
>>92
その発言が何を生むのか分からない。教えてエロイ人
0094デフォルトの名無しさん2006/09/16(土) 01:39:48
>>92
遅延評価と推論機構ってなんか関係あんの?
0095デフォルトの名無しさん2006/09/16(土) 03:30:26
そんなことより >>92 はこのスレで交わされてる内容を読んでないと思う。
読んでれば普通に >>87 と >>90 だけでも lazy が遅延評価だって分かるぞ。
0096デフォルトの名無しさん2006/09/16(土) 08:17:38
>>92はlazyが遅延評価だとはわかってると思うぞ
遅延評価の何らかの性質が推論機構に似ていると言っているだけで
>>93-94はどういう性質が似ているの?という質問だと思う
で、どこがどう似ているのか教えてエロい人
0097デフォルトの名無しさん2006/09/16(土) 12:03:12
論理型プログラミング言語ってあれだろ、推論のための"⇒"の論理式を書いて勝手に推論させる奴だろ
俺の見た目で、lazyは「必要なときに必要なだけ実行される」ように見えたから、これは「必要な」という推論がされているように感じただけ



なんだが('A`)
0098デフォルトの名無しさん2006/09/16(土) 12:50:44
ttp://wpedia.search.goo.ne.jp/search/174829/%C3%D9%B1%E4%C9%BE%B2%C1/detail.html?mode=0
に、
>最大で一度しか計算されない事が保証されている。
ってあるけど、lazyは言語側でキャッシュしてくれるの?
0099デフォルトの名無しさん2006/09/16(土) 13:25:54
頭がlazyな奴が次々と引き寄せられてるね。
0100デフォルトの名無しさん2006/09/16(土) 13:29:49
>>98
してくれません。今のところ。

現在の実装では、単純にdelegateを呼んでるだけなので。

void func(lazy int i) { if (i == 0) ... }
というのは、
void func(int delegate() i) { if (i() == 0) ... }
って感じだから。
0101デフォルトの名無しさん2006/09/16(土) 14:00:05
実際の計算を値が必要になるまで行わない手法が遅延評価。
遅延評価は仕様じゃないし、lazy==遅延評価でもない。
関数の引数に対して遅延評価を行う手段の一つがdelegateで、その別表記がlazy。
0102デフォルトの名無しさん2006/09/16(土) 14:57:06
bool func1(lazy int i) { return (i == 0); }
bool func2(lazy int i) { return (i() == 0); }
これってどっちも可なんだ。
まあ確かにlazyって引数情報が知らされないからトーゼンなんだね。
0103デフォルトの名無しさん2006/09/16(土) 15:03:53
>>102
?
引数の無い関数の括弧を省略しただけでは?
0104デフォルトの名無しさん2006/09/16(土) 17:05:30
>>103
へっ?略できんの?シランカッタスマンカッタorz
0105デフォルトの名無しさん2006/09/16(土) 18:03:58
セッターは代入形式で書いてゲッターの括弧は省略しようだぜ
0106デフォルトの名無しさん2006/09/16(土) 18:57:02
雪駄と下駄?
0107デフォルトの名無しさん2006/09/16(土) 19:05:32
いや、もう1引数の関数は全部代入形式で行こう
char[80]buf;
gets = buf;
dout.writeLine = buf;
0108デフォルトの名無しさん2006/09/16(土) 19:13:17
gets = buf;
は
buf.gets();
で行こう
0109デフォルトの名無しさん2006/09/16(土) 20:27:18
やっぱり処理の責任の所在を考えて

  あ  き  ら  め  ろ
0110デフォルトの名無しさん2006/09/16(土) 21:16:01
>>109
なんのはなし?
0111デフォルトの名無しさん2006/09/17(日) 01:38:50
>>101
なんだdelegateなのか
0112デフォルトの名無しさん2006/09/17(日) 04:22:11
>>111
なんだ知らなかったのか
0113デフォルトの名無しさん2006/09/17(日) 05:08:42
>>112
delegate(==lazy、>>101, >>112いわく)と遅延評価ってぜんぜん別物じゃん。
知らなかったって言われても。

Dのlazyはつまり、関数型言語の純粋な遅延評価とはまた違うわけね。
0114デフォルトの名無しさん2006/09/17(日) 08:31:30
拡張してそうなってんだから純粋ではない罠
0115デフォルトの名無しさん2006/09/17(日) 09:00:48
lazyってOrElseとAndOlseってことだろ?
0116デフォルトの名無しさん2006/09/17(日) 11:33:26
別物じゃないしょ?遅延評価をdelegate使って実現してるって話でそ。
でも、関数型言語に備わっているのと比べると形も違うし値をキャッシュしない等の不備もあるね。
0117デフォルトの名無しさん2006/09/17(日) 11:52:12
>>116
人はそれを別物と呼ぶ

”車はエンジンを使って動く”でしょ、だから車はエンジンなんだよ。
みたいな。
0118デフォルトの名無しさん2006/09/17(日) 11:58:01
バカか。お前それ言い方だけの問題だろ。

”車はエンジンを使って動く”でしょ、だから車はエンジンと関係してるんだよ。
みたいな。
0119デフォルトの名無しさん2006/09/17(日) 11:58:57
call by nameも遅延評価の一種だからD言語のlazyも遅延評価といえるんじゃね。
0120デフォルトの名無しさん2006/09/17(日) 12:12:51
>>118
釣りじゃないと思うから

(´д`)言い方で全てが決まるんだよボケ
0121デフォルトの名無しさん2006/09/17(日) 12:17:19
遅延評価をWikipedia
0122デフォルトの名無しさん2006/09/17(日) 12:29:39
・lazyをdelegateのシンタックスシュガー的なものとして見る
・lazyの実装に暫定的にdelegateを使っていて将来的には
 結果がキャッシュされるちゃんとした遅延評価になると思っている

の違いなんじゃないの?
0123デフォルトの名無しさん2006/09/17(日) 12:53:00
>>120
お前"の"バカな言い方で全てを決めるなボケ
0124デフォルトの名無しさん2006/09/17(日) 12:55:10
しかし、頑な宗教的思想を持った人間に関わるとろくなことが無いな。
0125デフォルトの名無しさん2006/09/17(日) 14:58:58
まぁお前の宗教に合わないだけなんだけどな。
0126デフォルトの名無しさん2006/09/17(日) 16:08:01
関数型言語マンセー
0127デフォルトの名無しさん2006/09/17(日) 16:17:40
 ・引数の式の値を評価するのが先か
 ・引数の式に関数を適用するのが先か
とは別に、
 ・式の値はキャッシュされるか否か
ということがある。

最初に出来の悪い比喩を始めた116は死刑でいいけど、
そいつを除いても、一言に遅延評価といってもいろいろ
あるってことを見失ってるやつがいるように思う。

おまけに、遅延評価である、というのはそれを言語がサポート
するかプログラマが実装するかなんてことは問わないしな。
0128デフォルトの名無しさん2006/09/17(日) 17:13:38
日本語でおk
0129デフォルトの名無しさん2006/09/17(日) 17:19:00
>>128
透明してるんで見えないのでてst
0130デフォルトの名無しさん2006/09/17(日) 17:22:01
これはひどい
0131デフォルトの名無しさん2006/09/17(日) 17:25:36
頭の悪い人たちだな。
純粋な遅延評価でないものを、遅延評価だなんて言うなってことだよ。
何も分かってない人を相手にするのはほんと疲れる。
0132デフォルトの名無しさん2006/09/17(日) 17:36:23
>>131
> 純粋な遅延評価でないものを、遅延評価だなんて言うな
お断りだ
0133デフォルトの名無しさん2006/09/17(日) 18:13:48
思い切って話に加わったら
瞬く間に自分の馬鹿が判明して整合性にてんやわんやみたいな。
0134デフォルトの名無しさん2006/09/17(日) 18:15:33
いつの間にかlazy⇔遅延評価になってるしな
遅延評価というモデルを使うのがlazyで把握?
0135デフォルトの名無しさん2006/09/17(日) 20:34:00
うんそう。
実際の計算を値が必要になるまで行わないこと(即ち遅延評価)は関数の引数に対しても
delegateを使えば今までも実現できてたけど、引数に渡す{ return 式; }の文をwrapしたいとかでlazyが出来た。

個人的には前バージョンのdelegateへの暗黙変換だけの方が良かったな。
delegateがlazy表記になっただけで誤解してる人がいっぱい湧いてきたし。
0136デフォルトの名無しさん2006/09/17(日) 21:30:09
Wikipediaにも
>遅延評価とは「計算機科学における手法の一つ」
>「評価しなければならない値が存在するとき、実際の計算を値が必要になるまで行わないこと」
って書いてあるな。
遅延評価は手法だそうだからそれを実装さえすれば「遅延評価」と呼べそうな気がするな。

それともこれが「純粋じゃない遅延評価」で、関数型言語における遅延評価が「純粋な遅延評価」とでもいうのかな?
計算機科学における遅延評価ありきで、それを関数型言語が採用しているみたいだけど。
0137デフォルトの名無しさん2006/09/17(日) 21:38:21
まぁ、工学には良く有る話だよな
0138デフォルトの名無しさん2006/09/17(日) 21:39:28
「純粋な遅延評価」ってのをまず聞いたことがないというのが何とも。
0139デフォルトの名無しさん2006/09/17(日) 23:16:48
頭が良すぎてこの太陽系第三惑星に同意してくれる人を見つけられない
孤独な>>131を馬鹿にするのはやめろ。
0140デフォルトの名無しさん2006/09/17(日) 23:33:38
釣られすぎかと
0141デフォルトの名無しさん2006/09/17(日) 23:37:23
目欄や縦読み等の仕込み無しでの後出し釣り宣言なんてそれこそ敗北宣言ジャマイカ。
0142デフォルトの名無しさん2006/09/17(日) 23:52:41
>>141
悪い、>>140はアホにいちいち構うのは止そうぜ、って意味
0143デフォルトの名無しさん2006/09/18(月) 05:42:57
delegate=遅延評価 ではないが、delegateは遅延評価的な物として扱えますよ。
でおk?
0144デフォルトの名無しさん2006/09/18(月) 06:51:14
遅延評価は副作用が無ければキャッシュ可能だけど
副作用があったらキャッシュ不可能ですよ。
0145デフォルトの名無しさん2006/09/18(月) 09:40:55
最近はモーターで動く車もあるけどな
0146デフォルトの名無しさん2006/09/18(月) 10:32:38
>>143
遅延評価はdelegateを使うと表現しやすくなる程度じゃないのか?
それだとやっぱり「delegateを使うと自動的に遅延評価ができる」になってしまうと思われ
0147デフォルトの名無しさん2006/09/18(月) 10:51:05
「delegateで関数の引数に対して遅延評価を実現することができますよ」だろ。
遅延評価的な物、って何やねん。
何で変な喩えにするのかなあ。
0148デフォルトの名無しさん2006/09/18(月) 13:26:37
死刑だって言ってるのにしゃしゃり出てくるし。
0149デフォルトの名無しさん2006/09/18(月) 14:01:26
>>127で死刑にしたかったのは116ではなくて>>118でした。
その節は116様につきましては大変申し訳ありませんでした。
0150デフォルトの名無しさん2006/09/18(月) 14:24:53
>>149=>>116
ご苦労さんw
0151デフォルトの名無しさん2006/09/18(月) 14:38:45
最終的には煽りに行き着く。
まぁ、根拠もなく調子こいてたことがこれだけ明らかになっちゃね。
0152デフォルトの名無しさん2006/09/18(月) 15:37:25
そうそう。
116の馬鹿さ加減がこうも明らかになっちゃね。
0153デフォルトの名無しさん2006/09/18(月) 16:49:57
やっぱ頭が良い人の猿真似レスは異次元だわ。
常人ではここまで浮くことはできない。
0154デフォルトの名無しさん2006/09/18(月) 19:46:19
Dって予約語多いね
0155デフォルトの名無しさん2006/09/18(月) 19:52:09
むしろ
「Dって遅延評価無いの?」
「っ (delegate|lazy)」
でおkじゃね?
0156デフォルトの名無しさん2006/09/18(月) 19:56:56
abstract alias align asm assert auto
bit body break byte
case cast catch cent char cfloat cdouble class const continue creal
dchar debug default delegate delete deprecated do double
else enum export extern
false final finally float for foreach function
goto
idouble ifloat if import in inout instance int interface invariant is ireal
long
mixin module
new null
out override
package pragma private protected public
real return
short static struct super switch synchronized
template this throw true try typedef typeid typeof
ubyte ucent uint ulong union unittest ushort
version viod volatile
wchar while with

まだあるかな?
0157デフォルトの名無しさん2006/09/18(月) 20:00:12
>>155
・遅延評価は手法である
・Dは遅延評価を仕様に定義している言語ではない

「Dって遅延評価無いの?」
「ない」

「Dって遅延評価実現できないの?」
「っ&& || ?: delegate lazy」
0158デフォルトの名無しさん2006/09/18(月) 20:06:25
>>155
まだやってんの?
目的は何なの?
0159デフォルトの名無しさん2006/09/18(月) 20:07:58
連想配列使ってキャッシュすればいいだろうに…
0160デフォルトの名無しさん2006/09/18(月) 20:14:25
>>159
それはmemoize
lazyとは別の最適化手法
0161デフォルトの名無しさん2006/09/18(月) 20:15:05
> ・Dは遅延評価を仕様に定義している言語ではない
脳内定義を広めようと必死だな
0162デフォルトの名無しさん2006/09/18(月) 20:25:25
>>161
確かにプログラマのの実装によって遅延評価は実現できるんだけど、
関数型言語が持っているような『純粋な遅延評価』なんてDにはありませんよ?

&& || ?: delegate lazy
↑を使って遅延評価を実現することは出来るけどこれらは遅延評価そのものではないよ。
0163デフォルトの名無しさん2006/09/18(月) 20:30:17
>>156
lazy, iftype, scope, on_scope_exit, on_scope_failure, on_scope_successが無い。
instanceは違うと思う。
あとbitの代わりにbool。
0164デフォルトの名無しさん2006/09/18(月) 20:32:16
>>163
on_scope_exit, on_scope_failure, on_scope_successは廃止にならなかった?
0165デフォルトの名無しさん2006/09/18(月) 20:35:32
>>164
deprecatedだけど、一応まだ予約語。
その名前の変数とかは定義できない。
0166デフォルトの名無しさん2006/09/18(月) 20:39:01
>>165
そうだったのか。知らなかった。

>>160
lazyとは違うけどlazy+連想配列を使ったキャッシュで関数型言語の遅延評価と同じになるっしょ?
0167デフォルトの名無しさん2006/09/18(月) 20:39:47
C++の文字列型みたいなもんでしょ
言語仕様に「これがD言語での遅延評価です」ってあるわけじゃないけど
実現はできるという

不毛な主張だと思うよ
「遅延評価」の定義を明確に曖昧なく決定したいなら
自分で細部まで考えてどこか標準化してくれそうな団体に勝手に提案なりしてください
既に標準仕様があるならそれを晒すだけでいいけど
「なるほどそうなんだね」で終わるから
0168デフォルトの名無しさん2006/09/18(月) 20:43:58
>>167
当然>>143>>155当てだよね?
0169デフォルトの名無しさん2006/09/18(月) 20:44:50
>>162
『純粋な遅延評価』って何?
何をもって純粋と呼ぶのか正確な定義を頼む。
0170デフォルトの名無しさん2006/09/18(月) 20:46:00
>>162
「純粋な遅延評価」って何ですか?
0171デフォルトの名無しさん2006/09/18(月) 20:46:17
>>169-170
知らない。
>>113と>>131に訊いて。
0172デフォルトの名無しさん2006/09/18(月) 20:47:15
>>162
お前の脳内定義は聞き飽きたから、その定義が
世の中一般の話では狭すぎるってことにはよ気付け。

遅延評価の話するたびに出てこられたらいちいちうざくてかなわん。
0173デフォルトの名無しさん2006/09/18(月) 20:53:40
>>168
ちがうよ
ずっとlazyを遅延評価と呼ぶことに過剰アンチ反応をしているヤツ
0174デフォルトの名無しさん2006/09/18(月) 20:55:17
>>172
わかった。
曰く世の中一般の話では狭すぎる定義解説はもうしない。
だがどんだけlazyが誤解されてたかもう一度スレを読み直せ。
まずはlazy==遅延評価でないってところから解説しなきゃならんひどい有様だったぞ。
0175デフォルトの名無しさん2006/09/18(月) 20:59:58
(´・ω・`)つ旦~

何だかよく分からないけど
コカ・コーラ(ホット)置いときますね
0176デフォルトの名無しさん2006/09/18(月) 21:01:21
というかさ、あるプログラミング言語における遅延評価を念頭に置きすぎてるな。
0177デフォルトの名無しさん2006/09/18(月) 21:12:52
> lazy==遅延評価でない
まだ言ってるよこの人
0178デフォルトの名無しさん2006/09/18(月) 21:27:23
ここまで頑なに主張するのは余程の理由があるとみえる
まあ、lazyって便利だね。でいいんじゃないか?
0179デフォルトの名無しさん2006/09/18(月) 21:27:54
逆に頑なにlazyを遅延評価と呼びたい>>177はlazyにどんな定義付けをしているのだろう。
0180デフォルトの名無しさん2006/09/18(月) 21:29:57
ん…?
0181デフォルトの名無しさん2006/09/18(月) 21:30:12
Delegates would then be delegates and wouldn't accept lazy expressions. 
But lazy expressions could accept delegates.

http://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D&artnum=41633

0182デフォルトの名無しさん2006/09/18(月) 21:30:34
lazyは構文糖でしょ。
0183デフォルトの名無しさん2006/09/18(月) 21:32:01
○○言語の○○と違うから、Dの○○は○○ではない。

メチャクチャ理論ここに極まれりって感じだな。
0184デフォルトの名無しさん2006/09/18(月) 21:38:43
>>183
>>134-136
0185デフォルトの名無しさん2006/09/18(月) 21:54:06
仕様見りゃ
> Lazy 引数は関数が呼び出されるときに評価されるのではなく、
> 関数の中で引数が使われる時点で初めて評価されます。
って書いてある。

lazyキーワードを使うと、lazy引数になるから、遅延評価を行える。
lazy引数の評価は遅延評価。
D言語でのlazyっつーのは遅延評価の仕様のひとつ。

というのは日本人でなくてもみな承知しているんだが、
なぜかlazyは遅延評価じゃないと言い張るアホが一人いる。
いいかげん自分の定義を見直せって。
0186デフォルトの名無しさん2006/09/18(月) 22:05:11
>>185
「lazyで遅延評価が実現できる」は真だけど「lazyは遅延評価である」は偽だよね。

もし「lazyは遅延評価である」が真なら
lazyはdelegateの構文糖なわけだから「delegateが遅延評価である」も真になる。
delegateは機能が制限されたclosureなわけだから「closureが遅延評価である」も真になる。

でもclosureを備えたjavascriptとかrubyとかpythonみたいな言語が
「遅延評価を備えている」という風にいわれているのは今まで聴いたことがない。
0187デフォルトの名無しさん2006/09/18(月) 22:11:00
ああ、言葉遊びをしたいだけの馬鹿か。
言葉遊びは別のところでやってくれ不快だ。
0188デフォルトの名無しさん2006/09/18(月) 22:12:44
lazyは遅延評価の一つである
0189デフォルトの名無しさん2006/09/18(月) 22:15:06
>>185
>lazyキーワードを使うと、lazy引数になるから、遅延評価を行える。
>lazy引数の評価は遅延評価。
>D言語でのlazyっつーのは遅延評価の仕様のひとつ。
ここまでは当然承知してる。

>なぜかlazyは遅延評価じゃないと言い張る
問題はここだったのだがこれは漏れが>>134の認識だったからだ。

「lazy==遅延評価の仕様即ちlazy==遅延評価」という認識の人が漏れの認識を曲げられないのと同じで
漏れも「lazy==遅延評価の仕様即ちlazy==遅延評価」という人の認識を曲げられるわけが無い罠。

うん、憑物が落ちた。
これについては認識の問題だし水掛け論にしかならんよな。本当に不毛だった。
0190デフォルトの名無しさん2006/09/18(月) 22:18:09
コカコーラをソフトドリンクと定義する

コカコーラは飲物である
飲物は液体である
よって液体はソフトドリンクである☆
0191デフォルトの名無しさん2006/09/18(月) 22:27:20
AはBであるという言葉の意味を
A∈Bと解釈する人と
A≡Bと解釈する人の不毛な争い
0192デフォルトの名無しさん2006/09/18(月) 22:33:09
流れ読まずに質問

上でdelegateはclosureの制限がかかったもの
って書いてますけど具体的にはどういう違いがあるんですか?
0193デフォルトの名無しさん2006/09/18(月) 22:33:45
>>186
> lazyはdelegateの構文糖なわけだから
実装がdelegateだろうってだけで、delegateに代入できたりはしないよ。
そもそもdelegateと違って引数のパラメータ指定子だしな。

それでなくとも、
> もし「lazyは遅延評価である」が真なら
> lazyはdelegateの構文糖なわけだから「delegateが遅延評価である」も真になる。
lazyという表現がされる場合はdelegateという表現と意味合いも変わってくるよね。
だから、delegateが云々は真になるとは限らない。
今回の場合は、delegateは引数の遅延評価機構としてのものではないから偽だね。
delegate自体は遅延評価されない。

>>189
単にお前が間違ってるだけ。認識云々じゃなくて現実を見よう。
0194デフォルトの名無しさん2006/09/18(月) 22:36:21
lazy∈遅延評価が完全に保証されてれば意見は食い違わないんだけどね。
lazyが遅延評価に属するかどうかは実装次第。
0195デフォルトの名無しさん2006/09/18(月) 22:41:28
>>194
お前そんな馬鹿なこと言ってないで192に答えてやれよ
0196デフォルトの名無しさん2006/09/18(月) 22:45:47
>>195
>>186は漏れじゃない。
>>189の認識は現D言語の仕様じゃ曲がらん。
間違ってるわけじゃなくて>>191なんだよ。不毛な水掛け論。
0197デフォルトの名無しさん2006/09/18(月) 22:57:50
言葉を勘違いしたまま闖入して、捨て台詞は「不毛な水掛け論」だもんなあ。
0198デフォルトの名無しさん2006/09/18(月) 22:57:59
>>194
Lazyと遅延評価の定義を出し合えば良いだけだと思う。
なんで、それをしないで、喧嘩してるのか分からない。

最近この手の文系議論が多くて嫌。
0199デフォルトの名無しさん2006/09/18(月) 23:04:42
lazy:
>>135
遅延評価:
ttp://ja.wikipedia.org/wiki/%E9%81%85%E5%BB%B6%E8%A9%95%E4%BE%A1
0200デフォルトの名無しさん2006/09/18(月) 23:07:42
結局、lazyの役割がlazy以外の語だったら
ヘンテコな議論にならずに済んだのかな……
02011992006/09/18(月) 23:11:30
lazy:
ttp://www.kmonos.net/alang/d/lazy-evaluation.html
ttp://www.digitalmars.com/d/lazy-evaluation.html
02021992006/09/18(月) 23:18:55
遅延評価:
ttp://wpedia.search.goo.ne.jp/search/174829/%C3%D9%B1%E4%C9%BE%B2%C1/detail.html?mode=0
ttp://en.wikipedia.org/wiki/Lazy_evaluation
0203デフォルトの名無しさん2006/09/19(火) 00:02:42
http://www.geocities.jp/lethevert/softwares/clean/gettingStarted14.html
このページによると、遅延評価の処理系にも2種類あって、
キャッシュが行われる「必要呼び(call by need)」と
行われない「名前呼び(call by name)」があるみたい。
となると、Dのlazyは「名前呼びの遅延評価」と言えるようなんだけど…
検証おながいしまつ
0204デフォルトの名無しさん2006/09/19(火) 00:52:25
把握した。
その定義が加わればlazy引数を複数回評価しようが遅延評価に属するね。

というわけでスレ汚しすいませんでした。
0205デフォルトの名無しさん2006/09/19(火) 01:36:10
お前は一族の面汚しだよ
0206デフォルトの名無しさん2006/09/19(火) 02:35:19
>>48
恐らく発端である >>48 に対して function 使えとは誰も言わないのか。
0207デフォルトの名無しさん2006/09/19(火) 02:36:00
うひゃ。意味不明。s/^>>48//
0208デフォルトの名無しさん2006/09/19(火) 03:03:22
>>207
sedつかった表現って受け入れられないよな(orz
0209デフォルトの名無しさん2006/09/19(火) 07:59:00
DMD 0.167
* Implemented Stewart Gordon's suggestions per D.bugs/3843.
* Added std.c.windows.stat.
* Added std.file.getTimes().
* Added support for multidimensional array allocation with NewExpression.
* Added array literals.
* std.format will now work with struct arguments as long as they define a char[] toString() member function.

>Added array literals.
キタ━━━━(゚∀゚)━━━━!!!!
0210デフォルトの名無しさん2006/09/19(火) 08:05:57
キタ━━━━(゚∀゚)━━━━!!!!
0211デフォルトの名無しさん2006/09/19(火) 08:18:39
こっちが通らなくて
auto x = [1,2,3];
これが通るのが遺憾
auto x = ([1,2,3]);
0212デフォルトの名無しさん2006/09/19(火) 08:28:47
>>211 どっちも通らん希ガス
0213デフォルトの名無しさん2006/09/19(火) 08:35:19
これらはコンパイル時評価可能
static assert (['0', '1', '2'] == ['0', '1', '2']);
static assert([0, 10, 100][1] == [2, 4, 6, 8, 10][4]);

static const int[]な変数に代入するとstatic assert通らなくなるが('A`)
0214デフォルトの名無しさん2006/09/19(火) 08:37:29
>>212
いや、後者は通る。
void main(char[][]args){
    auto x = ([1,2,3]);
}
前者は配列リテラルじゃなくて静的配列の静的初期化。
で、autoで静的配列を宣言できないという制限に引っかかってエラーが起こっている。
0215デフォルトの名無しさん2006/09/19(火) 09:05:56
前スレの851のバグなおしてるな。
0216デフォルトの名無しさん2006/09/19(火) 09:08:29
>>215
マジか。
良かったあんな致命的なバグ直って。
そういえばあのバグはdmcでも出るとか言ってた様な気がするけどそっちは直ったんだろうか。
0217デフォルトの名無しさん2006/09/19(火) 09:34:02
>>216

DMCの最終版は8/12なので、まだでしょうな。
0218デフォルトの名無しさん2006/09/19(火) 11:38:12
むしろBugzilla 285が直されたのがうれしい
0219デフォルトの名無しさん2006/09/19(火) 12:02:51
こうなるとstruct literalも欲しくなってくるな
0220デフォルトの名無しさん2006/09/19(火) 17:46:17
9p8ujyh654w496t8nhyjmp98j,.[
0221デフォルトの名無しさん2006/09/19(火) 18:23:26
char[][] strs;
strs=["test","test2","test3"];
通らない…
0222デフォルトの名無しさん2006/09/19(火) 18:26:30
ああ、これで通った。
char[][] strs;
strs=[cast(char[])"test","test2","test3"];
0223デフォルトの名無しさん2006/09/19(火) 18:30:08
これは無理か。>static assert([cast(char[])"test","test2","test3"]==[cast(char[])"test","test2","test3"]);
templateの引数にも使えないし…ってこれは静的配列の時からだろうけど。
0224デフォルトの名無しさん2006/09/19(火) 20:54:27
>>222
らくちんな方法。
 strs = ["test"[], "test2", "test3"];
0225デフォルトの名無しさん2006/09/19(火) 21:36:35
配列リテラル

1. 配列リテラルはstaticな配列に解釈されます。
2. 配列の型は、最初の要素の型となります。

多次元配列のnew式での確保

char[][] strArray; // char型の動的配列の動的配列
strArray = new char[][10]; // char型の動的配列10要素を確保
strArray = new char[][](10); // 上と同意

0226デフォルトの名無しさん2006/09/19(火) 21:54:08
void main(){
 static assert(['0', '1', '2'] is ['0', '1', '2']); //通らない
 assert(['0', '1', '2'] is ['0', '1', '2']); //実行時エラー
}

staticというよりconstなんじゃなかろうか。
0227デフォルトの名無しさん2006/09/19(火) 21:59:28
is式がコンパイル時に評価できないのは当たり前なんだけど、
staticというと静的配列というよりstatic int[] a; とかそんな感じを受ける、
という話ね。
0228デフォルトの名無しさん2006/09/20(水) 08:48:23
D言語の仕様を読めば読むほど10進演算器が欲しい。
英語かけないので、だれか提案してくれないか。。。。
おねがい。
0229デフォルトの名無しさん2006/09/20(水) 08:51:45
てかさぁ、これだけビジネスにコンピューター使われてるのに、
10進演算をネイティブにサポートしてるのって、COBOLだけっていうのが
不思議。言語に組み込むのがそんなに難しいの?というか、言語に組み込むのが
無茶苦茶難しいなら、逆に、ライブラリで対処してるのが異常(そんなに難しいんだったら
ライブラリ作るのも難しいと思う)とか思う。

言語設計者が10進演算器を嫌うのは何故?
0230デフォルトの名無しさん2006/09/20(水) 09:43:15
これって釣り?
0231デフォルトの名無しさん2006/09/20(水) 10:12:14
>229
なんでもかんでも言語コアに組み込んで楽しい?
0232デフォルトの名無しさん2006/09/20(水) 10:20:32
>>230-231
その手の議論はいらない、10進演算器が「なんでもかんでもの範疇」という
論証してくれたら聞く。
0233デフォルトの名無しさん2006/09/20(水) 10:22:26
>10進演算をネイティブにサポートしてるのって、COBOLだけっていうのが

例えば .NET の各言語もネイティブにサポートしてたりするけどね。
(一見ライブラリによる対応に見えるが実際はネイティブのはず)
0234デフォルトの名無しさん2006/09/20(水) 10:33:16
まぁ、俺には必要ないからネイティブに組み込む必要もないな

>>233
それってsystem.decimal構造体のこと?
で、Dではそのうちでるんじゃないかと思ってるcent型が対応するのかな?
0235デフォルトの名無しさん2006/09/20(水) 11:37:03
必要とする人が絶対的に少ないのはライブラリであとづけなり無視。
そんなに必要なものなら人に頼ったり
こんなとこで何度も同じ話題をほじくり返し人の意見を聞かないでネチネチと愚痴る前に
辞書使って自分で訴えろよ、無能者。
0236デフォルトの名無しさん2006/09/20(水) 11:59:02
>>235
いやいや、前回聞いたときも、イラネって話は勢い良く書き込む人がいたのに、
理由を述べないから、聞きなおしてみただけで。罵倒する暇が有れば無視すりゃあ
良いのに(wとか思う。

いらない理由を述べられないのなら、黙ってたら良いのに。
0237デフォルトの名無しさん2006/09/20(水) 12:04:45
いる/らない理由を述べられないのなら、黙ってたら良いのに。 
0238デフォルトの名無しさん2006/09/20(水) 12:06:16
>236
むしろ、コアに組み込む必要がないと思ってる側(D言語開発者含む)を説得するのはそっちの仕事だと思うが
要る理由・それがライブラリではいけない理由を述べよ(「俺が要るから」は無し)

別に元々あるものを削れと言ってるわけじゃないしな。
コアに組み込むほど使わんと思うから要らんと言ってるだけで。
0239デフォルトの名無しさん2006/09/20(水) 12:16:51
>>238
学生さんかなぁ?複素数型より、ニーズは高いんだけどね。
ニーズについて説得しなきゃならん人間に対して説得出来るとは思えないレベルの話。

よく哲学板で「何故人を殺しちゃいけないの?」スレが建ってるけど、
そんな質問する奴がおかしいので、これに対して説得してみるのは
面白いけど不毛。
0240デフォルトの名無しさん2006/09/20(水) 12:24:03
>>236
D使うのやめて、おとなしくCOBOLでも使ってればいい
それで全て解決だろw
クレ厨にDを使う資格はない
0241デフォルトの名無しさん2006/09/20(水) 12:29:38
コアに組み込むってどういう状態?
importしなくても使えるとか?
0242デフォルトの名無しさん2006/09/20(水) 12:36:20
文字列で10進数持って "123.425" * "23.78991"とか実装させればいいじゃん
0243デフォルトの名無しさん2006/09/20(水) 12:37:56
> 10進
勤めてる人間か学生かしらんけど、ここに書いてること自体無意味なのが分かってるんだろうか?
言うことおかしいし書く場所違うしもうサッパリなんですが・・・

それとも本気なのかな?
となるとなお更手がつけられないよね
0244デフォルトの名無しさん2006/09/20(水) 12:38:04
まあ平行線っぽいから要る要らんはさておくとして

「英語書けないから提案できない、誰か書いて」ってんならまず日本語で提案書いて
ここに書き込んでみてはどうだろう
誰かが訳してくれるかもしれん
0245デフォルトの名無しさん2006/09/20(水) 12:44:23
多倍長整数型は欲しい
0246デフォルトの名無しさん2006/09/20(水) 13:16:22
>>245
俺は使わないけれども、あってもいいなあと思う。個人的に。
0247デフォルトの名無しさん2006/09/20(水) 13:40:40
>>236
「必要性を感じない」
「使わない機能まで言語に組み込むことはない、ライブラリで十分」
と、理由述べているのに「理由を述べていない」とは
随分とご都合のいい解釈ですね。
あなたにとって都合の悪い意見は黙殺ですか。
ある意味すごいですね。

>>239
Dのユーザでは複素数より10進演算器のほうがニーズが高い根拠はどこにあるの?
参考までにいつ採られた統計でどこでそのような資料を確認できますか?(脳内資料?)
クレクレ言ってる人が必要とする理由を説くべきなのに
いらない理由を述べよとは随分と自分勝手な論理ですね。
0248デフォルトの名無しさん2006/09/20(水) 13:47:24
>>247
真性DQNを相手にマジになってもしょうがないよスレが荒れるだけ
0249デフォルトの名無しさん2006/09/20(水) 13:50:27
とりあえずハードに影響をうけないのはライブラリでいい気がするな。
0250デフォルトの名無しさん2006/09/20(水) 14:03:39
>>245
俺もほしい。
ライブラリという形で十分だけど。
Cのライブラリをbccでコンパイルして使ったりとか、
C++のライブラリをD用に書き直したりとかしたらいけるかなと思いつつも、
結局めんどくさくてやってない俺。
0251デフォルトの名無しさん2006/09/20(水) 14:09:30
十進演算は意外と汎用性がないからなあ。
大半は普通の演算で対応できるし、実務分野ごとに作りこむなら
ライブラリのほうが便利だし。
0252デフォルトの名無しさん2006/09/20(水) 14:13:30
>>251
意外と汎用性がないんじゃなくて、言語がサポートしないから、
汎用政の無い、作りこまなきゃならない10進演算が乱立してしまったんだと思う。
0253デフォルトの名無しさん2006/09/20(水) 14:42:56
>>243
こういう文脈で10進が出てくるときはBCDとかBigNum系列の事だよな?
0254デフォルトの名無しさん2006/09/20(水) 14:43:53
汎用性ないんだろうなあ。COBOLしか採用してないっていうんだから。
特定分野向け、といった感じか。専門性は物理演算エンジンみたいなもんかね。
0255デフォルトの名無しさん2006/09/20(水) 14:49:38
VBにあるような通貨型とかじゃないの
0256デフォルトの名無しさん2006/09/20(水) 14:54:50
10進演算器って?
0257デフォルトの名無しさん2006/09/20(水) 14:57:22
ぐぐってもようわからん
具体的にどんなことが出来るのか例を挙げて説明してくれ
0258デフォルトの名無しさん2006/09/20(水) 14:58:20
>>257
0.1を十回足せば1になる。
0259デフォルトの名無しさん2006/09/20(水) 15:05:44
誤差の出ない小数計算って解釈で良い?
0260デフォルトの名無しさん2006/09/20(水) 15:11:55
ttp://www.geocities.co.jp/SiliconValley/4334/unibon/topic/radixerror.html
こういうことでしょ?

ここに書かれている通り
整数に直して計算すればいいだけの話じゃないの?
0261デフォルトの名無しさん2006/09/20(水) 15:16:08
BCDに関しては、最近の本だとWrite Great Codeとか読めばいいと思う
0262デフォルトの名無しさん2006/09/20(水) 15:23:54
>>260
なるほどね把握した
とりあえず、俺は要らないなぁ…
0263デフォルトの名無しさん2006/09/20(水) 15:25:22
>>262
えっ!!>>260で納得する人が何故ム板のしかもD言語スレにいるの?
0264デフォルトの名無しさん2006/09/20(水) 15:37:10
ごめんなさいね
「要らない」なんて言って
0265デフォルトの名無しさん2006/09/20(水) 16:04:48
10進演算器でググっても全然ヒットしなかった。
どうやら 多倍長整数 ってのが一般的な呼び方らしい。
0266デフォルトの名無しさん2006/09/20(水) 16:08:24
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_005/cs2_005_02.html
0267デフォルトの名無しさん2006/09/20(水) 16:10:37
>>265
ぜんぜんちがいまーーーーーーーーしゅ。
0268デフォルトの名無しさん2006/09/20(水) 16:17:40
っていうか俺なら必要だとしても既存のライブラリを使うか自作で組むかすると思う。
んでそのライブラリを紹介してやれば良いじゃん。
D板のみんなのためになると思うよ。
0269デフォルトの名無しさん2006/09/20(水) 16:18:24
最後のSystem.Decimalは、高精度の計算ができる10進数表記のデータ型である。
この結果からは分からないが、小数も扱うことができる。
特に小数の計算を行うと、System.SingleやSystem.Doubleでは結果が狂う場合もあるが、
System.Decimalならずっと正確に計算できる。その代わり、計算は遅くなる。
スピードを取るか精度を取るかで選択されるべきものだろう。
0270デフォルトの名無しさん2006/09/20(水) 16:20:22
>>267
ちがうなら、どこかの解説ページURL希望。
0271デフォルトの名無しさん2006/09/20(水) 16:22:48
>>270
この程度なら自分言葉で言える。
多倍長整数は少数を扱えない。

扱うならいろいろしなきゃ駄目。→10進演算ライブラリ。
0272デフォルトの名無しさん2006/09/20(水) 16:41:54
扱えないじゃなくて、普通扱わないだ(w
ごみん
0273デフォルトの名無しさん2006/09/20(水) 16:45:44
お金の計算目的だとして、どんな演算が求められるの?
四則演算・除余のほかにも、累乗など色々と要るんじゃないの?
10進演算の為だけに演算子追加するもなぁ…。
やっぱり、雛形になる10進演算ライブラリを元に、
欲しい機能を書き足す方が融通利くんじゃない?
0274デフォルトの名無しさん2006/09/20(水) 18:47:57
ライブラリを薦める人数が10進演算を言語としての機能に入れる必要の無さを物語っている。
っていうか10進演算が必要だといった人は理由を言ってないよね。
言語に組み込む必要も一緒に述べてから、反応はそれからで良いから。
皆釣られすぎ。
0275デフォルトの名無しさん2006/09/20(水) 18:50:23
>>274
でも、ライブラリを進める奴って、>>260読んで納得したり、>>261を勧めるレベルだぜ。
>>260も>>261も間違っちゃいないが、小学生の算数レベルじゃん。
0276デフォルトの名無しさん2006/09/20(水) 18:52:06
一分野のごく一部にしか役に立たない機能はいらない。
0277デフォルトの名無しさん2006/09/20(水) 18:55:31
>>276
じゃあ、複素数も要らないじゃん。
0278デフォルトの名無しさん2006/09/20(水) 18:58:24
それは無理。複素数型はCに存在するからね。
Cとのバイナリレベルの互換性をある程度考えているDで複素数を外すのは難しい。
0279デフォルトの名無しさん2006/09/20(水) 19:12:35
>>278
頓珍漢と話すのは面倒だなぁ。。。
複素数型を使ってる人間と、10進演算器を必要としてる人間の数の違いが分かって無い。
怖いのは、0.1を10回たしても、1.0にならないのに気づかずに使ってるキチガイが、
これほど多い事だな。
0280デフォルトの名無しさん2006/09/20(水) 19:18:22
この場をひっくり返すのは無理そうだよ>>277etc?
ライブラリじゃなくて言語仕様に含めたらどういう場面でどう便利になるのか
具体的にコードを示して説得してみなよ
0281デフォルトの名無しさん2006/09/20(水) 19:20:59
>>279
>1.0にならないのに気づかずに使ってるキチガイが、
>これほど多い
どこをどう読んだらそうなるんだ
0282デフォルトの名無しさん2006/09/20(水) 19:22:42
>>280
だから、何度も言ってるけど、>>275で指摘した問題点をクリアーした
レベルの人間相手じゃないと、無意味だってーの。
>>260や>>261をこの場で提示することが恥ずかしいって思える人じゃなきゃ
無理。
0283デフォルトの名無しさん2006/09/20(水) 19:25:07
指摘した問題点をクリアした人が殆どいないという時点で
D言語ユーザーには大して需要がないのは明らかだな。

需要があるのなら問題点をクリアできる人がもっといるはずだしな
0284デフォルトの名無しさん2006/09/20(水) 19:26:56
この期に及んで何を言ってるんだろうねこの人は・・・
0285デフォルトの名無しさん2006/09/20(水) 19:27:55
>>284は>>282へ
0286デフォルトの名無しさん2006/09/20(水) 19:31:35
>>283
だから、黙ってろよ。馬鹿は。と、遠まわしに言ってるのにぃい。
いい加減恥ずかしくならないの?
0287デフォルトの名無しさん2006/09/20(水) 19:38:36
需要云々よりも、言語仕様に組み込むメリットが見えないんだよね。
複素数の場合は、複雑怪奇なテンプレートによる構文を回避できるとか、
リテラルが自然な形で記述できるとか、最適化ができる可能性があるとかいうのが、
ドキュメントで触れられてる。
0288デフォルトの名無しさん2006/09/20(水) 19:39:07
需要が少ないけどあれば必要な時に便利…程度の事なのに何故ここまで伸びるんだか…
ってかWalterに伝えないでここでぐだぐだ言っててもしかたないとおも。
0289デフォルトの名無しさん2006/09/20(水) 19:40:22
>>286
鏡を見てもちつけ
おまいに対する真摯なレスを見逃してるぞ
気に入らないレスに反応している場合じゃない

それでも見えないなら・・・もうここから去れ
おまいの期待するもんはここにはない
0290デフォルトの名無しさん2006/09/20(水) 19:49:22
>>289
見当たらない。要らない理由をこじつけてる以上の物が見当たらない。
0291デフォルトの名無しさん2006/09/20(水) 19:51:50
たとえばさ、10進演算が実装されるとして、構文どうすんの?とかいう話の方が有意義じゃないか?
02922912006/09/20(水) 19:53:47
あ、でも、>>290みたいな態度の人間とは議論できないなあ。。。
0293デフォルトの名無しさん2006/09/20(水) 20:26:03
だから、黙ってろよ。馬鹿は。
と、遠まわしどころか直接的に言われてるのにまだ吼えてる人がいるスレはここですね?
0294デフォルトの名無しさん2006/09/20(水) 20:34:09
>>293
お前がバカじゃないならWalterタソに自分で英語で伝えたら良いのに。
Walterタソに言わなきゃ、どんなに欲しがっても手に入んないぞ。言語機能としては。

あと、都合の悪いレスを「黙ってろよ、バカ」って言ってるように見えるけどそれはどうなんだろうね。
0295デフォルトの名無しさん2006/09/20(水) 20:37:00
バカバカ言い合うバカ言語
D D D D DEN♪
0296デフォルトの名無しさん2006/09/20(水) 20:40:55
英文も書けない人に馬鹿馬鹿言われたくないです><
0297デフォルトの名無しさん2006/09/20(水) 20:43:07
>>244がすげえ良いことを言ってるはずなのに全員無視。
せめて>>286は反応してやりなよ。
0298デフォルトの名無しさん2006/09/20(水) 20:43:53
「分かってないなぁ」と言ってるやつに触れなきゃいいだけだな。
そいつは真摯なレスを頭に血が上って見逃してるんじゃなくて、
自分の言葉で必要性を説明すると突っ込まれるのが怖いから
冷静に「分かってる振り」をしてるだけだってのは、ここまでの
様子をみりゃ一目瞭然だろ。

という人格攻撃が対話中断の態度として気に入らないとしても、
そいつがこれ以上情報や意見を出せないことは明らかだろう。
だから、この話が進むことはないし、この話が続くとしたら"構って
ちゃん"のご機嫌とり以上の内容はない。

話題を振ってくる人間のめぐり合わせが悪かったと思って、
これを雑談のネタにするのはすっぱり諦めなよ、みんな。
0299デフォルトの名無しさん2006/09/20(水) 20:57:41
全くどうでもいい通りすがりだが,10進数の0.1が2進数で循環小数に
なるのはプログラマの常識だから多倍長整数とか外したこといってた
奴は恥ずかしさで悶え死んだ方がいいぞ
0300デフォルトの名無しさん2006/09/20(水) 21:00:44
↑スルーで
0301デフォルトの名無しさん2006/09/20(水) 21:08:43
>多倍長整数とか外したこといってた奴

日本語でおk
0302デフォルトの名無しさん2006/09/20(水) 21:41:27
話変わるが、これで共有されるのは嫌だな。
今のままで使い所あるんだろうか。
void main(){
 int[][5] array;
 array[]=[0,1,2];//
 array[2][0]=3;
 foreach(a;array){
  foreach(b;a){
   printf("%d",b);
  }
 }
}
0303デフォルトの名無しさん2006/09/20(水) 21:51:57
必要なら複製しるってことじゃないかな。
0304デフォルトの名無しさん2006/09/20(水) 22:09:09
>>302
嫌っていうかopSliceの仕様からしてしょうがないんじゃない?
0305デフォルトの名無しさん2006/09/20(水) 22:44:39
3種の不審な挙動。

void main()
{
   int[] ary1 = ([0] ~ [1]);
   foreach (v; ary1){ printf("%d\n", v); }
   
   int[] ary2 = ([2, 3] ~ [4]);
   foreach (v; ary2){ printf("%d\n", v); }
   
   int[] ary3 = ([5] ~ [6]);
   foreach (v; ary3){ printf("%d\n", v); }
}
0306デフォルトの名無しさん2006/09/20(水) 23:52:31
>>305
ary1.length が 0
ary2.length が 4
ary3.length が 5
になってるね。
0307デフォルトの名無しさん2006/09/20(水) 23:55:29
原因究明に役立つかもしれんし一応こっちも。

void main()
{
 printf("ary1\n");
 int[] ary1 = ([0] ~ [1]);
 foreach (inout v; ary1){ printf("%d ", &v); }
 
 printf("\nary2\n");
 int[] ary2 = ([2, 3] ~ [4]);
 foreach (inout v; ary2){ printf("%d ", &v); }
 
 printf("\nary3\n");
 int[] ary3 = ([5] ~ [6]);
 foreach (inout v; ary3){ printf("%d ", &v); }
}
0308デフォルトの名無しさん2006/09/21(木) 00:00:09
この調子じゃ配列リテラルもベータ版であんまり期待しないほうが良いな。
むしろ今からバグ取り段階か。
0309デフォルトの名無しさん2006/09/21(木) 00:03:01
まぁ実装初期はバグだらけってのはD言語の風物詩だからなぁ
しばらくすると安定してくるから今は次バージョン待ちだな。
0310デフォルトの名無しさん2006/09/21(木) 00:20:34
話に付いていけない俺がいる・・・orz
0311デフォルトの名無しさん2006/09/21(木) 00:20:48
ん、あ、いつのまにか 0.167 になっとんたんか
0312デフォルトの名無しさん2006/09/21(木) 10:45:41
確かに構造体/クラスリテラルが欲しくなるなあ
それはともかく、dupを使うべきときとそうじゃないときがわかりにくくて困るんだが・・・
標準ライブラリで文字列処理をしてると実行時に急に落ちて原因究明に時間がかかったおー
0313デフォルトの名無しさん2006/09/21(木) 10:55:51
>>312
配列を共有したくない場合。
例えば書き込み禁止になってるメモリ部分にある文字列を代入して変更したいとか。

char[] t="aaaa".dup;
t[2]='b';
0314デフォルトの名無しさん2006/09/21(木) 11:45:24
あーそういえば文字列リテラルも書込み禁止領域だったっけ・・・
忘れてたけどだいぶ前にそんな話してたなぁ
0315デフォルトの名無しさん2006/09/21(木) 12:53:30
「2の補数表現の16進数表記」の文字列から10進数への変換って簡潔に書けない?
なんか自分で書くとすごく泥臭くなる orz
Dなら・・・Dならなんとかしてくれる?
0316デフォルトの名無しさん2006/09/21(木) 14:06:58
foreach(c; tolower(str)){
  sum = sum*16 + (c-'0')%('W'-'0');
}
0317デフォルトの名無しさん2006/09/21(木) 14:20:03
うわ・・・
思ってたよりもかなり簡潔になりました
ありがとうございました
0318デフォルトの名無しさん2006/09/21(木) 14:47:57
>>316さんのを参考に tolower使わない版
int sum = 0;
foreach(char c; str){
 sum = (sum<<4) + ((c|0x20)-'0')%('W'-'0');
}
0319デフォルトの名無しさん2006/09/21(木) 15:52:23
>>318
phobosのstd.stringに入れちゃえ
0320デフォルトの名無しさん2006/09/21(木) 15:57:22
げ、dupってなに?rubyのdupと同じく扱って良いのかな
とか思ってたら配列限定のプロパティなのね・・・
0321デフォルトの名無しさん2006/09/21(木) 16:19:09
int hexToDecimal(char[] hex) {}
int dec1 = hexToDecimal("A");
int dec2 = hexToDecimal('A'); // <- こっちはエラー

どちらでもいけるようにしようと頑張っているが
引数をchar[]とcharにしてconflictさせたり
templateだと暗黙推論するパラメータは特殊化できないとかでうまくいかなーい

とりえあず 'A' を char[] 型に変換するにはどうするのがいいかな?
0322デフォルトの名無しさん2006/09/21(木) 16:24:03
とりあえずこうなった
int hexToDecimal(int c)
{
 return ((c|0x20)-'0')%('W'-'0');
}
int hexToDecimal(char[] str)
{
 int sum;
 foreach(char c; str)
  sum = sum*16 + hexToDecimal(c);
 return sum;
}
0323デフォルトの名無しさん2006/09/21(木) 16:35:29
 long hexToDecimal(char c){
  return hexToDecimal([c]);
 }
 long hexToDecimal(char[] hex){
  (以下略)
で普通にいけたが。
0324デフォルトの名無しさん2006/09/21(木) 16:42:20
>>321
配列リテラル使えるようになったから
int dec2 = hexToDecimal( ['A'] );
こうでしょ。
0325デフォルトの名無しさん2006/09/21(木) 16:42:22
スタックオーバーフローなのだが
0326デフォルトの名無しさん2006/09/21(木) 16:43:31
decimal に変換してるんじゃなくて整数に変換しているように見えるのは俺だけ?
0327デフォルトの名無しさん2006/09/21(木) 16:58:11
そもそも「2の補数表現の16進数表記」といわれてるのに
符号はどこいったという話だな。
03283252006/09/21(木) 17:06:46
>>323-324
ごめん
いけた orz
0329デフォルトの名無しさん2006/09/21(木) 17:08:27
['A']
顔に見えた
0330デフォルトの名無しさん2006/09/21(木) 17:09:21
>>329
顔にしか見えなくなった
和んだ
0331デフォルトの名無しさん2006/09/21(木) 17:30:44
>>327
なるほど、文字列で表されている分が有効ビット数なわけね。
int x;
int sum;
foreach(char c; str){
 sum = (sum<<4) + ((c|0x20)-'0')%('W'-'0');
 x++;
}
x = sum.sizeof*8 - x*4;
sum = (sum<<x)>>x;
0332デフォルトの名無しさん2006/09/21(木) 18:40:07
これと
auto hoge = new Hoge;
これが
auto Hoge hoge;
等価であって欲しいと願う今日この頃
0333デフォルトの名無しさん2006/09/21(木) 18:42:34
あ、でもんなことしたら面倒になるだけか。
じゃあいいや。
0334デフォルトの名無しさん2006/09/21(木) 18:53:14
そういえば未だに
auto Class c = new Class;
を
auto auto c = new Class;
と書ける仕様じゃないんだよなぁ
(例1) local auto c = new Class;
(例2) auto type c = new Class;
みたいに新しいキーワードを導入する方がいいと思うけども
0335デフォルトの名無しさん2006/09/21(木) 19:24:10
auto auto c = new Class;
なにこれ。

これ
auto Class c = new Class;
を実現したいなら、これ
auto c = new Class;
で良いはずだが、他になにかの機能付きなのだろうか
0336デフォルトの名無しさん2006/09/21(木) 19:27:44
>>335
良いはずねーだろ
下のはRAIIじゃねえぇぇー
0337デフォルトの名無しさん2006/09/21(木) 19:36:10
>>336 ハァ?
RAIIってアレだよな。
C++とかで言う
Class c;
ってやつ。
それなら間違ってないと思うが。
0338デフォルトの名無しさん2006/09/21(木) 19:37:34
っていうか
auto c = new Class;
これはRAIIだよ?
0339デフォルトの名無しさん2006/09/21(木) 19:38:08
以前してた話がまたループしてたり勘違いさんが増えてきたけど新米が増えた?
0340デフォルトの名無しさん2006/09/21(木) 19:38:39
>>338
そのautoはただの型推論
0341デフォルトの名無しさん2006/09/21(木) 19:39:46
>>338
ちゃうわボケ
0342デフォルトの名無しさん2006/09/21(木) 19:40:40
>>337
暗黙の型推論にするキーワードと、RAIIにするキーワードが
両方とも auto なんですよ。全く異なる機能なのに…。
現在の仕様では、両方を同時に指定できないのです。
0343デフォルトの名無しさん2006/09/21(木) 19:43:40
スコープ内だったらRAIIというオチ?
なんだかこれがRAIIに見えるんだが

class CLASS
{
this(){ printf("c\n"); }
~this(){ printf("d\n"); }
}
void main()
{
auto cc = new CLASS;
printf("exp\n");
}
0344デフォルトの名無しさん2006/09/21(木) 19:45:16
>>343
単にそれはプログラム終了時にGCされているだけ。
0345デフォルトの名無しさん2006/09/21(木) 19:45:45
>>343
それだと~thisはjavaのファイナライザと同等なはず。
0346デフォルトの名無しさん2006/09/21(木) 19:50:16
普通に raii キーワードでも作って機能を分離させりゃいいのにとか思った
0347デフォルトの名無しさん2006/09/21(木) 19:55:53
>>343
仕様に
>関数からの auto 返値も禁止されています。
とあるのに。
class CLASS
{
 this(){ printf("c\n"); }
 ~this(){ printf("d\n"); }
}
CLASS foo() {
 auto cc = new CLASS;
 return cc;
}
void main()
{
 CLASS c = foo();
 printf("exp\n");
}
これだとコンパイル通ります。
auto CLASS cc = new CLASS;
と書くと、コンパイルエラー。
よって、
auto cc = new CLASS;
の書き方は、単なる型推論。
0348デフォルトの名無しさん2006/09/21(木) 19:59:00
>>347
そうだったのか・・・。ありがとう偉い人。
今後ちょっと書き込み控えます。
0349デフォルトの名無しさん2006/09/21(木) 20:12:59
build 3.03 リリース
0350デフォルトの名無しさん2006/09/21(木) 20:38:08
厳密には、autoが推論のキーワードってことじゃなくて、
const s = "hoge"; とか
static i = 0; とか
static deprecated count = 1; とかもOK。
autoが推論の際に使われるとRAIIにならないってこと。
http://www.kmonos.net/alang/d/declaration.html#AutoDeclaration

まあ事実上autoが推論のキーワードなんだけどな。
一見予約語の追加が面倒だったからのように思えるけど、
これはなにか深遠なる理由があるんだろうか。
0351デフォルトの名無しさん2006/09/21(木) 20:47:32
>>350
深遠というよりautoが型推論なのは単純にC++0xのパクリじゃね?
0352デフォルトの名無しさん2006/09/21(木) 20:53:11
かなり古くからauto classはあった。
その後、型推論のautoが追加された。
さしたる理由はないと思うよ。
0353デフォルトの名無しさん2006/09/22(金) 10:01:36
こうなれば良いのに

static hoge = 12; // 静的変数 int
const huga = 12u; // 定数 uint
auto huge = 12l; // RAII long
hoga = 12ul; // ulong
03543532006/09/22(金) 10:03:32
あ、RAIIってのはオブジェクトで表さないと意味無いってか使い方間違ってるorz
0355デフォルトの名無しさん2006/09/22(金) 14:10:29
>>353
> hoga = 12ul; // ulong
バグのもとなのでやめてほしい。

やめてほしいとかいう個人的感情はともかく、Dだと外側のスコープの
変数を覆い隠す形の変数名での宣言を禁止しているくらいだから、
そういうバグの種になるものは採用されないと思う。
0356デフォルトの名無しさん2006/09/22(金) 14:30:21
D言語って整数思考なんですか?
0357デフォルトの名無しさん2006/09/22(金) 15:11:00
var hoga = 12ul; ならいいんじゃね?
型推論くらい最近の関数型言語なら普通でよ。
0358デフォルトの名無しさん2006/09/22(金) 19:16:03
var に一票
0359デフォルトの名無しさん2006/09/22(金) 20:48:02
>>356
float志向のPC用CPUって何?
0360デフォルトの名無しさん2006/09/22(金) 20:57:23
挑戦者シリーズの事?>>359
0361デフォルトの名無しさん2006/09/23(土) 13:13:25
eclipse ベースの開発環境ってまだでないの?
0362デフォルトの名無しさん2006/09/23(土) 13:17:59
言語仕様の変更を追尾する賢いインテリセンスなんてないしね。
0363デフォルトの名無しさん2006/09/23(土) 13:41:24
開発環境は無くてもあまり困らんが
ApplicationFrameworkが無いのはつらいな
0364デフォルトの名無しさん2006/09/23(土) 13:46:55
おいらはDFLユーザー
0365デフォルトの名無しさん2006/09/23(土) 14:53:39
>>364
DFLの使い方を日本語で解説してるところってないですかね?
03663642006/09/23(土) 23:06:26
日本語どころか英語でさえろくに解説ないんじゃないですかねぇ
0367デフォルトの名無しさん2006/09/24(日) 01:24:13

よ〜し
パパ頑張っちゃうぞ〜
0368デフォルトの名無しさん2006/09/24(日) 01:28:50
みんな最初はそういうんだよ。最初はね。
Noahの中の人は長くつづいてるね。感心する。
03691 ◆qRy0pp8F66 2006/09/24(日) 01:52:23
俺はね、もうね、正直に生きることにしたよ!
そんな生き方の中で一つ自分について発見したんだ!!






















                             俺は正直じゃない
0370デフォルトの名無しさん2006/09/24(日) 03:57:33
俺だって頑張って生きることにしてるんだけど本当は頑張ってないって事を発見したんだぜ
0371デフォルトの名無しさん2006/09/24(日) 11:02:59
   / ̄\
  |  ^o^ | < ぼくは まちがって いません
   \_/
   _| |_
  |     |
         / ̄\
        |     | < ぼくも まちがって いません
         \_/
         _| |_
        |     |

   / ̄\
  |  ^o^ | < しんじつは いつも ひとつです
   \_/
   _| |_
  |     |
         / ̄\
        |     | < じゃあ あなたが まちがっています
         \_/
         _| |_
        |     |
03726342006/09/24(日) 21:40:04
DFLって仕様らしい仕様が公開されてないみたいだから
日本語の解説サイトを作ろうにも・・・
同梱されてるサンプルくらいしか確実なものがない
0373デフォルトの名無しさん2006/09/24(日) 21:40:35
634じゃねえや364だ
0374デフォルトの名無しさん2006/09/24(日) 21:46:11
>>372
ソースという完全な仕様が(ry
0375デフォルトの名無しさん2006/09/24(日) 22:01:06
void delegate()[] es;

void regist( void delegate() p )
{
es ~= p;
}

このソースを上手くlazyを使って改良できないかな・・・
lazyはdelegateを簡略化した物だと言ってるけど、実際はちょっと仕様が違うような・・・
0376デフォルトの名無しさん2006/09/24(日) 22:01:58
>>375
既出
0377デフォルトの名無しさん2006/09/24(日) 22:15:01
これでいいんじゃね
void regist(void delegate()[] p...)
何か整合性が取れてない仕様な気もするが。
0378デフォルトの名無しさん2006/09/24(日) 22:36:42
>>377
いやだめだろ。lazy使えって言ってるしさ。

こんなん思いついたけど、多分有効期限切れだと思うけどエラー出た。
ってか無理じゃない?

void regist( lazy void p )
{
es ~= { p(); };
}
0379デフォルトの名無しさん2006/09/24(日) 22:51:44
lazy引数をdelegate配列に結合するのは>>181を見る限りじゃ無理では
0380デフォルトの名無しさん2006/09/24(日) 22:54:05
言語開発者に主要な言語のひとつとしてRubyをあげられるまでになったか。
小さな会社の思いっきり自己満足な言語なんだろうな。(中の人のレベルは神かも知れんが)
0381デフォルトの名無しさん2006/09/24(日) 23:06:52
>>377
http://d.hatena.ne.jp/kurimura/20060831
0382デフォルトの名無しさん2006/09/24(日) 23:37:14
lazyみたいな引数をdelegateとして受け取れればイイナー
0383デフォルトの名無しさん2006/09/25(月) 01:54:09
誰か DFL 入れてる人いませんか?
dfl.ListView のおかしな動作に遭遇したんだけどソース見ても突き止められなかった orz
コミュニティさえ存在しないのかなぁ・・・ミツカンないお

Windows のリストコントロールの拡張スタイルにホバー選択ってのがあるんだけど、この機能はおそらく
hoverSelection = true;
のときだけ有効になるべきなのに、 false でもなぜか中途半端に有効になってる

具体的には true にするとポインティングしたアイテムの文字色が変化してからホバー選択されるが、
false にしてもリストコントロール内に初めてカーソルが入ってから最初にポインティングしたアイテムが
文字色変化なしにホバー選択されてしまうお

// 再現コード
import dfl.all;
class MyForm : Form {
  this() {
    with (list = new ListView) {
      parent = this;
      //hoverSelection = true;
      auto col = new ColumnHeader;
      col.width = 100;
      columns.add(col);
      items.add("hoge");
      items.add("HOGE");
    }
  }
  private ListView list;
}
void main() {
  Application.run(new MyForm);
}
0384デフォルトの名無しさん2006/09/25(月) 16:32:38
全然関係ないけど、つかそもそも日本語化けるなあと思ってたらMBSに変換してやりゃ通るのか。
(ウィンドウのタイトルは普通に通るけど、なんで?)
変換のコストもあるだろうしWバージョン欲しいなあ>>DFL
0385デフォルトの名無しさん2006/09/25(月) 16:53:39
ボタンとかリストビューのヘッダーも変換なしでいけたような
なんでかなあ
0386デフォルトの名無しさん2006/09/25(月) 19:48:42
>>384 >>385
import/dfl/utf.d 覗いてみたら? ある程度、化け対策してるみたいだよ。
0387デフォルトの名無しさん2006/09/25(月) 20:28:47
>>382
lazyの引数に & 付けてアドレス得ようとすると怒られるので…
ダミーの引数追加してから
  void foo( lazy void p, int dummy = 0 ) {
>>381の方法を応用し、&dummyからスタック上のpの位置求めて引っこ抜けるんじゃね?
0388デフォルトの名無しさん2006/09/25(月) 21:08:24

>>383
DFL 入れてみた
おなじだった

dmd 0.167
dfl 0.9.2
03893832006/09/25(月) 23:12:00
>>388
アリが�d
時間ができたら引き続き調べてみる
0390デフォルトの名無しさん2006/09/25(月) 23:45:56

falseのとき、ホバーしただけで選択されるのは
まあ百歩譲って許容範囲としても、そのあと
他のが選択出来なくなってしまうのは困りますね。

0391デフォルトの名無しさん2006/09/25(月) 23:47:51

ああ、一回カーソルをListViewの外に出すと
また選べるようになる。なんじゃこりゃ。w
0392デフォルトの名無しさん2006/09/27(水) 00:14:17
DFLって楽しいの?
0393デフォルトの名無しさん2006/09/27(水) 00:17:21
>>397
なめるとおいしい、かじると固い、焼くと焦げる、煮るとあくだらけ。
0394デフォルトの名無しさん2006/09/27(水) 07:37:21
>>397 ワクワク
0395デフォルトの名無しさん2006/09/27(水) 09:15:36
ツマンネ
0396デフォルトの名無しさん2006/09/27(水) 11:15:29
buildにWinMainから始まるソース投げるとリンクで、
OPTLINK : Warning 183: Extension not .RES : COMCTL32.lib
advapi32.lib(0) : Error 2: File Not Found advapi32.lib

とか出て失敗するんですけどもどうしたらいいんでしょうか?
0397デフォルトの名無しさん2006/09/27(水) 12:29:50
>>396
build3.02から3.03へupdateしたら、漏れもそのエラー出て悩んだ。
しかたなく3.02へ戻したよ。
もう3.02落とせないみたいだから、揚げといた。
ttp://siomin.hp.infoseek.co.jp/cgi-bin/up/file/build-3.02.zip
0398デフォルトの名無しさん2006/09/27(水) 13:54:16
コンパイルでエラーになるんですけど、これって既出のbugなんでしょうか?
もし既出でないなら、英語の得意なかた、Walterタソの所へ報告してもらえませんか。

構造体を初期状態へ戻すコード

//----- ERROR -----
struct AAA { int a, b; }
void main() {
  AAA x;
  x = x.init;
}

//----- ERROR -----
struct BBB { int a; bool b; }
void main() {
  BBB x;
  x = x.init;
}
0399デフォルトの名無しさん2006/09/27(水) 13:54:48
//------ OK ------
struct AAA { int a, b; }
void main() {
  AAA x;
  x = AAA.init; // x = typeof(x).init;
}

//------ OK ------
struct CCC { int a; char b; }
void main() {
  CCC x;
  x = x.init;
}

//------ OK ------
struct DDD { int a, b = 0; }
void main() {
  DDD x;
  x = x.init;
}

簡単にエラー回避できるんだけど、
エラーとして表示される行番号が、適切でないので
どうしてエラー出たのかわかりにくい。
0400デフォルトの名無しさん2006/09/27(水) 13:59:48
>>398
Bugzillaで探してなければ報告汁
http://d.puremagic.com/bugzilla/
0401デフォルトの名無しさん2006/09/27(水) 17:10:30
こういうときはたぶん探すための英語力もない罠
そういう漏れもTOEIC200点台 orz
0402デフォルトの名無しさん2006/09/27(水) 17:13:54
http://maps.google.co.jp/maps?f=q&hl=ja&q=52%C2%B0+3%2759.91%22N+4%C2%B020%2714.05%22E&ie=UTF8&z=17&ll=52.066851,4.337604&spn=0.002585,0.008605&t=h&om=1&iwloc=A
0403デフォルトの名無しさん2006/09/27(水) 20:38:12
Dにもアスペクト指向が欲しいなと思った
0404デフォルトの名無しさん2006/09/27(水) 21:18:07
つ http://d.hatena.ne.jp/shinichiro_h/20040804#p1
今でもできるかな
0405デフォルトの名無しさん2006/09/27(水) 23:14:36
>>403
石綿乙
0406デフォルトの名無しさん2006/09/27(水) 23:22:39
>>405
疲れ目乙
0407デフォルトの名無しさん2006/09/27(水) 23:54:37
>>404
そこらへんの仕様は変わってないはず
04083832006/09/28(木) 01:26:15
\import\dfl\listview.d (1976):
final void hoverSelection(bool byes) // setter

誰かこの関数を呼んでくれぇ
どうみてもこの関数内を通過していません本当にありがとうございました orz
コンパイラのバグかなぁ
0409デフォルトの名無しさん2006/09/28(木) 01:30:16
唐突に思ったんだが、

DからするとC#とかって言語的な完成度が高いようなきがするよな…

何だろう、こう…子供が踏み台に上って、「ほら、ボクって大人と同じ大きさなんだよ!」みたいな雰囲気があるのは…
0410デフォルトの名無しさん2006/09/28(木) 01:33:40
好きなのを使うがよかと。
実アプリを作れるという意味ではDは未だにバージョンアップのたびに言語仕様を変更して
バックコンパチビリティがないからC#の方が完成度が高いのは間違いないからね。
0411デフォルトの名無しさん2006/09/28(木) 01:34:27
ライブラリもたっぷりだしな。
0412デフォルトの名無しさん2006/09/28(木) 01:36:29
>>410
うん、そうなんだけど
俺もDは陰ながら応援してる身だし、あんまり浮気はしない
この間C++からC#に(何を思ったか)移行しようと思ってた趣味の人間を、Dに引きずりこんだし。

色々あってDは面白いよね

けれどね、コンパイラの設計とコンパイルの実装が食い違っていたりするのは論外なんじゃないかな、
って思い始めてきちゃったんだ


…ああ、全てが崩壊していく(orz
0413デフォルトの名無しさん2006/09/28(木) 01:43:10
俺はC#から移行したいけどとどまってる・・・
0414デフォルトの名無しさん2006/09/28(木) 02:01:09
C#は現状ではネイティブコードに比べて動作が遅いこと・・・
これがVistaになって劇的に改善されるとかだったらC#へ移行するんだけどなぁ
0415デフォルトの名無しさん2006/09/28(木) 02:09:17
>>414
変わらないと思うよ
そして予想だけどあなたの思う「動作が遅い」は数々の恩恵による結果だと思う
04163832006/09/28(木) 02:13:33
ごめん間違い
ライブラリ全体を再ビルドできなきゃならんのか
ソースだけいじってもそらダメだ罠 orz
0417デフォルトの名無しさん2006/09/28(木) 02:23:38
>>396-376
Buildの使い方(日本語)はありませんか?
何をどうやったら

>>8の
自動的にインポート関係を調べてコンパイル/リンクしてくれるツール。

を実現できるのかわからなくて・・・
0418デフォルトの名無しさん2006/09/28(木) 02:35:15
.NETはライブラリの相互利用ができるのがいいよな。
J#のライブラリをC#で使ったり、C#のライブラリをNemerleで使ったり。
0419デフォルトの名無しさん2006/09/28(木) 06:08:53
.NETじゃなくてもOSとCPUが同じならライブラリは使えるけどな。
0420デフォルトの名無しさん2006/09/28(木) 06:28:15
>>415
それは解っているんだが、
ソフトによってはその恩恵よりもスピードが大切なものもあるからな。
原理上難しいのは解るが、少しでも改善されるのであれば、
C#という言語がもっと使えるものになるとは思うけどね。

もうスレ違いなのでsage
0421デフォルトの名無しさん2006/09/28(木) 12:46:39
>>419
WTLをDで使う方法を教えてくれ
0422デフォルトの名無しさん2006/09/28(木) 13:00:10
>>417 使い方
インポート関係を調べる出発点となるファイルが仮に hoge.d だとすると、
(dmdやlinkにPATHが通っている場合は)  build hoge.d  とするだけ。
出発点にする適当なファイルが無いなら、
「importとpragmaだけ書いた .dファイル」を作り、それをbuildに喰わせてもいい。

GUIアプリなら、-gui スイッチを追加。build hoge.d -gui
-name スイッチを付けると、ファイル一覧表示あり。
-T△△△ スイッチを付けると、 △△△.exe として作成。(pragma指定より優先)
-clean スイッチを付けると、ビルド後に.objなどの作業ファイルを削除してくれる。

必要に応じて、ソース中にbuild用のpragmaを書き加えれば、コマンドラインに長々と書かなくて済む。
build用のpragmaは、そのままだとdmdでエラーになるので version(build) でくくる。
例:
version(build) {
  pragma(export_version, hage); //全てのdmdコンパイルに -version=hage を適用
  pragma(build, "resource.rc"); //Dコンパイラ以外で作成するファイル。(動作の詳細はRuleDefinitionFileで指定)
  pragma(build_def, "EXETYPE NT"); //リンカへのオプション
  pragma(build_def, "SUBSYSTEM WINDOWS,4.0"); //リンカへのオプション
  pragma(link,"phobos.lib"); //リンクするもの
  pragma(link,"gdi32.lib"); //リンクするもの
  pragma(target, "fuga"); //ビルドされるファイル名 fuga.exe
}
あとは、WebPage翻訳でも使っておくれ ttp://build.dsource.org/User_Manual.html
0423デフォルトの名無しさん2006/09/28(木) 16:35:23
libgphobosのライセンスってなによ?
0424デフォルトの名無しさん2006/09/28(木) 17:48:05
>>422
ありがトン!
すごくよくわかりました
インポート文を書かなくてもソースリストを渡せばコンパイルしてくれるのかと思った
0425デフォルトの名無しさん2006/09/30(土) 21:43:02
void each(T)(T[] array, void delegate(T x) st) {
  foreach(element; array) {
    st(element);
  }
}

void main() {
  ["abc"[],"xyz","12345"].each( delegate(char[] s) { writefln(s); } );
}
0426デフォルトの名無しさん2006/09/30(土) 22:10:49
void each_idx(T)(T[] array, void delegate(T x, int i) st) {
  foreach(idx, element; array) {
    st(element, idx);
  }
}

void main() {
  int[] a = ([1, 2, 3]);
  a.each_idx( (int x, int idx) { writef(x, (idx<a.length-1) ? "," : "\n"); } );
}

delegate イランカッタノカ...
0427デフォルトの名無しさん2006/09/30(土) 23:27:26
っていうかそんな機能あったんだ・・・シランカッタ
0428デフォルトの名無しさん2006/09/30(土) 23:29:30
Dのclosureの書き方がC++でもつかえたらいいのに
0429デフォルトの名無しさん2006/09/30(土) 23:37:13
そんな機能ってどんな機能だ?
0430デフォルトの名無しさん2006/09/30(土) 23:51:37
↓そんな機能
void p(int i){printf("%d",i);}
100.p();
↑こんな機能
0431デフォルトの名無しさん2006/10/01(日) 00:47:01
配列のみじゃなかった?
0432デフォルトの名無しさん2006/10/01(日) 00:47:54
あれ、クロージャって定義できるんじゃなかったっけ
いかん…Grovyと混ざってるかも
0433デフォルトの名無しさん2006/10/01(日) 01:43:38
>>431
え、そうなんだ。
ってか>>430のコード通らないし。

できればその機能のドキュメント読みたいので参照求みます
0434デフォルトの名無しさん2006/10/01(日) 01:45:32
A a = new A;
a.hoge();
a.hoge;

どっち使ってる?
漏れは戻り値型がvoidならa.hoge()
そうじゃなかったらa.hoge
0435デフォルトの名無しさん2006/10/01(日) 01:49:42
俺は常に a.hoge();
a.hoge; はプロパティ限定と心に決めている。
0436デフォルトの名無しさん2006/10/01(日) 01:52:08
なんで?バカみたい
0437デフォルトの名無しさん2006/10/01(日) 01:52:52
なんで?バカみたい
0438デフォルトの名無しさん2006/10/01(日) 02:09:48
>>435
俺も同じ
0439デフォルトの名無しさん2006/10/01(日) 02:11:30
バカが2人
0440デフォルトの名無しさん2006/10/01(日) 02:34:45
なんで>>435と>>438がバカなのか知りたいです
0441デフォルトの名無しさん2006/10/01(日) 02:39:35
import std.cstream;

int main( char[][] args ) {
  if(args.length == 1) {
    dout.writeLine(args[0] ~ " :デフォルトの名無しさん :2006/10/01(日) 20:32:17");
    dout.writeLine("   アッチョンブリケ!");
  } else {
    dout.writeLine("ぬるぽ");
  }
}
0442デフォルトの名無しさん2006/10/01(日) 02:52:21
漏れも>>435だな

//メソッド呼び出しを意図していることが一見して判る
a.hoge();
//一見しただけではメソッド呼び出しを意図してるのかgetterなのかはたまたメンバ変数なのか区別がつかない
a.hoge;

と曖昧さの回避や混乱の防止などの理由。

>>440
自分が信仰しているコーティングスタイルの教義に反するんだろう。
0443デフォルトの名無しさん2006/10/01(日) 03:45:06
俺も>>435だ
これもコーディング標準で言及して欲しいな
0444デフォルトの名無しさん2006/10/01(日) 03:47:34
Javaも7からはgetter/setterを省略できるようになるらしいしね。
0445デフォルトの名無しさん2006/10/01(日) 03:53:53
メソッドを a.hoge; で呼べること自体どうかと思うんだが。
0446デフォルトの名無しさん2006/10/01(日) 04:17:15
Rubyだとクラス側でのgetter/setter定義を一言でできる
ようになってたと思うけど、444の言うもそれなんかな。

Dの、メンバ変数かgetter/setterかの自由を保留できる
やり方は、getter/setter定義の省略よりも素直な感じが
するなあ。どっちでも最適化されるだろうとはいえ、意味上は。

>>445
呼べるようにしてあるのは、get/setとメンバ変数の区別を、
呼び出し側においてしなくてすむようにするため、だったはず。
という話じゃなくて、442のa.hoge;みたいな記述はコンパイラで
エラーにしろよ、という話なのかな。
0447デフォルトの名無しさん2006/10/01(日) 04:54:25
>>445
pascalは引数無しの手続きや関数をそうやって書ける。
Dの場合はsmalltalkのアクセサと同じ感覚の方での使い方なんだろうけどね。
0448デフォルトの名無しさん2006/10/01(日) 05:45:56
// getter
int x = a.hoge;
// setter
a.hoge = 10;
// method
a.hoge(); // a.hoge;でも呼べてしまう

methodをa.hoge;で呼べてしまうのはgetterの()を省略できる仕様の弊害だと思う
弊害の方には目をつぶっている?
戻り値があるmethodとgetterの区別を付けるうまい方法があればいいんじゃね?
0449デフォルトの名無しさん2006/10/01(日) 05:47:28
戻り値がvoidのときだけ()省略を禁止するのもなんか不公平だし
完全に解決できてないし
0450デフォルトの名無しさん2006/10/01(日) 06:36:26
ゲッターとセッターを使ったらpublicなメンバ変数との区別が・・・・・・付かなくて良いのか?
0451デフォルトの名無しさん2006/10/01(日) 06:46:55
Dは楽しそうな機能がいっぱいだね。
0452デフォルトの名無しさん2006/10/01(日) 06:47:40
むしろ区別が付かないことを狙っている
0453デフォルトの名無しさん2006/10/01(日) 06:48:36
>>452 なるほど、納得
0454デフォルトの名無しさん2006/10/01(日) 07:23:28
せっかくだからと使ってみたらなにかといらいらする仕様だなscopeはw
名前もscopeoutとかfailoutとか,構文だって他にあるだろうに

try{
scope(exit) { writef("scopeout"); writefln();}; // 最後の;はなくてもいいらしいがなんでやねん
cope(failure) writefln("failout"); // ;必要
scope(success) writefln("successout"); // ;必要
writefln("foo");
throw new Exception("exception");
}
catch(Exception e){
writefln(e);
}

>>実行結果
foo
failout
scopeout
exception
0455デフォルトの名無しさん2006/10/01(日) 07:25:11
あ
sが抜けた
0456デフォルトの名無しさん2006/10/01(日) 07:48:23
failoutとかはやめて欲しい気持ちで一杯です。見にくいです。
普通にscope(i)で良いと思います。
あと、このコードの
scope(exit) { writef("scopeout"); writefln();};
最後の;は普通に要らんと思います。
0457デフォルトの名無しさん2006/10/01(日) 08:30:38
きっと普段から
for(;;){
};
とか
while(...){
};
とか書いてる馬鹿だろうから放置しる
0458デフォルトの名無しさん2006/10/01(日) 11:16:00
>>454
イライラするって ; だけ?アホ?

文と式の区別もつかないバカは死んだらいいよ。
0459デフォルトの名無しさん2006/10/01(日) 11:20:39
>>454
せっかくだからって…closeだとかSDL_termだとかで必要な時に使えよ…
0460デフォルトの名無しさん2006/10/01(日) 12:03:38
これはもうVB厨の俺の出番だと思ってやってきました
すでに()の省略やプロパティなんかは10数年以上の歴史を持ってますよと
さらにいえばプロパティはメソッドの糖衣構文ですよと
0461デフォルトの名無しさん2006/10/01(日) 14:08:57
>>458
まぁ苛々しすぎてるのはお前のほうだけどなw
0462デフォルトの名無しさん2006/10/01(日) 14:17:46
>>461
はいはい。意味不明君は帰ろうね
0463デフォルトの名無しさん2006/10/01(日) 14:21:51
>>462
ほんとにすげー苛々してるなw
薬はちゃんと飲めよ。勝手な判断で飲まないと悪化するからな。
0464デフォルトの名無しさん2006/10/01(日) 14:24:32
>>461-463
お前ら全員帰れ。つまらない事でスレ消費すんな
0465デフォルトの名無しさん2006/10/01(日) 14:25:32
朝鮮人同士が罵りあうスレはここですか?
0466デフォルトの名無しさん2006/10/01(日) 14:27:35
     ,' / /              やっつぁっつぁぱれびっぱれらんらんびっぱりりんらんぴちたんるんらー
      |  //ヘ-‐ '´ ̄ ̄`ヽ、
       |  /  / /" `ヽ ヽ  \  りぴたりるんらーるっぱりるぴらんこれかんろっかやきりかんぐー
   三  |   //, '/     ヽハ  、 ヽ
  / 三 .L 」 ミ{_{`ヽ   ノ リ| l │ i| まっちゃっちゃーやりびだりりんらびりちたんりんらんでんらんどー
X /   | | .レ!小l●    ● 从|、i|
 /     | | ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│ あばりっかったーばりっぱりーばりびりびりびりすてんてんどんどん
       /´`'J __|ヘ   ゝ._)   j /⌒i !
. ―   ヽ._人::::| l>,、 __, イァ/  /│やばりんらすてんらんてんやろーわらぶどぅぶどぅぶどぅぶどぅぶどぅーやぶー
.  ― ミ ノ ノ:::::/| /ヾ:::|三/::{ヘ、__∧ |   
   ミ (_/`ヽ< | | /ヾ∨:::/ヾ:::彡' | わでぃーだんりんらんせんらんどぶだけだげだげどぅーどぅーでーやどー
0467デフォルトの名無しさん2006/10/01(日) 14:29:47
ついにファビョったw
0468デフォルトの名無しさん2006/10/01(日) 14:34:50
やっつぁっつぁぱれびっぱれらんらんびっぱりりんらんぴちたんるんらー
      |  //ヘ-‐ '´ ̄ ̄`ヽ、
       |  /  / /" `ヽ ヽ  \  りぴたりるんらーるっぱりるぴらんこれかんろっかやきりかんぐー
   三  |   //, '/     ヽハ  、 ヽ
  / 三 .L 」 ミ{_{`ヽ   ノ リ| l │ i| まっちゃっちゃーやりびだりりんらびりちたんりんらんでんらんどー
X /   | | .レ!小l●    ● 从|、i|
 /     | | ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│ あばりっかったーばりっぱりーばりびりびりびりすてんてんどんどん
       /´`'J __|ヘ   ゝ._)   j /⌒i !
. ―   ヽ._人::::| l>,、 __, イァ/  /│やばりんらすてんらんてんやろーわらぶどぅぶどぅぶどぅぶどぅぶどぅーやぶー
.  ― ミ ノ ノ:::::/| /ヾ:::|三/::{ヘ、__∧ |   
   ミ (_/`ヽ< | | /ヾ∨:::/ヾ:::彡' | わでぃーだんりんらんせんらんどぶだけだげだげどぅーどぅーでーやどー
0469デフォルトの名無しさん2006/10/01(日) 14:35:03
これがゆとり教育の成果か…orz
0470デフォルトの名無しさん2006/10/01(日) 14:36:11
やっつぁっつぁぱれびっぱれらんらんびっぱりりんらんぴちたんるんらー
      |  //ヘ-‐ '´ ̄ ̄`ヽ、
       |  /  / /" `ヽ ヽ  \  りぴたりるんらーるっぱりるぴらんこれかんろっかやきりかんぐー
   三  |   //, '/     ヽハ  、 ヽ
  / 三 .L 」 ミ{_{`ヽ   ノ リ| l │ i| まっちゃっちゃーやりびだりりんらびりちたんりんらんでんらんどー
X /   | | .レ!小l●    ● 从|、i|
 /     | | ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│ あばりっかったーばりっぱりーばりびりびりびりすてんてんどんどん
       /´`'J __|ヘ   ゝ._)   j /⌒i !
. ―   ヽ._人::::| l>,、 __, イァ/  /│やばりんらすてんらんてんやろーわらぶどぅぶどぅぶどぅぶどぅぶどぅーやぶー
.  ― ミ ノ ノ:::::/| /ヾ:::|三/::{ヘ、__∧ |   
   ミ (_/`ヽ< | | /ヾ∨:::/ヾ:::彡' | わでぃーだんりんらんせんらんどぶだけだげだげどぅーどぅーでーやどー
0471デフォルトの名無しさん2006/10/01(日) 14:37:04
マジレスしてバカを見るスレはここですか?
0472デフォルトの名無しさん2006/10/01(日) 14:37:29
やっつぁっつぁぱれびっぱれらんらんびっぱりりんらんぴちたんるんらー
      |  //ヘ-‐ '´ ̄ ̄`ヽ、
       |  /  / /" `ヽ ヽ  \  りぴたりるんらーるっぱりるぴらんこれかんろっかやきりかんぐー
   三  |   //, '/     ヽハ  、 ヽ
  / 三 .L 」 ミ{_{`ヽ   ノ リ| l │ i| まっちゃっちゃーやりびだりりんらびりちたんりんらんでんらんどー
X /   | | .レ!小l●    ● 从|、i|
 /     | | ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│ あばりっかったーばりっぱりーばりびりびりびりすてんてんどんどん
       /´`'J __|ヘ   ゝ._)   j /⌒i !
. ―   ヽ._人::::| l>,、 __, イァ/  /│やばりんらすてんらんてんやろーわらぶどぅぶどぅぶどぅぶどぅぶどぅーやぶー
.  ― ミ ノ ノ:::::/| /ヾ:::|三/::{ヘ、__∧ |   
   ミ (_/`ヽ< | | /ヾ∨:::/ヾ:::彡' | わでぃーだんりんらんせんらんどぶだけだげだげどぅーどぅーでーやどー
0473デフォルトの名無しさん2006/10/01(日) 14:38:54
やっつぁっつぁぱれびっぱれらんらんびっぱりりんらんぴちたんるんらー
      |  //ヘ-‐ '´ ̄ ̄`ヽ、
       |  /  / /" `ヽ ヽ  \  りぴたりるんらーるっぱりるぴらんこれかんろっかやきりかんぐー
   三  |   //, '/     ヽハ  、 ヽ
  / 三 .L 」 ミ{_{`ヽ   ノ リ| l │ i| まっちゃっちゃーやりびだりりんらびりちたんりんらんでんらんどー
X /   | | .レ!小l●    ● 从|、i|
 /     | | ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│ あばりっかったーばりっぱりーばりびりびりびりすてんてんどんどん
       /´`'J __|ヘ   ゝ._)   j /⌒i !
. ―   ヽ._人::::| l>,、 __, イァ/  /│やばりんらすてんらんてんやろーわらぶどぅぶどぅぶどぅぶどぅぶどぅーやぶー
.  ― ミ ノ ノ:::::/| /ヾ:::|三/::{ヘ、__∧ |   
   ミ (_/`ヽ< | | /ヾ∨:::/ヾ:::彡' | わでぃーだんりんらんせんらんどぶだけだげだげどぅーどぅーでーやどー
0474デフォルトの名無しさん2006/10/01(日) 14:42:27
何度聴いても
 まっちゃっちゃー
じゃなくて
 らっつぁっつぁー
0475デフォルトの名無しさん2006/10/01(日) 14:44:16
とりあえず荒らしを止めるおまじないを

天安門 自由 台湾 独立 法輪功 虐殺 人権 蛇頭 臓器
0476デフォルトの名無しさん2006/10/01(日) 15:22:31
454が暴れてるのか?
0477デフォルトの名無しさん2006/10/01(日) 15:23:34
>>463
イライラしてるのも、薬を飲まないといけないのもお前だろ・・・
0478デフォルトの名無しさん2006/10/01(日) 15:28:41
>>476
462
0479デフォルトの名無しさん2006/10/01(日) 15:29:47
実は461==462説
0480デフォルトの名無しさん2006/10/01(日) 15:30:41
>>478
俺じゃないので454だな。
0481デフォルトの名無しさん2006/10/01(日) 15:32:03
不毛だって分かってるだろが。
0482デフォルトの名無しさん2006/10/01(日) 15:32:27
自演乙
0483デフォルトの名無しさん2006/10/01(日) 15:34:01
かるしうむがたりないんだな
0484デフォルトの名無しさん2006/10/01(日) 15:40:10
>>475
ワロタww
0485デフォルトの名無しさん2006/10/01(日) 16:00:13
脳がとろけてると、なんにでも笑えるんだね
0486デフォルトの名無しさん2006/10/01(日) 16:07:36
脳が硬くなって滅多に笑わなくなるよりまし。
0487デフォルトの名無しさん2006/10/01(日) 16:32:52
>>485
もしかしてお前欝気味?
04884542006/10/01(日) 17:44:11
おまいらおはよう.
俺のせいでえらいことになってるな・・・すまん.
scope(i)と括弧をまたいでiも含めてキーワードになってるのが気持ち悪かったんだ.他にそんなのあったか?
セミコロンはfor&whileの後の{}と同じだったんだな・・・()が気持ち悪くて気づかんかった・・・単文のときはそりゃいるだろ,俺のばかー.
あとせっかくだからっていうのは存在を忘れ去られている機能じゃないかと思ってたよ・・・
0489デフォルトの名無しさん2006/10/01(日) 17:51:18
>>488
キーワードってか予約語はscopeだけ。extern(C)とかと同じ。括弧内は特別扱いは少しキモいかもね。if(auto i=true)は通るのにwhile(auto i=getLog())は通らなかったり…
0490デフォルトの名無しさん2006/10/01(日) 18:15:19
>>487
もしかしてお前脳トロ?
0491デフォルトの名無しさん2006/10/01(日) 18:29:14
>>490
脳トロってなんかおいしそうじゃね?
0492デフォルトの名無しさん2006/10/01(日) 18:55:21
>>491
美味しいよ?中国では一般的な食べモノ
0493デフォルトの名無しさん2006/10/01(日) 18:56:37
日本人は低能知能なのには呆れますね。
私達中華人民はあなたたちの掲示板を拝見して笑ってみてますよ。ではありがとうございました。
0494デフォルトの名無しさん2006/10/01(日) 19:02:38
カニ味噌を思い出した。それだけ。
0495デフォルトの名無しさん2006/10/01(日) 19:05:11
天安門 自由 台湾 独立 法輪功 虐殺 人権 蛇頭 臓器
0496デフォルトの名無しさん2006/10/01(日) 19:19:16
チベット ダライ・ラマ ウイグル 東トルキスタン 中国六四真相 六四事件
0497デフォルトの名無しさん2006/10/01(日) 19:29:48
454のおかげでD言語スレは荒れ果てましたな。ご苦労。
0498デフォルトの名無しさん2006/10/01(日) 19:35:32
>>497
あれ俺だけじゃないの雇われたのって
0499デフォルトの名無しさん2006/10/01(日) 19:51:22
>>498
はい、雇われたと妄想してるのはあなただけじゃないですよ
0500デフォルトの名無しさん2006/10/01(日) 19:54:18
>>499
先客がいるならやることないや。それじゃ
0501デフォルトの名無しさん2006/10/01(日) 20:09:17
はい、それでは。次に妄想派遣される時は、日曜は休みにしてもらった方がいいですよ。
0502デフォルトの名無しさん2006/10/01(日) 20:16:25
変数の参照を返すってどうやればいい?
受け取る時はinout指定すればいいみたいなんだけど……。
0503デフォルトの名無しさん2006/10/01(日) 20:20:07
>>502
日本語でおk

int* test(){
  int i=1;
  return &i;
}
ってこと?
0504デフォルトの名無しさん2006/10/01(日) 20:28:13
>>503
ごめん、そういうこと(勿論ローカル変数じゃないけども)。
C++だとint&で返せたんだけども、やっぱりポインタ使う形になるのか。
0505デフォルトの名無しさん2006/10/01(日) 20:55:41
天安門 自由 台湾 独立 法輪功 虐殺 人権 蛇頭 臓器
0506sage2006/10/01(日) 22:14:06
ようやくお手製XMLパーサがまともに動くようになってきた。
完成までもう少しかもしれん。
0507デフォルトの名無しさん2006/10/01(日) 22:16:41
インタフェースベースで開発しろよ。↓のようにしとけば、今後の互換性も大丈夫だ。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/org/w3c/dom/package-summary.html
0508デフォルトの名無しさん2006/10/01(日) 22:17:21
DOMみたいなかんじ?SAXみたいなかんじ?
0509デフォルトの名無しさん2006/10/01(日) 22:20:12
StAX作って欲しいな。Java6から登場するんだが、あれはいい。
0510デフォルトの名無しさん2006/10/01(日) 22:21:20
天安門 自由 台湾 独立 法輪功 虐殺 人権 蛇頭 臓器
0511sage2006/10/01(日) 22:47:45
今はSAXみたいなかんじというよりはSAXを実装している様な感じ。
0512デフォルトの名無しさん2006/10/01(日) 22:52:14
なんだSAXか・・・。ショボ
0513sage2006/10/01(日) 22:54:40
StAXは知らないからな。今、見てみたけど作れるだろうよ。
0514デフォルトの名無しさん2006/10/01(日) 23:01:46
イテレータを使ってXMLを走査するって感じなのかな?>StAX
0515デフォルトの名無しさん2006/10/01(日) 23:11:18
まさにそんな感じ。あれはゲーム屋とかが喜ぶ規格だな。
0516デフォルトの名無しさん2006/10/02(月) 00:26:26
ちょっと聞きたいんだけど、
テンプレートを明示的に実体化して、.objに出力することはできる?

自作ライブラリの中で
template LimitCalc(T)
{
  T plus(T n, T m) { ... }
}

みたいなのを使って、.libにまとめた後アプリにリンクしようとすると

hello.obj(hello)
Error 42: Symbol Undefined _D3dgl4math16__T9LimitCalcTiZ4plusFiiZi

ていうのがいつも出てくる
0517デフォルトの名無しさん2006/10/02(月) 01:11:37
無理。templateは、C言語などでのプリプロセッサみたいなものだから、
コンパイル時にのみ意味がある。リンクの時には無意味。
0518デフォルトの名無しさん2006/10/02(月) 06:12:00
これより
enum ABC : uint { A=3, B, C }
これの方が
typedef uint ABC = 3;
enum : ABC { A=ABC.init, B, C }
好きなんだがどう思う?
05195162006/10/02(月) 10:05:34
>517
言葉が足りなかった。
いや、テンプレートそのものをライブラリに出来ないのはわかってる。

そうじゃなくて、(LimitCalc!(int).plus(int,int)みたいに)
特殊化済みの状態のテンプレートを.objに出力したい。

dmdの仕様なのか、-cオプションで出てくる.objにはテンプレートの実体
(_D3dgl4math16__T9LimitCalcTiZ4plusFiiZi みたいなの)が
出力されてこないんだよ。
0520デフォルトの名無しさん2006/10/02(月) 12:12:59
コードを出力したいだけならインスタンス化するダミーを入れればいいんじゃないの?
でもそんなコトするのになんの意味があるのだろう?
テンプレートを import しないで使う理由がわからん。
0521!= 5162006/10/02(月) 15:09:03
>>520
テンプレートを使ったコードをライブラリにするとリンクエラーが起こるって話だよ。
ライブラリにしないで普通にコンパイルするとうまくいくから、コンパイラのバグだと思うんだけど。

>>519
俺も散々悩まされてるんで、いろいろやっているのだけど、決め手になるものは無い状態。
確認している症状としては、
1.ライブラリのテンプレートの中で可変数引数の関数を使うとだめ。
2.デバッグビルドでTypeInfo系のシンボルが生成されない。
3.ライブラリのテンプレートの中でmixinを使うとシンボルが生成されない。
4.ライブラリの中でテンプレートの特殊化を使うとシンボルがめちゃくちゃになる。
って感じ。
一応の対処法としては、ライブラリのコードをテンプレートで包んでミックスインするというのがあるけど、あまり美しくない。
ライブラリにしない状態と同じになるから、うまくいくことはいくのだけれど。
0522デフォルトの名無しさん2006/10/02(月) 15:43:18

そんなにバグあるのか・・・。
っていうか、リンカやライブラリアンじゃなくてコンパイラなの?
0523デフォルトの名無しさん2006/10/02(月) 16:15:32
試してみた。Windows(dmd)でリンクエラー、Linux(dmd,gdc)リンクOKだった。
05245212006/10/02(月) 16:49:13
>>522
例えば、hoge.dで521のようなことをしているとして、
dmd hoge.d main.d
だとうまくいくが、
dmd -c hoge.d
dmd -c main.d
dmd hoge.obj main.obj
とするとリンクエラーになる。
なんでだと思って、生成されるhoge.objを比べてみると、それ自体の中身が違ってたりする(リンクすべき対象が無い)。
だから、コンパイラの方なんじゃないかと。
リンクすべき対象が無ければリンクエラーになるのは当たり前なんで、リンカに罪はないと思う。

>>523
うまくいかないのはWindows環境だけか。
なるほど。
0525デフォルトの名無しさん2006/10/02(月) 16:59:34
あ、すまない。ほんとにlib作って試してた・・・。
winのdmツールはじめて使ったのでもしかしたら、使い方まちがってただけかもしれん・・・。
05265162006/10/02(月) 20:06:33
>>521
ありがとう。現状では根本解決はできないのか。
というか、他にそんなバグがあったなんて知らなかった。

>>523
gdcではOKなのね。コンパイラ関係なのは判ってたから、そっちでは
問題ないかもと思っていたんだが、検証thx。
0527デフォルトの名無しさん2006/10/03(火) 11:55:00
D 0.168

#dmd.zip落とそうとしたら0KBのが落ちてきたのでftp経由でdmd.168.zip落とした
0528デフォルトの名無しさん2006/10/03(火) 12:26:08
D 0.168
Oct 2, 2006
New/Changed Features

* Added .ptr property for delegates.
* Added .outer property for nested class instances.
* Can now initialize stack variables with array literals.
* Array literals can now be cast to [][] types.
* Mixins can now insert multiple destructors.
0529デフォルトの名無しさん2006/10/03(火) 12:43:54
win32.windowsが落ちるアレは未だに直ってないけどそもそも報告されてんのかな
0530デフォルトの名無しさん2006/10/03(火) 13:08:11
>>529
win32.windowsって、どこにあるファイル?
0531デフォルトの名無しさん2006/10/03(火) 13:16:00
例外がthrowされた行を突き止めたいんだけど、無理?
0532デフォルトの名無しさん2006/10/03(火) 13:52:08
>>529
>7のやつを使っとけ
今やDのWindowsAPIのバインディングはそっちが標準だから
0533デフォルトの名無しさん2006/10/03(火) 14:45:04
>>531
今でも動くかはしらんが
http://www.digitalmars.com/d/archives/digitalmars/D/32313.html
をねじこめば。
0534デフォルトの名無しさん2006/10/03(火) 16:54:39
>>532
スマソ。
そっちの話じゃなくて落ちる原因

//再現コード
const int fooSize = Foo.sizeof;
struct tagFoo {}
alias tagFoo Foo;
void main(){}

の方が未だに直ってないねって話。
0535デフォルトの名無しさん2006/10/03(火) 18:39:22
通らない…
template test(char[] val){
  const char[] test=val;
}

mixin test!(['a','b','c']);
0536デフォルトの名無しさん2006/10/03(火) 19:10:11
通らない…
template test(char[] val){
  const ubyte[] test=cast(ubyte[])val;
//  const char[] test=val;
}

const char[] t=[cast(char)1,2,3,4];

int main(char[][] args){
  writefln("%d",test!(t)[0]);
  return 0;
}
0537デフォルトの名無しさん2006/10/03(火) 19:30:53
通らない…
void main(){
  writefln([1,2,3]~2);
}
0538デフォルトの名無しさん2006/10/03(火) 20:33:47
535, 536 は前スレの 799 と同じ原因のような気がする。

const char[] c = ['0'];
switch(hoge){
case c:
break;
}
がエラーになるがらみの。
0539デフォルトの名無しさん2006/10/04(水) 08:34:38
phobosのrandomになんでMTは使ってないの?
効率的なら使えばいいのにとか思う。
0540デフォルトの名無しさん2006/10/04(水) 19:02:36
重いから
0541デフォルトの名無しさん2006/10/04(水) 22:59:54
軽いんじゃなかったっけ?
いや、俺>>539じゃないしよく知らんけど。
0542デフォルトの名無しさん2006/10/04(水) 23:28:41
>>541
ここが参考になる
http://www.emit.jp/mt/mt.html
0543デフォルトの名無しさん2006/10/05(木) 15:25:13
初期化が重い
あとメモリーを食いすぎる
複数の乱数原を使うときはキャッシュの利用効率が悪くなる
0544デフォルトの名無しさん2006/10/05(木) 16:31:34
MTはデフォの線形合同法よりは遅いしメモリも喰うけど
質のいい乱数生成法の中では軽いほうだし
線形合同法の質の悪さを考えたら普通はMTを選ぶと思うな
0545デフォルトの名無しさん2006/10/05(木) 17:01:00
gdcはgcc-4.1.1には対応してないのか・・・

対応して欲しいな…
0546デフォルトの名無しさん2006/10/05(木) 17:15:08
>>542-543
なる。サンクス。
まあ今のrandomはマルチスレッドにも非対応ってことだし、アルゴリズムも含めて暫定的な実装なのかな。
0547デフォルトの名無しさん2006/10/05(木) 18:08:13
ttp://www.denen.org/
みんな知ってるのかもしれないけどMT実装あるみたい。
randomは修正BSDらしいからstd.randomが気にくわない人は使うといいかと思われる。
0548デフォルトの名無しさん2006/10/05(木) 18:41:15
ていうかここのCコードから普通に移植できるだろ
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html
0549デフォルトの名無しさん2006/10/05(木) 19:33:01
DってCのコード通らないの?
0550デフォルトの名無しさん2006/10/05(木) 19:44:07
って言うか、ABAさんのゲームのソースにDにポーティングしてあるヤツが入ってる。
0551デフォルトの名無しさん2006/10/05(木) 21:00:19
質問なんですが
class AAA {
  private char[] m_key;
  this( char[] key ) { m_key = key; printf("this\n"); }
  ~this() { printf("~this\n"); }
  void value1( int v ) {
    scope(exit) delete this;
    printf("%.*s - %d\n",m_key,v);
  }
  int value2() {
    scope(exit) delete this;
    return m_key.length;
  }
}

AAA foo( char[] key ) {
  return new AAA( key );
}

void main() {
  foo("xxx").value1 = 100;
  printf("%d\n", foo("abcdefg").value2 );
  printf("end\n");
}

こなかんじで class AAA はセッター/ゲッターに
データを引き渡す為だけの一時的なクラスである場合、
セッター/ゲッター内で scope(exit) delete this; とするのはマズイでしょうか?
0552デフォルトの名無しさん2006/10/06(金) 00:47:43
>>7のwin32.windowsがやっと動かせたんだけど
すんなり動く方法があったりしますか?

まずコンパイラがerror_status_tが見つからないっていうから
rpcndr.d (377あたり) : alias ulong error_status_t;// 追加 ulongでok?

ここからwin32.libを持ってくる
ttp://hp.vector.co.jp/authors/VA028375/d/windows.h.html
ソースのmain.dもこれをベースにして作った
ただし CreateWindow はリンクエラーになったんで CreateWindowEx にした

Gdi32.lib と win32.def も用意して最後に
dmd main.d Gdi32.lib win32.lib win32.def -version=Unicode

ちなみにANSIビルドはまだ成功していない
0553デフォルトの名無しさん2006/10/06(金) 01:08:09
>>552
なんでwin32.libがいるの?
そんなのリンクするからエラーなるんじゃないの?
0554デフォルトの名無しさん2006/10/06(金) 06:03:49
>>552
>>7はソースからwin32.libをビルドして使うものだよ
0555デフォルトの名無しさん2006/10/06(金) 08:03:42
あー…仕事が終わったらやり直します
ありがトン
0556デフォルトの名無しさん2006/10/06(金) 18:54:05
Streamを配列のように扱えるクラスを作ったんだがどんな名前付ければいいかわからない…
なんかいい名前ないか?
0557デフォルトの名無しさん2006/10/06(金) 19:00:46
StreamAbsoluteとか。
0558デフォルトの名無しさん2006/10/06(金) 19:03:42
myStream
0559デフォルトの名無しさん2006/10/06(金) 21:07:25
RamdomAccessStream
0560デフォルトの名無しさん2006/10/06(金) 22:01:04
逆なら理解できるんだが、Streamを配列にであってるの?
Strean配列をひとつのStreamにってのならやったことある。
0561デフォルトの名無しさん2006/10/06(金) 22:30:37
RamdomAccess ってもはや Stream ではないな
0562デフォルトの名無しさん2006/10/06(金) 22:36:22
BufferingStream
0563デフォルトの名無しさん2006/10/06(金) 22:59:05
単純にArrayStream
0564デフォルトの名無しさん2006/10/06(金) 23:00:57
ようはデフォルトでスキップ機能が使えるってことだろ?
ary[0]とすれは毎回違う値が1バイトずつとれてary[3]とすれば3バイトスキップするわけだ
0565デフォルトの名無しさん2006/10/06(金) 23:03:15
>>564
そうじゃなくてary[10]とかしたら10まで読み込んでなければ10まで読み込むって感じじゃね?
0566デフォルトの名無しさん2006/10/06(金) 23:04:48
どっちかというと、配列要素でseekするもんだと思ってた。

sr = new StreamHoge(source);
sr[0].read(b); // 先頭から
sr[sr.length-1].read(b); // 最後のバイト

みたいなイメージだったんだけど。
0567デフォルトの名無しさん2006/10/06(金) 23:08:12
>>565
10要素目以前にEOFが来てたら例外とか?
0568デフォルトの名無しさん2006/10/06(金) 23:09:31
>>566
なるほどね。でも普通にランダムアクセス用だな。
05695662006/10/06(金) 23:25:13
seekして、自分の参照を返すって実装だと簡単にできそうだし、、、
05705552006/10/07(土) 02:32:31
win32.libは自分で作ると教えてもらったので
build windows winuser winbase winnt winver windef -full -clean -names -Twin32.lib
で作ってちゃんと動いたんですけど
最小構成のwin32.libってどれだけのソースをリンクしておくものなんでしょうか?
buildが必要なソースを探してコンパイルしにいってくれるようにオプションを設定できないのかなと悪戦苦闘中
0571デフォルトの名無しさん2006/10/07(土) 12:30:33
>>570
ヘッダファイルなんだから、わざわざlibを作るもんじゃないんだよ。
仮に作るとしたら、Unicode版、ANSI版、各OS版、各IE版・・・っと
多数の版を作り分けてしないと駄目だし、版を間違えずにリンクする必要もある。
どうせ中身は、constと#defineマクロを関数化したものしか入ってないlibなんだし、作るだけ無駄。
main.d の中に、
 version(build) pragma(export_version, Unicode);
 version(build) pragma(export_version, Windows2000);
と、作りたいversion書いて。
build main.d -gui
でOK。 win32.w32api.d 参照。

>>552
>まずコンパイラがerror_status_tが見つからないっていうから
>rpcndr.d (377あたり) : alias ulong error_status_t;// 追加 ulongでok?
rpcndr.d (22) の、private import に win32.basetyps を追加する。ちなみに…uintが正解。
0572デフォルトの名無しさん2006/10/07(土) 14:50:41
>>571
そのやり方だとコンパイルするたびにwindows.d以下大量のファイルをコンパイルすることになるから、時間の無駄だな。
まあ、Dはコンパイルが速いからたいしたことは無いだろうけど。
build.exeを使うことを強制させられるのも嫌な感じ。
0573デフォルトの名無しさん2006/10/07(土) 15:04:46
これと
func( 1, 2 );
これ
func(1, 2);
どっちが好き?
0574デフォルトの名無しさん2006/10/07(土) 15:16:22
俺コーディング規則は下。
下の方がわかりやすいから。
0575デフォルトの名無しさん2006/10/07(土) 15:16:57
俺も下
0576デフォルトの名無しさん2006/10/07(土) 15:26:18
同じく
0577デフォルトの名無しさん2006/10/07(土) 15:55:27
右に同じ。
ついでにタブよりスペース派。
0578デフォルトの名無しさん2006/10/07(土) 16:18:36
死ね。
スペースインデント死ね。
ああ死ね。

俺はタブとスペース両用。
0579デフォルトの名無しさん2006/10/07(土) 16:20:14
>>578
お前が一番最悪じゃねーかw

そういやタブインデントかつ80字改行のプロジェクトに居たことがある
これだからドザはwとか思ったよ。俺もドザだけど。
0580デフォルトの名無しさん2006/10/07(土) 16:26:01
行頭はタブで=とか揃えたいときスペースは駄目かな。
0581デフォルトの名無しさん2006/10/07(土) 16:34:31
スペースインデントにどーゆー利点が・・・
0582デフォルトの名無しさん2006/10/07(土) 16:35:09
表示がエディタに依存しない。
0583デフォルトの名無しさん2006/10/07(土) 16:39:36
つーか、今時のエディタとか統合環境では、スペースインデントがデフォですよ?

rubyのソースは、タブとスペースがまざってて切れそうになった。
rubyは好きだけど
0584デフォルトの名無しさん2006/10/07(土) 16:50:47
TABでよくね?相互変換汁
0585デフォルトの名無しさん2006/10/07(土) 17:12:13
タブは4スペース派と8スペース派がいるからなあ
スペースが一番無難じゃね?
0586デフォルトの名無しさん2006/10/07(土) 17:16:55
80行ルール=CUIでも参照されるってことだから
それをタブインデントと組み合わせるのはおかしい。
GUIばりばりならタブのほうが使い勝手がいい。
0587デフォルトの名無しさん2006/10/07(土) 17:30:52
正直D言語と直接関係ない宗教論争は勘弁
0588デフォルトの名無しさん2006/10/07(土) 18:43:51
80行じゃなくて80桁だな
0589デフォルトの名無しさん2006/10/07(土) 18:49:08
class A
{
class B {
}

class C {
B b = new B;
}
}

これが通らないのって仕様?
outer class A 'this' needed to 'new' nested class B
だそうなんだが、アウタークラスはBと共通なんだから、Cが持ってるAのthisポインタを渡してくれても良さそうなもんじゃね?
なんか理由があるのか?
0590デフォルトの名無しさん2006/10/07(土) 19:06:36
つーか上みたいなコード書くまでもなくネストクラスは自分自身もnewできないのか……。
0591デフォルトの名無しさん2006/10/07(土) 19:32:54
>>589
?

static class A{
  static class B{}
  class C {
    static B b;
    static this(){
       b= new A.B;
    }
  }
}
0592デフォルトの名無しさん2006/10/07(土) 19:49:41
>>591
や、staticじゃなくてもouterが共通なら生成できても良いんじゃないか?って話。
で今はできないようになってるけどもそれには何か理由があるのかなあと。
0593デフォルトの名無しさん2006/10/07(土) 20:06:17
>>592
エラーメッセージがおかしいから混乱してるのだろうけど、newしたかったらthisかstatic thisでしろって話だわな。
class A{
  class B{
  }
  static class C{
    static B b;
  }
  this(){
    C.b = this.new B;
  }
}
0594デフォルトの名無しさん2006/10/07(土) 20:49:31
できた。ハズいw
>>593
丁寧にサンクス。
0595デフォルトの名無しさん2006/10/07(土) 23:11:43
http://upload.geckodev.org/upfile/mem_d.txt
もうだれかがやってるだろうけどこんな物作ってみた。builtin関数のような物の作成にはコンパイル時ループとかもっと色々欲しい所。
0596デフォルトの名無しさん2006/10/08(日) 04:48:04
>>584
スペースでいいと思う。
Tabの理由がみつからない
0597デフォルトの名無しさん2006/10/08(日) 06:47:32
>>596
コードの書き(読み)手が好きな幅で見れる。
でもその場合、「TAB = 固定nスペース」と思ってるやつは死ねば良いと思うし、
インデントをTABで固定しなきゃなんない。
それでもメリットがデメリットを上回っていると思っている。
0598デフォルトの名無しさん2006/10/08(日) 06:55:15
>>597
func(longlongargument1,
longlongargument2,
longlongargument3);
なんてときに、longlong...の開始位置を縦でそろえるのは
タブインデントじゃ不可能だよね。
 > インデントをTABで固定しなきゃなんない。
というのもそうだけど、インデント幅が常に固定というのも
また不便だよ。
0599デフォルトの名無しさん2006/10/08(日) 07:27:06
そもそもそろえることにどれだけ意味があるかという話もあるが
func(で改行すればタブインデントでも縦にそろいます。
0600デフォルトの名無しさん2006/10/08(日) 07:37:20
>>597
・人によってタブ幅が変わる
・環境(エディタの設定等)によってタブ幅が変わる
・TAB=固定nスペースと思ってるやつがけっこういる
以上の欠点より、Tabである必要はない。
0601デフォルトの名無しさん2006/10/08(日) 07:38:43
>>598
統合環境なら、スマートインデントっつー機能があって、
適切なタブ+スペースに自動変換してくれる
けど、タブ幅変えたら、くずれるから、スペースインデントでしか実質使えないけどね
0602デフォルトの名無しさん2006/10/08(日) 08:31:47
>>599
> func(で改行すればタブインデントでも縦にそろいます。
TABを使うには、縦に間延びさせる必要があるってことだな。

 printf("%.*s=%d", longlongnamestr,
             longlongnameval);
という書式指定文字列以外の引数を揃える意図のインデントは、
 printf("%.*s=%d",
   longlongnamestr,
   longlongnameval);
というように '(' の直後が改行じゃないという、 "func(" 直後に改行する、
という599のルールとは一貫性がないTABインデントをするか、
 printf(
   "%.*s=%d",
     longlongnamestr,
     longlongnameval);
のように、TABインデントのためだけに間延びすることを許容
しなきゃいけないな。

TABインデントは、「適当にTABでインデントされてりゃ十分だよ」
という人のための手段なわけだな。


まあ、字幅が等幅な環境を前提にしない場合はTABで十分なわけで、
「TABインデントで皆我慢しておけ」というのはある程度合理的だとは思う。
0603デフォルトの名無しさん2006/10/08(日) 08:33:43
>>601
というか、それが
 > ・TAB=固定nスペースと思ってるやつがけっこういる
から生まれた産物の代表例だと思う。TABの意味が分からんよね。
0604デフォルトの名無しさん2006/10/08(日) 09:05:01
とりあえずブロックインデントをスペースでやる奴は死んで。
0605デフォルトの名無しさん2006/10/08(日) 09:34:19
>>600
TAB幅が変わっても綺麗に見えるコード書いたほうが良いんでない?
0606デフォルトの名無しさん2006/10/08(日) 09:42:04
>>605
TAB使わない方が細かい桁そろえが出来て見栄えがよいよ。
0607デフォルトの名無しさん2006/10/08(日) 09:42:53
>>605
いやいやむしろ汚く書いても奇麗に見えるコードを書くのがいいと思う
0608デフォルトの名無しさん2006/10/08(日) 09:48:53
>>606
いやそうじゃなくて、「TAB幅が変わっても綺麗に見えるコード」を書けば、
>>600が示すデメリットの二個が消失しますねってこと
TAB=固定nスペースと思ってるやつはやはり死ねば良いと思う。
っていうかそこはただの無知バカだからカウントしなくね?
0609デフォルトの名無しさん2006/10/08(日) 09:52:14
>587
0610デフォルトの名無しさん2006/10/08(日) 10:02:42
・人によってタブ幅が変わる
・環境(エディタの設定等)によってタブ幅が変わる

この違いが分からない
0611デフォルトの名無しさん2006/10/08(日) 10:41:55
人によって環境は違うんだから違いは無い。
>587
0612デフォルトの名無しさん2006/10/08(日) 10:52:35
開くときはタブ、保存するときはスペース
これ最強
0613デフォルトの名無しさん2006/10/08(日) 11:03:57
indentとか使わないの?
D版のDindentがあればいいのかな。
0614デフォルトの名無しさん2006/10/08(日) 11:42:09
>>610
設定変更不可の外部環境と自分の他の環境が異なると、
同じ人で同じソースなのにタブ幅が違うという状況になるよー、
という話じゃないの?

>>608
TAB使わなければ、そのデメリットの他に>602のような制約も
なくなるよ、という話。
で、どっちをとるかというと、「TAB幅可変に対応するために表記が
制限されるよりも、TAB使わずに綺麗に書くのがベストだよなあ」
ということになった。俺は。
0615デフォルトの名無しさん2006/10/08(日) 11:47:17
俺にわかるのはD言語のスレで
TABの事を延々と語る馬鹿達はうざいから消えて欲しいかなー
ってことぐらい。
0616デフォルトの名無しさん2006/10/08(日) 11:52:07
>>615
ほら、Makefileとかじゃタブに意味があるから、
D言語のソースでTAB幅を調整するのを強制されるとうざいんだよ。
Haskellじゃそんな問題出ようもないから、D言語的には関係が
なきにしもあらずって感じがしない? しない? しないかな、やっぱり。
0617デフォルトの名無しさん2006/10/08(日) 12:10:38
>577がいなければこんなことには
0618デフォルトの名無しさん2006/10/08(日) 12:21:08
話題的が変わってたし時間的にも隔たりができたのにこの話題を蒸し返した>>596も同罪
0619デフォルトの名無しさん2006/10/08(日) 12:45:28
話題にのってる奴全員同罪だろうに
0620デフォルトの名無しさん2006/10/08(日) 12:53:17
>ついでにタブよりスペース派。
>スペースでいいと思う。Tabの理由がみつからない
とりあえず死ね
0621デフォルトの名無しさん2006/10/08(日) 13:59:12
タブ論、goto論、コーディングスタイルに関する話はマ板では禁止のはずだが
0622デフォルトの名無しさん2006/10/08(日) 14:01:14
ここはム板だよお馬鹿さん
0623デフォルトの名無しさん2006/10/08(日) 14:58:44
マだかムだかはどうでもいいがここはD言語スレだよ
0624デフォルトの名無しさん2006/10/08(日) 16:30:07
Dの最新の姿をまとめ的に解説したサイトとかってないの。
0625デフォルトの名無しさん2006/10/08(日) 16:36:20
>>624
blogぐらいしか情報ないかと
0626デフォルトの名無しさん2006/10/08(日) 17:14:30
Javaの開発環境であるNetBeansはデフォルトでTAB=空白4つだから便利。
ようは開発環境がTABを仮想してくれるなら空白がいいよね?ってことだな。
0627デフォルトの名無しさん2006/10/08(日) 17:16:30
まあ、ふつーの統合環境なら、Tabとスペースは同じように扱えるからな
エディタしかないD言語だから、こういう話になるんだろ
0628デフォルトの名無しさん2006/10/08(日) 17:17:01
JavaもNetBeansもTABもDとは関係ない
Dの開発環境が欲しいってんなら同意
0629デフォルトの名無しさん2006/10/08(日) 17:21:19
じゃあ>>628頼んだ。
0630デフォルトの名無しさん2006/10/08(日) 18:09:14
D 0.169
0631デフォルトの名無しさん2006/10/08(日) 18:10:28
アノテーションはいつ登場しますか?
0632デフォルトの名無しさん2006/10/08(日) 18:24:45
0.169はバグ修正オンリーっぽいな。
0633デフォルトの名無しさん2006/10/08(日) 18:29:22
除算の最適化って何?この長い歴史で未だに最適化できる余地があるのか。
0634デフォルトの名無しさん2006/10/08(日) 18:34:14
Walter曰く、
>Bug fixes. \dmd\samples\d\pi.d sped up by 40%.

乗算と除算の組み合わせに最適化が効いてなかったバグだから、
i * 10 / 2 → i * 5 みたいな修正じゃないのかな。
0635デフォルトの名無しさん2006/10/08(日) 18:38:53
>>633
dmdの最適化は結構しょぼいよ
0636デフォルトの名無しさん2006/10/08(日) 18:45:55
>>634
勘違いしてない?
a%5とa/5とかを一回で計算するっていう最適化の改良でしょ?
0637デフォルトの名無しさん2006/10/08(日) 18:49:36
違います
0638デフォルトの名無しさん2006/10/08(日) 21:20:56
D 0.169
Oct 7, 2006
New/Changed Features

Bugs Fixed

* Improved optimization of div/mod combinations.

一応はっておく。
0639デフォルトの名無しさん2006/10/09(月) 00:39:23
0.169 の -unittest ってちゃんと機能する?

// main.d
import std.stdio;
class Sum {
 int add(int x, int y) { return x + y + 1; }
 unittest {
  Sum sum = new Sum;
  assert(sum.add(3,4) == 7);
  assert(sum.add(-2,0) == -2);
 }
}
void main() {}

> dmd -unittest main.d
C:\dmd\bin\..\..\dm\bin\link.exe main,,,user32+kernel32/noi;
>
0640デフォルトの名無しさん2006/10/09(月) 00:41:53
しまった・・・
> main
Error: AssertError Failure main(7)
0641デフォルトの名無しさん2006/10/09(月) 01:32:36
assert(sum.add(3,4) == 7);の行の処理を実行
↓
addメソッドが3 + 4 + 1 の 8 を 返す
↓
(8 == 7)が評価されてAssertExceptionが投げられる
↓
ユーザーコードで例外が補足されていないので
phobos\internal\dmain2.dのmain関数内(?)でcatchされて
"Error: AssertError Failure main(7)"と表示
↓
プログラム終了

unittestがどっかおかしい動きしてる?
main(7) が assert(sum.add(3,4) == 7); の行でいいんだよね?
0642デフォルトの名無しさん2006/10/09(月) 01:56:38
やあ ほんとすまん
いつの間にかunittestがコンパイル時にチェックしてくれるものだと思ってた
実行しなきゃチェックされないじゃんってのが>>640
0643デフォルトの名無しさん2006/10/09(月) 03:52:33
Xpのコマンドプロンプトで、長い環境変数が存在する状態でコンパイルすると
リンカがphobos.libが見つからないというエラーを吐くんだが。
0.169で確認。これバグだよな?

>set A=0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
>set A=%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%%A%
>dmd test
D:\dmd\dmd\bin\..\..\dm\bin\link.exe test,,,user32+kernel32/noi;
OPTLINK (R) for Win32 Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved

phobos.lib
Warning 2: File Not Found phobos.lib
OPTLINK : Warning 23: No Stack
test.obj(test)
Error 42: Symbol Undefined _main
test.obj(test)
Error 42: Symbol Undefined __acrtused_con
OPTLINK : Warning 134: No Start Address
--- errorlevel 2

test.dの中身はint main() { return 0; }だけ
0644デフォルトの名無しさん2006/10/09(月) 06:05:01
いっつもこんなこと
build entrypoint -gui -unittest -g -debug
打ってるけどさ、これを
build
これで済ませられれば良いよね。

makeみたいにbuildfileを参照して、
pragma文で全てのオプションを設定できるようになればなぁ
0645デフォルトの名無しさん2006/10/09(月) 06:21:51
build @

でbuild.brfを参照する、くらいはできた気がした。
0646デフォルトの名無しさん2006/10/09(月) 06:34:19
俺のパカチン!
>>645 �d!!
0647デフォルトの名無しさん2006/10/10(火) 07:08:11
assert と
if throw の使い分けがよう分からんのですが・・・
0648デフォルトの名無しさん2006/10/10(火) 08:10:21
デバッグコードとリリース時にも残るコード
0649デフォルトの名無しさん2006/10/10(火) 08:19:19
うん
だから、どういうものをリリース時にも残せばいいんだろうか・・・というやつ
0650デフォルトの名無しさん2006/10/10(火) 08:23:18
ユーザ操作によって起こる可能性のあるやつ。とかじゃないかな。
0651デフォルトの名無しさん2006/10/10(火) 17:12:06
struct A {
int x;
int opCmp(A o) {
return this.x < o.x;
}
};
while(true) {
A[] hoge;
hoge.length = (rand() % 10) + 2;
for(int i=0;i<hoge.length;i++) {
hoge[i].x = rand()%100;
}
int max=0;
for(int i=0;i<hoge.length;i++) {
writef(hoge[i].x, (i==hoge.length-1) ? "\n" : ",");
if(hoge[i].x > max)
max = hoge[i].x;
}
hoge.sort;
for(int i=0;i<hoge.length;i++)
writef(hoge[i].x, (i==hoge.length-1) ? "\n" : ",");

hoge.sort;
writefln("max = %d : hoge[0].x = %d", max, hoge[0].x);
assert(max == hoge[0].x);
writefln();
}

使い方まちがってる?
06526512006/10/10(火) 17:17:10
あ、2個目の hoge.sort はいらない。ま、関係ないけど。
0653デフォルトの名無しさん2006/10/10(火) 18:07:25
よく見てないが、Cmpって引くんじゃないのか?
0654デフォルトの名無しさん2006/10/10(火) 18:26:08
ああそっか。
0655デフォルトの名無しさん2006/10/10(火) 18:39:36
それいじってて気づいたけど、 hoge.sort(); と関数呼び出し風にするのはアウトなんだな。
0656デフォルトの名無しさん2006/10/10(火) 19:50:58
プロパティであって関数ではない、、、んだろう。
0657デフォルトの名無しさん2006/10/10(火) 20:33:03
max = hoge.dup.sort[0];
()ないほうがいいな。うん。
0658デフォルトの名無しさん2006/10/10(火) 20:40:42
>>434あたりの話を思い出したんだよ。
0659デフォルトの名無しさん2006/10/10(火) 20:42:44
メンバ関数へのポインタって使えますか?

void function() fp = &A.func; は通るけど、fp をどう使ったらいいかわからん。
0660デフォルトの名無しさん2006/10/10(火) 21:42:08
fp();
0661デフォルトの名無しさん2006/10/10(火) 21:57:26
そのまえにfunctionじゃなくてdelegateじゃなかろうか。
http://www.kmonos.net/alang/d/type.html#delegates
0662デフォルトの名無しさん2006/10/11(水) 00:18:28
>>659の言ってるのはC++にあるみたいなメンバ関数ポインタってことじゃないの?
Dだと使えないはず。(近いものはdirty hackで作れるとは思うが)
0663デフォルトの名無しさん2006/10/11(水) 03:30:58
メンバ関数ポインタとデリゲートを使い分けたいと申すか
0664デフォルトの名無しさん2006/10/11(水) 05:43:04
staticなメンバ関数と普通のメンバ関数は確かに違うが
0665デフォルトの名無しさん2006/10/11(水) 06:56:05
レスサンクス。
>>662 の意味のつもりでしたが、D では使えませんか。
とりあえずは、以下のコードで逃げることにしました。

struct D { void* ptr; void function() fp; }
(cast(D*) &dg).ptr = obj;
(cast(D*) &dg).fp = &A.func;
0666デフォルトの名無しさん2006/10/12(木) 17:10:50
>>645
build
だけで一応build.brfを参照して機能してくれるみたい。
つまり>>644の求める機能は既にあったってことだな
0667デフォルトの名無しさん2006/10/14(土) 11:13:52
GDCじゃ改名インポート使えないのか…

buildをビルド出来ないじゃないか…
0668デフォルトの名無しさん2006/10/14(土) 11:23:45
>>667
最新のtrunkのgdcはdmd 0.164ベースだからそれ使え
0669デフォルトの名無しさん2006/10/14(土) 12:19:15
0.166 もあるでよ。
ttp://www.codu.org/gdc-nightly/
0670デフォルトの名無しさん2006/10/14(土) 20:47:25
[cast(Object)null] == [cast(Object)null]がError: Access Violationなこの現実。

しかし配列リテラルがサポートされたのは素直に嬉しいなぁ。
char[][] names = ["alice", "bob"];も通らない悲しい現状ではあるけど……。
0671デフォルトの名無しさん2006/10/14(土) 21:15:07
>>670
>[cast(Object)null] == [cast(Object)null]がError: Access Violationなこの現実。
仕様じゃね?

>char[][] names = ["alice", "bob"];
通るよ?(dmd 0.169)
06726702006/10/14(土) 22:42:14
>>671

>>[cast(Object)null] == [cast(Object)null]がError: Access Violationなこの現実。
>仕様じゃね?

うーむ、そーなんだろーか。ちなみにcast(Object[])[null] == cast(Object[])[null]のほうが分かりやすいと今思った。

考えてみれば比較をopEquals()でする以上、左の要素にnullが来たらopEquals呼べないのは分からなくもないし、
[null] == [null]は通るけどそれはvoid*配列だからだし。
……やっぱりnull同士をtrueにするくらい気を利かせてくれてもいいような。

>>char[][] names = ["alice", "bob"];
>通るよ?(dmd 0.169)

ウェェ!? まぢで? うちのv0.169 dmd.exeは
cannot implicitly convert expression ("bob") of type char[3] to char[5]
と叫んでるんですが……。配列の型は最初の要素のになる、ってやつ。
char[][] names = [cast(char[])"alice", "bob"]; とかしなくてもいいのか!?
0673デフォルトの名無しさん2006/10/14(土) 22:44:32
>……やっぱりnull同士をtrueにするくらい気を利かせてくれてもいいような。

イラネ
0674デフォルトの名無しさん2006/10/14(土) 23:27:38
>>672
いや、勘違いだった。通らないね。
別のソースでやったときは、要素数が全て同じデータを使ってたんだった。
0675デフォルトの名無しさん2006/10/15(日) 02:15:06
char[][] names = ["alice", "bob"];
がグローバルスコープにある場合は静的初期化扱いになるのか通るな。

なんにしろ、[cast("alice"[], "bob"] で済むから手間じゃないとは思う。
0676デフォルトの名無しさん2006/10/15(日) 03:12:38
["alice"[], "bob"]でおk
0677デフォルトの名無しさん2006/10/15(日) 16:39:18
テンプレート引数を特定のテンプレートのspecializationであるように
部分特殊化するにはどうすれば良いのでしょうか

C++で次みたいなの

template <int x>
struct holder { static int const value = x; };

template <typename T>
struct hoge { static int const value = 0; };

template <int x>
struct hoge<holder<x> > { static int const value = x; };

int main()
{
  std::cout << hoge<int>::value << std::endl;
  std::cout << hoge<holder<5> >::value << std::endl;
}

// D
struct holder(int x) { static const value = x; };

struct hoge(T) { static const value = 0; };

struct hoge(T: /* ? */) { };

void main()
{
  dout.writefln(hoge!(int).value);
  dout.writefln(hoge!(holder!(5)).value);
}
0678デフォルトの名無しさん2006/10/15(日) 16:48:57
>>677
http://digitalmars.com/d/template.html#aliasparameters
0679デフォルトの名無しさん2006/10/15(日) 17:06:05
>>678
テンプレートテンプレートパラメータが欲しいという話ではないです
テンプレートに渡された型が特定のテンプレートの
specializationとなっているかどうかで分岐したいのです
それともaliasでそういったことが出来るという事でしょうか
0680デフォルトの名無しさん2006/10/15(日) 17:45:16
>>679
できなくも無いです。
struct hoge(alias T) {
  static if(isHolder!(T.mangleof)){
    //色々
  }else
    static assert(0);
};
0681デフォルトの名無しさん2006/10/15(日) 18:11:49
>>680
マングル名からholderのspecializationかどうか判別するのですか・・・
すごく強引な気がしますが、やっぱりそういう方法しか無いんですかね
0682デフォルトの名無しさん2006/10/15(日) 19:39:06
DigitalMarsの鯖落ちてる?
繋がらないんだが。
0683デフォルトの名無しさん2006/10/15(日) 19:41:18
>>682
落ちてるね。
今までもたまに落ちてたから心配しなくても大丈夫だと思う。
0684デフォルトの名無しさん2006/10/15(日) 20:47:37
>>677
import std.stdio;

struct holder(int x) {
static const val = x;
alias int unique_alias_id; // ごまかし
}

struct hoge(T) { static const value = 0; }

struct hoge(alias T) {
static if(is(T.unique_alias_id)) { // ここで判断
static const value = T.val;
} else {
static assert(0);
}
}

void main()
{
writefln(hoge!(int).value);
writefln(hoge!(holder!(5)).value);
}

ここまではがんばってみた。
0685デフォルトの名無しさん2006/10/16(月) 14:05:56
>>684
unique_alias_idを工夫すればなんとかなりそうな気がしますね
ありがとうございます
0686デフォルトの名無しさん2006/10/17(火) 12:29:17
build 3.04
0687デフォルトの名無しさん2006/10/17(火) 23:11:41
dmd 0.170
0688デフォルトの名無しさん2006/10/17(火) 23:45:40
foreach_reverse!

もうちょっと何とかならなかったのかこの名前は
0689デフォルトの名無しさん2006/10/17(火) 23:55:46
rforeachとかか

まあ次のバージョンであっさり名前変更されてる可能性もなきにしもあらず
0690デフォルトの名無しさん2006/10/17(火) 23:57:04
うーん opApplyReverseってのも安直だなぁ。
0691デフォルトの名無しさん2006/10/18(水) 00:00:55
先生!
・ Delegates can now be the 'aggregate' for the foreach.
の意味がよく分かりません!

あとforeach_reverse作るくらいならいっそRubyライクなイテレータを(ry
0692デフォルトの名無しさん2006/10/18(水) 00:04:16
演算子オーバーロードの左右逆版の命名は_rなのにナァ
0693デフォルトの名無しさん2006/10/18(水) 00:11:21
>>691
翻訳を見ると、
foreachの集成体として、delegateを指定することができるようになった、と。

たとえば、opApplyはクラスに一つだけど、

class Hoge {
int opApply((int delegate(inout uint) dg) { }
int hogeApply((int delegate(inout uint) dg) { }
}
とかやっておいて、
foreach(int i; &hoge.hogeApply) { ... }
って感じかな?

まだ試してないけど。
0694デフォルトの名無しさん2006/10/18(水) 00:13:11
>>692
オペランドの可換性とは関係ないから、あえてそれにしなかったと思う。
0695デフォルトの名無しさん2006/10/18(水) 00:28:34
>>694
にゃるほど。
そいや「左右入れ替え」と「逆方向に辿る」てのもびみょーがニュアンスが違うか……。
0696デフォルトの名無しさん2006/10/18(水) 00:42:58
>>670
ご所望のものが実装されたようです
06976962006/10/18(水) 00:46:16
ん?
if (null == null) じゃなくて if ([cast(Object)null] == [cast(Object)null]) か
06986912006/10/18(水) 02:40:28
>>693
実験してみた。そうらしい。
いまいちすっきり書けないのはbreakサポートの仕様の為。>>698は自分にそう言い聞かせた。

class IntList{
  int[] values;
  this(int[] values){ this.values = values; }
  /** 0でない要素だけを列挙する */
  int without0(int delegate(inout int) eachBody){
    int result = 0;
    foreach(value; this.values){
      if(value == 0){ continue; }
      result = eachBody(value);
      if(result){ break; }
    }
    return result;
  }
}
unittest{
  IntList sources = new IntList([1, 0, 2, 0]);
  int[] results;
  foreach(i; &sources.without0){
    results ~= i;
  }
  assert(results == [1, 2]);
}

無名デリゲートと組み合わせて呼ぶ方が自由度が高いかなー。foreachの仕様に合わせる必要がない分。
sources.without(2, (int i){ results ~= i; }); とかも書けるし。
sources.without(2) : (int i){ results ~= i; }; とか、無名デリゲートの部分を引数の外に追い出せたら最高なんだけど。
0699デフォルトの名無しさん2006/10/18(水) 07:55:30
delegateであればクラスのメンバ関数じゃなくてもいいから、
mixinとか使って変なことはできそう。
(今までクラステンプレートでできたのと同様のことしか
 できないのかもしれないけど)

template agg(alias array){
 auto agg = (int delegate(inout int) dg){
  int result;
  for(int i=0; i<array.length; i++){
   if(array[i]==0){ continue; }
   result = dg(array[i]);
   if(result){ break; }
  }
  return result;
 };
}
unittest{
 int[] a = [0,1,2,3,4];
 mixin agg!(a);
 foreach(inout int n; agg){ n += 2; }
 assert(a==[0,3,4,5,6]);
}

しかしそんなことをするために追加されたわけではなくて、既出のように
クラスに複数のonApply相当を定義するために作られたそうだね。
http://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D&artnum=17397

>>698
> 無名デリゲートと組み合わせて呼ぶ方が自由度が高いかなー。foreachの仕様に合わせる必要がない分。
Dの、なんでも言語仕様でサポートしよう、という方針の表れのひとつで、
要素の巡回はできる限りforeachで扱うようにしなさい、ということかもしれない。
0700デフォルトの名無しさん2006/10/18(水) 11:03:25
opApplyの書きかたってパターン化してて
int opApply( int delegate(inout T) dg ) {
nanika_loop {
... v = 列挙される値 ...
if( int r = dg(v) ) return r; // ここ
}
return 0; // ここ
}
どうせこうなるのだから、returnとか書くのめんどいのでもうちょいスッキリ書けるような
mixinかなにか作れないかなーと思った。思っただけでその先なにも考えてないが。
0701デフォルトの名無しさん2006/10/18(水) 11:38:31
>>700
こんなふうにとか?
int opArray(alias initfunc,alias func)(int delegate(inout T) dg){
  initfunc();
  auto v = func();
  if(!v)return 0;
  do {
    if( int r = dg(v) ) return r;
  }while(v = func());
  return 0;
}

class Test{
  private static int i;
  mixin opArray!({i=5;},delegate int(){return i--;});
}
0702デフォルトの名無しさん2006/10/18(水) 11:47:20
ありゃ。色々ミスったな。こういうこと。
int opArray(alias initfunc,alias func)(int delegate(inout typeof(func())) dg){
  initfunc();
  auto v = func();
  if(!v)return 0;
  do {
    if( int r = dg(v) ) return r;
  }while(cast(bool)(v = func()));
  return 0;
}

private int i;
mixin opArray!({i=5;},delegate int(){return i--;});
0703デフォルトの名無しさん2006/10/18(水) 14:13:23
D 0.170
Oct 17, 2006
New/Changed Features
* foreach_reverseを追加
* foreachの集成体としてデリゲートが使えるようになった。
* オーバーライドされていないfinalメンバ関数は、_vtbl[]に配置されないようになった。
そのようなクラスから派生しているクラスを使用しているコードは再コンパイルする必要がある。
* nullはヌルポインタ、デリゲート、配列、クラスオブジェクトなどと正確に比較するようになった。
0704デフォルトの名無しさん2006/10/18(水) 19:28:42
D 0.171

Bugs Fixed
Incorporating overlooked Bugzilla 429 change.
Fixed Bugzilla 440: dmd.170 fails to mark final methods as implementations of abstract ones
0705デフォルトの名無しさん2006/10/18(水) 19:32:07
はやっ
0706デフォルトの名無しさん2006/10/18(水) 21:08:10
finalメソッドがabstractメソッドの実装として使えなかった、か。
( ´∀`)ははは、こやつめ!
0707デフォルトの名無しさん2006/10/18(水) 21:28:47
http://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D.announce&artnum=5003
2段継承するとまだダメらしい
0708デフォルトの名無しさん2006/10/19(木) 00:20:24
ウォルたん☆大爆走
0709デフォルトの名無しさん2006/10/19(木) 01:03:19
DFL がまったく動かなくなった orz

----------
フリーザAA
----------
0710デフォルトの名無しさん2006/10/19(木) 03:43:20
IDE次第なんだよな。物凄く言語の出来が良くても、それだけで普及が5年は変わる。
インテリセンス互換かつ、使用クラス内部へ飛ぶ機能かつ、API Docを参照する機能。
この3つは最低限必要だと思う。
0711デフォルトの名無しさん2006/10/19(木) 04:41:18
エラージャンプとリファクタリングブラウザも頼むぜ!
0712デフォルトの名無しさん2006/10/19(木) 06:07:05
>>711
D言語は多分コケると思っている人の数→
http://pc8.2ch.net/test/read.cgi/tech/1136288019/251
0713デフォルトの名無しさん2006/10/19(木) 08:17:58
最近インテリセンスないのにも慣れてきた

あと今回のことでやっぱりここはウォルターたんに萌えるスレだと再認識した
0714デフォルトの名無しさん2006/10/19(木) 08:24:52
D 0.172
0715デフォルトの名無しさん2006/10/19(木) 08:29:26
Bugs Fixed
 * Fixed again Bugzilla 440: dmd.170 fails to mark final methods as implementations of abstract ones
 * Fixed Bugzilla 441: Crash on foreach of mixed-in aggregate
 * Fixed Bugzilla 442: Crash on foreach of mixed-in aggregate

1日に2個(向こうの時間で)バージョンアップってどうだろう
0716デフォルトの名無しさん2006/10/19(木) 09:13:02
ウォルターたんはテストの自動化してないのかね?
しといたほうが用意するのは面倒だけど、
開発効率と品質が格段に上がるのに
0717デフォルトの名無しさん2006/10/19(木) 09:20:59
有志がテストするという方式で自動化されていますw
0718デフォルトの名無しさん2006/10/19(木) 10:10:14
「ユーザーは開発者の思いがけないことを平気でする」というエロい人の言葉
0719デフォルトの名無しさん2006/10/19(木) 12:28:42
わかった
逆に考えるんだ
もう完成していると考えるんだ
D0.172言語と考えるんだ

今、IDEをDで作るのが如何に無謀かよく理解できた
0720デフォルトの名無しさん2006/10/19(木) 12:37:02
一度どっかでスナップショットを取ってツール制作者が足並みそろえる、
とかはしないんだろか。
あんまり効果無いかな……
0721デフォルトの名無しさん2006/10/19(木) 13:51:14
http://wiki.dprogramming.com/Dfl/Snapshots
あれ・・・こんなんあったのか
さっさとリリースしてくれればいいのに
前のListViewのバグ直ってたりするのかな?
調べてみよう
07227212006/10/19(木) 14:02:15
はい
直ってません
うはははは
07237212006/10/19(木) 17:27:50
ふう,自力で直してしまったよ.これでいいんじゃない?

// dfl\control.d 4166行目から
tme.cbSize = TRACKMOUSEEVENT.sizeof;
tme.dwFlags = /*TME_HOVER | */TME_LEAVE; // 余計なフラグを立ててやがった
tme.hwndTrack = msg.hWnd;
参考1) http://park17.wakwak.com/~dragoon/mouseleave.htm
参考2) http://search.acty-net.ne.jp/mfc_search/archive/1998-2/msg00827.html

シンボルGUIDが見つからないとか言われたのでwin32.winntの最初のほうでpublic:を追加した.
version=IE6を忘れずにコンパイル.パスは適当に合わせて.
build test.d -full -clean -d -version=IE6 -Ic:\d\dmd\import\ -LIBPATH=c:\d\dmd\lib
07247212006/10/19(木) 17:29:48
サンプルコード

// test.d
import dfl.all;
import win32.windows;
import win32.commctrl;
class MyForm : Form {
  this() {
    with (list = new ListView) {
      parent = this;
      hoverSelection = false; // trueに変えてみるよろし
      auto col = new ColumnHeader;
      col.width = 100;
      columns.add(col);
      items.add("hoge");
      items.add("HOGE");
    }
  }
  private ListView list;
}
void main() {
  Application.run(new MyForm);
}
07257212006/10/19(木) 17:36:26
しまった.デバッグ中のコードを削りきれてなかった.
//import win32.windows;
//import win32.commctrl;
これいらんので,必然的にwin32.winntの話もversion=IE6も関係ないです.
長々と失礼しました.まだミスあったらごめんよ.
0726デフォルトの名無しさん2006/10/19(木) 19:07:41
>>723
dmdにPATH通して、sc.iniの中が適切なら
-Ic:\d\dmd\import\ -LIBPATH=c:\d\dmd\lib
も、いらんよ。
07277212006/10/19(木) 19:44:40
あ,そうですね
頻繁に更新されるから設定が面倒だったのでsc.iniを使ってなかったです
0728デフォルトの名無しさん2006/10/19(木) 19:50:36
>>727
超なるほど
0729デフォルトの名無しさん2006/10/19(木) 19:58:18
毎回、解凍→中のsc.ini削除→他を上書きの手順を踏んでるが正直めんどい。
0730デフォルトの名無しさん2006/10/19(木) 20:23:16
「解凍->以前のバージョンからsc.iniだけコピー->以前のバージョンのみ削除」じゃだめかい?
0731デフォルトの名無しさん2006/10/19(木) 20:34:10
上書き禁止にすれば
0732デフォルトの名無しさん2006/10/19(木) 20:57:10
>>731
それだ。
0733デフォルトの名無しさん2006/10/19(木) 21:02:43
上書き禁止?ナニソレ
0734デフォルトの名無しさん2006/10/19(木) 21:14:19
上書き禁止にすりゃいいのか
cygwin 入れてるんでこんな dmd_update.bat 作ってるわ
make は 別のやつ使ってるから削除するようにしてある
前の sc.ini も残すようにしようかな

mkdir c:\temp
cd c:\temp
del dmd.zip
wget http://ftp.digitalmars.com/dmd.zip
unzip dmd.zip
rm dmd\bin\make.exe
rm dm\bin\make.exe
cp -r dmd\ c:\
cp -r dm\ c:\
rm -r dmd\
rm -r dm\
0735デフォルトの名無しさん2006/10/19(木) 22:24:40
上書き禁止というか、ReadOnlyだよな。
0736デフォルトの名無しさん2006/10/20(金) 05:30:08
MonaOSの開発言語をC++からD(gdc)に乗り換えようという動きがあるらしい。
0737デフォルトの名無しさん2006/10/20(金) 09:09:01
どこに?
ひげぽんがそう発言してるの?
0738デフォルトの名無しさん2006/10/20(金) 09:21:58
仮死状態の某OSスレのことかと思ったら、
ちゃんとMonaOSプロジェクト内での話なのね。
なんかphobosサポートが悲惨で大変のようだけど。(castもできないそうな)
0739デフォルトの名無しさん2006/10/21(土) 14:18:21
>>736
ソースは?
しかし、本当なら、ひげぽんもたいしたやつだ(いろんな意味で
0740デフォルトの名無しさん2006/10/22(日) 00:59:44
OS全体じゃなくて、GUIの話だな。dかjavaかという話のようす。
http://wiki.monaos.org/pukiwiki.php?cmd=read&page=%B5%C4%CF%C0%2F%B8%C0%B8%EC%BE%E8%A4%EA%B4%B9%A4%A8&word=D%B8%C0%B8%EC

それとは別にgdcをlibphobosなしで移植してみよう、という試みも。順調っぽい。
http://wiki.monaos.org/pukiwiki.php?cmd=read&page=gdc&word=D%B8%C0%B8%EC
0741デフォルトの名無しさん2006/10/22(日) 01:02:19
D言語の作者はGCはカーネルがサポートすれやボケって言ってるんだよね
0742デフォルトの名無しさん2006/10/23(月) 12:19:23
これが通らない。
 const char[0] g = "";
 static assert(g=="");
static assert ((g) == "") is not evaluatable at compile time となる。

これは通る。
 const char[] g = "";
 static assert(g=="");

なぜだろうか。
0743デフォルトの名無しさん2006/10/23(月) 12:22:57
要素が0の静的配列がどう解釈されているのかという問題かなあ
0744デフォルトの名無しさん2006/10/23(月) 13:52:47
template f(){ const char[][] f = ([""]); }
template g(char[] s){}
g!((f!())[0]) hoge;

でdmdがこける。

Assertion failure: 'e1->type' on line 5485 in file 'expression.c'
0745デフォルトの名無しさん2006/10/25(水) 05:50:59
D言語って独自のGUIライブラリすらないの?
0746デフォルトの名無しさん2006/10/25(水) 05:58:15
Python>>>>>D
0747デフォルトの名無しさん2006/10/25(水) 10:07:52
>>745
あるよ
0748デフォルトの名無しさん2006/10/27(金) 13:13:48
マイクロスレッドを言語か標準ライブラリで実装して欲しい
0749デフォルトの名無しさん2006/10/27(金) 13:35:17
>>748
このスレは要望を書き込む場所ではありません。
開発者(Walterタソ)が、わざわざこんなスレに目を通すわけがないのです。
要望は、http://www.digitalmars.com/d/ へ。
0750デフォルトの名無しさん2006/10/27(金) 22:28:10
マイクロスレッドならyaneSDK4Dになかったっけ
0751デフォルトの名無しさん2006/10/27(金) 23:20:15
Walter殿がカーネルにGCを持ったOSを作ればそれで済む話だ。
0752デフォルトの名無しさん2006/10/28(土) 19:40:51
GCの性能ならSML#の圧勝w
0753デフォルトの名無しさん2006/10/28(土) 19:57:02
GCの性能てどうやって評価するんだっけ?
ソースURLおせーて
0754デフォルトの名無しさん2006/10/28(土) 20:02:38
GCはどれも一長一短で「このアルゴリズム最強!」ってなもんはないだろ…
0755デフォルトの名無しさん2006/10/28(土) 20:15:35
はぁ?誰がこのアルゴリズム最強!とか言ってるの?
0756デフォルトの名無しさん2006/10/28(土) 20:25:04
世代GCより速くて優れたGCってあるの?
トレードオフ的にオプションを切り替えられるっといいのだが。
0757デフォルトの名無しさん2006/10/28(土) 22:17:50
http://www.pllab.riec.tohoku.ac.jp/smlsharp/ja/?FeatureInteroperability
SML#なる言語のドキュメントはコレくらいしか見つからないなぁ。
ビットマップ走査型GCてどんなだろ。GCの理屈なんて概要しか知らないけど……。

あとGCを実際にカーネルサービスとしてサポートしてるOSて、実例はあるんだろか。
Javaで書かれてるとゆーJNodeとか……?
0758デフォルトの名無しさん2006/10/28(土) 23:31:22
コンパイラスイッチで性質を切り替えられるやつが最強だろ。
いやGCとしてとかじゃなくて、現実的に。
0759デフォルトの名無しさん2006/10/29(日) 00:13:58
中学生じゃないんだから最強最強言ってんなよ
0760デフォルトの名無しさん2006/10/29(日) 05:39:19
ウンコやチンコなどの小学生ワードが大好きな2chねらーにとって
最強なんて中学生ワードはむしろ成熟した概念
0761デフォルトの名無しさん2006/10/29(日) 21:25:00
>>756
世代別GCより速いも何も、じゃあ世代別GCをどう実装すんのよ.
ぜんぜん何も語ってないに等しいじゃねーか.

たとえば java だと若い世代と古い世代と恒久世代に分けて,
若い世代は Mark & Sweep GC, 古い世代は Copying GC なわけだ.
もちろん Mark & Sweep にも Copying GC も色々な種類があるわけだ.

何も知らないくせに「世代別GCで最強」で終わりじゃ無知を晒してるだけだぞ.
0762デフォルトの名無しさん2006/10/29(日) 21:35:07
>>761
お前はただ語りたいだけでは?
0763デフォルトの名無しさん2006/10/29(日) 21:56:01
>>762
何も知らない割には負けず嫌いなんだな(禿藁

>>761 に誤りがありました.
若い世代が Copying GC で古い世代が Mark & Sweep です.
謹んで訂正させていただきます.
0764デフォルトの名無しさん2006/10/29(日) 22:28:36
で、世代GCより速いGCってあるの?
0765デフォルトの名無しさん2006/10/29(日) 22:51:48
GCって速度重視されるの?
0766デフォルトの名無しさん2006/10/29(日) 22:52:07
>>763
流石専門板だなぁ・・・・・(禿藁なんて久しぶりに見た
0767デフォルトの名無しさん2006/10/29(日) 23:00:05
聞きかじり厨の典型パターンに自分がはまってると何故気づかないんだろう
0768デフォルトの名無しさん2006/10/30(月) 00:03:07
禿同
こういうときにするべきレスはただ一つ

>>764
ググレカス
0769デフォルトの名無しさん2006/10/30(月) 00:05:02
パターンに嵌ったら気付けないんだよ。
0770デフォルトの名無しさん2006/10/30(月) 00:09:55
循環参照ってヤツだな!



…ってレスつけようとしたけど思い止まった
オレ偉い
0771デフォルトの名無しさん2006/10/30(月) 00:28:02
ビットマップ走査型GCとやらを調べてみたけど、
メモリを確保するときにメモリ内のポインタの位置を記憶するための、
ビットマップというデータを作成してそれを元にメモリを解放していく
…という感じみたい

Dみたいにポインタ型以外の変数にもポインタを格納することがある言語には使えないんじゃないかな

SML#は関数型言語らしいからそこら辺は上手くクリア出来るんだろう
(関数型言語は変数がいらないんだっけ?)
0772デフォルトの名無しさん2006/10/30(月) 20:42:59
ポインタの存在するネイティブ言語ではオブジェクトの
移動が非常に難しいから、世代別GCは実装できない。
0773デフォルトの名無しさん2006/10/30(月) 22:49:00
だが断る
0774デフォルトの名無しさん2006/10/31(火) 02:50:59
> モダンなGCは、過去の遅いものより遙かに発展しています。
> 世代型のコピーGCには、 昔のマーク&スイープアルゴリズムの非効率さはありません。

とか本家には書いてるけど、D言語のGC実装が世代型だ、とは言ってないのね。

>GCは次のステップで動作しています:
>
>   1. GCで確保された領域を指す 'root' ポインタを全て列挙します。
>   2. rootから指されている領域内から、 再帰的にGCメモリ領域内を指しているポインタを探索します。
>   3. GCで割り当てられた領域のうち、 生きたポインタで指されていないことが分かった領域を全て開放します。
>   4. 残ったメモリ領域のデータをコピーして使用領域をまとめる処理 (コピーGCと呼ばれます) が実行される可能性があります。

これってMark&Compactionて言うやつ? 4は”コンパクション”ではないんだろうか。
いずれにせよ、世代化に限らず最適化の余地はある気はする。

あと、調べてるうちに「GCなんてOSでサポートしる!」て言う気持ちが分かってきた気がする……。
世の中にはGCにハードウェアのサポートを利用する代物もあるというのに。
0775デフォルトの名無しさん2006/10/31(火) 08:18:46
カーネルレベルなら仮想メモリが管理できるから
ネイティブでも世代別GCとかを実装出来るんだろうな
と勘で言ってみる
0776デフォルトの名無しさん2006/10/31(火) 10:56:29
で、結局ひげぽんにGC積んでもらおうって話なんだよな?
0777デフォルトの名無しさん2006/10/31(火) 12:25:59
>>775
昔R4400で試したけどあんまり良い結果でなかった。
0778デフォルトの名無しさん2006/10/31(火) 19:53:23
ひげぽんってPerlの会社に行かなかったっけ?
0779デフォルトの名無しさん2006/10/31(火) 21:45:20
Hatenaにジョイントしてる。
唯一のC/C++使いとしてApacheモジュール作りとかで重宝されてる。
0780デフォルトの名無しさん2006/10/31(火) 23:26:14
ひげぽん乙
0781デフォルトの名無しさん2006/10/31(火) 23:26:44
mod_をしこしこ作ってるのか・・・Hatenaってレベルが高いのか低いのかw
0782デフォルトの名無しさん2006/11/01(水) 01:13:17
>>781 なにをもってレベルの高低が決まってるの?781のオレオレ評価?
0783デフォルトの名無しさん2006/11/01(水) 01:27:47
ハードウェアに近い方が低レベルなのです。
0784デフォルトの名無しさん2006/11/01(水) 05:25:30
781はレイヤーでなくて技術レベルの高低を指しているように読める…
0785デフォルトの名無しさん2006/11/01(水) 07:41:18
本人がそっちの意味で書いたのは誰の目にも明らかだろう。
内容がまるで追いついてないのが愉快だからイジられてるだけ。
0786デフォルトの名無しさん2006/11/01(水) 13:35:27
>>785
>>799を読むとHatenaのレベルが怪しく見えちゃうのはしょうがないんじゃなかろうか?

てか本当に唯一なのか?
0787デフォルトの名無しさん2006/11/01(水) 13:36:31
あう
>>786における>>799は>>779の誤りです おいらレベルヒクス
0788デフォルトの名無しさん2006/11/01(水) 17:47:32
>>786
Hatenaという会社はアプリ製作屋ではなくてWEB屋でLLでの開発が主だから
会社の性質上C/C++の必要度は高くないから
C/C++のコーディングレベルという意味でのレベルはそんなに高くないでしょ。

でも、他の部分の技術力が高いのかって言うと
誤字や間違った訳・解説が多い、はてな監修のAjaxイン・アクションの訳本や
CTOのblogを読む限り他の部分の技術力もかなりアレだけどね…
0789デフォルトの名無しさん2006/11/01(水) 21:23:46
思い切りの良い企業がたまたまマスコミに買われたって感じかな
似たようなとこはあるんだろうけど露出の差がダンチ
0790デフォルトの名無しさん2006/11/02(木) 14:10:51
D言語?
0791デフォルトの名無しさん2006/11/02(木) 16:38:39
はい、それはD言語です。
0792デフォルトの名無しさん2006/11/02(木) 16:41:20
いいえ、それはトムです。
0793デフォルトの名無しさん2006/11/02(木) 17:18:32
いいえ、それもトムです。
0794デフォルトの名無しさん2006/11/02(木) 18:10:50
DMD 0.173 リリース
0795デフォルトの名無しさん2006/11/02(木) 18:18:48
D 0.173
Nov 1, 2006
New/Changed Features

* Template instantiations can now accept alias parameters for local variables and nested functions.
* Enhancement Bugzilla 333 std.c.locale
* Implemented Signals and Slots.
* Incorporated D.announce/5104 as std.cpuid.
* Implemented variadic template parameters
0796デフォルトの名無しさん2006/11/02(木) 18:53:11
可変長テンプレート引数と
ローカルシンボルのテンプレートalias引数が
可能になりました、という話かな。
0797デフォルトの名無しさん2006/11/02(木) 18:53:27
Signals and Slotsが気になる
0798デフォルトの名無しさん2006/11/02(木) 19:38:50
std.signalsで、Obseverパターンを実装するためのもの、だそうな。
ソースコード中の例はみたけど、意義がよく分からんかった。
0799デフォルトの名無しさん2006/11/02(木) 21:03:20
んー、クラスの内部状態を外部のクラスで取得するための手法を
(ライブラリとして)標準化するためのもの、って感じかな。
0800デフォルトの名無しさん2006/11/02(木) 21:56:48
private import std.stdio;
void Foo(R...)(R r){
  writefln(R.length);
  writefln(r.length);
//  R[0] t;//faild
  typeof(r[0]) t;//ok
  static if(r.length>1)
    Foo(r[1..$]);
}

void main(){
    Foo(1, 'a', 6.8);
}
0801デフォルトの名無しさん2006/11/03(金) 23:58:23
二週間も新ver出ないもんだから心配してたぜ!

Signal-Slotて「さらにもう一つのコールバック方式」って感じにしか思えないんだよなぁ……。
delegateとどう使い分けるべきなのか、誰か教えてほすぃ……。

まぁそれより俺は可変個引数テンプレートにおおっと思ったところだが。
0802デフォルトの名無しさん2006/11/04(土) 06:58:22
別に使い分けなくたって良いだろ。
いつもはdelegate使っててSignal-Slotが必要になってから使えばいい。

Signal-Slotが必要な状況は特に思いつかないが。
0803デフォルトの名無しさん2006/11/05(日) 00:52:48
古いバージョンのコンパイラってどこかにない?
0804デフォルトの名無しさん2006/11/05(日) 01:03:28
Change Log にあるよ。

でもなんで古いのが欲しいの?
0805デフォルトの名無しさん2006/11/05(日) 01:09:06
自分の昔のソースやウェブに落ちてたライブラリがコンパイルとおらなくなったとかじゃない?
0806デフォルトの名無しさん2006/11/05(日) 01:50:45
あ、なるほど。
でもなんか最新のコンパイラで通らないような古いライブラリを使うのはなんだが気が引けるような。
08078052006/11/05(日) 01:59:24
漏れもそう感じる。
かなりの手直しに「ムガー」っと思わされながらも最新版を追い続けちまう。
08088032006/11/05(日) 02:28:14
>>804
サンクス

古いのが必要な理由は、
前に出来心で作った社内ツールを急遽使用する羽目になったんで、
直している時間が無いのです
0809デフォルトの名無しさん2006/11/05(日) 18:31:56
ううむ。珍しく-H付けて、Dインターフェースファイル&コンパイル済み*.libの構成を利用してみようと思ったら、
静的コンストラクタの呼び出しがdiファイルに出てこないもんだから、自動初期化が利用できないのね。

diの末尾に
static this(){ _moduleCtor(); }
とか追加したらいい感じに動いてくれたけど、これでいいのだろうか……。
0810デフォルトの名無しさん2006/11/06(月) 00:41:32
そういえば _moduleCtor ってなに?
モジュールコンストラクタを呼び出すってあるけど、それって?

これ以上詳しいことが俺が探す限りどこにも乗ってない。
0811デフォルトの名無しさん2006/11/06(月) 01:26:27
皆さんどんな環境でやってるんすか?
とりあえず>>7のWin32をsrc\phobosの中に入れてやってるんですが、
2重定義とかどうやって回避すればええんでしょうか?

ツリービューとか表示しようとしたら途端に上手くいかなくなりました。
0812デフォルトの名無しさん2006/11/06(月) 02:06:57
とりあえず言っておくけど>>7のアレはphobosじゃないから。
0813デフォルトの名無しさん2006/11/06(月) 05:32:18
>>812
インポートパス通ってるからとりあえずつっこんでるだけかと思われるが。
0814デフォルトの名無しさん2006/11/06(月) 08:32:14
自分のとこだと、
くだんのwin32はいれてあるがそれを直接使うことはまずないなあ。
GUIアプリは主にDFL。
デファクトスタンダードはどうもDWTのようだが。
ゲームはSDLのポーティングを使うのが主流では?
0815デフォルトの名無しさん2006/11/06(月) 08:34:32
自分のとこだと、
くだんのwin32はいれてあるがそれを直接使うことはまずないなあ。
GUIアプリは主にDFL。
デファクトスタンダードはどうもDWTのようだが。
ゲームはSDLのポーティングを使うのが主流では?
0816デフォルトの名無しさん2006/11/06(月) 10:38:57
>>810
phobosのソース見れば分かると思うよ
0817デフォルトの名無しさん2006/11/06(月) 12:03:20
>>810
http://www.kmonos.net/alang/d/module.html
の最後のあたりに書いてある静的コンストラクタの類。
このへんを明示的に呼び出すのに使う。……はず。

そいや静的デストラクタはどうやって呼ぶんだ。
08188172006/11/06(月) 12:04:32
> そいや静的デストラクタはどうやって呼ぶんだ。

ごめん普通に_moduleDtor()があったorz
0819デフォルトの名無しさん2006/11/06(月) 15:34:24
ウワアアアアン
やっとTreeView表示できた。
うれC〜
0820デフォルトの名無しさん2006/11/06(月) 17:31:17
これで実行時にイッちゃうんだけど、なにかやばい事してる・・・?

int main()
{
gc_init();
_minit();
try {
_moduleCtor();
_moduleDtor();
}
catch (Object o) {
writefln(o.classinfo.name ~ ": " ~ o.toString);
}
gc_term();
return 0;
}
0821デフォルトの名無しさん2006/11/06(月) 17:42:53
そりゃ、スタートアップが同じことをやってるからでは?
0822デフォルトの名無しさん2006/11/06(月) 20:01:32
>>820
それは「Dで作るWin32アプリ」がしたいってこと?

だとしたらmain()じゃなくてWinMain()ではないかと思う。
0823デフォルトの名無しさん2006/11/06(月) 21:42:41
class A { void opCatAssign(char[] str) {} }
class C { A a() { return new A; } }

void main() { (new C).a ~= "str"; }

op*Assign 使用時に a の括弧を省略した場合にエラーが出るのは仕様?
0824デフォルトの名無しさん2006/11/07(火) 00:19:34
>>823
http://www.kmonos.net/alang/d/property.html
 > 注意: プロパティは現在の所、 op=, ++, -- 演算子のlvalueとすることはできません。
だそうな。つまり仕様だね。
0825デフォルトの名無しさん2006/11/07(火) 23:59:15
昔同じ事してプゲラを食らった身としては Tips集 ってのが気になる
0826デフォルトの名無しさん2006/11/08(水) 01:08:16
>>821
スタートアップ?dmain2.dってやつですか?
中身見てみたけど、自分のソースでmoduleCtorやらは呼び出さなくて良いって事?
そしてエントリーポイントをWinMainとかに変える時には明示的に呼び出さないとダメ、ってことなんですか?

聞いてばっかですんません
0827デフォルトの名無しさん2006/11/08(水) 07:30:32
つttp://digitalmars.com/d/
つdmd\samples\d
0828デフォルトの名無しさん2006/11/08(水) 12:41:41
>>826
そう。普通にmainからスタートするときは
dmain2.dのmain → ユーザーの書いたmain
の順で実行されるから自分のmainでmoduleCtorとかは呼ばなくていいっつーか呼んじゃダメ。
その変の初期化関数を呼んでいいのはエントリポイントを変えてmain以外にしたときだけ。

なので>>809みたいになるはバグだと思うんだけどよーわからん。
0829デフォルトの名無しさん2006/11/09(木) 01:35:48
どなたかdflでファイルのドラッグドロップで、ファイルパスの取得の
やり方わかりませんか。
0830デフォルトの名無しさん2006/11/09(木) 15:03:03
>>829
if( ea.data.getDataPresent(DataFormats.fileDrop))
{
Data data = ea.data.getData("FileName");
wchar[] text = data.getUnicodeText;

MessageBoxA(null, cast(char*)text , "test", MB_OK);
}
なんか"FileName"と入れてみたらパスが沸いて出た・・・
FileNameoとかFileNameWとかFileNamelとかがあったみたいだけど、
なんの事かわからん。。。
0831デフォルトの名無しさん2006/11/10(金) 18:30:25
pc8やっと復旧したか

D 1.0 for Jan 1, 2007
We'll release it one way or another Jan 1. And then we'll move on!

楽しみだー

0832デフォルトの名無しさん2006/11/10(金) 18:38:28
ライブラリがねぇ。テンプレートがねぇ。switchがねぇ。structがねぇ。
同名のネストしたテンプレートをうまく実体化できない、テンプレートの引数に関数やデレゲートや配列やstructが使えない、switchには配列やstructは使えない、structリテラルが無い。
このへん1.0までになんとかして欲しいわな。
0833デフォルトの名無しさん2006/11/10(金) 18:47:18
switchに構造体のイメージがわかないんだが。
0834デフォルトの名無しさん2006/11/10(金) 18:48:19
>>833
D言語では構造体は値型。
0835デフォルトの名無しさん2006/11/10(金) 20:34:11
>>834
そういうことではなくて、あったら何が便利なの?ということを教えてほしい。
ちょっと興味があるので。
0836デフォルトの名無しさん2006/11/10(金) 21:27:30
>>831
ほんとに1.0出るかな〜
長引いているのは今更のことなんだし
ウォルたんには急いで1.0リリースよりも納得いくまで作り込んで欲しい
こんな贅沢なことはそうそうできないだろうな
0837デフォルトの名無しさん2006/11/10(金) 21:30:38
5/6年後とかじゃね。
・・・早くて。
0838デフォルトの名無しさん2006/11/10(金) 21:40:22
Walterタソはどうやってメシを食ってるのだろうか、、、
0839デフォルトの名無しさん2006/11/10(金) 22:37:52
>>836
既に他の言語で言うVer1.0くらいの機能は有ると思うんだがなぁ

0.99→0.100の時は怒りを通り越して呆れたよw
0840デフォルトの名無しさん2006/11/10(金) 22:39:47
俺はどちらかというと「いや少数点数じゃないしw」みたいに
冷静だったヤツにむかついた。お前らもっと夢を見ようよみたいな。
0841デフォルトの名無しさん2006/11/10(金) 22:46:45
だって、0.99から1.00に行くようなソフトは
途中のバージョン番号がかなり飛び飛びだからなあ。
嫌でも現実の予想がつくよ。

だから、逆にそこで1.00になってたら大驚きだったろうな。


しかし、2007/01で1.0というと、もう今後大きな仕様変更は来ないのかなあ。
0842デフォルトの名無しさん2006/11/10(金) 22:52:22
この言語はメジャーバージョン変わるときは遠慮しない言語だと思う、たぶん。
0843デフォルトの名無しさん2006/11/10(金) 22:58:29
>>832
ライブラリは、取り合えず
メジャーバージョンが出ないと
出すに出せないんじゃね
0844デフォルトの名無しさん2006/11/10(金) 23:04:58
バージョン表記はリトルエンディアンにするべきだよなw
1.0>2.0>…>8.0>9.0>01.0>11.0>21.0>…
…>99.0>00.1>10.1…
うわ、分かり肉!



ところで、1.00のあとはアスペクト指向辺りをなんて
0845デフォルトの名無しさん2006/11/10(金) 23:06:26
DLL関係をOS非依存の抽象化されたコードで読み込めるように出来る仕組みが欲しいね
コンパイルするとOSに合わせてdllなりsoなりに勝手に切り替わるといいなぁ
もしそれが可能ならJava並みにモジュールの肥大化が加速して楽しめると思う
0846デフォルトの名無しさん2006/11/10(金) 23:41:17
>>831
本気なのかな?
キリスト教圏の人間だと新年よりクリスマスに出してきそうなもんだが。
(基本的にクリスマスから新年までお休みだからね)

マジなら良いお年玉になるが。
0847デフォルトの名無しさん2006/11/10(金) 23:58:31
>>840
少数点数だった場合
0.96 > 0.97 > 0.98 > 0.99 > 0.991 > ... > 0.999 > 0.9991 > ...
0848デフォルトの名無しさん2006/11/11(土) 00:02:20
>>842
確かにw
Dなら巨大な変更があるときに1.0にしてもおかしくないと冗談で思える

>>844
アスペクト指向って実は有効範囲が狭いし流行らないんじゃないかと
0849デフォルトの名無しさん2006/11/11(土) 01:25:53
>>848
1.0になったら1週間で10回くらいバグフィックスしそうだな
0850デフォルトの名無しさん2006/11/11(土) 03:12:21
2007/1/1 D ver1.00
2007/1/3 D ver1.09
2007/1/10 D ver1.3
2007/1/31 D ver 2.0

この調子だ
0851デフォルトの名無しさん2006/11/11(土) 11:13:10
次からは174進数リテラルができるのかもしれない
0852デフォルトの名無しさん2006/11/11(土) 15:10:44
そうだね(棒読み)
0853デフォルトの名無しさん2006/11/11(土) 19:22:08
とりあえずツールやライブラリの制作者が
足並みそろえる口実が出来ると歓迎しよう……。
2007年はD言語の年ってか。ワクテカ。

……むしろD言語開発中に新たに学んだ事をまとめて
E言語とか出てくるんじゃないかとちょっと思ってた。
あ、E言語もうあるや。
0854デフォルトの名無しさん2006/11/11(土) 19:24:32
次はD++、その次D#、その次Dω
0855デフォルトの名無しさん2006/11/11(土) 23:38:13
そろそろ言っていいですか?
ver1.0マダーーーーーッ?
0856デフォルトの名無しさん2006/11/12(日) 00:14:14
ver0.1000まだー
0857デフォルトの名無しさん2006/11/12(日) 00:38:24
単に変なことをしたいというだけなんだけど、
"hogehoge"という文字列を渡されたら
hogehogeという名前の変数を宣言する、
とか、
obj.hogehogeというメソッドを呼び出す、
とか、
テンプレートかなんかで実現出来る?
0858デフォルトの名無しさん2006/11/12(日) 01:36:32
文字列が動的に渡されてくるのを想定してるなら
テンプレートだと無理なんじゃないかね。
テンプレートって静的処理でしょ。
0859デフォルトの名無しさん2006/11/12(日) 02:03:32
>>857
不可能……だろうなぁ。コンパイラは文字列の中身までタッチはしないし。
せいぜい出来てテンプレートの値パラメータくらいか。
0860デフォルトの名無しさん2006/11/12(日) 02:24:53
>>858,859
コンパイル時に処理できる文字列を想定してた。
template T(char[] id,int n){
 static if(n>0){
  int str2id(id~itoa!(id)) = n;
  mixin T!(id,n-1);
 }
}
とかそんなんできないかなーと思って。
(itoaは整数を文字列に変換するテンプレート、
str2idは文字列を識別子トークンとして扱わせる構文)
0861デフォルトの名無しさん2006/11/12(日) 03:04:39
コンパイル時に処理できるなら最初から普通に書けばいいんじゃないかなあ。
0862デフォルトの名無しさん2006/11/12(日) 05:25:54
連想配列じゃね
0863デフォルトの名無しさん2006/11/12(日) 14:28:22
シンボル名を文字列のごとくくっつけたり分断したり、か。
そこまで来ると完全にメタプログラミングの領分かねぇ。

そいやIDEでIntelliSenceとかの為に完全に構文解析しようと思ったら、
static ifとかまでその場で実行する必要があるのね。

1.0に併せてツールが出そろってくると、
ツール開発者からも新しい視点のフィードバックが来るようになりそうだが。
ああ、Walterの戦いはこれからだ!
0864デフォルトの名無しさん2006/11/12(日) 14:30:35
Walter先生の次回作にご期待ください
0865デフォルトの名無しさん2006/11/12(日) 21:46:03
DはWalterを裏切らない。
WalterもDを裏切ってはいけない。
0866デフォルトの名無しさん2006/11/12(日) 22:02:57
大変だ、Dがクーデターを
0867デフォルトの名無しさん2006/11/12(日) 22:10:19
Visual D++が現れた!
どうするコマンド
0868デフォルトの名無しさん2006/11/12(日) 23:02:07
D用のデバッガ早ようでんかな?
0869デフォルトの名無しさん2006/11/12(日) 23:03:40
つ gdb,windbg
0870デフォルトの名無しさん2006/11/12(日) 23:28:51
D言語のDはだっふんだーの頭文字だって聞いたんですけど本当ですか?
0871デフォルトの名無しさん2006/11/12(日) 23:39:28
やってろ
0872デフォルトの名無しさん2006/11/14(火) 00:42:55
dsource.orgって繋がらない?
0873デフォルトの名無しさん2006/11/14(火) 09:12:14
ほんとだ
0874デフォルトの名無しさん2006/11/14(火) 12:12:51
ニュースグループ見れ
ttp://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D.announce&artnum=5386
0875デフォルトの名無しさん2006/11/15(水) 06:33:53
>>874

サンクス。
メンテか。随分時間がかかってるな。
0876デフォルトの名無しさん2006/11/15(水) 11:31:40
DMD 0.174 release
0877デフォルトの名無しさん2006/11/15(水) 12:59:47
  _  ∩
( ゚∀゚)彡 Tuple!Tuple!
 ⊂彡

ここまで来ると多重代入っつーかboost::tieつーかそういうのも欲しいな。
0878デフォルトの名無しさん2006/11/15(水) 13:26:34
-v1オプションがなんか感慨深いね。ほんとに1.0出るんだなぁ・・。
0879デフォルトの名無しさん2006/11/15(水) 13:53:51
D 0.174
Nov 14, 2006
New/Changed Features

* Implemented std.typetuple.
* Implemented std.traits.
* Added .funcptr property for delegates.
* Added .tupleof property for structs and classes.
* Slicing and indexing of type tuples now supported.
* Variable declarations can now be declared with type tuples.
* Improved the statement grammar thanks to Stewart Gordon.
* Added DMD switch -v1 for D language 1.0 compatibility.
* deprecated === and !== no longer allowed
* deprecated iftype no longer allowed
* deprecated on_scope_xxxx no longer allowed
* deprecated 'l' numeric literal suffix no longer allowed
* deprecated if (v; e) no longer allowed
* deprecated instance no longer allowed
* scope can now be used for RAII declarations; use auto for type inference.
0880デフォルトの名無しさん2006/11/15(水) 16:02:49
import std.thread;

int main()
{
uint id;
Thread t;
t = Thread.getThis();
id = t.id;
return 0;
}

このソースコードなんだけど
ver1.54ではコンパイルできるが、ver1.55以降は
class std.thread.Thread member id is not accessible
と表示されてコンパイルできない。
1.55でthread関係が結構変わったみたいなことが更新履歴にあるんだけど。
これはバグなのかな?

単にidを使いたいだけなんだが
0881デフォルトの名無しさん2006/11/15(水) 16:31:11
和訳の対応の早さにびびった
0882デフォルトの名無しさん2006/11/15(水) 16:31:57
>>879
ktkr! 今回かなりデカイな。tupleにクラスを入れられるから再帰テンプレートで簡単にswitchが作れそう。

>>880
hdlじゃダメなん?
0883デフォルトの名無しさん2006/11/15(水) 16:33:48
>>881
更新されてない件について。
0884デフォルトの名無しさん2006/11/15(水) 17:06:02
version=linux だと id が public な代わりに hdl がなかったり。

>>883
http://www.digitalmars.com/d/changelog.html#new0174
 > What's New for D 0.174
 > Nov 14, 2006
http://www.kmonos.net/alang/d/changelog.html#new0174
 > D 0.174 での変更点
 > Nov 9, 2006
あれ?よくわからんことになってる気がする。
0885デフォルトの名無しさん2006/11/15(水) 17:24:11
なんかほんとに正式版に向けての整備って感じの更新だな。
いい感じだ。
0886デフォルトの名無しさん2006/11/15(水) 17:29:45
gdcにも頑張ってもらわないと。
0887デフォルトの名無しさん2006/11/15(水) 17:37:17
>>886
最近branchが切られてdmd v0.173までマージされたよ。
trunkはgcc4.1への対応作業中だと思いたい。
0888デフォルトの名無しさん2006/11/15(水) 17:40:37

* scope can now be used for RAII declarations; use auto for type inference.

なにげに、これがうれしかったりする。
0889デフォルトの名無しさん2006/11/15(水) 18:18:26
>>888
わかるw
これで型推論しつつRAIIの宣言もできるのかな?
auto auto a;ってできなかったよな、確か。
0890デフォルトの名無しさん2006/11/15(水) 18:31:32
import std.traits,std.typetuple,std.stdio;
template bind(alias func,int i){
  ReturnType!(func) _bind(ParameterTypeTuple!(func)[i] val,TL...)(TL tl){
    return func(tl[0..i],val,tl[i..$]);
  }
  template bind(ParameterTypeTuple!(func)[i] val,TL...){
    alias _bind!(val,TypeTuple!(TL[0..i],TL[i..$])) bind;
  }
  template bind(ParameterTypeTuple!(func)[i] val){
    alias bind!(val,func,ParameterTypeTuple!(func)) bind;
  }
}

char[] test(char[] a,char[] b,char[] c){
  return "a:"~a~",b:"~b~",c:"~c;
}

void main(){
  writefln(bind!(test,0).bind!("test")("test2","test3"));
//writefln(bind!(test,0)!("test")("test2","test3"));と書きたい…
}
エラーが起きないtupleの連結方法あるかなぁ…?
#templateにprivateやfriendが欲しくなってきた(w
0891デフォルトの名無しさん2006/11/15(水) 18:32:44
書き忘れた。
>TypeTuple!(TL[0..i],TL[i..$])
ここでtuple TL is used as a typeって言われる。
0892デフォルトの名無しさん2006/11/15(水) 18:50:38
この調子で非推奨の機能を切りまくれば良いと思う
08938902006/11/15(水) 19:07:23
ああ、RemoveAtを作れば良いのか。馬鹿だな>俺。スレ汚ししてスマソ。
template RemoveAt(int i,T,UL...){
  static if(i==0)
    alias UL RemoveAt;
  else
    alias TypeTuple!(T,RemoveAt!(i-1,UL)) RemoveAt;
}

static assert(is(RemoveAt!(1,int,bool,short)==TypeTuple!(int,short)));
0894デフォルトの名無しさん2006/11/15(水) 19:24:38
>>892
非推奨の機能って他に何か残ってたっけか
個人的には配列の後置配列宣言を廃止して欲しいな
0895デフォルトの名無しさん2006/11/15(水) 19:59:29
多値を返そうといろいろやってみたが、
現状ではまだ無理なんかな。

・返り値型をタプルとして宣言するが、返し方がわからない。
alias TypeTuple!(int,char[]) A;
A f(int n, char[] s){
 A a;
 a[0]=100, a[1]="hoge";
 return a;
}
> Error: cannot implicitly convert expression (tuple((_a_field_0),(_
> a_field_1))) of type (int, char[]) to (int, char[])

・ポインタを宣言してみるが初期化のしようがない。
import std.typetuple, std.stdio;
alias TypeTuple!(int,char[]) A;
void main(){
 A* pa;
 writefln(*pa);
}
> Assertion failure: '0' on line 694 in file 'glue.c'
> abnormal program termination
0896デフォルトの名無しさん2006/11/15(水) 21:22:18
なんかもういろいろキタ━(゚∀゚)━!!
スレ住人の目が輝きだしたなw
0897デフォルトの名無しさん2006/11/16(木) 00:23:25
>>884
日本語訳はdmd.***.zipに入ってるhtmlをもとにしてるので、
digitalmarsのサイトに載ってるやつよりは微妙に古かったりする。

dmd.174.zipに入ってるchangelog.htmlだと
 > What's New for D 0.174
 > Nov 9, 2006
になってるのでそっちに合わさっちゃってるのです。
0898デフォルトの名無しさん2006/11/16(木) 00:23:27
生まれ変わったdsource.org、微妙なスピードアップだな……。

しかしdsource.org、プロジェクトのステータスとか最終commit日とかで
並べ替えたいのは俺だけだろか。
文句言う訳じゃないが、
こんなプロジェクトが!-> Status: 1 - Planning. -> (´・ω・`)ショボーン
てなるのが多いんだよな……。
0899デフォルトの名無しさん2006/11/16(木) 00:57:57
そうか?
漏れのとこからだと数倍高速化されててうはうはなんだがなあ
0900デフォルトの名無しさん2006/11/16(木) 01:02:30
なんだかオラ、すげえワクワクしてきたぞ!
おやすみ
09018992006/11/16(木) 01:05:44
http://dsource.org/forums/
のフォーラムはかなり高速化されていたけど
http://www.dsource.org/projects/build/wiki
の辺はそうでもないですね
0902デフォルトの名無しさん2006/11/16(木) 01:12:04
型タプルとやらは何の役に立つの?
構造体としても使えるとか?
0903デフォルトの名無しさん2006/11/16(木) 07:41:45
可変長テンプレート引数と static if を使いこなしてみたかったんじゃね
0904デフォルトの名無しさん2006/11/16(木) 23:42:35
ぶっちゃけGenerics程度にしとくのがベストなんだなと思った。
まあ飽くまで裏側を育てる機能だと割り切るべきで
コーディングスタンダードにはならんだろうけど。
09058992006/11/17(金) 01:55:49
MC++Dの領分はライブラリ制作者を助ける側面が強いから
よりよいライブラリが出てくることに期待するのがいいと思われ
0906デフォルトの名無しさん2006/11/22(水) 02:34:10
XMLライブラリどこかにないかね
誰か書いてると言ってたような
0907デフォルトの名無しさん2006/11/22(水) 02:43:12
http://www.prowiki.org/wiki4d/wiki.cgi?AllLibraries/XmlLibraries
ありますた
0908デフォルトの名無しさん2006/11/22(水) 03:12:51
>>908
ついでに使い心地のレビューキボンヌ
0909デフォルトの名無しさん2006/11/22(水) 20:59:02
Javaみたいにインタフェースベースになってる?
C++だとMSXMLとXercesの使い分けで
痛い目を見てるから統一して欲しいんだよね
0910デフォルトの名無しさん2006/11/23(木) 23:39:53
XMLライブラリ自体眺めるの初めてなのでよーわからんのですが何か
0911デフォルトの名無しさん2006/11/24(金) 03:00:25
先生、なぜに連想配列のキーにopCmpが要求されるのですか!
x,yを持つPointクラスをどうやって比較しろと言うのですか!
0912デフォルトの名無しさん2006/11/24(金) 03:18:45
√(x^2+y^2)にきまってんだろ
0913デフォルトの名無しさん2006/11/24(金) 04:23:19
ハッシュだからだろ。キー値が被ったら同じかどうか判断して、違ってたら次を探す。
シーケンシャルサーチされたら敵わんて。
0914デフォルトの名無しさん2006/11/24(金) 04:58:31
>912
√は要らんのでは
0915デフォルトの名無しさん2006/11/24(金) 09:06:24
>>913
それはopEqualで済むはずだから、なんでopCmpまで、ということだと思う。
912なんてやって(3,2)と(2,3)が同値と判定されても困るだろうし、
実際順序が定義できない(しづらい)ものだと困らんのかな。
0916デフォルトの名無しさん2006/11/24(金) 09:36:08
わろた
0917デフォルトの名無しさん2006/11/24(金) 12:31:59
>>915
そーなのですよ。
実際x^2+y^2で比較なんてするとまさに3,2と2,3で同じ値を返してくるのです。

……ん? ホントは「opEqualsかopCmpのどっちかが実装されてればいい」であるべきなのか。
誰も使ってなくて今まで指摘されなかったのか?
0918デフォルトの名無しさん2006/11/24(金) 12:36:32
ソース読めば解決しね?
個人的には
union Point{
  struct{
    int x;
    int y;
  }
  long key;
}
としてkeyをキーにすれば十分だと思うけど。
09199182006/11/24(金) 12:42:45
Pointクラスにか。スマソ、勘違い。
class Point{
  union{
    struct{
      int x;
      int y;
    }
    long key;
  }
  int opCmp(Point p){
    if(key < p.key)return -1;
    if(key > p.key)return 1;
    return 0;
  }
}
0920デフォルトの名無しさん2006/11/24(金) 13:13:30
yなんてゴミって事か
0921デフォルトの名無しさん2006/11/24(金) 16:42:19
>>918
連想配列部分のソース見てもよく分からんかったよ。
(まあよく分からんというのは読んだうちに入らんかもしらんが)

定義が難しいというのは、順序の意味づけが難しいということであって、
適当でいいなら、keyなんてやらんでも
 int opCmp(Object o){
  Point point = Point(Foo)o;
  if(!point){ return -1; }
  if(x == point.x){ return y - point.y; }
  return a - point.a;
 }
でいいと思うよ。仕様書の例のパクリ(+バグ修正)だけど。
0922デフォルトの名無しさん2006/11/24(金) 17:00:56
どっかでバイナリサーチしてるんじゃね?
0923デフォルトの名無しさん2006/11/24(金) 17:17:10
ってか高いのを右、低いのを左にした二分木ぽ。
0924デフォルトの名無しさん2006/11/24(金) 18:48:28
なるほど。
最初からキーを二分木で管理しておいて、
rehashをすると、木が平衡になるようにすんのかな。
0925デフォルトの名無しさん2006/11/25(土) 11:37:58
まあ、ソース見ないことには分からんけど、
ハッシュだと偏ったときに効率悪いから二分木の可能性な気がする

てか、そもそもopCompだけでハッシュ無理じゃね?
0926デフォルトの名無しさん2006/11/25(土) 11:46:08
>>925
まぁ、憶測で語らずsrc/phobos/internal/aaA.d見れってこった。
0927デフォルトの名無しさん2006/11/25(土) 17:49:54
D 0.175 ktkr!
0928デフォルトの名無しさん2006/11/25(土) 18:30:42
>>927
更新されてない件について。
0929デフォルトの名無しさん2006/11/25(土) 19:00:23
なんか、ver1に向けて
バグ修正の数がすごい
0930デフォルトの名無しさん2006/11/25(土) 19:26:50
更新履歴に無いけどTcpSocketが削除されてるなぁ。まぁ困らないけど。
0931デフォルトの名無しさん2006/11/25(土) 20:52:59
更新履歴にも来たか。何このドトーのバグフィックス。
0932デフォルトの名無しさん2006/11/25(土) 20:54:45
仕様を作るのを止めたってことだな
年明け1.0説は真実だったのか。
0933デフォルトの名無しさん2006/11/26(日) 00:46:51
TcpSocket削除されたら困るんですけど・゚・(ノД`)・゚・
0934デフォルトの名無しさん2006/11/26(日) 00:47:02
>>932
え、アレって確定した話じゃなくて単なる仮説だったの?
0935デフォルトの名無しさん2006/11/26(日) 00:53:17
本家に書いてあったはずだが?
0936デフォルトの名無しさん2006/11/26(日) 00:54:27
>>932
説も何も

ttp://www.digitalmars.com/d/future.html
0937デフォルトの名無しさん2006/11/26(日) 01:54:34
Access Violation が出たファイルと行番号って簡単にわからんもんなの?
0938デフォルトの名無しさん2006/11/26(日) 11:42:59
>>937
つ デバッガ
0939デフォルトの名無しさん2006/11/26(日) 13:37:42
TcpSocket削除か。
Dは二度と使わないようにしよう。
0940デフォルトの名無しさん2006/11/26(日) 16:54:36
そんな餌に(ry
0941デフォルトの名無しさん2006/11/26(日) 22:41:31
>>938
しぶしぶ windbg を使ってみた
Stopped at exception って表示されて進まない・゚・(ノД`)・゚・
あんまり情報見つからないんだよもん
09429412006/11/26(日) 22:43:26
まあもうちょっといじってみるお
0943デフォルトの名無しさん2006/11/27(月) 08:31:39
-gだか-gcだかを付けてコンパイルしてデバッガで走らせて止まったらバックトレースを表示すればおk
0944デフォルトの名無しさん2006/11/27(月) 22:59:56
コンパイルオプションで静的ライブラリの場所を指定できなかったっけ
0945デフォルトの名無しさん2006/11/27(月) 23:03:52
>>944
-Lでリンカにオプション渡せる。コンパイルオプションだけでは無理。
0946デフォルトの名無しさん2006/11/28(火) 12:33:32
あそっかリンカか確かにな忘れてた。さんくす
0947デフォルトの名無しさん2006/12/03(日) 14:28:47
0.176age
0948デフォルトの名無しさん2006/12/03(日) 15:22:56
BCPLだから、C/C++言語の後続の場合、厳密には「P言語」ってよくつっこまれるよね。
しかし「P言語」ってなぁ。なんか奇怪な言語っぽくてヤダな。
やっぱ「D言語」のが響きもスマートでいいなぁ。
0949デフォルトの名無しさん2006/12/03(日) 15:40:06
>>948
P言語…Perl、Python、PHP
L言語…http://en.wikipedia.org/wiki/L_programming_language
0950デフォルトの名無しさん2006/12/03(日) 15:58:04
import std.bind, std.stdio;

void main(){
 f(0.3);
}
real f(real n){
 writefln(n);
 return bindAlias!(f)( f(4*n*(1-n)) )();
}

カオスを発生させるよ!(゚∀゚)
0951デフォルトの名無しさん2006/12/03(日) 16:20:06
うひょー、ごきげんだぜ!
細かいところにはちょっと気に入らない点もあるけど、
おおかたいい感じになってきたと思えるな。
0952デフォルトの名無しさん2006/12/03(日) 16:21:36
>>950
動作同じだけど、意味的にはこっちのほうが良くね?
return bindAlias!(f)(4*n*(1-n))(); 
0953デフォルトの名無しさん2006/12/03(日) 18:00:03
>>952
たしかにそうだね。bindで自殺したいわけだから。
0954デフォルトの名無しさん2006/12/03(日) 23:17:51
今Walterタン超バグ修正モードみたいなので、
わかってるバグは今のうちに伝えといた方がいいんじゃないかとふと思った。

つーわけで、まとめてBugzillaに投げてこようと思うんで、
0.176でまだ直ってないバグを知ってるひとは教えてくれませんか。

俺はとりあえずD言語研究のBugTrackでもチェクしてくる。
0955デフォルトの名無しさん2006/12/03(日) 23:33:13
>>954
void f(T...)(T) {} // (T x) にすると通る
void main() { f(1); }

//Assertion failure: 'arg->ident' on line 716 in file 'func.c'
//
//abnormal program termination
0956デフォルトの名無しさん2006/12/03(日) 23:39:56
>>955の亜種だろうけどこれも落ちるな。
T*f(T...)(T x){return null;}
void main(){auto x=f(2,3,4);*x=*x;}
というかtuple系はまだまだ地雷の予感
0957デフォルトの名無しさん2006/12/04(月) 00:11:07
---test10.d---
struct A { int a; }
void main() {
 A x;
 x = x.init; //この行をコメントアウトすると通る。
}
------

>dmd -run test10.d
test10.d(4): Error: cannot implicitly convert expression (0) of type int to A
test10.d(4): Error: cannot cast int to A

エラー行の位置からしておかしいと思うから、これが通らんのはバグかな。
0958デフォルトの名無しさん2006/12/04(月) 00:12:12
間違えた、>>957の "test10.d(4): Error: " というのは
全部 "test10.d(3): Error: " と読み替えて。
0959デフォルトの名無しさん2006/12/04(月) 00:18:50
すげー
とうとうここまできたか
さらにコンテナ(vector, list)と各種アルゴリズムが
stdに含まれたらC++を置き換えられるくらいになるのかな
0960デフォルトの名無しさん2006/12/04(月) 00:40:33
template g(char[] s){}
void main(){ g!(([""]~[])[0]); }

Assertion failure: 'e1->type' on line 5933 in file 'expression.c'

abnormal program termination


こんなんもある。
テストしてた当時はエラーコードの特定ができなかったなあ。
09619542006/12/04(月) 02:33:10
>>955 は
http://d.puremagic.com/issues/show_bug.cgi?id=537
と同じかな。Thx.

>>956 http://d.puremagic.com/issues/show_bug.cgi?id=639
>>957 http://d.puremagic.com/issues/show_bug.cgi?id=640
>>960 http://d.puremagic.com/issues/show_bug.cgi?id=641
投稿してきますた。tupleは確かに突けば色々でそうだね…
0962デフォルトの名無しさん2006/12/04(月) 03:06:28
レスより内容が詳しくなってるね。
ありがたいことです。
0963デフォルトの名無しさん2006/12/04(月) 14:00:07
Tupleの使い道について今までいまいちわからなかったんだがstd.signalsの解説読んでようやく納得した
0964デフォルトの名無しさん2006/12/04(月) 14:02:47
>>954
>>809とかどーでっしゃろ……と言ってみる。
*.diを出力するとき、中にstatic this(){ _moduleCtor(); }を含めてくれればいいと思うけど。

あと、パッケージ違いの同じファイル名のを一緒にコンパイルすると、
objファイルがかたっぽ上書きされて消えるってのは既出?
出力するobjを融合でもするか、必ずディレクトリ付きでobj出力しないと、
パッケージの意味が無いのだが。

-opすればいいけど、build使ってるとなぜか-opをdmdに渡してくれない……。
0965デフォルトの名無しさん2006/12/04(月) 22:08:09
>>961

>>516-526で話題になっていたバグがまだ解決されていないようなのですが、
これに関しての報告は既にどなたかが報告済みでしょうか?
まだでしたら合わせて報告をお願いします。
09669542006/12/04(月) 23:04:27
>>964
>>809は_moduleCtorは呼び方ちゃう気がする...。俺のとこだと
--- b.d ---
int bValue=123; static this() { printf("b initialized!\n"); }
--- a.d ---
import b; void main() { printf("%d\n", bValue); }
-----------
> dmd -c -H b.d
> lib -c b.lib b.obj
> dmd a.d b.lib
> a
b initialized!
123
-----------
.diと.libの構成でもうまく行ってるんだけど、具体的にうまく動かない例ってどんなの?

-opは-opつければいいのでレポートするとすればbudの方だと思うんだが、
なんか色々大変らしいんだよね:
http://www.dsource.org/forums/viewtopic.php?t=1906
3.03で、-od渡すと-opを消すのをやめたって書いてある:
http://www.dsource.org/forums/viewtopic.php?t=592&start=15
けど直ってないな。訊いてみるか。
# あ、とりあえず現状でも-odをあきらめればbuildも-opを通すはず。
09679542006/12/04(月) 23:07:33
>>965
調べてみるっす。>>535-536, >>643 もまだバグ残ってるぽいな。
09689542006/12/04(月) 23:09:06
あ、一行抜けてた
> dmd -c -H b.d
> lib -c b.lib b.obj
> del b.d b.obj
> dmd a.d b.lib
でもうまくいく。
0969デフォルトの名無しさん2006/12/05(火) 19:11:34
これって仕様?

class A{
 const int a;

 this(){
  a= 1;
 }
 this(int b) {//Error: constructor main.A.this missing initializer for const field a
  this(); //ここでaが初期化されてほしいんだけど・・?
 }
}
0970デフォルトの名無しさん2006/12/05(火) 19:13:25
>>969
多分バグ。
09719542006/12/06(水) 01:13:27
>>535 http://d.puremagic.com/issues/show_bug.cgi?id=650
>>643 http://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=c++.command-line&artnum=702
も勢いで投げてきた。

>>969
attribute.html のconstの例でokってなってるパターンだから、バグだね。
http://d.puremagic.com/issues/show_bug.cgi?id=512
で報告されてるので1.0までに直るといいなあ

>>516-526 って手元で現象再現できないんだけど、
具体的にリンクエラーになるコードどなたかわかります?
0972デフォルトの名無しさん2006/12/06(水) 05:58:37
>>971
 >>516,519(あるいは521の4)についてなんですが、
//////// test.d ////////
module test;
public class TTemplateTest(T) {
this(T in_) {}
~this() {}
}
alias TTemplateTest!(char) TTTest_1; //これの情報がtest.objに格納されてほしい
//////// main.d ////////
import test;
int main(char[][] args) {
TTTest_1 aaa = new TTTest_1('a');
return 0;
}

> dmd test -c
> dmd main -c
> lib aaa.lib +test
> dmd main.obj aaa.lib
↑とすると、リンクエラーになります(test.d中で明示的に実体化されてるはずなのに、シンボルが見つからないと言われる)。
↓test.obj を aaa.lib に格納せず、直接 main.obj と結合するとエラーになりません。
> dmd main.obj test.obj

しかし、
> lib -l test.obj
↑でリストファイルを出力すると、test.objの中に実体化したテンプレートのシンボルそのものが存在していないことが分かります。
つまりlibファイルに格納するしないにかかわらず、コンパイルした時点で実体化したテンプレートの情報が消えてしまうようです。
殆ど書かれてることのまとめみたいになりましたが、一応うちの環境(Windows2000)では上のコードで問題が再現されます。
>>521の方の1,2,3については私には分かりません。すみませんが他の方お願いします。
0973デフォルトの名無しさん2006/12/07(木) 00:02:35
下のコードをコンパイルオプションに -O を指定してコンパイルすると、
実行時に FreeLibrary(unZip32); で Access Violation がでる...
-O を指定しないと正常に動作するから、dmdの最適化のバグなの?

import std.stdio;
import std.c.windows.windows;

int main( char[][] args ) {
char[] output = new char[100];
alias int (*PUNZIP)(HWND hWnd, LPCSTR szCmdLine, LPSTR szOutput, DWORD dwSize);
HANDLE unZip32 = LoadLibraryA("UNZIP32.DLL");
PUNZIP UnZip = cast(PUNZIP)GetProcAddress(unZip32, "UnZip");
UnZip(null, "-x -a --i dmd.zip", output, output.length);
FreeLibrary(unZip32);
return 0;
}
0974デフォルトの名無しさん2006/12/07(木) 01:30:20
>>973
extern(Windows){
alias int (*PUNZIP)(HWND hWnd, LPCSTR szCmdLine, LPSTR szOutput, DWORD dwSize);
}
int main() {...
が正解
0975デフォルトの名無しさん2006/12/07(木) 17:35:34
JAVA上がりで申し訳ないんですが、
Dってクラスとかインターフェイスにはアクセス保護属性って付けないもんなの?
下記コードのIのアクセス保護属性をいじると場合によってはリンクできないっぽそうなんだけど、
仕様それともバグ?

public class A {
 //public interface I {//OK
 //protected interface I {//OK
 //interface I {//OK
 //package interface I {//Error
 private interface I {//Error
  int func1();
 }
 private int test1(I i) {
  return i.func1();
 }
 public this(){}
 public void test(){
  I i = new class() I{
   int func1(){
   return 1;
   }
  };
  test1(i);
 }
}

エラーはこんな感じ
main.obj(main)
Error 42: Symbol Undefined _D4main1A1I5func1FZi
0976デフォルトの名無しさん2006/12/07(木) 17:43:30
>>975
>>1
0977デフォルトの名無しさん2006/12/07(木) 17:49:17
>>975
バグ。これだけで起こる。
public class A {
  private interface I {
    int func1();
  }
  private int test1(I i) {
    return i.func1();
  }
}
0978デフォルトの名無しさん2006/12/07(木) 17:50:19
なんだD言語って糞じゃん
0979デフォルトの名無しさん2006/12/07(木) 18:05:49
>>978
コンパイラ!=言語
>>977
classでも起きるな。
0980デフォルトの名無しさん2006/12/07(木) 22:59:09
private interface I{void f();}
void main(){I.init.f();}
とりあえず最小の再現コード

interface I{private void f();}でも再現

-> void f()がprivate扱い
-> fがvtblに積まれない
-> リンクのときにエラー
という流れな気が。
0981デフォルトの名無しさん2006/12/07(木) 23:41:48
[1,2,3].map((int n) { return n + 1; });
ってのをやりたくて、

S[] map(T, S)(T[] array, S delegate(T) func) {
  S[] newArray;
  foreach (T item; array)
    newArray ~= func(item);
  return newArray;
}

としたんですが、delegateだけでなくfunctionも受け入れられるようにするにはどうしたらいいですか?
0982デフォルトの名無しさん2006/12/07(木) 23:53:51
>>980
private interface I{
 protected void f();
}
ならたぶん通る。

Dのprivateは同じモジュール内からはアクセスできるはずだから、
仕様と食い違う動作ということでバグかなあ。
0983デフォルトの名無しさん2006/12/08(金) 00:24:43
>>981
S func で受けて ReturnType!(S)[] を使う
0984デフォルトの名無しさん2006/12/08(金) 01:13:16
>>981
983とは違う方法だけど、一応http://www.kmonos.net/alang/d/tuple.htmlの一番下も参照。
0985デフォルトの名無しさん2006/12/08(金) 03:10:15
わたしは>>983さんの方が好きです!
0986デフォルトの名無しさん2006/12/08(金) 17:01:40
>>983,984
なるほどなー。ありがとうございます。
これ、std.bindで作った関数はどうやって対処したらいいんですかね…。質問ばかりで申し訳ないです
09879642006/12/08(金) 17:34:57
>>966
スイマセン。問題の原因を間違えたみたいです。
静的コンストラクタの順序が、.diと.libの構成だと守られてない予感。

--- lib.d ---
public int i = 1;
static this(){ i = 2; }
--- main.d ---
import lib, std.stdio;
void main(){ }
static this(){ writefln(lib.i); }

・.diと.libを経てビルドすると1
・"dmd main.d lib.d"とビルドすると2
と結果が変わります。
http://www.kmonos.net/alang/d/module.html の「静的コンストラクタの順序」の項に反してる感じ。
ちなみに、途中で生成されたlib.diに "static this(){ _moduleCtor(); } "なんてつけても2。
だから>>809みたいなセリフが出てきたようです。

.obj上書きの方は、コンパイラが何も言ってくれないんでちょっと怖いと思いまして。
「名前が被ってます。-op付きでコンパイルしる」とかせめてdmdから警告が欲しいと思った次第でふ。
そんな解決策でいいのかは別として。
buildのほうはやっぱ多少話に出てたんですね……情報感謝です。
09889752006/12/08(金) 23:22:05
>>977,979,980,982
やはりバグでしたか。ありがとございます。
0989デフォルトの名無しさん2006/12/08(金) 23:43:01
Dのコンパイラでも作ろうと思うこの頃。
0990デフォルトの名無しさん2006/12/08(金) 23:47:42
RowSetの実装が流行らないなぁと思ったが
もうJPAに取って代わられる死にインタフェースなのかな
0991デフォルトの名無しさん2006/12/08(金) 23:49:25
>>989
むしろforkさせれば?
0992デフォルトの名無しさん2006/12/08(金) 23:50:22
>>991
1からDで書こうと思う。という事でまずはアセンブラから…
0993デフォルトの名無しさん2006/12/08(金) 23:53:24
>>992
dmdフロントエンドのD言語版ならもうあるよ。バックエンド作るってんだったらガンガレ。
http://svn.dsource.org/projects/dparser/trunk/dparser/
0994デフォルトの名無しさん2006/12/08(金) 23:58:45
>>993
勿論バックエンドから。
0995デフォルトの名無しさん2006/12/09(土) 02:20:18
次スレとか立たないの?

おれはたてないがな!
0996デフォルトの名無しさん2006/12/09(土) 08:29:30
>>986
関数オブジェクトを受けれるような ReturnType を定義する

template Return(R) {
  static if (is(typeof(R.opCall) RR == return))
    alias RR Return;
  else
    alias ReturnType!(R) Return;
}
0997デフォルトの名無しさん2006/12/09(土) 08:47:00

次スレ
http://pc8.2ch.net/test/read.cgi/tech/1165621441/
0998デフォルトの名無しさん2006/12/09(土) 10:33:31
>>997
  _| ̄□__
  |_  _|へ ̄\
   |  |_ ゝ__)__)  | ̄ ̄ ̄ ̄ヽ ̄ヽ
  /     .\(,,゚Д゚)  ̄ ̄ ヽ  ,|(,,゚Д゚)
 ( o | ̄丶.(ノ|  .|)    _.ノ (ノノ  ノ)
 .ヽ_ノ_ノ_ノ__ノ    |__ノ__ノ
         し`J          し`J
0999デフォルトの名無しさん2006/12/09(土) 11:50:05
999
1000デフォルトの名無しさん2006/12/09(土) 11:52:19
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。