D
>>1 乙 もうお前に用はない
く|)へ
〉 ヽCノ
 ̄ ̄7 ヘ/
/ ノ
|
/
|
/
>>1 乙
PrincessDrawing!ってリンク切れてるな
5 :
デフォルトの名無しさん :2011/08/24(水) 16:09:32.22
ディ、ディ、D言語wwwwwwwwwwwwwwww
7 :
デフォルトの名無しさん :2011/08/24(水) 19:41:32.55
ソース公開されるの待ってる
mixinの内容は外部から守られていて、mixin側の内容の意図は保証されるわけね。
なるほどなぁ プロパティが黙って違う値を返してくるもんだから30分くらい嵌ってしまった 気をつけんと
13 :
デフォルトの名無しさん :2011/08/25(木) 00:53:46.53
C++そこそこやったんで More Effective C++に手を出そうとしている俺に Dの魅力を語ってくれ
>>13 違いを把握した上で
その上で有用だと思ったのなら
その時にまた来い
強いて言えば、愛だ。
他に語る事などない。
>>13 ツールとして見るのではなく
プロジェクトやコミュニティに対する当事者意識を持てるかどうか
んじゃC#やるとするか
特に引き留める理由もないな
お前ら愛がないぞw
D.NETがあれば・・・あるんだっけか
20 :
デフォルトの名無しさん :2011/08/25(木) 10:54:27.84
A言語 B言語 E言語 まだかよ
Cが何の後継か調べて自由研究の題材にでもしてろ
Eきむち
>>23 今朝「帰ったらd.y.dでmerdの記事見直そう」と思ってて
今まで忘れていたために気にかかっていたところだったありがとう
復活
>>27 なぜガセと思ったのか詳しく
ガセと言いたかっただけ乙
30 :
デフォルトの名無しさん :2011/08/26(金) 21:51:40.91
HとIがない
31 :
デフォルトの名無しさん :2011/08/26(金) 21:52:06.57
NもOも
フシアナEYE
33 :
デフォルトの名無しさん :2011/08/26(金) 22:11:40.03
C言語といえばC言語だろ
公式名称でアルファベット一文字でなければいけないのかそうでないのかハッキリさせてくれないか
つまらん流れだな 何回目だよ
もうPythonでいいよ
パイトン?
pythonもrubyもllvm経由でコンパイルできるようになってるし webgl, webclなんかも出てきてるし dでなければならない理由がなくなってしまった これも時代の流れか
お前がどんな理由でD言語を使ってたのか謎
Dをつかう理由それはそこにDがあるからだ というかMLとかに流れてるのメールの流量がすごい なんなのあれ…
Dの最大の欠点はウォルたんが死んじゃったら終わっちゃうこと こんなやばいもん本腰入れて使えないよ
口じゃ嫌がってても体は正直
うぉるたん 「俺の財宝か?欲しけりゃくれてやる・・・。 探せ! この世の全てをそこに置いてきた!」
ウォルたんマジウォルウォル
45 :
デフォルトの名無しさん :2011/08/27(土) 19:13:11.92
Dの意思継ぐやつなんていねーよ
46 :
デフォルトの名無しさん :2011/08/27(土) 19:20:40.92
D言語(笑)
Javaはそれなりに成功というか普及したのに Dはなんでこうなった
48 :
デフォルトの名無しさん :2011/08/27(土) 19:48:08.21
俺が見放したから でも次の規格ができたら戻ってくる予定
えっ
営利企業のものではなくて、コミュニティのものだ。 これ、メリット、だよね?ね?
でも何故か開発がクローズドなんだよねw
言語仕様がオープンなら可能性はゼロじゃない
Oops! Internet Explorer could not find www.digitalmars.com
D言語おわた?
55 :
デフォルトの名無しさん :2011/08/28(日) 18:52:29.50
始まってもいないよ
直ったな
$ type test.d import std.conv; void main() { parse!int("42", 10); parse!int("-42", 10); } $ dmd -run test.d std.conv.ConvException@std\conv.d(38): std.conv(1209): Can't convert value `-42' of type string base 10 to type int (゚д゚)
unittestからして負数考慮してねえ・・・
win版の仕様です
ただ勝ちあるのみ
std.dateをimportして、parseとtoUTCStringとtoDateStringを使ったら、toDateStringのみタイムゾーンが違うようです。 parseやtoUTCStringと同じタイムゾーンで使うにはどうすればいいのでしょうか? std.datetimeへの移行は、未翻訳のドキュメントを読むのがつらいので、できれば今は避けたいです・・・。
でもstd.dateは消滅するんじゃないかなあ バグだとしても修正されなさそうだし
どうせ同じコードを数ヶ月先まで使おうなんて思うわけ無いしstd.date使ってもいいだろ
そのりくつはおかしい
30年も持つソフトを作ろうとは思わないだろう? Dは他言語の100倍の速さで時間が流れている そういうことだ
自分は考え方を変えた 30年も面倒見れないわ もし30年もメンテするなら 途中で誰かに引き継ぐ必要があるが Dなんて普及しないもん誰が使いたがるんだ
使いたがらせる必要性について
使いたがる人間性について
個性
というか30年の歴史持ってる言語がCとfortranくらいしかなんじゃないか… lisp辺りもいけるかよくわからんけど
COBOL
こんなの思いついた 引数でenum定義できたら面白そうじゃね? void hoge(enum { a, b, c } type) { writeln(type); } hoge(type.b); とか
それ呼び出し側のカッコの中だけ 名前空間変わるの? オーバーロード・オーバーライドも難しくなりそう # 本音はIDEがつくりにくくなるから反対
引数のtype.bはどこから出てくんのーとかな 俺も反対
いっそ多相enumが入ればいい。 void hoge(enum { a, b, c } arg); void foo(enum { c, d, e } arg); hoge(enum.c); // {a, b, c}集合の中のcとして解釈 foo(enum.c); // {c, d, e}集合の中のcとして解釈 void bar(enum {a, b, c, d, e} arg) { final switch(arg){ case enum.a, enum.b, enum.c: hoge(arg); break; //argは{a,b,c} case enum.d, enum.e: foo(arg); break; //argは{d, e} } } Dに型推論は無いので所々キャストが必要になるかもしれない。
void bar(enum {a, b, c, d, e} arg) { enum {a, b} aaa; switch(arg){ case enum.a, enum.b, enum.c: hoge(arg); break; //argは{c} case enum.d, enum.e: foo(arg); break; //argは{d, e} } } ますます酷くなるな
そんなの実装する変態言語なんてあるわけない 強いていうならどこかのDとかいう言語くらいだな
79 :
デフォルトの名無しさん :2011/08/31(水) 04:25:42.91
D言語で作られた有名なソフトとかあんの?
いりす症候群とか
ecmascript+html5→アプリケーション JavaVM|dotNet→ローカルデータ処理、OS管理 ruby|python→操作簡略化、シェルスクリプト 後は高速処理特化言語で並列化だろうな プロセスとパイプを扱えるライブラリがあれば シェルスクリプトの代わりもできるかもしれないけど mainが邪魔すぎる
いつの間にかKindleStoreでD言語の公式仕様書が2.99ドルで売られてるけど大丈夫なのかこれ
ウォルターがキレたら仕様変更があるだけだから問題ないね
TDPLって何? 東京ディズニープアーランド?
The D Programming Language ああこれね
2.055まだ?
ecmaはecmaだろ jscriptだってecmaの処理系だぞってスレ違いか
近い将来javascriptに変換、あるいはインタプリタ実装できてない言語は廃れると思う windowsユーザーよりもhtml5対応ブラウザユーザーの方が多くなるだろうから ウェブアプリを開発できない言語は先生きのこれない
ブログにでも書いてろ
ハハハワロス 組み込みみたいにシビアな世界ではそんなもの通用しないから
出た出た「○×みたいにシビアな世界」 そのセリフを吐きながら新しいものを全く吸収できず自滅していった技術者が 過去どれだけいたっけかな。 メインフレーム以外はおもちゃと断じていた奴 ゲームは機械語プログラミングが全てと信じていた奴 etcetc
みんなでD言語を普及させようぜ。 そのためのキラーアプリを作ろう。 どんどんアイディアを言ってくれ!
普及しなくてもいいんじゃね派が多数
それでもD言語のキラーアプリは、一つや二つくらいは必要
ひさしぶりにきのこ先生みた
Dでjavasriptコンパイラ作るか
Go を思い出してしまった あれどうなったんだろ
103 :
デフォルトの名無しさん :2011/09/02(金) 18:55:36.22
>>101 すまぬ・・・すまぬ・・・DMDScriptよ・・・。
他の考えようか。
Dでプログラミングしたら javascript吐くのとかは無理?
105 :
デフォルトの名無しさん :2011/09/02(金) 19:22:06.05
日本語でおk
D言語からJavaScriptへのトランスレータみたいなものは、有名なものは 多分まだない。
Webアプリケーションを作ればいいと思うよ
109 :
デフォルトの名無しさん :2011/09/03(土) 00:37:34.13
仕様変更がまだ怖いから来年本気出す
110 :
デフォルトの名無しさん :2011/09/03(土) 01:09:52.05
仕様変更が怖くて何でD使ってんの?
将来性があるから
仕様変更しない言語なんて無いだろ CもC++もC#もObjective-CもJavaもJavascriptも何らかの形で常に仕様変更してるよ
CやC++の仕様変更周期はまるで亀の一生だが、DのそれはCエレガンスの寿命みたいなもんだ。
5年前に書いたDプログラムを今コンパイルしたら全部の行でエラー出るんだろ そんな言語使えるか
仕事増えていいじゃん
古いバージョン使えばエラーでないよ^^
全部の行は無いだろ '}' だけの行とか絶対出ないし 総合的に見てもせいぜいエラー率150%くらいのもんだろ
関数の引数に「in」って付けたとき、昔はC++で言うconst参照の意味だったと思うのだけど、今はそうなってないのはバグ? 関数の引数に「scope」って付けても何も変わらないような気がするけど、値渡しで「const scope」無意味じゃない?
enum str = "a"; str = "b"; 代入できちゃうな これってバグだよね
そのコンパイラ一周りも古い 肩の力抜けよ。ここはDスレだぜ
ideoneがランタイムエラーになっているのはlinuxだから。 windowsだと普通に代入できるよ。 そもそも、そこは「Error: constant str is not an lvalue」とコンパイルエラーになるべき。
2.055
キターーーーー
というのはガセ
ライオンとピーマンを追加してカロリー0の豆腐を考慮に入れたらしい
圧倒的じゃないかdmdのバグ量は…
バグを作る為に新機能を追加してるんだってば D使いのくせにそんな事も知らないの?
コンパイラやライブラリだけじゃなくユーザコードもバグらせるDさん
そういう時はバージョンを戻せば大丈夫でしょw
itmediaとな…その時点で、D関係ねぇな… うん関係なかったな
D言語はJavaやC#が後方互換性を維持してる意義がよく分かる言語だな もはやぼくのかんがえたさいきょうのぷろぐらみんぐげんご
>>133 乙なんだな
bitbucketばっかり使ってるけどgithubにもアカウント作っとこうかしらん
おい2.054から2.055にしたのにoverride:がthis()にかかってるとか どうして今までコンパイル通ってたのかわからないような部分を修正しただけで動いちまったぞ どうなってるんだ?Dはもう終わっちまったのか?
焦らしプレイか……。
うひゃあ、getExt()をextension()に変えたりfnmatch()をglobMatch()に変えたりしてたら 途端に何もかも動かなくなった びっくりするほどユートピア!
俺のソース上のstd.algorithm.removeがコンパイル通らなくなったから どこが悪いのかとunittestと比較しようとしたら unittestからコピペしてきたのもコンパイル通らなくてワロタ
まさにD!
std.path の変更はただのリネームじゃなかった気がするが ・・・と思ったらレファレンスが更新されてNEEEE!
unittestが仕様です は罠
void main(){} 2.053 => 146,972 バイト 2.054 => 149,532 バイト 2.055 => 150,556 バイト 順調にむくんでいってる
そのうち150,550 byteくらいはGCなんだろうな
>>139 は間違いだった反省している
むしろ今までコンパイル通ってたのがおかしかった
globMatch()はなにかおかしい…。たまにglobMatch内でAssersionFailure起こす。
なんか053から055にバージョン上げたら文脈によってnewで落ちるようになった またGC周りの何かの予感が 自分のバグならいいけど・・いやいくないけど
>>147 '['が含まれてるパスがおかしいのは確認した
というか'['とか普通にパスに使える文字じゃないの?なんなのこの仕様
第2引数何指定してる?
>>149 UNIX系のシェルだと、[ABC]でAかBかCのどれか、みたいなワイルドカードが使えるものがあるんだよ。
……本当に'['を指定したい時のための記法は用意されてるんだろうか。
fnmatch()には「エスケープはできません(キリッ」と書かれてのけぞったが replace("[", "[[]")でなんとかなった glabMatchはそれやるとassertで落ちる
globMatchの第2引数では[]{}は特別な意味持ってるから開きと閉じの個数が合ってないと落ちるよ、てか落とすよ
D言語のライブラリ、Tangoの次はMank(ry
大人しく普通のワイルドカードで比較するか
そのうち例外出すように変わるだろうね
男らしく副作用が多すぎて使い物にならない関数の代表を目指してほしい
strtokさんを超えてくれ
ドキュメントは d-p-l のサイトだけ更新されたな やっぱりこっちが本家なのか 日本語との照会がしづらくなるのう
public auto hoge() @property { return 0; } これがコンパイル通らないのって仕様?@2.055 public int hoge() @property { return 0; } や public auto hoge() { return 0; } はもちろん通る
std.path.getExt() -> extension() の危険な罠を回避した 手をつけるのを遅らせておいてよかった・・・
@property { public auto hoge() { return 0; } } でとりあえずコンパイルはできるみたい。
元の getExt() にドットが含まれない方が違和感あったから 俺はこっちがいい
static if (__VERSION__ < 2055) { std.algorithm.sort!"std.path.fcmp(a.name,b.name)<0"( list ); } else { std.algorithm.sort!"std.path.filenameCmp(a.name,b.name)<0"( list ); } こういうのをもっと簡単に書けないものか・・・ alias pred UZEEEEEEE
何度もやるならalias使うしか
std.path.rel2abs(".") -> absolutePath(".") も罠だった カレントディレクトリ取る方法が他にあれば・・・
std.file.getcwdでええんちゃう? なんでstd.fileなのさ
やっぱりあるんだね Windowsユーザにその名前は盲点だった そして最新のドキュメントからは消えている・・・
>>168 std.file と std.path は統合してもいいんじゃ?と時々思う。
分かれてるもっともらしい理由を以前ここで見た気がするが忘れた。
ttp://ideone.com/t2Ym9 2.055のバグ(?)かと思ったけど、Ideoneの出力もなんか予想と違うような…
システムコールを必要とするものしないもの、かな?妄想だけど ……だったらrel2absの意味がわからんか
原因不明でnewに失敗するんだけど core.memory.GC.disable();すると落ちなくなる、、 何これ、、、、、
>>172 どっか別のオブジェクトのデストラクタが意図せぬ順番で走るパターン
とエスパーしてみる
0.2%増えたのって大きいのか小さいのか
数年前に何があったんだってばよ
2007年正月のはver. 1.00発表 やっと正式版になったかと思ったのも懐かしい思い出
>>174 単純にAndreiの入門書が出たからだよ。
大規模C++ソフトウェアデザインの著者だからネームバリューが凄い
MC++Dかと
ねえねえ、今のPhobosってどのくらい強力って感じなの?
std.c.stdioのprintfまじ強力
mapファイル出力して中身を見ると 16384バイトごとに必ず文字抜けする このバグ、誰も報告してないんやろか・・・
184 :
183 :2011/09/15(木) 10:00:52.37
補足 OPTLINK (R) for Win32 Release 8.00.12
取り合えず報告してみて 報告済みなら誰かが重複マークをつけてくれると思って書いたらいい
バグがコミュニケーションの輪を広げるんだよ!! D言語はウォルターの人間愛でできてるんだよ!!!
むしろ、D言語の存在そのものがバグ
D言語友の会
http://dusers.dip.jp/ 久しぶりに覗いたらChangelogがちゃんと日本語化されててワロタ
というか、日本語で解説見るまで toUTF16z → toUTFz になったの気づかなかった
有志には乙と言わざるを得ない
toUTF16zの代替はtoUTFz!(wchar*)であることに気付かなくて一瞬阿鼻叫喚になったんだ 友の会の中の人は本当に乙だな
お、DWTアプリにクラス1個追加したら-gつけた時に出るようになったOPTLINKのエラーが もう2〜3個クラス追加したら出なくなった
.NETはオワコン
opDotに@propertyつけてなかったが為に起きた、segvもせずにでたらめな値を返すバグに、数時間はまってた。 しかも単純なコードだと再現しねぇ(dmd2.055win)
え、詳しく
Dもやろうと思えばJITコンパイラ書けるよね。 Safeモードもあるし。
-safe は犠牲になったのだ・・・
Phobos「-safe? -property? 何のことです?」
memory safe D って -safe もろとも消えたと思ってたけど SafeD ってのは別物なの?
え?safeなくなったの? propertyはまだあるよね?
-safeは無くなったみたい phobosさえ使わなければちゃんと機能したのになぁ…
201 :
デフォルトの名無しさん :2011/09/17(土) 19:51:10.43
さーてOS作るか
OSのバージョンアップ頻度 < 開発環境の更新頻度
DのOSか 名前はDOSで決まり
あ、DOSを使っててC言語を思いついたのかもね
>>194 すまん。193は勘違いだった。今やったら再現しないわ。
スレよごしてごめん
Dだから実は勘違いでない可能性大
opDotなんて使うのか? もはやalias thisだろ
WinRTに対応したら ネイティブ言語としてのまさかの覇権があるかもよ
ではまず WinRTから SJISを排除するところから
>>207 ひと手間加えるだけでECMA ScriptやLuaのような
連想配列ベースのオブジェクトが作れるという魔法の道具ですぜ。
std.xmlか何かに無かったっけ?
魔導書2、Dの記事だけ読みてえ
記事が1つしか載らないってことはD言語は全然変態じゃないってことか…
いや、Haskellとか他の言語の記事も入ってる号で単独記事だから十分変態
216 :
デフォルトの名無しさん :2011/09/18(日) 22:02:25.15
phobosの中のような、たとえば sizediff_t indexOf(char1, char2)(const(char1)[] s, const(char2)[] sub ) のような、 関数名(型名)(引数){}の様な構文ってどのような解釈をしたらいいんですか? 関数名(引数){}な構文しか知らないんで、どう読んで良いのか良く判りません。
テンプレートパラメータです
opDotってまだ使い道あったのか
immutableはsharedのひとつ?
immutableはすべてのスレッドから等しく参照してよいと定められているけど、 コンパイラがどこまでsharedとの一貫性を保ってくれるかは不明。 shared関係はなんというかまだ整理されきっていない感じ。
なぜ defineEnum が消されねばならんのだ、ぐぬぬ・・・
enum SCE_D {
COMMENT,
COMMENTLINE
}
assertEquals(std.conv.parse!SCE_D("COMMENTLINE"), SCE_D.COMMENTLINE);
----------------------------------------------------------------------
[email protected] (123): COMMENT != COMMENTLINE
223 :
222 :2011/09/21(水) 15:55:58.81
Issue 4744 て コードをいじった痕跡があるのに FIX されてないじゃん なんぞ・・・
>> 222 それコンパイル時に文字列のタプルを長さ順にソートしないといけないから 実装がえらく面倒になる。
前方一致いらない 単語切り出して完全一致を比較するだけでいいはず
Phobos 敗走・恐怖の神 何でこんな名前つけたし・・・
木星の衛星だっけ? 火星?
火星。MarsだからPhobos 純然たる恐怖の神であるDeimosよりは合ってるんじゃないかな
ヴァンパイアハンターの土偶さんのイメージがつきまとう
ウォルター「実は昔知ったのさ。日本でカセイというと別の意味もあるって事にね。おっとこれ以上の詮索は無しにしてくれ。」
誰かDでファイアーエムブレムクローン作ってくれ
231 がんばれ
それよりdioだ
邪悪の化身ッ!
無駄無駄ぁ
236 :
デフォルトの名無しさん :2011/09/27(火) 03:19:52.49
実数型のkeyを持つ連想配列にどのようにアクセスしたら良いのか判りません。 real[real] foo; foo[0.12345] = 0.99; // ok writef( "foo = %f", foo[0.12345] ); // NG 変数を介してもだめで、foreachはRenge violationでした。 もしかしてバグでしょうか? それとも実数型のkeyはもてないのでしょうか?
問題なかった@DMD2.055 Win
writef だと何も出ない?けど writefln ならいけた 仕様かどうかは面倒なので調べない てかもう寝る foreach で回すときは連想配列のプロパティを使わないとダメなはず foreach (f; foo.keys) { writeln(f); writeln(foo[f]); }
interface I {} class C : I {} void func(Object obj) {} func(cast(I) new C); // コンパイルエラー interfaceのインスタンスは無条件でObjectのインスタンスと看做していいんじゃないかなぁ それともObjectを実装してなくてintarfaceを実装してる存在なんてものがありうるの?
元々interfaceはWindowsのCOM互換のための機能だったんだぜ いつのまにかinterfaceからObjectにダウンキャストできるようになったけど、 COM由来のinterfaceでそれやったらどうなるか恐ろしいんだぜ。 Delphiも事情は一緒だけど……
interface から object のダウンキャストって普通なのか… 俺はなんとなく java みたいに機能追加のための方便の一種として しか認識してないわ > interface
Javaから入ったくちだからObjectであって当たり前だと思ってた そういうことだったのね
interfaceをObjectにキャストする必要がでたら設計間違えてると考えたほうがいい
するとinterfaceで型を定義することが間違ってるってことか… そもそも大幅に性質の違うclassどもに便宜上一部共通の部分を作って 一緒くたに扱う必要がある時点でまずいのか? mixinじゃコレクションは作れないしなぁ Variantの配列なんて悪夢のような代物は見たくもないし
「interfaceをObjectにキャストしてなんかする」の部分をそのinterfaceのメソッドにしてしまえば済む話じゃね?
すまんテンパってた
>>244 で書いたような事じゃObjectへのダウンキャストは発生しない
そういう状況で出てきたinterface型のオブジェクトを
DFLのControl#tag(こいつがObject型)とかにセットしようとした時に例の問題が発生するのであって
このtagは.NET由来でObjectになってるんだと思うが、こいつが本来Variantであるべきなんだ
俺が全面的に間違ってました。ごめんなさい。
だからDさん俺を破壊的変更するのはやめてください、やめて、とめ あ
DFLも.NETもわからんけど、Dで実装されたinterfaceであることが確定的に明らかなら ふつーにObjectにダウンキャストしてもいいんじゃね?
アップキャストでは・・・・
元の型が確定してるなら問題ないでしょ? DFL程度のソースだったらTagを独自に置き換えちゃってもよさそうだけど
DFLのgithubのforkは健在みたいだけど原作者どこいってもうたんや…
interfaceをtagとして登録するなら…
interfaceは基底クラスとは役割が違うよ 本当にそのコンテキストでinterfaceを使う必要があるのかよく考えてみて
種類も役割も様々なclassに対して一部だけ共通の側面を持たせようとする用途だから interfaceでいいと思うんだけどなぁ
interfaceはもっと身近な存在でいてほしいね
Objectの派生がいい気がしてきた
それともControl#tagが専用のinterfaceを受け取るべきなのかな? でなければVariant?
>>256 専用interfaceなんかにしたら既存のクラスを置けなくなっちゃう><
いやラッパかませば置けるけど意味無いし
役割的にはVariantが妥当じゃないかな
久しぶりに来たけどD言語どうなってる? まだ破壊的仕様変更やってんの?
今はそんなでもない 主要API消滅するときも0.002バージョン分ほど猶予がある
標準ライブラリ内での名前被りが解消すれば そこそこ安定するのではないだろうか・・・年明けくらい
言語的な仕様はほぼ固まって、 標準ライブラリを色々いじってるところって感じでいいの? 昔いじってる時いまいちイケてないライブラリだったけど ずいぶん変わったのかな
ずいぶん変わった ロケールとかエンコーディングとか微妙に基本的な部分が欠けてるような気もするが 基本的にはすごくいい感じ、だと思う、たぶん… D1の頃から「他の言語よりずいぶん早くやりたい事を書けるなぁ」と思ってたんだが そういう面ではグレードアップしてるとは実感してる
ロケールとかエンコーディングとかは やはりCJKの人間が関わらないと厳しいのだろうか
D的には内部コードは全部Unicodeだからロケールとかエンコーディングとかは入出力まわりだけどうにかなればいい。 文字コード透過性だのなんだのは内部コードをUnicodeに決め打ってる時点で捨ててる。 だからsetlocaleだのmbなんたらだのは要らなくて、 「ファイルをOSのロケールからUnicodeに変換しながら読む」程度の機能さえあれば充分なはず。
これも入出力の他の部分が決まらなくて足止め食らってる感が
ロケールは通貨記号とか日付の書式とかにも係わってるから入出力だけじゃないけどね いや入出力なのか?
>>266 そういうのは、あっても使われないから問題ない。
日本でも数字区切りを3桁で区切るか4桁で区切るか、12/31って書くか12月31日って書くか、
頭に円記号を付けるか最後に漢字で「円」って付けるかなんてのは
ハッキリ言って用途次第アプリケーション次第であって、OSの設定を拾って切り替わったりしたら逆に迷惑な場合がほとんどだろ。
そのOSの設定を拾う(「今の設定は"ja-JP"だ」とか)APIくらいあってもいいとは思うけどな
実際そのあたりあまり使わないけど 年/月/日 月/日/年 日/月/年 の順番あたりは 使わなくもないかなあ
>>264 メモリ上のデータのエンコーディングを変えたいって事は結構ある
入出力にも当然必要だけど、バイト配列と文字列の相互変換も必要
>>270 「OSの現在のロケールのエンコーディング」と「内部コードであるUnicode」以外は
「標準ライブラリ」でやらずに、iconv(をDでラップしたライブラリ)にでも任せるべきだと思うんだ。
>>270 ああ、
>>271 はちょっと違うな、ごめん。
toMBSzはAPIコールに特化してるけど、こいつの逐次処理やストリームからの読み書きに便利な版が必要って話だよね。
それなら賛成。
内部はiconvでもその程度は標準で欲しいなあ .NETのEncodingは便利よ
ガラパゴスプラットフォームが待たれる
かなり緩いBSDライセンスですら取り込まない体制なので、iconvも独自実装でないと標準には
とにもかくにもdio
基本はboostライセンスなんだっけ?
boostライセンスだな
ならiconvは厳しいか エンコーディングの実装にOSの機能はどこまで使えるのだろうか
まずOSによって対応エンコーディングに差がある、同じエンコーディングでも微妙にテーブルが違う、 Linuxなんかではlibcのロケール関数を使うことになるが言うまでもなくコイツの仕様は酷過ぎる上にBSD系と動作が違う MacだとCoreFoundationをリンクしないといけない、Windowsだとエンコーディングを数字で指定するがこれと 他OSでLANG環境変数で指定したりするエンコーディング名と一対一対応があるわけでも勿論無い ……とまあそんな感じなので、iconvに丸投げが一番楽よ。 API自体はWindowsが一番整備されてるかな、よく言われるように変換テーブルが多少独自なのを除けば。
まあ各国でよく使うエンコーディングが 自国版のOSで使えさえすればいいとは思うけど それ抜きにしてもAPIは厳しそうだな・・・
まあWindows以外は、iconvぐらいデフォルトでインストールされてるだろうってのを当て込んで ダイナミックリンクしてもいいとは思うけど。
>>283 俺初めてstd.encoding見たけど、dchar : 他のエンコーディングの複数バイト が常に 1 : n なのを想定されてないかこのインターフェース?
誰かウォルたんに合成文字の存在を教えてあげないと。
>>101 のバイナリを入れたんだけど、
VBのScriptControlからEvalしても何も帰ってこない。
ScriptControl1.Language = "DMDScript"
MsgBox ScriptControl1.Eval("1") 'Empty
MsgBox ScriptControl1.Eval("+") 'Anonymous(1) : Error: expression expected, not 'EOF'
エラーは出るからそれなりに動いてはいるようだけど、だれか助けて
DLFってクレジット表示なしで商用利用可能なんだっけ?
DFLか?
そう
3タイプのうち、普通に使う分にはzlibライセンスになると思う 表示なしでいい
なるほど それじゃDLF使おうかなあ
その前にちゃんと名前を覚えてあげてください
deprecateの関数置き換えたらobject.Error: Access Violationあああああああああああああ
extensionがバグってた Notice: As of Phobos 2.055, std.path.getExt has been scheduled for deprecation in February 2012. Please use extension instead. getExtの代わりに使えってかいてあるけど動きが違ってた void main() { string fname = "aaa.ext"; assert(std.path.getExt(fname) == "ext"); assert(std.path.extension(fname) == ".ext"); } 報告できる方よろしくお願いします。 それとも仕様変更だったり?
>>291 ワロタ
DFLは、バグで結構やばい動作することがあるって話があったから、商用で使うなら
気をつけた方がいいぞ
>> 293 これは仕様変更。
>>295 やっぱり?
.NETとかも'.'ついてるし'.'ないと分割した後単純に結合できないしやっぱりそうなのかー
コードの拡張子比較してるとこ全部直さないと・・・・
自分でgetExtを再実装すればいい
listdirとかisabsとか自作してる俺ェ…
GCCにDのフロントエンドが取り込まれるらしい 実際にGCCにコンパイラが組み込まれたら 今までみたいに自由気ままに破壊的変更できなくなるんじゃなかろうか
本家が変わらず火星なら、Iainの人が血を吐きながら頑張るだけじゃねーの 利用者とフィードバック増えるとむしろスムーズに進化できる可能性も
.NETレベルのライブラリがないと普及しないお
removeはどうせ二つ用意するなら名前変えればよかったのに
pythonにはそういうライブラリあるの?
>>301 違うな。俺が間違ってた。ごめんよ、ごめんよ
D -> Go DMDScript -> Dart さようならうぉるたん
307 :
デフォルトの名無しさん :2011/10/13(木) 13:03:52.61
そうなんだ、すごいね
この人達がBからCを作らなきゃDもなかったし他の派生言語もなかった 黎明期の偉大な人たちが次々去っていくなぁ
はてブのコメントにマジレスの嵐w Dart触ってみようかな。結局Goは敬遠してしまったし。
>>310 C系の記法から「常識的に考えて」導かれる記法だからねえ。
DはGCへの依存を弱めた記法を確立してbetter Cとしての立場を強めるとか
Variantを活用できるようになればなと思う。
iPhoneやらUbuntuやら、巷では破壊的変更に飛び込む勇者だらけなのに 指をくわえてみているだけのD言語erは まさかいないよな?
アップルが嫌いだからiPhoneには関わりません
一見破壊的にみえるだけで実は既存のものを延長した結果 という場合もあって一時的に不安定になるけど山を越えると また安定してくるという…繰り返される歴史 山が高すぎると超えられない。というのもそれなりにありそうだけども
メモリ関係でバグが出ると挫折する
OPTLINKのバグとは戦えない
clangみたいにオープンな開発にすりゃいいのに ウォルたん的にも別にクローズドな開発にする必要なさそうなもんだけど せっかく発展の余地があるのにもったいない
dってオープンソースじゃなかったんですか
肝心なところは秘密
321 :
デフォルトの名無しさん :2011/10/18(火) 18:31:28.75
えっ
Webで使う分には実用に耐えるんですかね?
規模にもよる
CでWebアプリ書ける人なら楽勝
325 :
デフォルトの名無しさん :2011/10/19(水) 23:50:24.13
だね
もしかしてこれでOPTLINKの謎エラーが消滅するのか
>>326 見落としがあった。保存するファイル名によって再現しなくなるwww
テンプレート云々じゃなくてトータルの文字数カモシレナイ
test.dで void o123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234(){} void main(){ 略(); } だと正常、1文字付け加えると文字化けか 正常な場合は _D4test115o123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234FZv で丁度128文字だしトータル文字数で確かに間違いなさそうだね
連投スマソ
マングリング後の修飾名の文字数→上限128文字を超えると化けた
Windows のみかも。ideoneでは再現せず
http://ideone.com/9TWvd 長いモジュール名(std.algorithmとか)ついたテンプレート使うと
簡単に引っかかっちまう
連投スマソ と書いたけど先越されたw まあいいや バグ報告しとく
>>332 速攻でコメが来てる
・optlinkを直さないと対応できない
・linkerを書き直す計画はあるけどいつになるかわからん
やっぱりoptlinkは切らないとダメだな
C/C++のプログラムをソースのみで配布するのは 社会に対する罪だと気づいた
うん
その点Dのソースならガリガリ修正する楽しみがあって抜群の社会貢献度
optlinkってoptasmとなんか関係ある?
ないと思う
D1からD2に移行したらDLLを動的ロードして使う部分で 謎のエラーというか色々意味不明な現象が発生するんで調べてみたら、 TLSのせいで複数回DLLがロードされているせいだった なんちゅう盲点や
データ領域は徹底的にデフォTLSにする方針だからなあ 知ってればどうってことないけど、チュートリアルでなるべく周知してかないと 他言語から移行する時の軽いハマりポイントになるかもね スレッド大量に作るような方向へ向かおうとするんだと、 将来的にTLSでの静的初期化はもっと書きづらくして気軽にやれなくなったりして
エラーになってくれればいいが何が起こるかわからんというのは困る
そういう意味ではCとのインタフェースを残しているのがすごくマイナス システム言語の看板を掲げるならデバッガが強力じゃないとつらいな
そもそもスレッドを考慮して無いdllの造りが悪いんじゃないの?
俺の為のチラ裏メモ TLS = Thread local storage
Walterは特にCライブラリをダイレクトに使えるのを大事にしてる気がするので、 避けては通れなさそうなんだよな。 Cなんて実質原始CLIみたいなもんなんだけど、デフォTLS前提としない言語外環境との連携をどう考えるか。 素のstatic thisはスレッド毎に走るのに注意、shared static thisはロックに注意、で当面しのぐしか無いがー
スレッド使ったことないからその辺平気だぜ
Visual Dの更新キタ phbosでF1ヘルプ参照できるようになった mago debugger を選んだ場合の機能が強化されてるみたいだがよくわからん
特に理由はないんですが、GCJの過去問をDで解いてみようと思いました。 今日初めてD言語に触りました。 TopCoderとかのプログラミングコンテストでC++を使う場合は、 #defineを使ってforループの凡ミスを防ぐためにこんなことをします。 #define rep(i, n) for(int i=0; i<n; i++) こうすることで以下のようなバグをなくすことができます。 for(int i=0; i<n; i++) { for(int j=0; j<n; i++) { // i++がバグ // do something } } 代わりにこう書けるので、これに関してはバグがなくなります。 rep(i, n) { rep(j, n) { // do something } } D言語でも同じようなことができますか? できないなら諦めますが、できるならその方法をご教示ください。
Dにマクロはない。ので、同じことはできない。 代替の方法については、その例に限っていえばループを foreach (i; 0..n) { // do something } で、書けばバグを防ぐ役目は果たせるな。 もしくは void rep(size_t rn, void delegate() dg) { foreach (0..rn) dg(); } ↑こういうのを定義しておけば ↓こう書ける。 rep(n, { // do something });
C++でももうすぐforeach的なものが使えるからそれでいいじゃないか
351 :
348 :2011/10/26(水) 22:59:11.58
>349 即レスありがとうございました。 動作させることができました。 拡張性が高そうなので foreach(i; 0..n) を使うことにしました。 foreach(i; 1..n) とかになっても簡単に書けそうなので。 とは言っても、もともとTangoを使っていて、それだと foreach(i; 0..n) がコンパイルできなかったので(found '..' when expecting ';' following 'for condition')、Phobosにコードを書き変えました。 PhobosだとWindowsでコンソールアプリを作るときに、文字化けしたと思うので、ちょっとイヤなんですが...。
>>348 構文をこういう風に独自defineする人間の神経は疑うけどね
tangoなんか使ってると恐い日本人コミッタのお兄さん達に睨まれるぞ
にらまれてるしw
dmd 1.071 and 2.056 release
知ってるだろ? 法則があるのをさ……。
Kには近づいてはならない!
>>356 おお、簡潔な解説が出たのか!と思って行って著者名を見た時の絶望感
> dmd 1.071 and 2.056 release 今回のreleaseの大きいところは Bugzilla 3748: inoutがまともに動くようになった Bugzilla 3659: structのopEqualsシグネチャ制限がなくなった Bugzilla 4022 他 CTFEでAAが結構まともに動くようになった 辺りかな。
AAがなんの略だかわかんなくて五分くらい真剣に悩んだけど連想配列か
今回のBugFixは、Regressionのが多いね
いつも乙 D2もいよいよ安定してきてしまった感が
バグフィックスの数に騙されるな 新たなバグもどんどん増えているぞ コンパイルできないたすけて
落ち着いて全部のライブラリをビルドしなおすんだ
GUIライブラリってある?
あるよ
--- do if (derived is base) return true; while ((derived = derived.base) !is null) return false; --- 2.055までこれがコンパイル通ってたという事実に驚愕しきり
DFL,DWT(2),wxD,gtkD,QtDは去年の段階ではかろうじて生きてた そこに載ってる他の奴は…死んでるねぇ…
>>369 そういうのは結構あると思う。
メチャメチャな文法はテストしにくい。
壊そうと遊んでたらいくつか見つけたことがある
DFLの非公式githubは生きてる
ライブラリフルコンパイルしたら案の定通らねーwww
なんの?
これしき
そういうのいいから
base a=new const(derived);が通る?
const は全くアテにならない
そんなー
>> 369 do { ... } while(...) の後に;が必須になったやつか。 それは確かに自分も驚いた。
おー、気づかなかったw 罠にしかならないから do - until に変えてほしいわ
GUIはfxlibが最低限の機能持ってて満足
DWT2め、Tableにマルチバイト文字を長々と表示させて スクロールさせまくると表示だけ固まりやがる
std.socketってどう変わったの?
重くなった
そういえばstd.loaderってあるけどあれなんなの? 使って大丈夫なの?
>>388 今見てみたら…
Windowsの部分は、Ansi系APIつかってる (Unicode文字を含んだPATHからは読み込めない)
しかもUTF-8←→Ansi変換が全くされてない (ノ∀`)アチャー
これだから外人は
ウォルター「え・・・」
dmdでコンパイルしようとしたら、
OPTLINKのエラー(Error 42:Symbol Undefined)が大量に出てきた
visualC#を直前に入れていたので、C#アンインストールしても、
dmd入れなおしても直んないんだけど、どうすればいい?
以下エラー内容の最初の方
OPTLINK (R) for Win32 Release 8.00.12
Copyright (C) Digital Mars 1989-2010 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html OPTLINK : Warning 23: No Stack
test.obj(test)
Error 42: Symbol Undefined _D3std5stdio4File6__dtorMFZv
test.obj(test)
Error 42: Symbol Undefined __d_local_unwind2
test.obj(test)
詳細書くの忘れてた windows7 Ultimate 64bit版で起きた現象です
main() が無い
396 :
392 :2011/11/07(月) 17:24:59.79
main()は書いてる。
dmdをinstallerで入れなおしたらエラーが下に変わった
(エラー内容抜粋)
OPTLINK (R) for Win32 Release 8.00.12
Copyright (C) Digital Mars 1989-2010 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html C:\D\dmd2\windows\bin\..\lib\phobos.lib(dmain2)
Error 42: Symbol Undefined _WideCharToMultiByte@32
C:\D\dmd2\windows\bin\..\lib\phobos.lib(dmain2)
Error 42: Symbol Undefined _LocalFree@4
環境変数LIBがあやしい
LIBってsc.iniで上書きされなかったっけ。 dmd入れ直してるならシロの気もするけど。
Windows 64bit って動いてたっけ?
win7 premiumだけど普通にコンパイルもリンクもexeそのものも動いてるよ 64bitのexeファイルが生成されてるわけじゃないけど
コンパイルオプションで 64指定しなきゃいいのか なるほど、思い出した
402 :
sage :2011/11/08(火) 03:20:18.41
Windowsで生成されるコードは常に32bitコードだよ 実行したプロセスをタスクマネージャで確認すれば判る
403 :
デフォルトの名無しさん :2011/11/08(火) 04:46:18.03
Windowsバイナリ生成に関して、 64bit版生成オプションは 存在してません。(キッパリ
std.container.RedBlackTreeを使っていて、 「A以上B未満」な要素を列挙したいんですけどなんかうまい方法ありますか? upperBoundとlowerBoundの両方を適用できたら楽だったんですが
もうやだこのOPTLINK…
std.containerの中身はtakeだのwalkなんとかだの!魔界か!
BufferedFileにSJISテキストかませると死ぬのどうにかなりませんか・・・
http://ideone.com/kdNYw こんな感じにforeachループ内で各ループのスコープ時の変数を
それぞれdelegateに渡したいんだけど、結果が全てループの最後の
時のもので処理されてしまうのです。何か良い方法ありますか。
Javaのfinal的なものが必要?
なるほど、bindでいけるんですね。 ありがとうございます。
じゃない、引数で生成時に渡してやればいいんですね。
jsでよく見るパターン
JavaScriptの問題点を前向きにあげてけ new演算子がキモい
about D programing language only javascript shit
誤爆しました
go back
Fuck'in Javs
今年後半に入ってから随分更新が静かだと思ってたけど64bit版開発してたのかよ。 しかもD1のも 普及に向けて本腰を入れ始めたか
Deimosには死ぬほど期待している
いや、だからioどうするんだよw
>>418 その情報を知った場所を教えてくれないかい
D関連ページを www.digitalmars.com から d-programming-language.org へ引越ししてるみたいだね
URLのリダイレクトが設定されて
>>159 が解消される
英語わかんない僕はどうすればいいですか><
つExcite翻訳 つGoogle翻訳
英語と米語とC語をまずマスターしろ それからD語
英語圏は滅ぶから日本語だけ覚えとけば問題ない
つ 日本語プログラム言語「なでしこ」
滅ぶとして、でも日本のほうが滅ぶの早そう
431 :
デフォルトの名無しさん :2011/11/15(火) 09:28:26.93
全ての起源である韓国語が一番無難じゃないかな
韓国が起源ニダ
もうやだoptlink 別のリンカ使いたい
omf に対応したリンカはなかなか無いなー 誰かOpen Watcom C でなんとかできる猛者はいないか
omf捨ててcoffになって欲しい
GDCいやなんでもない 結局「コンパイルが速い」(キリッ とか言ってる裏でその辺が犠牲になってるんだよな
Windowsユーザに逃げ場なし
悪いことしてるわけじゃないんだ 逃げずに堂々としてればどうとでもなる
堂々としてたらサービス残業代不払いでも問題ないって言うのか?
おかしなことを言うやつだな 不払いで良いからサービス残業でしょう?
いや、うぉるたんにギャラを出しましょうって話しだろ
いまだにDigital Marsがどんな組織なのかわからん
解説キボンヌ
444 :
デフォルトの名無しさん :2011/11/19(土) 16:31:22.61
え?
同人サークルかなんかじゃないの?
税金対策の個人企業で たまにパッケージングのアルバイトが呼ばれる、と妄想
何かつくろうよ
何を作るか決まったら起こしてくれ
新しいリンカ
Dのあのマスコットがカンフーアクションするゲーム
win用のリンカとデバッガを作り直して 64bit対応とともに玉砕しようぜ
455 :
デフォルトの名無しさん :2011/11/24(木) 21:18:31.16
lua組み込みたいんだけどはやりのバインダとかある? 環境はwin32
意外と最近まで生きてるのな
LuaDってのもあるが前に使った時は使い物にならん感じだった。 今は知らぬ。
460 :
デフォルトの名無しさん :2011/11/25(金) 03:26:35.41
LuaLibを組みこんだ。 今のところ動いている…ぽい。
今困っているという訳ではないが DDOCの仕組みって 環境依存で出力されなくなる関数( version (Windows)とか ) をちゃんと処理できるんだっけ?
やったことない
eclipseにプラグインのDDTをいれてやってるんだが、急にoptlinkが出るようになったorz それまでコンパイルできてたプロジェクトもexe吐けなくなったし コンソールから打ってもdmdなんてないぞって怒られるし、敷居高すぎだろ・・・
うむ、そこは閾が高いというべきだな
>急にoptlinkが出るようになったorz optlinkが出たんじゃどうしようもねぇな…
TIOBE のシェアはやはり下降トレンドだな
ちょっとしたプログラムを2.055を使って作っててバイナリサイズが980kbだったんだけど 2.056に変えたら一気に2289kbになった Dってこういうものなんかー
なんだなんだstd.datetimeをリンクでもしたのか
changelog 2.056が見れなくなってる・・・おいおい
DでWindowsのShellExtensionは作れますか?
作れます
おい、phobosのコミッターに坂本真綾好きがいるぞ・・・
それジョナさんだよ
std.datetimeってどうしてあんなに巨大になったんですか?
2.056のバイナリがでかくなるのは phobosが原因なのは分かってる
std.windows.registory の *W 関数への対応
これがあやしい
>>476 機能ごとに分割してくれと散々言われてるけど押し切れないらしい
よくみてないけど、あのサイズなら、汎用化して別のライブラリとして切り出せる要素があるんじゃないかな。
サイズはともかくdur!"seconds"みたいな書き方が微妙… 文字列にすることになんかメリットあんの?
定義する必要のない識別子(rubyで言うところのシンボル)の代わり
それって完全にDDoc殺してるよね
DDoc殺すってどういうことですか?
DDoc殺しよりIDE殺しのが気になる
DDocにそういう場合の専用の書き方つけたら IDEがそれを使えるんじゃね?
datetimeじゃなくて core.time 由来だな alias 切るくらいすればいいのに
486 :
デフォルトの名無しさん :2011/12/02(金) 23:17:37.95
newで確保できる最大のメモリサイズってどこで定義されてんの。 200Mほどnewしたらハングするんだけど。
GC に時間がかかってるというオチでは?
なんだMacか。どうでもいい。 ・・・・あれ?!
まるで日本人が書いたような英語だな
範囲比較でもジャンプテーブルでもなく 全部個別で比較してんのかw
Cのtemplateを嗤えない
case long.min: .. case long.max: とか書くなよ!絶対書くなよ!
>>495 くらえ!
mixin(import("case_range_bomb"));
497 :
デフォルトの名無しさん :2011/12/03(土) 15:45:52.77
>>495 弾かれるけどな
Error: had 18446744073709551615 cases which is more than 256 cases in case range
phobosって-property付きでコンパイルできるようになってるの?
やってないけどDなら出来ないんじゃない? 気になったんだけど@propertyって今後無印の関数を()無しで呼び出せなくなるフラグ?
そうでしょ
えっ newするときカッコなんか書きたくない!!
504 :
デフォルトの名無しさん :2011/12/05(月) 01:21:26.57
newは変わらんだろC++的に考えて
C++は括弧の有無で結果が変わるからなあ
@propertyついてるコンストラクタは見かける でもなんというかぞっとしないな
どっちだ? ぞっとする/ぞっとしない
ぞっとする:恐ろしい、寒いetcぞっとしない:面白くない、つまらない、感心しない、興味・関心がわかないetc 意味がちがう。
でもこういうのって「ぞっとする」がどう見ても通じない場面じゃないと通じないよね Dは普通にぞっとさせてくるし
本とかあまり読まない人には通じないのかな? まあ、否定形なのに対称をなしてないからわかりにくいのは確かだけど。
ぞっとしない の反対は ぞくっとする なのかな
「鳥肌が立つ」が寒さと恐怖・嫌悪と興奮・感動の両方を表わすという問題だわな 英語でもgoose bumps, chill, terrible/terrificが寒さ・恐怖・興奮の多義語だし 日本語の歴史中でも中世の「すごし」が寒いと嫌悪と興奮の多義語。 ぞっとする、ぞくっとするも同じカテゴリだわな
ここではDの言葉で話せ
公式ページ更新されたっぽいけど Change Logやっぱり見れねー なにしとん
まるで、 日本語 Part28 みたいだな。
517 :
デフォルトの名無しさん :2011/12/07(水) 13:53:05.52
>>516 で知ったけどVisualDにC++ Conversion Wizardなんて出来てんじゃん
・・・まあ気休め程度かな
数年前に作った50行くらいのプログラム修正して2.055でコンパイルしたら 本当に200KB -> 1MBになったwww ぱねぇwww
2.056はどや?
2MBくらいになりそう
import std.stdio; void main() { write("Hello World.\n"); } 2.056で HelloWorld は1.04MB
このサイズは一体何に使われているの?
linux 32 bitで % dmd | head -1 DMD32 D Compiler v2.056 % dmd -ofmain -O -release main.d % strip main % ls -lh main -rwxrwxr-x 1 c c 189K 2011-12-07 23:19 main* 200kBくらい?
stripしちゃらめえええ
extern (C) void printf(in char* format, ...); void main() { printf("Hello World.\n"); } 2.056でこれだと 154kB phobosはかさばるなぁ
Windowsバイナリcygwinでstrip出来ないんだけどみんなそう?
GCついて200KBとかならまだ納得いったがさすがにこれは無いわ
よくわかんないけどこれって Phobos がテンプレート使いすぎてこうなったりしてんの? 薄いテンプレートイディオムで書き直せば改善されたりしないかな。 std.datetime のコード量もカオスだし・・・。
すまん
>>518 なんだが、2.056だったわ
少し前のレス読むと2.055→2.056で急に増えたっぽい
何があったんだろう
HelloWorld1MBワロタ Dは飽きさせないな
> HelloWorld 1MB 2.054 -> 2.055 で std.uniに巨大なテーブルが追加されている。 おそらくwritelnがこれを取り込むのでexeサイズが大きくなっている
>ファイルからでデータを読んでbyteの配列に格納しようとしたら、 メガバイト級のコードが読み込まれた、 という事態は避けたいものです ^^;
マクロまだー?
D1が消えます
2.057出たね
537 :
デフォルトの名無しさん :2011/12/14(水) 18:55:11.51
enumでinit出来たのか・・・
例のswitchのはまだまだか
単にint型のenumを作って 列挙子initをint.initで定義してるだけだな まあ確かにできるけどw
enumで思い出したけど どうせならenumの全メンバをforeachで回させてくんないかな valuesみたいなプロパティがあればいいんだが
>> 540 std.traitsにEnumMembersがある
543 :
デフォルトの名無しさん :2011/12/14(水) 20:51:37.93
>std.regex.replaceに破壊的変更 Yeeeeeeeeeeeeeeeeeeeeeeeeeeeeaaaaaaaahhhhhhhhhhhhhhh!!!!!!
マゾが多いなw
Change LogでBreaking changeが赤文字になってて吹いた
あれ? std.intrinsic どこ行った・・・?
さよならTango
そろそろD2を固定してもいいんじゃないか
マゾが多いな
D3はまだか…
>>547 モジュールとしてはすでにdeprecated, 置き換え先はcore.bitop
Documentからリンクが消えたのは、たぶん間違えて消しちゃったんじゃないかな
WindowsAPIのHANDLEはaliasとenum、どちらがいいんだろうか
intptr_t的なものがいいんじゃね?
alias intptr_t HANDLE; かな、普通に考えると
配列を戻り値にする関数で最後にuniqを使いたいんだけど int[] func() { int[] values; // ... return uniq(values); } uniqの戻り値って配列じゃないんだよな というかrange絡みの関数は全体的にそんな感じだ どうすればいいのやら
uniq(values); return values;
だめだった
std.array.array
そっちか!Thx
@safe pure nothrowたん・・・(*´Д`*)ハァハァ
@政府 うあ 野田たん・・・(><)
@trustedをつけてまわるだけの簡単なおしごと
なんでAppenderはpureじゃないの
throwする可能性があるからじゃ?
aaA見たけどわかんね
>>567 おてんとうさまがゆるしても
おれがゆるさねぇ
あれ?pureとnothrowは直交してないのか?
>>567 ある意味正しい。
> hoge["fuga"] = hoge.length
左辺の評価でまずkey="fuga"のエントリが確保され、この時点でhoge.length==1になる
その後確保されたエントリにhoge.lengthの評価結果(==1)が設定される。
*(p++) = *(p++)とかと同じようなもの
>>565 GC関連の関数を内部で直接呼んでいるため。
言語としてはnew式はpure扱いだが、ランタイムのGC関数がpureであるべきかは
newsgroup上の議論でも明確な結論が出てなかったと思う。
575 :
デフォルトの名無しさん :2011/12/21(水) 00:17:01.32
直感的にはhoge.set("fuga", hoge.length);みたいな評価順の方が嬉しいかな
アセンブリ想像出来てれば直感的だし今のでいいと思うけど
右辺で例外が起きたらと考えると、怖いな
opIndexAssign( "fuga", hoge.length ) こんなオーバーロードないんだっけ?
D1系のアップデート見てて思ったんだけど CTFEできる範囲って仕様で明確化されてるの? 仕様に沿ったコンパイラでCEFEのせいで コンパイルできる事とできない事があるってのはとても困る気がする
pureなものじゃない? 今@pure付けられる範囲をどんどん広くしていってる気がする
@safeならCTFEできる、ってのもあったような。
ぶっちゃけ、大抵のプログラムは、C#なりPythonなりHaskellなりGoなりの高級言語を使えばよくて、 わざわざ「Cに代わる低級言語」を持ち出す必要はない 一方で、本当にC言語に取って代わろうとするなら、 高級言語を持ち出せない、プアな環境で使えないといけない ・ポインタ演算は手放せない ・GCは使えない ・ポリモーフィズムも使えない ・テンプレートも容量を食い過ぎる ・正規表現を実行時にコンパイルするのは贅沢すぎる ・標準ライブラリーが充実させても意味が無い ・標準でないアーキテクチャをサポートしなければならない それなら、C言語で十分じゃない? 文字列型?ハッシュマップ?サードパーティ製のを使えばいい ドキュメント自動生成なら、言語仕様を変更しなくても、Pythonとかでツールを作ればいい Cのシンタックスがキモいとか、Lisp風マクロとかが欲しいと言うのなら、 JavaScriptに対するCoffeeScriptみたいな物を作ればいい
哀れなD使い達を説得しにきたの?
あちこち手を伸ばしすぎて かつて売りにしてた機能まで潰しまくる迷走ぶりについては認める
複素数…
typedefってなんで消えたの? あの超シンプルに型を作れるところが気に入ってたんだけど
基本的にマクロみたいな機能は無駄です
それってaliasのこと?
alias は便利だけど危うさが漂う もうちっと機能を狭めてもいい
>>590 そんなんじゃ「そうじゃねーよ俺は便利に使ってんだよ」と反論できちまう
せめて「typedefあるとコンパイラの実装が超大変になるんだよ、わかれよ」くらい言ってほしい
strong typedefはまともにやるとめんどくさいからな。 t f(t, t)って関数があってtからuを新たに作ったときに、t f(u, t)として使えるのが正しいのか t f(u, u)が正しいのかu f(u, u)が正しいのか。
ユーザ定義リテラルがあれば 複素数をビルトイン型にしなくてもいいような気もする (パフォーマンス的には分からんが)
>>594 やっと納得した
uがどこまでtか微妙なのが仕様的に面倒なのね
あれ、でもenum…
>>595 複素数がライブラリに移動したときにその話はあった
結論から言うとcomplex型とimaginary型を併用することでパフォーマンス的にも問題なく解消する
ただし記述が面倒だからユーザー定義リテラルが必須
ユーザー定義リテラルを入れたいから複素数リテラルをなくしたのか? ユーザー定義リテラルを入れなくても、複素数リテラルがあれば、複素数についてのパフォーマンスは元々解決されていたんでしょう。 なくす必要性がまだ見えないんだよね
コンパイラ組みこみじゃなく、 ライブラリの存在を前提としたシンタックスシュガー化するということかと。 Dならstring→immutable char[]が似ているし、 C#のstringはSystem.Stringの別名だ(と思う)し。
ユーザー定義リテラルって何ぞ・・・? ガクガクガタガタ
C99が複素数を言語組み込み、C++が複素数をライブラリ提供してるけど gccはバイナリ互換性を持たせるために、「コイツは内部的に複素数だ」ってpragma用意してるよね。 Dの複素数もC99の複素数とバイナリ互換性を持ってるはずだが、ライブラリ版はどうなってるんだろう。
>>599 そうするのはなぜだか知ってますか?
ユーザー定義リテラルを導入するならば複素数だけ優遇する必要がないから?
octal!100はどうするんだよ…。 octだったかな
dlang.org てのがまた出来てる こっちに移るんかな
当面の間はミラーリングして様子見じゃないの
const(char[])がconst(char)[]に暗黙変換されるようになったんだってな。なんか不具合出ないのかな
仕様も見ずに言うけどref引数だと変換されないんだよね?
ちょっと生理させてくれ const(char)[]:中身を書き換えられない配列 const(char[]):?? Cのchar a const[] ?? いやそれじゃchar a[]と同じか
609 :
デフォルトの名無しさん :2011/12/26(月) 23:07:10.07
const(char[]) a, b; a = b; が出来ないんじゃなかった?
・・・えっち
月桂冠
厶板ではここが一番落ち着く
わかるわ 俺もD言語に全く興味ないのに覗いてるしな
あれ、俺がいる
逃げない奴はよく訓練されたD言語erだ
D言語が落ち着くまで待ち続けるぜ
UFCSとラムダ式が入るらしい まだまだ若者には負けんよ
UFCSって何?
Windows版64bit対応くらいしてくり
Universal Fire Contol System
これで敵軍も拾った武器で戦えるようになるね! っておい
2.057でもHello, World1MBのまま?
import std.stdio; void main() { writeln("hello, world."); } ↑に -O -relese -inline 付けて 933404byte=911.5kbyteだった
クソだな
別にでかくても実害ないとは思ってるが、小さいバイナリ好きなのもちょっとわかる
>>625 リリース直後にそういう話が出てたから対応済みかと思ってたわ
2.057 に移行する意欲が減退・・・冬眠でもするか
サイズってそんなに重要? 配布するにしても7zとか使えば誤差みたいなもんだと思うんだけどなあ
その辺はPyの文法が許せるかとか MyClassName instance = new MyClassName(); の冗長性が許せるかとか そういうレベルの話だと思う。 気にする人もいればそうでない人もいる。
小さいプログラムだと結構嫌だな、サイズでかいの まあそういうのはDなんか使わないでスクリプト言語でも使ってろって話なんだけど
公開したり、他の人へあげるの、躊躇するよね 大した機能もないのに1MBだと、何か仕込んでるじゃないと勘ぐられそうでw
upx使うと147kbまでがっつりと減った。 こっちはこっちで抵抗あるとは思うが、いちおう。 しかし900kbってなんかDelphiを思わせるサイズだ。 Dってアルファベットになんか呪いでもあるのかとw
Deburin
そのファイルサイズ、大きいように見えるでしょ? でも、実際にはOSのシステムファイルと共通してる部分が多いから、実際にはそんなにサイズは食ってないんです。
いや表示されてるだけサイズ食ってるだろw ゼロパディングされてるわけでもあるまいし
実際に900KB食ってるだろ
これが本当のエクササイズ
upx使うと減るってことは冗長な記述が多いってことか……
Dは大らかな人達が開発してるんだよ ファイルサイズくらいどうってことないよ
649 デフォルトの名無しさん [sage] 2011/12/29(木) 14:50:37.28 ID: Be:
学生プログラマ日本一決定戦(予選は社会人も参加可)
ttp://codevs.jp/howto.html 現在予選開催中
応募締切 2012.1.6 12:00
おもしろいことやっているじゃん。誰か今から参加しろよ。
>>640 盛り上がってないからって
あちこちで宣伝すんなよ
>>635 バイナリエディタでexe見てみたら、ゼロばかり並んでるw
Watch out, or you may attract a thunderbolt!!
久々にJavaScriptで書いてみたが、コンパイル時型チェックがないのは面倒ではあるな 大規模プログラミングでこれは使えないだろうとは思った。
だが、それがいい
近頃のDはコンパイラアップデートしても割とすぐコンパイルできる代わりに 端々で以前と違う挙動をしてアプリをバグらせてくれる これはいいものだ
年内今日明日で何か作る
import std.xml; import std.stdio; void main() { auto doc = new Document(new Tag("root")); auto e = new Element("elem"); e.tag.attr["attr"] = `"quot"`; // '"'入りの文字列 doc ~= e; writeln(std.string.join(doc.pretty(1),"\n")); } $ dmd -run x.d <root> <elem attr=""quot"" /> </root> 以前std.xmlで属性がエスケープされないって話があって、確か直ったはずなんだけど どうして戻ってるの…
std.xmlってなくなるんじゃないの?
Cのlongと同じ型!みたいなエイリアスが詰まったモジュールとかありませんか?
>>650 無くなるのはいいけどいつまで経っても無くならないなぁ
代替手段ができるまではちゃんとメンテしてほしす
>>651 Cはプリミティブ型のバイト数決まってないから無理
>>653 だからこそdmcの型と対応するaliasが欲しいって話じゃね?
version か何かで分岐すれば良い
それをユーザ側でいちいち用意するのは馬鹿らしいってことじゃないの? intptr_tはあるけどな
使う人いるのか、いないだろうな 他のライブラリポーティングするにしても大抵Uint8とかGLintみたいにそのライブラリ固有で型定義してるし
typedef long HogeLibInteger; D語に訳すにはどうすればいいんでしょうか
alias long HogeLibInteger;
typedefがオワコンになった今、今更キーワードaliasをtypedefに戻せない辺りに哀愁を感じる
3.0に期待
@strong alias こんな感じで
どっちでもいいけどななー typedefに戻すメリットもたいしたものないし
typedefってJavaのgotoみたいな永久欠番になるのかな
3.0開発し始めたら アンドレイ「いいこと考えた。1行で完全に新しい型を定義できる機能とか新しくね?」 ウォルたん「いいね!なぜかtypedefってキーワードが空いてるからそれ使おう」 ってなるよ
typedefの代わりに、structで包めばいいかな
別にstrong typedefは新しい機能でもなんでもないぞ。C言語由来の型システムとはなじまないってだけで。
リファクタリング...ひらめき...実装...リリース!
灰になった!
代替手段ができるまではメンテして欲しいよな
代替手段ができるできる詐欺である可能性もあるからな そろそろD言語も元年を標榜してみる?
-propertyへの対応で元日終わりそう
あれ? int func1() { return 1; } @property int func2() { return 1; } void func3(int i) { } @property void func4(int i) { } void main() { int i; // i = func1; // -propertyだとコンパイルエラー i = func2; func3 = i; // コンパイルできる… func4 = i; } これってそういう仕様なの?
Dって引数以外でref変数あるの?
>>674 関数の返り値はrefにできる。
変数自体には指定できないけど、ポインタやクラスで代替可能。
ありがとうございます。おとなしくポインタ使います
677 :
デフォルトの名無しさん :2012/01/02(月) 11:24:20.97
ポインヨだろ 間違えるな
ポインティーヌ
>>649 ざっとstd.xmlのコード見てみたが、
> e.tag.attr["attr"] = `"quot"`; // '"'入りの文字列
はTagクラスのpublicなattrフィールド(連想配列)に直接値を設定しているから、
encode/decodeとか何も動かない。
つまりそんな機能は元から無い様に見える。
Tagクラスの toNonEndString のところ decodeじゃなくて、encodeにすべきなんじゃないのか?
>>681 ああ、そっち(出力)の方か。確かにそこをencodeにすると、
outputがエンコードされるようになるな。
誰かbugzillaにレポート投げてくれればfixされるかも。
>>679 やっぱバグなのね。ありがと
つまり次のバージョンでもう半分の-property地獄を体験することになるわけだな
これだからDはやめらんねぇ!
std.xml Commentクラスのコンストラクタ内 × if (content == "-" || content.indexOf("==") != -1) ○ if (content == "-" || content.indexOf("--") != -1)
おお やっぱ消えると分かっていてもメンテしてくれないと困るな
あるいはguthubで特定のソースに対するpatchを簡単に絞り込めないのかな
ネスト関数に事前条件無しで事後条件書くと構文エラーになるけど、 事前条件有りで事後条件書くとコンパイル通って動くんだけど、なんか理由があるのかな?
>>687 手元で試したら全部通ったけど、どんなコード書いたの?
>>688 void main()
{
string foo()
//in
//{
//}
out (result)
{
assert(result.length == 0);
}
body
{
return null;
}
}
__EOF__
このままコンパイルしようとすると構文エラーで通らない。コメントアウトすると通る。
ちなみにコンパイラはDMD64(v2.057)をUbuntu向けパッケージからインストールしたもの。
エラーメッセージはこんな感じ d.d(7): found 'foo' when expecting ';' following statement d.d(7): expression expected, not ')' d.d(7): found 'out' when expecting ')' d.d(8): found '{' when expecting ';' following statement d.d(11): Declaration expected, not 'body' d.d(14): unrecognized declaration
それ多分ウォルターの自作自演だから
>>689 パーザーの問題。DMDのパーザーは手書きだからこういう抜けが未だにある。
in/outなしでbodyだけ付けるのも同じようにrejectされるな。
原因は判ったのでパッチを書いておくが、bugzillaはどうする?
自分で投げてみるいいチャンスかも。
ちなみにテストコードはこれ void main() { size_t foo() in{} out{} body{ return 0; } // OK size_t bar() /*in{}*/ out{} body{ return 0; } // NG1 size_t baz() /*in{} out{}*/ body{ return 0; } // NG2 }
あ、仮引数の省略ってできたっけ?
あと使わない実引数の省略もか
>>694 仮引数の省略は不可。
一応、可変個引数で似たようなことは出来るが、余計めんどくさい・・・
>>695 デフォルト引数が設定されている引数については省略可。
いやそうでなくて、変数名の省略
変数名省略できる言語なんかあるのか?
timerStart( 1000, (Timer,EventArgs){ doSomeThing(); } ); こういうのが書ければいいってことでしょ
長い変数名を書くのが面倒で、短い変数名にしたいって事なら、alias使えばおk。 クラスや構造体の参照を簡略化したいなら、with文を使うのもあり。 型名を書くのを省略したいという事なら、残念ながらDでは出来ません。 関数オブジェクトを簡単に作りたいなら、関数リテラルを使えばおk。 型が違うだけで、処理の内容が同じ関数を書くのが嫌という話なら、テンプレートを使えばおk
>>697 void foo(int, long){ ... }
みたいに、通常の関数で型だけを書いて仮引数名を省略することは可能。
これはC言語系列のsyntaxを受け継いでいる。
>>699 2.058からは関数リテラルで仮引数名の省略は出来なくなる。なぜなら
関数リテラルのパラメータ型推論・funciton/delegate推論が入ったため、
(a, b){ doSomethig(); }
で、a,bが型名か仮引数名かパース時点では判明しないため。
→2.057までは型名として、2.058以降は仮引数名として扱われるようになる
>>700 上に書いたとおり、関数リテラル限定で型名を書くのを省略できるようになる。
>>702 上:コールバック関数やデリゲートに渡すやつで
「関数の型(引数リスト)が決められているけど
引数は結局使われない」というケース。
>>699 はその例
下:2.058(次期リリース)以降の話。
>>702 C言語やってないだろ!引数を参照しないとコンパイル時に警告でるからそれ対策で型名だけにするってよくやるよ
はやっ どうなってんだ
はやすぎる(笑)
ム板では結局ここが一番落ち着く
上に同じこと書いたのを完全に忘れていた もう駄目かな…
・基本的にWalterは毎日commitを行っている ・PullRequestも最低1つぐらいは一日にマージされる ・Parser関係のfixは理解しやすい&影響範囲も限られる →変更の規模としては小さい部類なので比較的早くにマージされる まあ、パッチの規模がでかいと逆に半年ぐらい放置状態になるんだけど。
他の言語と違ってここのはコンパイラの修正がユーザーに近い時点で行われてるから 根強いファンが絶えないのも頷けるなw
dwt2もgithubに移行か
dwt2 もろくにメンテされてなかったけど 移行してマシになるの?
一応メンテはされてるんだけど オフィシャルへの反映が遅い…
ハードウェアがより高性能に進化、ソフトウェアがより多機能に進化、 それに命令や操作をする人間は進化するどころか文化や人格を決め付けや思い込みで否定する争いを始めた
DはマルチメディアやGUI関連に弱すぎる
質問です。 std.randomのuniformのboundariesを指定したいときはどうすればよいのでしょうか。
uniform!("[]")(0.0, 1.0, generator);
なんだその指定方法(笑)
724 :
デフォルトの名無しさん :2012/01/09(月) 11:27:03.86
今はじめて知ったから好きも嫌いもない
知ってたけど話題にするほどいいバンドじゃないからあえて書き込まなかったのに…
727 :
デフォルトの名無しさん :2012/01/10(火) 06:38:59.55
すみません。教えてください。 可変個関数引数に、ポインタを指定するにはどうすれば良いですか? void die( ... ) { real* foo = cast( real* )_argptr; *foo = 0.0; } void main() { real evil = 666.0; die( &evil ); } こんな感じなのですが、上手く渡せません。 すいません。よろしくお願いします。
import core.vararg; ... real* foo = va_arg!( real* )( _argptr ); ... phobos のソースを _argptr でgrepした (w
それポインタ?
Internal error: ..\ztc\cgcs.c 354 ってなんぞ?
自己解決しますた 配列を返す関数を呼んでその戻り値に直接[]で添え字指定してたのが問題のようですた
Deimos楽しそうだね
なにせDでアプリ書くにはCのライブラリが必sゲルンゲフン
githubから消えてるんだけどdeimosってどこにあるんだ あとVisualDがインテリセンス的なもの載せてさらに凄くなってやがる
Dもrubyみたいにブラッシュアップしてくれる中学生(ただし美少女に限る)どこかにいないかな
スタックやキューなどのデータ構造のコレといったライブラリはありますか? なければ自分で作るのでいいんですが、一応……。
dcollectionsなのかなあ、コレというのは 個人的には配列が強力すぎて必要性を感じない
bool foo(T)(T[] a ...){ return true; } void main(){ assert(foo(1,1,1,1,1,1));//OK assert(foo("abc","abc","abc","abc"));//コンパイルエラー } これをコンパイルしようとしたら test.d(6): Error: expected 1 function arguments, not 4 って怒られる
foo(1,1,1,1,1,1); のほうは実は foo([1,1,1,1,1,1]); でも呼び出せる。 2番目のもこれだと解釈されてる
import std.stdio; bool foo(T)(T[] a ...){ foreach(i; a) write(i); return true; } void main(){ foo([1,2,3]); // 出力: 123 } SomeType[] a ... という可変個引数の場合、可変部分ナシで配列を一つ渡すことでaに直接配列を渡せる。 だから、文字列(char[])に限らずfooに最初配列を渡した時点でaに対して配列を渡したことになって、複数渡すとエラーになる。 配列自体を可変個引数として渡したい場合は foo!(string)("abc", "abc", "abc") foo!(int[])([1,2,3], [4,5,6]) みたいにTが何であるか教えてやらないといけない。
いやまあ、引数が配列複数な時点でコンパイラがTを配列として扱うべきな気もするけど……
std.container.Array!(char) str; が通らないんですけどどうすればいいんでしょう ちょっとgcから切り離されたstringが欲しかっただけなんですけど
>>745 malloc/freeを直接つかうとか
@property void push(int[] arr, int val) { arr ~= val; } void main() { int[] arr; arr.push = 42; } UFCSとか見てて、どうせだからこういうことしたくなるけど さすがに無茶だよなぁ
>>745 Array!(dchar) にしないとだめみたいだな
いいんだか、悪いんだか
interfaceにGUID付けられるようにならないかな
RTTIからGUID取れるようにしてObjectのQIだけですべてのパターンに対応できる感じで
まあDelphiのパクリなんだけど
ちなみにこんな感じでできたら最高
http://ideone.com/GspW0
昆布のtoってオブジェクトに対してかけるとobj.to!Tに転送されるんだね ソース見るまで気づかなかった
class A{ T to(T:string)(){ return ""; } } toStringより特殊化の方がいいってこと?
最近は T to(T)() if (is(T == string)) { のほうだな
to は双方向で toString は一方通行のイメージ
foreachでmixinって出来ない? foreachを展開してmixinしかないかな こんな感じにしたい int abc, def; foreach(s; ["abc", "def"]) writeln(mixin(s));
mixinの中身はコンパイル時に確定しないといけないから無理じゃないかな 今CTFEでループさせるなら再帰しか無いけどstatic foreachって入る予定あるの?
>>756 foreachをコンパイル時に回す(=展開する)なら、
配列ではなくタプルを渡すとうまく行く
import std.traits;
foreach(s;TypeTuple!("abc","def"))
writeln(mixin(s));
>>751-755 型Aのオブジェクトaから型Bへの変換を行わせたい時、std.conv.toは
1. a.opCast!B()
2. a.to!B() // deprecated
3. B(a) // Bはstruct
または new B(a) // Bはclass
を試そうとする。但し B==string の場合はa.toString()が優先される。
>>757-759 聞いてみるもんだなありがとう!
>>759 がまんまだったよ
でもstd.traitsじゃなくてstd.typetupleだった
>>759 おおすばらしい
この辺いつか文法的に整理されると信じてる
>>761 正直言ってTypeTupleという名前は混乱の元だと思ってる。
(型だけではなく式やシンボルも受け取れるので)
Seq!(...)より抽象的でいいと思うんだけどなあ
ところでRangeって便利ですか?
Ranger
便利さが実感できない
かゆいところに手が届かない
auto cap = std.regex.match( ... ).captures; cap.length == 0 と cap.empty の結果が違うのはなんでなん?
間違えた 前は cap.empty を見なくても length だけで行けてたのに、何で変えてしまったん?
違わないけどどういう時?
公式じゃないdflってドラッグドロップしたら落ちるバグって治ってますか
確かこのスレの人が直したはず
Application.autoCollect = false; 公式見解のこの方法じゃなくて?
>>769-771 auto cap = std.regex.match( ... ).captures;
if (cap.length == M+1) {
// マッチしたときの処理
// 2.057 だとマッチしなくても入ってくる
}
こんな風に書いてたのが全滅して泣いた
スコープの外に出てないローカルオブジェクトってスコープの終わりで自動的にGCとかされます?
いえーい!777ゲット!
oh…
すぐバグ修正されるのは素晴らしいね
if ( DialogResult.YES == msgBox( msg, caption, MsgBoxButtons.YES_NO), MsgBoxIcon.QUESTION ) doSomething();
しまった、オカルト板と間違えた
闇言語だからだいたいあってる
いつから出来なくなったん・・ auto f = FILE("test.txt", "w");
>>784 ついった見ててやっとわかったけど `, MsgBoxIcon.QUESTION` の位置を間違えてるせいで
毎回doSomething()が実行されてナニコレ、って言いたかったんだな
auto f = File("test.txt", "w");
Add new => lambda syntax. なにこれ つーかアップデートのたびBug直されまくってるのな
dmdやphobosのバグに対処するのは楽しいがoptlinkだけはダメだ 血管が切れそうになる
ラムダ式って => になんの? 既存の演算子を使い回すのやめてくれよ
既存? Dの外の話でもしてるのか?
新しい文法だそうで =>これまで使われてたか?
未使用
Haskell とかで別の意味の演算子として使われてるとかそういう話か?
C#とかでも=>だから合わせた方がいいんだろな
久しぶりにD言語スレ見てみたが相変わらず破壊的変更はあるようで Rangeについて詳しい資料公式に転がってないか?
class A{void f(){}} class B: A{override void f(){}} のとき、Bを継承したクラスがfをオーバーライドしてるか判断する方法ってありますか?
Bをさらに継承したクラスCがあった場合 (&B.f is &C.f) で判断できる これがtrueの場合オーバーライドしていない
import std.stdio; class A{void f(){}} class B:A { void p(B b){ if(&b.f is &f){ writeln("---"); }else{ writeln("override!"); } } override void f(){} } class C:B{} class D:C{override void f(){}} void main() { auto b = new B; b.p(new C); b.p(new D); } 実行結果 override! override! なぜ・・・orz
auto v1 = &b.f; auto v2 = &f; (v1.funcptr is v2.funcptr) これで判断できました。ありがとうございます。
scopedってもう使ってもいい系?
なんか悪い噂とかあったっけ?
scope記憶クラスの代用品として仮実装中ってどっかで見たような記憶があるようなないような
class A { } void main() { Object[] a = new A[2]; } これ暗黙変換できなくなったの?
それ元からできないと思う
>>810 それを許すと以下のような問題が起きる
class A { }
class C { }
void main() {
Object[] a = new A[2];
a[0] = new C; // Aしか入らない所にCを入れている
}
いやその理屈はおかしい
Javaでもできたお
動的に静的の問題じゃないの?
>>810 >Object[] a = new A[2];
これと
Object[] a = [ new A(), new A() ];
これは違うよね。上は暗黙変換出来なくていいと思う。
A[2] b; pragma(msg, typeof(new A[2])); pragma(msg, typeof( [new A(),new A()] )); pragma(msg, typeof(b)); A[] A[] A[2u]
>>817 ほお…知らなかった
Dの静的配列と動的配列の値渡し/参照渡しとかの仕様が頭の中でこんがらがる
前から気になってたんだけど static if(...) { } else static if(...) { ← ここのstaticってなんで必要なの? }
static if(...) { } else { static if(...) { ... } } の略だから
>>817 816で言いたかったのは、動的か静的かではなく、
>Object[] a = new A[2];
は配列長を確保してるだけなので必要な場面が思いつかない。
暗黙変換できなくていいと思う。
でも810がやりたかったのはエスパーすると
Object[] a = [ new A(), new A() ];
こっちじゃね?なら暗黙変換できるよーと言う事です。
new A[2];の結果は各要素(参照)がnullである長さ2の動的配列ってことか new A[2];はnew A[](2);に読み替えられてるのかな
823 :
821 :2012/02/02(木) 22:02:22.30
あ、「先祖クラスの配列へのcastは例外的に暗黙でいいやん」と言う話だったならたしかにそう思います。
>>822 Error: cannot implicitly convert expression (new A[](2u)) of type A[] to Object[]
と出てるからまさにその通りだと思う。
>>822 C++感覚で new A[2] と書くとドツボにはまりそう。
静的配列 サイズがコンパイル時に決定 値渡し、返り値にも使える 静的配列の代入は複製 動的配列はサイズが同じなら代入できる、違えば例外、この場合も複製されるはず(うろ覚え) 動的配列 参照型 int[]にint[10]とかを代入できるはずだがどうなるかは忘れた
>>826 int[10] a;
int[] b;
b = a; // 複製されない
assert( b.ptr == a.ptr );
b = a.dup; // 複製される
assert( b.ptr != a.ptr );
b[] = a; // 複製される
assert( b.ptr != a.ptr );
$ type reg.d import std.regex; import std.stdio; void main() { writeln(match("他"d, regex("バ"d))); writeln(match("他"d, regex("ビ"d))); writeln(match("他"d, regex("ブ"d))); } $ dmd -run reg.d [] [] core.exception.AssertError@D:\devtools\dlang\dmd2\windows\bin\..\..\src\phobos\std\utf.d(800): Attempted to decode past the end of a string 偶然踏んでしまった
056->057間のstd.regexの変更っぷりに吹いた
typeidと.classinfoがあるのは歴史的な理由?便利さから?
>>810 公式ドキュメントのArraysに暗黙変換できるって書いてんだが…
きっと夢でも見たんだろう
2.057ではねられるようになって首を傾げてたんだぜ やっぱり regression か
Arrayに関しては禁止するべきだと思うんだがな 動的配列に静的配列入れたときも破壊的変更するとき初めてコピーされるという奇妙な仕様になってるし明示的にdupとかキャストさせるべき
っCopy-On-Write
trunk のドキュメントをのぞいて見たらこうなってた。(´・ω・`) ショボーン ○ A[] -> const(Object)[] × A[] -> Object[]
あー、うーん、まあそうか…
なるほど、そうじゃないと auto a1 = new A[](10); Object[] a2 = a1; a2[0] = new Object; でバグっちゃうのか。 明示的に Object[] a2 = a1.dup; こうするのは今もできるってことね
そういやdupでimmutable剥がせる件ってどうなったんだろ
細かい仕様変更にはもうついていけないよう
dupはimmutableはがせるでしょ idupだとimmutableのまま
constとimmutableの違いがよく分からないよぅ
const: 不変値を関数間で共有 immutable: 不変値をスレッド間で共有
2.058ダウンロードどこでできるんですか!?
まだリリースされてない どうしてもさわってみたければ github から3点セットでDLしてビルドしる
>>844 間違ったこと教えちゃいかんよ・・・
const その参照から値は変えられないが、別の要因で変わることがある。
immutable いかなる要因でも値が変わらない。
ガンダムで例えると シールド付きがconstで フルアーマーがimmutableってことね この例えはとにかく、なるほど…勉強になりました。
constは引数変数向けの型ってイメージがあるな 引数と関わりのないconst変数なんて作らないよね?
クラスのフィールドでインスタンス初期化時に固定するものとかconstにする
それってimmutableでもいけるんじゃないの?
static thisでだとimmutable初期化できないのかーと思ったけどできるじゃん どういうことが言いたかったの?
下のコードをコンパイルするとdmdが落ちるんですが。 dmdのバージョンは2.057です。 template foo(T){ enum foo = __traits(hasMember,T,"sizeof"); } static assert(foo!(int)); //DMD Crash
久々にGUIライブラリを見て回った gtkD・wxD・DFL(fork)・DWT辺りは元気だけどQtDが死んでるなぁ どこか別の所で元気にやってるのかな?
>>856 trunk の最新ソースを落としてビルドしたら落ちなくなってた(WinXP 32)
>>858 では、2.058では解決されているのですね
ありがとうございます
明日は2.058リリースか 3.0とかどうなったんだろな
D3はmoduleに代わってnamespaceを導入して 呼び出し側でもrefとかoutとかつけて属性を明示できるようになって プロパティはset/getキーワードを用意して自然に表現できるし Attributeクラスでメソッドの属性を自作できる上にラムダ式とかも余裕で使えるし しかも.NETフレームワークで動く
今更namespaceとかありえないんじゃないかな
>>861 あとはVisualStudioで開発できれば完璧だな
D3では多重ディスパッチがついて型推論が進化
D3ではなんとヘッダーとソースをファイルレベルで分離して記述することができるようになります!
ヤメテ!
機能追加を国民投票で選びます 投票券はTDPLに付属
呼び出し側にrefつけるのは普通に欲しい 必須じゃなくてもつけまくるわ
>>868 C# とか VBのアレか
アレはすごくほしい
けどタプルとかうまく使ったらいらないぜ
ってものかも知れない
なにそれ。 D3 と C# の違いを教えてくれ。 const ありの C# としても使えるならぜひ使おうかと思うんだが。
D3.0はPerl6よりは現実的な開発が予定されてる言語
Perl6ってそんな非現実的なの?w
はたしてあれ実装できるんだろうか WebProg板にスレあったはず
ググってみたら吹いた。 設計開始から10年で初の処理系ってD言語超えてるな
心配すんな、クリスマスには出る
Dは登場と共に処理系もあったじゃないか 永遠に開発中だけど
設計完了に先立つこと10年にして早くも処理系
C言語だって・・・最終仕様より先に初期実装があったんだ!
何気にD2.058待機してる
とみせかけてD3.0くるー
リリースは延期だと思うよw
いつのまにか、AAA Cafeが終わってた。orz.... D言語研究が消えた。ショック
D言語研究とこは色々とサンプルコードがあって気に入ってたのになあ InternetArchiveには数年前のしか残ってないし 俺もショックだ
徐々に消えていってるな
破壊的変更, world.
D2.058 キタ━(゚∀゚)━!
change log が出揃うまではリリースとはみとめない(キリッ
Version D 2.058 upcoming Feb 13, 2012 New/Changed Features Add new => lambda syntax. Allow 1.userproperty syntax Convert to -shared dmd switch instead of -dylib Better use of XMM registers in OS X 32 bit target.
>>701 の件
と
Bugzilla 314: [module] Static, renamed, and selective imports are always public
この2つは Breaking Change に近い
Identifier => AssignExpression と 1.userproperty がわからねぇ。どなたか教えてください。
>>890 Bugzilla から pull request の中を見ればわかる
サンプルソースのほんのちょっとの間違いを修正しただけっぽい
リリース正式アナウンスキタ
ddemangle って何これ?
なんで今回こんなに更新待ちの人多いのw
更新がD言語を使う目的だからだけど? 他に理由があるの?
Dの更新が無いなら 俺はD言語なんて使わないね
>>891 具体的な事は知りもせずに言うけど
1.userpropertyは今まで配列でできてたアレ。
@property void hoge(int i) {writelen(i);}
っていう関数を用意しておくと
hoge(42);
の代わりに
42.hoge;
みたいに呼び出せる。
=>に関してはC#のラムダ式の記事でも見た方が早い
>>895 dのマングルされたシンボルをデマングルするんじゃね?
何の説明もなく実行ファイルが増えていることに対して不審をおぼえるのよ 俺の野生の勘が(ry
>>900 Rubyキタ
生成したexeのサイズがD2.055のに比べても小さくなってるなあ
よし、VersionUp時
2.057 (int x, int y) { return x+y; } 2.058 (x, y) => x+y
>Use of base class protection is now deprecated. ってなんぞ?
public継承でも
>>905 のエラー出るんだが。
public class A : public B { }
とかでも。
そこにpublicだのなんだの置くこと自体がdeprecatedってことじゃね?
そか。一括置換で消すか
クラスのprotectionが無くなってアクセス修飾子が不要になったってことだな
えっマジで? public継承のみになったの?
>>910 「基底クラス保護の使用は廃止」だからな
>>895 ddemangleは標準入出力を通したテキストにDのmangled nameが含まれる場合
これをdemangleしてくれるツール
stack traceとかをパイプでddemangleに食わせると出力を読みやすい形式に
変換できる
すごい詳しいな
>>904 ちなみにTDLPに書かれていたfunction/delegate推論も追加された
関数リテラルでfucntion/delegateを明示せずに (x, y) { ... } とか書くと
... のコードが外側フレームを参照してない場合に自動的にfuncitonに
推論される(いままでは必ずdelegateになっていた)
>>911 確かに滅多に使わないけど
完全廃止とはまた思い切ったな
917 :
891 :2012/02/16(木) 00:33:06.77
レスサンクス
>>912 なんだ。まだむりなのか。でもなんか胸熱展開wktk
>>904 は
delegate ParameterAttributes { return AssignExpression; }
だよな。では
delegate ( Identifier ) { return AssignExpression; }
これって Function Literals のなかで説明されてるっけ?
大昔にdelegateとfunctionは統合される予定とか聞いてたが推論で隠す方針になったのか?
>>919 すまん。自己解決したかもしれん。
ParameterAttributes と Idetifier の違いが分からなかったんだが
Identifier のほうでは括弧を省略できてるってことでおk?
( x ) => x * x; // ParameterAttributs => AssignExpression
x => x * x; // Identifier => AssignExpression
ってことか
void foo(int delegate(int, int) dg) {} void main() { foo( (int x, int y) => x * y ); // ParameterAttributs => AssignExpression foo( (x, y) => x * y ); // Identifier => AssignExpression } ってことじゃない?
typeof( (a) => 1 ) void あれ?こんな仕様だっけ?
>>915 すげ〜・・・でもDMD以外の実装が涙目
最適化に分類されるものじゃね?涙目ってことはないんじゃないかな
>>922 そこは a の型省略できないんじゃないか?推論できないから。
typeof( ( int a ) => 1 );
int function(int a) pure nothrow @safe
>>925 おっと、パラメータの型を決める所でこけてるのか。戻り値しか見てなかった
voidじゃなくてコンパイルエラーになってほしいな
手元だと、これと class A : public B { } ↓ class A : B { } これでいけた float a = 255.f; ↓ float a = 255.0f; 平和だ・・
基底クラスは何が何でもpublic属性という事でFA?
相変わらずの破壊的変更だがそこに痺れる憧れる
2.059では breaking change じゃなくて disruptive change がくるらしい 既存のライブラリのいくつかは息を引き取るであろう
崩壊的変更とか凄いな
D言語って楽しいですね
stream系はいつ固まるの
std.ioになるとかいう話もちらほら出てなかったり
constを厳密にやるとGUIライブラリが軒並み死にそうでとても楽しみだ
日本語訳を…日本語訳を…!
しかし今回はそんなに訳いる変更はない
個人的に今回のラムダ式とdelegateの型推論はうれしい ここらへんは型がうっとおしく感じる率が高いところだったから
ラムダ式楽すぎわろたwwww
しかし相変わらずコンパイル早いな
>>943 例えばこういう時
/** Menuを作成する。Menuの有効・無効はenabledの結果によって随時切り替える。 */
Menu createMenu(bool delegate(Widget w, Status s) enabled) { ... }
これを以前はこういう風に使っていた
auto menu = createMenu((Widget w, Status s) {return w.isSelection;}); // wが選択状態の時だけメニュー有効
これがこう書ける
auto menu = createMenu((w, s) => w.isSelection); // listが選択状態の時だけメニュー有効
たったこれだけなんだけど、数が増えると手間がだいぶ減るし見た目もすっきりする
テンプレートとかと併用するともっと効果的なんじゃないかな
視覚的にネストが浅くなるのも利点
C#化するD
正直今のDに不満があまり無い ストイックすぎるか
ライブラリ周りがなぁ
>>944 もともとdelegateを引数にとるような所で有効だったのね。
引数にdelegateとか関数ポインタとか指定した記憶が無いから思いつかんかったよ。
そういえば、サンプルコード見てて思ったんだけど
おいらは未だに
ttp://www.dsource.org/projects/bindings/wiki/WindowsApi こいつと CのHello Worldみたいなひな形を使って手打ちでやってるんだけど…
おまいらはどんなWindowのライブラリ使ってるの?
dflはあんまり好きじゃ無くて手放してしまったんだよね。
Dにもwtlみたいに比較的さっぱりめのライブラリがあったら是非使ってみたいとは思ってるんだけど…。
両方ともjavaの影響を強く受けているが、片方はVMに、一方はネイティブに IEnumerableとRangeも似てるが、しかし方向性が違う ラムダ式にしても式木・動的言語環境を持ってList Processor寄りの発想で作られ もう一方はpure関数など関数型言語としてのアプローチでラムダ式が必要になってきた 似ているようで違うのが両者
>>949 無いんだな、これが
いや、大昔にはあるにはあったんだけど今ではみんな目が死んでる
GUIライブラリ出来てもbreaking changeについていくメンテナが居ない
DWT使ってる。理由は: ・元ネタはSWTだが実態はDネイティブ ・表面上マルチプラットフォーム ・破壊的変更にもすぐについていくことがある ・静的リンクしても問題ない(ライセンス的にも) DEBUG=1だとOPTLINKがエラーを吐くがDでは大した問題ではない ・膨大な機能が揃っている。一部まともに動かないが気にしない ・setXxxみたいな名前は意外と気にならない ・鬱陶しいイベント処理はラッパを作ればなんとかなる なんといってもコンパイルできるどころかリンクまでできてしかも動くという時点で そんじょそこらのDライブラリとは格が違うのだよ
・ことがある ・大した問題ではない ・気にしない ・意外と気にならない ・なんとかなる ひゅう……。 さすがにGUIに触ろうなんてD言語erは訓練されてやがるぜ……。
他の言語だと当然のことがDだと曖昧だからな
>コンパイルできるどころかリンクまでできてしかも動く ここにまず突っ込めよw Windows限定なら DFL がお手軽だと思うよ
GUIは恥ずかしいライブラリを自作して使ってるよ
>>958 むしろよかったらそれ下さい
この言語使ってると無性にライブラリが作りたくなるんだけど
作ってる最中に破壊的変更が来たりして更新する気が失せて
半年くらいしたらまたDのプログラム書きに戻って来ちゃうんだけどその頃には作ったライブラリのソースの場所を失念してたりして
車輪の再発明ばっかりでもう嫌になっちゃうw
そろそろ0からやり直し続ける程の気力が湧かなくなってきましあ><
githubへどうぞ
>>957 きれいな顔してるだろ、これ、5日前には更新されてるんだぜ?
Remove deprecated base class protection attributes from interface declarations
"interface Foo : public Bar" => "interface Foo : Bar"
async/awaitって入る予定あんのかな DでWinRTがバリバリに使えたら人口増えるんじゃないかな!な! でもその前にyieldかなあ
yieldってなかったっけ えっと op.... op... opApply
関数の中断はcore.thread.Fiberでできる
965 :
デフォルトの名無しさん :2012/02/19(日) 13:27:44.41
2.058から interface A{} interface B : A{} void test( A a ){} void hoge( A* a ){} void main(){ B b; test( b ); // OK hoge( &b ); // cannot implicitly convert expression } とか、元々仕様なの? どっかに詳しくあるなら、教えて
ポインタェ… D使ってるとポインタを忘れる
hoge(cast(B*)b); // 未確認
968 :
デフォルトの名無しさん :2012/02/19(日) 14:03:06.34
Win32APIのIUnknown*とかcastが必要になったからだけど interface A{} interface B : A{} interface C{} void hoge( A* a ){} void main(){ B b; C c; hoge( cast( A* )&b ); // 冗長なだけだけど hoge( cast( A* )&c ); // OK でいいのかな? } とか思ったから
いかん いかんぞぉぉ
assert( !cast( A* )&c );
CとのI/Fで必要的な意味があるはず きっと、きっとあるはず
&bは変数bへのポインタな。 オブジェクトへのポインタはキャストで取得するんだ。
>>965 静的型言語としての型安全性が壊れるため。
is(B : A)のとき、暗黙変換としてB -> Aは許されるが
B* -> A*は許されない。B* -> const(A)*ならOK。
理由は
B b = new B();
B* pb = &b;
A* pa = pb; // もしこれが許されるなら
*pa = new A(); //これは合法なので
// 変数bにAのインスタンスが入ってしまう
ポインタ型について明示的に述べているところは無いが、動的配列型が同じ
問題を持っていて、それについては
http://www.d-programming-language.org/arrays.html#implicit-conversions で書かれている。
T[] は const(U)[] に変換できる(がU[]には変換できない)というのがそれ。
>>968 こうじゃないのか?
hoge( &(cast(A)b) );
975 :
デフォルトの名無しさん :2012/02/19(日) 17:17:44.02
なる、了解です castで簡単に回避できる方が問題なのかな Win32API の IUnknown** とかは const( IUnknown )* に置き換えればよさげ?
976 :
891 :2012/02/20(月) 00:05:27.19
2.059 …だと!?
977 :
デフォルトの名無しさん :2012/02/20(月) 03:56:38.48
うそつき!
やっと自作ライブラリの2.058対応が終わった。 constの厳密化が地味に痛い。
システムツール開発向けをうたわれても、言語が後方互換性を保証しないのでは採用できようはずもないな
しかしPerl5やJavaScriptやPHPを使ってると あり合わせで作ったツールに後方互換性を維持したせいで 軽く1万人年は無駄が発生してるんだろうなあと思うところはあるよ
GC回りに関して、 ある特定の条件を満たすとデストラクタで直接廃棄リスト行きにできる条件ってあるだろうか。 pureみたいなコンパイラに与える属性として。 あとデストラクタで参照型とポインタはなるべくnullを代入しろってアドバイスが書かれてたけど あれって自動化すると何か問題あるだろうか。
おつ!
鬱!
>>701 の変更で書き換えが大量に発生すると思っていたが、
思ったほどエラーは出なくて首をかしげていた。
> 2.057までは型名として、2.058以降は仮引数名として扱われるようになる
型名だと思った? 残念! 引数名でしたーーーwww
というブービートラップか
他の言語でよくやる、「適当な入力から別の言語のソースコードを作ってコンパイラに渡す」 みたいなことをDだけでできてこれは便利だと思うわー
へ? 他の言語でも一応出来るでしょ? '簡単に'実現できるとかいう意味なら同意できる…かな
DはCTFE+文字列ミックスイン+高速コンパイルで回りがめちゃくちゃ早いのがいい
>>982 乙。ちょっとどっちに書こうか迷ったんだけど聞いて。
1. dmd2.058 Windowsで
2. Dで書いたライブラリの中の クラス/構造体 テンプレート内の static this が実行されない、ただし
3. そのライブラリ内でインスタンス化されてない場合で、
4. そのライブラリを、自動生成された .di ファイルで import している時。
5. .di ファイルに static this の body を書き足せば実行される。
なんだけど、これバグなんじゃないか?
むしろg++のコンパイルなんであんな遅いん…
>>989 importだけして実体をリンクし忘れてるわけじゃなく?
>>989 di内に書き出されたテンプレートクラス/構造体には
問題のstatic thisが書き出されてないんだよね?
そのあとで「手書きでbodyを書きたせば」と言っているし。
dmdのバグだと思う。
>>992 リンク忘れでは無い筈。ライブラリ内の他の関数は呼べてるし。
>>993 template mixin でも、明示的インスタンス化でも結果は同じだった。
クラス/構造体 じゃないテンプレート内に static this を置いても同じだった。
てか、get なんてあったんだな。なんか、以前似たような関数自作した記憶が…
>>994 書き出されていないといっても static this(); の宣言だけはされてる。
とりあえず body 書き足すので回避したけど、
テンプレート外の static this も .di ファイル内では同じく body のない宣言の状態で、
こっちは実行されてる。
レポートしようかと思うんだけど、
ttp://d.puremagic.com/issues/ になければ未発見ってことでいいんだよな?
you レポートしちゃいなよ かぶってて消されるのはよくある
Dはowacon
D先生の2.059にご期待ください!
999 :
デフォルトの名無しさん :2012/02/24(金) 00:27:32.43
ほしゅしゅしゅしゅ
問題なく使えてるけど
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。