D言語 Part25
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/08/15(日) 07:59:24■前スレ
http://pc12.2ch.net/test/read.cgi/tech/1264432017/
■本家
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/candcpp2d2 (C/C++に疲れた人のD言語2.0)
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)
ttp://dusers.dip.jp (D言語友の会)
ttp://www.wish.sakura.ne.jp/desuno/game/Drawing (PrincessDrawing! D言語で作られた横スクロールSTG)
0002デフォルトの名無しさん
2010/08/15(日) 08:01:30ttp://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)
ttp://alexanderbothe.com/?id=27 (D-IDE)
ttp://codepoet.sourceforge.net (CodePoet ※計画中)
■過去スレ、関連スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=D%8C%BE%8C%EA&sf=2&all=on&view=table&shw=5000
■その他関連スレ
統合開発環境Eclipseプラグイン開発QA
http://pc11.2ch.net/test/read.cgi/tech/1081517094/
"Code of the Nerds" Digital Mars C/C++
http://pc11.2ch.net/test/read.cgi/tech/1044210976/
0003デフォルトの名無しさん
2010/08/15(日) 08:03:41立ててみました
0004デフォルトの名無しさん
2010/08/15(日) 08:13:410005デフォルトの名無しさん
2010/08/15(日) 14:16:55まだ生きてたかー、あれから状況は良くなったんかな?
0006デフォルトの名無しさん
2010/08/15(日) 14:43:08今年の5月にD2の安定版が出る予定。今4月137日だからあと少しだな。
0007デフォルトの名無しさん
2010/08/16(月) 18:25:53#d_lang Got Phobos' object.d to compile in 64 bit mode. On to the rest of Phobos.
0008デフォルトの名無しさん
2010/08/16(月) 22:52:54GCまわりとか
0009デフォルトの名無しさん
2010/08/17(火) 01:34:35>>8
「メッセージをポストするだけ」とかなら他のでもかまわないだろうが、
そうでないなら標準ライブラリのcore.threadを使うのが無難なんじゃないだろうか。
0010デフォルトの名無しさん
2010/08/17(火) 22:55:58あと一息ってことでしょうか
もうすぐ私もD言語を使えるってことでしょうか
0011デフォルトの名無しさん
2010/08/17(火) 22:58:280012デフォルトの名無しさん
2010/08/18(水) 01:44:280013デフォルトの名無しさん
2010/08/18(水) 02:15:12x64Vistaだがコンパイラもコンパイルしたソフトも(WoW64上で)普通に走ってる。
64bitモードのバイナリ吐けるのがそろそろ出るとか出ないとか。
てか、DMCって64bit対応してないんじゃ?その辺どうなるんだろう
0014デフォルトの名無しさん
2010/08/19(木) 00:20:06extern(System)とすると勝手に@NNが付くし、extern(C)だと名前は合うから呼び出せるけどスタックが崩れてすぐ落ちちゃうんですけど
0015デフォルトの名無しさん
2010/08/19(木) 01:03:23インラインアセンブラか、いっそエクスポートしてGetProcAddressか、だろうなあ……
0016デフォルトの名無しさん
2010/08/19(木) 01:05:58.dllを作るなら.defファイル書けばいけるだろうけど、静的ライブラリは無理だろうなあ……
っていうかどういう用途だ?
既存のライブラリと合わせるためなら、ライブラリの方をdmcでコンパイルしなおして
@付きを要求するようにしちゃえ
0017デフォルトの名無しさん
2010/08/19(木) 01:46:45そういう関数を持ったDLLがあって、それのD用のインポートファイルを書こうとしてるんです
そしたらやっぱりアセンブラとかそういう選択肢が出てきちゃうんですね・・・
仕方ないのでちろっと調べた感じで、
size_t TotalSizeof(TS...)() {
size_t n=0;
foreach (T; TS)
n += T.sizeof;
return n;
}
R CallingConventionFix(alias F,
R=ReturnType!(F),
P=ParameterTypeTuple!(F))
(P p) {
size_t paramsize = TotalSizeof!(P)();
static if (is(R == void)) {
F(p);
asm { sub ESP, paramsize; };
}
else {
R r = F(p);
asm { sub ESP, paramsize; };
return r;
}
}
alias CallingConventionFix!(ForeignFuncHoge) ForeignFuncHoge_; // 変換
:
:
こんな感じでとりあえずは思ったように動いてる感じです。
なんかどっか間違ってそうでこわいけど
0018デフォルトの名無しさん
2010/08/19(木) 02:13:06一応、n += T.sizeof; の部分は、4単位に切り上げたほうがいいとは思うけど
それ以前に最適化次第でどうにでも変になってしまいそうだ……。
というか.dllの関数を呼ぶだけなら、それこそGetProcAddressでいいんじゃない?
0019デフォルトの名無しさん
2010/08/19(木) 02:33:53pragma(lib, "d3d9");
みたいにして。
あるいは動的リンク(GetProcAddress)だろうね。
002017
2010/08/19(木) 02:36:20よく考えたら確かにそうですね
なんかテクニカルそうなことやってみたい盛りだったんでしょうかね……
普通にそっちでやりますね、スレ汚してすみませんでした
0021デフォルトの名無しさん
2010/08/19(木) 02:47:17.dllの供給元から提供されてる.libを使ったら@が付いてなかった、という話だと思われる。
自分で.def書いて.lib作り直せばいけるだろうけど、.dllの更新が頻繁だとめんどくさいしなー。
0022デフォルトの名無しさん
2010/08/20(金) 01:18:00Linux上で動くCUIサーバアプリケーションの開発を予定しています。
スレッド、ソケット、その他多少IO系が使えれば、残りはほぼ実装であることや、
自社に特にc++のリソースが無くゼロベースからの開発であることから、
D言語の方がリファレンスや参考サイトを見る限り、
開発が素早く完了しそうな感触を得たため、D言語の開発環境を構築しています。
ところがどっこいLinux上に環境を作るのにかなり手こずっている状況です。
ひとまず要件としてこんな感じです。
・開発コストを抑えること。
・Eclipse等のIDEの利用(CUIでデバッグは考えたくないです)
・ネイティブコードが吐けること。
・gc以外のメモリ管理も可能なこと。
・DBとコルーチンがあれば尚可。
続きます
002322
2010/08/20(金) 01:19:57・クロスプラットフォーム対応で時間を掛けたくないので、
(VMの)CentOS5.5上に開発環境を構築しようとしています。
本番のサーバもCentOSを予定しています。
・dmd2.048をインストール
→コマンドラインからdmdのコンパイル、実行を確認。
・Eclipse3.6にDescentをインストール。パスを通せばエディタとしては問題なし。
・Eclipse上からコンパイル可能にするため、dsssをインストール。
→dsssコマンド自体は動くが、tango等いくつかnet installしようとしても
コンパイルエラーに遭遇。1.xを入れてないからか?
・Eclipseからコンパイルを試すも、エラー(java.io.IOException: error=13, 許可がありません)で成功せず。
・dsssのライブラリが最新のものとかなり違うようだったので、最新のdmdをメインにしようと思い、gdcの導入を検討。
→ソースを若干書き換えbuildは作れたものの、実行できず。
・もうAntで作っちまおうか('A`) な状態に。
という状況でして、うまいことコンパイル&デバッグが可能な状況に
なかなかたどりつけないでいます。
Linux上でDの開発を順調に行えている方は、
どのような環境で開発しているのでしょうか?
また、私の勘違いで損をしているだろう部分や、
アドバイス(c++でやれ)等ありましたらお願いします。
申し訳ないですが職場のdionがアク禁なので、返事は早くても明日になると思います。
0024デフォルトの名無しさん
2010/08/20(金) 02:20:540025デフォルトの名無しさん
2010/08/20(金) 02:29:17LinuxでIDEを使ってD言語やってる人はほとんどいないんじゃなかろうか.
何にせよIDEはおもちゃみたいなのしか聞かないね.
2.xのPhobosが特に不安定な時期だからここの変更をカバーできるように書いた方がいいと思う.
dsssは実質使われていない.
Tangoは最近もライセンスでいざこざがあるなどPhobosと同調しないからおすすめしない.
0026デフォルトの名無しさん
2010/08/20(金) 03:35:01一応あるにはあるけど、CentOSで仕えるのってあったっけ。
GC以外のメモリ管理もおすすめできない。
どうしてもやりたいのであれば、mallocなどは使うことができるけど、慎重に使わないとGCに刺される。
DBはPhobosには無い。JsonもXmlも一応存在するが、あまり良いものではない。
コルーチンであれば、core.thraed.Fiberが利用可能。
ビルドツールは、専用のものを自分で適当に書いてしまうか(200行程度でそれなりに仕上がる)、make、Antを使ったほうがいい。
デバッグツールは、Descentからつかえるものの、Descent自体相当重いのでアテにしてはダメ。昔ながらのprintf(Dではwriteln)が一番強力に思う
0027デフォルトの名無しさん
2010/08/20(金) 14:41:07多分次のdmdのバージョンアップでそのサーバは動かなくなるw
0028デフォルトの名無しさん
2010/08/20(金) 17:03:57いつのdmdの話をしてるんだ…
002922
2010/08/21(土) 00:06:41>>24-25
外部ライブラリの件、非常に参考になります。
同じ最新環境でガシガシ書いているのではないのですね。
>>26
IDEは…そこを何とか('A`)
エディタ+αとして使えれば十分なので、実行/デバッグを除けばDescentで事足り
てます。
実行/デバッグはアドバイス通りAntを書いてみたいと思います。
メモリ管理の件は、Javaのようにいつ回収されるかわからないような状況でなければ
問題ないというような意味でして、私の書き方が悪かったと思います。
D言語仕様で問題ないです。
その他、諸々とても参考になりました。
>>27
C++開発の総コスト < D2.x開発+D3.x対応・・・と信じたい。
0030デフォルトの名無しさん
2010/08/21(土) 03:41:04d2の最新版でスタックとレース表示も入ったらしいし、
実はデバッガが言語組み込みだと考えていいのではないかと思う
0031デフォルトの名無しさん
2010/08/21(土) 03:49:400032デフォルトの名無しさん
2010/08/21(土) 12:53:37PerformanceCounter pc = new PerformanceCounter();
とか書くだけでめまいがする
Dなら
auto pc = new PerformanceCounter;
と書けてライブラリも略名が多いからサポート無しで書くのが存外苦痛じゃなかったりする
結論から言うとC++0xでおk
0033デフォルトの名無しさん
2010/08/21(土) 12:57:40でもlinuxなら本体にスタックトレース入ったらしいからいらないかな
でもstd.socketが近いうちに差し替えられるかもしれない
0034デフォルトの名無しさん
2010/08/21(土) 18:09:22特にライブラリは、古いのを残して新しいのを追加する形で、なるべく新しいのを使う形になると思う。
D3になったら…覚悟したほうがいい。少なくともscope, typedefあたりは今のうちから排除していったほうがよさそう。
0035デフォルトの名無しさん
2010/08/21(土) 19:32:020036デフォルトの名無しさん
2010/08/21(土) 19:46:42Andrei曰く、
class A {
void method(B b){ b.link(a); }
}
...
auto b = new B;
{
scope a = new A;
a.method(b);
}
b.useA();
こういう時、コンパイルエラーなしに実行できて、未定義動作起こすのが嫌らしい。
0037デフォルトの名無しさん
2010/08/22(日) 23:51:470038デフォルトの名無しさん
2010/08/23(月) 19:36:200039デフォルトの名無しさん
2010/08/23(月) 20:21:15004022
2010/08/24(火) 20:08:52ようやっとLinux+Eclipseからコンパイルが成功しました。
結局dmdを使用するmakefileを作成してEclipseのビルダーを置き換えし、
Ctrl+Bにてコンパイルできるようになりました。
単語補完も昔のPHPEclipse並の微妙感が良い感じです。
アドバイスいただいた方々、ありがとうございました。
あとはデバッガさえ動けば・・!
0041デフォルトの名無しさん
2010/08/24(火) 21:51:37linuxでD使ってないからよくわからんけど-gcオプションつけてgdbがいいのかな?
頑張ればEclipseから使えそうな気がしないでもない
004222
2010/08/25(水) 02:04:07試しにDdgbをEclipseから選択してみたらWindowsでやれ的なエラーがw
ということでgdbしか選択肢が無さそうです。
とはいえDescentのメニューからgdbを選択できたので、
特に問題なくデバッグできました。
まだDの設計が理解できてないので、
レジスタ等の動きが正しいのかわかりませんが、
ステップ実行やメンバ変数のトレースは問題なく動きました。
これで勝つる!!
0043デフォルトの名無しさん
2010/08/25(水) 07:28:35void main() {
int[int] a = (int[int]).init;
a[1] = 2;
}
$ dmd -run test.d
object.Error: Integer Divide by Zero
やだ…なにこれ…
0044デフォルトの名無しさん
2010/08/25(水) 20:17:16int[int] a;
assert(a == a.init);
}
Error: incompatible types for ((a) == (AssociativeArray(null))): 'int
[int]' and 'AssociativeArray!(int,int)'
やだ…なにこれ…
0045デフォルトの名無しさん
2010/08/25(水) 21:15:29DのDたるところは健在だな
0046デフォルトの名無しさん
2010/08/25(水) 21:27:03回避方法がすぐに見つからないバグも少ないし、何とかなる場合がほとんど。
0047デフォルトの名無しさん
2010/08/25(水) 23:38:08他言語からの移植品に比べて格段にコードが短くなる
後もう少し機能が揃えば…
0048デフォルトの名無しさん
2010/08/27(金) 01:31:420049デフォルトの名無しさん
2010/08/27(金) 02:38:01何が足りない?
0050デフォルトの名無しさん
2010/08/27(金) 07:17:10core.thread
0051デフォルトの名無しさん
2010/08/27(金) 07:17:55SpinnerだかSpinBoxだかNumericUpDownだかとレイアウトマネジャ
あとGraphics関連が弱い
どうせラップするだけだから自作してみようかと思ったら
SpinnerってWindowsAPIにないんだよな
なんだというんだ
>>48
src/druntime/import/core
にthread.diがあるよ
0052デフォルトの名無しさん
2010/08/27(金) 17:48:25UpDown(UPDOWN_CLASS=msctls_updown32)?
この手の名前はいろいろありすぎて困る
0053デフォルトの名無しさん
2010/08/27(金) 19:35:36ぐぐったら猫が出てきた。これこれ
ttp://homepage2.nifty.com/c_lang/sdk3/sdk_205.htm
AndroidではいわゆるコンボボックスがSpinnerという名前になってたりする
どういうことなの…
0054デフォルトの名無しさん
2010/08/28(土) 00:24:07D3まだー?Range落ち着くまで来ないんかな
0055デフォルトの名無しさん
2010/08/28(土) 01:53:360056デフォルトの名無しさん
2010/08/28(土) 05:38:480057デフォルトの名無しさん
2010/08/28(土) 06:02:19http://gihyo.jp/admin/clip/01/linux_dt/201008/25
0058デフォルトの名無しさん
2010/08/28(土) 06:34:31そういうもの?
0059デフォルトの名無しさん
2010/08/28(土) 08:02:36DLL Hell に巻き込まれるよりはましかもしれない。
DLL にしても、最近は結局自分のディレクトリに入れておけという感じだしな。
0060デフォルトの名無しさん
2010/08/28(土) 08:12:45ここのWikiだよね?
0061デフォルトの名無しさん
2010/08/28(土) 08:21:01正気かfedora
0062デフォルトの名無しさん
2010/08/28(土) 09:27:110063デフォルトの名無しさん
2010/08/28(土) 09:29:180064デフォルトの名無しさん
2010/08/28(土) 15:06:46見つけられなくなる気がする。どういうことなんだ・・・
C:\D\dmd2\src\libs>cat a.d
void main()
{}
C:\D\dmd2\src\libs>dmd a.d winmm.lib
C:\D\dmd2\src\libs>dmd -lib a.d winmm.lib
Error: Error reading file 'winmm.lib'
0065410◇hmqb6VZ0L
2010/08/28(土) 18:04:20http://f17.aaa.livedoor.jp/~labamba/?Wiki%B0%DC%BF%A2%A4%B7%A4%BF%A4%A4
0066デフォルトの名無しさん
2010/08/28(土) 18:52:21マジかよすげぇなまるでパッケージソフトみたいだ
0067デフォルトの名無しさん
2010/08/29(日) 02:46:33わざわざ新しいの作らんでも、dusersに移すのじゃあかんの?
PhobosとTangoの分裂みたいに情報や編集人が分散するのはちょっとなあと思う
0068デフォルトの名無しさん
2010/08/29(日) 03:06:000069デフォルトの名無しさん
2010/08/29(日) 12:32:26ん・・・ とりあえず記事がある程度仕上がったら考える。
0070デフォルトの名無しさん
2010/08/29(日) 12:54:32"文字列".dup ← char[]
これどういう意図があるんだろう
D1→D2時のdupの修正し忘れ?
0071デフォルトの名無しさん
2010/08/29(日) 12:58:35連投すまん
0072デフォルトの名無しさん
2010/08/29(日) 15:02:110073デフォルトの名無しさん
2010/08/31(火) 01:04:47struct S{
//ubyte[65528] m;// OK
ubyte[65529] m;// Access Violation
}
void main()
{
writeln(S());
}
なんだこれ?
ちなみに一定数(環境依存)を超えるとStack Overflowってのもあった
0074デフォルトの名無しさん
2010/08/31(火) 07:27:59void main() {S[100] s;}
とかやると実行時Stack Overflowになるねぇ
0075デフォルトの名無しさん
2010/08/31(火) 11:07:54http://codepad.org/IAL91LHa
つか逆に大きな配列だからと勝手にヒープ確保されたらたまらん。
007673
2010/08/31(火) 14:51:34そこ__VERSION__ == 1026だが
あと俺が言いたかったのはwritelnに渡すと・・・ってことだったんだが流石に伝わらんかったか
0077デフォルトの名無しさん
2010/08/31(火) 19:36:22→DirEntryを初期化してる部分を削ると100倍くらい早くなる
→更新日時とかを入れるときに使ってるstd.date.FILETIME2d_time()が
他の処理の100倍くらい時間を食ってるっぽい
std.dateが徹底的にタコということでよろしいか?
0078デフォルトの名無しさん
2010/08/31(火) 21:22:55YaoとJohnathanに期待。
http://lists.puremagic.com/pipermail/phobos/2010-August/002187.html
0079デフォルトの名無しさん
2010/09/01(水) 02:21:400080デフォルトの名無しさん
2010/09/01(水) 03:41:481・2どっちでもいいです。
0081デフォルトの名無しさん
2010/09/01(水) 22:02:260082デフォルトの名無しさん
2010/09/02(木) 00:06:190083デフォルトの名無しさん
2010/09/02(木) 19:27:37ただしstd.socketは間もなく(ry
0084デフォルトの名無しさん
2010/09/02(木) 19:42:39unix界隈で遊んでるような人にとってはカスみたいなものかもしれんけど
Win使ってる一般人とかそういう人向けにアプリ書いてる人から見れば
GUIライブラリの無い言語 == 存在しない言語 だからなぁ
0085デフォルトの名無しさん
2010/09/02(木) 21:12:490086デフォルトの名無しさん
2010/09/02(木) 21:35:110087デフォルトの名無しさん
2010/09/02(木) 22:55:22D2に移植する途中で死んだみたいだし
0088デフォルトの名無しさん
2010/09/03(金) 08:40:32オレ引きとって続き書くよ?
0089デフォルトの名無しさん
2010/09/03(金) 17:46:53こちら http://www.dsource.org/projects/descent/ を参考に
インストール、設定を済ませたと思うのですが、
参考動画のようなオーバーライドの補完等ができません。
以下のように戻り値を受ける形だと補完されるのですが、
int a = str ( まで入力してCtrl+Space)
strやstdのみの補完や、
クラスメンバの関数やオーバーライドの補完が全く機能していません。
(op〜関数はopまで打つと補完されますが、
super.opで保管しても super.override void op〜・・・ となり使えません)
JDTやインクルードパスは問題ないと思うのですが、
どの辺を注意したら良いでしょうか?
0090デフォルトの名無しさん
2010/09/03(金) 19:04:32http://hg.dsource.org/projects/dwt2
これがDWT2のリポジトリ。
0091デフォルトの名無しさん
2010/09/03(金) 19:47:12D1+Tangoというプログラミング言語だ。
いやD1ですらない。
druntimeというお情けがいつまでもらえるかはわからん。
0092デフォルトの名無しさん
2010/09/03(金) 20:01:04torhusという死に体のDWTに唯一パッチを送り続けていた人がいて、
一月半くらい前にとうとうforkした
ttp://bitbucket.org/torhus/dwt2
でもその後音沙汰が無い
彼に強力してあげてください
0093デフォルトの名無しさん
2010/09/03(金) 20:10:590094デフォルトの名無しさん
2010/09/03(金) 21:58:17ttp://www.dsource.org/projects/qtd
0095デフォルトの名無しさん
2010/09/04(土) 00:53:01Σ゚(゚Д)
0096デフォルトの名無しさん
2010/09/04(土) 02:01:51auto d = new char[n];
for(int i = 0; i < n; i++)d[i] = s[i];
009788
2010/09/04(土) 02:05:31ありがとう。
どこまでできるかわからんけどやってみるよ!
>>93
やっぱりそういう需要ってあるよね。
Dの適用領域からいってDWTみたいなのは必要だと思うんだ。
0098デフォルトの名無しさん
2010/09/04(土) 02:31:55>char* sからchar[] dに変換する方法って↓しかない?
>auto d = new char[n];
>for(int i = 0; i < n; i++)d[i] = s[i];
d[] = s[];ってできない?
0099デフォルトの名無しさん
2010/09/04(土) 02:49:35s[]は出来ないね
ポインタは配列として扱った時
長さ情報持ってないからスライス出来ないって事かな
0100デフォルトの名無しさん
2010/09/04(土) 02:52:060101デフォルトの名無しさん
2010/09/04(土) 03:04:37Macなら多少の需要はあるんじゃないかな?
Linuxはあまりないかもしれないけど、アプライアンスとかなら、あるいは。
■ このスレッドは過去ログ倉庫に格納されています