1 :
デフォルトの名無しさん :
2010/08/15(日) 07:59:24
2 :
デフォルトの名無しさん :2010/08/15(日) 08:01:30
いちおつですよ
おお、2年ぶりに 「D言語」 という単語を見たわー。 まだ生きてたかー、あれから状況は良くなったんかな?
>>5 今年の5月にD2の安定版が出る予定。今4月137日だからあと少しだな。
WalterBright #d_lang Got Phobos' object.d to compile in 64 bit mode. On to the rest of Phobos.
D言語でWin32APIやSDLのThreadを使って大丈夫でしょうか GCまわりとか
9 :
デフォルトの名無しさん :2010/08/17(火) 01:34:35
>>1 乙!
>>8 「メッセージをポストするだけ」とかなら他のでもかまわないだろうが、
そうでないなら標準ライブラリのcore.threadを使うのが無難なんじゃないだろうか。
>>7 あと一息ってことでしょうか
もうすぐ私もD言語を使えるってことでしょうか
俺D3.0が出たらD2.0はじめるんだ…
現状って64bitじゃ全く起動できないの?
13 :
デフォルトの名無しさん :2010/08/18(水) 02:15:12
>>12 x64Vistaだがコンパイラもコンパイルしたソフトも(WoW64上で)普通に走ってる。
64bitモードのバイナリ吐けるのがそろそろ出るとか出ないとか。
てか、DMCって64bit対応してないんじゃ?その辺どうなるんだろう
関数の名前の最後に@NN(←引数のサイズ?)が付かなくて、かつ呼び出し規約がstdcallな外部関数はどうやって定義すればいいんでしょうか? extern(System)とすると勝手に@NNが付くし、extern(C)だと名前は合うから呼び出せるけどスタックが崩れてすぐ落ちちゃうんですけど
FreePascalのようなそういうのを呼べてOMFも吐けるコンパイラで一枚挟むか、 インラインアセンブラか、いっそエクスポートしてGetProcAddressか、だろうなあ……
ああ定義するほうか、ごめん。 .dllを作るなら.defファイル書けばいけるだろうけど、静的ライブラリは無理だろうなあ…… っていうかどういう用途だ? 既存のライブラリと合わせるためなら、ライブラリの方をdmcでコンパイルしなおして @付きを要求するようにしちゃえ
すみません、定義というか、宣言?のほうですね多分 そういう関数を持った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_; // 変換 : : こんな感じでとりあえずは思ったように動いてる感じです。 なんかどっか間違ってそうでこわいけど
確かに怖いなあ……。 一応、n += T.sizeof; の部分は、4単位に切り上げたほうがいいとは思うけど それ以前に最適化次第でどうにでも変になってしまいそうだ……。 というか.dllの関数を呼ぶだけなら、それこそGetProcAddressでいいんじゃない?
DLLだったら、.libファイルを静的リンクすればいいと思うのだけど… pragma(lib, "d3d9"); みたいにして。 あるいは動的リンク(GetProcAddress)だろうね。
20 :
17 :2010/08/19(木) 02:36:20
>GetProcAddress よく考えたら確かにそうですね なんかテクニカルそうなことやってみたい盛りだったんでしょうかね…… 普通にそっちでやりますね、スレ汚してすみませんでした
>>19 .dllの供給元から提供されてる.libを使ったら@が付いてなかった、という話だと思われる。
自分で.def書いて.lib作り直せばいけるだろうけど、.dllの更新が頻繁だとめんどくさいしなー。
すみません、長いですが良ければ相談に乗っていただけると助かります。 Linux上で動くCUIサーバアプリケーションの開発を予定しています。 スレッド、ソケット、その他多少IO系が使えれば、残りはほぼ実装であることや、 自社に特にc++のリソースが無くゼロベースからの開発であることから、 D言語の方がリファレンスや参考サイトを見る限り、 開発が素早く完了しそうな感触を得たため、D言語の開発環境を構築しています。 ところがどっこいLinux上に環境を作るのにかなり手こずっている状況です。 ひとまず要件としてこんな感じです。 ・開発コストを抑えること。 ・Eclipse等のIDEの利用(CUIでデバッグは考えたくないです) ・ネイティブコードが吐けること。 ・gc以外のメモリ管理も可能なこと。 ・DBとコルーチンがあれば尚可。 続きます
23 :
22 :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がアク禁なので、返事は早くても明日になると思います。
C++とboostでおk
もうちょっと書こう. LinuxでIDEを使ってD言語やってる人はほとんどいないんじゃなかろうか. 何にせよIDEはおもちゃみたいなのしか聞かないね. 2.xのPhobosが特に不安定な時期だからここの変更をカバーできるように書いた方がいいと思う. dsssは実質使われていない. Tangoは最近もライセンスでいざこざがあるなどPhobosと同調しないからおすすめしない.
IDEは諦めて、使いやすいテキストエディタを利用したほうが良い。emacsなんかで書いている人は多いように思う。 一応あるにはあるけど、CentOSで仕えるのってあったっけ。 GC以外のメモリ管理もおすすめできない。 どうしてもやりたいのであれば、mallocなどは使うことができるけど、慎重に使わないとGCに刺される。 DBはPhobosには無い。JsonもXmlも一応存在するが、あまり良いものではない。 コルーチンであれば、core.thraed.Fiberが利用可能。 ビルドツールは、専用のものを自分で適当に書いてしまうか(200行程度でそれなりに仕上がる)、make、Antを使ったほうがいい。 デバッグツールは、Descentからつかえるものの、Descent自体相当重いのでアテにしてはダメ。昔ながらのprintf(Dではwriteln)が一番強力に思う
自社とか書いてるけど、仕事で2系を使うのか?チャレンジャーだなw 多分次のdmdのバージョンアップでそのサーバは動かなくなるw
29 :
22 :2010/08/21(土) 00:06:41
dionのアク禁余裕でした。
>>24-25 外部ライブラリの件、非常に参考になります。
同じ最新環境でガシガシ書いているのではないのですね。
>>26 IDEは…そこを何とか('A`)
エディタ+αとして使えれば十分なので、実行/デバッグを除けばDescentで事足り
てます。
実行/デバッグはアドバイス通りAntを書いてみたいと思います。
メモリ管理の件は、Javaのようにいつ回収されるかわからないような状況でなければ
問題ないというような意味でして、私の書き方が悪かったと思います。
D言語仕様で問題ないです。
その他、諸々とても参考になりました。
>>27 C++開発の総コスト < D2.x開発+D3.x対応・・・と信じたい。
Dにはもともと契約や組み込みのassert、単体テストなどが備わっているし、 d2の最新版でスタックとレース表示も入ったらしいし、 実はデバッガが言語組み込みだと考えていいのではないかと思う
それらの機能のパクリ元であるEiffelにもちゃんとデバッガは別にあるぞ
JavaとかだとIDEの助けが無いと書くのは無理 PerformanceCounter pc = new PerformanceCounter(); とか書くだけでめまいがする Dなら auto pc = new PerformanceCounter; と書けてライブラリも略名が多いからサポート無しで書くのが存外苦痛じゃなかったりする 結論から言うとC++0xでおk
デバッガはddbg健在だよ でもlinuxなら本体にスタックトレース入ったらしいからいらないかな でもstd.socketが近いうちに差し替えられるかもしれない
多分、D2を使い続けるうちは破壊的変更は最小限だと思う。 特にライブラリは、古いのを残して新しいのを追加する形で、なるべく新しいのを使う形になると思う。 D3になったら…覚悟したほうがいい。少なくともscope, typedefあたりは今のうちから排除していったほうがよさそう。
えっscopeって無くなる感じなの?
スコープガードはわからないけど、ストレージクラスのscopeはdeprecatedらしいよ。 Andrei曰く、 class A { void method(B b){ b.link(a); } } ... auto b = new B; { scope a = new A; a.method(b); } b.useA(); こういう時、コンパイルエラーなしに実行できて、未定義動作起こすのが嫌らしい。
今後はdsourceのphobosにがっつんがっつん入ってく感じな気がするんでもうTangoのことは忘れていいですか?
Tango…って何?
アルゼンチン人の魂
40 :
22 :2010/08/24(火) 20:08:52
久々にdion解除キターので近況報告。 ようやっとLinux+Eclipseからコンパイルが成功しました。 結局dmdを使用するmakefileを作成してEclipseのビルダーを置き換えし、 Ctrl+Bにてコンパイルできるようになりました。 単語補完も昔のPHPEclipse並の微妙感が良い感じです。 アドバイスいただいた方々、ありがとうございました。 あとはデバッガさえ動けば・・!
根性だなぁ。おめ linuxでD使ってないからよくわからんけど-gcオプションつけてgdbがいいのかな? 頑張ればEclipseから使えそうな気がしないでもない
42 :
22 :2010/08/25(水) 02:04:07
>>41 試しにDdgbをEclipseから選択してみたらWindowsでやれ的なエラーがw
ということでgdbしか選択肢が無さそうです。
とはいえDescentのメニューからgdbを選択できたので、
特に問題なくデバッグできました。
まだDの設計が理解できてないので、
レジスタ等の動きが正しいのかわかりませんが、
ステップ実行やメンバ変数のトレースは問題なく動きました。
これで勝つる!!
$ cat test.d void main() { int[int] a = (int[int]).init; a[1] = 2; } $ dmd -run test.d object.Error: Integer Divide by Zero やだ…なにこれ…
void main() { int[int] a; assert(a == a.init); } Error: incompatible types for ((a) == (AssociativeArray(null))): 'int [int]' and 'AssociativeArray!(int,int)' やだ…なにこれ…
>>22 が色々問題なく動かしてるのを見て少し心配になったがその後の流れで安心した
DのDたるところは健在だな
いや、D言語だったら大抵の場合問題なく動くだろ。 回避方法がすぐに見つからないバグも少ないし、何とかなる場合がほとんど。
久々にDFL使ってみてるけどやっぱいいなぁこれ 他言語からの移植品に比べて格段にコードが短くなる 後もう少し機能が揃えば…
dmd2.048のphobosにthread.dが無いのは何かの間違いでしょうか( ´Д`)?
>>49 SpinnerだかSpinBoxだかNumericUpDownだかとレイアウトマネジャ
あとGraphics関連が弱い
どうせラップするだけだから自作してみようかと思ったら
SpinnerってWindowsAPIにないんだよな
なんだというんだ
>>48 src/druntime/import/core
にthread.diがあるよ
Spinnerって何だ UpDown(UPDOWN_CLASS=msctls_updown32)? この手の名前はいろいろありすぎて困る
Range(笑) D3まだー?Range落ち着くまで来ないんかな
64...bit....版..........は.....?
fedora14にD言語がパッケージングされるっぽ
D1とD2で同じものコンパイルしたらD2のが2倍ファイルサイズでかかった そういうもの?
静的にリンクされまくるからそういうものだと思う。 DLL Hell に巻き込まれるよりはましかもしれない。 DLL にしても、最近は結局自分のディレクトリに入れておけという感じだしな。
60 :
デフォルトの名無しさん :2010/08/28(土) 08:12:45
1から2のDll使えたりしますか?
extern(D)な関数は駄目だった気がする
dmdに-libオプションつけるとライブラリファイルのパスが 見つけられなくなる気がする。どういうことなんだ・・・ 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'
あれ、インストーラとかあるんだ… マジかよすげぇなまるでパッケージソフトみたいだ
>>65 わざわざ新しいの作らんでも、dusersに移すのじゃあかんの?
PhobosとTangoの分裂みたいに情報や編集人が分散するのはちょっとなあと思う
D言語のDはdistortedのD
>>67 ん・・・ とりあえず記事がある程度仕上がったら考える。
"文字列" ← string "文字列".dup ← char[] これどういう意図があるんだろう D1→D2時のdupの修正し忘れ?
ああ、immutableはずすためなのか 連投すまん
やっぱstringだけimmutable(char)[]って表示されないのずるい
import std.stdio; struct S{ //ubyte[65528] m;// OK ubyte[65529] m;// Access Violation } void main() { writeln(S()); } なんだこれ? ちなみに一定数(環境依存)を超えるとStack Overflowってのもあった
Sをもう少し小さな構造体にしても void main() {S[100] s;} とかやると実行時Stack Overflowになるねぇ
76 :
73 :2010/08/31(火) 14:51:34
>>75 そこ__VERSION__ == 1026だが
あと俺が言いたかったのはwritelnに渡すと・・・ってことだったんだが流石に伝わらんかったか
なんかstd.file.listdir()が重い →DirEntryを初期化してる部分を削ると100倍くらい早くなる →更新日時とかを入れるときに使ってるstd.date.FILETIME2d_time()が 他の処理の100倍くらい時間を食ってるっぽい std.dateが徹底的にタコということでよろしいか?
dusers.jp重い...
ウェブページ保存したい場合はどうしたらいいんでしょう? 1・2どっちでもいいです。
普通にHTTP喋って取ってくればいいんじゃない?
TcpSocketなかったっけ
Socket作るときにTCPを選べるようになってる ただしstd.socketは間もなく(ry
GUIライブラリは必要だよなぁ… unix界隈で遊んでるような人にとってはカスみたいなものかもしれんけど Win使ってる一般人とかそういう人向けにアプリ書いてる人から見れば GUIライブラリの無い言語 == 存在しない言語 だからなぁ
DWTがあるんじゃなかったのか
cursesは?
DWTはD2で動かない、というかTangoでしか動かない時点で詰んでる D2に移植する途中で死んだみたいだし
そのD2版のDWTってどこにあります? オレ引きとって続き書くよ?
スレ違いかもしれないですが、Descentについて質問です。
こちら
http://www.dsource.org/projects/descent/ を参考に
インストール、設定を済ませたと思うのですが、
参考動画のようなオーバーライドの補完等ができません。
以下のように戻り値を受ける形だと補完されるのですが、
int a = str ( まで入力してCtrl+Space)
strやstdのみの補完や、
クラスメンバの関数やオーバーライドの補完が全く機能していません。
(op〜関数はopまで打つと補完されますが、
super.opで保管しても super.override void op〜・・・ となり使えません)
JDTやインクルードパスは問題ないと思うのですが、
どの辺を注意したら良いでしょうか?
Tangoはライブラリじゃないぞ。 D1+Tangoというプログラミング言語だ。 いやD1ですらない。 druntimeというお情けがいつまでもらえるかはわからん。
Qt の D 版みたいなのってないのかな
QtD requires the ”patched” dmd compiler. Σ゚(゚Д)
char* sからchar[] dに変換する方法って↓しかない? auto d = new char[n]; for(int i = 0; i < n; i++)d[i] = s[i];
97 :
88 :2010/09/04(土) 02:05:31
>>90 >>92 ありがとう。
どこまでできるかわからんけどやってみるよ!
>>93 やっぱりそういう需要ってあるよね。
Dの適用領域からいってDWTみたいなのは必要だと思うんだ。
>>96 >char* sからchar[] dに変換する方法って↓しかない?
>auto d = new char[n];
>for(int i = 0; i < n; i++)d[i] = s[i];
d[] = s[];ってできない?
>>98 s[]は出来ないね
ポインタは配列として扱った時
長さ情報持ってないからスライス出来ないって事かな
GUIにWindows以外の需要がどのくらいあるかがいまいち分からんところだな