1 :
デフォルトの名無しさん :
2006/09/12(火) 07:25:50
3 :
デフォルトの名無しさん :2006/09/12(火) 07:31:19
日テレはルパンにひどいことをしたよね(´・ω・`)
C/C++ Java C# の反省点を踏まえて良いとこ取りした ネイティブコンパイラというところは嬉しいけど FrameWorkやIDEがまだ準備不足感があります 言語仕様を煮詰めなおしたり設計し直すと言った話も重要ですが 最近の開発スタイルからするとFrameWorkの拡充が急務であって 後者を優先しつつ(手遅れにならないように)前者についても 細かいところが改善されていくことを願います
>>4 先ず、それを英語で云えるようになってから発言してね
木構造のリスト表現 を言語ネイティブにサポートして欲しいです
>>8 まずは言語に組み込むメリットとライブラリでは何故いけないのかを述べよ。
まずは誰がどこで「いけない」と言ったのかを述べよ。
そうだそうだ。米は自分で育てろ。家は自分で建てろ。
標準ライブラリでサポート、ではなく、あえて言語でサポートして ほしいという理由を訊ねられているんだろうから、12は的外れだな。
「ライブラリ組めよ」っていう返しに対する反応だから、12は妥当だな。
>>14 おまえ馬鹿だろ 行間読めよ
誰と誰の主張が同じかまとめてみよう
8:「言語ネイティブを希望」
9=10:「ライブラリで充分」
11=12:「ライブラリ組めよ」
こういう流れなんだから
11と12の意見がいかに的外れか分かるだろ
そうでなければ「言語ネイティブ」の意味を分かってない馬鹿
コンパイル時に初期化とかされるなら組み込んでもいいと思うけどね。
>>15 事実的にも比喩的にも、11に「行間」はない。
>木構造のリスト表現 なんてライブラリで十分 しかも自分で組める程度のもの 人に希望してる暇があるなら、自分で書いたほうが早い それともこの程度のこともできないような低能ですか あー、そうですか
興奮するのはいいけど、それでやってるのがテーマのすげ替えなのが救えない。
| | | こうですか!?わかりません! | J
9=10とか11=12とか言ってるから、>20の言うとおりだろう。 >8は、基地外は放置してお話を再開していいよ。 単に標準ライブラリに追加でもいいならそう言い直しとけばOK。 そうじゃないなら追加の説明すれば問題なし。
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 木構造のリスト表現 って一般用語だと思ってたのですが、一々説明しなきゃいけないのですか?
>>22 代入だけ書いて、木構造だとわかれよ!は無理ありすぎ。
>>25 それって、JavaScriptのArrayオブジェクトみたなやつですよね?
格納するデータの型に、制約の無い配列。
もしライブラリにするして・・・
どんな型でも返せる関数ってD言語でどう書くんですか? 教えてD言語のエロイ人。
全てのクラスがObjectから派生してるんじゃなかったっけ?
Boxに突っ込む
22の説明は、いまいちなにを望んでるのか分かりかねると思う。 木構造のリスト表現、という言葉にその言葉以上の意味がなければ ただのCompositeパターンで済む話だと思うんだが。 念のため"木構造のリスト表現"でぐぐったが、全13件中1件しか表示 されない、といった具合だったよ。 そうじゃなくて、基本データ型まで含めた任意の型のデータを突っ込めて、 なおかつ実行時に型一致をチェックするような型を仕様に含めてくれ、 という話なんだろうか。 そうすると木構造のリスト表現云々とは本質的に別の話だよな。 はたまた単に構文が欲しいだけなのか。Lisp周辺のようにリストを扱うのに 便利な関数群を実装して欲しいのか。なにを望んでるんだろう。
>>25 Objectの配列にしかみえねぇじゃん。
辞書順 binary-tree を表現するのに [[['abc'],['def']],[['uvw'],['xyz']]] みたいなことをしたいんじゃなかろうまいか
>Lisp周辺のようにリストを扱うのに便利な関数群を実装して欲しいのか。 それだ!
新スレ立って早々これかよ。┐(´ー`)┌
AVLn分探索木クラスほしーなー
いい加減ネタにつられるのはやめにして まともな話題を投下してくれ
よろしく
みなさん私のことも忘れないでね つ hash table
M$に見向きもされない件について
見向きされたらもう終わり
Visual D.net まぁ、visual族は basic c++ j++ って決まってたしな
日本語でおk
(゚д゚) ← M$
ここは Borland に頑張ってもらって Turbo D を出して欲しい。 せっかくのネイティブコンパイラなんだから .NET 環境が無くても動作することが必須だけど。
47 :
デフォルトの名無しさん :2006/09/14(木) 06:20:17
多分、中途半端に機能をVC辺りに盛り込まれて終わりじゃないかな
lazyってすっげえ便利だな。 void hoge( lazy uint tgt ); に hoge( timeGetTime() ); ってしてから気付いた。
なんでこんな複雑になってしもうたん?
またそれか ウゼ
どこがふくざつなんだ?
しばらく見てないうちに遅延評価まで導入されたのか? 何から何まで導入するんだな。
lazyってコードを読みにくくするだけじゃない? 呼び出し側は普通の値渡しとおなじ構文だし。
呼び出し側にも lazy って付けるべきだな。
複雑だな
呼び出し側からは、特に意識する必要はないと思うけど。
逆だろ…。なんだこの仕様。 手続きの副作用を認識出来るのは関数を使う側、つまり呼び出し側だろ。 もはや、ある式が必ず実行されるかすら、保証されなくなる。 当然、その分プログラマの神経を削る種が増えるわけだ。 Haskell見て興奮した口なんだろうけど、それとこれは場合が違いすぎるわけで…。
auto みたいに、両方に書くべきだろうな
>>58 仮に、同じ考えの人が居た場合は
newsgroupで、そういう意見が出てるんじゃないの?
λ式使えばいいだけに見えるんだけどね。
>>58 必ず実行したい式をそこに書きいれるのはどうかと思う。
それに、関数の作用も分からずに使うわけ?
その関数の作用が分かればそれが遅延評価だって事にもすぐ気付くだろうに。
でも実際は delegate だけで十分だよな・・・。
lazyってなんのためにあるんだろうか。
「実用的」な言語なら少しの簡単さを生む代わりにバグを生みやすくする必要は無かったと思う。
lazyがないとexpを{return exp;}と書く必要があるけど そういう、決まりきった事をコードに書くのは微妙にストレスを感じる。 そういう意味でD言語の何でもかんでも言語に追加するという思想は俺は好きだな。
64 :
58 :2006/09/14(木) 20:17:04
s/手続き/式/
>>62 ということは、気づかなくてはならない、ってことでは?
それだけでドキュメント必須になり、過去に使った関数さえ記憶の状態によっては過ちを犯す事がありえる。
遅延評価を言語要素として持っている限り、いかなる場所でのいかなる式が
遅延評価されてしまう可能性があるわけで。
ひょっとしたら、必ず実行されることが必要かも分からない、副作用のある式が遅延評価されてしまうかも知れない。
今日からこのスレは D言語の感想を言い合い罵倒するスレ part10 になりました 引き続きお楽しみください ...
「罵倒」が見当たらない件。
>ということは、気づかなくてはならない、ってことでは? >それだけでドキュメント必須になり、過去に使った関数さえ記憶の状態によっては過ちを犯す事がありえる。 それは、lazyに限ったことじゃないよね。だんだん的が外れてきてる。 要するに、評価されたりされなかったりすることがあるから、 間違いがあったときに、わかりにくいってのが問題なんでしょ。
>>67 元々俺が問題にしていることは、最初のレスの通り
この言語要素がプログラマの負担になるということなんだが。
lazyに限った、限らないの話ではない。
それが確実にプログラマにメリットよりも大きなデメリットをもたらすと言いたかっただけ。
>>68 lazyに限らんいまさらな話だから
> メリットよりも大きなデメリット
なんて大げさなものじゃないだろ、
という話じゃないかな。
なるほど。そのメリットに対するデメリットの大きさが伝わらなかったのなら、俺の力不足だな。 出直してくる。
俺ずっとlazyたんのこと好きだったのに
>>58 みたいに思ってた(´・ω・`)
けど
>>57 のおかげでlazyたんのことが少しわかった気がした(`・ω・´)
呼び出し側から「遅延評価されること」を意識する必要がない状況を考えてみたら、少なくとも、
関数の引数を除く、すべての環境(いわゆるクロージャが持ち運べる環境の意味での環境)
に影響を受けない/与えないような関数なら
>>57 の言うとおりだと思った
逆に、 void hoge(lazy uint tgt) { ... } がメンバ関数であってメンバ変数を書き換える関数だったり、
コンソールに文字を出力する関数だったら
>>57 の言うことは成り立たないと思った
少なくとも、現時点では環境を束縛できないので、どのみちたいした問題ではないという考え方もある。
ま、なんだかんだ言ってもそれなりに使いこなせるだろ このスレの住人ならさ
>>68 夢板はID制じゃねーでげすよぉおおおおお。
最初のレスなんてわからんでごじぇーますよ、お代官様。
lazy って void 初期化子と同程度の重要性だと思ってた。 だって遅延評価って、ある条件下で評価しない代わりに高速化を望める仕様なんでしょ? 他に使い道があろうが、他の使い道はあんまり推奨してないんでは?
Dの遅延評価って高速化の効能あるの?
本家行って嫁
大分前にLunaがDで使えないか、って言ってた奴居たけど、今公開されてる簡易版ならC用だから、割と楽に動かせるっぽい。 全然流れと関係なくてすまん。
本来匿名デリゲートで書く構文を簡略化しただけであって 高速化は関係ないでしょ
俺としては速度の向上よりも必要に応じて評価を意図的に行わないのが利点だな。 &&とか||とか?:の利点と同じ。
「それを英語で言ってこい」スレ
ようはつかいよう
>>83 え?無いの?
本家では「パフォーマンスの向上に繋がる」ってあるけど
速度の向上ってのは遅延評価によって無駄な 評価を行わないことによる速度の向上のことであって、 べつにdelegate渡しが高速にできるとか、そういういみじゃないぞ。 だいぶ勘違いしているようだけど。
マシン語上では 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(); こんな感じになるんぢゃない? スコープとかスレッドとか考えるとこんな簡単じゃないのかも知れない。
>だって遅延評価って、ある条件下で評価しない代わりに高速化を望める仕様なんでしょ? 遅延評価とはある条件下で評価をしないことによって高速化を望む手法なんだよ。
ある条件下というか、必要になるまで評価しないので、必要にならない場合は評価されない。
「ある条件で評価しない」 「条件来るまで評価しない、条件来なきゃ評価されない」 使用意図っつーか視点が違うだけで2つとも同じ主張に見える。
lazyな引数が渡された場合、 その関数内で(引数が)最初に評価される式が現れるまで、評価はされない。 というだけの話を、何でややこしく書くんだろう。
遅延評価は速度的な問題よりは、 遅延評価する事により簡潔に書けることがある という点の方が重要なんじゃないの?
lazy使ったこと無いからこのスレで交わされてる内容から推測するんだけど なんだかlazyって論理型言語の推論機構っぽいですね
>>92 その発言が何を生むのか分からない。教えてエロイ人
>>92 遅延評価と推論機構ってなんか関係あんの?
そんなことより
>>92 はこのスレで交わされてる内容を読んでないと思う。
読んでれば普通に
>>87 と
>>90 だけでも lazy が遅延評価だって分かるぞ。
>>92 はlazyが遅延評価だとはわかってると思うぞ
遅延評価の何らかの性質が推論機構に似ていると言っているだけで
>>93-94 はどういう性質が似ているの?という質問だと思う
で、どこがどう似ているのか教えてエロい人
論理型プログラミング言語ってあれだろ、推論のための"⇒"の論理式を書いて勝手に推論させる奴だろ 俺の見た目で、lazyは「必要なときに必要なだけ実行される」ように見えたから、これは「必要な」という推論がされているように感じただけ なんだが('A`)
頭がlazyな奴が次々と引き寄せられてるね。
>>98 してくれません。今のところ。
現在の実装では、単純にdelegateを呼んでるだけなので。
void func(lazy int i) { if (i == 0) ... }
というのは、
void func(int delegate() i) { if (i() == 0) ... }
って感じだから。
実際の計算を値が必要になるまで行わない手法が遅延評価。 遅延評価は仕様じゃないし、lazy==遅延評価でもない。 関数の引数に対して遅延評価を行う手段の一つがdelegateで、その別表記がlazy。
bool func1(lazy int i) { return (i == 0); } bool func2(lazy int i) { return (i() == 0); } これってどっちも可なんだ。 まあ確かにlazyって引数情報が知らされないからトーゼンなんだね。
>>102 ?
引数の無い関数の括弧を省略しただけでは?
>>103 へっ?略できんの?シランカッタスマンカッタorz
セッターは代入形式で書いてゲッターの括弧は省略しようだぜ
雪駄と下駄?
いや、もう1引数の関数は全部代入形式で行こう char[80]buf; gets = buf; dout.writeLine = buf;
gets = buf; は buf.gets(); で行こう
やっぱり処理の責任の所在を考えて あ き ら め ろ
>>112 delegate(==lazy、
>>101 ,
>>112 いわく)と遅延評価ってぜんぜん別物じゃん。
知らなかったって言われても。
Dのlazyはつまり、関数型言語の純粋な遅延評価とはまた違うわけね。
拡張してそうなってんだから純粋ではない罠
lazyってOrElseとAndOlseってことだろ?
別物じゃないしょ?遅延評価をdelegate使って実現してるって話でそ。 でも、関数型言語に備わっているのと比べると形も違うし値をキャッシュしない等の不備もあるね。
>>116 人はそれを別物と呼ぶ
”車はエンジンを使って動く”でしょ、だから車はエンジンなんだよ。
みたいな。
バカか。お前それ言い方だけの問題だろ。 ”車はエンジンを使って動く”でしょ、だから車はエンジンと関係してるんだよ。 みたいな。
call by nameも遅延評価の一種だからD言語のlazyも遅延評価といえるんじゃね。
>>118 釣りじゃないと思うから
(´д`)言い方で全てが決まるんだよボケ
遅延評価をWikipedia
・lazyをdelegateのシンタックスシュガー的なものとして見る ・lazyの実装に暫定的にdelegateを使っていて将来的には 結果がキャッシュされるちゃんとした遅延評価になると思っている の違いなんじゃないの?
>>120 お前"の"バカな言い方で全てを決めるなボケ
しかし、頑な宗教的思想を持った人間に関わるとろくなことが無いな。
まぁお前の宗教に合わないだけなんだけどな。
関数型言語マンセー
・引数の式の値を評価するのが先か ・引数の式に関数を適用するのが先か とは別に、 ・式の値はキャッシュされるか否か ということがある。 最初に出来の悪い比喩を始めた116は死刑でいいけど、 そいつを除いても、一言に遅延評価といってもいろいろ あるってことを見失ってるやつがいるように思う。 おまけに、遅延評価である、というのはそれを言語がサポート するかプログラマが実装するかなんてことは問わないしな。
日本語でおk
これはひどい
頭の悪い人たちだな。 純粋な遅延評価でないものを、遅延評価だなんて言うなってことだよ。 何も分かってない人を相手にするのはほんと疲れる。
>>131 > 純粋な遅延評価でないものを、遅延評価だなんて言うな
お断りだ
思い切って話に加わったら 瞬く間に自分の馬鹿が判明して整合性にてんやわんやみたいな。
いつの間にかlazy⇔遅延評価になってるしな 遅延評価というモデルを使うのがlazyで把握?
うんそう。 実際の計算を値が必要になるまで行わないこと(即ち遅延評価)は関数の引数に対しても delegateを使えば今までも実現できてたけど、引数に渡す{ return 式; }の文をwrapしたいとかでlazyが出来た。 個人的には前バージョンのdelegateへの暗黙変換だけの方が良かったな。 delegateがlazy表記になっただけで誤解してる人がいっぱい湧いてきたし。
Wikipediaにも >遅延評価とは「計算機科学における手法の一つ」 >「評価しなければならない値が存在するとき、実際の計算を値が必要になるまで行わないこと」 って書いてあるな。 遅延評価は手法だそうだからそれを実装さえすれば「遅延評価」と呼べそうな気がするな。 それともこれが「純粋じゃない遅延評価」で、関数型言語における遅延評価が「純粋な遅延評価」とでもいうのかな? 計算機科学における遅延評価ありきで、それを関数型言語が採用しているみたいだけど。
まぁ、工学には良く有る話だよな
「純粋な遅延評価」ってのをまず聞いたことがないというのが何とも。
頭が良すぎてこの太陽系第三惑星に同意してくれる人を見つけられない
孤独な
>>131 を馬鹿にするのはやめろ。
釣られすぎかと
目欄や縦読み等の仕込み無しでの後出し釣り宣言なんてそれこそ敗北宣言ジャマイカ。
delegate=遅延評価 ではないが、delegateは遅延評価的な物として扱えますよ。 でおk?
遅延評価は副作用が無ければキャッシュ可能だけど 副作用があったらキャッシュ不可能ですよ。
最近はモーターで動く車もあるけどな
>>143 遅延評価はdelegateを使うと表現しやすくなる程度じゃないのか?
それだとやっぱり「delegateを使うと自動的に遅延評価ができる」になってしまうと思われ
「delegateで関数の引数に対して遅延評価を実現することができますよ」だろ。 遅延評価的な物、って何やねん。 何で変な喩えにするのかなあ。
死刑だって言ってるのにしゃしゃり出てくるし。
>>127 で死刑にしたかったのは116ではなくて
>>118 でした。
その節は116様につきましては大変申し訳ありませんでした。
最終的には煽りに行き着く。 まぁ、根拠もなく調子こいてたことがこれだけ明らかになっちゃね。
そうそう。 116の馬鹿さ加減がこうも明らかになっちゃね。
やっぱ頭が良い人の猿真似レスは異次元だわ。 常人ではここまで浮くことはできない。
Dって予約語多いね
むしろ 「Dって遅延評価無いの?」 「っ (delegate|lazy)」 でおkじゃね?
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 まだあるかな?
>>155 ・遅延評価は手法である
・Dは遅延評価を仕様に定義している言語ではない
「Dって遅延評価無いの?」
「ない」
「Dって遅延評価実現できないの?」
「っ&& || ?: delegate lazy」
連想配列使ってキャッシュすればいいだろうに…
>>159 それはmemoize
lazyとは別の最適化手法
> ・Dは遅延評価を仕様に定義している言語ではない 脳内定義を広めようと必死だな
>>161 確かにプログラマのの実装によって遅延評価は実現できるんだけど、
関数型言語が持っているような『純粋な遅延評価』なんてDにはありませんよ?
&& || ?: delegate lazy
↑を使って遅延評価を実現することは出来るけどこれらは遅延評価そのものではないよ。
>>156 lazy, iftype, scope, on_scope_exit, on_scope_failure, on_scope_successが無い。
instanceは違うと思う。
あとbitの代わりにbool。
>>163 on_scope_exit, on_scope_failure, on_scope_successは廃止にならなかった?
>>164 deprecatedだけど、一応まだ予約語。
その名前の変数とかは定義できない。
>>165 そうだったのか。知らなかった。
>>160 lazyとは違うけどlazy+連想配列を使ったキャッシュで関数型言語の遅延評価と同じになるっしょ?
C++の文字列型みたいなもんでしょ 言語仕様に「これがD言語での遅延評価です」ってあるわけじゃないけど 実現はできるという 不毛な主張だと思うよ 「遅延評価」の定義を明確に曖昧なく決定したいなら 自分で細部まで考えてどこか標準化してくれそうな団体に勝手に提案なりしてください 既に標準仕様があるならそれを晒すだけでいいけど 「なるほどそうなんだね」で終わるから
>>162 『純粋な遅延評価』って何?
何をもって純粋と呼ぶのか正確な定義を頼む。
>>162 お前の脳内定義は聞き飽きたから、その定義が
世の中一般の話では狭すぎるってことにはよ気付け。
遅延評価の話するたびに出てこられたらいちいちうざくてかなわん。
>>168 ちがうよ
ずっとlazyを遅延評価と呼ぶことに過剰アンチ反応をしているヤツ
>>172 わかった。
曰く世の中一般の話では狭すぎる定義解説はもうしない。
だがどんだけlazyが誤解されてたかもう一度スレを読み直せ。
まずはlazy==遅延評価でないってところから解説しなきゃならんひどい有様だったぞ。
(´・ω・`)つ旦~ 何だかよく分からないけど コカ・コーラ(ホット)置いときますね
というかさ、あるプログラミング言語における遅延評価を念頭に置きすぎてるな。
> lazy==遅延評価でない まだ言ってるよこの人
ここまで頑なに主張するのは余程の理由があるとみえる まあ、lazyって便利だね。でいいんじゃないか?
逆に頑なにlazyを遅延評価と呼びたい
>>177 はlazyにどんな定義付けをしているのだろう。
ん…?
lazyは構文糖でしょ。
○○言語の○○と違うから、Dの○○は○○ではない。 メチャクチャ理論ここに極まれりって感じだな。
仕様見りゃ > Lazy 引数は関数が呼び出されるときに評価されるのではなく、 > 関数の中で引数が使われる時点で初めて評価されます。 って書いてある。 lazyキーワードを使うと、lazy引数になるから、遅延評価を行える。 lazy引数の評価は遅延評価。 D言語でのlazyっつーのは遅延評価の仕様のひとつ。 というのは日本人でなくてもみな承知しているんだが、 なぜかlazyは遅延評価じゃないと言い張るアホが一人いる。 いいかげん自分の定義を見直せって。
>>185 「lazyで遅延評価が実現できる」は真だけど「lazyは遅延評価である」は偽だよね。
もし「lazyは遅延評価である」が真なら
lazyはdelegateの構文糖なわけだから「delegateが遅延評価である」も真になる。
delegateは機能が制限されたclosureなわけだから「closureが遅延評価である」も真になる。
でもclosureを備えたjavascriptとかrubyとかpythonみたいな言語が
「遅延評価を備えている」という風にいわれているのは今まで聴いたことがない。
ああ、言葉遊びをしたいだけの馬鹿か。 言葉遊びは別のところでやってくれ不快だ。
lazyは遅延評価の一つである
>>185 >lazyキーワードを使うと、lazy引数になるから、遅延評価を行える。
>lazy引数の評価は遅延評価。
>D言語でのlazyっつーのは遅延評価の仕様のひとつ。
ここまでは当然承知してる。
>なぜかlazyは遅延評価じゃないと言い張る
問題はここだったのだがこれは漏れが
>>134 の認識だったからだ。
「lazy==遅延評価の仕様即ちlazy==遅延評価」という認識の人が漏れの認識を曲げられないのと同じで
漏れも「lazy==遅延評価の仕様即ちlazy==遅延評価」という人の認識を曲げられるわけが無い罠。
うん、憑物が落ちた。
これについては認識の問題だし水掛け論にしかならんよな。本当に不毛だった。
コカコーラをソフトドリンクと定義する コカコーラは飲物である 飲物は液体である よって液体はソフトドリンクである☆
AはBであるという言葉の意味を A∈Bと解釈する人と A≡Bと解釈する人の不毛な争い
流れ読まずに質問 上でdelegateはclosureの制限がかかったもの って書いてますけど具体的にはどういう違いがあるんですか?
>>186 > lazyはdelegateの構文糖なわけだから
実装がdelegateだろうってだけで、delegateに代入できたりはしないよ。
そもそもdelegateと違って引数のパラメータ指定子だしな。
それでなくとも、
> もし「lazyは遅延評価である」が真なら
> lazyはdelegateの構文糖なわけだから「delegateが遅延評価である」も真になる。
lazyという表現がされる場合はdelegateという表現と意味合いも変わってくるよね。
だから、delegateが云々は真になるとは限らない。
今回の場合は、delegateは引数の遅延評価機構としてのものではないから偽だね。
delegate自体は遅延評価されない。
>>189 単にお前が間違ってるだけ。認識云々じゃなくて現実を見よう。
lazy∈遅延評価が完全に保証されてれば意見は食い違わないんだけどね。 lazyが遅延評価に属するかどうかは実装次第。
>>194 お前そんな馬鹿なこと言ってないで192に答えてやれよ
言葉を勘違いしたまま闖入して、捨て台詞は「不毛な水掛け論」だもんなあ。
>>194 Lazyと遅延評価の定義を出し合えば良いだけだと思う。
なんで、それをしないで、喧嘩してるのか分からない。
最近この手の文系議論が多くて嫌。
結局、lazyの役割がlazy以外の語だったら ヘンテコな議論にならずに済んだのかな……
201 :
199 :2006/09/18(月) 23:11:30
202 :
199 :2006/09/18(月) 23:18:55
把握した。 その定義が加わればlazy引数を複数回評価しようが遅延評価に属するね。 というわけでスレ汚しすいませんでした。
お前は一族の面汚しだよ
>>48 恐らく発端である
>>48 に対して function 使えとは誰も言わないのか。
>>207 sedつかった表現って受け入れられないよな(orz
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
キタ━━━━(゚∀゚)━━━━!!!!
こっちが通らなくて auto x = [1,2,3]; これが通るのが遺憾 auto x = ([1,2,3]);
これらはコンパイル時評価可能 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`)
>>212 いや、後者は通る。
void main(char[][]args){
auto x = ([1,2,3]);
}
前者は配列リテラルじゃなくて静的配列の静的初期化。
で、autoで静的配列を宣言できないという制限に引っかかってエラーが起こっている。
前スレの851のバグなおしてるな。
>>215 マジか。
良かったあんな致命的なバグ直って。
そういえばあのバグはdmcでも出るとか言ってた様な気がするけどそっちは直ったんだろうか。
>>216 DMCの最終版は8/12なので、まだでしょうな。
むしろBugzilla 285が直されたのがうれしい
こうなるとstruct literalも欲しくなってくるな
220 :
デフォルトの名無しさん :2006/09/19(火) 17:46:17
9p8ujyh654w496t8nhyjmp98j,.[
char[][] strs; strs=["test","test2","test3"]; 通らない…
ああ、これで通った。 char[][] strs; strs=[cast(char[])"test","test2","test3"];
これは無理か。>static assert([cast(char[])"test","test2","test3"]==[cast(char[])"test","test2","test3"]); templateの引数にも使えないし…ってこれは静的配列の時からだろうけど。
>>222 らくちんな方法。
strs = ["test"[], "test2", "test3"];
配列リテラル 1. 配列リテラルはstaticな配列に解釈されます。 2. 配列の型は、最初の要素の型となります。 多次元配列のnew式での確保 char[][] strArray; // char型の動的配列の動的配列 strArray = new char[][10]; // char型の動的配列10要素を確保 strArray = new char[][](10); // 上と同意
void main(){ static assert(['0', '1', '2'] is ['0', '1', '2']); //通らない assert(['0', '1', '2'] is ['0', '1', '2']); //実行時エラー } staticというよりconstなんじゃなかろうか。
is式がコンパイル時に評価できないのは当たり前なんだけど、 staticというと静的配列というよりstatic int[] a; とかそんな感じを受ける、 という話ね。
D言語の仕様を読めば読むほど10進演算器が欲しい。 英語かけないので、だれか提案してくれないか。。。。 おねがい。
てかさぁ、これだけビジネスにコンピューター使われてるのに、 10進演算をネイティブにサポートしてるのって、COBOLだけっていうのが 不思議。言語に組み込むのがそんなに難しいの?というか、言語に組み込むのが 無茶苦茶難しいなら、逆に、ライブラリで対処してるのが異常(そんなに難しいんだったら ライブラリ作るのも難しいと思う)とか思う。 言語設計者が10進演算器を嫌うのは何故?
これって釣り?
>229 なんでもかんでも言語コアに組み込んで楽しい?
>>230-231 その手の議論はいらない、10進演算器が「なんでもかんでもの範疇」という
論証してくれたら聞く。
233 :
デフォルトの名無しさん :2006/09/20(水) 10:22:26
>10進演算をネイティブにサポートしてるのって、COBOLだけっていうのが 例えば .NET の各言語もネイティブにサポートしてたりするけどね。 (一見ライブラリによる対応に見えるが実際はネイティブのはず)
まぁ、俺には必要ないからネイティブに組み込む必要もないな
>>233 それってsystem.decimal構造体のこと?
で、Dではそのうちでるんじゃないかと思ってるcent型が対応するのかな?
必要とする人が絶対的に少ないのはライブラリであとづけなり無視。 そんなに必要なものなら人に頼ったり こんなとこで何度も同じ話題をほじくり返し人の意見を聞かないでネチネチと愚痴る前に 辞書使って自分で訴えろよ、無能者。
>>235 いやいや、前回聞いたときも、イラネって話は勢い良く書き込む人がいたのに、
理由を述べないから、聞きなおしてみただけで。罵倒する暇が有れば無視すりゃあ
良いのに(wとか思う。
いらない理由を述べられないのなら、黙ってたら良いのに。
237 :
デフォルトの名無しさん :2006/09/20(水) 12:04:45
いる/らない理由を述べられないのなら、黙ってたら良いのに。
>236 むしろ、コアに組み込む必要がないと思ってる側(D言語開発者含む)を説得するのはそっちの仕事だと思うが 要る理由・それがライブラリではいけない理由を述べよ(「俺が要るから」は無し) 別に元々あるものを削れと言ってるわけじゃないしな。 コアに組み込むほど使わんと思うから要らんと言ってるだけで。
>>238 学生さんかなぁ?複素数型より、ニーズは高いんだけどね。
ニーズについて説得しなきゃならん人間に対して説得出来るとは思えないレベルの話。
よく哲学板で「何故人を殺しちゃいけないの?」スレが建ってるけど、
そんな質問する奴がおかしいので、これに対して説得してみるのは
面白いけど不毛。
>>236 D使うのやめて、おとなしくCOBOLでも使ってればいい
それで全て解決だろw
クレ厨にDを使う資格はない
コアに組み込むってどういう状態? importしなくても使えるとか?
文字列で10進数持って "123.425" * "23.78991"とか実装させればいいじゃん
> 10進 勤めてる人間か学生かしらんけど、ここに書いてること自体無意味なのが分かってるんだろうか? 言うことおかしいし書く場所違うしもうサッパリなんですが・・・ それとも本気なのかな? となるとなお更手がつけられないよね
まあ平行線っぽいから要る要らんはさておくとして 「英語書けないから提案できない、誰か書いて」ってんならまず日本語で提案書いて ここに書き込んでみてはどうだろう 誰かが訳してくれるかもしれん
多倍長整数型は欲しい
>>245 俺は使わないけれども、あってもいいなあと思う。個人的に。
>>236 「必要性を感じない」
「使わない機能まで言語に組み込むことはない、ライブラリで十分」
と、理由述べているのに「理由を述べていない」とは
随分とご都合のいい解釈ですね。
あなたにとって都合の悪い意見は黙殺ですか。
ある意味すごいですね。
>>239 Dのユーザでは複素数より10進演算器のほうがニーズが高い根拠はどこにあるの?
参考までにいつ採られた統計でどこでそのような資料を確認できますか?(脳内資料?)
クレクレ言ってる人が必要とする理由を説くべきなのに
いらない理由を述べよとは随分と自分勝手な論理ですね。
>>247 真性DQNを相手にマジになってもしょうがないよスレが荒れるだけ
とりあえずハードに影響をうけないのはライブラリでいい気がするな。
>>245 俺もほしい。
ライブラリという形で十分だけど。
Cのライブラリをbccでコンパイルして使ったりとか、
C++のライブラリをD用に書き直したりとかしたらいけるかなと思いつつも、
結局めんどくさくてやってない俺。
十進演算は意外と汎用性がないからなあ。 大半は普通の演算で対応できるし、実務分野ごとに作りこむなら ライブラリのほうが便利だし。
>>251 意外と汎用性がないんじゃなくて、言語がサポートしないから、
汎用政の無い、作りこまなきゃならない10進演算が乱立してしまったんだと思う。
>>243 こういう文脈で10進が出てくるときはBCDとかBigNum系列の事だよな?
汎用性ないんだろうなあ。COBOLしか採用してないっていうんだから。 特定分野向け、といった感じか。専門性は物理演算エンジンみたいなもんかね。
VBにあるような通貨型とかじゃないの
10進演算器って?
ぐぐってもようわからん 具体的にどんなことが出来るのか例を挙げて説明してくれ
誤差の出ない小数計算って解釈で良い?
BCDに関しては、最近の本だとWrite Great Codeとか読めばいいと思う
>>260 なるほどね把握した
とりあえず、俺は要らないなぁ…
ごめんなさいね 「要らない」なんて言って
10進演算器でググっても全然ヒットしなかった。 どうやら 多倍長整数 ってのが一般的な呼び方らしい。
>>265 ぜんぜんちがいまーーーーーーーーしゅ。
っていうか俺なら必要だとしても既存のライブラリを使うか自作で組むかすると思う。 んでそのライブラリを紹介してやれば良いじゃん。 D板のみんなのためになると思うよ。
269 :
デフォルトの名無しさん :2006/09/20(水) 16:18:24
最後のSystem.Decimalは、高精度の計算ができる10進数表記のデータ型である。 この結果からは分からないが、小数も扱うことができる。 特に小数の計算を行うと、System.SingleやSystem.Doubleでは結果が狂う場合もあるが、 System.Decimalならずっと正確に計算できる。その代わり、計算は遅くなる。 スピードを取るか精度を取るかで選択されるべきものだろう。
>>267 ちがうなら、どこかの解説ページURL希望。
>>270 この程度なら自分言葉で言える。
多倍長整数は少数を扱えない。
扱うならいろいろしなきゃ駄目。→10進演算ライブラリ。
扱えないじゃなくて、普通扱わないだ(w ごみん
お金の計算目的だとして、どんな演算が求められるの? 四則演算・除余のほかにも、累乗など色々と要るんじゃないの? 10進演算の為だけに演算子追加するもなぁ…。 やっぱり、雛形になる10進演算ライブラリを元に、 欲しい機能を書き足す方が融通利くんじゃない?
ライブラリを薦める人数が10進演算を言語としての機能に入れる必要の無さを物語っている。 っていうか10進演算が必要だといった人は理由を言ってないよね。 言語に組み込む必要も一緒に述べてから、反応はそれからで良いから。 皆釣られすぎ。
一分野のごく一部にしか役に立たない機能はいらない。
それは無理。複素数型はCに存在するからね。 Cとのバイナリレベルの互換性をある程度考えているDで複素数を外すのは難しい。
>>278 頓珍漢と話すのは面倒だなぁ。。。
複素数型を使ってる人間と、10進演算器を必要としてる人間の数の違いが分かって無い。
怖いのは、0.1を10回たしても、1.0にならないのに気づかずに使ってるキチガイが、
これほど多い事だな。
280 :
デフォルトの名無しさん :2006/09/20(水) 19:18:22
この場をひっくり返すのは無理そうだよ
>>277 etc?
ライブラリじゃなくて言語仕様に含めたらどういう場面でどう便利になるのか
具体的にコードを示して説得してみなよ
>>279 >1.0にならないのに気づかずに使ってるキチガイが、
>これほど多い
どこをどう読んだらそうなるんだ
>>280 だから、何度も言ってるけど、
>>275 で指摘した問題点をクリアーした
レベルの人間相手じゃないと、無意味だってーの。
>>260 や
>>261 をこの場で提示することが恥ずかしいって思える人じゃなきゃ
無理。
指摘した問題点をクリアした人が殆どいないという時点で D言語ユーザーには大して需要がないのは明らかだな。 需要があるのなら問題点をクリアできる人がもっといるはずだしな
この期に及んで何を言ってるんだろうねこの人は・・・
>>283 だから、黙ってろよ。馬鹿は。と、遠まわしに言ってるのにぃい。
いい加減恥ずかしくならないの?
需要云々よりも、言語仕様に組み込むメリットが見えないんだよね。 複素数の場合は、複雑怪奇なテンプレートによる構文を回避できるとか、 リテラルが自然な形で記述できるとか、最適化ができる可能性があるとかいうのが、 ドキュメントで触れられてる。
需要が少ないけどあれば必要な時に便利…程度の事なのに何故ここまで伸びるんだか… ってかWalterに伝えないでここでぐだぐだ言っててもしかたないとおも。
>>286 鏡を見てもちつけ
おまいに対する真摯なレスを見逃してるぞ
気に入らないレスに反応している場合じゃない
それでも見えないなら・・・もうここから去れ
おまいの期待するもんはここにはない
>>289 見当たらない。要らない理由をこじつけてる以上の物が見当たらない。
たとえばさ、10進演算が実装されるとして、構文どうすんの?とかいう話の方が有意義じゃないか?
292 :
291 :2006/09/20(水) 19:53:47
あ、でも、
>>290 みたいな態度の人間とは議論できないなあ。。。
だから、黙ってろよ。馬鹿は。 と、遠まわしどころか直接的に言われてるのにまだ吼えてる人がいるスレはここですね?
>>293 お前がバカじゃないならWalterタソに自分で英語で伝えたら良いのに。
Walterタソに言わなきゃ、どんなに欲しがっても手に入んないぞ。言語機能としては。
あと、都合の悪いレスを「黙ってろよ、バカ」って言ってるように見えるけどそれはどうなんだろうね。
バカバカ言い合うバカ言語 D D D D DEN♪
英文も書けない人に馬鹿馬鹿言われたくないです><
「分かってないなぁ」と言ってるやつに触れなきゃいいだけだな。 そいつは真摯なレスを頭に血が上って見逃してるんじゃなくて、 自分の言葉で必要性を説明すると突っ込まれるのが怖いから 冷静に「分かってる振り」をしてるだけだってのは、ここまでの 様子をみりゃ一目瞭然だろ。 という人格攻撃が対話中断の態度として気に入らないとしても、 そいつがこれ以上情報や意見を出せないことは明らかだろう。 だから、この話が進むことはないし、この話が続くとしたら"構って ちゃん"のご機嫌とり以上の内容はない。 話題を振ってくる人間のめぐり合わせが悪かったと思って、 これを雑談のネタにするのはすっぱり諦めなよ、みんな。
全くどうでもいい通りすがりだが,10進数の0.1が2進数で循環小数に なるのはプログラマの常識だから多倍長整数とか外したこといってた 奴は恥ずかしさで悶え死んだ方がいいぞ
↑スルーで
>多倍長整数とか外したこといってた奴 日本語でおk
話変わるが、これで共有されるのは嫌だな。 今のままで使い所あるんだろうか。 void main(){ int[][5] array; array[]=[0,1,2];// array[2][0]=3; foreach(a;array){ foreach(b;a){ printf("%d",b); } } }
必要なら複製しるってことじゃないかな。
>>302 嫌っていうかopSliceの仕様からしてしょうがないんじゃない?
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); } }
>>305 ary1.length が 0
ary2.length が 4
ary3.length が 5
になってるね。
原因究明に役立つかもしれんし一応こっちも。 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); } }
この調子じゃ配列リテラルもベータ版であんまり期待しないほうが良いな。 むしろ今からバグ取り段階か。
まぁ実装初期はバグだらけってのはD言語の風物詩だからなぁ しばらくすると安定してくるから今は次バージョン待ちだな。
話に付いていけない俺がいる・・・orz
ん、あ、いつのまにか 0.167 になっとんたんか
確かに構造体/クラスリテラルが欲しくなるなあ それはともかく、dupを使うべきときとそうじゃないときがわかりにくくて困るんだが・・・ 標準ライブラリで文字列処理をしてると実行時に急に落ちて原因究明に時間がかかったおー
>>312 配列を共有したくない場合。
例えば書き込み禁止になってるメモリ部分にある文字列を代入して変更したいとか。
char[] t="aaaa".dup;
t[2]='b';
あーそういえば文字列リテラルも書込み禁止領域だったっけ・・・ 忘れてたけどだいぶ前にそんな話してたなぁ
「2の補数表現の16進数表記」の文字列から10進数への変換って簡潔に書けない? なんか自分で書くとすごく泥臭くなる orz Dなら・・・Dならなんとかしてくれる?
foreach(c; tolower(str)){ sum = sum*16 + (c-'0')%('W'-'0'); }
うわ・・・ 思ってたよりもかなり簡潔になりました ありがとうございました
>>316 さんのを参考に tolower使わない版
int sum = 0;
foreach(char c; str){
sum = (sum<<4) + ((c|0x20)-'0')%('W'-'0');
}
>>318 phobosのstd.stringに入れちゃえ
げ、dupってなに?rubyのdupと同じく扱って良いのかな とか思ってたら配列限定のプロパティなのね・・・
int hexToDecimal(char[] hex) {} int dec1 = hexToDecimal("A"); int dec2 = hexToDecimal('A'); // <- こっちはエラー どちらでもいけるようにしようと頑張っているが 引数をchar[]とcharにしてconflictさせたり templateだと暗黙推論するパラメータは特殊化できないとかでうまくいかなーい とりえあず 'A' を char[] 型に変換するにはどうするのがいいかな?
とりあえずこうなった 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; }
long hexToDecimal(char c){ return hexToDecimal([c]); } long hexToDecimal(char[] hex){ (以下略) で普通にいけたが。
>>321 配列リテラル使えるようになったから
int dec2 = hexToDecimal( ['A'] );
こうでしょ。
スタックオーバーフローなのだが
decimal に変換してるんじゃなくて整数に変換しているように見えるのは俺だけ?
そもそも「2の補数表現の16進数表記」といわれてるのに 符号はどこいったという話だな。
328 :
325 :2006/09/21(木) 17:06:46
['A'] 顔に見えた
>>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;
これと auto hoge = new Hoge; これが auto Hoge hoge; 等価であって欲しいと願う今日この頃
あ、でもんなことしたら面倒になるだけか。 じゃあいいや。
そういえば未だに auto Class c = new Class; を auto auto c = new Class; と書ける仕様じゃないんだよなぁ (例1) local auto c = new Class; (例2) auto type c = new Class; みたいに新しいキーワードを導入する方がいいと思うけども
auto auto c = new Class; なにこれ。 これ auto Class c = new Class; を実現したいなら、これ auto c = new Class; で良いはずだが、他になにかの機能付きなのだろうか
>>335 良いはずねーだろ
下のはRAIIじゃねえぇぇー
>>336 ハァ?
RAIIってアレだよな。
C++とかで言う
Class c;
ってやつ。
それなら間違ってないと思うが。
っていうか auto c = new Class; これはRAIIだよ?
以前してた話がまたループしてたり勘違いさんが増えてきたけど新米が増えた?
>>337 暗黙の型推論にするキーワードと、RAIIにするキーワードが
両方とも auto なんですよ。全く異なる機能なのに…。
現在の仕様では、両方を同時に指定できないのです。
スコープ内だったらRAIIというオチ? なんだかこれがRAIIに見えるんだが class CLASS { this(){ printf("c\n"); } ~this(){ printf("d\n"); } } void main() { auto cc = new CLASS; printf("exp\n"); }
>>343 単にそれはプログラム終了時にGCされているだけ。
>>343 それだと~thisはjavaのファイナライザと同等なはず。
普通に raii キーワードでも作って機能を分離させりゃいいのにとか思った
>>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;
の書き方は、単なる型推論。
>>347 そうだったのか・・・。ありがとう偉い人。
今後ちょっと書き込み控えます。
build 3.03 リリース
>>350 深遠というよりautoが型推論なのは単純にC++0xのパクリじゃね?
かなり古くからauto classはあった。 その後、型推論のautoが追加された。 さしたる理由はないと思うよ。
こうなれば良いのに 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
>>353 > hoga = 12ul; // ulong
バグのもとなのでやめてほしい。
やめてほしいとかいう個人的感情はともかく、Dだと外側のスコープの
変数を覆い隠す形の変数名での宣言を禁止しているくらいだから、
そういうバグの種になるものは採用されないと思う。
D言語って整数思考なんですか?
var hoga = 12ul; ならいいんじゃね? 型推論くらい最近の関数型言語なら普通でよ。
var に一票
359 :
デフォルトの名無しさん :2006/09/22(金) 20:48:02
eclipse ベースの開発環境ってまだでないの?
362 :
デフォルトの名無しさん :2006/09/23(土) 13:17:59
言語仕様の変更を追尾する賢いインテリセンスなんてないしね。
開発環境は無くてもあまり困らんが ApplicationFrameworkが無いのはつらいな
おいらはDFLユーザー
>>364 DFLの使い方を日本語で解説してるところってないですかね?
366 :
364 :2006/09/23(土) 23:06:26
日本語どころか英語でさえろくに解説ないんじゃないですかねぇ
よ~し パパ頑張っちゃうぞ~
368 :
デフォルトの名無しさん :2006/09/24(日) 01:28:50
みんな最初はそういうんだよ。最初はね。 Noahの中の人は長くつづいてるね。感心する。
俺はね、もうね、正直に生きることにしたよ! そんな生き方の中で一つ自分について発見したんだ!! 俺は正直じゃない
俺だって頑張って生きることにしてるんだけど本当は頑張ってないって事を発見したんだぜ
/ ̄\ | ^o^ | < ぼくは まちがって いません \_/ _| |_ | | / ̄\ | | < ぼくも まちがって いません \_/ _| |_ | | / ̄\ | ^o^ | < しんじつは いつも ひとつです \_/ _| |_ | | / ̄\ | | < じゃあ あなたが まちがっています \_/ _| |_ | |
372 :
634 :2006/09/24(日) 21:40:04
DFLって仕様らしい仕様が公開されてないみたいだから 日本語の解説サイトを作ろうにも・・・ 同梱されてるサンプルくらいしか確実なものがない
634じゃねえや364だ
void delegate()[] es; void regist( void delegate() p ) { es ~= p; } このソースを上手くlazyを使って改良できないかな・・・ lazyはdelegateを簡略化した物だと言ってるけど、実際はちょっと仕様が違うような・・・
これでいいんじゃね void regist(void delegate()[] p...) 何か整合性が取れてない仕様な気もするが。
>>377 いやだめだろ。lazy使えって言ってるしさ。
こんなん思いついたけど、多分有効期限切れだと思うけどエラー出た。
ってか無理じゃない?
void regist( lazy void p )
{
es ~= { p(); };
}
lazy引数をdelegate配列に結合するのは
>>181 を見る限りじゃ無理では
言語開発者に主要な言語のひとつとしてRubyをあげられるまでになったか。 小さな会社の思いっきり自己満足な言語なんだろうな。(中の人のレベルは神かも知れんが)
lazyみたいな引数をdelegateとして受け取れればイイナー
誰か 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); }
全然関係ないけど、つかそもそも日本語化けるなあと思ってたらMBSに変換してやりゃ通るのか。 (ウィンドウのタイトルは普通に通るけど、なんで?) 変換のコストもあるだろうしWバージョン欲しいなあ>>DFL
ボタンとかリストビューのヘッダーも変換なしでいけたような なんでかなあ
>>384 >>385 import/dfl/utf.d 覗いてみたら? ある程度、化け対策してるみたいだよ。
>>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 アリが㌧
時間ができたら引き続き調べてみる
falseのとき、ホバーしただけで選択されるのは まあ百歩譲って許容範囲としても、そのあと 他のが選択出来なくなってしまうのは困りますね。
ああ、一回カーソルをListViewの外に出すと また選べるようになる。なんじゃこりゃ。w
DFLって楽しいの?
>>397 なめるとおいしい、かじると固い、焼くと焦げる、煮るとあくだらけ。
ツマンネ
buildにWinMainから始まるソース投げるとリンクで、 OPTLINK : Warning 183: Extension not .RES : COMCTL32.lib advapi32.lib(0) : Error 2: File Not Found advapi32.lib とか出て失敗するんですけどもどうしたらいいんでしょうか?
コンパイルでエラーになるんですけど、これって既出の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; }
//------ 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; } 簡単にエラー回避できるんだけど、 エラーとして表示される行番号が、適切でないので どうしてエラー出たのかわかりにくい。
こういうときはたぶん探すための英語力もない罠 そういう漏れもTOEIC200点台 orz
Dにもアスペクト指向が欲しいなと思った
408 :
383 :2006/09/28(木) 01:26:15
\import\dfl\listview.d (1976): final void hoverSelection(bool byes) // setter 誰かこの関数を呼んでくれぇ どうみてもこの関数内を通過していません本当にありがとうございました orz コンパイラのバグかなぁ
唐突に思ったんだが、 DからするとC#とかって言語的な完成度が高いようなきがするよな… 何だろう、こう…子供が踏み台に上って、「ほら、ボクって大人と同じ大きさなんだよ!」みたいな雰囲気があるのは…
好きなのを使うがよかと。 実アプリを作れるという意味ではDは未だにバージョンアップのたびに言語仕様を変更して バックコンパチビリティがないからC#の方が完成度が高いのは間違いないからね。
ライブラリもたっぷりだしな。
>>410 うん、そうなんだけど
俺もDは陰ながら応援してる身だし、あんまり浮気はしない
この間C++からC#に(何を思ったか)移行しようと思ってた趣味の人間を、Dに引きずりこんだし。
色々あってDは面白いよね
けれどね、コンパイラの設計とコンパイルの実装が食い違っていたりするのは論外なんじゃないかな、
って思い始めてきちゃったんだ
…ああ、全てが崩壊していく(orz
俺はC#から移行したいけどとどまってる・・・
C#は現状ではネイティブコードに比べて動作が遅いこと・・・ これがVistaになって劇的に改善されるとかだったらC#へ移行するんだけどなぁ
>>414 変わらないと思うよ
そして予想だけどあなたの思う「動作が遅い」は数々の恩恵による結果だと思う
416 :
383 :2006/09/28(木) 02:13:33
ごめん間違い ライブラリ全体を再ビルドできなきゃならんのか ソースだけいじってもそらダメだ罠 orz
>>396-376 Buildの使い方(日本語)はありませんか?
何をどうやったら
>>8 の
自動的にインポート関係を調べてコンパイル/リンクしてくれるツール。
を実現できるのかわからなくて・・・
.NETはライブラリの相互利用ができるのがいいよな。 J#のライブラリをC#で使ったり、C#のライブラリをNemerleで使ったり。
.NETじゃなくてもOSとCPUが同じならライブラリは使えるけどな。
>>415 それは解っているんだが、
ソフトによってはその恩恵よりもスピードが大切なものもあるからな。
原理上難しいのは解るが、少しでも改善されるのであれば、
C#という言語がもっと使えるものになるとは思うけどね。
もうスレ違いなのでsage
>>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
libgphobosのライセンスってなによ?
>>422 ありがトン!
すごくよくわかりました
インポート文を書かなくてもソースリストを渡せばコンパイルしてくれるのかと思った
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); } ); }
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 イランカッタノカ...
っていうかそんな機能あったんだ・・・シランカッタ
Dのclosureの書き方がC++でもつかえたらいいのに
そんな機能ってどんな機能だ?
↓そんな機能 void p(int i){printf("%d",i);} 100.p(); ↑こんな機能
配列のみじゃなかった?
あれ、クロージャって定義できるんじゃなかったっけ いかん…Grovyと混ざってるかも
>>431 え、そうなんだ。
ってか
>>430 のコード通らないし。
できればその機能のドキュメント読みたいので参照求みます
A a = new A; a.hoge(); a.hoge; どっち使ってる? 漏れは戻り値型がvoidならa.hoge() そうじゃなかったらa.hoge
俺は常に a.hoge(); a.hoge; はプロパティ限定と心に決めている。
なんで?バカみたい
なんで?バカみたい
バカが2人
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("ぬるぽ"); } }
漏れも
>>435 だな
//メソッド呼び出しを意図していることが一見して判る
a.hoge();
//一見しただけではメソッド呼び出しを意図してるのかgetterなのかはたまたメンバ変数なのか区別がつかない
a.hoge;
と曖昧さの回避や混乱の防止などの理由。
>>440 自分が信仰しているコーティングスタイルの教義に反するんだろう。
俺も
>>435 だ
これもコーディング標準で言及して欲しいな
Javaも7からはgetter/setterを省略できるようになるらしいしね。
メソッドを a.hoge; で呼べること自体どうかと思うんだが。
Rubyだとクラス側でのgetter/setter定義を一言でできる
ようになってたと思うけど、444の言うもそれなんかな。
Dの、メンバ変数かgetter/setterかの自由を保留できる
やり方は、getter/setter定義の省略よりも素直な感じが
するなあ。どっちでも最適化されるだろうとはいえ、意味上は。
>>445 呼べるようにしてあるのは、get/setとメンバ変数の区別を、
呼び出し側においてしなくてすむようにするため、だったはず。
という話じゃなくて、442のa.hoge;みたいな記述はコンパイラで
エラーにしろよ、という話なのかな。
>>445 pascalは引数無しの手続きや関数をそうやって書ける。
Dの場合はsmalltalkのアクセサと同じ感覚の方での使い方なんだろうけどね。
// getter int x = a.hoge; // setter a.hoge = 10; // method a.hoge(); // a.hoge;でも呼べてしまう methodをa.hoge;で呼べてしまうのはgetterの()を省略できる仕様の弊害だと思う 弊害の方には目をつぶっている? 戻り値があるmethodとgetterの区別を付けるうまい方法があればいいんじゃね?
戻り値がvoidのときだけ()省略を禁止するのもなんか不公平だし 完全に解決できてないし
ゲッターとセッターを使ったらpublicなメンバ変数との区別が・・・・・・付かなくて良いのか?
Dは楽しそうな機能がいっぱいだね。
むしろ区別が付かないことを狙っている
せっかくだからと使ってみたらなにかといらいらする仕様だな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
あ sが抜けた
failoutとかはやめて欲しい気持ちで一杯です。見にくいです。 普通にscope(i)で良いと思います。 あと、このコードの scope(exit) { writef("scopeout"); writefln();}; 最後の;は普通に要らんと思います。
きっと普段から for(;;){ }; とか while(...){ }; とか書いてる馬鹿だろうから放置しる
>>454 イライラするって ; だけ?アホ?
文と式の区別もつかないバカは死んだらいいよ。
>>454 せっかくだからって…closeだとかSDL_termだとかで必要な時に使えよ…
これはもうVB厨の俺の出番だと思ってやってきました すでに()の省略やプロパティなんかは10数年以上の歴史を持ってますよと さらにいえばプロパティはメソッドの糖衣構文ですよと
>>458 まぁ苛々しすぎてるのはお前のほうだけどなw
>>462 ほんとにすげー苛々してるなw
薬はちゃんと飲めよ。勝手な判断で飲まないと悪化するからな。
朝鮮人同士が罵りあうスレはここですか?
,' / / やっつぁっつぁぱれびっぱれらんらんびっぱりりんらんぴちたんるんらー | //ヘ-‐ '´ ̄ ̄`ヽ、 | / / /" `ヽ ヽ \ りぴたりるんらーるっぱりるぴらんこれかんろっかやきりかんぐー 三 | //, '/ ヽハ 、 ヽ / 三 .L 」 ミ{_{`ヽ ノ リ| l │ i| まっちゃっちゃーやりびだりりんらびりちたんりんらんでんらんどー X / | | .レ!小l● ● 从|、i| / | | ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│ あばりっかったーばりっぱりーばりびりびりびりすてんてんどんどん /´`'J __|ヘ ゝ._) j /⌒i ! . ― ヽ._人::::| l>,、 __, イァ/ /│やばりんらすてんらんてんやろーわらぶどぅぶどぅぶどぅぶどぅぶどぅーやぶー . ― ミ ノ ノ:::::/| /ヾ:::|三/::{ヘ、__∧ | ミ (_/`ヽ< | | /ヾ∨:::/ヾ:::彡' | わでぃーだんりんらんせんらんどぶだけだげだげどぅーどぅーでーやどー
ついにファビョったw
やっつぁっつぁぱれびっぱれらんらんびっぱりりんらんぴちたんるんらー | //ヘ-‐ '´ ̄ ̄`ヽ、 | / / /" `ヽ ヽ \ りぴたりるんらーるっぱりるぴらんこれかんろっかやきりかんぐー 三 | //, '/ ヽハ 、 ヽ / 三 .L 」 ミ{_{`ヽ ノ リ| l │ i| まっちゃっちゃーやりびだりりんらびりちたんりんらんでんらんどー X / | | .レ!小l● ● 从|、i| / | | ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│ あばりっかったーばりっぱりーばりびりびりびりすてんてんどんどん /´`'J __|ヘ ゝ._) j /⌒i ! . ― ヽ._人::::| l>,、 __, イァ/ /│やばりんらすてんらんてんやろーわらぶどぅぶどぅぶどぅぶどぅぶどぅーやぶー . ― ミ ノ ノ:::::/| /ヾ:::|三/::{ヘ、__∧ | ミ (_/`ヽ< | | /ヾ∨:::/ヾ:::彡' | わでぃーだんりんらんせんらんどぶだけだげだげどぅーどぅーでーやどー
これがゆとり教育の成果か…orz
やっつぁっつぁぱれびっぱれらんらんびっぱりりんらんぴちたんるんらー | //ヘ-‐ '´ ̄ ̄`ヽ、 | / / /" `ヽ ヽ \ りぴたりるんらーるっぱりるぴらんこれかんろっかやきりかんぐー 三 | //, '/ ヽハ 、 ヽ / 三 .L 」 ミ{_{`ヽ ノ リ| l │ i| まっちゃっちゃーやりびだりりんらびりちたんりんらんでんらんどー X / | | .レ!小l● ● 从|、i| / | | ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│ あばりっかったーばりっぱりーばりびりびりびりすてんてんどんどん /´`'J __|ヘ ゝ._) j /⌒i ! . ― ヽ._人::::| l>,、 __, イァ/ /│やばりんらすてんらんてんやろーわらぶどぅぶどぅぶどぅぶどぅぶどぅーやぶー . ― ミ ノ ノ:::::/| /ヾ:::|三/::{ヘ、__∧ | ミ (_/`ヽ< | | /ヾ∨:::/ヾ:::彡' | わでぃーだんりんらんせんらんどぶだけだげだげどぅーどぅーでーやどー
マジレスしてバカを見るスレはここですか?
やっつぁっつぁぱれびっぱれらんらんびっぱりりんらんぴちたんるんらー | //ヘ-‐ '´ ̄ ̄`ヽ、 | / / /" `ヽ ヽ \ りぴたりるんらーるっぱりるぴらんこれかんろっかやきりかんぐー 三 | //, '/ ヽハ 、 ヽ / 三 .L 」 ミ{_{`ヽ ノ リ| l │ i| まっちゃっちゃーやりびだりりんらびりちたんりんらんでんらんどー X / | | .レ!小l● ● 从|、i| / | | ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│ あばりっかったーばりっぱりーばりびりびりびりすてんてんどんどん /´`'J __|ヘ ゝ._) j /⌒i ! . ― ヽ._人::::| l>,、 __, イァ/ /│やばりんらすてんらんてんやろーわらぶどぅぶどぅぶどぅぶどぅぶどぅーやぶー . ― ミ ノ ノ:::::/| /ヾ:::|三/::{ヘ、__∧ | ミ (_/`ヽ< | | /ヾ∨:::/ヾ:::彡' | わでぃーだんりんらんせんらんどぶだけだげだげどぅーどぅーでーやどー
やっつぁっつぁぱれびっぱれらんらんびっぱりりんらんぴちたんるんらー | //ヘ-‐ '´ ̄ ̄`ヽ、 | / / /" `ヽ ヽ \ りぴたりるんらーるっぱりるぴらんこれかんろっかやきりかんぐー 三 | //, '/ ヽハ 、 ヽ / 三 .L 」 ミ{_{`ヽ ノ リ| l │ i| まっちゃっちゃーやりびだりりんらびりちたんりんらんでんらんどー X / | | .レ!小l● ● 从|、i| / | | ヽ|l⊃ 、_,、_, ⊂⊃ |ノ│ あばりっかったーばりっぱりーばりびりびりびりすてんてんどんどん /´`'J __|ヘ ゝ._) j /⌒i ! . ― ヽ._人::::| l>,、 __, イァ/ /│やばりんらすてんらんてんやろーわらぶどぅぶどぅぶどぅぶどぅぶどぅーやぶー . ― ミ ノ ノ:::::/| /ヾ:::|三/::{ヘ、__∧ | ミ (_/`ヽ< | | /ヾ∨:::/ヾ:::彡' | わでぃーだんりんらんせんらんどぶだけだげだげどぅーどぅーでーやどー
何度聴いても まっちゃっちゃー じゃなくて らっつぁっつぁー
とりあえず荒らしを止めるおまじないを 天安門 自由 台湾 独立 法輪功 虐殺 人権 蛇頭 臓器
454が暴れてるのか?
>>463 イライラしてるのも、薬を飲まないといけないのもお前だろ・・・
実は461==462説
不毛だって分かってるだろが。
自演乙
かるしうむがたりないんだな
484 :
デフォルトの名無しさん :2006/10/01(日) 15:40:10
脳がとろけてると、なんにでも笑えるんだね
脳が硬くなって滅多に笑わなくなるよりまし。
488 :
454 :2006/10/01(日) 17:44:11
おまいらおはよう. 俺のせいでえらいことになってるな・・・すまん. scope(i)と括弧をまたいでiも含めてキーワードになってるのが気持ち悪かったんだ.他にそんなのあったか? セミコロンはfor&whileの後の{}と同じだったんだな・・・()が気持ち悪くて気づかんかった・・・単文のときはそりゃいるだろ,俺のばかー. あとせっかくだからっていうのは存在を忘れ去られている機能じゃないかと思ってたよ・・・
>>488 キーワードってか予約語はscopeだけ。extern(C)とかと同じ。括弧内は特別扱いは少しキモいかもね。if(auto i=true)は通るのにwhile(auto i=getLog())は通らなかったり…
日本人は低能知能なのには呆れますね。 私達中華人民はあなたたちの掲示板を拝見して笑ってみてますよ。ではありがとうございました。
カニ味噌を思い出した。それだけ。
天安門 自由 台湾 独立 法輪功 虐殺 人権 蛇頭 臓器
チベット ダライ・ラマ ウイグル 東トルキスタン 中国六四真相 六四事件
454のおかげでD言語スレは荒れ果てましたな。ご苦労。
>>498 はい、雇われたと妄想してるのはあなただけじゃないですよ
>>499 先客がいるならやることないや。それじゃ
はい、それでは。次に妄想派遣される時は、日曜は休みにしてもらった方がいいですよ。
変数の参照を返すってどうやればいい? 受け取る時はinout指定すればいいみたいなんだけど……。
>>502 日本語でおk
int* test(){
int i=1;
return &i;
}
ってこと?
>>503 ごめん、そういうこと(勿論ローカル変数じゃないけども)。
C++だとint&で返せたんだけども、やっぱりポインタ使う形になるのか。
天安門 自由 台湾 独立 法輪功 虐殺 人権 蛇頭 臓器
506 :
sage :2006/10/01(日) 22:14:06
ようやくお手製XMLパーサがまともに動くようになってきた。 完成までもう少しかもしれん。
DOMみたいなかんじ?SAXみたいなかんじ?
StAX作って欲しいな。Java6から登場するんだが、あれはいい。
天安門 自由 台湾 独立 法輪功 虐殺 人権 蛇頭 臓器
511 :
sage :2006/10/01(日) 22:47:45
今はSAXみたいなかんじというよりはSAXを実装している様な感じ。
なんだSAXか・・・。ショボ
513 :
sage :2006/10/01(日) 22:54:40
StAXは知らないからな。今、見てみたけど作れるだろうよ。
イテレータを使ってXMLを走査するって感じなのかな?>StAX
まさにそんな感じ。あれはゲーム屋とかが喜ぶ規格だな。
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 ていうのがいつも出てくる
無理。templateは、C言語などでのプリプロセッサみたいなものだから、 コンパイル時にのみ意味がある。リンクの時には無意味。
これより 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 みたいなの)が 出力されてこないんだよ。
コードを出力したいだけならインスタンス化するダミーを入れればいいんじゃないの? でもそんなコトするのになんの意味があるのだろう? テンプレートを import しないで使う理由がわからん。
>>520 テンプレートを使ったコードをライブラリにするとリンクエラーが起こるって話だよ。
ライブラリにしないで普通にコンパイルするとうまくいくから、コンパイラのバグだと思うんだけど。
>>519 俺も散々悩まされてるんで、いろいろやっているのだけど、決め手になるものは無い状態。
確認している症状としては、
1.ライブラリのテンプレートの中で可変数引数の関数を使うとだめ。
2.デバッグビルドでTypeInfo系のシンボルが生成されない。
3.ライブラリのテンプレートの中でmixinを使うとシンボルが生成されない。
4.ライブラリの中でテンプレートの特殊化を使うとシンボルがめちゃくちゃになる。
って感じ。
一応の対処法としては、ライブラリのコードをテンプレートで包んでミックスインするというのがあるけど、あまり美しくない。
ライブラリにしない状態と同じになるから、うまくいくことはいくのだけれど。
522 :
デフォルトの名無しさん :2006/10/02(月) 15:43:18
そんなにバグあるのか・・・。 っていうか、リンカやライブラリアンじゃなくてコンパイラなの?
試してみた。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 3
うまくいかないのはWindows環境だけか。
なるほど。
あ、すまない。ほんとにlib作って試してた・・・。 winのdmツールはじめて使ったのでもしかしたら、使い方まちがってただけかもしれん・・・。
526 :
516 :2006/10/02(月) 20:06:33
>>521 ありがとう。現状では根本解決はできないのか。
というか、他にそんなバグがあったなんて知らなかった。
>>523 gdcではOKなのね。コンパイラ関係なのは判ってたから、そっちでは
問題ないかもと思っていたんだが、検証thx。
D 0.168 #dmd.zip落とそうとしたら0KBのが落ちてきたのでftp経由でdmd.168.zip落とした
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.
win32.windowsが落ちるアレは未だに直ってないけどそもそも報告されてんのかな
>>529 win32.windowsって、どこにあるファイル?
例外がthrowされた行を突き止めたいんだけど、無理?
>>529 >7のやつを使っとけ
今やDのWindowsAPIのバインディングはそっちが標準だから
>>532 スマソ。
そっちの話じゃなくて落ちる原因
//再現コード
const int fooSize = Foo.sizeof;
struct tagFoo {}
alias tagFoo Foo;
void main(){}
の方が未だに直ってないねって話。
通らない… template test(char[] val){ const char[] test=val; } mixin test!(['a','b','c']);
通らない… 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; }
通らない… void main(){ writefln([1,2,3]~2); }
535, 536 は前スレの 799 と同じ原因のような気がする。 const char[] c = ['0']; switch(hoge){ case c: break; } がエラーになるがらみの。
phobosのrandomになんでMTは使ってないの? 効率的なら使えばいいのにとか思う。
重いから
軽いんじゃなかったっけ?
いや、俺
>>539 じゃないしよく知らんけど。
初期化が重い あとメモリーを食いすぎる 複数の乱数原を使うときはキャッシュの利用効率が悪くなる
MTはデフォの線形合同法よりは遅いしメモリも喰うけど 質のいい乱数生成法の中では軽いほうだし 線形合同法の質の悪さを考えたら普通はMTを選ぶと思うな
gdcはgcc-4.1.1には対応してないのか・・・ 対応して欲しいな…
>>542-543 なる。サンクス。
まあ今のrandomはマルチスレッドにも非対応ってことだし、アルゴリズムも含めて暫定的な実装なのかな。
DってCのコード通らないの?
って言うか、ABAさんのゲームのソースにDにポーティングしてあるヤツが入ってる。
質問なんですが 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; とするのはマズイでしょうか?
>>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ビルドはまだ成功していない
>>552 なんでwin32.libがいるの?
そんなのリンクするからエラーなるんじゃないの?
あー…仕事が終わったらやり直します ありがトン
Streamを配列のように扱えるクラスを作ったんだがどんな名前付ければいいかわからない… なんかいい名前ないか?
StreamAbsoluteとか。
myStream
RamdomAccessStream
逆なら理解できるんだが、Streamを配列にであってるの? Strean配列をひとつのStreamにってのならやったことある。
RamdomAccess ってもはや Stream ではないな
BufferingStream
単純にArrayStream
ようはデフォルトでスキップ機能が使えるってことだろ? ary[0]とすれは毎回違う値が1バイトずつとれてary[3]とすれば3バイトスキップするわけだ
>>564 そうじゃなくてary[10]とかしたら10まで読み込んでなければ10まで読み込むって感じじゃね?
どっちかというと、配列要素でseekするもんだと思ってた。 sr = new StreamHoge(source); sr[0].read(b); // 先頭から sr[sr.length-1].read(b); // 最後のバイト みたいなイメージだったんだけど。
>>565 10要素目以前にEOFが来てたら例外とか?
>>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が必要なソースを探してコンパイルしにいってくれるようにオプションを設定できないのかなと悪戦苦闘中
>>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が正解。
>>571 そのやり方だとコンパイルするたびにwindows.d以下大量のファイルをコンパイルすることになるから、時間の無駄だな。
まあ、Dはコンパイルが速いからたいしたことは無いだろうけど。
build.exeを使うことを強制させられるのも嫌な感じ。
これと func( 1, 2 ); これ func(1, 2); どっちが好き?
俺コーディング規則は下。 下の方がわかりやすいから。
俺も下
同じく
右に同じ。 ついでにタブよりスペース派。
死ね。 スペースインデント死ね。 ああ死ね。 俺はタブとスペース両用。
>>578 お前が一番最悪じゃねーかw
そういやタブインデントかつ80字改行のプロジェクトに居たことがある
これだからドザはwとか思ったよ。俺もドザだけど。
行頭はタブで=とか揃えたいときスペースは駄目かな。
スペースインデントにどーゆー利点が・・・
表示がエディタに依存しない。
つーか、今時のエディタとか統合環境では、スペースインデントがデフォですよ? rubyのソースは、タブとスペースがまざってて切れそうになった。 rubyは好きだけど
TABでよくね?相互変換汁
タブは4スペース派と8スペース派がいるからなあ スペースが一番無難じゃね?
80行ルール=CUIでも参照されるってことだから それをタブインデントと組み合わせるのはおかしい。 GUIばりばりならタブのほうが使い勝手がいい。
正直D言語と直接関係ない宗教論争は勘弁
80行じゃなくて80桁だな
class A { class B { } class C { B b = new B; } } これが通らないのって仕様? outer class A 'this' needed to 'new' nested class B だそうなんだが、アウタークラスはBと共通なんだから、Cが持ってるAのthisポインタを渡してくれても良さそうなもんじゃね? なんか理由があるのか?
つーか上みたいなコード書くまでもなくネストクラスは自分自身もnewできないのか……。
>>589 ?
static class A{
static class B{}
class C {
static B b;
static this(){
b= new A.B;
}
}
}
>>591 や、staticじゃなくてもouterが共通なら生成できても良いんじゃないか?って話。
で今はできないようになってるけどもそれには何か理由があるのかなあと。
>>592 エラーメッセージがおかしいから混乱してるのだろうけど、newしたかったらthisかstatic thisでしろって話だわな。
class A{
class B{
}
static class C{
static B b;
}
this(){
C.b = this.new B;
}
}
>>584 スペースでいいと思う。
Tabの理由がみつからない
>>596 コードの書き(読み)手が好きな幅で見れる。
でもその場合、「TAB = 固定nスペース」と思ってるやつは死ねば良いと思うし、
インデントをTABで固定しなきゃなんない。
それでもメリットがデメリットを上回っていると思っている。
>>597 func(longlongargument1,
longlongargument2,
longlongargument3);
なんてときに、longlong...の開始位置を縦でそろえるのは
タブインデントじゃ不可能だよね。
> インデントをTABで固定しなきゃなんない。
というのもそうだけど、インデント幅が常に固定というのも
また不便だよ。
そもそもそろえることにどれだけ意味があるかという話もあるが func(で改行すればタブインデントでも縦にそろいます。
>>597 ・人によってタブ幅が変わる
・環境(エディタの設定等)によってタブ幅が変わる
・TAB=固定nスペースと思ってるやつがけっこういる
以上の欠点より、Tabである必要はない。
>>598 統合環境なら、スマートインデントっつー機能があって、
適切なタブ+スペースに自動変換してくれる
けど、タブ幅変えたら、くずれるから、スペースインデントでしか実質使えないけどね
>>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インデントで皆我慢しておけ」というのはある程度合理的だとは思う。
>>601 というか、それが
> ・TAB=固定nスペースと思ってるやつがけっこういる
から生まれた産物の代表例だと思う。TABの意味が分からんよね。
とりあえずブロックインデントをスペースでやる奴は死んで。
>>600 TAB幅が変わっても綺麗に見えるコード書いたほうが良いんでない?
>>605 TAB使わない方が細かい桁そろえが出来て見栄えがよいよ。
>>605 いやいやむしろ汚く書いても奇麗に見えるコードを書くのがいいと思う
>>606 いやそうじゃなくて、「TAB幅が変わっても綺麗に見えるコード」を書けば、
>>600 が示すデメリットの二個が消失しますねってこと
TAB=固定nスペースと思ってるやつはやはり死ねば良いと思う。
っていうかそこはただの無知バカだからカウントしなくね?
>587
・人によってタブ幅が変わる ・環境(エディタの設定等)によってタブ幅が変わる この違いが分からない
人によって環境は違うんだから違いは無い。 >587
開くときはタブ、保存するときはスペース これ最強
indentとか使わないの? D版のDindentがあればいいのかな。
>>610 設定変更不可の外部環境と自分の他の環境が異なると、
同じ人で同じソースなのにタブ幅が違うという状況になるよー、
という話じゃないの?
>>608 TAB使わなければ、そのデメリットの他に>602のような制約も
なくなるよ、という話。
で、どっちをとるかというと、「TAB幅可変に対応するために表記が
制限されるよりも、TAB使わずに綺麗に書くのがベストだよなあ」
ということになった。俺は。
俺にわかるのはD言語のスレで TABの事を延々と語る馬鹿達はうざいから消えて欲しいかなー ってことぐらい。
>>615 ほら、Makefileとかじゃタブに意味があるから、
D言語のソースでTAB幅を調整するのを強制されるとうざいんだよ。
Haskellじゃそんな問題出ようもないから、D言語的には関係が
なきにしもあらずって感じがしない? しない? しないかな、やっぱり。
>577がいなければこんなことには
話題的が変わってたし時間的にも隔たりができたのにこの話題を蒸し返した
>>596 も同罪
話題にのってる奴全員同罪だろうに
>ついでにタブよりスペース派。 >スペースでいいと思う。Tabの理由がみつからない とりあえず死ね
621 :
デフォルトの名無しさん :2006/10/08(日) 13:59:12
タブ論、goto論、コーディングスタイルに関する話はマ板では禁止のはずだが
ここはム板だよお馬鹿さん
マだかムだかはどうでもいいがここはD言語スレだよ
624 :
デフォルトの名無しさん :2006/10/08(日) 16:30:07
Dの最新の姿をまとめ的に解説したサイトとかってないの。
Javaの開発環境であるNetBeansはデフォルトでTAB=空白4つだから便利。 ようは開発環境がTABを仮想してくれるなら空白がいいよね?ってことだな。
627 :
デフォルトの名無しさん :2006/10/08(日) 17:16:30
まあ、ふつーの統合環境なら、Tabとスペースは同じように扱えるからな エディタしかないD言語だから、こういう話になるんだろ
JavaもNetBeansもTABもDとは関係ない Dの開発環境が欲しいってんなら同意
D 0.169
アノテーションはいつ登場しますか?
0.169はバグ修正オンリーっぽいな。
除算の最適化って何?この長い歴史で未だに最適化できる余地があるのか。
Walter曰く、 >Bug fixes. \dmd\samples\d\pi.d sped up by 40%. 乗算と除算の組み合わせに最適化が効いてなかったバグだから、 i * 10 / 2 → i * 5 みたいな修正じゃないのかな。
>>634 勘違いしてない?
a%5とa/5とかを一回で計算するっていう最適化の改良でしょ?
違います
D 0.169 Oct 7, 2006 New/Changed Features Bugs Fixed * Improved optimization of div/mod combinations. 一応はっておく。
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; >
しまった・・・ > main Error: AssertError Failure main(7)
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); の行でいいんだよね?
やあ ほんとすまん
いつの間にかunittestがコンパイル時にチェックしてくれるものだと思ってた
実行しなきゃチェックされないじゃんってのが
>>640
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; }だけ
いっつもこんなこと build entrypoint -gui -unittest -g -debug 打ってるけどさ、これを build これで済ませられれば良いよね。 makeみたいにbuildfileを参照して、 pragma文で全てのオプションを設定できるようになればなぁ
build @ でbuild.brfを参照する、くらいはできた気がした。
assert と if throw の使い分けがよう分からんのですが・・・
デバッグコードとリリース時にも残るコード
うん だから、どういうものをリリース時にも残せばいいんだろうか・・・というやつ
ユーザ操作によって起こる可能性のあるやつ。とかじゃないかな。
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 はいらない。ま、関係ないけど。
よく見てないが、Cmpって引くんじゃないのか?
ああそっか。
それいじってて気づいたけど、 hoge.sort(); と関数呼び出し風にするのはアウトなんだな。
プロパティであって関数ではない、、、んだろう。
max = hoge.dup.sort[0]; ()ないほうがいいな。うん。
メンバ関数へのポインタって使えますか? void function() fp = &A.func; は通るけど、fp をどう使ったらいいかわからん。
fp();
>>659 の言ってるのはC++にあるみたいなメンバ関数ポインタってことじゃないの?
Dだと使えないはず。(近いものはdirty hackで作れるとは思うが)
メンバ関数ポインタとデリゲートを使い分けたいと申すか
staticなメンバ関数と普通のメンバ関数は確かに違うが
レスサンクス。
>>662 の意味のつもりでしたが、D では使えませんか。
とりあえずは、以下のコードで逃げることにしました。
struct D { void* ptr; void function() fp; }
(cast(D*) &dg).ptr = obj;
(cast(D*) &dg).fp = &A.func;
>>645 build
だけで一応build.brfを参照して機能してくれるみたい。
つまり
>>644 の求める機能は既にあったってことだな
GDCじゃ改名インポート使えないのか… buildをビルド出来ないじゃないか…
>>667 最新のtrunkのgdcはdmd 0.164ベースだからそれ使え
[cast(Object)null] == [cast(Object)null]がError: Access Violationなこの現実。 しかし配列リテラルがサポートされたのは素直に嬉しいなぁ。 char[][] names = ["alice", "bob"];も通らない悲しい現状ではあるけど……。
>>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"]; とかしなくてもいいのか!?
>……やっぱりnull同士をtrueにするくらい気を利かせてくれてもいいような。 イラネ
>>672 いや、勘違いだった。通らないね。
別のソースでやったときは、要素数が全て同じデータを使ってたんだった。
char[][] names = ["alice", "bob"]; がグローバルスコープにある場合は静的初期化扱いになるのか通るな。 なんにしろ、[cast("alice"[], "bob"] で済むから手間じゃないとは思う。
["alice"[], "bob"]でおk
テンプレート引数を特定のテンプレートの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 テンプレートテンプレートパラメータが欲しいという話ではないです
テンプレートに渡された型が特定のテンプレートの
specializationとなっているかどうかで分岐したいのです
それともaliasでそういったことが出来るという事でしょうか
>>679 できなくも無いです。
struct hoge(alias T) {
static if(isHolder!(T.mangleof)){
//色々
}else
static assert(0);
};
>>680 マングル名からholderのspecializationかどうか判別するのですか・・・
すごく強引な気がしますが、やっぱりそういう方法しか無いんですかね
DigitalMarsの鯖落ちてる? 繋がらないんだが。
>>682 落ちてるね。
今までもたまに落ちてたから心配しなくても大丈夫だと思う。
>>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);
}
ここまではがんばってみた。
>>684 unique_alias_idを工夫すればなんとかなりそうな気がしますね
ありがとうございます
build 3.04
dmd 0.170
foreach_reverse! もうちょっと何とかならなかったのかこの名前は
rforeachとかか まあ次のバージョンであっさり名前変更されてる可能性もなきにしもあらず
うーん opApplyReverseってのも安直だなぁ。
先生! ・ Delegates can now be the 'aggregate' for the foreach. の意味がよく分かりません! あとforeach_reverse作るくらいならいっそRubyライクなイテレータを(ry
演算子オーバーロードの左右逆版の命名は_rなのにナァ
>>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) { ... }
って感じかな?
まだ試してないけど。
>>692 オペランドの可換性とは関係ないから、あえてそれにしなかったと思う。
>>694 にゃるほど。
そいや「左右入れ替え」と「逆方向に辿る」てのもびみょーがニュアンスが違うか……。
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; }; とか、無名デリゲートの部分を引数の外に追い出せたら最高なんだけど。
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で扱うようにしなさい、ということかもしれない。
opApplyの書きかたってパターン化してて int opApply( int delegate(inout T) dg ) { nanika_loop { ... v = 列挙される値 ... if( int r = dg(v) ) return r; // ここ } return 0; // ここ } どうせこうなるのだから、returnとか書くのめんどいのでもうちょいスッキリ書けるような mixinかなにか作れないかなーと思った。思っただけでその先なにも考えてないが。
>>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--;});
}
ありゃ。色々ミスったな。こういうこと。 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--;});
D 0.170 Oct 17, 2006 New/Changed Features * foreach_reverseを追加 * foreachの集成体としてデリゲートが使えるようになった。 * オーバーライドされていないfinalメンバ関数は、_vtbl[]に配置されないようになった。 そのようなクラスから派生しているクラスを使用しているコードは再コンパイルする必要がある。 * nullはヌルポインタ、デリゲート、配列、クラスオブジェクトなどと正確に比較するようになった。
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
はやっ
finalメソッドがabstractメソッドの実装として使えなかった、か。 ( ´∀`)ははは、こやつめ!
ウォルたん☆大爆走
DFL がまったく動かなくなった orz ---------- フリーザAA ----------
IDE次第なんだよな。物凄く言語の出来が良くても、それだけで普及が5年は変わる。 インテリセンス互換かつ、使用クラス内部へ飛ぶ機能かつ、API Docを参照する機能。 この3つは最低限必要だと思う。
エラージャンプとリファクタリングブラウザも頼むぜ!
最近インテリセンスないのにも慣れてきた あと今回のことでやっぱりここはウォルターたんに萌えるスレだと再認識した
D 0.172
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個(向こうの時間で)バージョンアップってどうだろう
ウォルターたんはテストの自動化してないのかね? しといたほうが用意するのは面倒だけど、 開発効率と品質が格段に上がるのに
有志がテストするという方式で自動化されていますw
「ユーザーは開発者の思いがけないことを平気でする」というエロい人の言葉
わかった 逆に考えるんだ もう完成していると考えるんだ D0.172言語と考えるんだ 今、IDEをDで作るのが如何に無謀かよく理解できた
720 :
デフォルトの名無しさん :2006/10/19(木) 12:37:02
一度どっかでスナップショットを取ってツール制作者が足並みそろえる、 とかはしないんだろか。 あんまり効果無いかな……
722 :
721 :2006/10/19(木) 14:02:15
はい 直ってません うはははは
723 :
721 :2006/10/19(木) 17:27:50
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も関係ないです. 長々と失礼しました.まだミスあったらごめんよ.
>>723 dmdにPATH通して、sc.iniの中が適切なら
-Ic:\d\dmd\import\ -LIBPATH=c:\d\dmd\lib
も、いらんよ。
727 :
721 :2006/10/19(木) 19:44:40
あ,そうですね 頻繁に更新されるから設定が面倒だったのでsc.iniを使ってなかったです
毎回、解凍→中のsc.ini削除→他を上書きの手順を踏んでるが正直めんどい。
「解凍->以前のバージョンからsc.iniだけコピー->以前のバージョンのみ削除」じゃだめかい?
上書き禁止にすれば
上書き禁止?ナニソレ
上書き禁止にすりゃいいのか
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\
上書き禁止というか、ReadOnlyだよな。
MonaOSの開発言語をC++からD(gdc)に乗り換えようという動きがあるらしい。
どこに? ひげぽんがそう発言してるの?
仮死状態の某OSスレのことかと思ったら、 ちゃんとMonaOSプロジェクト内での話なのね。 なんかphobosサポートが悲惨で大変のようだけど。(castもできないそうな)
739 :
デフォルトの名無しさん :2006/10/21(土) 14:18:21
>>736 ソースは?
しかし、本当なら、ひげぽんもたいしたやつだ(いろんな意味で
D言語の作者はGCはカーネルがサポートすれやボケって言ってるんだよね
これが通らない。 const char[0] g = ""; static assert(g==""); static assert ((g) == "") is not evaluatable at compile time となる。 これは通る。 const char[] g = ""; static assert(g==""); なぜだろうか。
要素が0の静的配列がどう解釈されているのかという問題かなあ
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'
D言語って独自のGUIライブラリすらないの?
Python>>>>>D
マイクロスレッドを言語か標準ライブラリで実装して欲しい
マイクロスレッドならyaneSDK4Dになかったっけ
Walter殿がカーネルにGCを持ったOSを作ればそれで済む話だ。
GCの性能ならSML#の圧勝w
GCの性能てどうやって評価するんだっけ? ソースURLおせーて
GCはどれも一長一短で「このアルゴリズム最強!」ってなもんはないだろ…
はぁ?誰がこのアルゴリズム最強!とか言ってるの?
世代GCより速くて優れたGCってあるの? トレードオフ的にオプションを切り替えられるっといいのだが。
コンパイラスイッチで性質を切り替えられるやつが最強だろ。 いやGCとしてとかじゃなくて、現実的に。
中学生じゃないんだから最強最強言ってんなよ
ウンコやチンコなどの小学生ワードが大好きな2chねらーにとって 最強なんて中学生ワードはむしろ成熟した概念
>>756 世代別GCより速いも何も、じゃあ世代別GCをどう実装すんのよ.
ぜんぜん何も語ってないに等しいじゃねーか.
たとえば java だと若い世代と古い世代と恒久世代に分けて,
若い世代は Mark & Sweep GC, 古い世代は Copying GC なわけだ.
もちろん Mark & Sweep にも Copying GC も色々な種類があるわけだ.
何も知らないくせに「世代別GCで最強」で終わりじゃ無知を晒してるだけだぞ.
>>762 何も知らない割には負けず嫌いなんだな(禿藁
>>761 に誤りがありました.
若い世代が Copying GC で古い世代が Mark & Sweep です.
謹んで訂正させていただきます.
で、世代GCより速いGCってあるの?
GCって速度重視されるの?
>>763 流石専門板だなぁ・・・・・(禿藁なんて久しぶりに見た
聞きかじり厨の典型パターンに自分がはまってると何故気づかないんだろう
禿同
こういうときにするべきレスはただ一つ
>>764 ググレカス
パターンに嵌ったら気付けないんだよ。
循環参照ってヤツだな! …ってレスつけようとしたけど思い止まった オレ偉い
ビットマップ走査型GCとやらを調べてみたけど、 メモリを確保するときにメモリ内のポインタの位置を記憶するための、 ビットマップというデータを作成してそれを元にメモリを解放していく …という感じみたい Dみたいにポインタ型以外の変数にもポインタを格納することがある言語には使えないんじゃないかな SML#は関数型言語らしいからそこら辺は上手くクリア出来るんだろう (関数型言語は変数がいらないんだっけ?)
ポインタの存在するネイティブ言語ではオブジェクトの 移動が非常に難しいから、世代別GCは実装できない。
だが断る
> モダンなGCは、過去の遅いものより遙かに発展しています。 > 世代型のコピーGCには、 昔のマーク&スイープアルゴリズムの非効率さはありません。 とか本家には書いてるけど、D言語のGC実装が世代型だ、とは言ってないのね。 >GCは次のステップで動作しています: > > 1. GCで確保された領域を指す 'root' ポインタを全て列挙します。 > 2. rootから指されている領域内から、 再帰的にGCメモリ領域内を指しているポインタを探索します。 > 3. GCで割り当てられた領域のうち、 生きたポインタで指されていないことが分かった領域を全て開放します。 > 4. 残ったメモリ領域のデータをコピーして使用領域をまとめる処理 (コピーGCと呼ばれます) が実行される可能性があります。 これってMark&Compactionて言うやつ? 4は”コンパクション”ではないんだろうか。 いずれにせよ、世代化に限らず最適化の余地はある気はする。 あと、調べてるうちに「GCなんてOSでサポートしる!」て言う気持ちが分かってきた気がする……。 世の中にはGCにハードウェアのサポートを利用する代物もあるというのに。
カーネルレベルなら仮想メモリが管理できるから ネイティブでも世代別GCとかを実装出来るんだろうな と勘で言ってみる
で、結局ひげぽんにGC積んでもらおうって話なんだよな?
>>775 昔R4400で試したけどあんまり良い結果でなかった。
ひげぽんってPerlの会社に行かなかったっけ?
Hatenaにジョイントしてる。 唯一のC/C++使いとしてApacheモジュール作りとかで重宝されてる。
ひげぽん乙
mod_をしこしこ作ってるのか・・・Hatenaってレベルが高いのか低いのかw
>>781 なにをもってレベルの高低が決まってるの?781のオレオレ評価?
ハードウェアに近い方が低レベルなのです。
781はレイヤーでなくて技術レベルの高低を指しているように読める…
本人がそっちの意味で書いたのは誰の目にも明らかだろう。 内容がまるで追いついてないのが愉快だからイジられてるだけ。
>>785 >>799 を読むとHatenaのレベルが怪しく見えちゃうのはしょうがないんじゃなかろうか?
てか本当に唯一なのか?
>>786 Hatenaという会社はアプリ製作屋ではなくてWEB屋でLLでの開発が主だから
会社の性質上C/C++の必要度は高くないから
C/C++のコーディングレベルという意味でのレベルはそんなに高くないでしょ。
でも、他の部分の技術力が高いのかって言うと
誤字や間違った訳・解説が多い、はてな監修のAjaxイン・アクションの訳本や
CTOのblogを読む限り他の部分の技術力もかなりアレだけどね…
思い切りの良い企業がたまたまマスコミに買われたって感じかな 似たようなとこはあるんだろうけど露出の差がダンチ
D言語?
はい、それはD言語です。
いいえ、それはトムです。
いいえ、それもトムです。
DMD 0.173 リリース
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
可変長テンプレート引数と ローカルシンボルのテンプレートalias引数が 可能になりました、という話かな。
Signals and Slotsが気になる
std.signalsで、Obseverパターンを実装するためのもの、だそうな。 ソースコード中の例はみたけど、意義がよく分からんかった。
んー、クラスの内部状態を外部のクラスで取得するための手法を (ライブラリとして)標準化するためのもの、って感じかな。
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); }
二週間も新ver出ないもんだから心配してたぜ! Signal-Slotて「さらにもう一つのコールバック方式」って感じにしか思えないんだよなぁ……。 delegateとどう使い分けるべきなのか、誰か教えてほすぃ……。 まぁそれより俺は可変個引数テンプレートにおおっと思ったところだが。
別に使い分けなくたって良いだろ。 いつもはdelegate使っててSignal-Slotが必要になってから使えばいい。 Signal-Slotが必要な状況は特に思いつかないが。
古いバージョンのコンパイラってどこかにない?
Change Log にあるよ。 でもなんで古いのが欲しいの?
自分の昔のソースやウェブに落ちてたライブラリがコンパイルとおらなくなったとかじゃない?
あ、なるほど。 でもなんか最新のコンパイラで通らないような古いライブラリを使うのはなんだが気が引けるような。
807 :
805 :2006/11/05(日) 01:59:24
漏れもそう感じる。 かなりの手直しに「ムガー」っと思わされながらも最新版を追い続けちまう。
808 :
803 :2006/11/05(日) 02:28:14
>>804 サンクス
古いのが必要な理由は、
前に出来心で作った社内ツールを急遽使用する羽目になったんで、
直している時間が無いのです
ううむ。珍しく-H付けて、Dインターフェースファイル&コンパイル済み*.libの構成を利用してみようと思ったら、 静的コンストラクタの呼び出しがdiファイルに出てこないもんだから、自動初期化が利用できないのね。 diの末尾に static this(){ _moduleCtor(); } とか追加したらいい感じに動いてくれたけど、これでいいのだろうか……。
そういえば _moduleCtor ってなに? モジュールコンストラクタを呼び出すってあるけど、それって? これ以上詳しいことが俺が探す限りどこにも乗ってない。
811 :
デフォルトの名無しさん :2006/11/06(月) 01:26:27
皆さんどんな環境でやってるんすか?
とりあえず
>>7 のWin32をsrc\phobosの中に入れてやってるんですが、
2重定義とかどうやって回避すればええんでしょうか?
ツリービューとか表示しようとしたら途端に上手くいかなくなりました。
とりあえず言っておくけど
>>7 のアレはphobosじゃないから。
>>812 インポートパス通ってるからとりあえずつっこんでるだけかと思われるが。
自分のとこだと、 くだんのwin32はいれてあるがそれを直接使うことはまずないなあ。 GUIアプリは主にDFL。 デファクトスタンダードはどうもDWTのようだが。 ゲームはSDLのポーティングを使うのが主流では?
自分のとこだと、 くだんのwin32はいれてあるがそれを直接使うことはまずないなあ。 GUIアプリは主にDFL。 デファクトスタンダードはどうもDWTのようだが。 ゲームはSDLのポーティングを使うのが主流では?
>>810 phobosのソース見れば分かると思うよ
818 :
817 :2006/11/06(月) 12:04:32
> そいや静的デストラクタはどうやって呼ぶんだ。 ごめん普通に_moduleDtor()があったorz
819 :
デフォルトの名無しさん :2006/11/06(月) 15:34:24
ウワアアアアン やっとTreeView表示できた。 うれC~
これで実行時にイッちゃうんだけど、なにかやばい事してる・・・? int main() { gc_init(); _minit(); try { _moduleCtor(); _moduleDtor(); } catch (Object o) { writefln(o.classinfo.name ~ ": " ~ o.toString); } gc_term(); return 0; }
そりゃ、スタートアップが同じことをやってるからでは?
>>820 それは「Dで作るWin32アプリ」がしたいってこと?
だとしたらmain()じゃなくてWinMain()ではないかと思う。
class A { void opCatAssign(char[] str) {} } class C { A a() { return new A; } } void main() { (new C).a ~= "str"; } op*Assign 使用時に a の括弧を省略した場合にエラーが出るのは仕様?
昔同じ事してプゲラを食らった身としては Tips集 ってのが気になる
>>821 スタートアップ?dmain2.dってやつですか?
中身見てみたけど、自分のソースでmoduleCtorやらは呼び出さなくて良いって事?
そしてエントリーポイントをWinMainとかに変える時には明示的に呼び出さないとダメ、ってことなんですか?
聞いてばっかですんません
>>826 そう。普通にmainからスタートするときは
dmain2.dのmain → ユーザーの書いたmain
の順で実行されるから自分のmainでmoduleCtorとかは呼ばなくていいっつーか呼んじゃダメ。
その変の初期化関数を呼んでいいのはエントリポイントを変えてmain以外にしたときだけ。
なので
>>809 みたいになるはバグだと思うんだけどよーわからん。
どなたかdflでファイルのドラッグドロップで、ファイルパスの取得の やり方わかりませんか。
>>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とかがあったみたいだけど、
なんの事かわからん。。。
pc8やっと復旧したか D 1.0 for Jan 1, 2007 We'll release it one way or another Jan 1. And then we'll move on! 楽しみだー
ライブラリがねぇ。テンプレートがねぇ。switchがねぇ。structがねぇ。 同名のネストしたテンプレートをうまく実体化できない、テンプレートの引数に関数やデレゲートや配列やstructが使えない、switchには配列やstructは使えない、structリテラルが無い。 このへん1.0までになんとかして欲しいわな。
switchに構造体のイメージがわかないんだが。
>>834 そういうことではなくて、あったら何が便利なの?ということを教えてほしい。
ちょっと興味があるので。
>>831 ほんとに1.0出るかな~
長引いているのは今更のことなんだし
ウォルたんには急いで1.0リリースよりも納得いくまで作り込んで欲しい
こんな贅沢なことはそうそうできないだろうな
5/6年後とかじゃね。 ・・・早くて。
Walterタソはどうやってメシを食ってるのだろうか、、、
>>836 既に他の言語で言うVer1.0くらいの機能は有ると思うんだがなぁ
0.99→0.100の時は怒りを通り越して呆れたよw
俺はどちらかというと「いや少数点数じゃないしw」みたいに 冷静だったヤツにむかついた。お前らもっと夢を見ようよみたいな。
だって、0.99から1.00に行くようなソフトは 途中のバージョン番号がかなり飛び飛びだからなあ。 嫌でも現実の予想がつくよ。 だから、逆にそこで1.00になってたら大驚きだったろうな。 しかし、2007/01で1.0というと、もう今後大きな仕様変更は来ないのかなあ。
この言語はメジャーバージョン変わるときは遠慮しない言語だと思う、たぶん。
>>832 ライブラリは、取り合えず
メジャーバージョンが出ないと
出すに出せないんじゃね
バージョン表記はリトルエンディアンにするべきだよなw 1.0>2.0>…>8.0>9.0>01.0>11.0>21.0>… …>99.0>00.1>10.1… うわ、分かり肉! ところで、1.00のあとはアスペクト指向辺りをなんて
DLL関係をOS非依存の抽象化されたコードで読み込めるように出来る仕組みが欲しいね コンパイルするとOSに合わせてdllなりsoなりに勝手に切り替わるといいなぁ もしそれが可能ならJava並みにモジュールの肥大化が加速して楽しめると思う
>>831 本気なのかな?
キリスト教圏の人間だと新年よりクリスマスに出してきそうなもんだが。
(基本的にクリスマスから新年までお休みだからね)
マジなら良いお年玉になるが。
>>840 少数点数だった場合
0.96 > 0.97 > 0.98 > 0.99 > 0.991 > ... > 0.999 > 0.9991 > ...
>>842 確かにw
Dなら巨大な変更があるときに1.0にしてもおかしくないと冗談で思える
>>844 アスペクト指向って実は有効範囲が狭いし流行らないんじゃないかと
>>848 1.0になったら1週間で10回くらいバグフィックスしそうだな
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進数リテラルができるのかもしれない
そうだね(棒読み)
とりあえずツールやライブラリの制作者が 足並みそろえる口実が出来ると歓迎しよう……。 2007年はD言語の年ってか。ワクテカ。 ……むしろD言語開発中に新たに学んだ事をまとめて E言語とか出てくるんじゃないかとちょっと思ってた。 あ、E言語もうあるや。
次はD++、その次D#、その次Dω
そろそろ言っていいですか? ver1.0マダーーーーーッ?
ver0.1000まだー
単に変なことをしたいというだけなんだけど、 "hogehoge"という文字列を渡されたら hogehogeという名前の変数を宣言する、 とか、 obj.hogehogeというメソッドを呼び出す、 とか、 テンプレートかなんかで実現出来る?
文字列が動的に渡されてくるのを想定してるなら テンプレートだと無理なんじゃないかね。 テンプレートって静的処理でしょ。
>>857 不可能……だろうなぁ。コンパイラは文字列の中身までタッチはしないし。
せいぜい出来てテンプレートの値パラメータくらいか。
>>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は文字列を識別子トークンとして扱わせる構文)
コンパイル時に処理できるなら最初から普通に書けばいいんじゃないかなあ。
連想配列じゃね
シンボル名を文字列のごとくくっつけたり分断したり、か。 そこまで来ると完全にメタプログラミングの領分かねぇ。 そいやIDEでIntelliSenceとかの為に完全に構文解析しようと思ったら、 static ifとかまでその場で実行する必要があるのね。 1.0に併せてツールが出そろってくると、 ツール開発者からも新しい視点のフィードバックが来るようになりそうだが。 ああ、Walterの戦いはこれからだ!
Walter先生の次回作にご期待ください
DはWalterを裏切らない。 WalterもDを裏切ってはいけない。
大変だ、Dがクーデターを
Visual D++が現れた! どうするコマンド
D用のデバッガ早ようでんかな?
つ gdb,windbg
D言語のDはだっふんだーの頭文字だって聞いたんですけど本当ですか?
やってろ
dsource.orgって繋がらない?
ほんとだ
>>874 サンクス。
メンテか。随分時間がかかってるな。
DMD 0.174 release
_ ∩ ( ゚∀゚)彡 Tuple!Tuple! ⊂彡 ここまで来ると多重代入っつーかboost::tieつーかそういうのも欲しいな。
-v1オプションがなんか感慨深いね。ほんとに1.0出るんだなぁ・・。
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.
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を使いたいだけなんだが
和訳の対応の早さにびびった
>>879 ktkr! 今回かなりデカイな。tupleにクラスを入れられるから再帰テンプレートで簡単にswitchが作れそう。
>>880 hdlじゃダメなん?
なんかほんとに正式版に向けての整備って感じの更新だな。 いい感じだ。
gdcにも頑張ってもらわないと。
>>886 最近branchが切られてdmd v0.173までマージされたよ。
trunkはgcc4.1への対応作業中だと思いたい。
* scope can now be used for RAII declarations; use auto for type inference. なにげに、これがうれしかったりする。
>>888 わかるw
これで型推論しつつRAIIの宣言もできるのかな?
auto auto a;ってできなかったよな、確か。
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
書き忘れた。 >TypeTuple!(TL[0..i],TL[i..$]) ここでtuple TL is used as a typeって言われる。
この調子で非推奨の機能を切りまくれば良いと思う
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)));
>>892 非推奨の機能って他に何か残ってたっけか
個人的には配列の後置配列宣言を廃止して欲しいな
多値を返そうといろいろやってみたが、 現状ではまだ無理なんかな。 ・返り値型をタプルとして宣言するが、返し方がわからない。 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
なんかもういろいろキタ━(゚∀゚)━!! スレ住人の目が輝きだしたなw
>>884 日本語訳はdmd.***.zipに入ってるhtmlをもとにしてるので、
digitalmarsのサイトに載ってるやつよりは微妙に古かったりする。
dmd.174.zipに入ってるchangelog.htmlだと
> What's New for D 0.174
> Nov 9, 2006
になってるのでそっちに合わさっちゃってるのです。
生まれ変わったdsource.org、微妙なスピードアップだな……。 しかしdsource.org、プロジェクトのステータスとか最終commit日とかで 並べ替えたいのは俺だけだろか。 文句言う訳じゃないが、 こんなプロジェクトが!-> Status: 1 - Planning. -> (´・ω・`)ショボーン てなるのが多いんだよな……。
そうか? 漏れのとこからだと数倍高速化されててうはうはなんだがなあ
なんだかオラ、すげえワクワクしてきたぞ! おやすみ
901 :
899 :2006/11/16(木) 01:05:44
型タプルとやらは何の役に立つの? 構造体としても使えるとか?
可変長テンプレート引数と static if を使いこなしてみたかったんじゃね
ぶっちゃけGenerics程度にしとくのがベストなんだなと思った。 まあ飽くまで裏側を育てる機能だと割り切るべきで コーディングスタンダードにはならんだろうけど。
905 :
899 :2006/11/17(金) 01:55:49
MC++Dの領分はライブラリ制作者を助ける側面が強いから よりよいライブラリが出てくることに期待するのがいいと思われ
XMLライブラリどこかにないかね 誰か書いてると言ってたような
Javaみたいにインタフェースベースになってる? C++だとMSXMLとXercesの使い分けで 痛い目を見てるから統一して欲しいんだよね
XMLライブラリ自体眺めるの初めてなのでよーわからんのですが何か
911 :
デフォルトの名無しさん :2006/11/24(金) 03:00:25
先生、なぜに連想配列のキーにopCmpが要求されるのですか! x,yを持つPointクラスをどうやって比較しろと言うのですか!
√(x^2+y^2)にきまってんだろ
ハッシュだからだろ。キー値が被ったら同じかどうか判断して、違ってたら次を探す。 シーケンシャルサーチされたら敵わんて。
>912 √は要らんのでは
>>913 それはopEqualで済むはずだから、なんでopCmpまで、ということだと思う。
912なんてやって(3,2)と(2,3)が同値と判定されても困るだろうし、
実際順序が定義できない(しづらい)ものだと困らんのかな。
わろた
>>915 そーなのですよ。
実際x^2+y^2で比較なんてするとまさに3,2と2,3で同じ値を返してくるのです。
……ん? ホントは「opEqualsかopCmpのどっちかが実装されてればいい」であるべきなのか。
誰も使ってなくて今まで指摘されなかったのか?
ソース読めば解決しね? 個人的には 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; } }
yなんてゴミって事か
>>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;
}
でいいと思うよ。仕様書の例のパクリ(+バグ修正)だけど。
どっかでバイナリサーチしてるんじゃね?
ってか高いのを右、低いのを左にした二分木ぽ。
なるほど。 最初からキーを二分木で管理しておいて、 rehashをすると、木が平衡になるようにすんのかな。
まあ、ソース見ないことには分からんけど、 ハッシュだと偏ったときに効率悪いから二分木の可能性な気がする てか、そもそもopCompだけでハッシュ無理じゃね?
>>925 まぁ、憶測で語らずsrc/phobos/internal/aaA.d見れってこった。
D 0.175 ktkr!
なんか、ver1に向けて バグ修正の数がすごい
更新履歴に無いけどTcpSocketが削除されてるなぁ。まぁ困らないけど。
更新履歴にも来たか。何このドトーのバグフィックス。
仕様を作るのを止めたってことだな 年明け1.0説は真実だったのか。
TcpSocket削除されたら困るんですけど・゚・(ノД`)・゚・
>>932 え、アレって確定した話じゃなくて単なる仮説だったの?
本家に書いてあったはずだが?
Access Violation が出たファイルと行番号って簡単にわからんもんなの?
TcpSocket削除か。 Dは二度と使わないようにしよう。
そんな餌に(ry
>>938 しぶしぶ windbg を使ってみた
Stopped at exception って表示されて進まない・゚・(ノД`)・゚・
あんまり情報見つからないんだよもん
942 :
941 :2006/11/26(日) 22:43:26
まあもうちょっといじってみるお
-gだか-gcだかを付けてコンパイルしてデバッガで走らせて止まったらバックトレースを表示すればおk
コンパイルオプションで静的ライブラリの場所を指定できなかったっけ
>>944 -Lでリンカにオプション渡せる。コンパイルオプションだけでは無理。
あそっかリンカか確かにな忘れてた。さんくす
947 :
デフォルトの名無しさん :2006/12/03(日) 14:28:47
0.176age
BCPLだから、C/C++言語の後続の場合、厳密には「P言語」ってよくつっこまれるよね。 しかし「P言語」ってなぁ。なんか奇怪な言語っぽくてヤダな。 やっぱ「D言語」のが響きもスマートでいいなぁ。
import std.bind, std.stdio; void main(){ f(0.3); } real f(real n){ writefln(n); return bindAlias!(f)( f(4*n*(1-n)) )(); } カオスを発生させるよ!(゚∀゚)
うひょー、ごきげんだぜ! 細かいところにはちょっと気に入らない点もあるけど、 おおかたいい感じになってきたと思えるな。
>>950 動作同じだけど、意味的にはこっちのほうが良くね?
return bindAlias!(f)(4*n*(1-n))();
>>952 たしかにそうだね。bindで自殺したいわけだから。
今Walterタン超バグ修正モードみたいなので、 わかってるバグは今のうちに伝えといた方がいいんじゃないかとふと思った。 つーわけで、まとめてBugzillaに投げてこようと思うんで、 0.176でまだ直ってないバグを知ってるひとは教えてくれませんか。 俺はとりあえずD言語研究のBugTrackでもチェクしてくる。
>>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
>>955 の亜種だろうけどこれも落ちるな。
T*f(T...)(T x){return null;}
void main(){auto x=f(2,3,4);*x=*x;}
というかtuple系はまだまだ地雷の予感
---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 エラー行の位置からしておかしいと思うから、これが通らんのはバグかな。
間違えた、
>>957 の "test10.d(4): Error: " というのは
全部 "test10.d(3): Error: " と読み替えて。
すげー とうとうここまできたか さらにコンテナ(vector, list)と各種アルゴリズムが stdに含まれたらC++を置き換えられるくらいになるのかな
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
レスより内容が詳しくなってるね。 ありがたいことです。
Tupleの使い道について今までいまいちわからなかったんだがstd.signalsの解説読んでようやく納得した
>>954 >>809 とかどーでっしゃろ……と言ってみる。
*.diを出力するとき、中にstatic this(){ _moduleCtor(); }を含めてくれればいいと思うけど。
あと、パッケージ違いの同じファイル名のを一緒にコンパイルすると、
objファイルがかたっぽ上書きされて消えるってのは既出?
出力するobjを融合でもするか、必ずディレクトリ付きでobj出力しないと、
パッケージの意味が無いのだが。
-opすればいいけど、build使ってるとなぜか-opをdmdに渡してくれない……。
>>961 >>516-526 で話題になっていたバグがまだ解決されていないようなのですが、
これに関しての報告は既にどなたかが報告済みでしょうか?
まだでしたら合わせて報告をお願いします。
966 :
954 :2006/12/04(月) 23:04:27
967 :
954 :2006/12/04(月) 23:07:33
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 でもうまくいく。
これって仕様? class A{ const int a; this(){ a= 1; } this(int b) {//Error: constructor main.A.this missing initializer for const field a this(); //ここでaが初期化されてほしいんだけど・・? } }
971 :
954 :2006/12/06(水) 01:13:27
>>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については私には分かりません。すみませんが他の方お願いします。
下のコードをコンパイルオプションに -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; }
>>973 extern(Windows){
alias int (*PUNZIP)(HWND hWnd, LPCSTR szCmdLine, LPSTR szOutput, DWORD dwSize);
}
int main() {...
が正解
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
>>975 バグ。これだけで起こる。
public class A {
private interface I {
int func1();
}
private int test1(I i) {
return i.func1();
}
}
なんだD言語って糞じゃん
private interface I{void f();} void main(){I.init.f();} とりあえず最小の再現コード interface I{private void f();}でも再現 -> void f()がprivate扱い -> fがvtblに積まれない -> リンクのときにエラー という流れな気が。
[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も受け入れられるようにするにはどうしたらいいですか?
>>980 private interface I{
protected void f();
}
ならたぶん通る。
Dのprivateは同じモジュール内からはアクセスできるはずだから、
仕様と食い違う動作ということでバグかなあ。
>>981 S func で受けて ReturnType!(S)[] を使う
>>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
やはりバグでしたか。ありがとございます。
Dのコンパイラでも作ろうと思うこの頃。
RowSetの実装が流行らないなぁと思ったが もうJPAに取って代わられる死にインタフェースなのかな
>>991 1からDで書こうと思う。という事でまずはアセンブラから…
次スレとか立たないの? おれはたてないがな!
>>986 関数オブジェクトを受けれるような ReturnType を定義する
template Return(R) {
static if (is(typeof(R.opCall) RR == return))
alias RR Return;
else
alias ReturnType!(R) Return;
}
>>997 _| ̄□__
|_ _|へ ̄\
| |_ ゝ__)__) | ̄ ̄ ̄ ̄ヽ ̄ヽ
/ .\(,,゚Д゚)  ̄ ̄ ヽ ,|(,,゚Д゚)
( o | ̄丶.(ノ| .|) _.ノ (ノノ ノ)
.ヽ_ノ_ノ_ノ__ノ |__ノ__ノ
し`J し`J
999
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。