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)
0611デフォルトの名無しさん
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:11■ このスレッドは過去ログ倉庫に格納されています