D言語 Part22
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2009/06/22(月) 01:38:41過去スレ、関連スレは >>2
■前スレ
http://pc12.2ch.net/test/read.cgi/tech/1234363551/
■本家
ttp://www.digitalmars.com/d/
ttp://www.kmonos.net/alang/d/ (和訳)
■コンパイラ
http://www.digitalmars.com/d/dcompiler.html (DMD, 本家)
http://dgcc.sourceforge.net/ (GDC, gccフロントエンド)
http://www.dsource.org/projects/ldc (LDC, バックエンドにLLVM)
■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://f17.aaa.livedoor.jp/~labamba/?D%B8%C0%B8%ECBOF (D言語BOF)
ttp://dsource.org/ (dsource)
ttp://tinyurl.com/candcpp2d (C/C++に疲れた人のD言語)
ttp://www.kmonos.net/alang/wnd/ (わかったつもりになるD言語)
ttp://shinh.skr.jp/d/ (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか)
ttp://shoo.s20.xrea.com/shoo/programing (D言語とTangoの入門講座)
ttp://www.nicovideo.jp/mylist/4453698 (D言語で作られた芝ゲー niconico動画)
ttp://www.asahi-net.or.jp/~cs8k-cyu/ (ABA Games)
■ IDE
ttp://dronten.googlepages.com/dscite (DSciTE)
ttp://forums.codeblocks.org/index.php?board=20.0 (Code::Blocks)
ttp://www.dprogramming.com/entice.php (Entice Designer)
ttp://www.dsource.org/projects/descent (Descent)
ttp://www.dsource.org/projects/poseidon (Poseidon)
0002デフォルトの名無しさん
2009/06/22(月) 01:40:49http://makimo.to:8000/cgi-bin/search/search.cgi?q=D%8C%BE%8C%EA&sf=2&all=on&view=table&shw=5000
その他関連スレ
バイナリをゲロる言語の魅力って何?
http://pc11.2ch.net/test/read.cgi/tech/1160869311/
Eclipse統合M27【Java/C/PHP/Ruby/Python/Perl】
http://pc12.2ch.net/test/read.cgi/tech/1238338503/
eclipseってそんなに良いか?【エクリプス】
http://pc11.2ch.net/test/read.cgi/tech/1099300344/
統合開発環境Eclipseプラグイン開発QA
http://pc11.2ch.net/test/read.cgi/tech/1081517094/
"Code of the Nerds" Digital Mars C/C++
http://pc11.2ch.net/test/read.cgi/tech/1044210976/
0003デフォルトの名無しさん
2009/06/22(月) 01:42:33- "C/C++に疲れた人のD言語"のURL更新
- 関連スレ更新
0004デフォルトの名無しさん
2009/06/22(月) 02:20:08980越えたから落ちたか。
0005デフォルトの名無しさん
2009/06/22(月) 04:11:240006デフォルトの名無しさん
2009/06/22(月) 04:22:440007デフォルトの名無しさん
2009/06/22(月) 22:16:49乙
うぉるたんかわいいようぉるたん
0008デフォルトの名無しさん
2009/06/22(月) 22:22:090009デフォルトの名無しさん
2009/06/22(月) 22:28:36半ばテンプレ化。
0010デフォルトの名無しさん
2009/06/23(火) 02:08:32C++の標準、boost並に充実しているなら乗り換えようかと思っているんですが。
0011デフォルトの名無しさん
2009/06/23(火) 02:24:5510月ぐらいまでにはなんとかなる予定
0012デフォルトの名無しさん
2009/06/23(火) 02:31:04すみませんガチで知りませんでした。
もう少ししたら良い環境ですね。
どうもありがとうございました。
0013デフォルトの名無しさん
2009/06/23(火) 02:55:230014デフォルトの名無しさん
2009/06/23(火) 07:57:130015デフォルトの名無しさん
2009/06/23(火) 08:02:060016デフォルトの名無しさん
2009/06/23(火) 12:08:070017デフォルトの名無しさん
2009/06/23(火) 22:24:290018デフォルトの名無しさん
2009/06/23(火) 22:42:550019デフォルトの名無しさん
2009/06/23(火) 23:25:450020デフォルトの名無しさん
2009/06/23(火) 23:45:48何かどこかで、こっちはまでできてないけど、みたいな記事を読んだぞ
0021デフォルトの名無しさん
2009/06/24(水) 18:55:010022デフォルトの名無しさん
2009/06/25(木) 00:07:160023デフォルトの名無しさん
2009/06/25(木) 22:19:59…というやりとりを以前にもここでしたような
0024デフォルトの名無しさん
2009/06/25(木) 22:31:430025デフォルトの名無しさん
2009/06/26(金) 16:18:29bugzillaに送ってもなかなか反映してくれないなあ
0026デフォルトの名無しさん
2009/06/26(金) 22:45:270027デフォルトの名無しさん
2009/06/26(金) 22:51:480028デフォルトの名無しさん
2009/06/27(土) 10:39:36myObject[key] = value;
ってやった時に
myObject.opIndexAssign(value, key) よりも
myObject.opIndex(key).opAssign(value) が優先されるのはなんなの?
0029デフォルトの名無しさん
2009/06/27(土) 15:45:46一つ前のdmd使ってもコンパイルできない
俺は死んだ
0030デフォルトの名無しさん
2009/06/27(土) 17:57:480031デフォルトの名無しさん
2009/06/27(土) 18:40:50テストに失敗してもその場でさっと修正しちゃえて良くない気がするな・・・。
番犬みたいのはある程度独立していないと懐柔されやすいというか。
0032デフォルトの名無しさん
2009/06/27(土) 20:00:59テスト自体を修正しちゃえるからよくないって言ってる?
0033デフォルトの名無しさん
2009/06/27(土) 20:41:44まぁ、D的には仕様を守るための硬いテストみたいなものは、
そもそも邪悪なものなのかもしれんが・・・。
0034デフォルトの名無しさん
2009/06/27(土) 20:54:32mixinなりincludeなりでコードを分離するのがいいんじゃね?
0035デフォルトの名無しさん
2009/06/27(土) 22:53:32便利かなぁと思ったけど、version(MY_TEST)でいいか・・・。
0036デフォルトの名無しさん
2009/06/28(日) 00:39:560037デフォルトの名無しさん
2009/06/28(日) 01:36:490038デフォルトの名無しさん
2009/06/28(日) 02:07:280039デフォルトの名無しさん
2009/06/28(日) 10:21:3835の1行目は-unittest=STRICT / unittest (STRICT) { }みたいなことが
したいってことでちょっと違うかな。
0040デフォルトの名無しさん
2009/06/28(日) 11:00:00「Dならそれくらい出来るだろwww」という気分で試して絶望しそうなイメージ
0041デフォルトの名無しさん
2009/06/28(日) 11:38:450042デフォルトの名無しさん
2009/06/28(日) 14:09:21それやる意味って何かあるの?単体テストは全て通らなければ意味がない気がするのだけど…
それよりは、実行ファイルを作らない限りunittestが実行できないって方が問題のような気がする
0043デフォルトの名無しさん
2009/06/28(日) 14:33:260044デフォルトの名無しさん
2009/06/28(日) 14:54:57さすがに全部通るか通らないかしかないとちょっと息苦しい
普段は時間がかかるテストはスキップするとかできてもいいんじゃないか
0045デフォルトの名無しさん
2009/06/28(日) 21:38:17それってunittest内でversion分岐させた方が分かり易くないか?
0046デフォルトの名無しさん
2009/06/28(日) 22:24:31ユニットテストアンチパターン
0047デフォルトの名無しさん
2009/06/28(日) 23:20:25rdmd -unittest hoge.d → エントリポイントを自動で追加 → 実行。
っていうふうにできてたらなあ。
0048デフォルトの名無しさん
2009/06/29(月) 00:17:40っ
version(unittest) void main() { }
0049デフォルトの名無しさん
2009/06/29(月) 01:25:33でも、それだとファイルが複数になった時(どこにmain()書いたか?とか)ややこしくならない?
0050デフォルトの名無しさん
2009/06/29(月) 04:23:390051デフォルトの名無しさん
2009/06/29(月) 06:46:45おいィ?
0052デフォルトの名無しさん
2009/06/29(月) 07:00:250053デフォルトの名無しさん
2009/06/29(月) 11:55:49ここの講座見てDFL使おうとしたら、コンパイルエラー。
dfl\internal\com.d(218): Error: no property 'seek' for type 'tango.io.model.IConduit.IConduit.Seek'
dfl\internal\com.d(218): Error: no property 'Anchor' for type 'tango.io.model.IConduit.IConduit.Seek'
dfl\internal\com.d(218): Error: no property 'Begin' for type 'int'
dfl\internal\com.d(218): Error: function expected before (), not 1 of type int
〜〜〜以下省略〜〜〜
入れたのは
tango-0.99.8-bin-win32-dmd.1.041
dsss-0.78-x86-windows
dmc.zipのlibの中身
DFL 0.9.8 zip archive
import\dfl\internal\dlib.d の464行目を
alias tango.io.model.IConduit.IConduit.Seek DSeekStream;
から
alias tango.io.model.IConduit.IOStream DSeekStream;
に書き換えたら、なんとかコンパイル通ったよ。
D言語初心者にハードルたけーよ、DFL。(;´Д`)
0054デフォルトの名無しさん
2009/06/29(月) 12:43:25たぶんDFL 0.9.8がtango 0.99.8に対応してないんだな。
http://wiki.dprogramming.com/Dfl/Snapshots
ここの、スナップショット使ってみたら?tango 0.99.8より後だからもしかしたらできるかもよ
0055デフォルトの名無しさん
2009/06/29(月) 13:55:18Note: Tango is not yet supported in this snapshot, please use the release version and be sure to use the compatible version of DMD.
と書いてあるし、まだみたい。
0056デフォルトの名無しさん
2009/06/29(月) 16:25:51tango使っておいて初心者はないw
phobosならいけね?
0057デフォルトの名無しさん
2009/06/29(月) 20:10:00D1ならイけるんじゃね?
0058デフォルトの名無しさん
2009/06/29(月) 20:17:50---
int a = 5;
assert (a.init == 0); // success
assert (a.init == 5); // fail
なん…だと…?
0059デフォルトの名無しさん
2009/06/29(月) 20:33:540060デフォルトの名無しさん
2009/06/29(月) 20:46:290061デフォルトの名無しさん
2009/06/29(月) 21:48:280062デフォルトの名無しさん
2009/06/29(月) 22:02:53逆。右も左もわからないから普通のライブラリのノリで入れちゃうんだよ
まさか標準ライブラリを置き換えてしかも互換性がないものとは思わない
0063デフォルトの名無しさん
2009/06/29(月) 22:45:23結構昔にそういう仕様になったよ
それのせいで昔のソースをビルドした時大変だった
0064デフォルトの名無しさん
2009/06/29(月) 22:47:57関数の型比較は引数の型だけで判断されるんじゃね?
TypeInfo_Function にも TypeInfo_Delegate にも
引数の情報を格納する場所はないし
0065デフォルトの名無しさん
2009/06/29(月) 22:48:15マジですか
和訳はともかく本家のドキュメント直ってないってなんなの
0066デフォルトの名無しさん
2009/06/29(月) 23:37:430067デフォルトの名無しさん
2009/06/29(月) 23:50:15TangoとPhobosは仲良くなれるように努力している。
将来的にはTangoとPhobosの両方のいいところを選択的に使えるようにする。
TangoはライセンスがPhobosと違うので気軽に取り込めなくて残念。
…てかんじのコメントだったと思うよ。
0068デフォルトの名無しさん
2009/06/30(火) 00:54:57http://dusers.dip.jp/modules/wiki/?Learning%2FThe%20Case%20for%20D
0069デフォルトの名無しさん
2009/06/30(火) 13:59:20俺はD言語の何も理解していなかったようだ
って気分になる
0070デフォルトの名無しさん
2009/06/30(火) 16:45:08ChangeLogとかドキュメントで読んだ気がする……んだけど、どこにも書いてないな……
俺はどこで知ったんだろう……
0071デフォルトの名無しさん
2009/06/30(火) 17:22:09> * The .init property for a variable is now based on its type, not its initializer.
0072デフォルトの名無しさん
2009/06/30(火) 17:22:400073デフォルトの名無しさん
2009/06/30(火) 19:45:47この書き方だと今はそうなってるけど元に戻すつもりがあるってことなんだろうか
どっちにしろもう戻らないだろうけど
0074デフォルトの名無しさん
2009/06/30(火) 20:28:35"〜 is now 〜"は昔と違って今は〜だってニュアンスじゃなかったっけ?
0075デフォルトの名無しさん
2009/06/30(火) 22:15:44>ではDの場合はどうでしょう? もう聞いたことがあるかもしれません - 名前のダジャレがやり過ぎな言語。
>他の言語の専用ニュースグループでときどき話題になり、オフトピックな話題に厳しい人達が怒って止めさせるまで鬱陶しい。
>友人に熱狂的なファンがいる。
>あるいは単に、暇潰しに「この広いインターネットには、Dという名前の言語を作った馬鹿がいるに違いない」
>と検索してみた結果、「ああ、やっぱりいた!」
噴いたwwwww
0076デフォルトの名無しさん
2009/07/01(水) 00:10:00ところどころわかりにくいんだけど面白えw
アレキサンドレスクD好きすぎる。訳の人gjです。
0077デフォルトの名無しさん
2009/07/01(水) 16:19:470078デフォルトの名無しさん
2009/07/01(水) 17:05:37これはおもしろい
0079デフォルトの名無しさん
2009/07/01(水) 18:42:080080デフォルトの名無しさん
2009/07/02(木) 17:24:20bugzillaに報告するといいよ
0081デフォルトの名無しさん
2009/07/03(金) 05:53:570082デフォルトの名無しさん
2009/07/03(金) 13:46:490083デフォルトの名無しさん
2009/07/03(金) 14:07:12int x;
class C {
static ref int f() { return x; }
ref int g() { return x; }
}
void main() {
(&C.f)() = 0; // ok
(&(new C).g)() = 0; // error
}
0084デフォルトの名無しさん
2009/07/03(金) 14:55:240085デフォルトの名無しさん
2009/07/03(金) 15:39:530086デフォルトの名無しさん
2009/07/03(金) 15:54:18int k = dg(1);
assert(k == 2);
こうなる予定だったよね?
0087デフォルトの名無しさん
2009/07/03(金) 16:01:000088デフォルトの名無しさん
2009/07/03(金) 16:22:26それなんかきもいな。
バックスラッシュはλの代わりだから前に書きたい。
> auto square = \x => x * 2;
>
> auto i = square(2); // typeof(i) == int
> auto d = square(2.5); // typeof(d) == double
強い静的型付き言語だけど、ソースコード上に型を書かなくていいような言語が使いたい。
0089デフォルトの名無しさん
2009/07/03(金) 16:28:490090デフォルトの名無しさん
2009/07/03(金) 16:31:17OCaml
型推論で80%の型名を書かなくていいネイティブ吐ける関数型言語
0091デフォルトの名無しさん
2009/07/03(金) 16:37:04アセンブラレベルでの呼び出し規約は
デフォルトで何を使ってるんですか?
ちょっと興味があったもので
0092デフォルトの名無しさん
2009/07/03(金) 16:49:30本質的じゃないが、それsquareじゃないだろ
0093デフォルトの名無しさん
2009/07/03(金) 16:51:13http://www.kmonos.net/alang/d/2.0/abi.html
0094デフォルトの名無しさん
2009/07/03(金) 16:56:470095デフォルトの名無しさん
2009/07/03(金) 17:02:29ありがとう
完全に独自なのか
型情報をマングリングしたり
関数側でスタックを処理するのに
可変引数がサポートされたりしてて面白い
0096デフォルトの名無しさん
2009/07/04(土) 13:49:54const(A) a;
}
0097デフォルトの名無しさん
2009/07/04(土) 13:51:41class A {
const(B) b;
void setB(in B b) {
this.b = b; // 駄目
}
}
constな型とconstな変数が区別されてないのってなんでだろ?
このsetAみたいな事やろうとして八方塞りになった
009897
2009/07/04(土) 13:52:28×setA
慌てすぎで死んだ
0099デフォルトの名無しさん
2009/07/04(土) 14:13:250100デフォルトの名無しさん
2009/07/04(土) 14:20:15クラス型が参照型(要するにポインタ)であることを考えれば、別に何もおかしいことではないと思う。
struct S { }
class A {
const(S*) b;
void setB(const S* b) {
this.b = b; // 駄目
}
}
これに対する解決法は>>99だけど、言語のほうで何とかしてほしいのはたしか。
それと、これはまだ実装されてないけど、inはscopeを含むので、
in引数の内容をスコープ外にコピーすることはできない。
0101デフォルトの名無しさん
2009/07/04(土) 14:38:06最近同じポイントではまりました。
>>99 >>100
AとRebindable!(A)はisによる同一性比較が出来ないのが欠点。
なんでDはC++みたいに参照と値を分離しなかったのか…
0102デフォルトの名無しさん
2009/07/04(土) 14:48:59あーなるほど、なるほどなぁ
とりあえずは解決しそうです。ありがとうございました。
解決はするけど、確かにもうちょっとスマートになってほしいな
0103デフォルトの名無しさん
2009/07/04(土) 20:32:310104デフォルトの名無しさん
2009/07/04(土) 21:02:48import std.typecons;
class A{}
void main()
{
Rebindable!(const(A)) a = new A();
// if( !a ){
// if( a is null ){
if( a.opDot is null ){
}
}
Rebindableそのものはstructなので!やis nullで直接調べられない
opDotでconst(A)を取り出さないとダメ
0105デフォルトの名無しさん
2009/07/04(土) 21:28:57そうか、opDotを直接呼べばいいのか
getがprivateだどうすんべとか言って悩んでたthx
0106デフォルトの名無しさん
2009/07/05(日) 00:53:570107デフォルトの名無しさん
2009/07/05(日) 01:15:200108デフォルトの名無しさん
2009/07/05(日) 03:09:280109デフォルトの名無しさん
2009/07/05(日) 08:03:210110デフォルトの名無しさん
2009/07/05(日) 10:47:440111デフォルトの名無しさん
2009/07/05(日) 13:13:440112デフォルトの名無しさん
2009/07/05(日) 15:41:310113デフォルトの名無しさん
2009/07/05(日) 15:41:57ありがとう。でも、最新版のD2でコンパイル通るものはなかった
0114デフォルトの名無しさん
2009/07/05(日) 19:57:03規模が小さいものに手を入れるといいかと
0115デフォルトの名無しさん
2009/07/05(日) 22:29:110116デフォルトの名無しさん
2009/07/05(日) 22:50:490117デフォルトの名無しさん
2009/07/05(日) 23:54:23http://dsource.org/projects/tango/browser/branches/experimental/D2.0
0118デフォルトの名無しさん
2009/07/06(月) 00:11:31branches/experimental/D2.0は何カ月も前からコンパイルできなかったと思うし
0119デフォルトの名無しさん
2009/07/06(月) 14:21:270120デフォルトの名無しさん
2009/07/06(月) 15:42:12___
/ || ̄ ̄|| ∧_∧
|.....||__|| ( ) どうしてこうなった・・・
| ̄ ̄\三⊂/ ̄ ̄ ̄/
| | ( ./ /
___
/ || ̄ ̄|| ∧_∧
|.....||__|| ( ^ω^ ) どうしてこうなった!?
| ̄ ̄\三⊂/ ̄ ̄ ̄/
| | ( ./ /
___ ♪ ∧__,∧.∩
/ || ̄ ̄|| r( ^ω^ )ノ どうしてこうなった!
|.....||__|| └‐、 レ´`ヽ どうしてこうなった!
| ̄ ̄\三 / ̄ ̄ ̄/ノ´` ♪
| | ( ./ /
___ ♪ ∩∧__,∧
/ || ̄ ̄|| _ ヽ( ^ω^ )7 どうしてこうなった!
|.....||__|| /`ヽJ ,‐┘ どうしてこうなった!
| ̄ ̄\三 / ̄ ̄ ̄/ ´`ヽ、_ ノ
| | ( ./ / `) ) ♪
0121デフォルトの名無しさん
2009/07/06(月) 16:10:31んで後ろを含む..=とか、前後の上下をはっきりさせた.<や.<=や.>や.>=を導入すれば良かっただろうに
0122デフォルトの名無しさん
2009/07/06(月) 18:48:480123デフォルトの名無しさん
2009/07/06(月) 19:19:46D 2.031
・ルートを\dmdから\dmd2に
・with文でローカルのシンボルと重複すると隠すのでエラー
・final switch(expr)
・case 1: .. case 5:
・暗黙の整数変換で符号ビットが落ちる変換はエラー
・return exp;がないのは警告じゃなくてエラー
・dmdの吐くエラーはstderrに出すように
・フロントエンド高速化のパッチ
・std.algorithm : swapの高速化、あといくつか追加
・std.array : 関数追加
・std.conv : enum値を表示/解析するコードを追加
・std.ctype : isupperとtolowerをpureに
・std.date : benchmarkの返値をuint[]からulong[]に
・std.demangle : switchとcaseの新文法に対応して変更
・std.random : randomSample追加
・std.string : find系をdeprecatedに。starstWith、endsWithを削除
・std.traits : isSomeChar と isPointer追加
・std.typetuple : indexOfをindexOfTypeに。前の名前はaliasで残してdeprecated
・std.utf : エラーメッセージ改善
0124デフォルトの名無しさん
2009/07/06(月) 19:33:14final switchは「全条件について書く」、defaultなし、CaseRangeなし、enumを受ける場合enum全条件のcase強制、か。
以前に「gotoの行き先のラベルのアドレスが欲しい」という話があったが、
final switchだとほぼ同等のことができるな。defaultがないからほぼO(1)のルーチンに最適化可能のはず。
0125デフォルトの名無しさん
2009/07/06(月) 19:56:04ではいけない理由がわからないんだけど誰か教えて
0126デフォルトの名無しさん
2009/07/06(月) 20:22:45何とかしてよドラえもん
0127デフォルトの名無しさん
2009/07/06(月) 21:52:19case 1 .. 9:
だとスライスの連想から、1<=x<9のような感じがするが、
case 1: .. case 9:
だと、いかにも9を含みそうな感じがする。
という説明がNGでなされている。
0128デフォルトの名無しさん
2009/07/06(月) 21:59:010129デフォルトの名無しさん
2009/07/06(月) 22:06:360130デフォルトの名無しさん
2009/07/06(月) 22:23:56と言うことは、普通の switch 文なら case j: とか…
…できるじゃあないかッ!いつからこんなことが?
0131デフォルトの名無しさん
2009/07/06(月) 22:31:32andreiじゃあしょうがないな
0132デフォルトの名無しさん
2009/07/06(月) 22:33:080133デフォルトの名無しさん
2009/07/06(月) 22:42:54結構前から出来たと想うけど
0134デフォルトの名無しさん
2009/07/06(月) 22:44:55ラベルのアドレスならcaseの中から直接次のcaseへジャンプするように
書けるから同等ではないかと。それでもO(1) switchはかなりうれしいけど。
0135デフォルトの名無しさん
2009/07/06(月) 22:48:06fallthroughなんかgoto caseがあればいいじゃないか…
0136デフォルトの名無しさん
2009/07/06(月) 23:28:401<=x<=9のような感じを出したいならcase 1..=9:とすりゃいいのに
0137デフォルトの名無しさん
2009/07/06(月) 23:33:46C言語だとfall throughは結構使われる…が、確かにD言語だとcaseに複数指定可能でgoto caseがあるから無くした方が良い気もするな。
まぁC言語使いが混乱しないようにfall through禁止の上でbreak必須にするという所が現実的な気がする。
0138デフォルトの名無しさん
2009/07/06(月) 23:37:080139デフォルトの名無しさん
2009/07/06(月) 23:52:29fall throughなしでbreakなしにするんだ
select(n){
case 0, 1, 2:
case 3 .. 5: // 3,4
case 5 ... 7: // 5,6,7
default:
}
0140デフォルトの名無しさん
2009/07/06(月) 23:58:58case is構文の新設ですね、分かります。
0141デフォルトの名無しさん
2009/07/07(火) 00:06:560142デフォルトの名無しさん
2009/07/07(火) 00:18:31ヒント: http://www.geocities.jp/cbc_vbnet/kisuhen/bunki.html#selectbun
0143デフォルトの名無しさん
2009/07/07(火) 02:00:530144デフォルトの名無しさん
2009/07/07(火) 03:10:330145デフォルトの名無しさん
2009/07/07(火) 09:50:47それでいいよ
0146デフォルトの名無しさん
2009/07/07(火) 10:58:260147デフォルトの名無しさん
2009/07/07(火) 11:01:120148デフォルトの名無しさん
2009/07/07(火) 11:46:310149デフォルトの名無しさん
2009/07/07(火) 11:59:120150デフォルトの名無しさん
2009/07/07(火) 12:00:44a...bでbを含むでいいんじゃね?
別の言語と異なってもいいだろ別に
0151デフォルトの名無しさん
2009/07/07(火) 12:03:550152デフォルトの名無しさん
2009/07/07(火) 12:12:07しかし引かぬ媚びぬ
0153デフォルトの名無しさん
2009/07/07(火) 12:20:27その他「いや、俺は汚いと思うね」
ウォルター「スライスの..は末尾を含んで、CaseRangeの..は末尾を含まないから、混乱を避けるために全く別の構文にする必要がある」
その他「だから別の演算子導入すればいいって言ってるだろ!」
こういう応酬が延々と繰り広げられてるんだが…
0154デフォルトの名無しさん
2009/07/07(火) 12:53:32なので英語圏の皆さんには頑張っていただきたい
0155デフォルトの名無しさん
2009/07/07(火) 15:25:36..
case '9':
と複数行にすれば案外いけるかもしれん
0156デフォルトの名無しさん
2009/07/07(火) 16:13:55お前天才だろ…それならいけるわ。
0157デフォルトの名無しさん
2009/07/07(火) 16:24:180158デフォルトの名無しさん
2009/07/07(火) 16:42:24f!(0);
..
f!(9);
mixin("int a;");
..
mixin("int z;");
0159デフォルトの名無しさん
2009/07/07(火) 16:43:370160デフォルトの名無しさん
2009/07/07(火) 16:45:39それなら、mixinとか使わなくて、
int a;
..
int z;
でいいだろ…
0161デフォルトの名無しさん
2009/07/07(火) 17:07:17writeln(1);
..
writeln(100000);
0162デフォルトの名無しさん
2009/07/07(火) 17:09:01..
writeln(i+100000);
0163デフォルトの名無しさん
2009/07/07(火) 17:35:160164デフォルトの名無しさん
2009/07/08(水) 14:36:38googleで調べながら一通りインストールしてサンプルをビルドしようとしたら
「'DMDの起動'に問題が発生しました。Variable references empty selection: ${project_loc}」
というエラーが出てしまいます。
作業ディレクトリーが${project_loc}
引数が${resource_loc} -g
という設定にしているんですが、どうもここがまずそうです。
どういう設定にすればいいのでしょうか?
0165デフォルトの名無しさん
2009/07/08(水) 15:23:470166デフォルトの名無しさん
2009/07/08(水) 17:24:00レスthx
プロジェクト・エクスプローラーでtest.dを選択した状態でビルドしたらうまくいきました。
ついでといってはなんですが、
ビルドしたサンプルは
ttp://www.kmonos.net/alang/d/2.0/wc.html
なんですけど、74行目でコンパイルエラーが発生してしまいます(Error: buf[0] isn't mutable)。
サンプルが間違っているんですかね?
0167デフォルトの名無しさん
2009/07/08(水) 17:33:57更新のたびにいちいち修正されてるのか?それならすごいけど・・・
0168デフォルトの名無しさん
2009/07/08(水) 17:56:55samplesディレクトリのは更新されてない。たぶんコンパイルとおらんだろう。
ドキュメントに書いてあるのは修正されてる。
0169デフォルトの名無しさん
2009/07/08(水) 20:49:35サンプルがD2なのにstringの中身を変更してるだけかな?
0170デフォルトの名無しさん
2009/07/08(水) 21:16:59bufにstringはない罠
0171デフォルトの名無しさん
2009/07/08(水) 21:39:46thx
古い仕様のコードなんですね。
0172デフォルトの名無しさん
2009/07/08(水) 22:46:300173デフォルトの名無しさん
2009/07/08(水) 23:07:550174デフォルトの名無しさん
2009/07/09(木) 12:05:310175デフォルトの名無しさん
2009/07/09(木) 12:42:330176デフォルトの名無しさん
2009/07/09(木) 16:12:340177デフォルトの名無しさん
2009/07/09(木) 18:48:380178デフォルトの名無しさん
2009/07/10(金) 00:09:45サクラたんかわいいよサクラたん
0179デフォルトの名無しさん
2009/07/10(金) 03:30:290180デフォルトの名無しさん
2009/07/10(金) 03:35:230181デフォルトの名無しさん
2009/07/10(金) 08:17:22D.om書かないとダメだけど
0182デフォルトの名無しさん
2009/07/10(金) 08:52:31D向きだね
うpもなしに(ry
0183デフォルトの名無しさん
2009/07/10(金) 23:00:08むしろDWTって今誰か開発続けてるの?
0184デフォルトの名無しさん
2009/07/11(土) 00:19:120185デフォルトの名無しさん
2009/07/12(日) 21:33:520186デフォルトの名無しさん
2009/07/12(日) 23:16:12http://dsource.org/projects/poseidon/browser
0187デフォルトの名無しさん
2009/07/13(月) 02:43:480188デフォルトの名無しさん
2009/07/13(月) 02:50:500189デフォルトの名無しさん
2009/07/13(月) 12:08:510190デフォルトの名無しさん
2009/07/13(月) 12:47:23コンパイラ見つからないと出るのですが
プロジェクト生成時にパスは設定してます
0191デフォルトの名無しさん
2009/07/13(月) 12:53:05C++のboost::serializationみたいなやつ。
0192デフォルトの名無しさん
2009/07/13(月) 13:29:310193デフォルトの名無しさん
2009/07/13(月) 13:31:50ないですか。どうもです。
0194デフォルトの名無しさん
2009/07/13(月) 13:34:560195デフォルトの名無しさん
2009/07/13(月) 20:12:110196デフォルトの名無しさん
2009/07/13(月) 20:37:21>>190と同じくコンパイルができない。
秀丸のファイルタイプ別の設定ファイル探すか書いてみるか
0197デフォルトの名無しさん
2009/07/13(月) 22:07:440198デフォルトの名無しさん
2009/07/13(月) 23:39:190199デフォルトの名無しさん
2009/07/13(月) 23:40:160200デフォルトの名無しさん
2009/07/14(火) 00:07:14macとかfreebsdとかサポートするため。
0201デフォルトの名無しさん
2009/07/14(火) 01:30:41std.outbufferだな
0202デフォルトの名無しさん
2009/07/14(火) 01:40:49テキスト形式で書き出すならstd.file.slurp()が読み込みに使えそう
シリアライズってバイナリ限定だっけ?
0203デフォルトの名無しさん
2009/07/14(火) 07:18:360204デフォルトの名無しさん
2009/07/14(火) 07:26:380205デフォルトの名無しさん
2009/07/14(火) 07:44:160206デフォルトの名無しさん
2009/07/14(火) 16:44:45待ちきれなくてgdcに2.031移植しようとしたが挫折したorz
0207デフォルトの名無しさん
2009/07/14(火) 18:05:450208デフォルトの名無しさん
2009/07/14(火) 18:17:510209デフォルトの名無しさん
2009/07/14(火) 19:03:37>>1の本家には載ってないです。
googleで検索したら
ttp://f17.aaa.livedoor.jp/~labamba/?std.outbuffer
> バイト順(エンディアン)を指定する場合は、OutBuffer? の派生クラスを使ってください。逆のbyteの配列からデータに復元するには InBuffer? を使います。
と出てきたものの、これ以外に書かれていないです。
一体どういうことなのでしょう・・・。
0210デフォルトの名無しさん
2009/07/14(火) 20:54:19interface It {}
class A {
Rebindable!(const(It)) ireb; // ItがObjectじゃないためNG
Rebindable!(const(A)) reb;
const const(A) get() {
return reb.opDot; // RebindableのopDotがconstじゃないためNG
}
Rebindable!(const(A))[string] assoc;
void put(const(A) a) {
// opAssignが呼ばれてしまい実行時エラー
assoc["test"] = a;
}
}
('A`) ウボァー
0211デフォルトの名無しさん
2009/07/14(火) 21:27:380212デフォルトの名無しさん
2009/07/14(火) 21:28:350213デフォルトの名無しさん
2009/07/14(火) 22:04:06たぶんこれpublicにしたかったんだな
0214デフォルトの名無しさん
2009/07/15(水) 00:46:080215デフォルトの名無しさん
2009/07/15(水) 07:45:33この互換のなさ酷すぎ。。。
0216デフォルトの名無しさん
2009/07/15(水) 08:06:23> C#になったとたんC時代のソースがことごとくコンパイルできない
>
> この互換のなさ酷すぎ。。。
といっているようなもの。
0217デフォルトの名無しさん
2009/07/15(水) 08:37:35っていうか互換性重視して切り捨てられない部分が出てくるよりよっぽどいいよ。
0218デフォルトの名無しさん
2009/07/15(水) 08:37:460219デフォルトの名無しさん
2009/07/15(水) 13:03:05>>217 C++とは別の方向性を持った言語の行く末を見守るスレでもあります
0220デフォルトの名無しさん
2009/07/15(水) 14:57:380221デフォルトの名無しさん
2009/07/15(水) 15:02:340222デフォルトの名無しさん
2009/07/15(水) 15:21:090223デフォルトの名無しさん
2009/07/15(水) 15:49:12std.socketを使うことになるんですかね?
難しそうですね。
Cで書いて、それを呼び出す方が楽かなぁ。
0224デフォルトの名無しさん
2009/07/15(水) 15:54:250225デフォルトの名無しさん
2009/07/15(水) 16:05:12Cでいうところのwininet.hがDにはなくないですか?
0226デフォルトの名無しさん
2009/07/15(水) 17:19:450227デフォルトの名無しさん
2009/07/15(水) 17:29:582行でできるよ
0228デフォルトの名無しさん
2009/07/15(水) 17:31:14wininet.hだけでも3900行もあるし、Cで必要な部分だけラッパを書いた方が楽かなぁと。
0229デフォルトの名無しさん
2009/07/15(水) 17:32:55なるほど。D1のTangoにはあるんですね。
0230デフォルトの名無しさん
2009/07/15(水) 17:33:120231デフォルトの名無しさん
2009/07/15(水) 17:33:140232デフォルトの名無しさん
2009/07/15(水) 17:41:27今後に期待ですね。
>>231
ぐぐり方が悪いのか見つからないです。
0233デフォルトの名無しさん
2009/07/15(水) 21:59:24ttp://dsource.org/projects/bindings/wiki/WindowsApi
0234デフォルトの名無しさん
2009/07/15(水) 23:32:58おお、まさに求めていたものが・・・。
ありがとうございました。
0235デフォルトの名無しさん
2009/07/16(木) 01:39:230236デフォルトの名無しさん
2009/07/16(木) 21:32:540237デフォルトの名無しさん
2009/07/16(木) 22:38:170238デフォルトの名無しさん
2009/07/16(木) 22:43:45動作するプラットフォームの多さ?
0239デフォルトの名無しさん
2009/07/16(木) 23:17:030240デフォルトの名無しさん
2009/07/16(木) 23:30:56auto len = arr.length;
arr.length = 1000;
arr.length = len;
これでおk?
0241デフォルトの名無しさん
2009/07/16(木) 23:37:33cのライブラリを積極的に使うならgdcのほうが楽だと信じてる。
gccで吐いたバイナリそのまま使えるし。
0242デフォルトの名無しさん
2009/07/16(木) 23:38:11それ、本家に書いたらstd.arrayにテンプレートとして組み込んでくれるんじゃないか。
配列の疑似プロパティでarr.reserve(1000)で通るようになるかと。
0243デフォルトの名無しさん
2009/07/16(木) 23:42:39void reserve(T)(T[] a, size_t reserve_len)
in {
assert(a.length<len);
}
body {
auto len = arr.length;
arr.length = reserve_len;
arr.length = len;
}
0244デフォルトの名無しさん
2009/07/16(木) 23:46:490245デフォルトの名無しさん
2009/07/16(木) 23:48:25たしかにチェックしないとだめだった。
英語できないのでどなたかお願いしますorz
0246デフォルトの名無しさん
2009/07/17(金) 00:10:36大きい配列を割り当てて、それのスライスを使えばいいだけ
0247デフォルトの名無しさん
2009/07/17(金) 00:19:23gdbでデバッグできる
0248デフォルトの名無しさん
2009/07/17(金) 00:25:20大きい配列のサイズを1000として、それのスライスのサイズが1000を超えた時、
配列が2つアロケートされたままになるのが気持ち悪くない?
ガベコレがある言語では気にする意味なし?
0249デフォルトの名無しさん
2009/07/17(金) 00:39:26自分でも全然使ってない。ユーザー定義リテラルキボンヌ
0250デフォルトの名無しさん
2009/07/17(金) 00:50:290251デフォルトの名無しさん
2009/07/17(金) 00:51:350252デフォルトの名無しさん
2009/07/17(金) 01:00:290253デフォルトの名無しさん
2009/07/17(金) 01:27:36autoもあるんだし
0254デフォルトの名無しさん
2009/07/17(金) 02:29:09DTLってThe Case For Dをみてると最大限Dを活かすための、ぼくのかんがえたさいきょうのコンテナライブラリを構想してる段階な感じなのかな?
0255デフォルトの名無しさん
2009/07/17(金) 02:43:120256デフォルトの名無しさん
2009/07/17(金) 03:01:03実行速度はC++よりちょい遅いくらい
0257デフォルトの名無しさん
2009/07/17(金) 03:18:04あとconstはC++の感覚で、つけられるところは全てつけていくべきですかね?
0258デフォルトの名無しさん
2009/07/17(金) 03:28:10クラス型でもinをつければconstと同じ意味があるし、outやrefは参照変数になる。
constやimmutableは積極的につけるべき。
0259デフォルトの名無しさん
2009/07/17(金) 03:34:08ほとんどinになるけど。
推移的constなのでモリモリとconstを書く必要はないが、逆にそれが嫌という例もある
むしろpure, nothrowの方が重要
0260デフォルトの名無しさん
2009/07/17(金) 04:16:39レスthx
C++でconst参照で受け取ってた部分は、Dではinにすればいいんですね。
pureとnothrowも意識してみます。
0261デフォルトの名無しさん
2009/07/17(金) 04:39:430262デフォルトの名無しさん
2009/07/17(金) 05:23:52ってあるけどさ、これってそのうちpopFrontとかfrontってのに書き変わるのかな?
現状Phobosの中のRangeのそれと食い違ってて混乱の元になる気がするのだけど。
0263デフォルトの名無しさん
2009/07/17(金) 05:24:58それはドキュメントが更新されてないだけ。
実装はfront/popFront/emptyになってる。
0264デフォルトの名無しさん
2009/07/17(金) 05:44:380265デフォルトの名無しさん
2009/07/17(金) 11:56:16Dのクラスは常に参照だからinでconst参照と思ったんですが、違いがあるんですか?
構造体の場合に違うのかな。
C++から移行したものにはガベコレが難しい。
0266デフォルトの名無しさん
2009/07/17(金) 13:12:27参照型の参照と参照渡しの参照は若干意味が違う。
0267デフォルトの名無しさん
2009/07/17(金) 15:48:48なるほど、const refとすると推移的constによって、クラスの非constメンバにアクセスできなくなるって事ですね。
でも、in MyClassで全て間に合う気がしてしまいます。
const ref MyClassとする事によって役に立つケースはどんなものがありますか?
0268デフォルトの名無しさん
2009/07/17(金) 17:09:230269デフォルトの名無しさん
2009/07/17(金) 18:19:21ref引数にはlvalueの参照を渡すわけだから、変数を書き換えられるようになるわけですよ
0270デフォルトの名無しさん
2009/07/18(土) 19:37:43でもまだドキュメント化されてない…?
0271デフォルトの名無しさん
2009/07/18(土) 20:09:38ドキュメントはあるのにどこにもリンクが無いstd.perfさんの立場も考えろよ
0272デフォルトの名無しさん
2009/07/18(土) 20:14:310273デフォルトの名無しさん
2009/07/18(土) 20:31:29というかなんでstd.dateの中にあんの?
0274デフォルトの名無しさん
2009/07/18(土) 20:40:56正直スマンかった…
まぁ、core.sync.*はTangoのそれと同じみたいだからそれ見ればいい話か…
0275デフォルトの名無しさん
2009/07/18(土) 21:29:460276デフォルトの名無しさん
2009/07/19(日) 00:44:440277デフォルトの名無しさん
2009/07/19(日) 02:06:40俺も気になってた。
1.0系、2.0系どっちの更新履歴にも名前すら出てこない。
0278デフォルトの名無しさん
2009/07/19(日) 03:44:48古いのを何個か落として確認してみたけど、なかったよ。
OutBufferのドキュメントにInBufferの名前があるだけ。
0279デフォルトの名無しさん
2009/07/19(日) 11:30:32class A{
int a;
invariant(){}
ref int fn(){
return a;
}
}
0280デフォルトの名無しさん
2009/07/19(日) 11:35:280281デフォルトの名無しさん
2009/07/19(日) 13:22:350282デフォルトの名無しさん
2009/07/19(日) 13:51:13システムプログラミング言語だったら、プログラマの意図したときに解放させたいと思うときがあるはず
0283デフォルトの名無しさん
2009/07/19(日) 14:40:320284デフォルトの名無しさん
2009/07/19(日) 15:34:48sharedRef!(A) a = sharedRef!(A)(new A);
とかやんないといけないからメンドイのです
0285デフォルトの名無しさん
2009/07/19(日) 15:38:22とかまでならできるんじゃないか?ヘルプ関数使えば。
0286デフォルトの名無しさん
2009/07/19(日) 15:54:420287デフォルトの名無しさん
2009/07/19(日) 16:09:190288デフォルトの名無しさん
2009/07/19(日) 16:24:290289デフォルトの名無しさん
2009/07/19(日) 18:19:46標準に欲しいものは作ってnews groupに投稿したらいいんだよ
0290デフォルトの名無しさん
2009/07/19(日) 18:23:220291デフォルトの名無しさん
2009/07/22(水) 15:09:03嫌がらせ?
0292デフォルトの名無しさん
2009/07/22(水) 15:45:110293デフォルトの名無しさん
2009/07/22(水) 19:29:050294デフォルトの名無しさん
2009/07/22(水) 21:03:540295デフォルトの名無しさん
2009/07/23(木) 00:03:57嬉しいよねー。パフォーマンスどうなんだろう。
0296デフォルトの名無しさん
2009/07/23(木) 00:13:16だれかFiberの旨味を教えてくれ…
0297デフォルトの名無しさん
2009/07/23(木) 00:17:420298デフォルトの名無しさん
2009/07/23(木) 00:37:02オブジェクトに状態の変数持たせなくてもローカル変数で済むし。
Stateパターンいちいち使うのもめんどいからなあ。
0299デフォルトの名無しさん
2009/07/23(木) 01:51:110300デフォルトの名無しさん
2009/07/23(木) 02:25:420301デフォルトの名無しさん
2009/07/23(木) 02:46:430302デフォルトの名無しさん
2009/07/23(木) 07:43:420303デフォルトの名無しさん
2009/07/23(木) 09:00:28ABAさんのゲーム
poeny
芝が生えるゲーム
0304デフォルトの名無しさん
2009/07/23(木) 09:19:460305デフォルトの名無しさん
2009/07/23(木) 19:24:560306デフォルトの名無しさん
2009/07/23(木) 20:28:19あるの?
0307デフォルトの名無しさん
2009/07/23(木) 20:57:570308デフォルトの名無しさん
2009/07/24(金) 00:01:490309デフォルトの名無しさん
2009/07/24(金) 16:54:34後は研究や仕事のデータ処理に使ってる人がいるくらいで
公開されたアプリケーションはあんまりないよね
0310デフォルトの名無しさん
2009/07/24(金) 18:55:080311デフォルトの名無しさん
2009/07/24(金) 20:11:26現状言語自体が不安定すぎだしコンパイラの検証・バグ取りも済んでいないので、
放棄不可でメンテナンスが必要なものには使えないというのが実情かな。
言語自体の素性は良いので自分専用のツールを作るにはもってこいだが。
0312デフォルトの名無しさん
2009/07/24(金) 20:21:110313デフォルトの名無しさん
2009/07/24(金) 20:31:35今後はJVMかLLVMの上で動く言語を考えるべきじゃなかろうか。
0314デフォルトの名無しさん
2009/07/24(金) 20:36:100315デフォルトの名無しさん
2009/07/24(金) 20:40:39現状は、最新世代レベルの記述力を持ってバイナリをゲロる言語という感じだが。
0316デフォルトの名無しさん
2009/07/24(金) 20:55:070317デフォルトの名無しさん
2009/07/24(金) 21:03:080318デフォルトの名無しさん
2009/07/24(金) 21:09:57MonaOS?
0319デフォルトの名無しさん
2009/07/24(金) 21:12:300320デフォルトの名無しさん
2009/07/24(金) 21:34:31GCアルゴリズムが選択出来るようになってるんだろうか。
0321デフォルトの名無しさん
2009/07/24(金) 21:47:460322デフォルトの名無しさん
2009/07/24(金) 21:50:44極端な話ライブラリさえあればH○Pみたいな言語仕様でもアプリを書いてもらえるのに、
言語だけどんどん改訂していくものだからいつまで経っても良いサイクルに入らない。
0323デフォルトの名無しさん
2009/07/24(金) 22:27:13こういうのはある
http://wiki.xomb.org/index.php?title=Main_Page
0324デフォルトの名無しさん
2009/07/25(土) 01:48:56選択できるようにする必要あるの
0325デフォルトの名無しさん
2009/07/25(土) 01:51:51ビルド時にオプション指定できる程度で十分だろうけど。
0326デフォルトの名無しさん
2009/07/25(土) 02:38:02いや、少なくともDに関しては
「仕様が固まってないから」という理由が大きい。
だって、せっかく作ったものでも、
ちょっとバージョンが変わるだけでコンパイルさえ通らなくなるようじゃ
怖くて大規模なものには手を出せない。
バージョンアップを楽しめる一部の人を除いて。
0327デフォルトの名無しさん
2009/07/25(土) 02:57:113.4には入ったんですが、3.5には対応してないってことなんですかね?
0328デフォルトの名無しさん
2009/07/25(土) 05:08:340329327
2009/07/25(土) 06:49:540330デフォルトの名無しさん
2009/07/25(土) 11:18:12これについて解説お願いします。
0331デフォルトの名無しさん
2009/07/25(土) 12:25:03向こうのレスにある
> テンプレートとプリプロセッサの黒魔術で無理矢理DSLを作ってどうにかする
だよ。
auto result = linq!q{
from n in numbers
where n % 2 == 0
select n
};
0x風の書き方にするとauto result = linq<"from ... n">というような式で、
linq = テンプレート関数か何かを指すシンボル。
! = テンプレートの明示的インスタンス化。テンプレートパラメタ(cppで言う<>の中身)を続けて書くと括弧が省略できる。
q{ .. } Dで有効なトークンのみを記述することが出来る文字列リテラル(これがテンプレートパラメタ)
linqの中身をコンパイル時または実行時パーサにすると、そういう構文が書けるというお話。
しばらく前にお遊びで作られた黒魔術の一つ。
実用に供すことも可能だが、やった人は知らん。
0332デフォルトの名無しさん
2009/07/25(土) 12:29:39向こうを久方ぶりに見たが、まったく同じ内容のレスがあるとは
0333デフォルトの名無しさん
2009/07/25(土) 12:34:52面白そうだから書いてみた(適当だけど)。ASTマクロが実装されてからが本番だな。
//Public Domain
string[] lexLinq(string code){
string[] r = [""];
foreach(c; code){
if(c == ' ' || c == '\r' || c == '\n' || c == '\t'){
if(r[r.length-1] != "") r ~= "";
continue;
}
r[r.length-1] ~= c;
}
return r;
}
0334デフォルトの名無しさん
2009/07/25(土) 12:36:05string aggregate, variable, condition, item, cur;
foreach(i, a; lexLinq(code)){
if (a == "from" || a == "in" || a == "where" || a == "select"){
cur = a;
continue;
}
if (cur == "from" ) variable ~= " " ~ a;
if (cur == "in" ) aggregate ~= " " ~ a; // 複数の時はstd.rangeに落とすべき
if (cur == "where" ) condition ~= " " ~ a;
if (cur == "select") item ~= " " ~ a;
}
return "
alias typeof({
mixin(\"foreach(index, "~variable~"; "~aggregate~")return "~item~";\");
assert(0);
}())[] ResultType; // イテレータかレンジで返すべき
ResultType r;
foreach(index, "~variable~"; "~aggregate~"){
if ("~condition~") r ~= "~item~";
}
";
}
0335デフォルトの名無しさん
2009/07/25(土) 12:37:33mixin(translateLinq(code));
return r;
}
import std.stdio;
void main(){
auto numbers = [1,2,3,4][];
auto result = linq!q{
from n in numbers
where n % 2 == 0
select n
}(numbers);
writefln(result);
}
0336デフォルトの名無しさん
2009/07/26(日) 01:16:14客層同じだしな
0337デフォルトの名無しさん
2009/07/26(日) 01:32:53GCない方がいいってのはなんでだ?GCあったってリソースの管理くらいできるのに。
0338デフォルトの名無しさん
2009/07/26(日) 01:40:220339デフォルトの名無しさん
2009/07/26(日) 01:42:45そうじゃないからこそ敢えてC++使ってることが多い
0340デフォルトの名無しさん
2009/07/26(日) 02:00:21ところで、GC使えなくてC++使える環境ってたとえば何があるかな?
マイコンとかだとC++すら使えなかったりしないか?
0341デフォルトの名無しさん
2009/07/26(日) 02:01:530342デフォルトの名無しさん
2009/07/26(日) 02:06:20うーん
そういう人は何があっても新しいものに移行しない希ガスるので放っておくしか
0343デフォルトの名無しさん
2009/07/26(日) 02:07:200344デフォルトの名無しさん
2009/07/26(日) 02:07:380345デフォルトの名無しさん
2009/07/26(日) 05:12:580346デフォルトの名無しさん
2009/07/26(日) 17:24:18スレッド毎にコレクトするならいいんだけどなぁ
スレッドローカル仕様になったし、そうなることに期待
0347デフォルトの名無しさん
2009/07/26(日) 19:13:05スレッドごとにコレクトしやすくなるのか
0348デフォルトの名無しさん
2009/07/27(月) 03:16:20どのトピックか忘れたけどSeanが「スレッド毎にGCを動作させるようにする」みたいなこと言ってた気がする
0349デフォルトの名無しさん
2009/07/27(月) 04:50:070350デフォルトの名無しさん
2009/07/27(月) 05:04:21これをchar[]型にコピーする最も簡単な方法は何ですか?
0351デフォルトの名無しさん
2009/07/27(月) 05:05:40それ、ロックレスなアルゴリズムと相性悪そうだな。
>>349
むしろPauseless GCが欲しい。ページフォルトをトラップすればいけるはず?
0352デフォルトの名無しさん
2009/07/27(月) 05:35:15import std.conv
to!string(cstring).dup
0353デフォルトの名無しさん
2009/07/27(月) 05:38:46ありがとう。
0354デフォルトの名無しさん
2009/07/27(月) 06:14:19参照の先がnewによって生成された物じゃない場合ってどうなってるんですか?
参照カウント方式で寿命が管理されているわけではない?
0355デフォルトの名無しさん
2009/07/27(月) 06:39:20mallocとかつかってメモリを割り当てて.__ctor()とか使ってコンストラクタを読んでクラスを作った場合、
GCにGC.addRange()でそのことを伝えておけばGCに回収されないで済む。
解放するときは.__dtor()とかfree()とか使って自力で解放する。
ただし、デストラクタでそれをやろうとすると危険かもしれない。
0356デフォルトの名無しさん
2009/07/27(月) 07:46:07なるほど。
一応GC使わない書き方もできるわけですね。
でも、さすがに手間がかかりすぎるなぁ。
0357デフォルトの名無しさん
2009/07/27(月) 18:28:20クロージャあるしクロージャリテラルあるしモジュールもあるし多態関数もあるしGCもあるし
でもリソースの管理はできないんだよな
0358デフォルトの名無しさん
2009/07/27(月) 19:53:36逆に、楽にTLS化する予約語を用意した方がいいんじゃないかと思う。
0359デフォルトの名無しさん
2009/07/27(月) 19:54:58>リソース管理
RAIIとかいう話じゃなくて?
0360デフォルトの名無しさん
2009/07/27(月) 20:41:50__thread
0361デフォルトの名無しさん
2009/07/27(月) 21:49:05D言語ってLinuxで動くわけ?
0362デフォルトの名無しさん
2009/07/27(月) 21:54:22それが自分で調べられない人には敷居の高い言語だと思う
0363デフォルトの名無しさん
2009/07/27(月) 21:57:29別に勉強しようと思っているわけじゃないんだけどな
0364デフォルトの名無しさん
2009/07/27(月) 21:59:110365デフォルトの名無しさん
2009/07/27(月) 22:22:16string j = "あいうえお";
writeln(j[0]); // 'あ' がほしい
0366デフォルトの名無しさん
2009/07/27(月) 22:28:43変換関数はPhobosのどっかにあったな
0367デフォルトの名無しさん
2009/07/27(月) 22:30:05writeln(std.utf.toUTF32(j)[0]);
0368デフォルトの名無しさん
2009/07/27(月) 22:32:070369デフォルトの名無しさん
2009/07/27(月) 22:38:190370デフォルトの名無しさん
2009/07/27(月) 22:52:570371デフォルトの名無しさん
2009/07/27(月) 23:16:02いける。toはできる子だからなんでもおまかせ。
0372デフォルトの名無しさん
2009/07/27(月) 23:21:22doFormatでやれそうなんですが、「出力は一文字ずつdelegateへ」っていうのがめんどくさいです。
もっと簡単な方法はないですか?
0373デフォルトの名無しさん
2009/07/27(月) 23:49:49toだけでどれほど邪悪な変換が出来る事やら
0374デフォルトの名無しさん
2009/07/27(月) 23:52:51所望の関数はなぜかstd.stringにある
format("%0.3lf", f);
0375デフォルトの名無しさん
2009/07/28(火) 00:05:270376デフォルトの名無しさん
2009/07/28(火) 01:10:44thx
0377デフォルトの名無しさん
2009/07/28(火) 01:29:05ポインタを使うということは、邪悪な変換とは何か知っているということさ。覚悟して使ってくれたまえよ。
何?なぜそんな邪悪を許すかって?それがeclectic languageというものさ。HAHAHA
0378デフォルトの名無しさん
2009/07/28(火) 01:39:500379デフォルトの名無しさん
2009/07/28(火) 01:54:34std.convには無いようです
0380デフォルトの名無しさん
2009/07/28(火) 03:56:325分いらん
0381デフォルトの名無しさん
2009/07/28(火) 03:58:48sscanf とか?
0382デフォルトの名無しさん
2009/07/28(火) 08:09:44strtoll
0383デフォルトの名無しさん
2009/07/28(火) 09:49:33やっぱりCの関数使うのが良さそうですね
ありがとうございました
0384デフォルトの名無しさん
2009/07/28(火) 15:50:100385デフォルトの名無しさん
2009/07/28(火) 15:56:13更新だってさ
D2にも対応して欲しいね
0386デフォルトの名無しさん
2009/07/28(火) 16:12:42long hexToDecimal(char hex)
{
return hexToDecimal([hex]);
}
long hexToDecimal(const(char)[] hex)
{
long sum;
foreach(char c; hex)
sum = sum*16 + ((c|0x20)-'0')%('W'-'0');
return sum;
}
unittest
{
assert(hexToDecimal('A') == 10);
assert(hexToDecimal("FF") == 255);
}
0387デフォルトの名無しさん
2009/07/28(火) 16:41:53昆布w
たしかにtoで対応してくれるとうれしいけども
こうなったらsscanfの機能も取り込んでしまえば…
to!("%x")(str);
0388デフォルトの名無しさん
2009/07/28(火) 18:38:040389デフォルトの名無しさん
2009/07/28(火) 18:39:240390デフォルトの名無しさん
2009/07/28(火) 20:08:360391デフォルトの名無しさん
2009/07/28(火) 20:17:500392デフォルトの名無しさん
2009/07/28(火) 20:34:390393デフォルトの名無しさん
2009/07/28(火) 20:51:17と思ってドキュメントを見ても無い
なんだ気のせいか
0394デフォルトの名無しさん
2009/07/28(火) 22:20:400395デフォルトの名無しさん
2009/07/29(水) 01:56:55それってどれだ
0396デフォルトの名無しさん
2009/07/29(水) 02:08:460397デフォルトの名無しさん
2009/07/29(水) 03:14:470398デフォルトの名無しさん
2009/07/29(水) 12:00:280399デフォルトの名無しさん
2009/07/29(水) 21:18:50マジレス厳禁
0400デフォルトの名無しさん
2009/07/30(木) 00:01:470401デフォルトの名無しさん
2009/07/30(木) 00:57:230402デフォルトの名無しさん
2009/07/30(木) 01:00:160403デフォルトの名無しさん
2009/07/30(木) 07:03:580404デフォルトの名無しさん
2009/07/30(木) 09:25:21なんだよ!!!
0405デフォルトの名無しさん
2009/07/30(木) 10:46:55存在しない物と思っておくべき?
0406デフォルトの名無しさん
2009/07/30(木) 18:27:13あなたが作ってポストすればおkって言語ですから。
0407405
2009/07/30(木) 21:21:390408デフォルトの名無しさん
2009/07/31(金) 00:22:03D言語に関するアンケートの実施です。
あなたの興味のあるトピックについて、もしよろしければご回答ください
0409デフォルトの名無しさん
2009/07/31(金) 00:47:23const void f() {
auto that = this;
writeln(typeid(typeof(this))); // C
writeln(typeid(typeof(that))); // const(C)
}
}
これ違うの気持ち悪くない?
0410デフォルトの名無しさん
2009/07/31(金) 01:24:24気持ち悪いね
0411デフォルトの名無しさん
2009/07/31(金) 01:28:55thisがconstじゃないのではなくて、typeof(this)がthisの型に関係なく常にCになる。
0412デフォルトの名無しさん
2009/07/31(金) 02:26:370413デフォルトの名無しさん
2009/07/31(金) 03:49:110414デフォルトの名無しさん
2009/07/31(金) 04:22:430415デフォルトの名無しさん
2009/07/31(金) 04:26:360416デフォルトの名無しさん
2009/07/31(金) 08:23:29なるほど。
でも、階層にできないと、規模が大きく(モジュールが多く)なってきた時に整理の面で不便なことないんですかね?
0417デフォルトの名無しさん
2009/07/31(金) 11:46:26.dをフォルダに入れたらフォルダがパッケージになるけどそういうことじゃない?
0418デフォルトの名無しさん
2009/07/31(金) 13:02:380419デフォルトの名無しさん
2009/07/31(金) 15:22:08ドット含むモジュール名にしたら普通に階層化されないか?
0420デフォルトの名無しさん
2009/07/31(金) 16:44:49int dbl(int i) { return i*2; }
に対して
int n=10;
assert(n.dbl() == 20);
って実装された?
0421デフォルトの名無しさん
2009/07/31(金) 17:38:500422デフォルトの名無しさん
2009/08/01(土) 02:10:50さっきやった時はプロジェクト直下のところと、パッケージの中と2箇所に新規パッケージができてしまったんですが、
今もう一度やったらちゃんとパッケージの中だけにできました。
さっきのはなんだったんだろう・・・。
0423デフォルトの名無しさん
2009/08/01(土) 02:11:570424デフォルトの名無しさん
2009/08/02(日) 20:14:340425デフォルトの名無しさん
2009/08/02(日) 20:33:53プラットフォーム依存を無くすために仮想マシンを用意してだな…
0426デフォルトの名無しさん
2009/08/02(日) 20:37:410427デフォルトの名無しさん
2009/08/02(日) 20:46:52コンパイラのなんのお咎めもなく外に持ち出せるって話だけど、
これはスタック変数へのポインタを関数外に持ち出せてしまう問題と同じなわけだし、
やっぱり仕方ないんじゃないかなあ。
scope変数に対する静的解析を実装すれば解決できるんだろうけど。
0428デフォルトの名無しさん
2009/08/02(日) 22:13:48じゃあ仕方なくないのかね
0429デフォルトの名無しさん
2009/08/02(日) 22:58:19typeof(this)ってのがそのクラス固有の関数を呼ぶために特別扱いされてるとかそういう関係で
型がおかしくなってるっていうバグかと思ってたんだけど、違うの?
0430デフォルトの名無しさん
2009/08/02(日) 23:15:22いあ、それとは関係ない。
誰かがどこかでつぶやいてた話。
0431デフォルトの名無しさん
2009/08/03(月) 00:03:32そっか。・・・こういうこと?↓
--------
class C{
int a;
this(ref C c){
a = 10;
c = this;
}
}
void main(){
C x;
auto c = new immutable(C)(x);
writeln(c.a);
x.a = 100;
writeln(c.a);
}
--------
・・・これはキモイね。
0432デフォルトの名無しさん
2009/08/03(月) 11:38:46import std.algorithm;
import hoge.fuga;
void hoge() {...}
これをビルドすると、
c:\省略\hoge.d(6): Error: function hoge.hoge.hoge conflicts with import hoge.hoge.hoge at c:\省略\hoge.d(4)
というエラーが出ます。
import hoge.fuga;をコメントアウトすれば、このエラーは出なくなります。
どうもhogeパッケージに入っているモジュールをimportするとエラーが発生するようです。
hogeパッケージhogeモジュールと、同名なのがだめなんでしょうか?
0433デフォルトの名無しさん
2009/08/03(月) 12:01:28hoge.hoge.hoge関数と
hoge.hoge.hogeモジュールが競合するようだが
関数があるのは自己申告で確定だから、
hoge.hoge.hogeというディレクトリがあればその競合が原因だな
0434デフォルトの名無しさん
2009/08/03(月) 12:25:26うーん、プロジェクトのフォルダの中にhogeフォルダ、そのhogeフォルダの中にフォルダはないです。
0435432
2009/08/04(火) 05:55:52モジュールhoge.hogeの中でhoge.fugaをimportするとhoge.hoge.hoge.fugaになって、
hoge.hoge.hogeの部分がパッケージ.パッケージ.パッケージなのかパッケージ.パッケージ.関数なのか判別できないっていう事なのかなぁ。
うーん、改名importにしないといけないぐらいなら、パッケージとモジュールに同じ名前をつけるのやめた方がいいか・・・。
0436デフォルトの名無しさん
2009/08/04(火) 21:53:26* "D"iving into the D Programming Language - http://www.informit.com/articles/printerfriendly.aspx?p=1381876
0437デフォルトの名無しさん
2009/08/05(水) 04:33:07Rangeの作り方が最初よく分からなかったのだが、
たとえば配列をRange化する場合、
.nextは[1..$]というスライス(の参照)を返すって事でいいんだよね?
一応listやdequeくらいは実習代わりにrangeで作ったサンプルが作れるかも?
0438デフォルトの名無しさん
2009/08/05(水) 06:26:13codepadにでも貼ろうかと思ったがcodepad側の対応バージョンが古いのであきらめる。
罠:
ドキュメントには .empty .next .retreat .head .toe が列挙されているが、
実際には .empty .popFront .popBack .front .back。
0439デフォルトの名無しさん
2009/08/05(水) 06:46:32st.iteratorとRangeの関係は?frontという名前が競合するんだが。
iteratorなしでlistに挿入って出来るの?
とか
0440デフォルトの名無しさん
2009/08/05(水) 07:26:500441デフォルトの名無しさん
2009/08/05(水) 13:51:44OutBufferをちょっといじった程度の物なので、これでいいならとっくに標準に入ってる気はしますが・・・。
何か指摘があればお願いします。
class InBuffer
{
ubyte data[];
uint offset;
invariant() { assert(offset <= data.length); }
this(in ubyte[] _data) { data = _data; }
void read(ref ubyte[] bytes) { bytes[] = data[offset..offset + bytes.length]; offset += bytes.length; }
void read(ref wchar[] chars) { read(cast(ubyte[]) chars); }
void read(ref dchar[] chars) { read(cast(ubyte[]) chars); }
void read(ref ubyte b) { b = data[offset]; offset += ubyte.sizeof; }
void read(ref byte b) { read(cast(ubyte)b); }
void read(ref char c) { read(cast(ubyte)c); }
void read(ref dchar c) { read(cast(uint)c); }
void read(ref ushort w) { w = *cast(ushort *)&data[offset]; offset += ushort.sizeof; }
void read(ref short s) { read(cast(ushort)s); }
void read(ref wchar c) { c = *cast(wchar *)&data[offset]; offset += wchar.sizeof; }
void read(ref uint w) { w = *cast(uint *)&data[offset]; offset += uint.sizeof; }
void read(ref int i) { read(cast(uint)i); }
void read(ref ulong l) { l = *cast(ulong *)&data[offset]; offset += ulong.sizeof; }
void read(ref long l) { read(cast(ulong)l); }
void read(ref float f) { f = *cast(float *)&data[offset]; offset += float.sizeof; }
void read(ref double f) { f = *cast(double *)&data[offset]; offset += double.sizeof; }
void read(ref real f) { f = *cast(real *)&data[offset] = f; offset += real.sizeof; }
void read(ref char[] s) { read(cast(ubyte[])s); }
}
0442デフォルトの名無しさん
2009/08/05(水) 17:05:36popFront は range を返すのではなくて、 range 自体を変更する。
0443デフォルトの名無しさん
2009/08/05(水) 17:08:41あるRangeの前や後ろに要素を挿入する操作を定義すればいい。
0444デフォルトの名無しさん
2009/08/05(水) 19:59:26castして代入してるけどアラインメントが揃ってないとクラッシュしちゃう
処理系もあるので、memcpyあたりでコピーするようにしたほうがいいかも
0445デフォルトの名無しさん
2009/08/05(水) 20:20:30DPDが良いのか悪いのかは別にして、D言語にあれほど
10進演算器入れてくれって言ったのに・・・・
さよなら、D言語。
0446デフォルトの名無しさん
2009/08/05(水) 21:10:160447デフォルトの名無しさん
2009/08/05(水) 22:16:13それを言い出すのなら、CやC++で充分って事で。
0448デフォルトの名無しさん
2009/08/05(水) 22:24:460449デフォルトの名無しさん
2009/08/05(水) 22:48:320450デフォルトの名無しさん
2009/08/05(水) 23:11:13それはabs()で行けるやん。
0451デフォルトの名無しさん
2009/08/05(水) 23:20:090452デフォルトの名無しさん
2009/08/05(水) 23:25:05abs?
>>451
つくれます。
0453デフォルトの名無しさん
2009/08/05(水) 23:35:450454デフォルトの名無しさん
2009/08/05(水) 23:39:480455デフォルトの名無しさん
2009/08/06(木) 00:17:42なるほど、アラインメントの事は忘れていました。
OutBufferのwrite関数はアラインメントを調節してないように見えるんですけど、
alignSize関数を使ってライブラリ利用者自身が調節してくださいっていう事ですかね。
0456デフォルトの名無しさん
2009/08/06(木) 01:28:21popFrontの挙動って配列スライス(=参照)そっくりなんすよ。
Dでlistを実装するとheadとtoeへのポインタを持つ構造体になるが、
配列の場合は配列長と先頭アドレスのポインタを持つ構造体として表現できる。
スライスは実体を動かさずに配列長と先頭アドレスだけ動かした構造体を作るもので、
listのpopFrontもheadへのポインタを動かしただけの構造体を作る実装になる。
真のメモリ回収はGC任せにするようにする。
そうでないとforeach Rangeに突っ込めないので、そういう使い方を想定しているのかと。
なのでlistにも配列と同じように、dupとidup、内容のコピー(STLのassignみたいな)が必要になるはず。
>>443
というモデルでのスライスのpushFront/Backがあれば挿入できるな。確かに。
……と思っていたが、foreach Rangeのために、popFrontした後のheadの前方要素ポインタのnull代入をしないようにしたんだが、
popFrontしたのに永遠にGCに回収されないモデルだということに気づいた。どうすんだこれ。
0457デフォルトの名無しさん
2009/08/06(木) 01:57:520458デフォルトの名無しさん
2009/08/06(木) 02:19:000459デフォルトの名無しさん
2009/08/06(木) 02:52:04例の本に載っているのかな
0460デフォルトの名無しさん
2009/08/06(木) 03:59:26リストは一つのオブジェクトで,rangeはその上の範囲を指すビューだと考えれば、
リストの一部が参照されている限り、リスト全体が破壊されることはないのは普通じゃないかな。
// ビューに関する操作
empty // 空かどうか
front. back // 現在のビューの先頭、末尾の参照
popFront(), popBack() // ビューを縮める *ビューを破壊
// リストの実体に関する操作
dup() // 現在のビューの範囲だけを取り出して新しいリストを作る(そして,その全体を表すビューを返す)
insertBefore(T), insertAfter(T) // 現在のビューの前後に要素を追加する *実体を破壊
eraseFront(), eraseBack() // 現在のビューの先頭、末尾の要素を削除する *実体を破壊
たぶんプリミティブなオペレーションで必要になるのはこの辺りだと思う。
0461デフォルトの名無しさん
2009/08/06(木) 04:24:35そんな感じかね。
Range実装の一番単純な例として、
書いたものを晒してレビューして欲しいんだが、
D言語研究とかにページ作って見てもらってもいいかな?
0462デフォルトの名無しさん
2009/08/06(木) 06:17:16対になるInBufferが作りにくいなぁ・・・。
0463デフォルトの名無しさん
2009/08/06(木) 10:28:28http://dusers.dip.jp/modules/forum/index.php?topic_id=28#post_id100
Dequeのならここにある
>>462
すでにOutBuffer使われなくなってたりして。MemoryStream+EndianStream使えば何とかなりそうだし…
0464デフォルトの名無しさん
2009/08/06(木) 11:55:15std.streamにそんな物があったとは知らなかったです。
OutBuffer必要ないですねぇ。
0465デフォルトの名無しさん
2009/08/06(木) 19:16:20cast!int(hoge);
0466デフォルトの名無しさん
2009/08/06(木) 19:28:08テンプレート関数は仮想関数になれないから駄目。
0467デフォルトの名無しさん
2009/08/06(木) 22:36:10・Qt 4.5の2009.3版は避けて2009.2を使う
・Qtのインストール先は"C:/qt-greenhouse/Trolltech/Code_less_create_more/Trolltech/Code_less_create_more/Troll/4.5.0"でないと駄目
・QtCore4.dllがねぇぞゴルァと言われたらbuild_dir/generator/にQtCore4.dllとQtXml4.dllをコピー
fedoraにインストールした時はあんなに素直だったのに…
0468デフォルトの名無しさん
2009/08/07(金) 03:25:150469デフォルトの名無しさん
2009/08/07(金) 12:48:450470デフォルトの名無しさん
2009/08/07(金) 13:37:58隠しフィールドって何ですか?privateとは違うんですか?
ぐぐっても答えが出てこないです。
0471デフォルトの名無しさん
2009/08/07(金) 14:03:55クラスの仕組みを実装するために、処理系がこっそりクラスに追加してるフィールドのこと。
だからソース中には出てこない。
0472デフォルトの名無しさん
2009/08/07(金) 14:07:12thx
0473デフォルトの名無しさん
2009/08/07(金) 15:35:49では、動的配列であるか判定するにはどうすればいいですか?
0474デフォルトの名無しさん
2009/08/07(金) 16:15:400475デフォルトの名無しさん
2009/08/07(金) 16:40:15最近trunk覗いてないな
0476デフォルトの名無しさん
2009/08/07(金) 16:42:00__traitsの方ばかり見てて、それに気がづかなかった・・・
__traitsとpobosのstd.traitsって同じような物が結構ありますけど、どこが違うんでしょうか?
0477デフォルトの名無しさん
2009/08/07(金) 16:45:33void main(){return write;}
なあこいつをどうおもう?
0478デフォルトの名無しさん
2009/08/07(金) 16:50:55__で始まるシンボルはそのうち使えなくなってもおかしくないのでは
0479デフォルトの名無しさん
2009/08/07(金) 16:52:31import std.stdio;
auto main(){return write;}
0480デフォルトの名無しさん
2009/08/07(金) 17:18:07{
enum real hoge = 1.001L;
alias hoge fuga;
}
これのfugaがpublicになるのはバグでいいんだよな?
ほかにもtemplate mixinしたのがpublicだったり…
public関連のバグはvoteでも高い値出してるんだからさっさと潰してくれたらいいのに…
0481デフォルトの名無しさん
2009/08/07(金) 17:43:39そうだったんですか。
phobosの方を使った方がいいんですね。
0482デフォルトの名無しさん
2009/08/07(金) 18:35:570483デフォルトの名無しさん
2009/08/07(金) 18:47:51ごめん
こういうことなので使えなくなるは言い過ぎたかも
Q. なぜ __add__ や __div__ といった名前を opAdd, opDiv の代わりに使わなかったのですか?
A. __ を使った予約語は、処理系特有の言語拡張を表すべきで、 言語の基本的な部分に使うものではないと考えています。
0484デフォルトの名無しさん
2009/08/07(金) 19:13:500485デフォルトの名無しさん
2009/08/07(金) 20:01:44うーむ。
しかし処理系に依存しない方法があるならそっちの方がいいですよね。
あれ?phobos自体が処理系に依存?w
0486デフォルトの名無しさん
2009/08/07(金) 20:36:09コンパイルできるだけじゃなくリンクまでできる
しかも動く
感動して涙出てきた
0487デフォルトの名無しさん
2009/08/07(金) 21:10:06・・・・・
0488デフォルトの名無しさん
2009/08/07(金) 23:31:54C++使ったら失禁しちゃうだろ……。
0489デフォルトの名無しさん
2009/08/08(土) 00:05:13int x = 2^^3;//8
0490デフォルトの名無しさん
2009/08/08(土) 00:20:55*^ pow
/^ log
として欲しいな。
max/minは昔のgccの拡張っぽく >? と <? にしてほしい。
abs演算子(単項)は何がいいだろ。
0491デフォルトの名無しさん
2009/08/08(土) 06:52:040492デフォルトの名無しさん
2009/08/08(土) 07:43:33たまーにしか使わないようなものはどうせ覚えられないんだから、
検索しやすい名前にしておかないとダメだ。
0493デフォルトの名無しさん
2009/08/08(土) 10:05:33{
Tuple!(const(int[]), const(int[])) tup(aaa[], bbb[]);
...
}
Error: aaa is used as a type
Error: bbb is used as a type
どうすればいいのでしょうか?
0494デフォルトの名無しさん
2009/08/08(土) 16:00:170495デフォルトの名無しさん
2009/08/08(土) 16:45:11Tuple!(const(int[]), const(int[])) tup(aaa, bbb);
にすると
Error: aaa is used as a type
Error: cannot have parameter of type void
Error: bbb is used as a type
Error: cannot have parameter of type void
になります。
0496デフォルトの名無しさん
2009/08/08(土) 20:01:42(DMD v1.030を使用)
class Test
{
public void print()
{
printf("(this, &this):(%p, %p)\n", this, &this);
}
}
void main()
{
Test test = new Test;
printf("(test, &test):(%p, %p)\n", test, &test);
test.print();
}
0497493
2009/08/08(土) 20:02:21でも、constが含まれるとエラー(tupleのソース見ても明らかにconstは無理)。
const配列を含むタプルはどうやって作ればいいんだろう・・・。
0498デフォルトの名無しさん
2009/08/08(土) 20:54:56class Test {
public void print() { writef("(this, &this):(%p, %p)\n", this, &this); }
void isSelf(Test a, Test b) {
writefln("this:a %b this:b %b a:b %b", this is a, this is b, a is b);
writefln("&this: %p &a: %p &b: %p\n", &this, &a, &b);
}
}
void main()
{
Test test = new Test, test2 = new Test;
writef("(test, &test):(%p, %p)\n", test, &test);
test.print();
test.isSelf(test, test2);
writef("(test2, &test2):(%p, %p)\n", test2, &test2);
test2.print();
test2.isSelf(test, test2);
}
0500デフォルトの名無しさん
2009/08/09(日) 02:59:580501デフォルトの名無しさん
2009/08/09(日) 08:07:12頻出処理ではないのに貴重な記号を使うのはもったいないのと
複数要素、およびコンテナ、イテレータのことを考えると記号でやる処理にしては複雑すぎるのと
本来数学でさえ記号を使わないのでいらないと思う
absの記号は|n|以外だとむしろわかりにくいのでこれでないならいらないかな
0502デフォルトの名無しさん
2009/08/09(日) 08:56:02uintのaliasなのかと思ったら何これ?
alias typeof(int.sizeof) size_t;
typedef uint size_t;
にしたらいいのか?
0503デフォルトの名無しさん
2009/08/09(日) 09:05:51sizeofプロパティの型をsize_tとするって意味じゃね。
uint決め打ちじゃなくて。
0504デフォルトの名無しさん
2009/08/09(日) 11:17:280505デフォルトの名無しさん
2009/08/09(日) 11:33:23なるほど環境で変わるってことね
0506デフォルトの名無しさん
2009/08/09(日) 12:07:50うまくconstをつける方法はありますでしょうか
0507デフォルトの名無しさん
2009/08/09(日) 13:05:44ただし>>210
0508デフォルトの名無しさん
2009/08/09(日) 13:21:40const オブジェクトへの書き換え可能な参照ではなく、
書き換え可能な配列へのconst参照を作るにはどうしたら良いのかなと……
推移的constで中身も書き換え不可能にならないようにするには、と。
0509デフォルトの名無しさん
2009/08/09(日) 13:28:01配列自体をやり取りしようとすると一瞬にして破綻するけど
0510デフォルトの名無しさん
2009/08/10(月) 10:30:37詳細までキッチリ書いてある仕様書のような物ってないんですかね?
0511デフォルトの名無しさん
2009/08/10(月) 11:18:590512デフォルトの名無しさん
2009/08/10(月) 13:11:09Phobosのソースはよくみますが、言語仕様を理解しきれてなくて分からない時があります。
コンパイラのソースも付いていたのは気づきませんでした。
読むの大変そうだ・・・
0513デフォルトの名無しさん
2009/08/10(月) 13:34:51それともDMDの挙動がD言語の仕様に決められてるの?
0514デフォルトの名無しさん
2009/08/10(月) 14:02:490515デフォルトの名無しさん
2009/08/10(月) 14:08:260516511
2009/08/10(月) 14:28:13コンパイラの方は冗談のつもりでした・・・
私は、実装がどうであれドキュメント化されなければD言語の仕様としては「未定義」であると思っています。
ですので、説明不足に感じるところがあるのであれば、ウォルターたんに直接
「〜〜だからドキュメント化してくれ!」
ってお願いしに行くのが一番いいのではないかと思います。
0517512
2009/08/10(月) 16:03:53ドキュメントが不足してたり、ぐぐっても出てくる物が少ないところがD言語はつらいです。
言語の仕様はいいんだけどなぁ。
0518デフォルトの名無しさん
2009/08/10(月) 16:44:31Dは現状で特に説明不足と感じることもないなあ。
まあ自分で処理系を作ろうと思ったら大変なのかも、程度。
0519デフォルトの名無しさん
2009/08/10(月) 16:59:05平気で破壊的更新をするウォルたんなんだから、
気にせず適当に使うのがいいとおもう
0520デフォルトの名無しさん
2009/08/10(月) 17:00:490521デフォルトの名無しさん
2009/08/10(月) 17:49:04仕様なんていちいちチェックしないで適当に書いた方がいい
D言語の仕様は決まってない&書いてない&そのうち変わるの三拍子
0522デフォルトの名無しさん
2009/08/10(月) 18:23:370523512
2009/08/10(月) 19:51:540524デフォルトの名無しさん
2009/08/10(月) 20:33:04・リリースから1日の時点でプログラマが頭から血を流して倒れていた
・足元がぐにゃりとしたのでドキュメントをめくってみると仕様が未定義だった
・tangoとGUIライブラリを突っ込んで倒れた、というかビルドする前にバグとかを修正する
・constがcastに襲撃され、constも「immutableも」全員編集された
・リリースから翌日までの10時間の間に破壊的変更に襲われた
・Dプログラマの全員がレイプ経験者。しかもD1が安定しているという都市伝説から「初心者ほど危ない」
・「そんな危険なわけがない」といってコーディングしたプログラマが5分後アクセス違反まみれで戻ってきた
・「何も書かなければエラーになるわけがない」と-safeをつけてコンパイルしたコードがphobosのエラーを食らって戻ってきた
・templateから半径200行はエラーにあう確率が150%。dmdのバグに襲われてdsssのバグに襲われる確率が50%の意味
・dmdにおける更新による修正は1月平均120件、うち約20件が破壊的変更
0525デフォルトの名無しさん
2009/08/10(月) 20:49:41最後の
それだけの変更はどうせ長続きしないからむしろ歓迎w
0526デフォルトの名無しさん
2009/08/10(月) 22:22:52C:\dmd\windows\bin\..\..\src\phobos\std\typecons.d(352): Error: can only initialize const member _field_field_0 inside constructor
Tupleのコンストラクタ↓
this(U...)(U values) if (U.length == Types.length)
{
foreach (i, Unused; Types)
{
field[i] = values[i];
}
}
拾ってきたサンプルコード↓
void print_all(T...)(T xs)
{
foreach(x; xs)
writeln( x, " : ", typeid(typeof(x)) );
}
print_allにconstを渡してもエラーが出ないのに、Tupleのコンストラクタでエラーが出る意味がわからないです。
どういうことなのでしょう?
0527デフォルトの名無しさん
2009/08/10(月) 22:34:04class A {
const(int[]) aaa;
this() {
aaa.length = 1;
aaa[0] = 1; // これは通らない
aaa = [1]; // これは通る
}
}
0528デフォルトの名無しさん
2009/08/11(火) 05:58:49うーん、fieldがconstになる理由が、ソース見てもわからないです。
constを要素にできないのは、Tupleの仕様なんですかね?
0529デフォルトの名無しさん
2009/08/11(火) 13:52:00http://www.reddit.com/r/programming/comments/99aea/reddit_what_programming_language_do_you/c0bwdq1#
0530デフォルトの名無しさん
2009/08/11(火) 15:26:00どうなるのか楽しみ
0531デフォルトの名無しさん
2009/08/11(火) 15:56:01今までの疑似プロパティも継続して使えるのかどうかが気になる
0532デフォルトの名無しさん
2009/08/11(火) 16:23:15D言語ユーザー阿鼻叫喚に期待
0533デフォルトの名無しさん
2009/08/11(火) 16:46:430534デフォルトの名無しさん
2009/08/11(火) 16:47:140535デフォルトの名無しさん
2009/08/11(火) 16:57:13問題があったのかな
0536デフォルトの名無しさん
2009/08/11(火) 17:20:23ターミネーター2。
じゃなくて、話の流れからして、D2用Tangoのことでしょうね。
0537デフォルトの名無しさん
2009/08/11(火) 17:34:41行頭で並んでると全角と半角の違いが気になる
0538デフォルトの名無しさん
2009/08/11(火) 21:14:330539デフォルトの名無しさん
2009/08/11(火) 22:50:50できないようになるじゃん。
D言語ゴルファー涙目だな。
0540デフォルトの名無しさん
2009/08/11(火) 23:16:22俺も好きだった。まあ>>538の問題は気になってたけど。
うれしさ半分さびしさ半分って感じだなあ。
0541デフォルトの名無しさん
2009/08/11(火) 23:26:500542デフォルトの名無しさん
2009/08/12(水) 10:10:130543デフォルトの名無しさん
2009/08/12(水) 11:22:30{}
auto result = count!("a.func(b.member)")(hoges, fuga); // ここでエラー
Error: static assert "Bad binary function q{a.func(b.member)}. You need to use a valid D expression using symbols a of type const(Hoge) and b of type Fuga."
述語にメンバ関数は使えないのでしょうか?
何か方法はないですか?
0544デフォルトの名無しさん
2009/08/12(水) 17:20:510545デフォルトの名無しさん
2009/08/12(水) 17:27:250546デフォルトの名無しさん
2009/08/12(水) 17:45:05auto result = count!("(Hoge x, Fuga y){return a.func(b.member);}(a,b)")(hoges, fuga);
これもやってみたがdmdがクラッシュした
import std.algorithm;
class Hoge{bool func(int){return true;}}
class Fuga{int member(){return 0;}}
void main(){
Hoge[] hoges = [new Hoge];
Fuga fuga = new Fuga;
if (hoges[0].func(fuga.member)) {}// OK
{// NG
//auto result = count!("(Hoge x, Fuga y){return x.func(y.member);}(a,b)")(hoges, fuga);
}{// OK
bool f(Hoge a, Fuga b) {return a.func(b.member);}
auto result = count!(f)(hoges, fuga);
}{// OK
auto result = count!((Hoge a, Fuga b){return a.func(b.member);})(hoges, fuga);
}
}
0547546
2009/08/12(水) 17:46:02auto result = count!("(Hoge x, Fuga y){return x.func(y.member);}(a,b)")(hoges, fuga);
0548デフォルトの名無しさん
2009/08/12(水) 19:12:01thx
文字列で式渡す方式は何か制限かあるという事でしょうか(あるいはバグ?)。
関数を渡すか、関数ポインタを渡す事にします。
0549デフォルトの名無しさん
2009/08/12(水) 19:38:02ただ、Phobosのソースコードを読むと、開発者は
auto result = count!("a.func(b.member)")(hoges, fuga);
というコードが通るように書いているつもりのような気がする。(std.functional.binaryFunImplのあたり)
0550デフォルトの名無しさん
2009/08/12(水) 20:38:000551デフォルトの名無しさん
2009/08/12(水) 20:42:38明示的にキャストしといてそんな
0552デフォルトの名無しさん
2009/08/12(水) 20:56:310553デフォルトの名無しさん
2009/08/12(水) 21:59:570554デフォルトの名無しさん
2009/08/13(木) 00:09:110555デフォルトの名無しさん
2009/08/13(木) 00:56:08Dのenumともなれば一覧取る機能とか名前取る機能とか当たり前のようにある…
そんな風に考えていた時期が、俺にもありました
0556デフォルトの名無しさん
2009/08/13(木) 02:26:35その程度コンパイルタイムリフレクションで余裕です
0557デフォルトの名無しさん
2009/08/13(木) 02:30:36文字列mixinは、あくまでmixinする箇所にそのコードが書いてあるように振る舞うから、
デリゲートのようにローカル変数を使ったり、mixinしているモジュールでimportしていないモジュールの型を使ったりすることはできない。
0558デフォルトの名無しさん
2009/08/13(木) 04:46:46というかin節でassert(hoge, std.conv.text(hoge));が通らないのが困る
0559デフォルトの名無しさん
2009/08/13(木) 08:29:07バグでないとするなら、どういった事情でこの仕様になったのか疑問な気もします。
>>557
a.funcもb.memberもテンプレートで渡したhogesとfugaのメンバーなので使えないとおかしい気がします。
binaryFunImplの中で出てくるElementType1、ElementType2はどこで宣言されているんでしょう?
0560デフォルトの名無しさん
2009/08/13(木) 08:52:57関数の仕様じゃなくてmixinの仕様と言ってるのでは
0561デフォルトの名無しさん
2009/08/13(木) 10:04:49mixinの仕様というのは
> 文字列mixinは、あくまでmixinする箇所にそのコードが書いてあるように振る舞うから、
ということですよね?
void f(T)(T t) {
t.func();
}
これは当然OKだから、t.func();がmixinであっても同じ事になるのではないか(むしろならないと不便)と思いました。
0562デフォルトの名無しさん
2009/08/13(木) 11:59:35template mixinとtemplateがごっちゃになってない?
下記のコードをdmd a bでコンパイルするとき
fがa.dにあれば動くけど
b.dにあったらbではimport std.stdio;してないのでwritelnがないため動かない
// a.d
import std.stdio;//ここでimportしても無意味
import b;
void main() {
f!(`writeln("hoge");`)();
}
// b.d
void f(string s)(){
mixin(s);
}
同様にaで定義された型をb.funcに与えることもできない
0563デフォルトの名無しさん
2009/08/13(木) 12:48:04その例は>>543の問題とは別物になってるような・・・
// a.d
import b;
struct Hoge { void func() {} }
void main() {
Hoge hoge;
f!("a.func()")(hoge);
}
// b.d
void f(string s, T)(T a){
a.func();// もちろんOK
mixin(s);// ならこれもOKのはず?
}
std.algorithmのcountもソース見るとこの挙動を期待して書いているように思う。
0564デフォルトの名無しさん
2009/08/13(木) 13:00:03それf!("a.func();")(hoge);に直したら動くけど
0565デフォルトの名無しさん
2009/08/13(木) 13:16:29ははっ、ドジっ娘め
0566デフォルトの名無しさん
2009/08/13(木) 13:19:37ああ、ごめん。ミスった。
auto result = count!("a.func(b.member)")(hoges, fuga);が通らないのは
std.functional.binaryFunのバグじゃないかな。
0567デフォルトの名無しさん
2009/08/13(木) 22:13:34http://www.digitalmars.com/d/archives/digitalmars/D/bugs/Issue_3217_New_std.functional.binaryFunImpl_doesn_t_support_UDT_with_string_functions_therefore_18373.html
これか
0568デフォルトの名無しさん
2009/08/13(木) 23:23:20いつになったら直るのだろうか
0569デフォルトの名無しさん
2009/08/14(金) 08:31:010570デフォルトの名無しさん
2009/08/14(金) 11:10:25パッチ送ったらしいけど
直ってないところを見ると
うちらが直しても無駄みたいだな
0571デフォルトの名無しさん
2009/08/14(金) 11:14:350572デフォルトの名無しさん
2009/08/14(金) 12:55:13testAsExpressionの部分が変じゃね?
binaryFunの方をunaryFunに揃えたらなんとかなる気がする
0573デフォルトの名無しさん
2009/08/14(金) 15:58:46The patch in brief:
enum testAsExpression = "{ ElementType1 "
~parm1Name~"; ElementType2 "
~parm2Name~"; return ("~fun~");}()";
って>>567に書いてある。
0574デフォルトの名無しさん
2009/08/14(金) 18:34:02私の英語力は100点満点中5.3点です
0575デフォルトの名無しさん
2009/08/14(金) 19:32:20俺がbugzillaにphobos関連のミスを報告しといたら、andreiが担当責任者を自ら引き受けてたけど
0576デフォルトの名無しさん
2009/08/14(金) 20:13:110577デフォルトの名無しさん
2009/08/14(金) 22:11:470578デフォルトの名無しさん
2009/08/14(金) 22:14:160579デフォルトの名無しさん
2009/08/15(土) 17:50:211つのモジュールに関数とunittest書いて、コンパイル引数に-unittest指定して、
そのモジュール1つだけをコンパイルしたんですが、どうも単体テストが実行されてないようです(明らかにエラーなassert書いても何もなし)。
0580デフォルトの名無しさん
2009/08/15(土) 18:45:32前から思ってたんだけどなんで実行時なんだろ?
0581デフォルトの名無しさん
2009/08/15(土) 19:10:32え、そうだったんですか・・・。
コンパイル時に実行してくれると便利なのに。
0582デフォルトの名無しさん
2009/08/15(土) 19:15:270583デフォルトの名無しさん
2009/08/16(日) 12:41:580584デフォルトの名無しさん
2009/08/16(日) 12:55:450585デフォルトの名無しさん
2009/08/16(日) 13:57:380586デフォルトの名無しさん
2009/08/17(月) 00:18:310587デフォルトの名無しさん
2009/08/17(月) 01:17:01import std.stdio, core.exception;
void assert_test(T, string file=__FILE__, ulong line=__LINE__)(lazy T eval, lazy string msg)
{
try{
assert(eval());
}catch( AssertError e ){
writefln("%s", msg());
}
}
void main()
{
assert_test(1==0, "error!");
writefln("end");
}
出力:
error!
end
assertは結局AssertErrorを投げるので、これを食べる関数を作れば
>584 の意図は達成できる
0588デフォルトの名無しさん
2009/08/17(月) 01:20:56忘れてた
catch節をこうしておけば組み込みのassertっぽくファイルと行位置も出力できる
writefln("AssertError@%s(%s): %s", file, line, msg());
0589デフォルトの名無しさん
2009/08/17(月) 02:20:10http://www.kmonos.net/alang/d/techtips/unittests.html
ここの、
unittest {
try {
assert(...);
...
} catch (std.asserterror.AssertError ae) {
ae.print();
}
}
これを言いたかったのではないかなと予想
0590デフォルトの名無しさん
2009/08/17(月) 02:45:050591デフォルトの名無しさん
2009/08/17(月) 08:28:42さあ? それでそれがどうしたと言わざるを得ない
0592デフォルトの名無しさん
2009/08/17(月) 11:18:28static assert ってのがあって、これはコンパイル時に実行される。
0593デフォルトの名無しさん
2009/08/17(月) 12:47:18いつの間に
0594デフォルトの名無しさん
2009/08/17(月) 18:03:180595デフォルトの名無しさん
2009/08/17(月) 20:20:440596デフォルトの名無しさん
2009/08/17(月) 21:01:07やっぱりdmdはdmdで作るべきだろ
0597デフォルトの名無しさん
2009/08/17(月) 21:53:08CでよりはC++で書いて欲しいけど
0598デフォルトの名無しさん
2009/08/18(火) 00:06:14アジャイル(笑)なのでしょうがない
0599デフォルトの名無しさん
2009/08/18(火) 00:09:37次の行で詰むんだけど
0600デフォルトの名無しさん
2009/08/18(火) 00:20:45>>591
そもそもC++はGCとの相性でくるみにくいし、
Cならくるまなくてもそのまま使えるしな
>>595
とりあえず -g -debugを入れて-Oを切ればInternal Compiler Errorでコケることは減る
かといって問題が解決するわけでもないが
0601デフォルトの名無しさん
2009/08/18(火) 00:52:160602デフォルトの名無しさん
2009/08/18(火) 00:55:17Tで受け取ればstructの擬似interfaceまでできるし
0603デフォルトの名無しさん
2009/08/18(火) 00:58:54ここはどうしても多態という場面があってそこには使える
interfaceじゃないけどstructにコンセプト的なものが欲しくなった
ユーザ側が拡張するときにこれは実装してくれという
Rangeなんかちょうどそんな感じだしな
0604デフォルトの名無しさん
2009/08/18(火) 02:46:36モジュール指定が絶対必要な関数を作る方法がほしい
0605デフォルトの名無しさん
2009/08/18(火) 07:36:110606デフォルトの名無しさん
2009/08/18(火) 08:13:59何のことかと思ったらこういうことか
int[2] a = [1,2];
immutable(int)[2] b = a.idup;
0607デフォルトの名無しさん
2009/08/18(火) 08:26:24どんなコード?
>>603
template isHoge(T) { enum isHoge = is(typeof( { ... } ); } とconcept ifでできたような気がしたがやってみたらできなかった・・・
is(typeof({})) じゃなかったっけ?
0608デフォルトの名無しさん
2009/08/18(火) 11:23:36opDotとかじゃね?
0609デフォルトの名無しさん
2009/08/18(火) 21:22:520610デフォルトの名無しさん
2009/08/18(火) 21:28:230611デフォルトの名無しさん
2009/08/18(火) 22:51:42いける。
でも最新verには対応してなくて、pureやimmutableがキーワードとして認識されない。
0612デフォルトの名無しさん
2009/08/19(水) 12:11:33uint[] dataIndex;
sort!("data[a] > data[b]")(dataIndex);
こんな風にdataIndexをソートしたいんですが、上記のコードは通りません。
C++なら関数オブジェクトを渡す方法を考えるのですが、Dのsortはデリゲート版がないようです。
どうすればいいのでしょうか?
0613デフォルトの名無しさん
2009/08/19(水) 12:29:40http://dusers.dip.jp/modules/wiki/?SampleCodes%2FPhobos%2Frange%2F1
ここにそのままの記事が。
0614デフォルトの名無しさん
2009/08/19(水) 12:47:45どうもです。
そこのサンプルコードをコンパイルするとStack overflowになってしまいます。
なんでだろう?
0615デフォルトの名無しさん
2009/08/19(水) 13:34:55環境によってできるできないがあるのかもしれない。
0616デフォルトの名無しさん
2009/08/19(水) 14:05:32どうもです。
2.031入れたらコンパイルできました。
0617デフォルトの名無しさん
2009/08/19(水) 17:08:260618デフォルトの名無しさん
2009/08/19(水) 17:44:170619デフォルトの名無しさん
2009/08/19(水) 19:21:35thx
静的配列と動的配列で挙動が違うのかー。分かりづらい。
0620デフォルトの名無しさん
2009/08/19(水) 21:51:20algorithmに渡せるRangeは動的配列だけで静的配列は渡せないなんて嫌だw
0621デフォルトの名無しさん
2009/08/19(水) 23:00:350622デフォルトの名無しさん
2009/08/19(水) 23:06:49thx
知らないと気づかないなぁ。
0623デフォルトの名無しさん
2009/08/19(水) 23:10:200624デフォルトの名無しさん
2009/08/20(木) 01:38:57import std.algorithm;
int[] data = [ 2, 3, 1, 5, 0 ];
uint[] dataIndex = new uint[data.length];
makeIndex(data, dataIndex);
foreach(i; dataIndex) write(data[i], " ");
0625デフォルトの名無しさん
2009/08/20(木) 19:01:28すみませんmakeIndexがどういう操作(なぜdataがいるのか?)でwriteがどういう操作なのかわからないです。
0626デフォルトの名無しさん
2009/08/20(木) 19:32:54きっと std.algorithm.makeIndex と std.stdio.write のこと
0627デフォルトの名無しさん
2009/08/20(木) 20:13:42どうもです。
makeIndexは目的にぴったりですね。
0628デフォルトの名無しさん
2009/08/20(木) 21:18:120629デフォルトの名無しさん
2009/08/21(金) 08:19:5310月にはD3だっけ
0630デフォルトの名無しさん
2009/08/21(金) 13:45:51std.stringをimportするとdeprecatedのstd.string.findがimportされて、
std.algorithm.findと衝突するのがめんどくさいです。
0631デフォルトの名無しさん
2009/08/21(金) 14:28:27http://pc12.2ch.net/test/read.cgi/tech/1234363551/702
702 名前:デフォルトの名無しさん:2009/05/12(火) 19:26:46
>>697
でけたよ
http://codepad.org/MKHVHlFS
0632デフォルトの名無しさん
2009/08/21(金) 14:39:27import std.algorithm;
alias std.algorithm.find find;
ってすればいいんじゃないかな
0633デフォルトの名無しさん
2009/08/21(金) 15:11:46ありがとうございます。
とりあえず簡単なaliasでかぶせる方法にします。
0634デフォルトの名無しさん
2009/08/21(金) 16:33:040635デフォルトの名無しさん
2009/08/21(金) 17:58:470636デフォルトの名無しさん
2009/08/21(金) 18:01:10std.string: deprecated std.string.find and std.string.find, replaced with std.string.indexOf;
deprecated std.string.rfind and std.string.irfind, replaced with std.string.lastIndexOf;
added flag CaseSensitive for indexOf and lastIndexOf;
removed startsWith and endsWith because std.algorithm defines them;
defined std.string.byDchar.
0637デフォルトの名無しさん
2009/08/21(金) 18:19:08よく追いかけているねえ
0638デフォルトの名無しさん
2009/08/21(金) 21:44:260639デフォルトの名無しさん
2009/08/21(金) 22:04:050640デフォルトの名無しさん
2009/08/21(金) 22:24:45ChangeLog見てたらconcept-ifのバグをなんたらとか書いてあったんで
concept-ifでサイト内検索かけてみたけど見つからなかったんです><
0641デフォルトの名無しさん
2009/08/21(金) 22:30:21教えていただきたいのですが
0642デフォルトの名無しさん
2009/08/21(金) 22:31:460643デフォルトの名無しさん
2009/08/21(金) 22:58:18中身は>>642
0644デフォルトの名無しさん
2009/08/21(金) 23:21:25>>643
ありがとうございました!
うまく出力できました
0645デフォルトの名無しさん
2009/08/21(金) 23:24:01tango.sys.win32.CodePage.CodePage.intoがある。
引数のdstはUTF-8が日本語3バイトに対してShift_JISは2バイトなため、最低srcのバイト数+1のバッファ(最後に\0の末尾文字が入る)を用意すればいい
----- 以下サンプル ----
import tango.io.device.File;
import tango.sys.win32.CodePage;
void main()
{
scope f = new File("test.txt", File.WriteCreate);
scope (exit) f.close;
// mbs
{
char[] src = "あいうえお";
char[] dst = new char[src.length+1];
dst = CodePage.into(src, dst, 932);
f.write(dst);
}
// ascii
{
char[] src = "abcde";
char[] dst = new char[src.length+1];
dst = CodePage.into(src, dst, 932);
f.write(dst);
}
}
0646デフォルトの名無しさん
2009/08/22(土) 00:49:120647デフォルトの名無しさん
2009/08/22(土) 01:08:54どうだろう
アダプタはどんな機能を持っているの?
0648デフォルトの名無しさん
2009/08/22(土) 01:20:22メソッドをbindしたい。
構造としてはこんな感じ。
interface I { void f(int i); }
class C : I { ... }
class Adapter(T:I, int fix) : T
{ this(A...) { super(A); }
void f() { f(fix); }
}
シンボルI, Cはすでにクラスとして使われていて、今からテンプレートにするのが難しい。
同じ目的を果たすのに別の解があればそれでも良いんだが、さてどうしたものかなと。
ちなみにC++ではだいたい目的どおりのコードが書けて、発想が縛られてるのかも。
0649デフォルトの名無しさん
2009/08/22(土) 02:15:260650デフォルトの名無しさん
2009/08/22(土) 02:24:55Adapterの更に子クラスを作ってそいつをテンプレートにする。
0651デフォルトの名無しさん
2009/08/22(土) 02:57:33どうにもうまく親クラスのコンストラクタにたどり着けなかった
親のopCallを呼ぶと親が帰ってくるという罠が……
>>650
同じくsuper.superに届かず
とりあえずあきらめてみる
0652デフォルトの名無しさん
2009/08/22(土) 04:44:02こんなかんじかな?
http://tinyurl.com/nykscv
問題は親が複数のコンストラクタを持っている場合…
is式でオーバーロードされた関数の引数のタプルってどうやって得るんだろう?
0653デフォルトの名無しさん
2009/08/22(土) 13:52:10それがエラーになるのは、コンパイラが自動生成するthis()と、
ユーザ定義のthis(T...)(T)がコンフリクトしているのが原因。
今のところテンプレートと非テンプレートはオーバーロードできないけど、
MLでウォルたんはこれをできるようにしたいと言っていたから、ちょっと待てばいいと思う。
0654デフォルトの名無しさん
2009/08/22(土) 13:52:46auto _this = GC.malloc(typeof(this).sizeof);
auto ci = typeof(this).classinfo;
_this[0..ci.init.length] = ci.init;
(cast(typeof(super))_this).__ctor(args);
return cast(typeof(this))_this;
}
0655デフォルトの名無しさん
2009/08/22(土) 14:02:16std.traits.ParameterTypeTupleあたりに解決法が書かれているかもしれないが、ちょっと分からず。
std.typecons.Uniqueを見てopDot + alias thisを使った委譲に切り替えようかなと思ったのだが、
肝心のUniqueが動かない?中身を見るとコンストラクタテンプレートがコメントアウトしてあってnot work YETと書いてある。
0656デフォルトの名無しさん
2009/08/22(土) 14:40:300657デフォルトの名無しさん
2009/08/22(土) 16:26:35ぱっと見黒魔術にしか見えない
0658デフォルトの名無しさん
2009/08/22(土) 16:28:01マジで!!それは嬉しい
0659デフォルトの名無しさん
2009/08/22(土) 19:23:55難しくないよ。
0660デフォルトの名無しさん
2009/08/22(土) 20:38:09Error 42: Symbol Undefined _D5win327winuser13MSGBOXPARAMSA6__initZ
0661デフォルトの名無しさん
2009/08/22(土) 20:49:19ってすると構造体の初期化すっ飛ばせるから、とりあえずそのエラーは消えると思う。
まともにそのエラー消すなら、スタティックリンクライブラリを作ってリンクする。
0662デフォルトの名無しさん
2009/08/22(土) 20:54:05そのスタティックリンクライブラリを用意できなくて困ってます(。´・ω・)
0663デフォルトの名無しさん
2009/08/22(土) 21:03:52ですが、D言語用に変換できないのです。
0664デフォルトの名無しさん
2009/08/22(土) 21:21:34MSGBOXPARAMS param = void;
としたらメッセージボックスが表示されましたので、
これで行こうかなと思います。
ありがとうございました^^
0665デフォルトの名無しさん
2009/08/22(土) 23:17:16中にmakefileが入ってると思うので、それをgnuのmakeでコンパイルする。
0666デフォルトの名無しさん
2009/08/22(土) 23:56:37やってみましたが、LIBファイルが生成されてないようですorz
一応、make.exeを実行するとDOS窓にファイル名がずら〜と出てくるのですが。
何かmakefileを弄る必要があるのでしょうか?
0667デフォルトの名無しさん
2009/08/23(日) 00:08:19D1.0系だと行けたけど…makefileの修正が必要だね。下手したらソースコードも直さないとだめかも。
0668デフォルトの名無しさん
2009/08/23(日) 01:24:57スタティックリンクじゃなくてbudではできないの?
0669デフォルトの名無しさん
2009/08/23(日) 01:28:210670デフォルトの名無しさん
2009/08/23(日) 01:32:50budはimport関係にあるモジュールを勝手にimportしていってくれるビルド支援ツール
>>668 はこれじゃダメ?ってこと
> bud main -Ic:\d\dmd2\src\win32port // 例の win32 binding
//main .d
import win32.windows;
void main() {
MSGBOXPARAMS param;
with (param) {
lpszText = "test";
//...
}
MessageBoxIndirect(¶m);
}
0671デフォルトの名無しさん
2009/08/23(日) 02:05:47できました^^
警告ありですが・・・
lz32.lib
Warning 2: File Not Found lz32.lib
rpcns4.lib
Warning 2: File Not Found rpcns4.lib
これからはD言語のビルドにbudを用いたほうが良いのでしょうか。
0672デフォルトの名無しさん
2009/08/23(日) 02:18:30何にせよbudやrebuild,あとdsss?などを使うとソースからのビルドは割と簡単になるので検討してみてください
ちなみにそのリンクエラーはお好きなものをどうぞw
1)気にしない
2)空の.dファイルから.libファイルを作ってリンクしてごまかす
bud lz32 -lib && bud main
3)正規のlibをdmd用に変換する
0673デフォルトの名無しさん
2009/08/23(日) 02:20:04wktk
D言語サポートするかな
357 名前:デフォルトの名無しさん[sage] 投稿日:2009/08/18(火) 01:39:58
D言語はサポートされないっぽい。
F#言語はサポートされるらしいが。(ベータ版インストールするとDはないがF#はあった)
358 名前:デフォルトの名無しさん[sage] 投稿日:2009/08/18(火) 05:46:58
D言語なんかいらん
359 名前:デフォルトの名無しさん[sage] 投稿日:2009/08/18(火) 06:54:46
D.NETとか存在価値無さすぎ
360 名前:デフォルトの名無しさん[sage] 投稿日:2009/08/18(火) 07:06:18
言語増やすな
日本語実装しろ
0674デフォルトの名無しさん
2009/08/23(日) 02:23:080675デフォルトの名無しさん
2009/08/23(日) 02:53:590676デフォルトの名無しさん
2009/08/23(日) 03:26:39…サポートされなくて当たり前じゃね
0677デフォルトの名無しさん
2009/08/23(日) 03:50:060678デフォルトの名無しさん
2009/08/23(日) 03:57:300679デフォルトの名無しさん
2009/08/23(日) 04:00:570680デフォルトの名無しさん
2009/08/23(日) 12:06:34…あれ?Sunって会社あったよね?
0681デフォルトの名無しさん
2009/08/23(日) 12:07:26じきにOracleに吸収されるけど
0682デフォルトの名無しさん
2009/08/23(日) 12:59:230683デフォルトの名無しさん
2009/08/23(日) 16:52:06-version=WindowsXP
としたらコンパイルは通るのですが、リンカエラーが・・・
Error 42: Symbol Undefined _AddFontResourceExA@12
DMDに標準でついてくるgdi32.libの中にあるのに何でだろう?
0684デフォルトの名無しさん
2009/08/23(日) 17:54:09ってどうなるの?
const(int[]) hoge()なの?
int[] hoge() const;なの?
0685デフォルトの名無しさん
2009/08/23(日) 17:56:230686683
2009/08/23(日) 18:05:42解決。
0687デフォルトの名無しさん
2009/08/23(日) 18:28:530688デフォルトの名無しさん
2009/08/23(日) 18:35:25void hoge(){}
void fuga(){}
nothrow private:
void piyo(){}
このとき、piyoはpureだったりconstだったりするんだろうか?
そうだったとして(というか挙動的にそうっぽいけど)、それを無効化することはできるんだろうか?
0689デフォルトの名無しさん
2009/08/23(日) 19:08:200690デフォルトの名無しさん
2009/08/23(日) 19:20:31public, private, protected, package以外には使いにくそうだな。
インデント増やさずに使えるから>>687の解決策にどうかと思ったけど…
0691デフォルトの名無しさん
2009/08/23(日) 19:29:24* 仮引数が全て invariant もしくは invariant に変換可能で
* グローバルの mutable な状態を読み書きしない
だから、自動的に
pure ⊂ const(スコープ外のインスタンス変数に書かないし、読めさえしない)
pure ⊂ staic(スコープ外のインスタンス変数にアクセスしない)
だと思うのだが……
インスタンス内のimmutableなものは読み書きできるということであれば成り立たなくなるのかな?
0692デフォルトの名無しさん
2009/08/23(日) 19:31:48インデントしなければいいや
と考えるんだ
0693デフォルトの名無しさん
2009/08/23(日) 20:01:05エラーメッセージに表示されるソースがimportのimportのimportの・・・と深くなっていると、
どこでライブラリの間違った使い方をしたのか特定しづらいです。
何かうまい方法はないですか?
0694デフォルトの名無しさん
2009/08/23(日) 22:44:31黒魔術でなんとかなりそうな気もするが……
0695デフォルトの名無しさん
2009/08/23(日) 22:47:54国産という気もするが、英語圏でwizardとかguruとか良く使うからあっちの気もする
0696デフォルトの名無しさん
2009/08/23(日) 23:14:390697デフォルトの名無しさん
2009/08/23(日) 23:44:490698デフォルトの名無しさん
2009/08/24(月) 01:00:330699デフォルトの名無しさん
2009/08/24(月) 03:09:300700デフォルトの名無しさん
2009/08/24(月) 07:56:53どこまでがモジュール名なのかわからないからとか?
ファイル名出ててわかりにくいのはなぜ?
0701デフォルトの名無しさん
2009/08/24(月) 08:03:07ふと思い出してvoodooを調べてみたら
http://ja.wikipedia.org/wiki/%E3%83%96%E3%83%BC%E3%83%89%E3%82%A5%E3%83%BC%E6%95%99
に、ブラックマジックという単語が出てるぞ。語源かは知らんが。
0702デフォルトの名無しさん
2009/08/24(月) 10:28:15例えばstd.functional.dのbinaryFunImplでエラーが発生したとメッセージが出るとします。
でも、自分が書いたコードの中で直接binaryFunImplを使ってないし、そもそもstd.functionalをimportすらしていません。
正解はstd.algorithmの中の関数の中でbinaryFunが呼ばれてるからなんですが、
自分が書いたコードのどこが間違っているのか、特定に手間がかかります。
0703デフォルトの名無しさん
2009/08/24(月) 11:28:48import std.stdio;
void func2(T, string f=__FILE__, int l=__LINE__)(T a){writeln("func2: ", f, "(", l, "): ", a);}
void func(T, string f=__FILE__, int l=__LINE__)(T a){func2!(T,f,l)(a);}
void main(){func(10);}
0704デフォルトの名無しさん
2009/08/24(月) 12:18:250705デフォルトの名無しさん
2009/08/24(月) 12:55:060706デフォルトの名無しさん
2009/08/24(月) 18:21:11今からなんだかワクワクしてきた…ッ!
0707デフォルトの名無しさん
2009/08/24(月) 19:11:12どうすれば?
0708デフォルトの名無しさん
2009/08/24(月) 19:16:290709デフォルトの名無しさん
2009/08/24(月) 19:19:02暗号化
0710デフォルトの名無しさん
2009/08/24(月) 19:20:110711デフォルトの名無しさん
2009/08/24(月) 19:21:02やってみる
0712デフォルトの名無しさん
2009/08/24(月) 19:22:460713デフォルトの名無しさん
2009/08/24(月) 19:25:06了解
0714デフォルトの名無しさん
2009/08/24(月) 19:27:140715デフォルトの名無しさん
2009/08/24(月) 21:02:37なるほど、実行時エラーはそれでいけますね。
しかし、全ての関数にそれを仕込むのは手間がかかりそうです。
またPhobosをよく使うので、そこはどうしようもないのがつらいところ。
>>704-705
コンパイル時のエラーメッセージで困るのは、確かにテンプレート絡みですね。
今後に期待?
0716デフォルトの名無しさん
2009/08/24(月) 22:05:220717デフォルトの名無しさん
2009/08/24(月) 23:11:550718デフォルトの名無しさん
2009/08/24(月) 23:47:350719デフォルトの名無しさん
2009/08/24(月) 23:49:46構造体でいいじゃんと思うのだけど…
0720デフォルトの名無しさん
2009/08/24(月) 23:52:27無名delegateも似たような理由だし。
0721デフォルトの名無しさん
2009/08/24(月) 23:56:41outな引数使えばいいと思う
0722デフォルトの名無しさん
2009/08/24(月) 23:57:32Tuple!(int, int) f(int, int) { /**/ }
f(f(2, 3))
0723デフォルトの名無しさん
2009/08/24(月) 23:58:03outは型推論ができないから糞すぎる。
0724デフォルトの名無しさん
2009/08/24(月) 23:59:11構造体でいいじゃんと思うのだけど…
0725デフォルトの名無しさん
2009/08/25(火) 00:13:30これ全部直すのめんどくせーw
0726デフォルトの名無しさん
2009/08/25(火) 00:19:500727デフォルトの名無しさん
2009/08/25(火) 00:44:00>>725
D2ならわりと初期のころから
引数の型が特定のenumなら、その型に当たる部分は型名省略してもいいだろうと以前から話題には上るし、
07のウォルたんの公演でもやりたいと言っていたが、流れ続けて現在に至る
0728デフォルトの名無しさん
2009/08/25(火) 00:44:59extern(C) void hoge(int *n);
を
extern(C) void hoge(out int n);
と書くためにある
0729デフォルトの名無しさん
2009/08/25(火) 01:20:34dmd2.031対応
0730デフォルトの名無しさん
2009/08/25(火) 10:33:280731デフォルトの名無しさん
2009/08/25(火) 10:39:250732デフォルトの名無しさん
2009/08/25(火) 11:45:470733デフォルトの名無しさん
2009/08/25(火) 14:49:040734デフォルトの名無しさん
2009/08/25(火) 16:22:47int main()
{
ubyte[] ary;
ubyte[] pico( ubyte[] sage ) { return sage = cast(ubyte[])"sage"; }
void fuga( ubyte[] sage ) { sage = pico( sage ); }
ary.length = 4;
fuga( ary );
writefln( "output: %s", cast(string)ary );
// 入力待ち
readln();
return 0;
}
/* 実行結果
* output:
*/
0735デフォルトの名無しさん
2009/08/25(火) 16:24:560736735
2009/08/25(火) 16:27:230737デフォルトの名無しさん
2009/08/25(火) 16:27:54fuga関数にinoutを追加したら動きました!
今日一日悩んでたので感謝^^
0738デフォルトの名無しさん
2009/08/25(火) 16:31:290739デフォルトの名無しさん
2009/08/25(火) 16:37:42いや〜、セーブデータを作るモジュールを作っていて詰まったのですよ(;^^
0740デフォルトの名無しさん
2009/08/25(火) 16:51:210741デフォルトの名無しさん
2009/08/25(火) 16:53:300742デフォルトの名無しさん
2009/08/25(火) 16:56:46inoutじゃなくてrefだ
0743デフォルトの名無しさん
2009/08/25(火) 16:57:58そうなんですか? 知りませんでしたorz
>> 742
ぇ..
0744デフォルトの名無しさん
2009/08/25(火) 17:00:33あと >> とレス番は離さないで
0745デフォルトの名無しさん
2009/08/25(火) 17:01:28すみません・・
焦っていたもので(;^^
resに変えておきます。
0746745
2009/08/25(火) 17:02:23refですね(;--
0747デフォルトの名無しさん
2009/08/25(火) 17:05:18ウォルたんなら・・・ウォルたんなら・・・やってくれる(はず)
0748デフォルトの名無しさん
2009/08/25(火) 17:26:09あほかw
そんなことしたらinじゃない普通の引数を表すキーワードが必要になるだろうが。
0749デフォルトの名無しさん
2009/08/25(火) 19:00:310750デフォルトの名無しさん
2009/08/25(火) 19:53:43その方がいいかも知れんね。それこそ >>734 みたいな直観的じゃないことがたまにあるし。
void hige( ubyte[] fuke ) { fuke.length = fuke.length + 64; }
こういうのとか。
0751デフォルトの名無しさん
2009/08/25(火) 20:49:04まあswitchがそのまんま残ってるくらいだから無くならないだろうけど
0752デフォルトの名無しさん
2009/08/25(火) 22:15:400753デフォルトの名無しさん
2009/08/25(火) 22:26:12たとえばコンパイラが返り値の受け手がいない関数の処理をどうしたらいいか考えてみると分かりやすい
0754デフォルトの名無しさん
2009/08/25(火) 22:27:40テンプレート関数でいいなら。
T func(T)(){
static if (is(T==int)){return 0;}else{return 1.0;}
}
0755デフォルトの名無しさん
2009/08/25(火) 23:24:56少なくとも、この挙動が正しいならプロパティ名を分けないと分からん
interface I {}
class C : I {}
class D : C {}
void o(in Object obj) { writeln(obj.classinfo.name); }
void i(in I obj) { writeln(obj.classinfo.name); }
void c(in C obj) { writeln(obj.classinfo.name); }
void main() {
auto d = new D;
o(d); // classname D
i(d); // classname I
c(d); // classname D
}
0756デフォルトの名無しさん
2009/08/25(火) 23:30:340757デフォルトの名無しさん
2009/08/26(水) 00:06:40とりあえずリポートしておいた
0758デフォルトの名無しさん
2009/08/26(水) 00:08:24たぶんIUnknownとかCOMなんかの関係があってObjectにcastできないと実行時型情報が取り出せないんじゃないかと予想
0759デフォルトの名無しさん
2009/08/26(水) 00:09:46template Te(T) if (is (T : Object)) { ... }
とか見かける
interfaceはいらない子ですか?
0760デフォルトの名無しさん
2009/08/26(水) 07:40:00import std.stdio;
interface I {
void a() const;
}
class C : I {
override void a(){} const
}
void main()
{
void i(in I obj) {
writeln((cast(Object)obj).classinfo.name);
obj.a();
}
void c(in C obj) {
writeln(obj.classinfo.name);
obj.a();
}
i(new C);
c(new C);
}
main.d(6): Error: function main.C.a of type void() overrides but is not covariant with main.I.a of type const void()
main.d(6): Error: function main.C.a does not override any function
0761デフォルトの名無しさん
2009/08/26(水) 08:08:330762デフォルトの名無しさん
2009/08/26(水) 08:38:130763デフォルトの名無しさん
2009/08/26(水) 09:01:51{
}
0764デフォルトの名無しさん
2009/08/26(水) 09:02:540765デフォルトの名無しさん
2009/08/26(水) 22:34:380766デフォルトの名無しさん
2009/08/26(水) 22:40:21俺が一番嫌いな言葉はsynchronizedで二番目がimmutableなんだぜー!
0767デフォルトの名無しさん
2009/08/26(水) 23:38:570768デフォルトの名無しさん
2009/08/27(木) 01:37:27const string toString() に大変身するの?
0769デフォルトの名無しさん
2009/08/27(木) 02:00:12また >>762 のことにより非const関数も別に必要なので
string toString(); と const string toString(); の両方になるべきだと思う
0770デフォルトの名無しさん
2009/08/27(木) 02:04:32const string toString() がいいとおもう。
>>762 に関しては ref 使えばいいのでは?
0771デフォルトの名無しさん
2009/08/27(木) 02:06:55書いてみたらさほど手間でもないかな?
0772デフォルトの名無しさん
2009/08/27(木) 02:08:54import std.stdio;
class A {
override string toString() {
return "A";
}
override string toString() const
{
return "const(A)";
}
}
void main() {
auto a = new A;
writeln(a.toString());
const ca = new A;
writeln(ca.toString());
}
0773デフォルトの名無しさん
2009/08/27(木) 02:10:25なんでだ
0774デフォルトの名無しさん
2009/08/27(木) 02:27:240775デフォルトの名無しさん
2009/08/27(木) 02:28:080776770
2009/08/27(木) 03:04:33個人的には、少なくともObjectクラスのメンバ関数としてはいらないと思うなぁ
そもそもimmutableメンバ関数ってどういう時に使うと便利なものなの?
0777デフォルトの名無しさん
2009/08/27(木) 04:38:19static関数だとimmutableにしたりすることはある。なんらかのIDつけるときとか。
インスタンスでそういうケースもないことはないかなという気はする。
0778デフォルトの名無しさん
2009/08/27(木) 07:18:53コンパイルできちゃう所に痺れる
0779770
2009/08/27(木) 12:09:38一応、mutableなインスタンスでは実行できず、imutableなインスタンスなら実行可能なメンバ関数というものではあるらしい。
auto a = new A;
immutable b = cast(immutable)a;
a.immutableMemberFunction(); //NG
b.immutableMemberFunction(); //OK
つまり、immutableメンバ関数外からは絶対にメンバ変数が変更されないという保証がなされる。
ということは、関数内部でメンバに対してmutexロックなど排他制御をする必要がなくなる…という意味では価値があるかもしれない。
けど、だとしたら逆にいえば普通のメンバ関数とかconstメンバ関数内では、メンバ変数にアクセスする際には
必ず排他制御を行わなきゃいけないということになる。
だけどそれは、パフォーマンス的にあまり現実的とはいえず、普通はやらないので、
やっぱりimmutableメンバ関数の有用性には疑問が残る。
0780pmlynzZPUThDtKP
2009/08/27(木) 12:19:46<a href="http://artemis2.wackwall.com/post/postId/12927/">pictures of artemis</a>
<a href="http://artemis2.wackwall.com/post/postId/12929/">email artemis cosmetics mumbai</a>
<a href="http://artemis2.wackwall.com/post/postId/12930/">artemis goddess of the hunt</a>
<a href="http://artemis2.wackwall.com/post/postId/12931/">artemis and the stag</a>
<a href="http://artemis2.wackwall.com/post/postId/12934/">artemis nightshade</a>
<a href="http://artemis2.wackwall.com/post/postId/12936/">artemis dog food</a>
<a href="http://artemis2.wackwall.com/post/postId/12938/">artemis the goddess of hunt</a>
<a href="http://artemis2.wackwall.com/post/postId/12940/">remove generic artemis</a>
<a href="http://artemis2.wackwall.com/post/postId/12942/">symbol of artemis</a>
<a href="http://artemis2.wackwall.com/post/postId/12943/">artemis myth</a>
<a href="http://artemis2.wackwall.com/post/postId/12945/">artemis - greek mythology</a>
<a href="http://artemis2.wackwall.com/post/postId/12947/">artemis cat food</a>
<a href="http://artemis2.wackwall.com/post/postId/12948/">artemis orthia</a>
<a href="http://artemis2.wackwall.com/post/postId/12950/">artemis symbol</a>
<a href="http://artemis2.wackwall.com/post/postId/12952/">tragic love story artemis</a>
0781デフォルトの名無しさん
2009/08/27(木) 12:40:45auto a = new immutable(A);
0782770
2009/08/27(木) 15:32:30import std.stdio;
import std.contracts;
class A {
int i = 0;
immutable void immutableMemberFunction() { writeln("immutableMemberFunction, i=", i); }
}
void main() {
auto a = new A;
a.i = 100;
immutable b = cast(immutable)a;
a = null;
b.immutableMemberFunction();
}
こういう場合があるため、それは不適当と判断しました。
0783770
2009/08/27(木) 15:41:53ことに絶望したのは言うまでもない。
………なぜだ…。
0784デフォルトの名無しさん
2009/08/27(木) 16:16:35キャストしたらimmutable性を自分で保証しなければならず
なくなったり書き換えられたりしたら未定義動作なのですが
これはそのケースになりませんか?
ttp://www.kmonos.net/alang/d/2.0/const3.html
> しかし、だからといって、データを書き換えられるようになるわけではありません:
>*q = 3; // コンパイルは通るが、未定義動作
それはともかくこうするとキャストいらないですよ
import std.stdio;
import std.contracts;
class A {
int i = 0;
immutable void immutableMemberFunction() { writeln("immutableMemberFunction, i=", i); }
this(){}
this(A other) {
i = other.i;
}
}
void main() {
auto a = new A;
a.i = 100;
auto b = new immutable(A)(a);
b.immutableMemberFunction();
}
0785770
2009/08/27(木) 16:57:19値を変更した後にimmutableにキャストし、a = null;でimmutable性を保証しているため、
その未定義動作には当てはまらないと思いますが…(assumeUniqueの仕様例と実装を見る限り)
そのコードはいいかも、と思ったけど、以下のように継承に対応することができないのでは?
import std.stdio;
class A {
int i = 0;
immutable void immutableMemberFunction() { writeln("A: i=", i); }
this(){}
this(A other) { i = other.i; }
}
class B: A {
int j = 0;
this(){}
override immutable void immutableMemberFunction() { writeln("B: i=", i, ", j=", j); }
}
void main() {
auto a = new B;
a.i = 1; a.j = 2;
immutable A b = cast(immutable)a;
immutable A c = new immutable(A)(a);
a = null;
b.immutableMemberFunction();
c.immutableMemberFunction();
}
0786デフォルトの名無しさん
2009/08/27(木) 17:12:20あーなるほど確かに
下のコードはぱっと見ではわからないので後で見ます
0787デフォルトの名無しさん
2009/08/27(木) 17:16:28メンバ関数を呼び出す側が排他制御をする必要があるかどうか判断できる、
ということのような気がする。
0788デフォルトの名無しさん
2009/08/27(木) 17:50:48immutable A b = cast(immutable)a;//これはcast(immutable(B))aです
immutable A c = new immutable(A)(a);//こっちはスライスされます
こうしましょう
immutable A c = new immutable(B)(a);
0789デフォルトの名無しさん
2009/08/27(木) 18:24:47確かにその通りですね。ただ、それはimmutableなインスタンスの有用性であって、
immutableメンバ関数の有用性ではない気がするのですが…
(immutableなインスタンスであれば排他制御なしにconstメンバ関数も呼び出すことができる。
ではimmutableメンバ関数が有用なのはどんな時?)
>>788
もはや自分が何を言いたかったのか忘れてきたけど、何かそれは元も子もない何かを感じる
immutableなインスタンスを作る時にいつもそれができるとは限らないし…
0791デフォルトの名無しさん
2009/08/27(木) 18:55:24> (immutableなインスタンスであれば排他制御なしにconstメンバ関数も呼び出すことができる。
> ではimmutableメンバ関数が有用なのはどんな時?)
>782のような場合にimmutableにキャストし忘れた場合にはエラーになるけれど、
関数をimmutableと修飾しておかない場合、エラーにできなくなるような気がする。
0792770
2009/08/27(木) 19:23:21もう値が変更されなくなった後でないと使うことが許されないメンバ関数…ってことか?
終了処理後でなければ実行することができないと明示するための宣言として利用できるということかな?
Hash計算クラスの、終了処理後でないと計算結果が出せない…みたいな。
0793デフォルトの名無しさん
2009/08/27(木) 19:58:100794デフォルトの名無しさん
2009/08/27(木) 20:43:450795デフォルトの名無しさん
2009/08/28(金) 00:32:570796デフォルトの名無しさん
2009/08/28(金) 00:42:50これってxmlの仕様だっけ?(dmd2.031)
0797デフォルトの名無しさん
2009/08/28(金) 00:46:350798デフォルトの名無しさん
2009/08/28(金) 07:17:170799デフォルトの名無しさん
2009/08/28(金) 07:28:350800デフォルトの名無しさん
2009/08/28(金) 14:53:020801デフォルトの名無しさん
2009/08/28(金) 15:32:47ごめん、愚問だなって言ってみたかっただけでした、すみません。バグだと思います。
auto doc = new Document(`
<html><head></head><body><img src="aaa"/></body></html>`);
assert(doc.elements[1].elements[0].tag.attr["src"] == "aaa");// Range violation
こういうことだよね?
0802デフォルトの名無しさん
2009/08/28(金) 16:57:46ttp://shinh.skr.jp/d/
bit→boolで一応通ったけど。
0803デフォルトの名無しさん
2009/08/28(金) 18:07:05おお、通った。ありがとう!
0804デフォルトの名無しさん
2009/08/28(金) 20:23:14SDLにIMサポートさえ入ればGUIライブラリを捨てられる
0805796
2009/08/28(金) 23:27:39やっぱバグですよね。すっきりした。
>> 801
そうです。
1947: Tag startTag = new Tag(tag_.name);
1948: startTag.attr = tag_.attr; // <- 追加
とりあえずこれで回避しました。ありがとう!
0806デフォルトの名無しさん
2009/08/29(土) 10:11:320807デフォルトの名無しさん
2009/08/29(土) 19:38:40こんな感じで問題ないんだろうか
DWORD[] buffer = new DWORD[size*3];
LibFunc(buffer.ptr);
0808デフォルトの名無しさん
2009/08/29(土) 19:42:27そこ気をつけたら大丈夫じゃね?
0809デフォルトの名無しさん
2009/08/29(土) 20:25:28AndreiかわいいよAndrei
0810デフォルトの名無しさん
2009/08/29(土) 22:13:050811デフォルトの名無しさん
2009/08/29(土) 22:18:57-ofXXXX.dll
だけでいいんじゃなかったっけ。
0812デフォルトの名無しさん
2009/08/29(土) 22:27:39thx
0813デフォルトの名無しさん
2009/09/02(水) 02:56:400814デフォルトの名無しさん
2009/09/02(水) 03:45:59特に文字列mixinしたら実行時には使われるはずの無い文字列が大量にEXE(-release)の中にあるけど、
不要な関数/文字列まで非デバッグのEXEに入れる必要ってあるの?
教えてエロイ人。
0815デフォルトの名無しさん
2009/09/02(水) 04:14:47確かにtemplate/mixinを多用するとその辺の肥大化が著しい
0816デフォルトの名無しさん
2009/09/02(水) 04:18:04最適化オプションじゃ消えないの?
0817デフォルトの名無しさん
2009/09/02(水) 07:39:540818デフォルトの名無しさん
2009/09/02(水) 12:57:35budで-Xにdfl.libとかphobos.libとかを付けたり消したりすることによってもサイズが違うし
dmdを使ってもまたサイズが違う
なんででしょう
0819デフォルトの名無しさん
2009/09/02(水) 13:02:37pure a = 1;
nothrow b = 1;
について何かご存じの方はいませんか?
0820デフォルトの名無しさん
2009/09/02(水) 18:21:41……ところで、記憶域クラスって何なの?
autoとかimmutableとかstaticとかならまだ理解できるけど、
pureとかnothrowとかになるとよくわからなくなってくる…
0821788
2009/09/02(水) 19:41:28とりあえずそうなってるだけじゃない?
仕様では詳しく言及してないみたいだし
0822デフォルトの名無しさん
2009/09/02(水) 19:42:390823デフォルトの名無しさん
2009/09/03(木) 07:09:50てっきりこれを使って「現在時刻から1秒後を取る」みたいなことが
できるもんだと思ってたから10分くらい悩んだ
0824デフォルトの名無しさん
2009/09/03(木) 12:37:020825デフォルトの名無しさん
2009/09/03(木) 16:56:38Dな人のTwitterアカウント
http://lists.puremagic.com/pipermail/digitalmars-d/2009-July/060482.html
ちなみにハッシュタグは、うぉるたんが #d_lang を使ってるけど、
いま検索すると出てくるのは日本人ばっかりw
0826デフォルトの名無しさん
2009/09/03(木) 17:54:270827デフォルトの名無しさん
2009/09/03(木) 18:02:41キタ━━━━━━━━(゚∀゚)━━━━━━━━━!!!
0828デフォルトの名無しさん
2009/09/03(木) 18:05:01これはどういうこっちゃ?
0829デフォルトの名無しさん
2009/09/03(木) 18:22:350830デフォルトの名無しさん
2009/09/03(木) 18:43:57これは動くね
0831デフォルトの名無しさん
2009/09/03(木) 22:17:32class A{
synchronized void f(){}
}
A x = new A;
x.f(); // error
auto y = new shared(A);
y.f(); // ok
0832796
2009/09/03(木) 22:42:38なおったー!
0833デフォルトの名無しさん
2009/09/04(金) 11:26:540834デフォルトの名無しさん
2009/09/04(金) 11:50:060835デフォルトの名無しさん
2009/09/04(金) 12:28:18次の更新か最新のtrunkで
0836デフォルトの名無しさん
2009/09/04(金) 12:49:30特にphobos
なんかあったらissue numberください
0837デフォルトの名無しさん
2009/09/04(金) 15:18:270838デフォルトの名無しさん
2009/09/04(金) 15:21:520839デフォルトの名無しさん
2009/09/04(金) 15:55:13void main() {
int number_normal = 10;
auto a = to!(string)(number_normal);
const number_const = 10;
auto b = to!(string)(number_const); // だめ
immutable number_immutable = 10;
auto c = to!(string)(number_immutable); // だめ
}
----------------------------------------
C:\dmd\dmd\src\phobos\std\conv.d(2580): Error: variable std.conv.to!(immutable(char)[],const(int)).to.u cannot modify const
C:\dmd\dmd\src\phobos\std\conv.d(8): Error: template instance std.conv.to!(immutable(char)[],const(int)) error instantiating
使い方が悪いんだろうか?
0840デフォルトの名無しさん
2009/09/04(金) 17:28:542.031ではいけているからtoに変更があったのかな
ところでconst/immutable storage classって使い分け難しいよね
0841デフォルトの名無しさん
2009/09/04(金) 22:22:240842デフォルトの名無しさん
2009/09/04(金) 22:47:32「ソースコードのどこそこが悪い」と書くとすぐに直してもらえるな。
phobosなら自分でデバッグできるし。
>>840
toというよりコンパイル時の評価順にに変更があるみたい
循環参照があるソースコード全滅 orz
0843デフォルトの名無しさん
2009/09/04(金) 23:11:39評価順に依存してるコードに問題があるのか?
0844デフォルトの名無しさん
2009/09/05(土) 00:11:160845デフォルトの名無しさん
2009/09/05(土) 00:22:33ごめん。std.conv.toは中身が書き換わってた
以前2.031の段階でroundToにimmutable/constなものが通らないのでstd.traits使って書き直しとけとITSにレポートしておいたのだが、
Andreiがついでにいろいろ書き直した結果こうなったっぽい
0846デフォルトの名無しさん
2009/09/05(土) 00:32:14自分でデバッグしてITSにレポートするといいかと
0847デフォルトの名無しさん
2009/09/05(土) 01:42:300848デフォルトの名無しさん
2009/09/05(土) 13:45:030849デフォルトの名無しさん
2009/09/05(土) 14:11:06Dは相変わらず仕様コロコロリンっぽいな
0850デフォルトの名無しさん
2009/09/05(土) 14:27:290851デフォルトの名無しさん
2009/09/05(土) 14:53:19ついこの前の更新でも余裕で言語仕様に追加があった。
D1系が安定というのは迷信。バージョンごと固定しなきゃダメだ。
0852デフォルトの名無しさん
2009/09/05(土) 15:00:350853デフォルトの名無しさん
2009/09/05(土) 16:39:27> 循環参照があるソースコード全滅
これは致命的だなぁ…D1系ですらDFL死んでるし。
0854デフォルトの名無しさん
2009/09/05(土) 17:16:52importしてるはずのシンボルが未定義になってる
0855デフォルトの名無しさん
2009/09/05(土) 17:49:11循環参照するクラスたちをファイルを分けずにひとつにしてしまうと動くことがある。
これ自体はもっと以前からあるバグのようなのだが、評価順が変わって顕在化するようになった模様
http://d.puremagic.com/issues/show_bug.cgi?id=3286
0856デフォルトの名無しさん
2009/09/05(土) 20:06:23Error 42: Symbol Undefined __d_array_bounds
リンクエラーの原因がわかりません。
どうすればいいのでしょうか?
Error 42: Symbol Undefined __d_assert_msg
Error 42: Symbol Undefined __tls_array
Error 42: Symbol Undefined _D11TypeInfo_Aa6__initZ
Error 42: Symbol Undefined __d_arrayappendT
Error 42: Symbol Undefined __adEq2
Error 42: Symbol Undefined _D3std9algorithm12__ModuleInfoZ
Error 42: Symbol Undefined _D10ModuleInfo6__vtblZ
0857856
2009/09/05(土) 20:07:340858デフォルトの名無しさん
2009/09/05(土) 20:15:59今のコンパイラのバージョンのランタイムライブラリで一般のライブラリをコンパイルしてないかじゃないかな
とりあえず環境を一から構築してみるといいかも。
0859デフォルトの名無しさん
2009/09/05(土) 23:52:21あー情報後だしになって申し訳ないですが、DLLを作ろうとしていて、そこで問題があったっぽいです。
試しにDllMainを普通のmainにしたら、意味のわからないリンクエラーはなくなりました。
ありがとうございました。
0860デフォルトの名無しさん
2009/09/06(日) 00:44:54まあ多分この問題はすぐに解消されるだろ
と信じていよう
0861デフォルトの名無しさん
2009/09/06(日) 00:55:090862デフォルトの名無しさん
2009/09/06(日) 08:56:490863デフォルトの名無しさん
2009/09/07(月) 04:58:11ありそうでなかったような気がしてきたんだが…
0864デフォルトの名無しさん
2009/09/07(月) 05:32:12version (HOGE) {}
else { ... }
/(^o^)\
0865デフォルトの名無しさん
2009/09/07(月) 08:48:11ifにifnとかないし
ってことで納得しといて
0866デフォルトの名無しさん
2009/09/07(月) 09:59:350867デフォルトの名無しさん
2009/09/07(月) 16:09:490868デフォルトの名無しさん
2009/09/07(月) 16:34:13あれは static unless が欲しいという話だ
0869デフォルトの名無しさん
2009/09/07(月) 16:43:51でも、 version(!HOGE) みたいなことができたら嬉しいのは、確かに思うこともある。
0870デフォルトの名無しさん
2009/09/07(月) 16:59:49version(Hoge){}else{
...
}
でも別に困りはしないが不格好ではある
構文もversion(!HOGE)しか思いつかないが ! の意味としっくりこないのが悔やまれる
0871デフォルトの名無しさん
2009/09/07(月) 20:02:52template FC() {
void fieldCount() {writeln(this.tupleof.length);}
}
void main() {
class Test1 { mixin FC; int a, b, c; }
class Test2 { int a, b, c; mixin FC; }
class Test3 { int a; mixin FC; int b, c; }
(new Test1).fieldCount;
(new Test2).fieldCount;
(new Test3).fieldCount;
}
出力結果
0
3
1
なん…だと…?
0872デフォルトの名無しさん
2009/09/07(月) 20:58:20その場所までに定義された分だけ見た値が返ってくるのか。
関数名をthis.tupleof.lengthに依存するようにしたら、同じクラス中で何度もmixinできるな。
コンパイル時のクラス定義時にはそのへんのプロパティは参照できず、
このfieldCountのような場合はちゃんとまともな値を返す、ってのが正しい動作かな?
0873デフォルトの名無しさん
2009/09/08(火) 01:11:39ってsの型どうなんの?
0874デフォルトの名無しさん
2009/09/08(火) 01:30:38const(string) == const(immutable(char)[])
0875デフォルトの名無しさん
2009/09/08(火) 20:03:58template W(T, T U) { string W = U.stringof; }
enum En { A }
void main() {
writeln(W!(int, 123)); // "U"と出力
writeln(W!(string, "str")); // "U"と出力
writeln(W!(En, En.A)); // "En"と出力
}
この3番目が"En"になるのは何でなんだぜ?
0876デフォルトの名無しさん
2009/09/08(火) 21:07:400877デフォルトの名無しさん
2009/09/09(水) 00:48:39テンプレイト以前にそもそも、En.A.stringof が En.A になるはずなのに
En になっちゃってるね。バグだと思う。報告よろ。
0878デフォルトの名無しさん
2009/09/09(水) 07:30:100879デフォルトの名無しさん
2009/09/09(水) 13:06:32class C { double d; }
void main() {
while (1) {
scope t = new C; // クラスインスタンスならスタックに割り当てられて
//scope t = new double; // プリミティブ型がスタックに割り当てられないのは納得が行かん
Thread.sleep(10000);
}
}
0880デフォルトの名無しさん
2009/09/09(水) 14:18:320881デフォルトの名無しさん
2009/09/09(水) 15:10:04仕様によれば、scope変数の初期化にnew式を使う場合は、
クラスに限らずスタックに割り当てることになってるからバグだな。
報告しといてちょ
0882デフォルトの名無しさん
2009/09/09(水) 15:30:19ほう
そんなのあったのか
0883デフォルトの名無しさん
2009/09/09(水) 16:44:53よくしらべたなぁ・・・
0884デフォルトの名無しさん
2009/09/09(水) 20:21:510885デフォルトの名無しさん
2009/09/09(水) 21:29:550886デフォルトの名無しさん
2009/09/09(水) 21:51:36ライブラリ用のプロジェクトを作ってそこにソースを置いて、sc.iniのDFLAGSにパスを通したのですが、コンパイルはできてもリンクエラーが出てしまいます。
どうやればいいのでしょうか?
0887デフォルトの名無しさん
2009/09/09(水) 21:57:45なぜかないと思う
0888デフォルトの名無しさん
2009/09/09(水) 22:00:37そんなもんparse!int("0xffff")とかで…
できないね。変態度が足りん
>>886
importはincludeと違ってそのまんまコピーしてくるわけじゃないからなあ
dmd a.d library.d
みたいにいちいち一緒にコンパイルするか、自動的に依存するファイルを探してくれるbudみたいなツールを使うか、
ライブラリを作ってDFLAGSでリンクするように設定するか
となるとimportするだけで使えるライブラリって無理か
0889デフォルトの名無しさん
2009/09/09(水) 22:02:03ttp://d.hatena.ne.jp/haru-s/20060921/1158843229
をさらにいじってこうしてる
long hexToDecimal(char c) pure
{
return hexToDecimal([c]);
}
long hexToDecimal(in char[] str) pure
{
long sum;
foreach(char c; str)
sum = sum*16 + ((c|0x20)-'0')%('W'-'0');
return sum;
}
0890デフォルトの名無しさん
2009/09/09(水) 22:06:23#includeするだけで使えるライブラリ?
これの出番かw
mixin(import(filename.d"));
0891デフォルトの名無しさん
2009/09/09(水) 22:14:27見るからに邪悪すぎるwww
0892デフォルトの名無しさん
2009/09/09(水) 22:23:33ありとあらゆる関数をテンプレートにすればいいよ.
0893デフォルトの名無しさん
2009/09/09(水) 22:27:04なんかリンクする必要があるなら、ちゃっかりライブラリ側でpragma(lib,"foo.lib");とかやっちゃえばいい気がする。
0894デフォルトの名無しさん
2009/09/09(水) 22:47:02{
return "Hello,world!";
}
T func(T : int)()
{
return -1;
}
void main()
{
string str = func();
writeln(str);//Hello,world!
}
これが動いたらやりたいことが色々できるんだけど無理かなぁ
0895デフォルトの名無しさん
2009/09/09(水) 22:57:02とかの時だけ特別にエラーでいいからやってほしいよな
0896デフォルトの名無しさん
2009/09/09(水) 23:03:40autoを例外にすればやってやれないことはないと思うんだけどな
0897デフォルトの名無しさん
2009/09/09(水) 23:17:22>>888
C++のようにはいかないんですね。
>>890
それはちょっとw
>>892-893
なるほど。テンプレートだけならいけるんですね。
0898デフォルトの名無しさん
2009/09/09(水) 23:53:57Error: no object files to link
というエラーが出たんですが、これはどういう意味なのでしょうか?
0899デフォルトの名無しさん
2009/09/10(木) 00:15:45例外指向プログラミングときいて!
0900デフォルトの名無しさん
2009/09/10(木) 00:30:180901デフォルトの名無しさん
2009/09/10(木) 02:07:19左辺値から右辺値を推論って最近話題だよね
0902デフォルトの名無しさん
2009/09/10(木) 07:35:41parse!int("0xff")に統合して欲しいところだが
N進数文字列から数値への変換関数とどちらがいいか・・・?
toは数値からN進数文字列への変換関数としても使えるようだ
0903デフォルトの名無しさん
2009/09/10(木) 13:49:03baseを指定した場合はプレフィックスでエラー
がいいと思う。
0904デフォルトの名無しさん
2009/09/11(金) 17:15:450905デフォルトの名無しさん
2009/09/11(金) 18:16:590906デフォルトの名無しさん
2009/09/11(金) 19:03:490907デフォルトの名無しさん
2009/09/11(金) 19:28:02もっとも、そのままじゃD2で動かんが。
0908デフォルトの名無しさん
2009/09/11(金) 19:42:15openglの奴は修正なしでD2でも動いたよ
0909デフォルトの名無しさん
2009/09/11(金) 19:49:000910デフォルトの名無しさん
2009/09/11(金) 20:06:200911デフォルトの名無しさん
2009/09/11(金) 20:22:350912デフォルトの名無しさん
2009/09/11(金) 20:25:26void main(string[] args) {
string dir = std.path.dirname(args[0]);
}
これmain以外の所から取れるんだろうか?
0913デフォルトの名無しさん
2009/09/11(金) 21:03:12Windowsではmainのargを初期化するのにGetCommandLineWを使っているから
argv[0]は完全修飾のファイルパスになるけど、
PosixではCランタイムに依存しているので必ずしもディレクトリ部がついているとは限らないし
そこにファイル名が入ってすらないかもしれない。
正確を期すならばGetModuleFileNameを使ったり、Linuxなら/proc/self/exeのリンク先を見たりするのがいいと思う。
OSXやFreeBSDはしらない。
0914デフォルトの名無しさん
2009/09/11(金) 22:53:19WSAAsyncSelect(SOCKET, HWND, u_int, long); は
WSAAsyncSelect(SOCKET, HWND, u_int, int); じゃないかと思うんだが、どうだろう。
0915デフォルトの名無しさん
2009/09/11(金) 23:14:14って文法上は認められてるみたいだけどこれいくつになるの
0916デフォルトの名無しさん
2009/09/12(土) 00:10:20整数リテラルの説明のBNF?表記だけみればそうかもだけど
>整数の途中に文字 '_' を入れることができます。 この文字は単に無視されます。
て説明されてて、dmdはちゃんとしたエラーだしてるから、
文法上許してない、でいいんじゃね?
0917デフォルトの名無しさん
2009/09/12(土) 00:39:40複数のソースをビルドする時、手動でコンパイル引数を入力するしかないのでしょうか?
ctrl+クリックでソースを複数選択した状態でビルドしても、1つのソースしかビルドされていないみたいです。
0918デフォルトの名無しさん
2009/09/12(土) 01:20:070_
はどうかな
文法上は10進数じゃなくて8進数になるはずだけど
0x_がエラーならこれもエラーなのかな
でも0_がエラーで1_はOKってのもなんか変だよな
あと _._ は浮動小数点数になるのかな
_1._2は浮動小数点数1.2なのか_1オブジェクトの_2メンバなのか
よく読むとこの辺の文法ツッコみ所満載だな
0919デフォルトの名無しさん
2009/09/12(土) 01:30:31ヒント: 字句解析と意味解析は別
0920デフォルトの名無しさん
2009/09/12(土) 01:33:59そのりくつはおかしい
http://www.kmonos.net/alang/d/2.0/lex.html
ここを読めばわかる
0_ は _ が無視されてただの 0 なので、整数リテラルの、Decimal
_._や_1._2は、 _ から始まるため、 Identifier
0921デフォルトの名無しさん
2009/09/12(土) 01:44:20いやいや、そこの文法に忠実に従うとそうなるっていう話なんだけど
Decimalは「0」一文字か、NonZeroDigitから始まる必要があるから
0_ はDecimalではない
一方「_」はOctalDigitなので0_はOctalに適合する
したがって0_ はOctal
一方、DecimalFloatは「DecimalDigits . DecimalDigits」で、
「_」はDecimalDigitなので _._や _1._2 はDecimalFloatに適合する
もっとも _ や _1 がIdentifierに適合するのは確かだけど、
字句解析はmaximal munchルールだから先読みしてやはり _1._2 はDecimalFloatに適合する(>>919の指摘通りですね)
スペース入れて 「_1 . _2」ならIdentifier2つとドットになるんだろうけど
0922デフォルトの名無しさん
2009/09/12(土) 01:55:120923デフォルトの名無しさん
2009/09/12(土) 02:00:44._e+_f
がFloatLiteralに適合してしまう
0924デフォルトの名無しさん
2009/09/12(土) 03:36:01実装を変えたのにドキュメントはそのままの箇所も結構あるし。
0926デフォルトの名無しさん
2009/09/13(日) 13:40:19・リテラル先頭に'_'はおけない(Identifierになるから)
・DecimalDigits,HexDigits,OctalDigits,BinaryDigits は
'_'以外の該当文字が必要('_'のみで構成されるのは不可)
って感じ?
(BNFでない説明も読めば、あまり勘違いしそうにないような
気もするけど)
0927デフォルトの名無しさん
2009/09/13(日) 14:14:22モジュールのスコープ解決演算子 '.' を使ってモジュール全体のスコープから_0というIdentifierを探すのか、
0.0 という意味の double型の浮動小数点数リテラルなのか、
仕様を全部読んでもどっちが正しいのかわからないような。
0928デフォルトの名無しさん
2009/09/13(日) 16:07:420929デフォルトの名無しさん
2009/09/13(日) 18:10:01._1 は数字であって欲しくないなあ
0930デフォルトの名無しさん
2009/09/13(日) 18:35:260931デフォルトの名無しさん
2009/09/13(日) 18:54:48あ?
0932デフォルトの名無しさん
2009/09/13(日) 21:38:150933デフォルトの名無しさん
2009/09/13(日) 22:03:00ttp://www.digitalmars.com/d/2.0/function.html
main() Functionの例古すぎじゃね?
0934デフォルトの名無しさん
2009/09/14(月) 19:00:210935デフォルトの名無しさん
2009/09/14(月) 20:55:280936デフォルトの名無しさん
2009/09/14(月) 20:57:170937デフォルトの名無しさん
2009/09/14(月) 21:01:110938デフォルトの名無しさん
2009/09/14(月) 21:04:330939デフォルトの名無しさん
2009/09/14(月) 21:56:14mixin(parse!(import("mymodule.pd")));
とかしてやるわけか。
0940デフォルトの名無しさん
2009/09/14(月) 22:07:330941デフォルトの名無しさん
2009/09/14(月) 22:19:180942デフォルトの名無しさん
2009/09/14(月) 22:28:060943デフォルトの名無しさん
2009/09/14(月) 22:56:550944デフォルトの名無しさん
2009/09/14(月) 23:54:10version1.6.1を使ってみたところ上手くhtmlを吐いてくれない。。
0945デフォルトの名無しさん
2009/09/15(火) 00:18:30-Dすれば?
ソースが複雑だとDMDですら落ちるけど。
0946デフォルトの名無しさん
2009/09/15(火) 01:01:36レスthx
オプション知らなかった、試してみます。
0947デフォルトの名無しさん
2009/09/15(火) 04:38:29いちいち module や import などで A. って付けないといけないですか?
だとしたらメンドクサイ・・・。
0948デフォルトの名無しさん
2009/09/15(火) 05:57:57-IA
0949デフォルトの名無しさん
2009/09/15(火) 07:11:590950デフォルトの名無しさん
2009/09/15(火) 07:22:510951デフォルトの名無しさん
2009/09/15(火) 09:49:30俺ケータイなので
誰か次スレ立てておk
0952デフォルトの名無しさん
2009/09/15(火) 13:20:29なるほど、どうもありがとう!!
0953デフォルトの名無しさん
2009/09/16(水) 03:39:32消したら?
0954デフォルトの名無しさん
2009/09/16(水) 03:53:00C++のデストラクタのようなものを期待してれば裏切られる。
Dのクラスオブジェクトのデストラクタは、
Javaや.NETでいうファイナライザに相当するもの。
0955デフォルトの名無しさん
2009/09/16(水) 03:58:28C++/CLIではDisposeメソッドのことをデストラクタと呼んでいるくらいだし。
0956デフォルトの名無しさん
2009/09/17(木) 06:23:14,―-y'"'~"゙´ | それ るるいえ うがふなぐる ふたぐん
ヽ ´ ∀ ` ゙':
ミ .,/) 、/) いあ いあ
゙, "' ´''ミ ハ,_,ハ ハ,_,ハ
(( ミ ;:' ,:' ´∀`'; ,:' ´∀`';
'; 彡 :: っ ,っ :: っ ,っ
(/~"゙''´~"U ι''"゙''u ι''"゙''u
0957デフォルトの名無しさん
2009/09/17(木) 12:57:230958デフォルトの名無しさん
2009/09/17(木) 20:48:54idouble[] arr = [1i, 2i, 3i, 4i];
arr[] += 3;
でエラー吐いた後dmd落ちた。
ちなみにdmd2.032ね
演算後に型が変化しないことを表明する白魔術探すか
0959デフォルトの名無しさん
2009/09/17(木) 21:16:12import std.stdio;
void test() {writeln("test");}
void main() {
test!(0, true, "AAAAAAAAA!")();
}
$ dmd -run test.d
test
(゚д゚)
0960デフォルトの名無しさん
2009/09/17(木) 22:07:080961デフォルトの名無しさん
2009/09/17(木) 22:45:230962デフォルトの名無しさん
2009/09/18(金) 01:52:36それが実現したらなんていうか、言葉に出来ない気持ちだよね
0963デフォルトの名無しさん
2009/09/18(金) 11:11:210964デフォルトの名無しさん
2009/09/18(金) 11:17:510965デフォルトの名無しさん
2009/09/18(金) 20:42:39原因を特定するために、convのソースを見てみたのですが、2979行のreturn to!T(cast(size_t) value, 16u);が分かりません。
この先は何行目を見ればいいのでしょうか?
0966デフォルトの名無しさん
2009/09/18(金) 20:44:070967デフォルトの名無しさん
2009/09/18(金) 20:51:200968デフォルトの名無しさん
2009/09/18(金) 20:52:25void main()
{
write("Say hello : ");
string line = readln();
if (line == "hello")
writeln("Hi.");
else
writeln("Bye...");
}
これ何入力しても偽になるんだがヘルプミー
Ubuntuです
0969デフォルトの名無しさん
2009/09/18(金) 20:55:49hello^
0970デフォルトの名無しさん
2009/09/18(金) 20:55:570971デフォルトの名無しさん
2009/09/18(金) 21:02:10http://code.google.com/p/noop/wiki/PropositionForScopes
あるインターフェースを宣言したスコープの中で俺実装のものを使うようにする
というようなことができるらしい
アロケータを切り替えたりするのに使えないかなーと思ってる。
今はコンストラクタに渡したり型に入れたりいまいちすっきりしないと思ってたので
0972デフォルトの名無しさん
2009/09/18(金) 21:02:13というかtypedefの元の型を取る方法ってあるんだろうか
0973デフォルトの名無しさん
2009/09/18(金) 21:05:05つstd.string.chop(readln());
0974デフォルトの名無しさん
2009/09/18(金) 21:18:37^はなんだそ
>>973
できたサンクス
chopで改行文字取り除いてるってこと?
0975デフォルトの名無しさん
2009/09/18(金) 21:21:260976デフォルトの名無しさん
2009/09/18(金) 21:24:42static if(is(T X == typedef))
0977デフォルトの名無しさん
2009/09/18(金) 21:28:43L2700
0978デフォルトの名無しさん
2009/09/18(金) 21:29:03あなるほど再定義すればいいのか
Thx
0979デフォルトの名無しさん
2009/09/18(金) 21:39:080980デフォルトの名無しさん
2009/09/19(土) 00:28:04thx
見る場所を間違えていました。
0981デフォルトの名無しさん
2009/09/19(土) 01:47:16これに対してD言語で作ったDLL(extern (C) export)で、下記の4つを試しました。
1、空の関数を呼び出す→何もおきない
2、例外を投げてキャッチしない→「不正な処理〜」とメッセージが出て落ちる
3、例外を投げて、投げた型でキャッチする→上と同じ
4、例外を投げて、Object型でキャッチする→何もメッセージが出ずに落ちる
3と4が謎です。
テストコードのexeを作って、そのまま実行なら落ちないんですが、
DLLにすること事によって例外の挙動が変わるのはどういうことなのでしょうか?
0982デフォルトの名無しさん
2009/09/19(土) 01:58:08DLLのインターフェースにする関数はnothrowな関数であるべきだと思う。extern(C)なら特に。
0983デフォルトの名無しさん
2009/09/19(土) 02:28:05DLL内の関数で投げて、その関数内でキャッチしてます。
3はキャッチできてなさそうだし、4はキャッチできてるならDLLの外には影響しないはず?と思うのですが謎です。
0984デフォルトの名無しさん
2009/09/19(土) 11:12:260985デフォルトの名無しさん
2009/09/19(土) 13:03:54Objectをキャッチしても落ちると言うなら、何かしらのアクセス違反があるのかもしれない。
0986デフォルトの名無しさん
2009/09/19(土) 13:50:57丁度try-catchで止められない例外が出たわ
自分のは単にアクセス違反だったよ
デバッガで追うと意味不明なところで止まるから、
そこで使ってるグローバル変数を__gsharedでマークしたらとりあえず動いた
extern(C) exportの中はTLSにアクセスすることすら許されないんだろうか…
0987デフォルトの名無しさん
2009/09/19(土) 15:36:26class Exception {};
try{
throw new Exception;
}
/*catch (Exception e) {}*/
catch (Object o) {}
関数の中身は簡単なテストコードです。
うーん、分からない。
0988デフォルトの名無しさん
2009/09/19(土) 15:52:180989デフォルトの名無しさん
2009/09/19(土) 17:01:57どうやらそれっぽいです。
throw new Exception;
を
Exception x = new Exception;
に変えても同じ症状になりました。
どうもでした。
レス数が950を超えています。1000を超えると書き込みができなくなります。