トップページ⇒tech
989コメント254KB

D言語 Part22

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん2009/06/22(月) 01:38:41
プログラミング言語 D (D Programming Language) について語るスレッドです。
過去スレ、関連スレは >>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)
0939デフォルトの名無しさん2009/09/14(月) 21:56:14
コンパイラのバージョン、標準ライブラリのバージョンごとに書かれたparse関数があって
mixin(parse!(import("mymodule.pd")));
とかしてやるわけか。
0940デフォルトの名無しさん2009/09/14(月) 22:07:33
とりあえずD2をD1に変換してください
0941デフォルトの名無しさん2009/09/14(月) 22:19:18
そしてPseudo-Dの仕様が一向に固まらなくて疑似Pseudo-Dのコードで配布しようという所に落ち着く
0942デフォルトの名無しさん2009/09/14(月) 22:28:06
Pseudo-Pseudo-Dの誕生です。しかし、Pseudo-Pseudo-Dの仕様が固まらず、Pseudo-Pseudo-Pseudo-D以下略
0943デフォルトの名無しさん2009/09/14(月) 22:56:55
Stack Overflow
0944デフォルトの名無しさん2009/09/14(月) 23:54:10
doxygenってD言語(DMD2.031)に対応してますか?
version1.6.1を使ってみたところ上手くhtmlを吐いてくれない。。
0945デフォルトの名無しさん2009/09/15(火) 00:18:30
>>944
-Dすれば?
ソースが複雑だとDMDですら落ちるけど。
0946デフォルトの名無しさん2009/09/15(火) 01:01:36
>>945
レスthx
オプション知らなかった、試してみます。
0947デフォルトの名無しさん2009/09/15(火) 04:38:29
既存のライブラリをあるフォルダAに入れて使いたいと思ったとき、
いちいち module や import などで A. って付けないといけないですか?

だとしたらメンドクサイ・・・。
0948デフォルトの名無しさん2009/09/15(火) 05:57:57
>>947
-IA
0949デフォルトの名無しさん2009/09/15(火) 07:11:59
いあいあ
0950デフォルトの名無しさん2009/09/15(火) 07:22:51
くとぅるふふたぐん
0951デフォルトの名無しさん2009/09/15(火) 09:49:30
950越えたから保守
俺ケータイなので
誰か次スレ立てておk
0952デフォルトの名無しさん2009/09/15(火) 13:20:29
>>948

なるほど、どうもありがとう!!
0953デフォルトの名無しさん2009/09/16(水) 03:39:32
Dのデストラクタは予想以上に呼ばれないね
消したら?
0954デフォルトの名無しさん2009/09/16(水) 03:53:00
そりゃガーベジコレクタが動くまでは呼ばれないから
C++のデストラクタのようなものを期待してれば裏切られる。

