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

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

D言語 Part10

1 :デフォルトの名無しさん: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)

2 :デフォルトの名無しさん: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


3 :デフォルトの名無しさん:2006/09/12(火) 07:31:19
日テレはルパンにひどいことをしたよね(´・ω・`)

4 :デフォルトの名無しさん:2006/09/12(火) 07:37:28
C/C++ Java C# の反省点を踏まえて良いとこ取りした
ネイティブコンパイラというところは嬉しいけど
FrameWorkやIDEがまだ準備不足感があります

言語仕様を煮詰めなおしたり設計し直すと言った話も重要ですが
最近の開発スタイルからするとFrameWorkの拡充が急務であって
後者を優先しつつ(手遅れにならないように)前者についても
細かいところが改善されていくことを願います


5 :デフォルトの名無しさん:2006/09/12(火) 19:52:41
>>1


6 :デフォルトの名無しさん:2006/09/12(火) 21:53:55
>>4
先ず、それを英語で云えるようになってから発言してね

7 :デフォルトの名無しさん: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」の部分からダウンロードできる。


8 :デフォルトの名無しさん:2006/09/12(火) 23:37:50
木構造のリスト表現 を言語ネイティブにサポートして欲しいです

9 :デフォルトの名無しさん:2006/09/13(水) 00:45:35
>>8
まずは言語に組み込むメリットとライブラリでは何故いけないのかを述べよ。

10 :デフォルトの名無しさん:2006/09/13(水) 06:31:53
まずは誰がどこで「いけない」と言ったのかを述べよ。

11 :デフォルトの名無しさん:2006/09/13(水) 06:59:06
>>10
ライブラリで良いならライブラリ組めよ。

12 :デフォルトの名無しさん:2006/09/13(水) 08:44:20
そうだそうだ。米は自分で育てろ。家は自分で建てろ。

13 :デフォルトの名無しさん:2006/09/13(水) 09:14:16
標準ライブラリでサポート、ではなく、あえて言語でサポートして
ほしいという理由を訊ねられているんだろうから、12は的外れだな。

14 :デフォルトの名無しさん:2006/09/13(水) 12:25:03
「ライブラリ組めよ」っていう返しに対する反応だから、12は妥当だな。

15 :デフォルトの名無しさん:2006/09/13(水) 12:44:55
>>14
おまえ馬鹿だろ 行間読めよ
誰と誰の主張が同じかまとめてみよう

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

こういう流れなんだから
11と12の意見がいかに的外れか分かるだろ
そうでなければ「言語ネイティブ」の意味を分かってない馬鹿


16 :デフォルトの名無しさん:2006/09/13(水) 12:46:18
コンパイル時に初期化とかされるなら組み込んでもいいと思うけどね。

17 :デフォルトの名無しさん:2006/09/13(水) 13:01:11
>>15
事実的にも比喩的にも、11に「行間」はない。

18 :デフォルトの名無しさん:2006/09/13(水) 13:19:12
>木構造のリスト表現
なんてライブラリで十分
しかも自分で組める程度のもの
人に希望してる暇があるなら、自分で書いたほうが早い
それともこの程度のこともできないような低能ですか
あー、そうですか

19 :デフォルトの名無しさん:2006/09/13(水) 13:23:15
興奮するのはいいけど、それでやってるのがテーマのすげ替えなのが救えない。

20 :デフォルトの名無しさん:2006/09/13(水) 14:35:36
      |
      |
      |    こうですか!?わかりません!
      |
     J

21 :デフォルトの名無しさん:2006/09/13(水) 14:48:43
9=10とか11=12とか言ってるから、>20の言うとおりだろう。
>8は、基地外は放置してお話を再開していいよ。

単に標準ライブラリに追加でもいいならそう言い直しとけばOK。
そうじゃないなら追加の説明すれば問題なし。

22 :デフォルトの名無しさん: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

なんて書き方になるのかな?


23 :デフォルトの名無しさん:2006/09/13(水) 15:32:01
それのどこが木構造なんだ?

24 :デフォルトの名無しさん:2006/09/13(水) 15:36:10
せっかくの新スレなのに相手してて良いの?

25 :デフォルトの名無しさん:2006/09/13(水) 15:46:59
>>23
木構造のリスト表現 って一般用語だと思ってたのですが、一々説明しなきゃいけないのですか?

26 :デフォルトの名無しさん:2006/09/13(水) 16:20:49
>>22
代入だけ書いて、木構造だとわかれよ!は無理ありすぎ。

27 :デフォルトの名無しさん:2006/09/13(水) 16:23:46
>>25
それって、JavaScriptのArrayオブジェクトみたなやつですよね?
格納するデータの型に、制約の無い配列。

もしライブラリにするして・・・
どんな型でも返せる関数ってD言語でどう書くんですか? 教えてD言語のエロイ人。

28 :デフォルトの名無しさん:2006/09/13(水) 16:45:31
全てのクラスがObjectから派生してるんじゃなかったっけ?

29 :デフォルトの名無しさん:2006/09/13(水) 16:53:15
Boxに突っ込む

30 :デフォルトの名無しさん:2006/09/13(水) 16:55:23
22の説明は、いまいちなにを望んでるのか分かりかねると思う。

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

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

はたまた単に構文が欲しいだけなのか。Lisp周辺のようにリストを扱うのに
便利な関数群を実装して欲しいのか。なにを望んでるんだろう。

31 :デフォルトの名無しさん:2006/09/13(水) 16:57:54
>>25
Objectの配列にしかみえねぇじゃん。


32 :デフォルトの名無しさん:2006/09/13(水) 17:06:51
辞書順 binary-tree を表現するのに

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

みたいなことをしたいんじゃなかろうまいか


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

それだ!

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

木構造関係ないやん・・・。


35 :デフォルトの名無しさん:2006/09/13(水) 17:32:09
新スレ立って早々これかよ。┐(´ー`)┌

36 :8,22じゃないけど:2006/09/13(水) 17:38:04
AVLn分探索木クラスほしーなー

37 :デフォルトの名無しさん:2006/09/13(水) 18:03:10
>>7
GJ!!

38 :デフォルトの名無しさん:2006/09/13(水) 21:53:49
いい加減ネタにつられるのはやめにして
まともな話題を投下してくれ

39 :デフォルトの名無しさん:2006/09/13(水) 22:07:04
よろしく

40 :デフォルトの名無しさん:2006/09/13(水) 22:37:28
みなさん私のことも忘れないでね
つ hash table

41 :デフォルトの名無しさん:2006/09/13(水) 22:45:59
M$に見向きもされない件について

42 :デフォルトの名無しさん:2006/09/13(水) 23:37:04
見向きされたらもう終わり

43 :デフォルトの名無しさん:2006/09/13(水) 23:44:36
Visual D.net













まぁ、visual族は basic c++ j++ って決まってたしな

44 :デフォルトの名無しさん:2006/09/14(木) 03:15:27
日本語でおk

45 :デフォルトの名無しさん:2006/09/14(木) 03:48:47
(゚д゚) ← M$

46 :デフォルトの名無しさん:2006/09/14(木) 03:53:42
ここは Borland に頑張ってもらって Turbo D を出して欲しい。
せっかくのネイティブコンパイラなんだから
.NET 環境が無くても動作することが必須だけど。


47 :デフォルトの名無しさん:2006/09/14(木) 06:20:17
多分、中途半端に機能をVC辺りに盛り込まれて終わりじゃないかな

48 :デフォルトの名無しさん:2006/09/14(木) 10:41:15
lazyってすっげえ便利だな。
void hoge( lazy uint tgt ); に
hoge( timeGetTime() );
ってしてから気付いた。

49 :デフォルトの名無しさん:2006/09/14(木) 11:12:47
なんでこんな複雑になってしもうたん?

50 :デフォルトの名無しさん:2006/09/14(木) 11:22:41
またそれか ウゼ

51 :デフォルトの名無しさん:2006/09/14(木) 12:01:59
どこがふくざつなんだ?

52 :デフォルトの名無しさん:2006/09/14(木) 12:17:15
複雑なのではなくて>>49が脳足りんなだけだろ

53 :デフォルトの名無しさん:2006/09/14(木) 13:40:34
しばらく見てないうちに遅延評価まで導入されたのか?
何から何まで導入するんだな。

54 :デフォルトの名無しさん:2006/09/14(木) 14:14:16
lazyってコードを読みにくくするだけじゃない?
呼び出し側は普通の値渡しとおなじ構文だし。

55 :デフォルトの名無しさん:2006/09/14(木) 14:50:45
呼び出し側にも lazy って付けるべきだな。

56 :デフォルトの名無しさん:2006/09/14(木) 15:18:12
複雑だな

57 :デフォルトの名無しさん:2006/09/14(木) 16:28:31
呼び出し側からは、特に意識する必要はないと思うけど。

58 :デフォルトの名無しさん:2006/09/14(木) 19:34:49
逆だろ…。なんだこの仕様。
手続きの副作用を認識出来るのは関数を使う側、つまり呼び出し側だろ。

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

Haskell見て興奮した口なんだろうけど、それとこれは場合が違いすぎるわけで…。

59 :デフォルトの名無しさん:2006/09/14(木) 19:42:49
auto みたいに、両方に書くべきだろうな

60 :デフォルトの名無しさん:2006/09/14(木) 19:43:17
>>58
仮に、同じ考えの人が居た場合は
newsgroupで、そういう意見が出てるんじゃないの?

61 :デフォルトの名無しさん:2006/09/14(木) 19:48:43
λ式使えばいいだけに見えるんだけどね。

62 :デフォルトの名無しさん:2006/09/14(木) 20:05:52
>>58
必ず実行したい式をそこに書きいれるのはどうかと思う。
それに、関数の作用も分からずに使うわけ?
その関数の作用が分かればそれが遅延評価だって事にもすぐ気付くだろうに。

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

「実用的」な言語なら少しの簡単さを生む代わりにバグを生みやすくする必要は無かったと思う。

63 :デフォルトの名無しさん:2006/09/14(木) 20:12:17
lazyがないとexpを{return exp;}と書く必要があるけど
そういう、決まりきった事をコードに書くのは微妙にストレスを感じる。
そういう意味でD言語の何でもかんでも言語に追加するという思想は俺は好きだな。

64 :58:2006/09/14(木) 20:17:04
s/手続き/式/

>>62
ということは、気づかなくてはならない、ってことでは?
それだけでドキュメント必須になり、過去に使った関数さえ記憶の状態によっては過ちを犯す事がありえる。
遅延評価を言語要素として持っている限り、いかなる場所でのいかなる式が
遅延評価されてしまう可能性があるわけで。
ひょっとしたら、必ず実行されることが必要かも分からない、副作用のある式が遅延評価されてしまうかも知れない。

65 :デフォルトの名無しさん:2006/09/14(木) 20:27:09
今日からこのスレは

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


になりました
引き続きお楽しみください ...

66 :デフォルトの名無しさん:2006/09/14(木) 20:34:13
「罵倒」が見当たらない件。

67 :デフォルトの名無しさん:2006/09/14(木) 20:39:37
>ということは、気づかなくてはならない、ってことでは?
>それだけでドキュメント必須になり、過去に使った関数さえ記憶の状態によっては過ちを犯す事がありえる。

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

要するに、評価されたりされなかったりすることがあるから、
間違いがあったときに、わかりにくいってのが問題なんでしょ。

68 :デフォルトの名無しさん:2006/09/14(木) 20:50:20
>>67
元々俺が問題にしていることは、最初のレスの通り
この言語要素がプログラマの負担になるということなんだが。

lazyに限った、限らないの話ではない。
それが確実にプログラマにメリットよりも大きなデメリットをもたらすと言いたかっただけ。

69 :デフォルトの名無しさん:2006/09/14(木) 21:01:01
>>68
lazyに限らんいまさらな話だから
 > メリットよりも大きなデメリット
なんて大げさなものじゃないだろ、
という話じゃないかな。

70 :デフォルトの名無しさん:2006/09/14(木) 21:06:00
なるほど。そのメリットに対するデメリットの大きさが伝わらなかったのなら、俺の力不足だな。
出直してくる。

71 :デフォルトの名無しさん:2006/09/14(木) 21:45:25
俺ずっとlazyたんのこと好きだったのに>>58みたいに思ってた(´・ω・`)
けど>>57のおかげでlazyたんのことが少しわかった気がした(`・ω・´)

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

逆に、 void hoge(lazy uint tgt) { ... } がメンバ関数であってメンバ変数を書き換える関数だったり、
コンソールに文字を出力する関数だったら>>57の言うことは成り立たないと思った

72 :デフォルトの名無しさん:2006/09/14(木) 22:22:37
少なくとも、現時点では環境を束縛できないので、どのみちたいした問題ではないという考え方もある。


73 :デフォルトの名無しさん:2006/09/15(金) 08:31:43
ま、なんだかんだ言ってもそれなりに使いこなせるだろ
このスレの住人ならさ

74 :デフォルトの名無しさん:2006/09/15(金) 08:45:05
>>68
夢板はID制じゃねーでげすよぉおおおおお。
最初のレスなんてわからんでごじぇーますよ、お代官様。


75 :デフォルトの名無しさん:2006/09/15(金) 15:29:49
lazy って void 初期化子と同程度の重要性だと思ってた。
だって遅延評価って、ある条件下で評価しない代わりに高速化を望める仕様なんでしょ?
他に使い道があろうが、他の使い道はあんまり推奨してないんでは?

76 :デフォルトの名無しさん:2006/09/15(金) 15:33:28
Dの遅延評価って高速化の効能あるの?

77 :デフォルトの名無しさん:2006/09/15(金) 15:36:10
本家行って嫁

78 :デフォルトの名無しさん:2006/09/15(金) 15:41:06
大分前にLunaがDで使えないか、って言ってた奴居たけど、今公開されてる簡易版ならC用だから、割と楽に動かせるっぽい。
全然流れと関係なくてすまん。

79 :デフォルトの名無しさん:2006/09/15(金) 15:41:37
本来匿名デリゲートで書く構文を簡略化しただけであって
高速化は関係ないでしょ


80 :デフォルトの名無しさん:2006/09/15(金) 15:45:57
俺としては速度の向上よりも必要に応じて評価を意図的に行わないのが利点だな。
&&とか||とか?:の利点と同じ。

81 :デフォルトの名無しさん:2006/09/15(金) 15:48:32
「それを英語で言ってこい」スレ

82 :デフォルトの名無しさん:2006/09/15(金) 15:48:47
ようはつかいよう




83 :デフォルトの名無しさん:2006/09/15(金) 17:01:19
>>77
反語のつもりですた
ないよねぇ

84 :デフォルトの名無しさん:2006/09/15(金) 18:06:51
>>83
え?無いの?
本家では「パフォーマンスの向上に繋がる」ってあるけど

85 :デフォルトの名無しさん:2006/09/15(金) 18:20:13
速度の向上ってのは遅延評価によって無駄な
評価を行わないことによる速度の向上のことであって、
べつにdelegate渡しが高速にできるとか、そういういみじゃないぞ。
だいぶ勘違いしているようだけど。

86 :デフォルトの名無しさん: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();

こんな感じになるんぢゃない?
スコープとかスレッドとか考えるとこんな簡単じゃないのかも知れない。

87 :デフォルトの名無しさん:2006/09/15(金) 18:48:03
>だって遅延評価って、ある条件下で評価しない代わりに高速化を望める仕様なんでしょ?
遅延評価とはある条件下で評価をしないことによって高速化を望む手法なんだよ。

88 :デフォルトの名無しさん:2006/09/15(金) 20:09:06
ある条件下というか、必要になるまで評価しないので、必要にならない場合は評価されない。

89 :デフォルトの名無しさん:2006/09/15(金) 21:16:14
「ある条件で評価しない」
「条件来るまで評価しない、条件来なきゃ評価されない」

使用意図っつーか視点が違うだけで2つとも同じ主張に見える。

90 :デフォルトの名無しさん:2006/09/15(金) 22:31:17

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

というだけの話を、何でややこしく書くんだろう。

91 :デフォルトの名無しさん:2006/09/15(金) 22:57:20
遅延評価は速度的な問題よりは、
遅延評価する事により簡潔に書けることがある
という点の方が重要なんじゃないの?

92 :デフォルトの名無しさん:2006/09/15(金) 23:36:28
lazy使ったこと無いからこのスレで交わされてる内容から推測するんだけど

なんだかlazyって論理型言語の推論機構っぽいですね

93 :デフォルトの名無しさん:2006/09/16(土) 01:13:39
>>92
その発言が何を生むのか分からない。教えてエロイ人

94 :デフォルトの名無しさん:2006/09/16(土) 01:39:48
>>92
遅延評価と推論機構ってなんか関係あんの?


95 :デフォルトの名無しさん:2006/09/16(土) 03:30:26
そんなことより >>92 はこのスレで交わされてる内容を読んでないと思う。
読んでれば普通に >>87>>90 だけでも lazy が遅延評価だって分かるぞ。

96 :デフォルトの名無しさん:2006/09/16(土) 08:17:38
>>92はlazyが遅延評価だとはわかってると思うぞ
遅延評価の何らかの性質が推論機構に似ていると言っているだけで
>>93-94はどういう性質が似ているの?という質問だと思う
で、どこがどう似ているのか教えてエロい人

97 :デフォルトの名無しさん:2006/09/16(土) 12:03:12
論理型プログラミング言語ってあれだろ、推論のための"⇒"の論理式を書いて勝手に推論させる奴だろ
俺の見た目で、lazyは「必要なときに必要なだけ実行される」ように見えたから、これは「必要な」という推論がされているように感じただけ



