- 1 名前:デフォルトの名無しさん [2008/02/10(日) 15:06:12 ]
- プログラミング言語 D (D Programming Language) について語るスレッドです。
過去スレは >>2 ■本家 ttp://www.digitalmars.com/d/ ttp://www.kmonos.net/alang/d/ (和訳) ■コンパイラ ttp://www.digitalmars.com/d/dcompiler.html (DMD, 本家) ttp://dgcc.sourceforge.net/ (GDC, gccフロントエンド) ttp://gdcmac.sourceforge.net/ (GDCのmac用バイナリ) ■参考URL ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究) ttp://dsource.org/ (dsource) ttp://tinyurl.com/3da5oa (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動画) ■ 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)
- 755 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 23:32:52 ]
- >>754
サンクス!
- 756 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 00:23:30 ]
- CTFEでwithが使えないってのはどういう理由なんだろう
- 757 名前:737 mailto:sage [2008/03/15(土) 00:35:21 ]
- >>746
ヽ( ・∀・)人(・∀・ )ノナカーマ
- 758 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 04:08:08 ]
- >>756
シンボルの検索は兎も角として、ポインタ使えないのにwithが使えてどうするという気が。
- 759 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 04:16:15 ]
- 多くのメンバを持つ構造体にアクセスするときとか、
with(std.stdio)みたいに普段は使わないモジュールを導入するとか 便利だと思うんだけどなあ。 withとポインタが使えないことに何の関係があるのかはよくわからない。
- 760 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 17:24:57 ]
- MacOSX 10.5 Leoprad でD言語の環境をそろえようと思って
sudo port install gdc して、簡単な HELLO WORLD つくって test.d で保存して gdc test.d したんだけど object.d が見つからんと言われたので、ひとまずインポートパスを指定して gdc -I "/opt/local/include/d/4.1.2" test.d ってやったら、 ld: file not found: crt.o てエラーが出たんだが。。。これってリンカエラーだよね。 crt3.o ってファイルは dmc 関係のフォルダでいくつか見つかったんだけど、 どこでパスを指定するの? というか、gdc のリンカに dmc のオブジェクトファイル渡してもいいのかな??
- 761 名前:760 mailto:sage [2008/03/15(土) 17:26:03 ]
- いや、よく見たら gcc のフォルダにも crt3.o がありました
- 762 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 17:36:01 ]
- file not found: crt.o
なのになんでcrt3.oを探してるの?
- 763 名前:760 mailto:sage [2008/03/15(土) 17:53:03 ]
- あ、しつれい
ld: file not found: crt3.o だった
- 764 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 19:42:15 ]
- Phobosのboxer.dの中に
TypeInfo type() const { return cast(TypeInfo)p_type; } こういうメソッドがあるけど、constがメソッド名の後ろにあるのってどんな意味があるんでしょう?
- 765 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 19:48:01 ]
- それはC++風の書き方で、普通はconst TypeInfo type()と前置する。
constをつけたメンバ関数はconstメンバ関数とみなされて、 thisポインタを経由してオブジェクトの状態を変更しないことが保障される。
- 766 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 20:19:41 ]
- >>765
なるほど、C++だとこういう風に表記するんですね。 わざわざ後ろにあるので何か特別な意味があるのかと思いました。 有難う御座いました。
- 767 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 21:43:32 ]
- Tangoについての質問です。
やりたいことは正規表現でstr中のURLをハイパーリンクにすることなんですが、 auto replaced = Regex(r"((?:f|ht)tp://[\w\.$,;:&=?!*~@#\(\)/]*)").replaceAll(str, "<a href=\"$1\">$1</a>"); こういうコードにしてみたら戻り値が無いんですが、perlの $str =~ s/((?:ht|f)tp\:\/\/[a-zA-Z0-9.$,;:&=?!*~@_\(\)\/#]*)/<a href="$1">$1<\/a>/g; のようにするにはどうすれば良いのでしょうか。
- 768 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:19:16 ]
- >>767
Tango使ってないけどソース見てみた. >戻り値が無い ということはnullということなんだろうけど, ただ単にその正規表現だと見つけれてないだけな気がする. ソース見る限りはsearchやってるだけだし. Phobosのregexp.dの中にURL用の正規表現文字列があるからそれ使ってみるとか. Phobosのregexp.dだと後方参照しないグループ化は出来なかったと思うんだけど(余り使ってないので自信なし), TangoのRegexp.dだと出来るのか.
- 769 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 01:06:49 ]
- >>767
俺もTangoは使ってないんだが、マニュアルを見る限り、 (?:ht|f)の所は(?ht|f)が正しいのではないかと思う。 あと、replaceAllで$1とかは使えないかもしれない。 ソースを見てみると単純に連結していて、$1とかでどうこうという処理はしていないようだから。
- 770 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 01:45:32 ]
- >>768
searchやってるだけじゃないよ。 >>767 なんとか動いた。 $1とかは置換してくれないみたいだね 固定した文字列との置換なら、delegateのいらない方のreplaceAllでもOK (?:)は使えないので()を使用する。 phobosのregexpもそうだったはず。 //tango-0.99.5 で新しくなったRegex用 import tango.text.Regex, tango.io.Stdout; void main() { char[] s = `hoge pc11.2ch.net/ hoge www.digitalmars.com/d/ fuga`; auto re = RegExpT!(char)(`((ht|f)tp\:\/\/[a-zA-Z0-9.$,;:&=?!*~@_\(\)\/#]*)`,`g`); auto dg = delegate char[] (RegExpT!(char) re) { return `<a href="`~re.match(1)~`">`~re.match(1)~`</a>`; }; char[] result = re.replaceAll(s, dg); Stdout(result).newline; }
- 771 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 01:57:58 ]
- aliasがあるから、わざわざRegExpT使わなくてもいいみたい
import tango.text.Regex, tango.io.Stdout; void main() { char[] s = `hoge pc11.2ch.net/ hoge www.digitalmars.com/d/ fuga`; char[] result = Regex(`((ht|f)tp\:\/\/[a-zA-Z0-9.$,;:&=?!*~@_\(\)\/#]*)`,`g`).replaceAll(s, (Regex r) { return `<a href="`~r.match(1)~`">`~r.match(1)~`</a>`; } ); Stdout(result).newline; }
- 772 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 07:27:35 ]
- >>770-771
どうもです。 そのソースをまるまるコピペして動かしてみたんですが、 object.Exception: Access Violation となってしまいました。 うーん。
- 773 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 14:11:47 ]
- >>772
とりあえずTangoを入れて動かしてみたけど >object.Exception: Access Violation となるのはStdoutのせいっぽい(俺の環境では). tango.io.ConsoleのCoutを使ったら,771のソースでちゃんと置換されたのが表示された. Stdoutでこのエラーになる原因は面倒なので追ってない.
- 774 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 16:32:06 ]
- tango.text.Regex の compileToD すごいな。
出力されたコードを少し書き換えたらCTFEでも動いた。 CTFEで正規表現使いたい時にいいかも。 単純な処理しかしてないから、 Cやアセンブラに書き換えるのも容易かも。しかし長いw
- 775 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 18:21:13 ]
- >>772
Stdoutでバグるのは,Regex.dでdebug時にStdout.dをimportしてたから コンパイル時にdebugオプションをつけたら動くようになった. といってもdebugなしで普通にimportしてもエラーが出るので, この辺の原因はよく分からない. static thisとかの初期化とかで何か問題が発生してるのかも. 力になれなくて申し訳ない.
- 776 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 18:54:33 ]
- PhobosとTangoが仲良くなりますように(-人-)
- 777 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 18:54:47 ]
- っTangobos
- 778 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 19:25:04 ]
- >>773>>775
うーむ、 Stdoutはデバッグで使いたいので、こうなると正規表現でURLを抜き出すのは面倒ですね。 別の手法も思いついたのでそっちで一度試して見ます。 どうもでした。
- 779 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 22:50:17 ]
- >>778
もういいかもしれないけど,とりあえず追加で書いとく. Stdoutがどうこうとか書いたけど,自分でもよく分からなくなってきたw 771のソース前提で,とりあえず出力される方法. ・Cout/Cerrを置く 色々試してたら,Cout/Cerrを置くと普通にStdoutでも出力されるようになった. ・Stdout(Stdout); これを置いても出力された.Stdoutの型も出力されるので使えない. ・Stdout.dと同じことをやる Stdout = new Print!(char) (new Layout!(char), Cout.stream); 同じことしてるのに効果が違うのはよく分からないんだけど. どれも根本的な解決策じゃないので応急処置的な感じ. >>770は動いているようだし,環境も関わってるのかなぁ. それにしてもStdout(Stdout)がまともに動くのは何故…
- 780 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 12:16:11 ]
- 日本語うめえ
- 781 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 12:16:34 ]
- 誤爆
- 782 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 15:57:50 ]
- なんかネタないの?
- 783 名前:770 mailto:sage [2008/03/18(火) 17:35:48 ]
- >>779
こちらでも、dmdでビルドしたものはAccessViolation出ました。 budで、tango-user-dmd.libを使わずにビルドすると正常動作するけど、 使う設定でビルドだと、AccessViolationでした。 tango-user-dmd.libを再makeすれば直るのかな??
- 784 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 20:37:12 ]
- >>783
budでOKということで,試しにDSSSでビルドしたら普通に動いた. これくらいは昨日試しておくべきだったorz 770の言うとおり,生成済みライブラリになんらかのバグ(コンパイル状況による?)があるっぽいね. Tangoのソースからのビルドが英語だらけで挫折.
- 785 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 06:46:04 ]
- >>782
ソースを落として、dmd.exeとdmc.exeにパスが通っている状態でlib内のbuild-tango.batとかを実行 …だと思うのだけど、再コンパイルできなかったりできてもやっぱりバグったリ…何かがおかしい。
- 786 名前:785 mailto:sage [2008/03/19(水) 06:47:12 ]
- >>782 じゃなかった… >>784 でした。申し訳ないorz
- 787 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 03:37:51 ]
- 今のところ2.0で動くGUIライブラリってない?
- 788 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 11:46:08 ]
- wxDの履歴にinvariant string対応とかあるけどどうなんでしょ
- 789 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 15:28:54 ]
- tangoのDateTimeとかはどこに消えたんですかね・・・
似たようなクラスって何かありますか?
- 790 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 19:29:35 ]
- tango.time.Timeの中にあるようだけど
- 791 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 19:55:15 ]
- 久しぶりにPoseidon落としてみたが、キーボードショートカットでrun_projectの割り当てが出来るようになってた。
軽いし、やっぱり気軽にプログラミングするにはいいエディタだな。
- 792 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 22:22:35 ]
- D言語をMac OS Xで始めました。
目的はWin/Linux用のD言語で書かれたコンソールアプリの移植です。 最初に既存のソースコードをXcodeからコンパイルして勉強できる環境を構築しようと思い立ち いろいろ調べていますが、参考になるサイト等見つかりません。 どなたかMacでその道に足を踏み入れた方はいらっしゃいますか?
- 793 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 23:46:49 ]
- D1/D2どちらでもいいので
C++のstringstreamみたいなのが欲しいんだけど ありませんでしたっけ? >>792 Macのは見かけたことないなー
- 794 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 00:02:49 ]
- MemoryStreamに書いて、readStringとか。
- 795 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 00:24:03 ]
- OutBufferに書いて、toBytesとか。
というかOutBufferの存在価値が昔から空気過ぎるんだけど必要なのかこれ。
- 796 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 00:27:01 ]
- >>794 こうだと何も表示されないんだけど何が足りないのでしょう?
import std.stdio; import std.stream; void main(){ Stream ms = new MemoryStream; ms.writeLine("hello"); string s = ms.readLine().idup; writefln(s); } >>795 OutBufferはいらないよな・・・
- 797 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 00:29:54 ]
- Streamは読み書きでpositionを共有してるからpositionのリセットが必要。
import std.stdio; import std.stream; void main(){ Stream ms = new MemoryStream; ms.writeLine("hello"); ms.position = 0; string s = ms.readLine().idup; writefln(s); }
- 798 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 00:30:16 ]
- これでできたようです
import std.stdio, std.stream; void main(){ Stream ms = new MemoryStream; ms.writeLine("hello"); ms.writeLine("world!"); string s = ms.toString(); writefln(s); }
- 799 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 00:31:30 ]
- >>797 もしかしてそうじゃないかなと思ってpositionを再設定しようと
思ったんだが 0 を入れればいいのかわからなかったので 発見した toString() を試してみたらいけました ありがとう
- 800 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 00:34:58 ]
- >>799
toStringでもOK。 ただ、toStringはread可能,seek可能かによって微妙に動作が変わるから注意な。
- 801 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 00:38:38 ]
- >>795
std.openrjと同じくらいは役に立つんじゃね?
- 802 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 00:47:09 ]
- >>790
これは・・・・・ もしかしてまだ作りかけなのかな・・・・
- 803 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 00:56:33 ]
- 壮絶な勘違
- 804 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 01:00:49 ]
- 単に.NETみたいにしたいだけなんじゃ…
|

|