Dのクラスオブジェクトのデストラクタは、
Javaや.NETでいうファイナライザに相当するもの。
0955デフォルトの名無しさん2009/09/16(水) 03:58:28
C++のデストラクタのようなものが欲しいなら.NETでいうDisposeパターンを実装するしかない。
C++/CLIではDisposeメソッドのことをデストラクタと呼んでいるくらいだし。
0956デフォルトの名無しさん2009/09/17(木) 06:23:14
            /^l
     ,―-y'"'~"゙´  |   それ  るるいえ うがふなぐる ふたぐん
     ヽ  ´ ∀ `  ゙':
     ミ  .,/)   、/)    いあ    いあ
     ゙,   "'   ´''ミ   ハ,_,ハ    ハ,_,ハ
  ((  ミ       ;:'  ,:' ´∀`';  ,:' ´∀`';
      ';      彡  :: っ ,っ  :: っ ,っ
      (/~"゙''´~"U    ι''"゙''u   ι''"゙''u
0957デフォルトの名無しさん2009/09/17(木) 12:57:23
うぉるたー!
0958デフォルトの名無しさん2009/09/17(木) 20:48:54
配列演算が楽しくなってきたところで…

idouble[] arr = [1i, 2i, 3i, 4i];
arr[] += 3;

でエラー吐いた後dmd落ちた。
ちなみにdmd2.032ね

演算後に型が変化しないことを表明する白魔術探すか
0959デフォルトの名無しさん2009/09/17(木) 21:16:12
test.d

import std.stdio;
void test() {writeln("test");}
void main() {
test!(0, true, "AAAAAAAAA!")();
}


$ dmd -run test.d
test


(゚д゚)
0960デフォルトの名無しさん2009/09/17(木) 22:07:08
複素数はstd.complexに置き換えられるのだろうか?
0961デフォルトの名無しさん2009/09/17(木) 22:45:23
もうZ言語までいこうぜ
0962デフォルトの名無しさん2009/09/18(金) 01:52:36
>>960
それが実現したらなんていうか、言葉に出来ない気持ちだよね
0963デフォルトの名無しさん2009/09/18(金) 11:11:21
libcurlのバインディングで使い物になるやつ知りません?
0964デフォルトの名無しさん2009/09/18(金) 11:17:51
systemでcurlを起動してる俺に言われても
0965デフォルトの名無しさん2009/09/18(金) 20:42:39
char*からstringへの変換をstd.convのtoを使って書いたのですが、実行時に例外ConvErrorが投げられます。
原因を特定するために、convのソースを見てみたのですが、2979行のreturn to!T(cast(size_t) value, 16u);が分かりません。
この先は何行目を見ればいいのでしょうか?
0966デフォルトの名無しさん2009/09/18(金) 20:44:07
noopのscopeいいな。Dにも入れて欲しい
0967デフォルトの名無しさん2009/09/18(金) 20:51:20
どういう機能?
0968デフォルトの名無しさん2009/09/18(金) 20:52:25
import std.stdio;
void main()
{
write("Say hello : ");
string line = readln();
if (line == "hello")
writeln("Hi.");
else
writeln("Bye...");
}

これ何入力しても偽になるんだがヘルプミー
Ubuntuです
0969デフォルトの名無しさん2009/09/18(金) 20:55:49
>>968
hello^
0970デフォルトの名無しさん2009/09/18(金) 20:55:57
D
0971デフォルトの名無しさん2009/09/18(金) 21:02:10
>967
http://code.google.com/p/noop/wiki/PropositionForScopes
あるインターフェースを宣言したスコープの中で俺実装のものを使うようにする
というようなことができるらしい
アロケータを切り替えたりするのに使えないかなーと思ってる。
今はコンストラクタに渡したり型に入れたりいまいちすっきりしないと思ってたので
0972デフォルトの名無しさん2009/09/18(金) 21:02:13
typedef型をtoで文字列にしたり戻したりできないのな
というかtypedefの元の型を取る方法ってあるんだろうか
0973デフォルトの名無しさん2009/09/18(金) 21:05:05
>>968
つstd.string.chop(readln());
0974デフォルトの名無しさん2009/09/18(金) 21:18:37
>>969
^はなんだそ

>>973
できたサンクス
chopで改行文字取り除いてるってこと?
0975デフォルトの名無しさん2009/09/18(金) 21:21:26
>>969-970で一続きとみた
0976デフォルトの名無しさん2009/09/18(金) 21:24:42
>>972
static if(is(T X == typedef))
0977デフォルトの名無しさん2009/09/18(金) 21:28:43
>>965
L2700
0978デフォルトの名無しさん2009/09/18(金) 21:29:03
>>976
あなるほど再定義すればいいのか
Thx
0979デフォルトの名無しさん2009/09/18(金) 21:39:08
>>976 is 式ほどわけわからんもんもないなあw
0980デフォルトの名無しさん2009/09/19(土) 00:28:04
>>977
thx
見る場所を間違えていました。
0981デフォルトの名無しさん2009/09/19(土) 01:47:16
C言語でDLLを作ることによって拡張できるアプリケーションがあります。
これに対してD言語で作ったDLL(extern (C) export)で、下記の4つを試しました。

1、空の関数を呼び出す→何もおきない
2、例外を投げてキャッチしない→「不正な処理〜」とメッセージが出て落ちる
3、例外を投げて、投げた型でキャッチする→上と同じ
4、例外を投げて、Object型でキャッチする→何もメッセージが出ずに落ちる

3と4が謎です。
テストコードのexeを作って、そのまま実行なら落ちないんですが、
DLLにすること事によって例外の挙動が変わるのはどういうことなのでしょうか?
0982デフォルトの名無しさん2009/09/19(土) 01:58:08
例外はDLLを越えちゃいかんのでは?
DLLのインターフェースにする関数はnothrowな関数であるべきだと思う。extern(C)なら特に。
0983デフォルトの名無しさん2009/09/19(土) 02:28:05
>>982
DLL内の関数で投げて、その関数内でキャッチしてます。
3はキャッチできてなさそうだし、4はキャッチできてるならDLLの外には影響しないはず?と思うのですが謎です。
0984デフォルトの名無しさん2009/09/19(土) 11:12:26
キャッチ出来てない例外があるとは思わないのか
0985デフォルトの名無しさん2009/09/19(土) 13:03:54
>>984 の言うように取れてない例外があるか…
Objectをキャッチしても落ちると言うなら、何かしらのアクセス違反があるのかもしれない。
0986デフォルトの名無しさん2009/09/19(土) 13:50:57
>>981
丁度try-catchで止められない例外が出たわ

自分のは単にアクセス違反だったよ
デバッガで追うと意味不明なところで止まるから、
そこで使ってるグローバル変数を__gsharedでマークしたらとりあえず動いた

extern(C) exportの中はTLSにアクセスすることすら許されないんだろうか…
0987デフォルトの名無しさん2009/09/19(土) 15:36:26
>>984-986
class Exception {};
try{
  throw new Exception;
}
/*catch (Exception e) {}*/
catch (Object o) {}

関数の中身は簡単なテストコードです。
うーん、分からない。
0988デフォルトの名無しさん2009/09/19(土) 15:52:18
GC初期化されてなくてnewで死んでるとかはないか?
0989デフォルトの名無しさん2009/09/19(土) 17:01:57
>>988
どうやらそれっぽいです。
throw new Exception;
を
Exception x = new Exception;
に変えても同じ症状になりました。

どうもでした。
レス数が950を超えています。1000を超えると書き込みができなくなります。