D言語 Part22
■ このスレッドは過去ログ倉庫に格納されています
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)
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 使えばいいのでは?
■ このスレッドは過去ログ倉庫に格納されています