1 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 20:16:30 ] プログラミング言語 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://www.sun-inet.or.jp/~yaneurao/dlang/ ttp://wisdom.sakura.ne.jp/programming/d/
202 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 12:14:31 ] あ、string系のaliasがconst(char)[]からinvariant(char)[]に変わったのか。 ……どーいう意味を持つのかイマイチ分からない。 というか、未だに「invariant型」の動作がよく分からん。 invariant(char[]) book = "I, Robot"; って宣言したbookに関して、 book ~= " by Isaac Asimov"; book.length = 1; book = "2001 Space Odyssey"; こういう動作は別に禁止されないんだよね。invariant型って、どういう目的で使えばいいの?
203 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 12:32:07 ] >>191 D2.006の新しいPhobosの機能をD1.xに移植した人がdigitalmars.D.announsに。 std2ってやつ。
204 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 13:24:39 ] >>202 invariant(char[]) book = "I, Robot"; を invariant(char)[] book = "I, Robot"; で、意味が変わるきがするが
205 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 14:02:50 ] >>201 !isはisが導入されたときからあったと思う
206 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 14:11:49 ] >>204 それは同じ意味になる www.digitalmars.com/d/final-const-invariant.html の Invariant Doesn't Apply To Declared Symbols のあたり。
207 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 14:19:58 ] >>202 たとえば class Stream { int opApply( int delegate(ref const(char)[] line) dg ); } こういう宣言だったとしたら、 string s; foreach(line; din) if( line[0] == '#' ) s = line; writeln( "#で始まってた最後の行は", s ); このコードは期待した通りに動かないかもしれない。 Streamが内部でlineの中身を勝手に再利用してるかもしれないので。 constだと、"自分が"lineの中身を書き換えることはできなくなるけど、 他のところで書き換えが起こる可能性は否定できない。 これが class Stream { int opApply( int delegate(ref invariant(char)[] line) dg ); } こうだったら、opApplyの実装を見るまでもなく↑のコードは普通に動く。 invariantな配列の中身はもう"誰も"書き換えないので、Streamが後で 書き換えるようなことがない。 とかそういう使い方。
208 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 14:29:13 ] おい。invariant周りでコンパイル通らなくなったぞ。 まーた全部書き換えかよ…
209 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 14:48:24 ] なんでもかんでもidupつけないといけないのは気持ち悪いな
210 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 15:21:42 ] aasumeUniqueでおk
211 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 15:49:37 ] ttp://www.digitalmars.com/d/phobos/std_contracts.html string letters() { char[] result = new char['z' - 'a' + 1]; foreach (i, ref e; result) { e = 'a' + i; } return assumeUnique(result); } これか なるほど
212 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 19:05:34 ] >>208 動作確認してなかったので翻訳してなかったんだが、 string, wstring, dstringの定義をinvariant付きにしました。 関数の定義と実装を(標準ライブラリ関数の影響も含めて)山ほど変更する必要があります。 invariantなstringを使ってみた最初の感想としては、かなり有望です。 なにがどう有望なのか試してないのでなんともいえませんが。
213 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 19:37:54 ] おいおい、phobos 張り切るのもいい加減にしろよ。tango の立場がなくなっちまうじゃないか。
214 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 20:01:30 ] walたんがTangoに「○○追加してね」っていえばいい
215 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 20:41:34 ] D2.x用のTangoは、どうなってる? もう出てる?
216 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 20:45:46 ] >>215 まだじゃね?
217 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:20:07 ] import std.stdio, std.contracts; void main() { foreach(string line; lines(enforce(fopen(__FILE__)))) { write(line); } } SUGEEEE
218 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:22:39 ] そんな感動するようなことじゃないが、これまでなかったのが不思議だな。
219 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:31:01 ] そういう短いけれども案外実用的なコードがたくさん欲しいところ
220 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:31:17 ] >>187 解決しました。 すいません、もともとあったメモリ関係のバグが、たまたま出てきた形でした。
221 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:45:35 ] D言語、1系が安定しない永遠のβだった頃から注目してるけど、 1系が成熟しないままさっさと2系に移ったところを見ると 実用的になるのは3系が登場してからかなと思ってしまう。
222 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:51:38 ] Dは永遠にをるたんの実験言語。 実用的になるなんてあり得ないよ。
223 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:59:20 ] >>209-211 さっぱりわからんのだが・・・ idup付ける代わりにassumeUniqueで済むってことだけじゃないよな? 余計にタイプ数増えるんだが 本当はassumeUniqueは何のためのものなの?
224 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 22:05:37 ] >>223 idupはデータのコピーが行われるが、 assumeUniqueはコピーが行われない。
225 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 22:40:23 ] >>224 うーん そうですか もうちょっと暗黙のコピーが発生するのを許容して 明示的な指定が減るようになったらいいね
226 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 22:50:17 ] テストしてなさすぎワロス いろいろ試してみたがdmd2.006はstd.formatが壊れてるな //>writef //testtest1010 //%s=%dvalue200 import std.stdio; void main(){ writef("test", "test", 10, 10, "\n%s=%d", "value", 200, "\n"); }
227 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:01:33 ] >>226 >Breaking change: std.stdio.writef can now only accept a format as its first argument.
228 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:21:22 ] >>227 あ 最後に書いてあるのそういうことか thx
229 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:34:02 ] stringにconstつけてみたりinvariantになったりするのはWalterたんからの「ソース見直せリファクタリング汁!!」というご命令に違いない!
230 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:57:41 ] Andrei Alexandrescuありがとう、そしてがんばれー とエールを送っておこう
231 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 01:09:50 ] >>230 Andrei Alexandrescu先生のTMPが見られるのは今やD言語だけ!(でもない)
232 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 01:40:11 ] gdcってdmdで言うv2.0以降はあるの?
233 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 01:46:50 ] svnで対応してるよ。
234 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 19:31:42 ] >>206 ありがと しらんかった
235 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 00:01:06 ] coroutineが、phobosでほしいなぁ
236 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 00:14:29 ] そこは言語仕様に組み込むべきだろう。
237 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 06:13:14 ] dmd2.004 以降でこういうちょっと怪しいのをコンパイルしようとすると途中で固まる。 void main(){ f([[]]); } void f(int[][] a){} f(cast(int[][])[[]]); ならおk -v 付きでコンパイルすると semantic3 までは表示されるけど code が表示されずに止まってる。 何これ?
238 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 06:40:44 ] D言語で作られたアプリケーションって何があるよ
239 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 11:33:27 ] Dで作ったOS それがDOS
240 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 11:37:56 ] ttp://www.digitalmars.com/d/phobos/std_string.html int ifind(in const const char[] s, in const const char[] sub); なんなんだ、const だらけかよ。 inつかっても constをこれだけ使うっていうのがなんとも・・・
241 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 12:44:04 ] in const constってどういう意味ですかwwww inって invariant const scopeだったよねwwwconst三つですかwwwww
242 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 13:09:17 ] typo ソース見れ
243 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 13:36:42 ] D言語でstaticライブラリをつくる方法はどうやるのでしょうか。 コンパイル激早なんで、やる必要があまりないのかもしれませんが・・・
244 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 13:50:03 ] budなら bud -lib main.d 何も使わないでやるなら dmd -c main.d lib -c -l main.lib main.obj
245 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 13:50:18 ] >>240 なんかintつけるとDDocが変なものを生成する。
246 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 14:18:48 ] static引数まだー?
247 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 16:20:50 ] >>246 なにそれ
248 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 16:53:40 ] 関数名に?入れて述語ry そういやなんで?とか!とかは識別子にならないの?
249 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 17:01:03 ] scopeクラスが単にnew ScopeClass();でエラー出さないでしかもスコープ抜けてもデストラクタが呼ばれないですけどこれはバグ?
250 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 17:03:49 ] やっべDMD古いからかな。新しいので試してみます。一応古いのは1.020です
251 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 17:24:27 ] >>249 scope周りはバグだらけ。もうどうしようもない
252 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 17:40:25 ] 把握しました
253 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 17:50:04 ] 本当にconstとかinveriantとか必要なのか? C++から移ってきたときはほしいなと思ったこともあったけど、現状のconstとinveriantを見てるとうざったさ以上の便利さを感じない… もっと上手い方法なかったのかな…
254 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 18:03:42 ] デリゲート便利だなw Scheme触って帰ってきたら使わずには居られないwwww
255 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 19:50:18 ] >>253 constまわりは、まだまだこれからって感じだと思う。 現時点では文字列をimmutableにするためにしか使われてないし。 評価を下すのはまだ早いと思う。 現状のconstまわりの仕様には問題あると思うが。 文字列(配列)のスライスはコピー作らないから、文字列をimmutableにする意味はあると思うし、現時点では、 「inveriantは文字列をimmutableにするためのもの」 って割り切って、それ以外の機能は使わないようにすれば何とかやっていけそうだと俺は感じてる。
256 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 23:12:18 ] >>244 ありがとうございます 作れました!
257 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 02:46:33 ] 勇気出してD2を入れることにしたぞー!
258 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 07:56:12 ] macroって結局なんなの?
259 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 13:09:30 ] >>258 カンファレンスのをるたんのスライド見れば分かるよ。
260 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 14:45:02 ] それでも俺は1系列を使い続ける
261 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 16:50:22 ] >260 1系列は俺に任せてお前達は先に行け! まで読んだ
262 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 17:38:26 ] >>261 文字数増えてるという不思議。
263 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 18:20:58 ] >>262 つまり行間じゃなくて字間を読んだということか
264 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 20:27:45 ] D2.0のstring周りの改変は 暗黙のコピーがいやでしょうがない どこでどう動いてるか把握したい 文字列で、知らぬ間にメモリをちょっとでも使われるのも嫌でたまらん ってことかな。 スクリプトライクな手軽なコーディングを できるだけ殺さないように、がんばってんだよね
265 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 22:14:00 ] みんな phobos と tango のどっち使ってる? phobos は単純明快だが機能面でちょっと不足な上にバグ多いし、 tango は機能面はある程度充実してるけどドキュメントが整備されてない上に使いにくかったりするし、 なんかこう、どっちも中途半端なんだよなぁ。
266 名前:デフォルトの名無しさん [2007/10/20(土) 22:28:27 ] >>248 全角?も駄目なんだな。これで我慢しとけ。 bool もしかしてnullですか(Object nullかどうか調べるオブジェクト) { return nullかどうか調べるオブジェクト is null; }
267 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 00:09:01 ] もしかしてnullですか?
268 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 00:10:25 ] もしかしてnullですか¿
269 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 00:11:09 ] nullですよ¡
270 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 03:22:06 ] >>264 藻前は組み込みに向いている Dが組み込みに対応するその日まで Dで生き延びろ
271 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 03:25:55 ] >>264 の発言は>>264 自身のことじゃなくてDの文字列仕様の意図でしょ?
272 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 07:58:34 ] >>265 両者の良いところが全部一つに集まると、 素晴らしき真のDが誕生してどんな願いも叶えてくれると伝説にはあります
273 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 09:51:27 ] >>270 げ、するどい 正直びっくりした。 組み込み屋です。 Dが早く使えないかねらってます。
274 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 12:02:31 ] ちょっと和んだ
275 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 13:55:30 ] >>273 そう考えると2.006 invariant stringは有望だなあ。 Walterたんが「リアルタイム処理ではmalloc/freeよりGCの実行制御のほうが有利なこともある」 ってるが、そういうのは確かにあるので分かる気はする。 実際free listと組み合わせるとなかなか高速に動作してくれるし。 ada並の用途になるとDも本望だろう。
276 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 14:37:40 ] >>272 それを後の人は「闇鍋」と呼んだ。
277 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 14:57:01 ] D1〜D7まで揃えるとDragonが(ry
278 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 15:34:37 ] 組み込み屋ってなにするひと?
279 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 15:45:17 ] >>278 ttp://ja.wikipedia.org/wiki/組み込みシステム
280 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 15:57:58 ] >>279 サンクス
281 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 17:11:50 ] 組み込みに関してはかなり素人で見当違いなことかもしれないんだが… たとえばH8のマイコンがGCCのコンパイラでコンパイルできるみたいだけど、 GDCとH8を使ってD言語による組み込み向けのプログラムを作ることはできないのかな?
282 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 18:59:26 ] GDC
283 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 19:00:39 ] ごめん、途中で送ってしまった GDCでクロスコンパイラはつくれるかもしれないが、 ターゲットが32ビットCPUでないとだめかもしれない。
284 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 19:01:25 ] tango 0.99.2を使ってるんだが、IConduitやらOutputStreamやら入出力周りの関係と用途がさっぱりわからん。 ソースによらず汎用的にストリームを扱いたいときはどのインタフェースをサポートすればいい?
285 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 20:22:16 ] >>281 去年 gdc を H8 にポートしてみた事がある。 phobos の GC がうまく動作しないところで絶賛放置中。 2日の作業じゃここらが限界だった。
286 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 22:06:18 ] GCつかわなければいけるんじゃなかろうかと一瞬考えたけど、そんなDに意味はあるのかどうか真剣に考えてしまった。
287 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 22:16:38 ] ベターC++と高速コンパイルだぜ!
288 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 22:41:03 ] GDCだと遅い罠
289 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 00:17:21 ] じゃあ意味ないんじゃね?
290 名前:デフォルトの名無しさん [2007/10/22(月) 00:56:13 ] >>284 flectioned から抜き出してみた。tango と phobos の差異を吸収するような 書き方が一番なんでないかい? static if(is(typeof((new object.Object()).toUtf8()) == char[])){ const bool inTango = true; const bool inPhobos = false; }else{ const bool inTango = false; static if(is(typeof((new object.Object()).toString()))){ const bool inPhobos = true; }else{ const bool inPhobos = false; } } static if(inTango){ import tango.stdc.stdio; } else static if(inPhobos) { import std.c.stdio; } int main() { printf("Hello world"); return 0; }
291 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 00:58:57 ] またあげちまったよ・・・すまん
292 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 01:23:43 ] ttp://dsource.org/projects/tangobos/browser/trunk Tangobos is a compatibility layer to allow most Phobos software to be compiled unmodified on Tango. It is effectively a port of Phobos to Tango: it is only modified to the degree required to make it compile. これってTango/Phobos共存させるのが目的なんだよな?
293 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 02:30:10 ] テラタンゴボスwww
294 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 10:56:20 ] なんというド直球ネーミングw
295 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 11:06:07 ] D言語製のブラウザってある?
296 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 12:24:25 ] >>292 Tangoboswww 見間違いかと思ったわw
297 名前:デフォルトの名無しさん [2007/10/22(月) 12:57:13 ] >>292 Tangoの上に乗っかるPhobos互換レイヤか
298 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 13:07:18 ] どっちかに統一したほうが良いように思うのは俺だけ?w
299 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 13:09:36 ] Tangoboswwwwwwwwwwwww
300 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 13:31:59 ] >>298 統一してほしいね〜 そもそも、TangoはPhobosと共存できないように 作る必要があったのだろうか?
301 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 14:03:17 ] 誰かがグレイトなライブラリを作ればいい。 どうせ D はまだ実用されてるとは言いがたい状況なんだし、 新規のライブラリがポンと出てきた所で問題は無い。
302 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 14:08:58 ] それをここで作るんですよ