なんだが('A`)

98 :デフォルトの名無しさん: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は言語側でキャッシュしてくれるの?

99 :デフォルトの名無しさん:2006/09/16(土) 13:25:54
頭がlazyな奴が次々と引き寄せられてるね。

100 :デフォルトの名無しさん:2006/09/16(土) 13:29:49
>>98
してくれません。今のところ。

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

void func(lazy int i) { if (i == 0) ... }
というのは、
void func(int delegate() i) { if (i() == 0) ... }
って感じだから。


101 :デフォルトの名無しさん:2006/09/16(土) 14:00:05
実際の計算を値が必要になるまで行わない手法が遅延評価。
遅延評価は仕様じゃないし、lazy==遅延評価でもない。
関数の引数に対して遅延評価を行う手段の一つがdelegateで、その別表記がlazy。

102 :デフォルトの名無しさん:2006/09/16(土) 14:57:06
bool func1(lazy int i) { return (i == 0); }
bool func2(lazy int i) { return (i() == 0); }
これってどっちも可なんだ。
まあ確かにlazyって引数情報が知らされないからトーゼンなんだね。

103 :デフォルトの名無しさん:2006/09/16(土) 15:03:53
>>102
?
引数の無い関数の括弧を省略しただけでは?

104 :デフォルトの名無しさん:2006/09/16(土) 17:05:30
>>103
へっ?略できんの?シランカッタスマンカッタorz

105 :デフォルトの名無しさん:2006/09/16(土) 18:03:58
セッターは代入形式で書いてゲッターの括弧は省略しようだぜ

106 :デフォルトの名無しさん:2006/09/16(土) 18:57:02
雪駄と下駄?

107 :デフォルトの名無しさん:2006/09/16(土) 19:05:32
いや、もう1引数の関数は全部代入形式で行こう
char[80]buf;
gets = buf;
dout.writeLine = buf;

108 :デフォルトの名無しさん:2006/09/16(土) 19:13:17
gets = buf;

buf.gets();
で行こう

109 :デフォルトの名無しさん:2006/09/16(土) 20:27:18
やっぱり処理の責任の所在を考えて

  あ  き  ら  め  ろ

110 :デフォルトの名無しさん:2006/09/16(土) 21:16:01
>>109
なんのはなし?

111 :デフォルトの名無しさん:2006/09/17(日) 01:38:50
>>101
なんだdelegateなのか

112 :デフォルトの名無しさん:2006/09/17(日) 04:22:11
>>111
なんだ知らなかったのか

113 :デフォルトの名無しさん:2006/09/17(日) 05:08:42
>>112
delegate(==lazy、>>101, >>112いわく)と遅延評価ってぜんぜん別物じゃん。
知らなかったって言われても。

Dのlazyはつまり、関数型言語の純粋な遅延評価とはまた違うわけね。


114 :デフォルトの名無しさん:2006/09/17(日) 08:31:30
拡張してそうなってんだから純粋ではない罠

115 :デフォルトの名無しさん:2006/09/17(日) 09:00:48
lazyってOrElseとAndOlseってことだろ?

116 :デフォルトの名無しさん:2006/09/17(日) 11:33:26
別物じゃないしょ?遅延評価をdelegate使って実現してるって話でそ。
でも、関数型言語に備わっているのと比べると形も違うし値をキャッシュしない等の不備もあるね。

117 :デフォルトの名無しさん:2006/09/17(日) 11:52:12
>>116
人はそれを別物と呼ぶ

”車はエンジンを使って動く”でしょ、だから車はエンジンなんだよ。
みたいな。

118 :デフォルトの名無しさん:2006/09/17(日) 11:58:01
バカか。お前それ言い方だけの問題だろ。

”車はエンジンを使って動く”でしょ、だから車はエンジンと関係してるんだよ。
みたいな。

119 :デフォルトの名無しさん:2006/09/17(日) 11:58:57
call by nameも遅延評価の一種だからD言語のlazyも遅延評価といえるんじゃね。

120 :デフォルトの名無しさん:2006/09/17(日) 12:12:51
>>118
釣りじゃないと思うから

(´д`)言い方で全てが決まるんだよボケ

121 :デフォルトの名無しさん:2006/09/17(日) 12:17:19
遅延評価をWikipedia

122 :デフォルトの名無しさん:2006/09/17(日) 12:29:39
・lazyをdelegateのシンタックスシュガー的なものとして見る
・lazyの実装に暫定的にdelegateを使っていて将来的には
 結果がキャッシュされるちゃんとした遅延評価になると思っている

の違いなんじゃないの?

123 :デフォルトの名無しさん:2006/09/17(日) 12:53:00
>>120
お前"の"バカな言い方で全てを決めるなボケ

124 :デフォルトの名無しさん:2006/09/17(日) 12:55:10
しかし、頑な宗教的思想を持った人間に関わるとろくなことが無いな。

125 :デフォルトの名無しさん:2006/09/17(日) 14:58:58
まぁお前の宗教に合わないだけなんだけどな。

126 :デフォルトの名無しさん:2006/09/17(日) 16:08:01
関数型言語マンセー

127 :デフォルトの名無しさん:2006/09/17(日) 16:17:40
 ・引数の式の値を評価するのが先か
 ・引数の式に関数を適用するのが先か
とは別に、
 ・式の値はキャッシュされるか否か
ということがある。

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

おまけに、遅延評価である、というのはそれを言語がサポート
するかプログラマが実装するかなんてことは問わないしな。

128 :デフォルトの名無しさん:2006/09/17(日) 17:13:38
日本語でおk

129 :デフォルトの名無しさん:2006/09/17(日) 17:19:00
>>128
透明してるんで見えないのでてst

130 :デフォルトの名無しさん:2006/09/17(日) 17:22:01
これはひどい

131 :デフォルトの名無しさん:2006/09/17(日) 17:25:36
頭の悪い人たちだな。
純粋な遅延評価でないものを、遅延評価だなんて言うなってことだよ。
何も分かってない人を相手にするのはほんと疲れる。

132 :デフォルトの名無しさん:2006/09/17(日) 17:36:23
>>131
> 純粋な遅延評価でないものを、遅延評価だなんて言うな
お断りだ

133 :デフォルトの名無しさん:2006/09/17(日) 18:13:48
思い切って話に加わったら
瞬く間に自分の馬鹿が判明して整合性にてんやわんやみたいな。

134 :デフォルトの名無しさん:2006/09/17(日) 18:15:33
いつの間にかlazy⇔遅延評価になってるしな
遅延評価というモデルを使うのがlazyで把握?

135 :デフォルトの名無しさん:2006/09/17(日) 20:34:00
うんそう。
実際の計算を値が必要になるまで行わないこと(即ち遅延評価)は関数の引数に対しても
delegateを使えば今までも実現できてたけど、引数に渡す{ return 式; }の文をwrapしたいとかでlazyが出来た。

個人的には前バージョンのdelegateへの暗黙変換だけの方が良かったな。
delegateがlazy表記になっただけで誤解してる人がいっぱい湧いてきたし。

136 :デフォルトの名無しさん:2006/09/17(日) 21:30:09
Wikipediaにも
>遅延評価とは「計算機科学における手法の一つ」
>「評価しなければならない値が存在するとき、実際の計算を値が必要になるまで行わないこと」
って書いてあるな。
遅延評価は手法だそうだからそれを実装さえすれば「遅延評価」と呼べそうな気がするな。

それともこれが「純粋じゃない遅延評価」で、関数型言語における遅延評価が「純粋な遅延評価」とでもいうのかな?
計算機科学における遅延評価ありきで、それを関数型言語が採用しているみたいだけど。

137 :デフォルトの名無しさん:2006/09/17(日) 21:38:21
まぁ、工学には良く有る話だよな

138 :デフォルトの名無しさん:2006/09/17(日) 21:39:28
「純粋な遅延評価」ってのをまず聞いたことがないというのが何とも。

139 :デフォルトの名無しさん:2006/09/17(日) 23:16:48
頭が良すぎてこの太陽系第三惑星に同意してくれる人を見つけられない
孤独な>>131を馬鹿にするのはやめろ。

140 :デフォルトの名無しさん:2006/09/17(日) 23:33:38
釣られすぎかと

141 :デフォルトの名無しさん:2006/09/17(日) 23:37:23
目欄や縦読み等の仕込み無しでの後出し釣り宣言なんてそれこそ敗北宣言ジャマイカ。

142 :デフォルトの名無しさん:2006/09/17(日) 23:52:41
>>141
悪い、>>140はアホにいちいち構うのは止そうぜ、って意味

143 :デフォルトの名無しさん:2006/09/18(月) 05:42:57
delegate=遅延評価 ではないが、delegateは遅延評価的な物として扱えますよ。
でおk?

144 :デフォルトの名無しさん:2006/09/18(月) 06:51:14
遅延評価は副作用が無ければキャッシュ可能だけど
副作用があったらキャッシュ不可能ですよ。

145 :デフォルトの名無しさん:2006/09/18(月) 09:40:55
最近はモーターで動く車もあるけどな

146 :デフォルトの名無しさん:2006/09/18(月) 10:32:38
>>143
遅延評価はdelegateを使うと表現しやすくなる程度じゃないのか?
それだとやっぱり「delegateを使うと自動的に遅延評価ができる」になってしまうと思われ

147 :デフォルトの名無しさん:2006/09/18(月) 10:51:05
「delegateで関数の引数に対して遅延評価を実現することができますよ」だろ。
遅延評価的な物、って何やねん。
何で変な喩えにするのかなあ。

148 :デフォルトの名無しさん:2006/09/18(月) 13:26:37
死刑だって言ってるのにしゃしゃり出てくるし。

149 :デフォルトの名無しさん:2006/09/18(月) 14:01:26
>>127で死刑にしたかったのは116ではなくて>>118でした。
その節は116様につきましては大変申し訳ありませんでした。

150 :デフォルトの名無しさん:2006/09/18(月) 14:24:53
>>149=>>116
ご苦労さんw

151 :デフォルトの名無しさん:2006/09/18(月) 14:38:45
最終的には煽りに行き着く。
まぁ、根拠もなく調子こいてたことがこれだけ明らかになっちゃね。

152 :デフォルトの名無しさん:2006/09/18(月) 15:37:25
そうそう。
116の馬鹿さ加減がこうも明らかになっちゃね。

153 :デフォルトの名無しさん:2006/09/18(月) 16:49:57
やっぱ頭が良い人の猿真似レスは異次元だわ。
常人ではここまで浮くことはできない。

154 :デフォルトの名無しさん:2006/09/18(月) 19:46:19
Dって予約語多いね

155 :デフォルトの名無しさん:2006/09/18(月) 19:52:09
むしろ
「Dって遅延評価無いの?」
「っ (delegate|lazy)」
でおkじゃね?

156 :デフォルトの名無しさん: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

まだあるかな?


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

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

「Dって遅延評価実現できないの?」
「っ&& || ?: delegate lazy」

158 :デフォルトの名無しさん:2006/09/18(月) 20:06:25
>>155
まだやってんの?
目的は何なの?

159 :デフォルトの名無しさん:2006/09/18(月) 20:07:58
連想配列使ってキャッシュすればいいだろうに…

160 :デフォルトの名無しさん:2006/09/18(月) 20:14:25
>>159
それはmemoize
lazyとは別の最適化手法


161 :デフォルトの名無しさん:2006/09/18(月) 20:15:05
> ・Dは遅延評価を仕様に定義している言語ではない
脳内定義を広めようと必死だな

162 :デフォルトの名無しさん:2006/09/18(月) 20:25:25
>>161
確かにプログラマのの実装によって遅延評価は実現できるんだけど、
関数型言語が持っているような『純粋な遅延評価』なんてDにはありませんよ?

&& || ?: delegate lazy
↑を使って遅延評価を実現することは出来るけどこれらは遅延評価そのものではないよ。

163 :デフォルトの名無しさん:2006/09/18(月) 20:30:17
>>156
lazy, iftype, scope, on_scope_exit, on_scope_failure, on_scope_successが無い。
instanceは違うと思う。
あとbitの代わりにbool。


164 :デフォルトの名無しさん:2006/09/18(月) 20:32:16
>>163
on_scope_exit, on_scope_failure, on_scope_successは廃止にならなかった?

165 :デフォルトの名無しさん:2006/09/18(月) 20:35:32
>>164
deprecatedだけど、一応まだ予約語。
その名前の変数とかは定義できない。

166 :デフォルトの名無しさん:2006/09/18(月) 20:39:01
>>165
そうだったのか。知らなかった。

>>160
lazyとは違うけどlazy+連想配列を使ったキャッシュで関数型言語の遅延評価と同じになるっしょ?

167 :デフォルトの名無しさん:2006/09/18(月) 20:39:47
C++の文字列型みたいなもんでしょ
言語仕様に「これがD言語での遅延評価です」ってあるわけじゃないけど
実現はできるという

不毛な主張だと思うよ
「遅延評価」の定義を明確に曖昧なく決定したいなら
自分で細部まで考えてどこか標準化してくれそうな団体に勝手に提案なりしてください
既に標準仕様があるならそれを晒すだけでいいけど
「なるほどそうなんだね」で終わるから

168 :デフォルトの名無しさん:2006/09/18(月) 20:43:58
>>167
当然>>143>>155当てだよね?

169 :デフォルトの名無しさん:2006/09/18(月) 20:44:50
>>162
『純粋な遅延評価』って何?
何をもって純粋と呼ぶのか正確な定義を頼む。

170 :デフォルトの名無しさん:2006/09/18(月) 20:46:00
>>162
「純粋な遅延評価」って何ですか?

171 :デフォルトの名無しさん:2006/09/18(月) 20:46:17
>>169-170
知らない。
>>113>>131に訊いて。

172 :デフォルトの名無しさん:2006/09/18(月) 20:47:15
>>162
お前の脳内定義は聞き飽きたから、その定義が
世の中一般の話では狭すぎるってことにはよ気付け。

遅延評価の話するたびに出てこられたらいちいちうざくてかなわん。

173 :デフォルトの名無しさん:2006/09/18(月) 20:53:40
>>168
ちがうよ
ずっとlazyを遅延評価と呼ぶことに過剰アンチ反応をしているヤツ

174 :デフォルトの名無しさん:2006/09/18(月) 20:55:17
>>172
わかった。
曰く世の中一般の話では狭すぎる定義解説はもうしない。
だがどんだけlazyが誤解されてたかもう一度スレを読み直せ。
まずはlazy==遅延評価でないってところから解説しなきゃならんひどい有様だったぞ。

175 :デフォルトの名無しさん:2006/09/18(月) 20:59:58
(´・ω・`)つ旦~

何だかよく分からないけど
コカ・コーラ(ホット)置いときますね

176 :デフォルトの名無しさん:2006/09/18(月) 21:01:21
というかさ、あるプログラミング言語における遅延評価を念頭に置きすぎてるな。

177 :デフォルトの名無しさん:2006/09/18(月) 21:12:52
> lazy==遅延評価でない
まだ言ってるよこの人

178 :デフォルトの名無しさん:2006/09/18(月) 21:27:23
ここまで頑なに主張するのは余程の理由があるとみえる
まあ、lazyって便利だね。でいいんじゃないか?

179 :デフォルトの名無しさん:2006/09/18(月) 21:27:54
逆に頑なにlazyを遅延評価と呼びたい>>177はlazyにどんな定義付けをしているのだろう。

180 :デフォルトの名無しさん:2006/09/18(月) 21:29:57
ん…?

181 :デフォルトの名無しさん: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



182 :デフォルトの名無しさん:2006/09/18(月) 21:30:34
lazyは構文糖でしょ。

183 :デフォルトの名無しさん:2006/09/18(月) 21:32:01
○○言語の○○と違うから、Dの○○は○○ではない。

メチャクチャ理論ここに極まれりって感じだな。

184 :デフォルトの名無しさん:2006/09/18(月) 21:38:43
>>183
>>134-136

185 :デフォルトの名無しさん:2006/09/18(月) 21:54:06
仕様見りゃ
> Lazy 引数は関数が呼び出されるときに評価されるのではなく、
> 関数の中で引数が使われる時点で初めて評価されます。
って書いてある。

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

というのは日本人でなくてもみな承知しているんだが、
なぜかlazyは遅延評価じゃないと言い張るアホが一人いる。
いいかげん自分の定義を見直せって。

186 :デフォルトの名無しさん:2006/09/18(月) 22:05:11
>>185
「lazyで遅延評価が実現できる」は真だけど「lazyは遅延評価である」は偽だよね。

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

でもclosureを備えたjavascriptとかrubyとかpythonみたいな言語が
「遅延評価を備えている」という風にいわれているのは今まで聴いたことがない。

187 :デフォルトの名無しさん:2006/09/18(月) 22:11:00
ああ、言葉遊びをしたいだけの馬鹿か。
言葉遊びは別のところでやってくれ不快だ。

188 :デフォルトの名無しさん:2006/09/18(月) 22:12:44
lazyは遅延評価の一つである

189 :デフォルトの名無しさん:2006/09/18(月) 22:15:06
>>185
>lazyキーワードを使うと、lazy引数になるから、遅延評価を行える。
>lazy引数の評価は遅延評価。
>D言語でのlazyっつーのは遅延評価の仕様のひとつ。
ここまでは当然承知してる。

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

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

うん、憑物が落ちた。
これについては認識の問題だし水掛け論にしかならんよな。本当に不毛だった。

190 :デフォルトの名無しさん:2006/09/18(月) 22:18:09
コカコーラをソフトドリンクと定義する

コカコーラは飲物である
飲物は液体である
よって液体はソフトドリンクである☆

191 :デフォルトの名無しさん:2006/09/18(月) 22:27:20
AはBであるという言葉の意味を
A∈Bと解釈する人と
A≡Bと解釈する人の不毛な争い

192 :デフォルトの名無しさん:2006/09/18(月) 22:33:09
流れ読まずに質問

上でdelegateはclosureの制限がかかったもの
って書いてますけど具体的にはどういう違いがあるんですか?

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

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

>>189
単にお前が間違ってるだけ。認識云々じゃなくて現実を見よう。

194 :デフォルトの名無しさん:2006/09/18(月) 22:36:21
lazy∈遅延評価が完全に保証されてれば意見は食い違わないんだけどね。
lazyが遅延評価に属するかどうかは実装次第。

195 :デフォルトの名無しさん:2006/09/18(月) 22:41:28
>>194
お前そんな馬鹿なこと言ってないで192に答えてやれよ

196 :デフォルトの名無しさん:2006/09/18(月) 22:45:47
>>195
>>186は漏れじゃない。
>>189の認識は現D言語の仕様じゃ曲がらん。
間違ってるわけじゃなくて>>191なんだよ。不毛な水掛け論。

197 :デフォルトの名無しさん:2006/09/18(月) 22:57:50
言葉を勘違いしたまま闖入して、捨て台詞は「不毛な水掛け論」だもんなあ。

198 :デフォルトの名無しさん:2006/09/18(月) 22:57:59
>>194
Lazyと遅延評価の定義を出し合えば良いだけだと思う。
なんで、それをしないで、喧嘩してるのか分からない。

最近この手の文系議論が多くて嫌。

199 :デフォルトの名無しさん: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


200 :デフォルトの名無しさん:2006/09/18(月) 23:07:42
結局、lazyの役割がlazy以外の語だったら
ヘンテコな議論にならずに済んだのかな……

201 :199:2006/09/18(月) 23:11:30
lazy:
ttp://www.kmonos.net/alang/d/lazy-evaluation.html
ttp://www.digitalmars.com/d/lazy-evaluation.html

202 :199:2006/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

203 :デフォルトの名無しさん:2006/09/19(火) 00:02:42
http://www.geocities.jp/lethevert/softwares/clean/gettingStarted14.html
このページによると、遅延評価の処理系にも2種類あって、
キャッシュが行われる「必要呼び(call by need)」と
行われない「名前呼び(call by name)」があるみたい。
となると、Dのlazyは「名前呼びの遅延評価」と言えるようなんだけど…
検証おながいしまつ

204 :デフォルトの名無しさん:2006/09/19(火) 00:52:25
把握した。
その定義が加わればlazy引数を複数回評価しようが遅延評価に属するね。

というわけでスレ汚しすいませんでした。

205 :デフォルトの名無しさん:2006/09/19(火) 01:36:10
お前は一族の面汚しだよ

206 :デフォルトの名無しさん:2006/09/19(火) 02:35:19
>>48
恐らく発端である >>48 に対して function 使えとは誰も言わないのか。

207 :デフォルトの名無しさん:2006/09/19(火) 02:36:00
うひゃ。意味不明。s/^>>48//

208 :デフォルトの名無しさん:2006/09/19(火) 03:03:22
>>207
sedつかった表現って受け入れられないよな(orz

209 :デフォルトの名無しさん: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.
キタ━━━━(゚∀゚)━━━━!!!!

210 :デフォルトの名無しさん:2006/09/19(火) 08:05:57
キタ━━━━(゚∀゚)━━━━!!!!

211 :デフォルトの名無しさん:2006/09/19(火) 08:18:39
こっちが通らなくて
auto x = [1,2,3];
これが通るのが遺憾
auto x = ([1,2,3]);

212 :デフォルトの名無しさん:2006/09/19(火) 08:28:47
>>211 どっちも通らん希ガス

213 :デフォルトの名無しさん: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`)

214 :デフォルトの名無しさん:2006/09/19(火) 08:37:29
>>212
いや、後者は通る。
void main(char[][]args){
    auto x = ([1,2,3]);
}
前者は配列リテラルじゃなくて静的配列の静的初期化。
で、autoで静的配列を宣言できないという制限に引っかかってエラーが起こっている。

215 :デフォルトの名無しさん:2006/09/19(火) 09:05:56
前スレの851のバグなおしてるな。

216 :デフォルトの名無しさん:2006/09/19(火) 09:08:29
>>215
マジか。
良かったあんな致命的なバグ直って。
そういえばあのバグはdmcでも出るとか言ってた様な気がするけどそっちは直ったんだろうか。

217 :デフォルトの名無しさん:2006/09/19(火) 09:34:02
>>216

DMCの最終版は8/12なので、まだでしょうな。

218 :デフォルトの名無しさん:2006/09/19(火) 11:38:12
むしろBugzilla 285が直されたのがうれしい

219 :デフォルトの名無しさん:2006/09/19(火) 12:02:51
こうなるとstruct literalも欲しくなってくるな

220 :デフォルトの名無しさん:2006/09/19(火) 17:46:17
9p8ujyh654w496t8nhyjmp98j,.[

221 :デフォルトの名無しさん:2006/09/19(火) 18:23:26
char[][] strs;
strs=["test","test2","test3"];
通らない…

222 :デフォルトの名無しさん:2006/09/19(火) 18:26:30
ああ、これで通った。
char[][] strs;
strs=[cast(char[])"test","test2","test3"];

223 :デフォルトの名無しさん:2006/09/19(火) 18:30:08
これは無理か。>static assert([cast(char[])"test","test2","test3"]==[cast(char[])"test","test2","test3"]);
templateの引数にも使えないし…ってこれは静的配列の時からだろうけど。

224 :デフォルトの名無しさん:2006/09/19(火) 20:54:27
>>222
らくちんな方法。
 strs = ["test"[], "test2", "test3"];

225 :デフォルトの名無しさん:2006/09/19(火) 21:36:35
配列リテラル

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

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

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



226 :デフォルトの名無しさん: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なんじゃなかろうか。

227 :デフォルトの名無しさん:2006/09/19(火) 21:59:28
is式がコンパイル時に評価できないのは当たり前なんだけど、
staticというと静的配列というよりstatic int[] a; とかそんな感じを受ける、
という話ね。

228 :デフォルトの名無しさん:2006/09/20(水) 08:48:23
D言語の仕様を読めば読むほど10進演算器が欲しい。
英語かけないので、だれか提案してくれないか。。。。
おねがい。

229 :デフォルトの名無しさん:2006/09/20(水) 08:51:45
てかさぁ、これだけビジネスにコンピューター使われてるのに、
10進演算をネイティブにサポートしてるのって、COBOLだけっていうのが
不思議。言語に組み込むのがそんなに難しいの?というか、言語に組み込むのが
無茶苦茶難しいなら、逆に、ライブラリで対処してるのが異常(そんなに難しいんだったら
ライブラリ作るのも難しいと思う)とか思う。

言語設計者が10進演算器を嫌うのは何故?

230 :デフォルトの名無しさん:2006/09/20(水) 09:43:15
これって釣り?

231 :デフォルトの名無しさん:2006/09/20(水) 10:12:14
>229
なんでもかんでも言語コアに組み込んで楽しい?

232 :デフォルトの名無しさん:2006/09/20(水) 10:20:32
>>230-231
その手の議論はいらない、10進演算器が「なんでもかんでもの範疇」という
論証してくれたら聞く。


233 :デフォルトの名無しさん:2006/09/20(水) 10:22:26
>10進演算をネイティブにサポートしてるのって、COBOLだけっていうのが

例えば .NET の各言語もネイティブにサポートしてたりするけどね。
(一見ライブラリによる対応に見えるが実際はネイティブのはず)

234 :デフォルトの名無しさん:2006/09/20(水) 10:33:16
まぁ、俺には必要ないからネイティブに組み込む必要もないな

>>233
それってsystem.decimal構造体のこと?
で、Dではそのうちでるんじゃないかと思ってるcent型が対応するのかな?

235 :デフォルトの名無しさん:2006/09/20(水) 11:37:03
必要とする人が絶対的に少ないのはライブラリであとづけなり無視。
そんなに必要なものなら人に頼ったり
こんなとこで何度も同じ話題をほじくり返し人の意見を聞かないでネチネチと愚痴る前に
辞書使って自分で訴えろよ、無能者。

236 :デフォルトの名無しさん:2006/09/20(水) 11:59:02
>>235
いやいや、前回聞いたときも、イラネって話は勢い良く書き込む人がいたのに、
理由を述べないから、聞きなおしてみただけで。罵倒する暇が有れば無視すりゃあ
良いのに(wとか思う。

いらない理由を述べられないのなら、黙ってたら良いのに。

237 :デフォルトの名無しさん:2006/09/20(水) 12:04:45
いる/らない理由を述べられないのなら、黙ってたら良いのに。 

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

別に元々あるものを削れと言ってるわけじゃないしな。
コアに組み込むほど使わんと思うから要らんと言ってるだけで。

239 :デフォルトの名無しさん:2006/09/20(水) 12:16:51
>>238
学生さんかなぁ?複素数型より、ニーズは高いんだけどね。
ニーズについて説得しなきゃならん人間に対して説得出来るとは思えないレベルの話。

よく哲学板で「何故人を殺しちゃいけないの?」スレが建ってるけど、
そんな質問する奴がおかしいので、これに対して説得してみるのは
面白いけど不毛。

240 :デフォルトの名無しさん:2006/09/20(水) 12:24:03
>>236
D使うのやめて、おとなしくCOBOLでも使ってればいい
それで全て解決だろw
クレ厨にDを使う資格はない


241 :デフォルトの名無しさん:2006/09/20(水) 12:29:38
コアに組み込むってどういう状態?
importしなくても使えるとか?

242 :デフォルトの名無しさん:2006/09/20(水) 12:36:20
文字列で10進数持って "123.425" * "23.78991"とか実装させればいいじゃん

243 :デフォルトの名無しさん:2006/09/20(水) 12:37:56
> 10進
勤めてる人間か学生かしらんけど、ここに書いてること自体無意味なのが分かってるんだろうか?
言うことおかしいし書く場所違うしもうサッパリなんですが・・・

それとも本気なのかな?
となるとなお更手がつけられないよね

244 :デフォルトの名無しさん:2006/09/20(水) 12:38:04
まあ平行線っぽいから要る要らんはさておくとして

「英語書けないから提案できない、誰か書いて」ってんならまず日本語で提案書いて
ここに書き込んでみてはどうだろう
誰かが訳してくれるかもしれん

245 :デフォルトの名無しさん:2006/09/20(水) 12:44:23
多倍長整数型は欲しい

246 :デフォルトの名無しさん:2006/09/20(水) 13:16:22
>>245
俺は使わないけれども、あってもいいなあと思う。個人的に。

247 :デフォルトの名無しさん:2006/09/20(水) 13:40:40
>>236
「必要性を感じない」
「使わない機能まで言語に組み込むことはない、ライブラリで十分」
と、理由述べているのに「理由を述べていない」とは
随分とご都合のいい解釈ですね。
あなたにとって都合の悪い意見は黙殺ですか。
ある意味すごいですね。

>>239
Dのユーザでは複素数より10進演算器のほうがニーズが高い根拠はどこにあるの?
参考までにいつ採られた統計でどこでそのような資料を確認できますか?(脳内資料?)
クレクレ言ってる人が必要とする理由を説くべきなのに
いらない理由を述べよとは随分と自分勝手な論理ですね。

248 :デフォルトの名無しさん:2006/09/20(水) 13:47:24
>>247
真性DQNを相手にマジになってもしょうがないよスレが荒れるだけ

249 :デフォルトの名無しさん:2006/09/20(水) 13:50:27
とりあえずハードに影響をうけないのはライブラリでいい気がするな。

250 :デフォルトの名無しさん:2006/09/20(水) 14:03:39
>>245
俺もほしい。
ライブラリという形で十分だけど。
Cのライブラリをbccでコンパイルして使ったりとか、
C++のライブラリをD用に書き直したりとかしたらいけるかなと思いつつも、
結局めんどくさくてやってない俺。

251 :デフォルトの名無しさん:2006/09/20(水) 14:09:30
十進演算は意外と汎用性がないからなあ。
大半は普通の演算で対応できるし、実務分野ごとに作りこむなら
ライブラリのほうが便利だし。

252 :デフォルトの名無しさん:2006/09/20(水) 14:13:30
>>251
意外と汎用性がないんじゃなくて、言語がサポートしないから、
汎用政の無い、作りこまなきゃならない10進演算が乱立してしまったんだと思う。

253 :デフォルトの名無しさん:2006/09/20(水) 14:42:56
>>243
こういう文脈で10進が出てくるときはBCDとかBigNum系列の事だよな?


254 :デフォルトの名無しさん:2006/09/20(水) 14:43:53
汎用性ないんだろうなあ。COBOLしか採用してないっていうんだから。
特定分野向け、といった感じか。専門性は物理演算エンジンみたいなもんかね。

255 :デフォルトの名無しさん:2006/09/20(水) 14:49:38
VBにあるような通貨型とかじゃないの

256 :デフォルトの名無しさん:2006/09/20(水) 14:54:50
10進演算器って?

257 :デフォルトの名無しさん:2006/09/20(水) 14:57:22
ぐぐってもようわからん
具体的にどんなことが出来るのか例を挙げて説明してくれ

258 :デフォルトの名無しさん:2006/09/20(水) 14:58:20
>>257
0.1を十回足せば1になる。

259 :デフォルトの名無しさん:2006/09/20(水) 15:05:44
誤差の出ない小数計算って解釈で良い?

260 :デフォルトの名無しさん:2006/09/20(水) 15:11:55
ttp://www.geocities.co.jp/SiliconValley/4334/unibon/topic/radixerror.html
こういうことでしょ?

ここに書かれている通り
整数に直して計算すればいいだけの話じゃないの?

261 :デフォルトの名無しさん:2006/09/20(水) 15:16:08
BCDに関しては、最近の本だとWrite Great Codeとか読めばいいと思う

262 :デフォルトの名無しさん:2006/09/20(水) 15:23:54
>>260
なるほどね把握した
とりあえず、俺は要らないなぁ…

263 :デフォルトの名無しさん:2006/09/20(水) 15:25:22
>>262
えっ!!>>260で納得する人が何故ム板のしかもD言語スレにいるの?

264 :デフォルトの名無しさん:2006/09/20(水) 15:37:10
ごめんなさいね
「要らない」なんて言って

265 :デフォルトの名無しさん:2006/09/20(水) 16:04:48
10進演算器でググっても全然ヒットしなかった。
どうやら 多倍長整数 ってのが一般的な呼び方らしい。

266 :デフォルトの名無しさん:2006/09/20(水) 16:08:24
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_005/cs2_005_02.html

267 :デフォルトの名無しさん:2006/09/20(水) 16:10:37
>>265
ぜんぜんちがいまーーーーーーーーしゅ。

268 :デフォルトの名無しさん:2006/09/20(水) 16:17:40
っていうか俺なら必要だとしても既存のライブラリを使うか自作で組むかすると思う。
んでそのライブラリを紹介してやれば良いじゃん。
D板のみんなのためになると思うよ。


269 :デフォルトの名無しさん:2006/09/20(水) 16:18:24
最後のSystem.Decimalは、高精度の計算ができる10進数表記のデータ型である。
この結果からは分からないが、小数も扱うことができる。
特に小数の計算を行うと、System.SingleやSystem.Doubleでは結果が狂う場合もあるが、
System.Decimalならずっと正確に計算できる。その代わり、計算は遅くなる。
スピードを取るか精度を取るかで選択されるべきものだろう。


270 :デフォルトの名無しさん:2006/09/20(水) 16:20:22
>>267
ちがうなら、どこかの解説ページURL希望。

271 :デフォルトの名無しさん:2006/09/20(水) 16:22:48
>>270
この程度なら自分言葉で言える。
多倍長整数は少数を扱えない。

扱うならいろいろしなきゃ駄目。→10進演算ライブラリ。

272 :デフォルトの名無しさん:2006/09/20(水) 16:41:54
扱えないじゃなくて、普通扱わないだ(w
ごみん

273 :デフォルトの名無しさん:2006/09/20(水) 16:45:44
お金の計算目的だとして、どんな演算が求められるの?
四則演算・除余のほかにも、累乗など色々と要るんじゃないの?
10進演算の為だけに演算子追加するもなぁ…。
やっぱり、雛形になる10進演算ライブラリを元に、
欲しい機能を書き足す方が融通利くんじゃない?

274 :デフォルトの名無しさん:2006/09/20(水) 18:47:57
ライブラリを薦める人数が10進演算を言語としての機能に入れる必要の無さを物語っている。
っていうか10進演算が必要だといった人は理由を言ってないよね。
言語に組み込む必要も一緒に述べてから、反応はそれからで良いから。
皆釣られすぎ。


275 :デフォルトの名無しさん:2006/09/20(水) 18:50:23
>>274
でも、ライブラリを進める奴って、>>260読んで納得したり、>>261を勧めるレベルだぜ。
>>260も>>261も間違っちゃいないが、小学生の算数レベルじゃん。

276 :デフォルトの名無しさん:2006/09/20(水) 18:52:06
一分野のごく一部にしか役に立たない機能はいらない。


277 :デフォルトの名無しさん:2006/09/20(水) 18:55:31
>>276
じゃあ、複素数も要らないじゃん。

278 :デフォルトの名無しさん:2006/09/20(水) 18:58:24
それは無理。複素数型はCに存在するからね。
Cとのバイナリレベルの互換性をある程度考えているDで複素数を外すのは難しい。

279 :デフォルトの名無しさん:2006/09/20(水) 19:12:35
>>278
頓珍漢と話すのは面倒だなぁ。。。
複素数型を使ってる人間と、10進演算器を必要としてる人間の数の違いが分かって無い。
怖いのは、0.1を10回たしても、1.0にならないのに気づかずに使ってるキチガイが、
これほど多い事だな。

280 :デフォルトの名無しさん:2006/09/20(水) 19:18:22
この場をひっくり返すのは無理そうだよ>>277etc?
ライブラリじゃなくて言語仕様に含めたらどういう場面でどう便利になるのか
具体的にコードを示して説得してみなよ

281 :デフォルトの名無しさん:2006/09/20(水) 19:20:59
>>279
>1.0にならないのに気づかずに使ってるキチガイが、
>これほど多い
どこをどう読んだらそうなるんだ

282 :デフォルトの名無しさん:2006/09/20(水) 19:22:42
>>280
だから、何度も言ってるけど、>>275で指摘した問題点をクリアーした
レベルの人間相手じゃないと、無意味だってーの。
>>260>>261をこの場で提示することが恥ずかしいって思える人じゃなきゃ
無理。

283 :デフォルトの名無しさん:2006/09/20(水) 19:25:07
指摘した問題点をクリアした人が殆どいないという時点で
D言語ユーザーには大して需要がないのは明らかだな。

需要があるのなら問題点をクリアできる人がもっといるはずだしな

284 :デフォルトの名無しさん:2006/09/20(水) 19:26:56
この期に及んで何を言ってるんだろうねこの人は・・・

285 :デフォルトの名無しさん:2006/09/20(水) 19:27:55
>>284>>282

286 :デフォルトの名無しさん:2006/09/20(水) 19:31:35
>>283
だから、黙ってろよ。馬鹿は。と、遠まわしに言ってるのにぃい。
いい加減恥ずかしくならないの?

287 :デフォルトの名無しさん:2006/09/20(水) 19:38:36
需要云々よりも、言語仕様に組み込むメリットが見えないんだよね。
複素数の場合は、複雑怪奇なテンプレートによる構文を回避できるとか、
リテラルが自然な形で記述できるとか、最適化ができる可能性があるとかいうのが、
ドキュメントで触れられてる。


288 :デフォルトの名無しさん:2006/09/20(水) 19:39:07
需要が少ないけどあれば必要な時に便利…程度の事なのに何故ここまで伸びるんだか…
ってかWalterに伝えないでここでぐだぐだ言っててもしかたないとおも。

289 :デフォルトの名無しさん:2006/09/20(水) 19:40:22
>>286
鏡を見てもちつけ
おまいに対する真摯なレスを見逃してるぞ
気に入らないレスに反応している場合じゃない

それでも見えないなら・・・もうここから去れ
おまいの期待するもんはここにはない

290 :デフォルトの名無しさん:2006/09/20(水) 19:49:22
>>289
見当たらない。要らない理由をこじつけてる以上の物が見当たらない。

291 :デフォルトの名無しさん:2006/09/20(水) 19:51:50
たとえばさ、10進演算が実装されるとして、構文どうすんの?とかいう話の方が有意義じゃないか?

292 :291:2006/09/20(水) 19:53:47
あ、でも、>>290みたいな態度の人間とは議論できないなあ。。。

293 :デフォルトの名無しさん:2006/09/20(水) 20:26:03
だから、黙ってろよ。馬鹿は。
と、遠まわしどころか直接的に言われてるのにまだ吼えてる人がいるスレはここですね?

294 :デフォルトの名無しさん:2006/09/20(水) 20:34:09
>>293
お前がバカじゃないならWalterタソに自分で英語で伝えたら良いのに。
Walterタソに言わなきゃ、どんなに欲しがっても手に入んないぞ。言語機能としては。

あと、都合の悪いレスを「黙ってろよ、バカ」って言ってるように見えるけどそれはどうなんだろうね。

295 :デフォルトの名無しさん:2006/09/20(水) 20:37:00
バカバカ言い合うバカ言語
D D D D DEN♪

296 :デフォルトの名無しさん:2006/09/20(水) 20:40:55
英文も書けない人に馬鹿馬鹿言われたくないです><

297 :デフォルトの名無しさん:2006/09/20(水) 20:43:07
>>244がすげえ良いことを言ってるはずなのに全員無視。
せめて>>286は反応してやりなよ。

298 :デフォルトの名無しさん:2006/09/20(水) 20:43:53
「分かってないなぁ」と言ってるやつに触れなきゃいいだけだな。
そいつは真摯なレスを頭に血が上って見逃してるんじゃなくて、
自分の言葉で必要性を説明すると突っ込まれるのが怖いから
冷静に「分かってる振り」をしてるだけだってのは、ここまでの
様子をみりゃ一目瞭然だろ。

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

話題を振ってくる人間のめぐり合わせが悪かったと思って、
これを雑談のネタにするのはすっぱり諦めなよ、みんな。

299 :デフォルトの名無しさん:2006/09/20(水) 20:57:41
全くどうでもいい通りすがりだが,10進数の0.1が2進数で循環小数に
なるのはプログラマの常識だから多倍長整数とか外したこといってた
奴は恥ずかしさで悶え死んだ方がいいぞ

300 :デフォルトの名無しさん:2006/09/20(水) 21:00:44
↑スルーで

301 :デフォルトの名無しさん:2006/09/20(水) 21:08:43
>多倍長整数とか外したこといってた奴

日本語でおk

302 :デフォルトの名無しさん: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);
  }
 }
}

303 :デフォルトの名無しさん:2006/09/20(水) 21:51:57
必要なら複製しるってことじゃないかな。

304 :デフォルトの名無しさん:2006/09/20(水) 22:09:09
>>302
嫌っていうかopSliceの仕様からしてしょうがないんじゃない?

305 :デフォルトの名無しさん: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); }
}

306 :デフォルトの名無しさん:2006/09/20(水) 23:52:31
>>305
ary1.length が 0
ary2.length が 4
ary3.length が 5
になってるね。

307 :デフォルトの名無しさん: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); }
}

308 :デフォルトの名無しさん:2006/09/21(木) 00:00:09
この調子じゃ配列リテラルもベータ版であんまり期待しないほうが良いな。
むしろ今からバグ取り段階か。

309 :デフォルトの名無しさん:2006/09/21(木) 00:03:01
まぁ実装初期はバグだらけってのはD言語の風物詩だからなぁ
しばらくすると安定してくるから今は次バージョン待ちだな。

310 :デフォルトの名無しさん:2006/09/21(木) 00:20:34
話に付いていけない俺がいる・・・orz

311 :デフォルトの名無しさん:2006/09/21(木) 00:20:48
ん、あ、いつのまにか 0.167 になっとんたんか

312 :デフォルトの名無しさん:2006/09/21(木) 10:45:41
確かに構造体/クラスリテラルが欲しくなるなあ
それはともかく、dupを使うべきときとそうじゃないときがわかりにくくて困るんだが・・・
標準ライブラリで文字列処理をしてると実行時に急に落ちて原因究明に時間がかかったおー

313 :デフォルトの名無しさん:2006/09/21(木) 10:55:51
>>312
配列を共有したくない場合。
例えば書き込み禁止になってるメモリ部分にある文字列を代入して変更したいとか。

char[] t="aaaa".dup;
t[2]='b';

314 :デフォルトの名無しさん:2006/09/21(木) 11:45:24
あーそういえば文字列リテラルも書込み禁止領域だったっけ・・・
忘れてたけどだいぶ前にそんな話してたなぁ

315 :デフォルトの名無しさん:2006/09/21(木) 12:53:30
「2の補数表現の16進数表記」の文字列から10進数への変換って簡潔に書けない?
なんか自分で書くとすごく泥臭くなる orz
Dなら・・・Dならなんとかしてくれる?

316 :デフォルトの名無しさん:2006/09/21(木) 14:06:58
foreach(c; tolower(str)){
  sum = sum*16 + (c-'0')%('W'-'0');
}

317 :デフォルトの名無しさん:2006/09/21(木) 14:20:03
うわ・・・
思ってたよりもかなり簡潔になりました
ありがとうございました

318 :デフォルトの名無しさん:2006/09/21(木) 14:47:57
>>316さんのを参考に tolower使わない版
int sum = 0;
foreach(char c; str){
 sum = (sum<<4) + ((c|0x20)-'0')%('W'-'0');
}

319 :デフォルトの名無しさん:2006/09/21(木) 15:52:23
>>318
phobosのstd.stringに入れちゃえ

320 :デフォルトの名無しさん:2006/09/21(木) 15:57:22
げ、dupってなに?rubyのdupと同じく扱って良いのかな
とか思ってたら配列限定のプロパティなのね・・・

321 :デフォルトの名無しさん:2006/09/21(木) 16:19:09
int hexToDecimal(char[] hex) {}
int dec1 = hexToDecimal("A");
int dec2 = hexToDecimal('A'); // <- こっちはエラー

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

とりえあず 'A' を char[] 型に変換するにはどうするのがいいかな?

322 :デフォルトの名無しさん: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;
}

323 :デフォルトの名無しさん:2006/09/21(木) 16:35:29
 long hexToDecimal(char c){
  return hexToDecimal([c]);
 }
 long hexToDecimal(char[] hex){
  (以下略)
で普通にいけたが。

324 :デフォルトの名無しさん:2006/09/21(木) 16:42:20
>>321
配列リテラル使えるようになったから
int dec2 = hexToDecimal( ['A'] );
こうでしょ。

325 :デフォルトの名無しさん:2006/09/21(木) 16:42:22
スタックオーバーフローなのだが

326 :デフォルトの名無しさん:2006/09/21(木) 16:43:31
decimal に変換してるんじゃなくて整数に変換しているように見えるのは俺だけ?

327 :デフォルトの名無しさん:2006/09/21(木) 16:58:11
そもそも「2の補数表現の16進数表記」といわれてるのに
符号はどこいったという話だな。

328 :325:2006/09/21(木) 17:06:46
>>323-324
ごめん
いけた orz

329 :デフォルトの名無しさん:2006/09/21(木) 17:08:27
['A']
顔に見えた

330 :デフォルトの名無しさん:2006/09/21(木) 17:09:21
>>329
顔にしか見えなくなった
和んだ

331 :デフォルトの名無しさん: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;

332 :デフォルトの名無しさん:2006/09/21(木) 18:40:07
これと
auto hoge = new Hoge;
これが
auto Hoge hoge;
等価であって欲しいと願う今日この頃

333 :デフォルトの名無しさん:2006/09/21(木) 18:42:34
あ、でもんなことしたら面倒になるだけか。
じゃあいいや。

334 :デフォルトの名無しさん: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;
みたいに新しいキーワードを導入する方がいいと思うけども

335 :デフォルトの名無しさん:2006/09/21(木) 19:24:10
auto auto c = new Class;
なにこれ。

これ
auto Class c = new Class;
を実現したいなら、これ
auto c = new Class;
で良いはずだが、他になにかの機能付きなのだろうか

336 :デフォルトの名無しさん:2006/09/21(木) 19:27:44
>>335
良いはずねーだろ
下のはRAIIじゃねえぇぇー

337 :デフォルトの名無しさん:2006/09/21(木) 19:36:10
>>336 ハァ?
RAIIってアレだよな。
C++とかで言う
Class c;
ってやつ。
それなら間違ってないと思うが。

338 :デフォルトの名無しさん:2006/09/21(木) 19:37:34
っていうか
auto c = new Class;
これはRAIIだよ?

339 :デフォルトの名無しさん:2006/09/21(木) 19:38:08
以前してた話がまたループしてたり勘違いさんが増えてきたけど新米が増えた?

340 :デフォルトの名無しさん:2006/09/21(木) 19:38:39
>>338
そのautoはただの型推論

341 :デフォルトの名無しさん:2006/09/21(木) 19:39:46
>>338
ちゃうわボケ

342 :デフォルトの名無しさん:2006/09/21(木) 19:40:40
>>337
暗黙の型推論にするキーワードと、RAIIにするキーワードが
両方とも auto なんですよ。全く異なる機能なのに…。
現在の仕様では、両方を同時に指定できないのです。

343 :デフォルトの名無しさん: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");
}

344 :デフォルトの名無しさん:2006/09/21(木) 19:45:16
>>343
単にそれはプログラム終了時にGCされているだけ。

345 :デフォルトの名無しさん:2006/09/21(木) 19:45:45
>>343
それだと~thisはjavaのファイナライザと同等なはず。

346 :デフォルトの名無しさん:2006/09/21(木) 19:50:16
普通に raii キーワードでも作って機能を分離させりゃいいのにとか思った

347 :デフォルトの名無しさん: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;
の書き方は、単なる型推論。

348 :デフォルトの名無しさん:2006/09/21(木) 19:59:00
>>347
そうだったのか・・・。ありがとう偉い人。
今後ちょっと書き込み控えます。

349 :デフォルトの名無しさん:2006/09/21(木) 20:12:59
build 3.03 リリース

350 :デフォルトの名無しさん: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が推論のキーワードなんだけどな。
一見予約語の追加が面倒だったからのように思えるけど、
これはなにか深遠なる理由があるんだろうか。

351 :デフォルトの名無しさん:2006/09/21(木) 20:47:32
>>350
深遠というよりautoが型推論なのは単純にC++0xのパクリじゃね?

352 :デフォルトの名無しさん:2006/09/21(木) 20:53:11
かなり古くからauto classはあった。
その後、型推論のautoが追加された。
さしたる理由はないと思うよ。

353 :デフォルトの名無しさん:2006/09/22(金) 10:01:36
こうなれば良いのに

static hoge = 12; // 静的変数 int
const huga = 12u; // 定数 uint
auto huge = 12l; // RAII long
hoga = 12ul; // ulong

354 :353:2006/09/22(金) 10:03:32
あ、RAIIってのはオブジェクトで表さないと意味無いってか使い方間違ってるorz

355 :デフォルトの名無しさん:2006/09/22(金) 14:10:29
>>353
> hoga = 12ul; // ulong
バグのもとなのでやめてほしい。

やめてほしいとかいう個人的感情はともかく、Dだと外側のスコープの
変数を覆い隠す形の変数名での宣言を禁止しているくらいだから、
そういうバグの種になるものは採用されないと思う。

356 :デフォルトの名無しさん:2006/09/22(金) 14:30:21
D言語って整数思考なんですか?

357 :デフォルトの名無しさん:2006/09/22(金) 15:11:00
var hoga = 12ul; ならいいんじゃね?
型推論くらい最近の関数型言語なら普通でよ。

358 :デフォルトの名無しさん:2006/09/22(金) 19:16:03
var に一票

359 :デフォルトの名無しさん:2006/09/22(金) 20:48:02
>>356
float志向のPC用CPUって何?

360 :デフォルトの名無しさん:2006/09/22(金) 20:57:23
挑戦者シリーズの事?>>359


361 :デフォルトの名無しさん:2006/09/23(土) 13:13:25
eclipse ベースの開発環境ってまだでないの?

362 :デフォルトの名無しさん:2006/09/23(土) 13:17:59
言語仕様の変更を追尾する賢いインテリセンスなんてないしね。

363 :デフォルトの名無しさん:2006/09/23(土) 13:41:24
開発環境は無くてもあまり困らんが
ApplicationFrameworkが無いのはつらいな


364 :デフォルトの名無しさん:2006/09/23(土) 13:46:55
おいらはDFLユーザー

365 :デフォルトの名無しさん:2006/09/23(土) 14:53:39
>>364
DFLの使い方を日本語で解説してるところってないですかね?

366 :364:2006/09/23(土) 23:06:26
日本語どころか英語でさえろくに解説ないんじゃないですかねぇ

367 :デフォルトの名無しさん:2006/09/24(日) 01:24:13

よ〜し
パパ頑張っちゃうぞ〜


368 :デフォルトの名無しさん:2006/09/24(日) 01:28:50
みんな最初はそういうんだよ。最初はね。
Noahの中の人は長くつづいてるね。感心する。

369 :1 ◆qRy0pp8F66 :2006/09/24(日) 01:52:23
俺はね、もうね、正直に生きることにしたよ!
そんな生き方の中で一つ自分について発見したんだ!!






















                             俺は正直じゃない

370 :デフォルトの名無しさん:2006/09/24(日) 03:57:33
俺だって頑張って生きることにしてるんだけど本当は頑張ってないって事を発見したんだぜ


371 :デフォルトの名無しさん:2006/09/24(日) 11:02:59
   / ̄\
  |  ^o^ | < ぼくは まちがって いません
   \_/
   _| |_
  |     |
         / ̄\
        |     | < ぼくも まちがって いません
         \_/
         _| |_
        |     |

   / ̄\
  |  ^o^ | < しんじつは いつも ひとつです
   \_/
   _| |_
  |     |
         / ̄\
        |     | < じゃあ あなたが まちがっています
         \_/
         _| |_
        |     |

372 :634:2006/09/24(日) 21:40:04
DFLって仕様らしい仕様が公開されてないみたいだから
日本語の解説サイトを作ろうにも・・・
同梱されてるサンプルくらいしか確実なものがない

373 :デフォルトの名無しさん:2006/09/24(日) 21:40:35
634じゃねえや364だ

374 :デフォルトの名無しさん:2006/09/24(日) 21:46:11
>>372
ソースという完全な仕様が(ry

375 :デフォルトの名無しさん:2006/09/24(日) 22:01:06
void delegate()[] es;

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

このソースを上手くlazyを使って改良できないかな・・・
lazyはdelegateを簡略化した物だと言ってるけど、実際はちょっと仕様が違うような・・・

376 :デフォルトの名無しさん:2006/09/24(日) 22:01:58
>>375
既出

377 :デフォルトの名無しさん:2006/09/24(日) 22:15:01
これでいいんじゃね
void regist(void delegate()[] p...)
何か整合性が取れてない仕様な気もするが。

378 :デフォルトの名無しさん:2006/09/24(日) 22:36:42
>>377
いやだめだろ。lazy使えって言ってるしさ。

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

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

379 :デフォルトの名無しさん:2006/09/24(日) 22:51:44
lazy引数をdelegate配列に結合するのは>>181を見る限りじゃ無理では

380 :デフォルトの名無しさん:2006/09/24(日) 22:54:05
言語開発者に主要な言語のひとつとしてRubyをあげられるまでになったか。
小さな会社の思いっきり自己満足な言語なんだろうな。(中の人のレベルは神かも知れんが)

381 :デフォルトの名無しさん:2006/09/24(日) 23:06:52
>>377
http://d.hatena.ne.jp/kurimura/20060831

382 :デフォルトの名無しさん:2006/09/24(日) 23:37:14
lazyみたいな引数をdelegateとして受け取れればイイナー

383 :デフォルトの名無しさん: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);
}

384 :デフォルトの名無しさん:2006/09/25(月) 16:32:38
全然関係ないけど、つかそもそも日本語化けるなあと思ってたらMBSに変換してやりゃ通るのか。
(ウィンドウのタイトルは普通に通るけど、なんで?)
変換のコストもあるだろうしWバージョン欲しいなあ>>DFL

385 :デフォルトの名無しさん:2006/09/25(月) 16:53:39
ボタンとかリストビューのヘッダーも変換なしでいけたような
なんでかなあ

386 :デフォルトの名無しさん:2006/09/25(月) 19:48:42
>>384 >>385
import/dfl/utf.d 覗いてみたら? ある程度、化け対策してるみたいだよ。

387 :デフォルトの名無しさん:2006/09/25(月) 20:28:47
>>382
lazyの引数に & 付けてアドレス得ようとすると怒られるので…
ダミーの引数追加してから
  void foo( lazy void p, int dummy = 0 ) {
>>381の方法を応用し、&dummyからスタック上のpの位置求めて引っこ抜けるんじゃね?

388 :デフォルトの名無しさん:2006/09/25(月) 21:08:24

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

dmd 0.167
dfl 0.9.2

389 :383:2006/09/25(月) 23:12:00
>>388
アリがd
時間ができたら引き続き調べてみる

390 :デフォルトの名無しさん:2006/09/25(月) 23:45:56

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



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

ああ、一回カーソルをListViewの外に出すと
また選べるようになる。なんじゃこりゃ。w

392 :デフォルトの名無しさん:2006/09/27(水) 00:14:17
DFLって楽しいの?

393 :デフォルトの名無しさん:2006/09/27(水) 00:17:21
>>397
なめるとおいしい、かじると固い、焼くと焦げる、煮るとあくだらけ。

394 :デフォルトの名無しさん:2006/09/27(水) 07:37:21
>>397 ワクワク

395 :デフォルトの名無しさん:2006/09/27(水) 09:15:36
ツマンネ

396 :デフォルトの名無しさん: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

とか出て失敗するんですけどもどうしたらいいんでしょうか?

397 :デフォルトの名無しさん: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

398 :デフォルトの名無しさん: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;
}

399 :デフォルトの名無しさん: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;
}

簡単にエラー回避できるんだけど、
エラーとして表示される行番号が、適切でないので
どうしてエラー出たのかわかりにくい。

400 :デフォルトの名無しさん:2006/09/27(水) 13:59:48
>>398
Bugzillaで探してなければ報告汁
http://d.puremagic.com/bugzilla/

401 :デフォルトの名無しさん:2006/09/27(水) 17:10:30
こういうときはたぶん探すための英語力もない罠
そういう漏れもTOEIC200点台 orz

402 :デフォルトの名無しさん: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

403 :デフォルトの名無しさん:2006/09/27(水) 20:38:12
Dにもアスペクト指向が欲しいなと思った

404 :デフォルトの名無しさん:2006/09/27(水) 21:18:07
http://d.hatena.ne.jp/shinichiro_h/20040804#p1
今でもできるかな

405 :デフォルトの名無しさん:2006/09/27(水) 23:14:36
>>403
石綿乙

406 :デフォルトの名無しさん:2006/09/27(水) 23:22:39
>>405
疲れ目乙


407 :デフォルトの名無しさん:2006/09/27(水) 23:54:37
>>404
そこらへんの仕様は変わってないはず

408 :383:2006/09/28(木) 01:26:15
\import\dfl\listview.d (1976):
final void hoverSelection(bool byes) // setter

誰かこの関数を呼んでくれぇ
どうみてもこの関数内を通過していません本当にありがとうございました orz
コンパイラのバグかなぁ

409 :デフォルトの名無しさん:2006/09/28(木) 01:30:16
唐突に思ったんだが、

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

何だろう、こう…子供が踏み台に上って、「ほら、ボクって大人と同じ大きさなんだよ!」みたいな雰囲気があるのは…

410 :デフォルトの名無しさん:2006/09/28(木) 01:33:40
好きなのを使うがよかと。
実アプリを作れるという意味ではDは未だにバージョンアップのたびに言語仕様を変更して
バックコンパチビリティがないからC#の方が完成度が高いのは間違いないからね。

411 :デフォルトの名無しさん:2006/09/28(木) 01:34:27
ライブラリもたっぷりだしな。

412 :デフォルトの名無しさん:2006/09/28(木) 01:36:29
>>410
うん、そうなんだけど
俺もDは陰ながら応援してる身だし、あんまり浮気はしない
この間C++からC#に(何を思ったか)移行しようと思ってた趣味の人間を、Dに引きずりこんだし。

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

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


…ああ、全てが崩壊していく(orz

413 :デフォルトの名無しさん:2006/09/28(木) 01:43:10
俺はC#から移行したいけどとどまってる・・・

414 :デフォルトの名無しさん:2006/09/28(木) 02:01:09
C#は現状ではネイティブコードに比べて動作が遅いこと・・・
これがVistaになって劇的に改善されるとかだったらC#へ移行するんだけどなぁ

415 :デフォルトの名無しさん:2006/09/28(木) 02:09:17
>>414
変わらないと思うよ
そして予想だけどあなたの思う「動作が遅い」は数々の恩恵による結果だと思う

416 :383:2006/09/28(木) 02:13:33
ごめん間違い
ライブラリ全体を再ビルドできなきゃならんのか
ソースだけいじってもそらダメだ罠 orz

417 :デフォルトの名無しさん:2006/09/28(木) 02:23:38
>>396-376
Buildの使い方(日本語)はありませんか?
何をどうやったら

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

を実現できるのかわからなくて・・・

418 :デフォルトの名無しさん:2006/09/28(木) 02:35:15
.NETはライブラリの相互利用ができるのがいいよな。
J#のライブラリをC#で使ったり、C#のライブラリをNemerleで使ったり。

419 :デフォルトの名無しさん:2006/09/28(木) 06:08:53
.NETじゃなくてもOSとCPUが同じならライブラリは使えるけどな。

420 :デフォルトの名無しさん:2006/09/28(木) 06:28:15
>>415
それは解っているんだが、
ソフトによってはその恩恵よりもスピードが大切なものもあるからな。
原理上難しいのは解るが、少しでも改善されるのであれば、
C#という言語がもっと使えるものになるとは思うけどね。

もうスレ違いなのでsage

421 :デフォルトの名無しさん:2006/09/28(木) 12:46:39
>>419
WTLをDで使う方法を教えてくれ

422 :デフォルトの名無しさん: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

423 :デフォルトの名無しさん:2006/09/28(木) 16:35:23
libgphobosのライセンスってなによ?

424 :デフォルトの名無しさん:2006/09/28(木) 17:48:05
>>422
ありがトン!
すごくよくわかりました
インポート文を書かなくてもソースリストを渡せばコンパイルしてくれるのかと思った

425 :デフォルトの名無しさん: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); } );
}

426 :デフォルトの名無しさん: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 イランカッタノカ...


427 :デフォルトの名無しさん:2006/09/30(土) 23:27:26
っていうかそんな機能あったんだ・・・シランカッタ

428 :デフォルトの名無しさん:2006/09/30(土) 23:29:30
Dのclosureの書き方がC++でもつかえたらいいのに

429 :デフォルトの名無しさん:2006/09/30(土) 23:37:13
そんな機能ってどんな機能だ?

430 :デフォルトの名無しさん:2006/09/30(土) 23:51:37
↓そんな機能
void p(int i){printf("%d",i);}
100.p();
↑こんな機能

431 :デフォルトの名無しさん:2006/10/01(日) 00:47:01
配列のみじゃなかった?

432 :デフォルトの名無しさん:2006/10/01(日) 00:47:54
あれ、クロージャって定義できるんじゃなかったっけ
いかん…Grovyと混ざってるかも

433 :デフォルトの名無しさん:2006/10/01(日) 01:43:38
>>431
え、そうなんだ。
ってか>>430のコード通らないし。

できればその機能のドキュメント読みたいので参照求みます

434 :デフォルトの名無しさん:2006/10/01(日) 01:45:32
A a = new A;
a.hoge();
a.hoge;

どっち使ってる?
漏れは戻り値型がvoidならa.hoge()
そうじゃなかったらa.hoge

435 :デフォルトの名無しさん:2006/10/01(日) 01:49:42
俺は常に a.hoge();
a.hoge; はプロパティ限定と心に決めている。

436 :デフォルトの名無しさん:2006/10/01(日) 01:52:08
なんで?バカみたい

437 :デフォルトの名無しさん:2006/10/01(日) 01:52:52
なんで?バカみたい

438 :デフォルトの名無しさん:2006/10/01(日) 02:09:48
>>435
俺も同じ

439 :デフォルトの名無しさん:2006/10/01(日) 02:11:30
バカが2人

440 :デフォルトの名無しさん:2006/10/01(日) 02:34:45
なんで>>435>>438がバカなのか知りたいです

441 :デフォルトの名無しさん: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("ぬるぽ");
  }
}

442 :デフォルトの名無しさん:2006/10/01(日) 02:52:21
漏れも>>435だな

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

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

>>440
自分が信仰しているコーティングスタイルの教義に反するんだろう。

443 :デフォルトの名無しさん:2006/10/01(日) 03:45:06
俺も>>435
これもコーディング標準で言及して欲しいな

444 :デフォルトの名無しさん:2006/10/01(日) 03:47:34
Javaも7からはgetter/setterを省略できるようになるらしいしね。

445 :デフォルトの名無しさん:2006/10/01(日) 03:53:53
メソッドを a.hoge; で呼べること自体どうかと思うんだが。

446 :デフォルトの名無しさん:2006/10/01(日) 04:17:15
Rubyだとクラス側でのgetter/setter定義を一言でできる
ようになってたと思うけど、444の言うもそれなんかな。

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

>>445
呼べるようにしてあるのは、get/setとメンバ変数の区別を、
呼び出し側においてしなくてすむようにするため、だったはず。
という話じゃなくて、442のa.hoge;みたいな記述はコンパイラで
エラーにしろよ、という話なのかな。

447 :デフォルトの名無しさん:2006/10/01(日) 04:54:25
>>445
pascalは引数無しの手続きや関数をそうやって書ける。
Dの場合はsmalltalkのアクセサと同じ感覚の方での使い方なんだろうけどね。


448 :デフォルトの名無しさん: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の区別を付けるうまい方法があればいいんじゃね?

449 :デフォルトの名無しさん:2006/10/01(日) 05:47:28
戻り値がvoidのときだけ()省略を禁止するのもなんか不公平だし
完全に解決できてないし

450 :デフォルトの名無しさん:2006/10/01(日) 06:36:26
ゲッターとセッターを使ったらpublicなメンバ変数との区別が・・・・・・付かなくて良いのか?

451 :デフォルトの名無しさん:2006/10/01(日) 06:46:55
Dは楽しそうな機能がいっぱいだね。

452 :デフォルトの名無しさん:2006/10/01(日) 06:47:40
むしろ区別が付かないことを狙っている

453 :デフォルトの名無しさん:2006/10/01(日) 06:48:36
>>452 なるほど、納得

454 :デフォルトの名無しさん: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

455 :デフォルトの名無しさん:2006/10/01(日) 07:25:11

sが抜けた

456 :デフォルトの名無しさん:2006/10/01(日) 07:48:23
failoutとかはやめて欲しい気持ちで一杯です。見にくいです。
普通にscope(i)で良いと思います。
あと、このコードの
scope(exit) { writef("scopeout"); writefln();};
最後の;は普通に要らんと思います。

457 :デフォルトの名無しさん:2006/10/01(日) 08:30:38
きっと普段から
for(;;){
};
とか
while(...){
};
とか書いてる馬鹿だろうから放置しる

458 :デフォルトの名無しさん:2006/10/01(日) 11:16:00
>>454
イライラするって ; だけ?アホ?

文と式の区別もつかないバカは死んだらいいよ。

459 :デフォルトの名無しさん:2006/10/01(日) 11:20:39
>>454
せっかくだからって…closeだとかSDL_termだとかで必要な時に使えよ…

460 :デフォルトの名無しさん:2006/10/01(日) 12:03:38
これはもうVB厨の俺の出番だと思ってやってきました
すでに()の省略やプロパティなんかは10数年以上の歴史を持ってますよと
さらにいえばプロパティはメソッドの糖衣構文ですよと

461 :デフォルトの名無しさん:2006/10/01(日) 14:08:57
>>458
まぁ苛々しすぎてるのはお前のほうだけどなw

462 :デフォルトの名無しさん:2006/10/01(日) 14:17:46
>>461
はいはい。意味不明君は帰ろうね

463 :デフォルトの名無しさん:2006/10/01(日) 14:21:51
>>462
ほんとにすげー苛々してるなw
薬はちゃんと飲めよ。勝手な判断で飲まないと悪化するからな。

464 :デフォルトの名無しさん:2006/10/01(日) 14:24:32
>>461-463
お前ら全員帰れ。つまらない事でスレ消費すんな

465 :デフォルトの名無しさん:2006/10/01(日) 14:25:32
朝鮮人同士が罵りあうスレはここですか?

466 :デフォルトの名無しさん:2006/10/01(日) 14:27:35
     ,' / /              やっつぁっつぁぱれびっぱれらんらんびっぱりりんらんぴちたんるんらー
      |  //ヘ-‐ '´ ̄ ̄`ヽ、
       |  /  / /" `ヽ ヽ  \  りぴたりるんらーるっぱりるぴらんこれかんろっかやきりかんぐー
   三  |   //, '/     ヽハ  、 ヽ
  / 三 .L 」 ミ{_{`ヽ   ノ リ| l │ i| まっちゃっちゃーやりびだりりんらびりちたんりんらんでんらんどー
X /   | | .レ!小l●    ● 从|、i|
 /     | | ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│ あばりっかったーばりっぱりーばりびりびりびりすてんてんどんどん
       /´`'J __|ヘ   ゝ._)   j /⌒i !
. ―   ヽ._人::::| l>,、 __, イァ/  /│やばりんらすてんらんてんやろーわらぶどぅぶどぅぶどぅぶどぅぶどぅーやぶー
.  ― ミ ノ ノ:::::/| /ヾ:::|三/::{ヘ、__∧ |   
   ミ (_/`ヽ< | | /ヾ∨:::/ヾ:::彡' | わでぃーだんりんらんせんらんどぶだけだげだげどぅーどぅーでーやどー

467 :デフォルトの名無しさん:2006/10/01(日) 14:29:47
ついにファビョったw

468 :デフォルトの名無しさん:2006/10/01(日) 14:34:50
やっつぁっつぁぱれびっぱれらんらんびっぱりりんらんぴちたんるんらー
      |  //ヘ-‐ '´ ̄ ̄`ヽ、
       |  /  / /" `ヽ ヽ  \  りぴたりるんらーるっぱりるぴらんこれかんろっかやきりかんぐー
   三  |   //, '/     ヽハ  、 ヽ
  / 三 .L 」 ミ{_{`ヽ   ノ リ| l │ i| まっちゃっちゃーやりびだりりんらびりちたんりんらんでんらんどー
X /   | | .レ!小l●    ● 从|、i|
 /     | | ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│ あばりっかったーばりっぱりーばりびりびりびりすてんてんどんどん
       /´`'J __|ヘ   ゝ._)   j /⌒i !
. ―   ヽ._人::::| l>,、 __, イァ/  /│やばりんらすてんらんてんやろーわらぶどぅぶどぅぶどぅぶどぅぶどぅーやぶー
.  ― ミ ノ ノ:::::/| /ヾ:::|三/::{ヘ、__∧ |   
   ミ (_/`ヽ< | | /ヾ∨:::/ヾ:::彡' | わでぃーだんりんらんせんらんどぶだけだげだげどぅーどぅーでーやどー


469 :デフォルトの名無しさん:2006/10/01(日) 14:35:03
これがゆとり教育の成果か…orz

470 :デフォルトの名無しさん:2006/10/01(日) 14:36:11
やっつぁっつぁぱれびっぱれらんらんびっぱりりんらんぴちたんるんらー
      |  //ヘ-‐ '´ ̄ ̄`ヽ、
       |  /  / /" `ヽ ヽ  \  りぴたりるんらーるっぱりるぴらんこれかんろっかやきりかんぐー
   三  |   //, '/     ヽハ  、 ヽ
  / 三 .L 」 ミ{_{`ヽ   ノ リ| l │ i| まっちゃっちゃーやりびだりりんらびりちたんりんらんでんらんどー
X /   | | .レ!小l●    ● 从|、i|
 /     | | ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│ あばりっかったーばりっぱりーばりびりびりびりすてんてんどんどん
       /´`'J __|ヘ   ゝ._)   j /⌒i !
. ―   ヽ._人::::| l>,、 __, イァ/  /│やばりんらすてんらんてんやろーわらぶどぅぶどぅぶどぅぶどぅぶどぅーやぶー
.  ― ミ ノ ノ:::::/| /ヾ:::|三/::{ヘ、__∧ |   
   ミ (_/`ヽ< | | /ヾ∨:::/ヾ:::彡' | わでぃーだんりんらんせんらんどぶだけだげだげどぅーどぅーでーやどー


471 :デフォルトの名無しさん:2006/10/01(日) 14:37:04
マジレスしてバカを見るスレはここですか?

472 :デフォルトの名無しさん:2006/10/01(日) 14:37:29
やっつぁっつぁぱれびっぱれらんらんびっぱりりんらんぴちたんるんらー
      |  //ヘ-‐ '´ ̄ ̄`ヽ、
       |  /  / /" `ヽ ヽ  \  りぴたりるんらーるっぱりるぴらんこれかんろっかやきりかんぐー
   三  |   //, '/     ヽハ  、 ヽ
  / 三 .L 」 ミ{_{`ヽ   ノ リ| l │ i| まっちゃっちゃーやりびだりりんらびりちたんりんらんでんらんどー
X /   | | .レ!小l●    ● 从|、i|
 /     | | ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│ あばりっかったーばりっぱりーばりびりびりびりすてんてんどんどん
       /´`'J __|ヘ   ゝ._)   j /⌒i !
. ―   ヽ._人::::| l>,、 __, イァ/  /│やばりんらすてんらんてんやろーわらぶどぅぶどぅぶどぅぶどぅぶどぅーやぶー
.  ― ミ ノ ノ:::::/| /ヾ:::|三/::{ヘ、__∧ |   
   ミ (_/`ヽ< | | /ヾ∨:::/ヾ:::彡' | わでぃーだんりんらんせんらんどぶだけだげだげどぅーどぅーでーやどー


473 :デフォルトの名無しさん:2006/10/01(日) 14:38:54
やっつぁっつぁぱれびっぱれらんらんびっぱりりんらんぴちたんるんらー
      |  //ヘ-‐ '´ ̄ ̄`ヽ、
       |  /  / /" `ヽ ヽ  \  りぴたりるんらーるっぱりるぴらんこれかんろっかやきりかんぐー
   三  |   //, '/     ヽハ  、 ヽ
  / 三 .L 」 ミ{_{`ヽ   ノ リ| l │ i| まっちゃっちゃーやりびだりりんらびりちたんりんらんでんらんどー
X /   | | .レ!小l●    ● 从|、i|
 /     | | ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│ あばりっかったーばりっぱりーばりびりびりびりすてんてんどんどん
       /´`'J __|ヘ   ゝ._)   j /⌒i !
. ―   ヽ._人::::| l>,、 __, イァ/  /│やばりんらすてんらんてんやろーわらぶどぅぶどぅぶどぅぶどぅぶどぅーやぶー
.  ― ミ ノ ノ:::::/| /ヾ:::|三/::{ヘ、__∧ |   
   ミ (_/`ヽ< | | /ヾ∨:::/ヾ:::彡' | わでぃーだんりんらんせんらんどぶだけだげだげどぅーどぅーでーやどー


474 :デフォルトの名無しさん:2006/10/01(日) 14:42:27
何度聴いても
 まっちゃっちゃー
じゃなくて
 らっつぁっつぁー

475 :デフォルトの名無しさん:2006/10/01(日) 14:44:16
とりあえず荒らしを止めるおまじないを

天安門 自由 台湾 独立 法輪功 虐殺 人権 蛇頭 臓器

476 :デフォルトの名無しさん:2006/10/01(日) 15:22:31
454が暴れてるのか?

477 :デフォルトの名無しさん:2006/10/01(日) 15:23:34
>>463
イライラしてるのも、薬を飲まないといけないのもお前だろ・・・

478 :デフォルトの名無しさん:2006/10/01(日) 15:28:41
>>476
462

479 :デフォルトの名無しさん:2006/10/01(日) 15:29:47
実は461==462説

480 :デフォルトの名無しさん:2006/10/01(日) 15:30:41
>>478
俺じゃないので454だな。

481 :デフォルトの名無しさん:2006/10/01(日) 15:32:03
不毛だって分かってるだろが。

482 :デフォルトの名無しさん:2006/10/01(日) 15:32:27
自演乙

483 :デフォルトの名無しさん:2006/10/01(日) 15:34:01
かるしうむがたりないんだな

484 :デフォルトの名無しさん:2006/10/01(日) 15:40:10
>>475
ワロタww

485 :デフォルトの名無しさん:2006/10/01(日) 16:00:13
脳がとろけてると、なんにでも笑えるんだね

486 :デフォルトの名無しさん:2006/10/01(日) 16:07:36
脳が硬くなって滅多に笑わなくなるよりまし。

487 :デフォルトの名無しさん:2006/10/01(日) 16:32:52
>>485
もしかしてお前欝気味?

488 :454:2006/10/01(日) 17:44:11
おまいらおはよう.
俺のせいでえらいことになってるな・・・すまん.
scope(i)と括弧をまたいでiも含めてキーワードになってるのが気持ち悪かったんだ.他にそんなのあったか?
セミコロンはfor&whileの後の{}と同じだったんだな・・・()が気持ち悪くて気づかんかった・・・単文のときはそりゃいるだろ,俺のばかー.
あとせっかくだからっていうのは存在を忘れ去られている機能じゃないかと思ってたよ・・・

489 :デフォルトの名無しさん:2006/10/01(日) 17:51:18
>>488
キーワードってか予約語はscopeだけ。extern(C)とかと同じ。括弧内は特別扱いは少しキモいかもね。if(auto i=true)は通るのにwhile(auto i=getLog())は通らなかったり…

490 :デフォルトの名無しさん:2006/10/01(日) 18:15:19
>>487
もしかしてお前脳トロ?

491 :デフォルトの名無しさん:2006/10/01(日) 18:29:14
>>490
脳トロってなんかおいしそうじゃね?

492 :デフォルトの名無しさん:2006/10/01(日) 18:55:21
>>491
美味しいよ?中国では一般的な食べモノ

493 :デフォルトの名無しさん:2006/10/01(日) 18:56:37
日本人は低能知能なのには呆れますね。
私達中華人民はあなたたちの掲示板を拝見して笑ってみてますよ。ではありがとうございました。


494 :デフォルトの名無しさん:2006/10/01(日) 19:02:38
カニ味噌を思い出した。それだけ。

495 :デフォルトの名無しさん:2006/10/01(日) 19:05:11
天安門 自由 台湾 独立 法輪功 虐殺 人権 蛇頭 臓器

496 :デフォルトの名無しさん:2006/10/01(日) 19:19:16
チベット ダライ・ラマ ウイグル 東トルキスタン 中国六四真相 六四事件

497 :デフォルトの名無しさん:2006/10/01(日) 19:29:48
454のおかげでD言語スレは荒れ果てましたな。ご苦労。

498 :デフォルトの名無しさん:2006/10/01(日) 19:35:32
>>497
あれ俺だけじゃないの雇われたのって

499 :デフォルトの名無しさん:2006/10/01(日) 19:51:22
>>498
はい、雇われたと妄想してるのはあなただけじゃないですよ

500 :デフォルトの名無しさん:2006/10/01(日) 19:54:18
>>499
先客がいるならやることないや。それじゃ

501 :デフォルトの名無しさん:2006/10/01(日) 20:09:17
はい、それでは。次に妄想派遣される時は、日曜は休みにしてもらった方がいいですよ。

502 :デフォルトの名無しさん:2006/10/01(日) 20:16:25
変数の参照を返すってどうやればいい?
受け取る時はinout指定すればいいみたいなんだけど……。

503 :デフォルトの名無しさん:2006/10/01(日) 20:20:07
>>502
日本語でおk

int* test(){
  int i=1;
  return &i;
}
ってこと?

504 :デフォルトの名無しさん:2006/10/01(日) 20:28:13
>>503
ごめん、そういうこと(勿論ローカル変数じゃないけども)。
C++だとint&で返せたんだけども、やっぱりポインタ使う形になるのか。

505 :デフォルトの名無しさん:2006/10/01(日) 20:55:41
天安門 自由 台湾 独立 法輪功 虐殺 人権 蛇頭 臓器

506 :sage:2006/10/01(日) 22:14:06
ようやくお手製XMLパーサがまともに動くようになってきた。
完成までもう少しかもしれん。

507 :デフォルトの名無しさん:2006/10/01(日) 22:16:41
インタフェースベースで開発しろよ。↓のようにしとけば、今後の互換性も大丈夫だ。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/org/w3c/dom/package-summary.html

508 :デフォルトの名無しさん:2006/10/01(日) 22:17:21
DOMみたいなかんじ?SAXみたいなかんじ?


509 :デフォルトの名無しさん:2006/10/01(日) 22:20:12
StAX作って欲しいな。Java6から登場するんだが、あれはいい。

510 :デフォルトの名無しさん:2006/10/01(日) 22:21:20
天安門 自由 台湾 独立 法輪功 虐殺 人権 蛇頭 臓器

511 :sage:2006/10/01(日) 22:47:45
今はSAXみたいなかんじというよりはSAXを実装している様な感じ。

512 :デフォルトの名無しさん:2006/10/01(日) 22:52:14
なんだSAXか・・・。ショボ

513 :sage:2006/10/01(日) 22:54:40
StAXは知らないからな。今、見てみたけど作れるだろうよ。

514 :デフォルトの名無しさん:2006/10/01(日) 23:01:46
イテレータを使ってXMLを走査するって感じなのかな?>StAX

515 :デフォルトの名無しさん:2006/10/01(日) 23:11:18
まさにそんな感じ。あれはゲーム屋とかが喜ぶ規格だな。

516 :デフォルトの名無しさん: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

ていうのがいつも出てくる

517 :デフォルトの名無しさん:2006/10/02(月) 01:11:37
無理。templateは、C言語などでのプリプロセッサみたいなものだから、
コンパイル時にのみ意味がある。リンクの時には無意味。

518 :デフォルトの名無しさん:2006/10/02(月) 06:12:00
これより
enum ABC : uint { A=3, B, C }
これの方が
typedef uint ABC = 3;
enum : ABC { A=ABC.init, B, C }
好きなんだがどう思う?


519 :516:2006/10/02(月) 10:05:34
>517
言葉が足りなかった。
いや、テンプレートそのものをライブラリに出来ないのはわかってる。

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

dmdの仕様なのか、-cオプションで出てくる.objにはテンプレートの実体
(_D3dgl4math16__T9LimitCalcTiZ4plusFiiZi みたいなの)が
出力されてこないんだよ。


520 :デフォルトの名無しさん:2006/10/02(月) 12:12:59
コードを出力したいだけならインスタンス化するダミーを入れればいいんじゃないの?
でもそんなコトするのになんの意味があるのだろう?
テンプレートを import しないで使う理由がわからん。


521 :!= 516:2006/10/02(月) 15:09:03
>>520
テンプレートを使ったコードをライブラリにするとリンクエラーが起こるって話だよ。
ライブラリにしないで普通にコンパイルするとうまくいくから、コンパイラのバグだと思うんだけど。

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

522 :デフォルトの名無しさん:2006/10/02(月) 15:43:18

そんなにバグあるのか・・・。
っていうか、リンカやライブラリアンじゃなくてコンパイラなの?

523 :デフォルトの名無しさん:2006/10/02(月) 16:15:32
試してみた。Windows(dmd)でリンクエラー、Linux(dmd,gdc)リンクOKだった。

524 :521:2006/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を比べてみると、それ自体の中身が違ってたりする(リンクすべき対象が無い)。
だから、コンパイラの方なんじゃないかと。
リンクすべき対象が無ければリンクエラーになるのは当たり前なんで、リンカに罪はないと思う。

>>52
うまくいかないのはWindows環境だけか。
なるほど。

525 :デフォルトの名無しさん:2006/10/02(月) 16:59:34
あ、すまない。ほんとにlib作って試してた・・・。
winのdmツールはじめて使ったのでもしかしたら、使い方まちがってただけかもしれん・・・。


526 :516:2006/10/02(月) 20:06:33
>>521
ありがとう。現状では根本解決はできないのか。
というか、他にそんなバグがあったなんて知らなかった。

>>523
gdcではOKなのね。コンパイラ関係なのは判ってたから、そっちでは
問題ないかもと思っていたんだが、検証thx。


527 :デフォルトの名無しさん:2006/10/03(火) 11:55:00
D 0.168

#dmd.zip落とそうとしたら0KBのが落ちてきたのでftp経由でdmd.168.zip落とした

528 :デフォルトの名無しさん: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.


529 :デフォルトの名無しさん:2006/10/03(火) 12:43:54
win32.windowsが落ちるアレは未だに直ってないけどそもそも報告されてんのかな

530 :デフォルトの名無しさん:2006/10/03(火) 13:08:11
>>529
win32.windowsって、どこにあるファイル?

531 :デフォルトの名無しさん:2006/10/03(火) 13:16:00
例外がthrowされた行を突き止めたいんだけど、無理?

532 :デフォルトの名無しさん:2006/10/03(火) 13:52:08
>>529
>7のやつを使っとけ
今やDのWindowsAPIのバインディングはそっちが標準だから

533 :デフォルトの名無しさん:2006/10/03(火) 14:45:04
>>531
今でも動くかはしらんが
http://www.digitalmars.com/d/archives/digitalmars/D/32313.html
をねじこめば。

534 :デフォルトの名無しさん:2006/10/03(火) 16:54:39
>>532
スマソ。
そっちの話じゃなくて落ちる原因

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

の方が未だに直ってないねって話。

535 :デフォルトの名無しさん:2006/10/03(火) 18:39:22
通らない…
template test(char[] val){
  const char[] test=val;
}

mixin test!(['a','b','c']);

536 :デフォルトの名無しさん: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;
}

537 :デフォルトの名無しさん:2006/10/03(火) 19:30:53
通らない…
void main(){
  writefln([1,2,3]~2);
}

538 :デフォルトの名無しさん:2006/10/03(火) 20:33:47
535, 536 は前スレの 799 と同じ原因のような気がする。

const char[] c = ['0'];
switch(hoge){
case c:
break;
}
がエラーになるがらみの。


539 :デフォルトの名無しさん:2006/10/04(水) 08:34:38
phobosのrandomになんでMTは使ってないの?
効率的なら使えばいいのにとか思う。

540 :デフォルトの名無しさん:2006/10/04(水) 19:02:36
重いから

541 :デフォルトの名無しさん:2006/10/04(水) 22:59:54
軽いんじゃなかったっけ?
いや、俺>>539じゃないしよく知らんけど。

542 :デフォルトの名無しさん:2006/10/04(水) 23:28:41
>>541
ここが参考になる
http://www.emit.jp/mt/mt.html


543 :デフォルトの名無しさん:2006/10/05(木) 15:25:13
初期化が重い
あとメモリーを食いすぎる
複数の乱数原を使うときはキャッシュの利用効率が悪くなる


544 :デフォルトの名無しさん:2006/10/05(木) 16:31:34
MTはデフォの線形合同法よりは遅いしメモリも喰うけど
質のいい乱数生成法の中では軽いほうだし
線形合同法の質の悪さを考えたら普通はMTを選ぶと思うな

545 :デフォルトの名無しさん:2006/10/05(木) 17:01:00
gdcはgcc-4.1.1には対応してないのか・・・

対応して欲しいな…

546 :デフォルトの名無しさん:2006/10/05(木) 17:15:08
>>542-543
なる。サンクス。
まあ今のrandomはマルチスレッドにも非対応ってことだし、アルゴリズムも含めて暫定的な実装なのかな。

547 :デフォルトの名無しさん:2006/10/05(木) 18:08:13
ttp://www.denen.org/
みんな知ってるのかもしれないけどMT実装あるみたい。
randomは修正BSDらしいからstd.randomが気にくわない人は使うといいかと思われる。

548 :デフォルトの名無しさん:2006/10/05(木) 18:41:15
ていうかここのCコードから普通に移植できるだろ
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html

549 :デフォルトの名無しさん:2006/10/05(木) 19:33:01
DってCのコード通らないの?

550 :デフォルトの名無しさん:2006/10/05(木) 19:44:07
って言うか、ABAさんのゲームのソースにDにポーティングしてあるヤツが入ってる。

551 :デフォルトの名無しさん: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; とするのはマズイでしょうか?


552 :デフォルトの名無しさん: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ビルドはまだ成功していない

553 :デフォルトの名無しさん:2006/10/06(金) 01:08:09
>>552
なんでwin32.libがいるの?
そんなのリンクするからエラーなるんじゃないの?


554 :デフォルトの名無しさん:2006/10/06(金) 06:03:49
>>552
>>7はソースからwin32.libをビルドして使うものだよ

555 :デフォルトの名無しさん:2006/10/06(金) 08:03:42
あー…仕事が終わったらやり直します
ありがトン

556 :デフォルトの名無しさん:2006/10/06(金) 18:54:05
Streamを配列のように扱えるクラスを作ったんだがどんな名前付ければいいかわからない…
なんかいい名前ないか?

557 :デフォルトの名無しさん:2006/10/06(金) 19:00:46
StreamAbsoluteとか。


558 :デフォルトの名無しさん:2006/10/06(金) 19:03:42
myStream

559 :デフォルトの名無しさん:2006/10/06(金) 21:07:25
RamdomAccessStream

560 :デフォルトの名無しさん:2006/10/06(金) 22:01:04
逆なら理解できるんだが、Streamを配列にであってるの?
Strean配列をひとつのStreamにってのならやったことある。

561 :デフォルトの名無しさん:2006/10/06(金) 22:30:37
RamdomAccess ってもはや Stream ではないな

562 :デフォルトの名無しさん:2006/10/06(金) 22:36:22
BufferingStream

563 :デフォルトの名無しさん:2006/10/06(金) 22:59:05
単純にArrayStream

564 :デフォルトの名無しさん:2006/10/06(金) 23:00:57
ようはデフォルトでスキップ機能が使えるってことだろ?
ary[0]とすれは毎回違う値が1バイトずつとれてary[3]とすれば3バイトスキップするわけだ

565 :デフォルトの名無しさん:2006/10/06(金) 23:03:15
>>564
そうじゃなくてary[10]とかしたら10まで読み込んでなければ10まで読み込むって感じじゃね?

566 :デフォルトの名無しさん:2006/10/06(金) 23:04:48
どっちかというと、配列要素でseekするもんだと思ってた。

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

みたいなイメージだったんだけど。

567 :デフォルトの名無しさん:2006/10/06(金) 23:08:12
>>565
10要素目以前にEOFが来てたら例外とか?

568 :デフォルトの名無しさん:2006/10/06(金) 23:09:31
>>566
なるほどね。でも普通にランダムアクセス用だな。

569 :566:2006/10/06(金) 23:25:13
seekして、自分の参照を返すって実装だと簡単にできそうだし、、、

570 :555:2006/10/07(土) 02:32:31
win32.libは自分で作ると教えてもらったので
build windows winuser winbase winnt winver windef -full -clean -names -Twin32.lib
で作ってちゃんと動いたんですけど
最小構成のwin32.libってどれだけのソースをリンクしておくものなんでしょうか?
buildが必要なソースを探してコンパイルしにいってくれるようにオプションを設定できないのかなと悪戦苦闘中

571 :デフォルトの名無しさん: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が正解。


572 :デフォルトの名無しさん:2006/10/07(土) 14:50:41
>>571
そのやり方だとコンパイルするたびにwindows.d以下大量のファイルをコンパイルすることになるから、時間の無駄だな。
まあ、Dはコンパイルが速いからたいしたことは無いだろうけど。
build.exeを使うことを強制させられるのも嫌な感じ。

573 :デフォルトの名無しさん:2006/10/07(土) 15:04:46
これと
func( 1, 2 );
これ
func(1, 2);
どっちが好き?

574 :デフォルトの名無しさん:2006/10/07(土) 15:16:22
俺コーディング規則は下。
下の方がわかりやすいから。

575 :デフォルトの名無しさん:2006/10/07(土) 15:16:57
俺も下

576 :デフォルトの名無しさん:2006/10/07(土) 15:26:18
同じく

577 :デフォルトの名無しさん:2006/10/07(土) 15:55:27
右に同じ。
ついでにタブよりスペース派。

578 :デフォルトの名無しさん:2006/10/07(土) 16:18:36
死ね。
スペースインデント死ね。
ああ死ね。

俺はタブとスペース両用。

579 :デフォルトの名無しさん:2006/10/07(土) 16:20:14
>>578
お前が一番最悪じゃねーかw

そういやタブインデントかつ80字改行のプロジェクトに居たことがある
これだからドザはwとか思ったよ。俺もドザだけど。

580 :デフォルトの名無しさん:2006/10/07(土) 16:26:01
行頭はタブで=とか揃えたいときスペースは駄目かな。

581 :デフォルトの名無しさん:2006/10/07(土) 16:34:31
スペースインデントにどーゆー利点が・・・

582 :デフォルトの名無しさん:2006/10/07(土) 16:35:09
表示がエディタに依存しない。

583 :デフォルトの名無しさん:2006/10/07(土) 16:39:36
つーか、今時のエディタとか統合環境では、スペースインデントがデフォですよ?

rubyのソースは、タブとスペースがまざってて切れそうになった。
rubyは好きだけど

584 :デフォルトの名無しさん:2006/10/07(土) 16:50:47
TABでよくね?相互変換汁

585 :デフォルトの名無しさん:2006/10/07(土) 17:12:13
タブは4スペース派と8スペース派がいるからなあ
スペースが一番無難じゃね?

586 :デフォルトの名無しさん:2006/10/07(土) 17:16:55
80行ルール=CUIでも参照されるってことだから
それをタブインデントと組み合わせるのはおかしい。
GUIばりばりならタブのほうが使い勝手がいい。

587 :デフォルトの名無しさん:2006/10/07(土) 17:30:52
正直D言語と直接関係ない宗教論争は勘弁

588 :デフォルトの名無しさん:2006/10/07(土) 18:43:51
80行じゃなくて80桁だな

589 :デフォルトの名無しさん: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ポインタを渡してくれても良さそうなもんじゃね?
なんか理由があるのか?

590 :デフォルトの名無しさん:2006/10/07(土) 19:06:36
つーか上みたいなコード書くまでもなくネストクラスは自分自身もnewできないのか……。

591 :デフォルトの名無しさん:2006/10/07(土) 19:32:54
>>589
?

static class A{
  static class B{}
  class C {
    static B b;
    static this(){
       b= new A.B;
    }
  }
}

592 :デフォルトの名無しさん:2006/10/07(土) 19:49:41
>>591
や、staticじゃなくてもouterが共通なら生成できても良いんじゃないか?って話。
で今はできないようになってるけどもそれには何か理由があるのかなあと。

593 :デフォルトの名無しさん: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;
  }
}

594 :デフォルトの名無しさん:2006/10/07(土) 20:49:31
できた。ハズいw
>>593
丁寧にサンクス。

595 :デフォルトの名無しさん:2006/10/07(土) 23:11:43
http://upload.geckodev.org/upfile/mem_d.txt
もうだれかがやってるだろうけどこんな物作ってみた。builtin関数のような物の作成にはコンパイル時ループとかもっと色々欲しい所。

596 :デフォルトの名無しさん:2006/10/08(日) 04:48:04
>>584
スペースでいいと思う。
Tabの理由がみつからない

597 :デフォルトの名無しさん:2006/10/08(日) 06:47:32
>>596
コードの書き(読み)手が好きな幅で見れる。
でもその場合、「TAB = 固定nスペース」と思ってるやつは死ねば良いと思うし、
インデントをTABで固定しなきゃなんない。
それでもメリットがデメリットを上回っていると思っている。

598 :デフォルトの名無しさん:2006/10/08(日) 06:55:15
>>597
func(longlongargument1,
longlongargument2,
longlongargument3);
なんてときに、longlong...の開始位置を縦でそろえるのは
タブインデントじゃ不可能だよね。
 > インデントをTABで固定しなきゃなんない。
というのもそうだけど、インデント幅が常に固定というのも
また不便だよ。

599 :デフォルトの名無しさん:2006/10/08(日) 07:27:06
そもそもそろえることにどれだけ意味があるかという話もあるが
func(で改行すればタブインデントでも縦にそろいます。

600 :デフォルトの名無しさん:2006/10/08(日) 07:37:20
>>597
・人によってタブ幅が変わる
・環境(エディタの設定等)によってタブ幅が変わる
・TAB=固定nスペースと思ってるやつがけっこういる
以上の欠点より、Tabである必要はない。

601 :デフォルトの名無しさん:2006/10/08(日) 07:38:43
>>598
統合環境なら、スマートインデントっつー機能があって、
適切なタブ+スペースに自動変換してくれる
けど、タブ幅変えたら、くずれるから、スペースインデントでしか実質使えないけどね

602 :デフォルトの名無しさん: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インデントで皆我慢しておけ」というのはある程度合理的だとは思う。

603 :デフォルトの名無しさん:2006/10/08(日) 08:33:43
>>601
というか、それが
 > ・TAB=固定nスペースと思ってるやつがけっこういる
から生まれた産物の代表例だと思う。TABの意味が分からんよね。

604 :デフォルトの名無しさん:2006/10/08(日) 09:05:01
とりあえずブロックインデントをスペースでやる奴は死んで。

605 :デフォルトの名無しさん:2006/10/08(日) 09:34:19
>>600
TAB幅が変わっても綺麗に見えるコード書いたほうが良いんでない?

606 :デフォルトの名無しさん:2006/10/08(日) 09:42:04
>>605
TAB使わない方が細かい桁そろえが出来て見栄えがよいよ。

607 :デフォルトの名無しさん:2006/10/08(日) 09:42:53
>>605
いやいやむしろ汚く書いても奇麗に見えるコードを書くのがいいと思う

608 :デフォルトの名無しさん:2006/10/08(日) 09:48:53
>>606
いやそうじゃなくて、「TAB幅が変わっても綺麗に見えるコード」を書けば、
>>600が示すデメリットの二個が消失しますねってこと
TAB=固定nスペースと思ってるやつはやはり死ねば良いと思う。
っていうかそこはただの無知バカだからカウントしなくね?

609 :デフォルトの名無しさん:2006/10/08(日) 09:52:14
>587

610 :デフォルトの名無しさん:2006/10/08(日) 10:02:42
・人によってタブ幅が変わる
・環境(エディタの設定等)によってタブ幅が変わる

この違いが分からない

611 :デフォルトの名無しさん:2006/10/08(日) 10:41:55
人によって環境は違うんだから違いは無い。
>587

612 :デフォルトの名無しさん:2006/10/08(日) 10:52:35
開くときはタブ、保存するときはスペース
これ最強

613 :デフォルトの名無しさん:2006/10/08(日) 11:03:57
indentとか使わないの?
D版のDindentがあればいいのかな。

614 :デフォルトの名無しさん:2006/10/08(日) 11:42:09
>>610
設定変更不可の外部環境と自分の他の環境が異なると、
同じ人で同じソースなのにタブ幅が違うという状況になるよー、
という話じゃないの?

>>608
TAB使わなければ、そのデメリットの他に>602のような制約も
なくなるよ、という話。
で、どっちをとるかというと、「TAB幅可変に対応するために表記が
制限されるよりも、TAB使わずに綺麗に書くのがベストだよなあ」
ということになった。俺は。

615 :デフォルトの名無しさん:2006/10/08(日) 11:47:17
俺にわかるのはD言語のスレで
TABの事を延々と語る馬鹿達はうざいから消えて欲しいかなー
ってことぐらい。

616 :デフォルトの名無しさん:2006/10/08(日) 11:52:07
>>615
ほら、Makefileとかじゃタブに意味があるから、
D言語のソースでTAB幅を調整するのを強制されるとうざいんだよ。
Haskellじゃそんな問題出ようもないから、D言語的には関係が
なきにしもあらずって感じがしない? しない? しないかな、やっぱり。

617 :デフォルトの名無しさん:2006/10/08(日) 12:10:38
>577がいなければこんなことには

618 :デフォルトの名無しさん:2006/10/08(日) 12:21:08
話題的が変わってたし時間的にも隔たりができたのにこの話題を蒸し返した>>596も同罪

619 :デフォルトの名無しさん:2006/10/08(日) 12:45:28
話題にのってる奴全員同罪だろうに

620 :デフォルトの名無しさん:2006/10/08(日) 12:53:17
>ついでにタブよりスペース派。
>スペースでいいと思う。Tabの理由がみつからない
とりあえず死ね

621 :デフォルトの名無しさん:2006/10/08(日) 13:59:12
タブ論、goto論、コーディングスタイルに関する話はマ板では禁止のはずだが

622 :デフォルトの名無しさん:2006/10/08(日) 14:01:14
ここはム板だよお馬鹿さん

623 :デフォルトの名無しさん:2006/10/08(日) 14:58:44
マだかムだかはどうでもいいがここはD言語スレだよ

624 :デフォルトの名無しさん:2006/10/08(日) 16:30:07
Dの最新の姿をまとめ的に解説したサイトとかってないの。

625 :デフォルトの名無しさん:2006/10/08(日) 16:36:20
>>624
blogぐらいしか情報ないかと

626 :デフォルトの名無しさん:2006/10/08(日) 17:14:30
Javaの開発環境であるNetBeansはデフォルトでTAB=空白4つだから便利。
ようは開発環境がTABを仮想してくれるなら空白がいいよね?ってことだな。

627 :デフォルトの名無しさん:2006/10/08(日) 17:16:30
まあ、ふつーの統合環境なら、Tabとスペースは同じように扱えるからな
エディタしかないD言語だから、こういう話になるんだろ

628 :デフォルトの名無しさん:2006/10/08(日) 17:17:01
JavaもNetBeansもTABもDとは関係ない
Dの開発環境が欲しいってんなら同意

629 :デフォルトの名無しさん:2006/10/08(日) 17:21:19
じゃあ>>628頼んだ。

630 :デフォルトの名無しさん:2006/10/08(日) 18:09:14
D 0.169

631 :デフォルトの名無しさん:2006/10/08(日) 18:10:28
アノテーションはいつ登場しますか?

632 :デフォルトの名無しさん:2006/10/08(日) 18:24:45
0.169はバグ修正オンリーっぽいな。

633 :デフォルトの名無しさん:2006/10/08(日) 18:29:22
除算の最適化って何?この長い歴史で未だに最適化できる余地があるのか。

634 :デフォルトの名無しさん:2006/10/08(日) 18:34:14
Walter曰く、
>Bug fixes. \dmd\samples\d\pi.d sped up by 40%.

乗算と除算の組み合わせに最適化が効いてなかったバグだから、
i * 10 / 2 → i * 5 みたいな修正じゃないのかな。

635 :デフォルトの名無しさん:2006/10/08(日) 18:38:53
>>633
dmdの最適化は結構しょぼいよ

636 :デフォルトの名無しさん:2006/10/08(日) 18:45:55
>>634
勘違いしてない?
a%5とa/5とかを一回で計算するっていう最適化の改良でしょ?

637 :デフォルトの名無しさん:2006/10/08(日) 18:49:36
違います

638 :デフォルトの名無しさん:2006/10/08(日) 21:20:56
D 0.169
Oct 7, 2006
New/Changed Features

Bugs Fixed

* Improved optimization of div/mod combinations.

一応はっておく。


639 :デフォルトの名無しさん: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;
>

640 :デフォルトの名無しさん:2006/10/09(月) 00:41:53
しまった・・・
> main
Error: AssertError Failure main(7)

641 :デフォルトの名無しさん: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); の行でいいんだよね?

642 :デフォルトの名無しさん:2006/10/09(月) 01:56:38
やあ ほんとすまん
いつの間にかunittestがコンパイル時にチェックしてくれるものだと思ってた
実行しなきゃチェックされないじゃんってのが>>640

643 :デフォルトの名無しさん: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; }だけ

644 :デフォルトの名無しさん:2006/10/09(月) 06:05:01
いっつもこんなこと
build entrypoint -gui -unittest -g -debug
打ってるけどさ、これを
build
これで済ませられれば良いよね。

makeみたいにbuildfileを参照して、
pragma文で全てのオプションを設定できるようになればなぁ

645 :デフォルトの名無しさん:2006/10/09(月) 06:21:51
build @

でbuild.brfを参照する、くらいはできた気がした。

646 :デフォルトの名無しさん:2006/10/09(月) 06:34:19
俺のパカチン!
>>645 d!!

647 :デフォルトの名無しさん:2006/10/10(火) 07:08:11
assert と
if throw の使い分けがよう分からんのですが・・・

648 :デフォルトの名無しさん:2006/10/10(火) 08:10:21
デバッグコードとリリース時にも残るコード

649 :デフォルトの名無しさん:2006/10/10(火) 08:19:19
うん
だから、どういうものをリリース時にも残せばいいんだろうか・・・というやつ

650 :デフォルトの名無しさん:2006/10/10(火) 08:23:18
ユーザ操作によって起こる可能性のあるやつ。とかじゃないかな。

651 :デフォルトの名無しさん: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();
}

使い方まちがってる?


652 :651:2006/10/10(火) 17:17:10
あ、2個目の hoge.sort はいらない。ま、関係ないけど。

653 :デフォルトの名無しさん:2006/10/10(火) 18:07:25
よく見てないが、Cmpって引くんじゃないのか?

654 :デフォルトの名無しさん:2006/10/10(火) 18:26:08
ああそっか。

655 :デフォルトの名無しさん:2006/10/10(火) 18:39:36
それいじってて気づいたけど、 hoge.sort(); と関数呼び出し風にするのはアウトなんだな。

656 :デフォルトの名無しさん:2006/10/10(火) 19:50:58
プロパティであって関数ではない、、、んだろう。

657 :デフォルトの名無しさん:2006/10/10(火) 20:33:03
max = hoge.dup.sort[0];
()ないほうがいいな。うん。


658 :デフォルトの名無しさん:2006/10/10(火) 20:40:42
>>434あたりの話を思い出したんだよ。

659 :デフォルトの名無しさん:2006/10/10(火) 20:42:44
メンバ関数へのポインタって使えますか?

void function() fp = &A.func; は通るけど、fp をどう使ったらいいかわからん。

660 :デフォルトの名無しさん:2006/10/10(火) 21:42:08
fp();

661 :デフォルトの名無しさん:2006/10/10(火) 21:57:26
そのまえにfunctionじゃなくてdelegateじゃなかろうか。
http://www.kmonos.net/alang/d/type.html#delegates

662 :デフォルトの名無しさん:2006/10/11(水) 00:18:28
>>659の言ってるのはC++にあるみたいなメンバ関数ポインタってことじゃないの?
Dだと使えないはず。(近いものはdirty hackで作れるとは思うが)

663 :デフォルトの名無しさん:2006/10/11(水) 03:30:58
メンバ関数ポインタとデリゲートを使い分けたいと申すか

664 :デフォルトの名無しさん:2006/10/11(水) 05:43:04
staticなメンバ関数と普通のメンバ関数は確かに違うが

665 :デフォルトの名無しさん: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;

666 :デフォルトの名無しさん:2006/10/12(木) 17:10:50
>>645
build
だけで一応build.brfを参照して機能してくれるみたい。
つまり>>644の求める機能は既にあったってことだな

667 :デフォルトの名無しさん:2006/10/14(土) 11:13:52
GDCじゃ改名インポート使えないのか…

buildをビルド出来ないじゃないか…

668 :デフォルトの名無しさん:2006/10/14(土) 11:23:45
>>667
最新のtrunkのgdcはdmd 0.164ベースだからそれ使え

669 :デフォルトの名無しさん:2006/10/14(土) 12:19:15
0.166 もあるでよ。
ttp://www.codu.org/gdc-nightly/

670 :デフォルトの名無しさん:2006/10/14(土) 20:47:25
[cast(Object)null] == [cast(Object)null]がError: Access Violationなこの現実。

しかし配列リテラルがサポートされたのは素直に嬉しいなぁ。
char[][] names = ["alice", "bob"];も通らない悲しい現状ではあるけど……。

671 :デフォルトの名無しさん:2006/10/14(土) 21:15:07
>>670
>[cast(Object)null] == [cast(Object)null]がError: Access Violationなこの現実。
仕様じゃね?

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

672 :670:2006/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"]; とかしなくてもいいのか!?

673 :デフォルトの名無しさん:2006/10/14(土) 22:44:32
>……やっぱりnull同士をtrueにするくらい気を利かせてくれてもいいような。

イラネ

674 :デフォルトの名無しさん:2006/10/14(土) 23:27:38
>>672
いや、勘違いだった。通らないね。
別のソースでやったときは、要素数が全て同じデータを使ってたんだった。

675 :デフォルトの名無しさん:2006/10/15(日) 02:15:06
char[][] names = ["alice", "bob"];
がグローバルスコープにある場合は静的初期化扱いになるのか通るな。

なんにしろ、[cast("alice"[], "bob"] で済むから手間じゃないとは思う。

676 :デフォルトの名無しさん:2006/10/15(日) 03:12:38
["alice"[], "bob"]でおk

677 :デフォルトの名無しさん: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);
}

678 :デフォルトの名無しさん:2006/10/15(日) 16:48:57
>>677
http://digitalmars.com/d/template.html#aliasparameters

679 :デフォルトの名無しさん:2006/10/15(日) 17:06:05
>>678
テンプレートテンプレートパラメータが欲しいという話ではないです
テンプレートに渡された型が特定のテンプレートの
specializationとなっているかどうかで分岐したいのです
それともaliasでそういったことが出来るという事でしょうか

680 :デフォルトの名無しさん:2006/10/15(日) 17:45:16
>>679
できなくも無いです。
struct hoge(alias T) {
  static if(isHolder!(T.mangleof)){
    //色々
  }else
    static assert(0);
};

681 :デフォルトの名無しさん:2006/10/15(日) 18:11:49
>>680
マングル名からholderのspecializationかどうか判別するのですか・・・
すごく強引な気がしますが、やっぱりそういう方法しか無いんですかね

682 :デフォルトの名無しさん:2006/10/15(日) 19:39:06
DigitalMarsの鯖落ちてる?
繋がらないんだが。

683 :デフォルトの名無しさん:2006/10/15(日) 19:41:18
>>682
落ちてるね。
今までもたまに落ちてたから心配しなくても大丈夫だと思う。

684 :デフォルトの名無しさん: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);
}

ここまではがんばってみた。

685 :デフォルトの名無しさん:2006/10/16(月) 14:05:56
>>684
unique_alias_idを工夫すればなんとかなりそうな気がしますね
ありがとうございます

686 :デフォルトの名無しさん:2006/10/17(火) 12:29:17
build 3.04

687 :デフォルトの名無しさん:2006/10/17(火) 23:11:41
dmd 0.170

688 :デフォルトの名無しさん:2006/10/17(火) 23:45:40
foreach_reverse!

もうちょっと何とかならなかったのかこの名前は

689 :デフォルトの名無しさん:2006/10/17(火) 23:55:46
rforeachとかか

まあ次のバージョンであっさり名前変更されてる可能性もなきにしもあらず

690 :デフォルトの名無しさん:2006/10/17(火) 23:57:04
うーん opApplyReverseってのも安直だなぁ。

691 :デフォルトの名無しさん:2006/10/18(水) 00:00:55
先生!
・ Delegates can now be the 'aggregate' for the foreach.
の意味がよく分かりません!

あとforeach_reverse作るくらいならいっそRubyライクなイテレータを(ry

692 :デフォルトの名無しさん:2006/10/18(水) 00:04:16
演算子オーバーロードの左右逆版の命名は_rなのにナァ

693 :デフォルトの名無しさん: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) { ... }
って感じかな?

まだ試してないけど。

694 :デフォルトの名無しさん:2006/10/18(水) 00:13:11
>>692
オペランドの可換性とは関係ないから、あえてそれにしなかったと思う。

695 :デフォルトの名無しさん:2006/10/18(水) 00:28:34
>>694
にゃるほど。
そいや「左右入れ替え」と「逆方向に辿る」てのもびみょーがニュアンスが違うか……。

696 :デフォルトの名無しさん:2006/10/18(水) 00:42:58
>>670
ご所望のものが実装されたようです

697 :696:2006/10/18(水) 00:46:16
ん?
if (null == null) じゃなくて if ([cast(Object)null] == [cast(Object)null]) か

698 :691:2006/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; }; とか、無名デリゲートの部分を引数の外に追い出せたら最高なんだけど。

699 :デフォルトの名無しさん: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で扱うようにしなさい、ということかもしれない。

700 :デフォルトの名無しさん: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かなにか作れないかなーと思った。思っただけでその先なにも考えてないが。

701 :デフォルトの名無しさん: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--;});
}

702 :デフォルトの名無しさん: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--;});

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


704 :デフォルトの名無しさん: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

705 :デフォルトの名無しさん:2006/10/18(水) 19:32:07
はやっ


706 :デフォルトの名無しさん:2006/10/18(水) 21:08:10
finalメソッドがabstractメソッドの実装として使えなかった、か。
( ´∀`)ははは、こやつめ!

707 :デフォルトの名無しさん:2006/10/18(水) 21:28:47
http://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D.announce&artnum=5003
2段継承するとまだダメらしい

708 :デフォルトの名無しさん:2006/10/19(木) 00:20:24
ウォルたん☆大爆走

709 :デフォルトの名無しさん:2006/10/19(木) 01:03:19
DFL がまったく動かなくなった orz

----------
フリーザAA
----------

710 :デフォルトの名無しさん:2006/10/19(木) 03:43:20
IDE次第なんだよな。物凄く言語の出来が良くても、それだけで普及が5年は変わる。
インテリセンス互換かつ、使用クラス内部へ飛ぶ機能かつ、API Docを参照する機能。
この3つは最低限必要だと思う。

711 :デフォルトの名無しさん:2006/10/19(木) 04:41:18
エラージャンプとリファクタリングブラウザも頼むぜ!

712 :デフォルトの名無しさん:2006/10/19(木) 06:07:05
>>711
D言語は多分コケると思っている人の数→
http://pc8.2ch.net/test/read.cgi/tech/1136288019/251

713 :デフォルトの名無しさん:2006/10/19(木) 08:17:58
最近インテリセンスないのにも慣れてきた

あと今回のことでやっぱりここはウォルターたんに萌えるスレだと再認識した

714 :デフォルトの名無しさん:2006/10/19(木) 08:24:52
D 0.172

715 :デフォルトの名無しさん: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個(向こうの時間で)バージョンアップってどうだろう

716 :デフォルトの名無しさん:2006/10/19(木) 09:13:02
ウォルターたんはテストの自動化してないのかね?
しといたほうが用意するのは面倒だけど、
開発効率と品質が格段に上がるのに

717 :デフォルトの名無しさん:2006/10/19(木) 09:20:59
有志がテストするという方式で自動化されていますw

718 :デフォルトの名無しさん:2006/10/19(木) 10:10:14
「ユーザーは開発者の思いがけないことを平気でする」というエロい人の言葉

719 :デフォルトの名無しさん:2006/10/19(木) 12:28:42
わかった
逆に考えるんだ
もう完成していると考えるんだ
D0.172言語と考えるんだ

今、IDEをDで作るのが如何に無謀かよく理解できた

720 :デフォルトの名無しさん:2006/10/19(木) 12:37:02
一度どっかでスナップショットを取ってツール制作者が足並みそろえる、
とかはしないんだろか。
あんまり効果無いかな……

721 :デフォルトの名無しさん:2006/10/19(木) 13:51:14
http://wiki.dprogramming.com/Dfl/Snapshots
あれ・・・こんなんあったのか
さっさとリリースしてくれればいいのに
前のListViewのバグ直ってたりするのかな?
調べてみよう

722 :721:2006/10/19(木) 14:02:15
はい
直ってません
うはははは

723 :721:2006/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

724 :721:2006/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);
}

725 :721:2006/10/19(木) 17:36:26
しまった.デバッグ中のコードを削りきれてなかった.
//import win32.windows;
//import win32.commctrl;
これいらんので,必然的にwin32.winntの話もversion=IE6も関係ないです.
長々と失礼しました.まだミスあったらごめんよ.

726 :デフォルトの名無しさん:2006/10/19(木) 19:07:41
>>723
dmdにPATH通して、sc.iniの中が適切なら
-Ic:\d\dmd\import\ -LIBPATH=c:\d\dmd\lib
も、いらんよ。

727 :721:2006/10/19(木) 19:44:40
あ,そうですね
頻繁に更新されるから設定が面倒だったのでsc.iniを使ってなかったです

728 :デフォルトの名無しさん:2006/10/19(木) 19:50:36
>>727
超なるほど

729 :デフォルトの名無しさん:2006/10/19(木) 19:58:18
毎回、解凍→中のsc.ini削除→他を上書きの手順を踏んでるが正直めんどい。

730 :デフォルトの名無しさん:2006/10/19(木) 20:23:16
「解凍->以前のバージョンからsc.iniだけコピー->以前のバージョンのみ削除」じゃだめかい?

731 :デフォルトの名無しさん:2006/10/19(木) 20:34:10
上書き禁止にすれば

732 :デフォルトの名無しさん:2006/10/19(木) 20:57:10
>>731
それだ。

733 :デフォルトの名無しさん:2006/10/19(木) 21:02:43
上書き禁止?ナニソレ

734 :デフォルトの名無しさん: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\

735 :デフォルトの名無しさん:2006/10/19(木) 22:24:40
上書き禁止というか、ReadOnlyだよな。

736 :デフォルトの名無しさん:2006/10/20(金) 05:30:08
MonaOSの開発言語をC++からD(gdc)に乗り換えようという動きがあるらしい。

737 :デフォルトの名無しさん:2006/10/20(金) 09:09:01
どこに?
ひげぽんがそう発言してるの?

738 :デフォルトの名無しさん:2006/10/20(金) 09:21:58
仮死状態の某OSスレのことかと思ったら、
ちゃんとMonaOSプロジェクト内での話なのね。
なんかphobosサポートが悲惨で大変のようだけど。(castもできないそうな)

739 :デフォルトの名無しさん:2006/10/21(土) 14:18:21
>>736
ソースは?
しかし、本当なら、ひげぽんもたいしたやつだ(いろんな意味で

740 :デフォルトの名無しさん: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

741 :デフォルトの名無しさん:2006/10/22(日) 01:02:19
D言語の作者はGCはカーネルがサポートすれやボケって言ってるんだよね

742 :デフォルトの名無しさん: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=="");

なぜだろうか。

743 :デフォルトの名無しさん:2006/10/23(月) 12:22:57
要素が0の静的配列がどう解釈されているのかという問題かなあ

744 :デフォルトの名無しさん: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'

745 :デフォルトの名無しさん:2006/10/25(水) 05:50:59
D言語って独自のGUIライブラリすらないの?

746 :デフォルトの名無しさん:2006/10/25(水) 05:58:15
Python>>>>>D

747 :デフォルトの名無しさん:2006/10/25(水) 10:07:52
>>745
あるよ

748 :デフォルトの名無しさん:2006/10/27(金) 13:13:48
マイクロスレッドを言語か標準ライブラリで実装して欲しい

749 :デフォルトの名無しさん:2006/10/27(金) 13:35:17
>>748
このスレは要望を書き込む場所ではありません。
開発者(Walterタソ)が、わざわざこんなスレに目を通すわけがないのです。
要望は、http://www.digitalmars.com/d/ へ。


750 :デフォルトの名無しさん:2006/10/27(金) 22:28:10
マイクロスレッドならyaneSDK4Dになかったっけ

751 :デフォルトの名無しさん:2006/10/27(金) 23:20:15
Walter殿がカーネルにGCを持ったOSを作ればそれで済む話だ。

752 :デフォルトの名無しさん:2006/10/28(土) 19:40:51
GCの性能ならSML#の圧勝w

753 :デフォルトの名無しさん:2006/10/28(土) 19:57:02
GCの性能てどうやって評価するんだっけ?
ソースURLおせーて

754 :デフォルトの名無しさん:2006/10/28(土) 20:02:38
GCはどれも一長一短で「このアルゴリズム最強!」ってなもんはないだろ…

755 :デフォルトの名無しさん:2006/10/28(土) 20:15:35
はぁ?誰がこのアルゴリズム最強!とか言ってるの?

756 :デフォルトの名無しさん:2006/10/28(土) 20:25:04
世代GCより速くて優れたGCってあるの?
トレードオフ的にオプションを切り替えられるっといいのだが。

757 :デフォルトの名無しさん:2006/10/28(土) 22:17:50
http://www.pllab.riec.tohoku.ac.jp/smlsharp/ja/?FeatureInteroperability
SML#なる言語のドキュメントはコレくらいしか見つからないなぁ。
ビットマップ走査型GCてどんなだろ。GCの理屈なんて概要しか知らないけど……。

あとGCを実際にカーネルサービスとしてサポートしてるOSて、実例はあるんだろか。
Javaで書かれてるとゆーJNodeとか……?

758 :デフォルトの名無しさん:2006/10/28(土) 23:31:22
コンパイラスイッチで性質を切り替えられるやつが最強だろ。
いやGCとしてとかじゃなくて、現実的に。

759 :デフォルトの名無しさん:2006/10/29(日) 00:13:58
中学生じゃないんだから最強最強言ってんなよ

760 :デフォルトの名無しさん:2006/10/29(日) 05:39:19
ウンコやチンコなどの小学生ワードが大好きな2chねらーにとって
最強なんて中学生ワードはむしろ成熟した概念

761 :デフォルトの名無しさん:2006/10/29(日) 21:25:00
>>756
世代別GCより速いも何も、じゃあ世代別GCをどう実装すんのよ.
ぜんぜん何も語ってないに等しいじゃねーか.

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

何も知らないくせに「世代別GCで最強」で終わりじゃ無知を晒してるだけだぞ.

762 :デフォルトの名無しさん:2006/10/29(日) 21:35:07
>>761
お前はただ語りたいだけでは?

763 :デフォルトの名無しさん:2006/10/29(日) 21:56:01
>>762
何も知らない割には負けず嫌いなんだな(禿藁

>>761 に誤りがありました.
若い世代が Copying GC で古い世代が Mark & Sweep です.
謹んで訂正させていただきます.

764 :デフォルトの名無しさん:2006/10/29(日) 22:28:36
で、世代GCより速いGCってあるの?

765 :デフォルトの名無しさん:2006/10/29(日) 22:51:48
GCって速度重視されるの?

766 :デフォルトの名無しさん:2006/10/29(日) 22:52:07
>>763
流石専門板だなぁ・・・・・(禿藁なんて久しぶりに見た

767 :デフォルトの名無しさん:2006/10/29(日) 23:00:05
聞きかじり厨の典型パターンに自分がはまってると何故気づかないんだろう

768 :デフォルトの名無しさん:2006/10/30(月) 00:03:07
禿同
こういうときにするべきレスはただ一つ

>>764
ググレカス

769 :デフォルトの名無しさん:2006/10/30(月) 00:05:02
パターンに嵌ったら気付けないんだよ。

770 :デフォルトの名無しさん:2006/10/30(月) 00:09:55
循環参照ってヤツだな!



…ってレスつけようとしたけど思い止まった
オレ偉い

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

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

SML#は関数型言語らしいからそこら辺は上手くクリア出来るんだろう
(関数型言語は変数がいらないんだっけ?)

772 :デフォルトの名無しさん:2006/10/30(月) 20:42:59
ポインタの存在するネイティブ言語ではオブジェクトの
移動が非常に難しいから、世代別GCは実装できない。

773 :デフォルトの名無しさん:2006/10/30(月) 22:49:00
だが断る

774 :デフォルトの名無しさん: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にハードウェアのサポートを利用する代物もあるというのに。

775 :デフォルトの名無しさん:2006/10/31(火) 08:18:46
カーネルレベルなら仮想メモリが管理できるから
ネイティブでも世代別GCとかを実装出来るんだろうな
と勘で言ってみる

776 :デフォルトの名無しさん:2006/10/31(火) 10:56:29
で、結局ひげぽんにGC積んでもらおうって話なんだよな?

777 :デフォルトの名無しさん:2006/10/31(火) 12:25:59
>>775
昔R4400で試したけどあんまり良い結果でなかった。


778 :デフォルトの名無しさん:2006/10/31(火) 19:53:23
ひげぽんってPerlの会社に行かなかったっけ?

779 :デフォルトの名無しさん:2006/10/31(火) 21:45:20
Hatenaにジョイントしてる。
唯一のC/C++使いとしてApacheモジュール作りとかで重宝されてる。


780 :デフォルトの名無しさん:2006/10/31(火) 23:26:14
ひげぽん乙

781 :デフォルトの名無しさん:2006/10/31(火) 23:26:44
mod_をしこしこ作ってるのか・・・Hatenaってレベルが高いのか低いのかw

782 :デフォルトの名無しさん:2006/11/01(水) 01:13:17
>>781 なにをもってレベルの高低が決まってるの?781のオレオレ評価?

783 :デフォルトの名無しさん:2006/11/01(水) 01:27:47
ハードウェアに近い方が低レベルなのです。

784 :デフォルトの名無しさん:2006/11/01(水) 05:25:30
781はレイヤーでなくて技術レベルの高低を指しているように読める…

785 :デフォルトの名無しさん:2006/11/01(水) 07:41:18
本人がそっちの意味で書いたのは誰の目にも明らかだろう。
内容がまるで追いついてないのが愉快だからイジられてるだけ。

786 :デフォルトの名無しさん:2006/11/01(水) 13:35:27
>>785
>>799を読むとHatenaのレベルが怪しく見えちゃうのはしょうがないんじゃなかろうか?

てか本当に唯一なのか?

787 :デフォルトの名無しさん:2006/11/01(水) 13:36:31
あう
>>786における>>799>>779の誤りです おいらレベルヒクス


788 :デフォルトの名無しさん:2006/11/01(水) 17:47:32
>>786
Hatenaという会社はアプリ製作屋ではなくてWEB屋でLLでの開発が主だから
会社の性質上C/C++の必要度は高くないから
C/C++のコーディングレベルという意味でのレベルはそんなに高くないでしょ。

でも、他の部分の技術力が高いのかって言うと
誤字や間違った訳・解説が多い、はてな監修のAjaxイン・アクションの訳本や
CTOのblogを読む限り他の部分の技術力もかなりアレだけどね…

789 :デフォルトの名無しさん:2006/11/01(水) 21:23:46
思い切りの良い企業がたまたまマスコミに買われたって感じかな
似たようなとこはあるんだろうけど露出の差がダンチ

790 :デフォルトの名無しさん:2006/11/02(木) 14:10:51
D言語?

791 :デフォルトの名無しさん:2006/11/02(木) 16:38:39
はい、それはD言語です。

792 :デフォルトの名無しさん:2006/11/02(木) 16:41:20
いいえ、それはトムです。

793 :デフォルトの名無しさん:2006/11/02(木) 17:18:32
いいえ、それもトムです。

794 :デフォルトの名無しさん:2006/11/02(木) 18:10:50
DMD 0.173 リリース

795 :デフォルトの名無しさん: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


796 :デフォルトの名無しさん:2006/11/02(木) 18:53:11
可変長テンプレート引数と
ローカルシンボルのテンプレートalias引数が
可能になりました、という話かな。

797 :デフォルトの名無しさん:2006/11/02(木) 18:53:27
Signals and Slotsが気になる

798 :デフォルトの名無しさん:2006/11/02(木) 19:38:50
std.signalsで、Obseverパターンを実装するためのもの、だそうな。
ソースコード中の例はみたけど、意義がよく分からんかった。

799 :デフォルトの名無しさん:2006/11/02(木) 21:03:20
んー、クラスの内部状態を外部のクラスで取得するための手法を
(ライブラリとして)標準化するためのもの、って感じかな。

800 :デフォルトの名無しさん: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);
}

801 :デフォルトの名無しさん:2006/11/03(金) 23:58:23
二週間も新ver出ないもんだから心配してたぜ!

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

まぁそれより俺は可変個引数テンプレートにおおっと思ったところだが。

802 :デフォルトの名無しさん:2006/11/04(土) 06:58:22
別に使い分けなくたって良いだろ。
いつもはdelegate使っててSignal-Slotが必要になってから使えばいい。

Signal-Slotが必要な状況は特に思いつかないが。

803 :デフォルトの名無しさん:2006/11/05(日) 00:52:48
古いバージョンのコンパイラってどこかにない?

804 :デフォルトの名無しさん:2006/11/05(日) 01:03:28
Change Log にあるよ。

でもなんで古いのが欲しいの?

805 :デフォルトの名無しさん:2006/11/05(日) 01:09:06
自分の昔のソースやウェブに落ちてたライブラリがコンパイルとおらなくなったとかじゃない?

806 :デフォルトの名無しさん:2006/11/05(日) 01:50:45
あ、なるほど。
でもなんか最新のコンパイラで通らないような古いライブラリを使うのはなんだが気が引けるような。

807 :805:2006/11/05(日) 01:59:24
漏れもそう感じる。
かなりの手直しに「ムガー」っと思わされながらも最新版を追い続けちまう。

808 :803:2006/11/05(日) 02:28:14
>>804
サンクス

古いのが必要な理由は、
前に出来心で作った社内ツールを急遽使用する羽目になったんで、
直している時間が無いのです

809 :デフォルトの名無しさん:2006/11/05(日) 18:31:56
ううむ。珍しく-H付けて、Dインターフェースファイル&コンパイル済み*.libの構成を利用してみようと思ったら、
静的コンストラクタの呼び出しがdiファイルに出てこないもんだから、自動初期化が利用できないのね。

diの末尾に
static this(){ _moduleCtor(); }
とか追加したらいい感じに動いてくれたけど、これでいいのだろうか……。

810 :デフォルトの名無しさん:2006/11/06(月) 00:41:32
そういえば _moduleCtor ってなに?
モジュールコンストラクタを呼び出すってあるけど、それって?

これ以上詳しいことが俺が探す限りどこにも乗ってない。

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

ツリービューとか表示しようとしたら途端に上手くいかなくなりました。

812 :デフォルトの名無しさん:2006/11/06(月) 02:06:57
とりあえず言っておくけど>>7のアレはphobosじゃないから。

813 :デフォルトの名無しさん:2006/11/06(月) 05:32:18
>>812
インポートパス通ってるからとりあえずつっこんでるだけかと思われるが。

814 :デフォルトの名無しさん:2006/11/06(月) 08:32:14
自分のとこだと、
くだんのwin32はいれてあるがそれを直接使うことはまずないなあ。
GUIアプリは主にDFL。
デファクトスタンダードはどうもDWTのようだが。
ゲームはSDLのポーティングを使うのが主流では?

815 :デフォルトの名無しさん:2006/11/06(月) 08:34:32
自分のとこだと、
くだんのwin32はいれてあるがそれを直接使うことはまずないなあ。
GUIアプリは主にDFL。
デファクトスタンダードはどうもDWTのようだが。
ゲームはSDLのポーティングを使うのが主流では?

816 :デフォルトの名無しさん:2006/11/06(月) 10:38:57
>>810
phobosのソース見れば分かると思うよ

817 :デフォルトの名無しさん:2006/11/06(月) 12:03:20
>>810
http://www.kmonos.net/alang/d/module.html
の最後のあたりに書いてある静的コンストラクタの類。
このへんを明示的に呼び出すのに使う。……はず。

そいや静的デストラクタはどうやって呼ぶんだ。

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

ごめん普通に_moduleDtor()があったorz


819 :デフォルトの名無しさん:2006/11/06(月) 15:34:24
ウワアアアアン
やっとTreeView表示できた。
うれC〜

820 :デフォルトの名無しさん: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;
}

821 :デフォルトの名無しさん:2006/11/06(月) 17:42:53
そりゃ、スタートアップが同じことをやってるからでは?

822 :デフォルトの名無しさん:2006/11/06(月) 20:01:32
>>820
それは「Dで作るWin32アプリ」がしたいってこと?

だとしたらmain()じゃなくてWinMain()ではないかと思う。

823 :デフォルトの名無しさん: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 の括弧を省略した場合にエラーが出るのは仕様?

824 :デフォルトの名無しさん:2006/11/07(火) 00:19:34
>>823
http://www.kmonos.net/alang/d/property.html
 > 注意: プロパティは現在の所、 op=, ++, -- 演算子のlvalueとすることはできません。
だそうな。つまり仕様だね。

825 :デフォルトの名無しさん:2006/11/07(火) 23:59:15
昔同じ事してプゲラを食らった身としては Tips集 ってのが気になる

826 :デフォルトの名無しさん:2006/11/08(水) 01:08:16
>>821
スタートアップ?dmain2.dってやつですか?
中身見てみたけど、自分のソースでmoduleCtorやらは呼び出さなくて良いって事?
そしてエントリーポイントをWinMainとかに変える時には明示的に呼び出さないとダメ、ってことなんですか?

聞いてばっかですんません

827 :デフォルトの名無しさん:2006/11/08(水) 07:30:32
つttp://digitalmars.com/d/
つdmd\samples\d

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

なので>>809みたいになるはバグだと思うんだけどよーわからん。

829 :デフォルトの名無しさん:2006/11/09(木) 01:35:48
どなたかdflでファイルのドラッグドロップで、ファイルパスの取得の
やり方わかりませんか。

830 :デフォルトの名無しさん: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とかがあったみたいだけど、
なんの事かわからん。。。


831 :デフォルトの名無しさん: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!

楽しみだー



832 :デフォルトの名無しさん:2006/11/10(金) 18:38:28
ライブラリがねぇ。テンプレートがねぇ。switchがねぇ。structがねぇ。
同名のネストしたテンプレートをうまく実体化できない、テンプレートの引数に関数やデレゲートや配列やstructが使えない、switchには配列やstructは使えない、structリテラルが無い。
このへん1.0までになんとかして欲しいわな。

833 :デフォルトの名無しさん:2006/11/10(金) 18:47:18
switchに構造体のイメージがわかないんだが。

834 :デフォルトの名無しさん:2006/11/10(金) 18:48:19
>>833
D言語では構造体は値型。

835 :デフォルトの名無しさん:2006/11/10(金) 20:34:11
>>834
そういうことではなくて、あったら何が便利なの?ということを教えてほしい。
ちょっと興味があるので。

836 :デフォルトの名無しさん:2006/11/10(金) 21:27:30
>>831
ほんとに1.0出るかな〜
長引いているのは今更のことなんだし
ウォルたんには急いで1.0リリースよりも納得いくまで作り込んで欲しい
こんな贅沢なことはそうそうできないだろうな

837 :デフォルトの名無しさん:2006/11/10(金) 21:30:38
5/6年後とかじゃね。
・・・早くて。

838 :デフォルトの名無しさん:2006/11/10(金) 21:40:22
Walterタソはどうやってメシを食ってるのだろうか、、、

839 :デフォルトの名無しさん:2006/11/10(金) 22:37:52
>>836
既に他の言語で言うVer1.0くらいの機能は有ると思うんだがなぁ

0.99→0.100の時は怒りを通り越して呆れたよw

840 :デフォルトの名無しさん:2006/11/10(金) 22:39:47
俺はどちらかというと「いや少数点数じゃないしw」みたいに
冷静だったヤツにむかついた。お前らもっと夢を見ようよみたいな。

841 :デフォルトの名無しさん:2006/11/10(金) 22:46:45
だって、0.99から1.00に行くようなソフトは
途中のバージョン番号がかなり飛び飛びだからなあ。
嫌でも現実の予想がつくよ。

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


しかし、2007/01で1.0というと、もう今後大きな仕様変更は来ないのかなあ。

842 :デフォルトの名無しさん:2006/11/10(金) 22:52:22
この言語はメジャーバージョン変わるときは遠慮しない言語だと思う、たぶん。

843 :デフォルトの名無しさん:2006/11/10(金) 22:58:29
>>832
ライブラリは、取り合えず
メジャーバージョンが出ないと
出すに出せないんじゃね

844 :デフォルトの名無しさん: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のあとはアスペクト指向辺りをなんて

845 :デフォルトの名無しさん:2006/11/10(金) 23:06:26
DLL関係をOS非依存の抽象化されたコードで読み込めるように出来る仕組みが欲しいね
コンパイルするとOSに合わせてdllなりsoなりに勝手に切り替わるといいなぁ
もしそれが可能ならJava並みにモジュールの肥大化が加速して楽しめると思う

846 :デフォルトの名無しさん:2006/11/10(金) 23:41:17
>>831
本気なのかな?
キリスト教圏の人間だと新年よりクリスマスに出してきそうなもんだが。
(基本的にクリスマスから新年までお休みだからね)

マジなら良いお年玉になるが。


847 :デフォルトの名無しさん:2006/11/10(金) 23:58:31
>>840
少数点数だった場合
0.96 > 0.97 > 0.98 > 0.99 > 0.991 > ... > 0.999 > 0.9991 > ...

848 :デフォルトの名無しさん:2006/11/11(土) 00:02:20
>>842
確かにw
Dなら巨大な変更があるときに1.0にしてもおかしくないと冗談で思える

>>844
アスペクト指向って実は有効範囲が狭いし流行らないんじゃないかと

849 :デフォルトの名無しさん:2006/11/11(土) 01:25:53
>>848
1.0になったら1週間で10回くらいバグフィックスしそうだな

850 :デフォルトの名無しさん: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

この調子だ

851 :デフォルトの名無しさん:2006/11/11(土) 11:13:10
次からは174進数リテラルができるのかもしれない

852 :デフォルトの名無しさん:2006/11/11(土) 15:10:44
そうだね(棒読み)

853 :デフォルトの名無しさん:2006/11/11(土) 19:22:08
とりあえずツールやライブラリの制作者が
足並みそろえる口実が出来ると歓迎しよう……。
2007年はD言語の年ってか。ワクテカ。

……むしろD言語開発中に新たに学んだ事をまとめて
E言語とか出てくるんじゃないかとちょっと思ってた。
あ、E言語もうあるや。

854 :デフォルトの名無しさん:2006/11/11(土) 19:24:32
次はD++、その次D#、その次Dω

855 :デフォルトの名無しさん:2006/11/11(土) 23:38:13
そろそろ言っていいですか?
ver1.0マダーーーーーッ?

856 :デフォルトの名無しさん:2006/11/12(日) 00:14:14
ver0.1000まだー

857 :デフォルトの名無しさん:2006/11/12(日) 00:38:24
単に変なことをしたいというだけなんだけど、
"hogehoge"という文字列を渡されたら
hogehogeという名前の変数を宣言する、
とか、
obj.hogehogeというメソッドを呼び出す、
とか、
テンプレートかなんかで実現出来る?

858 :デフォルトの名無しさん:2006/11/12(日) 01:36:32
文字列が動的に渡されてくるのを想定してるなら
テンプレートだと無理なんじゃないかね。
テンプレートって静的処理でしょ。

859 :デフォルトの名無しさん:2006/11/12(日) 02:03:32
>>857
不可能……だろうなぁ。コンパイラは文字列の中身までタッチはしないし。
せいぜい出来てテンプレートの値パラメータくらいか。

860 :デフォルトの名無しさん: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は文字列を識別子トークンとして扱わせる構文)

861 :デフォルトの名無しさん:2006/11/12(日) 03:04:39
コンパイル時に処理できるなら最初から普通に書けばいいんじゃないかなあ。

862 :デフォルトの名無しさん:2006/11/12(日) 05:25:54
連想配列じゃね

863 :デフォルトの名無しさん:2006/11/12(日) 14:28:22
シンボル名を文字列のごとくくっつけたり分断したり、か。
そこまで来ると完全にメタプログラミングの領分かねぇ。

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

1.0に併せてツールが出そろってくると、
ツール開発者からも新しい視点のフィードバックが来るようになりそうだが。
ああ、Walterの戦いはこれからだ!

864 :デフォルトの名無しさん:2006/11/12(日) 14:30:35
Walter先生の次回作にご期待ください

865 :デフォルトの名無しさん:2006/11/12(日) 21:46:03
DはWalterを裏切らない。
WalterもDを裏切ってはいけない。

866 :デフォルトの名無しさん:2006/11/12(日) 22:02:57
大変だ、Dがクーデターを

867 :デフォルトの名無しさん:2006/11/12(日) 22:10:19
Visual D++が現れた!
どうするコマンド

868 :デフォルトの名無しさん:2006/11/12(日) 23:02:07
D用のデバッガ早ようでんかな?


869 :デフォルトの名無しさん:2006/11/12(日) 23:03:40
つ gdb,windbg

870 :デフォルトの名無しさん:2006/11/12(日) 23:28:51
D言語のDはだっふんだーの頭文字だって聞いたんですけど本当ですか?

871 :デフォルトの名無しさん:2006/11/12(日) 23:39:28
やってろ

872 :デフォルトの名無しさん:2006/11/14(火) 00:42:55
dsource.orgって繋がらない?

873 :デフォルトの名無しさん:2006/11/14(火) 09:12:14
ほんとだ

874 :デフォルトの名無しさん:2006/11/14(火) 12:12:51
ニュースグループ見れ
ttp://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D.announce&artnum=5386

875 :デフォルトの名無しさん:2006/11/15(水) 06:33:53
>>874

サンクス。
メンテか。随分時間がかかってるな。

876 :デフォルトの名無しさん:2006/11/15(水) 11:31:40
DMD 0.174 release

877 :デフォルトの名無しさん:2006/11/15(水) 12:59:47
  _  ∩
( ゚∀゚)彡 Tuple!Tuple!
 ⊂彡

ここまで来ると多重代入っつーかboost::tieつーかそういうのも欲しいな。

878 :デフォルトの名無しさん:2006/11/15(水) 13:26:34
-v1オプションがなんか感慨深いね。ほんとに1.0出るんだなぁ・・。

879 :デフォルトの名無しさん: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.


880 :デフォルトの名無しさん: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を使いたいだけなんだが

881 :デフォルトの名無しさん:2006/11/15(水) 16:31:11
和訳の対応の早さにびびった

882 :デフォルトの名無しさん:2006/11/15(水) 16:31:57
>>879
ktkr! 今回かなりデカイな。tupleにクラスを入れられるから再帰テンプレートで簡単にswitchが作れそう。

>>880
hdlじゃダメなん?

883 :デフォルトの名無しさん:2006/11/15(水) 16:33:48
>>881
更新されてない件について。

884 :デフォルトの名無しさん: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
あれ?よくわからんことになってる気がする。

885 :デフォルトの名無しさん:2006/11/15(水) 17:24:11
なんかほんとに正式版に向けての整備って感じの更新だな。
いい感じだ。

886 :デフォルトの名無しさん:2006/11/15(水) 17:29:45
gdcにも頑張ってもらわないと。

887 :デフォルトの名無しさん:2006/11/15(水) 17:37:17
>>886
最近branchが切られてdmd v0.173までマージされたよ。
trunkはgcc4.1への対応作業中だと思いたい。

888 :デフォルトの名無しさん:2006/11/15(水) 17:40:37

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

なにげに、これがうれしかったりする。


889 :デフォルトの名無しさん:2006/11/15(水) 18:18:26
>>888
わかるw
これで型推論しつつRAIIの宣言もできるのかな?
auto auto a;ってできなかったよな、確か。

890 :デフォルトの名無しさん: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

891 :デフォルトの名無しさん:2006/11/15(水) 18:32:44
書き忘れた。
>TypeTuple!(TL[0..i],TL[i..$])
ここでtuple TL is used as a typeって言われる。

892 :デフォルトの名無しさん:2006/11/15(水) 18:50:38
この調子で非推奨の機能を切りまくれば良いと思う

893 :890:2006/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)));

894 :デフォルトの名無しさん:2006/11/15(水) 19:24:38
>>892
非推奨の機能って他に何か残ってたっけか
個人的には配列の後置配列宣言を廃止して欲しいな

895 :デフォルトの名無しさん: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

896 :デフォルトの名無しさん:2006/11/15(水) 21:22:18
なんかもういろいろキタ━(゚∀゚)━!!
スレ住人の目が輝きだしたなw

897 :デフォルトの名無しさん: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
になってるのでそっちに合わさっちゃってるのです。

898 :デフォルトの名無しさん:2006/11/16(木) 00:23:27
生まれ変わったdsource.org、微妙なスピードアップだな……。

しかしdsource.org、プロジェクトのステータスとか最終commit日とかで
並べ替えたいのは俺だけだろか。
文句言う訳じゃないが、
こんなプロジェクトが!-> Status: 1 - Planning. -> (´・ω・`)ショボーン
てなるのが多いんだよな……。

899 :デフォルトの名無しさん:2006/11/16(木) 00:57:57
そうか?
漏れのとこからだと数倍高速化されててうはうはなんだがなあ

900 :デフォルトの名無しさん:2006/11/16(木) 01:02:30
なんだかオラ、すげえワクワクしてきたぞ!
おやすみ

901 :899:2006/11/16(木) 01:05:44
http://dsource.org/forums/
のフォーラムはかなり高速化されていたけど
http://www.dsource.org/projects/build/wiki
の辺はそうでもないですね

902 :デフォルトの名無しさん:2006/11/16(木) 01:12:04
型タプルとやらは何の役に立つの?
構造体としても使えるとか?

903 :デフォルトの名無しさん:2006/11/16(木) 07:41:45
可変長テンプレート引数と static if を使いこなしてみたかったんじゃね

904 :デフォルトの名無しさん:2006/11/16(木) 23:42:35
ぶっちゃけGenerics程度にしとくのがベストなんだなと思った。
まあ飽くまで裏側を育てる機能だと割り切るべきで
コーディングスタンダードにはならんだろうけど。

905 :899:2006/11/17(金) 01:55:49
MC++Dの領分はライブラリ制作者を助ける側面が強いから
よりよいライブラリが出てくることに期待するのがいいと思われ

906 :デフォルトの名無しさん:2006/11/22(水) 02:34:10
XMLライブラリどこかにないかね
誰か書いてると言ってたような

907 :デフォルトの名無しさん:2006/11/22(水) 02:43:12
http://www.prowiki.org/wiki4d/wiki.cgi?AllLibraries/XmlLibraries
ありますた

908 :デフォルトの名無しさん:2006/11/22(水) 03:12:51
>>908
ついでに使い心地のレビューキボンヌ

909 :デフォルトの名無しさん:2006/11/22(水) 20:59:02
Javaみたいにインタフェースベースになってる?
C++だとMSXMLとXercesの使い分けで
痛い目を見てるから統一して欲しいんだよね

910 :デフォルトの名無しさん:2006/11/23(木) 23:39:53
XMLライブラリ自体眺めるの初めてなのでよーわからんのですが何か

911 :デフォルトの名無しさん:2006/11/24(金) 03:00:25
先生、なぜに連想配列のキーにopCmpが要求されるのですか!
x,yを持つPointクラスをどうやって比較しろと言うのですか!

912 :デフォルトの名無しさん:2006/11/24(金) 03:18:45
√(x^2+y^2)にきまってんだろ

913 :デフォルトの名無しさん:2006/11/24(金) 04:23:19
ハッシュだからだろ。キー値が被ったら同じかどうか判断して、違ってたら次を探す。
シーケンシャルサーチされたら敵わんて。

914 :デフォルトの名無しさん:2006/11/24(金) 04:58:31
>912
√は要らんのでは

915 :デフォルトの名無しさん:2006/11/24(金) 09:06:24
>>913
それはopEqualで済むはずだから、なんでopCmpまで、ということだと思う。
912なんてやって(3,2)と(2,3)が同値と判定されても困るだろうし、
実際順序が定義できない(しづらい)ものだと困らんのかな。

916 :デフォルトの名無しさん:2006/11/24(金) 09:36:08
わろた

917 :デフォルトの名無しさん:2006/11/24(金) 12:31:59
>>915
そーなのですよ。
実際x^2+y^2で比較なんてするとまさに3,2と2,3で同じ値を返してくるのです。

……ん? ホントは「opEqualsかopCmpのどっちかが実装されてればいい」であるべきなのか。
誰も使ってなくて今まで指摘されなかったのか?

918 :デフォルトの名無しさん:2006/11/24(金) 12:36:32
ソース読めば解決しね?
個人的には
union Point{
  struct{
    int x;
    int y;
  }
  long key;
}
としてkeyをキーにすれば十分だと思うけど。

919 :918:2006/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;
  }
}

920 :デフォルトの名無しさん:2006/11/24(金) 13:13:30
yなんてゴミって事か

921 :デフォルトの名無しさん: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;
 }
でいいと思うよ。仕様書の例のパクリ(+バグ修正)だけど。

922 :デフォルトの名無しさん:2006/11/24(金) 17:00:56
どっかでバイナリサーチしてるんじゃね?

923 :デフォルトの名無しさん:2006/11/24(金) 17:17:10
ってか高いのを右、低いのを左にした二分木ぽ。

924 :デフォルトの名無しさん:2006/11/24(金) 18:48:28
なるほど。
最初からキーを二分木で管理しておいて、
rehashをすると、木が平衡になるようにすんのかな。

925 :デフォルトの名無しさん:2006/11/25(土) 11:37:58
まあ、ソース見ないことには分からんけど、
ハッシュだと偏ったときに効率悪いから二分木の可能性な気がする

てか、そもそもopCompだけでハッシュ無理じゃね?

926 :デフォルトの名無しさん:2006/11/25(土) 11:46:08
>>925
まぁ、憶測で語らずsrc/phobos/internal/aaA.d見れってこった。

927 :デフォルトの名無しさん:2006/11/25(土) 17:49:54
D 0.175 ktkr!

928 :デフォルトの名無しさん:2006/11/25(土) 18:30:42
>>927
更新されてない件について。

929 :デフォルトの名無しさん:2006/11/25(土) 19:00:23
なんか、ver1に向けて
バグ修正の数がすごい

930 :デフォルトの名無しさん:2006/11/25(土) 19:26:50
更新履歴に無いけどTcpSocketが削除されてるなぁ。まぁ困らないけど。

931 :デフォルトの名無しさん:2006/11/25(土) 20:52:59
更新履歴にも来たか。何このドトーのバグフィックス。

932 :デフォルトの名無しさん:2006/11/25(土) 20:54:45
仕様を作るのを止めたってことだな
年明け1.0説は真実だったのか。

933 :デフォルトの名無しさん:2006/11/26(日) 00:46:51
TcpSocket削除されたら困るんですけど・゚・(ノД`)・゚・

934 :デフォルトの名無しさん:2006/11/26(日) 00:47:02
>>932
え、アレって確定した話じゃなくて単なる仮説だったの?

935 :デフォルトの名無しさん:2006/11/26(日) 00:53:17
本家に書いてあったはずだが?

936 :デフォルトの名無しさん:2006/11/26(日) 00:54:27
>>932
説も何も

ttp://www.digitalmars.com/d/future.html

937 :デフォルトの名無しさん:2006/11/26(日) 01:54:34
Access Violation が出たファイルと行番号って簡単にわからんもんなの?

938 :デフォルトの名無しさん:2006/11/26(日) 11:42:59
>>937
つ デバッガ

939 :デフォルトの名無しさん:2006/11/26(日) 13:37:42
TcpSocket削除か。
Dは二度と使わないようにしよう。

940 :デフォルトの名無しさん:2006/11/26(日) 16:54:36
そんな餌に(ry

941 :デフォルトの名無しさん:2006/11/26(日) 22:41:31
>>938
しぶしぶ windbg を使ってみた
Stopped at exception って表示されて進まない・゚・(ノД`)・゚・
あんまり情報見つからないんだよもん

942 :941:2006/11/26(日) 22:43:26
まあもうちょっといじってみるお

943 :デフォルトの名無しさん:2006/11/27(月) 08:31:39
-gだか-gcだかを付けてコンパイルしてデバッガで走らせて止まったらバックトレースを表示すればおk

944 :デフォルトの名無しさん:2006/11/27(月) 22:59:56
コンパイルオプションで静的ライブラリの場所を指定できなかったっけ

945 :デフォルトの名無しさん:2006/11/27(月) 23:03:52
>>944
-Lでリンカにオプション渡せる。コンパイルオプションだけでは無理。

946 :デフォルトの名無しさん:2006/11/28(火) 12:33:32
あそっかリンカか確かにな忘れてた。さんくす

947 :デフォルトの名無しさん:2006/12/03(日) 14:28:47
0.176age

948 :デフォルトの名無しさん:2006/12/03(日) 15:22:56
BCPLだから、C/C++言語の後続の場合、厳密には「P言語」ってよくつっこまれるよね。
しかし「P言語」ってなぁ。なんか奇怪な言語っぽくてヤダな。
やっぱ「D言語」のが響きもスマートでいいなぁ。

949 :デフォルトの名無しさん:2006/12/03(日) 15:40:06
>>948
P言語…Perl、Python、PHP
L言語…http://en.wikipedia.org/wiki/L_programming_language

950 :デフォルトの名無しさん: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)) )();
}

カオスを発生させるよ!(゚∀゚)

951 :デフォルトの名無しさん:2006/12/03(日) 16:20:06
うひょー、ごきげんだぜ!
細かいところにはちょっと気に入らない点もあるけど、
おおかたいい感じになってきたと思えるな。

952 :デフォルトの名無しさん:2006/12/03(日) 16:21:36
>>950
動作同じだけど、意味的にはこっちのほうが良くね?
return bindAlias!(f)(4*n*(1-n))(); 


953 :デフォルトの名無しさん:2006/12/03(日) 18:00:03
>>952
たしかにそうだね。bindで自殺したいわけだから。

954 :デフォルトの名無しさん:2006/12/03(日) 23:17:51
今Walterタン超バグ修正モードみたいなので、
わかってるバグは今のうちに伝えといた方がいいんじゃないかとふと思った。

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

俺はとりあえずD言語研究のBugTrackでもチェクしてくる。

955 :デフォルトの名無しさん: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

956 :デフォルトの名無しさん: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系はまだまだ地雷の予感

957 :デフォルトの名無しさん: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

エラー行の位置からしておかしいと思うから、これが通らんのはバグかな。

958 :デフォルトの名無しさん:2006/12/04(月) 00:12:12
間違えた、>>957の "test10.d(4): Error: " というのは
全部 "test10.d(3): Error: " と読み替えて。

959 :デフォルトの名無しさん:2006/12/04(月) 00:18:50
すげー
とうとうここまできたか
さらにコンテナ(vector, list)と各種アルゴリズムが
stdに含まれたらC++を置き換えられるくらいになるのかな

960 :デフォルトの名無しさん: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


こんなんもある。
テストしてた当時はエラーコードの特定ができなかったなあ。

961 :954:2006/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は確かに突けば色々でそうだね…

962 :デフォルトの名無しさん:2006/12/04(月) 03:06:28
レスより内容が詳しくなってるね。
ありがたいことです。

963 :デフォルトの名無しさん:2006/12/04(月) 14:00:07
Tupleの使い道について今までいまいちわからなかったんだがstd.signalsの解説読んでようやく納得した

964 :デフォルトの名無しさん:2006/12/04(月) 14:02:47
>>954
>>809とかどーでっしゃろ……と言ってみる。
*.diを出力するとき、中にstatic this(){ _moduleCtor(); }を含めてくれればいいと思うけど。

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

-opすればいいけど、build使ってるとなぜか-opをdmdに渡してくれない……。

965 :デフォルトの名無しさん:2006/12/04(月) 22:08:09
>>961

>>516-526で話題になっていたバグがまだ解決されていないようなのですが、
これに関しての報告は既にどなたかが報告済みでしょうか?
まだでしたら合わせて報告をお願いします。

966 :954:2006/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を通すはず。

967 :954:2006/12/04(月) 23:07:33
>>965
調べてみるっす。>>535-536, >>643 もまだバグ残ってるぽいな。

968 :954:2006/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
でもうまくいく。

969 :デフォルトの名無しさん: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が初期化されてほしいんだけど・・?
 }
}

970 :デフォルトの名無しさん:2006/12/05(火) 19:13:25
>>969
多分バグ。

971 :954:2006/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 って手元で現象再現できないんだけど、
具体的にリンクエラーになるコードどなたかわかります?

972 :デフォルトの名無しさん: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については私には分かりません。すみませんが他の方お願いします。

973 :デフォルトの名無しさん: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;
}

974 :デフォルトの名無しさん:2006/12/07(木) 01:30:20
>>973
extern(Windows){
alias int (*PUNZIP)(HWND hWnd, LPCSTR szCmdLine, LPSTR szOutput, DWORD dwSize);
}
int main() {...
が正解

975 :デフォルトの名無しさん: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


976 :デフォルトの名無しさん:2006/12/07(木) 17:43:30
>>975
>>1

977 :デフォルトの名無しさん:2006/12/07(木) 17:49:17
>>975
バグ。これだけで起こる。
public class A {
  private interface I {
    int func1();
  }
  private int test1(I i) {
    return i.func1();
  }
}

978 :デフォルトの名無しさん:2006/12/07(木) 17:50:19
なんだD言語って糞じゃん

979 :デフォルトの名無しさん:2006/12/07(木) 18:05:49
>>978
コンパイラ!=言語
>>977
classでも起きるな。

980 :デフォルトの名無しさん: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に積まれない
-> リンクのときにエラー
という流れな気が。


981 :デフォルトの名無しさん: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も受け入れられるようにするにはどうしたらいいですか?

982 :デフォルトの名無しさん:2006/12/07(木) 23:53:51
>>980
private interface I{
 protected void f();
}
ならたぶん通る。

Dのprivateは同じモジュール内からはアクセスできるはずだから、
仕様と食い違う動作ということでバグかなあ。

983 :デフォルトの名無しさん:2006/12/08(金) 00:24:43
>>981
S func で受けて ReturnType!(S)[] を使う

984 :デフォルトの名無しさん:2006/12/08(金) 01:13:16
>>981
983とは違う方法だけど、一応http://www.kmonos.net/alang/d/tuple.htmlの一番下も参照。

985 :デフォルトの名無しさん:2006/12/08(金) 03:10:15
わたしは>>983さんの方が好きです!

986 :デフォルトの名無しさん:2006/12/08(金) 17:01:40
>>983,984
なるほどなー。ありがとうございます。
これ、std.bindで作った関数はどうやって対処したらいいんですかね…。質問ばかりで申し訳ないです


987 :964:2006/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のほうはやっぱ多少話に出てたんですね……情報感謝です。

988 :975:2006/12/08(金) 23:22:05
>>977,979,980,982
やはりバグでしたか。ありがとございます。

989 :デフォルトの名無しさん:2006/12/08(金) 23:43:01
Dのコンパイラでも作ろうと思うこの頃。

990 :デフォルトの名無しさん:2006/12/08(金) 23:47:42
RowSetの実装が流行らないなぁと思ったが
もうJPAに取って代わられる死にインタフェースなのかな

991 :デフォルトの名無しさん:2006/12/08(金) 23:49:25
>>989
むしろforkさせれば?

992 :デフォルトの名無しさん:2006/12/08(金) 23:50:22
>>991
1からDで書こうと思う。という事でまずはアセンブラから…

993 :デフォルトの名無しさん:2006/12/08(金) 23:53:24
>>992
dmdフロントエンドのD言語版ならもうあるよ。バックエンド作るってんだったらガンガレ。
http://svn.dsource.org/projects/dparser/trunk/dparser/

994 :デフォルトの名無しさん:2006/12/08(金) 23:58:45
>>993
勿論バックエンドから。

995 :デフォルトの名無しさん:2006/12/09(土) 02:20:18
次スレとか立たないの?

おれはたてないがな!

996 :デフォルトの名無しさん: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;
}

997 :デフォルトの名無しさん:2006/12/09(土) 08:47:00

次スレ
http://pc8.2ch.net/test/read.cgi/tech/1165621441/


998 :デフォルトの名無しさん:2006/12/09(土) 10:33:31
>>997
  _| ̄□__
  |_  _|へ ̄\
   |  |_ ゝ__)__)  | ̄ ̄ ̄ ̄ヽ ̄ヽ
  /     .\(,,゚Д゚)  ̄ ̄ ヽ  ,|(,,゚Д゚)
 ( o | ̄丶.(ノ|  .|)    _.ノ (ノノ  ノ)
 .ヽ_ノ_ノ_ノ__ノ    |__ノ__ノ
         し`J          し`J


999 :デフォルトの名無しさん:2006/12/09(土) 11:50:05
999

1000 :デフォルトの名無しさん:2006/12/09(土) 11:52:19
1000

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

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

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)