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以外の需要がどのくらいあるかがいまいち分からんところだな
>>100 Macなら多少の需要はあるんじゃないかな?
Linuxはあまりないかもしれないけど、アプライアンスとかなら、あるいは。
WindowsはW版とA版のAPIに対応しなきゃいけないのが辛い・・
9xは捨てろよ。Wだけでいいよ。
>>96 実は範囲を指定すればスライスできる
d = s[0 .. strlen(s)];
>>100 ただOS自体の比率でWindowsとMacが圧倒的だからなぁ
PCでlinux使ってる人なんか1%もいないんじゃないの
>>104 >
>>96 >実は範囲を指定すればスライスできる
>d = s[0 .. strlen(s)];
左辺をd[]にして並行処理できない?というのが目的ですた
DでGUI作るとしたらどんなインターフェースがいいのかな 今のトレンド知らないけど ・継承してクラスの内側でイベント実装タイプ ・外側からdelegateでイベントリスナー追加みたいなタイプ 俺は前者が好きだなクラス内に共通のデータ置けるし
DってRailsみたいなFWありますか?
あるかもしれないけど死んでるか止まってる事は確信できる
>>106 参照取るなら並列処理するまでもなくね?
…あれ?スライスって参照だよね?
>>107 好みによるけど、後者かな。
今のOOPの流れ自体、継承より委譲だし。
JavaみたいにEventListener登録型もなくはないが
delegateを使えばコーディング量が劇的に減る。
エディタ派も嬉しいんじゃないかと。
ついでに聞いてみたいんだけど、LinuxでDって
どういう用途に使われることが多いのかな。
サーバー系の使い勝手がよいライブラリありますか?
DFLだと両方やれるね
delegateっつかクロージャ付き無名関数が使える言語だとそれが非常に便利だからなあ。
クラス標準の関数をデリゲートの呼び出しに充てておくとかすると並列に実装可能かな。
>>111 サーバ系で言うと、数値計算と文字列処理の組み合わせで、
バイオ系(bioengineering+bioinformatics)なんかは実はD最強ではないかと思う。
C#のdynamic型みたいなのも欲しいが、variantで実装可能かなあ。
>>108 Tangoを使ってやろうってのはあったけど,コンセプトだけで死んでた気がする
まぁテンプレートライブラリもなければORMもなかったわけで…
115 :
89 :2010/09/05(日) 22:46:34
自己解決しました。 >D 1.x is fully supported. >D 2.x is partially supported これが全てだったようで、 D1のobject.dへパスを通せば出来る子になるんですが、 D2のobject.dへパスを通してもダメな子ということでした。 Descentの現状最新版(0.5.6)でD2を使う場合、 D1もインストールして両方へパスを通しておけば、そこそこ無難に動くようです。 ブランチに0.6が上がっていたので、明日あたりにこちらも試してみたいと思います。
D1.0 dmdで、 下のソースがコンパイル通っちゃって、走らすと[2]って出力が出るんだが、 引数の配列の中身を変更させない関数定義ってできないの? import std.stdio; void main() { int[] a = [1]; inc(a); writefln(a); } void inc(in int[] a) { a[] += 1; };
動的配列は参照型だからな incの冒頭辺りでa.dupでコピー作ればいい
関数定義はできないってことになるが
D1ってimmutable無いんだっけ? あれ、違う?
D言語が記事のタイトルになるとか胸が熱くなるな
122 :
デフォルトの名無しさん :2010/09/09(木) 00:21:02
dmd2.048 だが、
>>116 を
void inc(in immutable int[] a) { a[] += 1; };
void inc(in const(int)[] a) { a[] += 1; };
と変更してもやはり同じ結果になったぞ!
void inc(in const(int)[] a) { a[0] += 1; };
とかだとコンパイルエラー
( ´д)ヒソ(´д`)ヒソ(д` ) * * * バグです + n ∧_∧ n + (ヨ(* ´∀`)E) Y Y *
import std.stdio; void main() { string s = "a" "bc" "d"; writeln(s); } abcd これって仕様のどこに載ってるんだ?
探してないけどCから引き継いだ仕様だから書いてないかもね
>>126 確かに載ってるありがとう
switch (s) {
case "a", "b"
"c", "d":
...
break;
}
みたいなコード書いて5分くらい嵌った
VisualDがutf-8で保存してくれない……。
日本語が使えなくなるだけだと思えば許せる。 VisualDはVS2010のデバッガが使えるってだけで最高だけど、やっぱりインテリセンスがなぁ。
ファイル→保存オプションの詳細設定でUTF-8に変えてくれる デフォでUTF-8にして欲しいけどな
簡単に解決できそうな気がするけど。問題として認識されてないんだろうなあ。
いつものパターンか
--main.d import test; int main( char[][] args ) { logger!("hoge").test(); return 0; } --test.d import std.stdio; template logger( string s, string file = __FILE__, int line = __LINE__ ) { void test() { writefln( "%s %s %d",s, file, line ); } } --実行結果 hoge test.d 4 (´・ω・`)
誰もが通る道
プログラムがなんか変な動きするから まーたdmdのバグかと思って必死に調べたらコードのバグだった たまにはそんなこともあるんだな…
テンプレートじゃなくて、いつか導入されるらしいマクロを使ったら
>>133 のコードは意図した動作にできるんだろうか
マクロだと呼び出し側のスコープで変数を評価するとかできるんだよね?
文字列mixinすれば似たようなことはできると思うけど。
138 :
デフォルトの名無しさん :2010/09/17(金) 00:03:10
>>136 テ、テンプレートだって
void logger( string file = __FILE__, int line = __LINE__ )(string msg){
writefln( "%s %s %d", msg, file, line );
}
ってできるんだからねっ!!
139 :
133 :2010/09/17(金) 10:09:19
本当だ。英語版でもそうなってるな dmdにはよくあること
141 :
デフォルトの名無しさん :2010/09/17(金) 19:56:31
dmd 1.064 and 2.049 release
trunk使ってるともうリリース関係ないな
LGPLの、例えばSDLとかgtkDとかってimportして 実行モジュール作って公開した時点で ソース公開の義務が発生しちゃうの?
中身のDLLが別にあるんなら発生しないんじゃねぇの?
本体はダイナミックリンクするとしてヘッダの(D翻訳の)ライセンス次第だな ときどきヘッダ翻訳に際して元と違うライセンスを設定する奴もいるから注意な
147 :
144 :2010/09/18(土) 14:46:06
なるほどね ただで使わせてもらっといてなんだけど ライセンスって嫌だね・・ 誰でも使えるようにするならPublicDomainに統一してほしい・・
必要な関数のプロトタイプ宣言だけ自分で書いたらどうなるんだろ? 名前と戻り値と引数列に著作権は発生するのか
インターフェースの仕様自体に著作権はないからおけ ただしUNIX裁判よろしくオリジナルをコピーしてないという証明はめんどい
それ証明する必要があるのはコピーしてるって主張する側じゃないの?
その通りではあるんだが、現実には良い腕の弁護士を雇えたほうが勝つ……らしい。 Rubyなんかも、わざわざライセンス不明のパッチを避けて、 それを見たことがない人に直させてたりするね。
>>147 日本でもPublic Domainが出来るようになったらいいのになぁと常々思う
パブリックドメインって著作権捨ててるんだっけ?
BSDL系でも不満はないけどなあ。〜を使わせていただきました、ぐらい書くのは当たり前じゃね? 日本では著作権放棄はできないけど、言い回しを工夫してCCとかNYSLみたいなのはあるね。
要は著作権侵害と言われるリスクをゼロにできりゃいいんだから それこそCC0とかNYSLで放り出せばいいんじゃね CC0が出てきてからNYSLは非推奨になったんだっけ?
いや、GPLをCC0で再公開するのはやっぱりライセンス違反だぞ
派生の話してたっけ?
>>157 元がLGPLのライブラリを使う話じゃなかったっけ?
D言語いじり以外でD言語で何か作ってたりしてる人いる? なんかGUIどうすっかなーってAWTみたいなの目指して書いたり消したりして なかなかちゃんとしたアプリ作れない
DFL使ってるから
デザイン格好良くなってる。中の人乙。
どこが?
言語デザインが?
日本語の方も変わってたのかー inabaさん乙すぎるだろ
cooooooooool!! やべえなめっちゃ好きな色になっとる
火星の夕暮れの写真をモチーフとした背景画像だね
QtDが死んでDWTが生き返るとかどうなってんだ
先日、試しにQtDでHelloWorld表示するのを作ってみたんだけど・・・ 8MBのexeが出来たw しかも動作には、QtDのDLLと、QtのDLLが必要ときたもんだ QtのDLLは全部で700MBはあるし、どうすりゃいいんだよコレw
QtのDLLは全部必要なわけではない
coreとguiがあればおk たったの20MBだよ
合計たった28MBのHello, worldか……。 確かにどっか別世界にこんにちはしてる感はある。
DFLなら1MB未満ですよ!
Delphiのexeがでかいでかいと言われて600kぐらいなのに、なんなんだこの別世界は
Qtはこれでもスリムになったんだぜ、 5、6年前のQt3の頃は全部ひっくるめてたんだから
その点DWTはバイナリ一つで20MB 話のわかるヤツだ
バイナリ一つだけならupxで多少縮むか。
多少どころか1/10未満になったと思う
upxってアンチウィルスとかに引っかかったりしなかったっけ
今更引っかからないと思う。あと今時UPX非対応なアンチウイルスもあったような。
Norton先生なめんな 今年圧縮したソフトでも余裕でひっかかったわ
ノートン先生マジぱねえっす・・・
upxは実行環境に負荷かけるわけだから、ほんとに見た目を満足させるだけだよ…… どうせ配布時にはzipなりの中なんだから通信負荷はupxかけなくても一緒だろ?
>>184 外部記憶装置が遅くて計算とメモリが豊富な場合は意味がある
テープ・フロッピーの時代だと自己展開や自己書き換えはザラだった気がするが
UPXは圧縮レベル1〜3で使う分には良いと思うけど、 dllを圧縮レベルMaxにした日にゃ所々のdll読み込みで負荷が掛かるね
>>185 最近のOSは実行可能ファイルはメモリマップドで読み込むから、
プロセスごとに実行時のコード展開が走ったりすると
複数起動されたときに共有できるものも共有できなくなる。
それで展開後のコードがスワップされたりしたら本末転倒だろ?
>>188 それは仕様です。実は結構今更感が強い。
ついでにいうと、そういうことがあるからデストラクタでは
GCで回収される可能性のあるデータを弄ってはいけない。
まじか・・・ どうすればいいんだ・・・
Dって実装重視の言語じゃないんですか? なんかスレ見てると、触ってみようかとないう気が途端に失せるんですが・・
触ってみる分にはこれほど面白い言語は滅多にないよ 実用についてはお察し下さい
dwtってd2版ってなんすか?
作りかけ
phobos用のDWTが欲しいなあ
tangobos+DWTでアプリ書いてる 今のところtango風のコードは1行も無いがちゃんと動いてるようだ D2にしたいなぁ…
スレ見つからないからdat落ちしたのかと・・
Windows環境でD2の開発環境を作ってみたんですが、 ddbgって正常に動作してますか? Eclipse+Descent+dmd2.049でコンパイル、通常起動までは行けるんですが、 デバッガを起動すると以下の感じでエラーに… パスは合っているのですが。 Loading symbols from Path to hoge.exe ->Source file "Path to main.d" not found
WinならVisualDでいいんじゃないかな。結構頻繁に更新されてるし。 VisualStudioでのデバッグはなんだかんだで快適。それとそんなに重さも感じないし。
>>201 ウチの職場に製品版のVisualStudioが無いのです・・・
小物の制作には使ってますが、.NETで事足りてしまいまして。
ミス
>>202 Visual Dのページ見たか?
> It works with Visual Studio 2005, 2008 and 2010 as well as the free Visual Studio Shells.
~~~~~~~~~~~~~~~~~~~~~~~~~~~
マジかよ最高じゃね
mixinがよくわからない・・・ classに変数の定義とsettet/getterプロパティを追加するmixinてどう書くんでしょうか mixin addprop!(T, "Name", "PropertyName"); こんな感じのmixin定義 ↓ private T Name; public @property T PropertyName(){return Name;} public @property void PropertyName(T x){Name = x;}
207 :
デフォルトの名無しさん :2010/09/30(木) 00:44:22
>>206 こんな感じだろうか
string addprop( T, string Name, string PropName )(){
string result;
result ~= "private " ~ T.stringof ~ " " ~ Name ~ ";";
result ~= "public @property " ~ T.stringof ~ " " ~ PropName ~ "(){return " ~ Name ~ ";}";
result ~= "public @property void " ~ PropName ~ "(" ~ T.stringof ~ " x){" ~ Name ~ " = x;}";
return result;
}
使う時
mixin( addprop!(T, "Name", "PropertyName" )() );
それかaddprop内で文字列mixinして変数とメソッドを生成してからtemplate mixinかな 文字列mixinとtemplate mixinが別物だから話がややこしくなるんだよな
>>207-208 あああ・・なるほどありがとう
>文字列mixinとtemplate mixinが別物
まさにこれが区別ついてなかった
210 :
202 :2010/09/30(木) 10:25:09
>>204 一応インストーラーは起動したんですが、
Register with VS xxx の項目にチェックが入れられなかったので
てっきり使えないものかと・・・
ということで入れてみましたが、Dのプロジェクトが・・・選べない?
もうちょい調べてきます。
211 :
202 :2010/09/30(木) 10:32:47
お、役立った。
213 :
デフォルトの名無しさん :2010/09/30(木) 21:42:34
GoとDの比較ってどこかにあります? 探したけど見つからん。
両方死ぬほど検索しにくいな。
神なんて唯一だからそうそう見つかるわけない
216 :
202 :2010/10/01(金) 10:38:34
VisualDを使ってみた感じ、 Eclipse+Descentの方がコーディング面ではかなり上かなと。 ddbgがダメならgdbで試してみるかぁ。
是此在我
dflってd2版はないんすかね?
module memory cannot read file 'core\memory.d' とでるんですが、coreフォルダ自体がありません。 本家のdmd.2.049.zipをダウンロードしたんですが、他にダウンロードするものがあるんでしょうか?
src\druntime\import\core\
>Tested with DMD 2.047 with Phobos だから2.049で動かなくても一向に驚かん バージョンの0.001違いは死亡フラグ dmd.2.047だけあれば大丈夫だと思う
coreがないって言われるとしたら、それはインストールミスっているとしか思えない… %PATH%とsc.ini確認するといいと思うよ
D2の安定版っていつ出るんですか?
D3が出てから
今年の5月くらいかな
2009年の11月に仕様が固まる予定
どこの暦だ
0x2010年5月
ありがとうございます。 何度もすいませんが、dfl.internal.dlib.dで、D_Version2になってないのかstd.gcをインポートしようとします。 弄ってDFL_D2にしたら、今度はコンパイルが終わりません。 全部インストラーを使って環境を作り直しても、変わりませんでした。 コンパイル時に何か指定しないとだめなんでしょうか? ツールはdsssを使っています。
dsssは死んでる dfl.exeで
232 :
デフォルトの名無しさん :2010/10/03(日) 02:58:35
公式が新しいプロジェクトではD2を推奨するようになったから、 D2はもう安定版になったとみてもいいような?
あっさり動きました・・・ 何度もありがとうございました。
Dのビルドツール模様ってどうなってるんだろ
budしか使ったことがない
236 :
デフォルトの名無しさん :2010/10/03(日) 15:23:40
makeしか使ったことがない
各種ライブラリがバグだらけで修正しなきゃならんので 毎回フルビルドするbudしか選択肢が無い
bud -full -cleanはデフォ
>>239 おおありがとう
いつの間にか色々あるなぁ
Dのクラスのフィールド、アクセス指定子を何も指定しないと、C++にならってprivateになると思ってました。 継承もデフォルトはprivateだと思ってました。
private継承とか使わんしなあ。 protectedに至っては何に使うのかもわからん。
ぐああああ Error 42: Symbol Undefined _D5layer12__ModuleInfoZ --- errorlevel 1 C:\D\dmd2\windows\bin\dmd.exe main.d -debug -version=DFL_EXE -IC:\D\dmd2\import -L/exet:nt/su:console:4.0 C:\D\dmd2\windows\lib\DFL_DE~1.LIB というエラーがでるんですが、import layerしても直りません。 これは一体?
Javaなんかデフォルトに特別な意味があった気がする
>>243 リンクするときに、_D5layer12__ModuleInfoZ が無いって言ってるわけか。
DFL_DE~1.LIBの拡張子が.LIBだからまずいのかな・・・?
dmd本体のバージョンが合わない時とかにも出た気がするなぁ
たぶんlayerみたいな名前のクラスをmain.dで呼び出してると思うんだけど、layerはどこにあるの?
import layerして、layerをビルドしてないだけじゃね。 C/C++だとincludeだから、その辺で勘違いしてたことが俺はあった。
dsss使ってるような感じでdfl.exeを使ってました・・・ bud main.d -full -cleanで解決しました。 お騒がせしました。 ありがとうございました><
250 :
デフォルトの名無しさん :2010/10/04(月) 01:03:36
今まで、クラスのprivateメンバは単体テスト出来ない、と思ってました。 よく考えたら、同じモジュールのクラスなら、privateでも直接操作出来る事を思いだしました。
D言語もそろそろフォームデザイナ付きのRAD開発環境は整ってる?
entice designerに期待
その前にGUIライブラリの充実が先だ。
RADでDSL吐いて、Dに変換すればいいんだよ Dに飽きても再利用できるし
再利用出来るなんてとんでもない バージョンアップするたびに書き換える必要がなければDのライブラリとは言えないぞ
XULとかXAMLとかあるんだからそれで記述されたものをUIとして使えればいいのか
xamlはコンパイル時XMLパーサがあればmixinで実現できる xmlが難しいならyaxamlでもいい コンパイル時yamlパーサってあったっけ?
インスタンスを作成したクラスが或るメソッドを
オーバーライドしてるか判定したいんですけど
オーバーライドの挙動がおかしい?
http://codepad.org/trNnaiPJ このコードをD1.030でコンパイル/実行
< override : yes >
< override : yes >
D2.048でコンパイル/実行
< override : no >
< override : yes >
D2.048だと子クラスBが親クラスAのメソッドfuncをオーバーライドしてない場合
孫クラスCから子クラスBのメソッドfunc(super.func)を参照すると孫クラスCの
メソッドが見えちゃうっぽい。
D1.030は孫クラスのsuper.funcは親クラスAのfuncになる。
D1.030の方が挙動が正しいと思うんだけど違うのかな
ver2..047です。 Error: alias win32.winbase.LPOFSTRUCT is deprecated ってエラーがでるんですが、推奨してないでエラーがでるってのは他に何を使えばいいんでしょう?
>>259 win32APIの事を俺らに調べさせるつもりか。
deprecatedの代替って話? …コメントとか?
ちょうどdeprecatedにメッセージが指定できたらなーとか思ってたところだ deprecated("Dじゃmainの戻り値はvoidが推奨なんだぜ") int main(); void main(string[]); みたいな
>>261 deprecatedは、Dの属性。
非推奨の機能に付ける。
tangoだったか他のライブラリだったかでpragma使ってたな pragma(msg, "fugaは殺したからhogeを使ってね"); int fuga() { /+ ... +/ }
>>262 埋め込みドキュメントにそんな項目があったような?
エラーと一緒に出してもらうと色々と嬉しくね?
コンパイルエラー時に表示されるコメントみたい機能か Dなら入りかねんな
代替機能があるのに非推奨って言われてもドキュメントかソースでも見ないと分かんないじゃん その手間を省いてくれたり 意味なんてスペルチェックと同程度だと思うよ
>>258 報告したいけどフォーラム?の使い方わからん&英語読めない…
>>269 コンパイルエラーの時にメッセージがでても、結局ドキュメントやソースを見る事になるような、、、
エラーの時に代替え機能の戻り値や引数や目的なんかを全部表示するなら別だけど。
>>270 公式和訳の人に頼んでみるとか。
やってくれるかはしらんけど。
273 :
259 :2010/10/06(水) 06:17:40
いや、「わざわざ」deprecatedが付いてるってことは、Win32的に他のを使えって教えてくれてるってことじゃないか。 ライブラリを変えて警告が出なくなりました、って、解決としてどうよ。
>>272 さすがにボランティアでしてくれてる方に頼む勇気はないすわw
サンプルコードだけ載せても通じるよなこれ、と思いつつも自分で書き込む気は起きない。
stringじゃないから?
stringでもエラーだった。 関数を実行するような形のmixinなら平気なんだけどな・・・
ぬ? 何処かミスってる? template GenStruct(string Name, string M1) { string GenStruct = "struct " ~ Name ~ "{ int " ~ M1 ~ "; }"; } mixin(GenStruct!("Foo", "bar")); Error: argument to mixin must be a string, not (GenStruct)
template GenStruct(string Name, string M1) { const string GenStruct = "struct " ~ Name ~ "{ int " ~ M1 ~ "; }"; } mixin(GenStruct!("Foo", "bar"));
>>282 immutable const・・・
まぁいいか。サンクス。
>>283 string は immutable(char)[] だから、immutable const にはならないよ
const( immutable(char)[] )
immutableは、charに対してのもの
constは、[ ] に対してのもの
結局 const char[] と同じなんだけど
定数ならenumの方が良いのでは?
enum GenStruct = "struct " ~ Name ~ "{ int " ~ M1 ~ "; }"; みたいな書き方は、D2から使えるようになったものだから D1,D2共通で使えるconstがいいのでは?
共通だなんてそんな敷居の高い
D1なんか捨てていい。
その前に、なんで文字列定数で、enumの方がいいと思うんだ?
const変数はコンパイル時に決定されるとは限らないから。 (今回のそのコードではコンパイル時に決定されるので問題ないけど)
enumは.oに埋め込まれず、使ったその場でインライン展開されるんじゃなかったっけ? だから数値ならいいけど、文字列をenumにすると、使った回数分実体が展開されてしまうけど mixin前提なら有りの気がする。
DFLやDWTはD1をばっさり切り捨てるべき
DWTはtangoをばっさり切り捨てるべき
java.langとjava.utilさえ再実装できればtango切り捨ては楽勝っぽいんだけどなぁ
DWTはtangoをばっさり切り捨てるべき 大切な事なので俺も言っとく
最近Dには疎いんだが、Tangoは素晴らしい次世代ライブラリということじゃなかったっけ? 何がどうなって捨てるべき存在になったんだ?
正直俺にも何が何だか分からない
全然流れと関係ないが、importでpackageだけ指定してmoduleを省略したときに
デフォルトでなんかの(指定したor決まった名前の)moduleをimportして欲しい。
具体的には「import foo.all」を「import foo」って書きたい。
>>296-297 tangoは次世代標準を目指して開発されていて
ウォルたんも「phobosもtangoも似たようなところを目指してるから緩やかに一つになるよ将来的には」みたいなことをいってた(と思う)。
けど誰もが思ってた通りそんな未来はこなくて、phobosも2.0以降もりもり進化してきてこっちがみんな楽しみになってきちゃった。
……みたいな感じか? 具体的に何が問題だったのかは色々意見があるだろうけど。
Tangoがただのライブラリなら最高だったとはよく言われるね コア部分まで置換しようとするから…
最大の問題はライセンス問題。 Tangoのコードを使ったら、実行ファイル配布の際に必ず「私はTangoを使いました」と 言わなきゃいけないライセンス(BSDライセンス)を採用している。 これのためにPhobosにマージすることはできないため、統合はできない。 何度も議論されて結局変わらない。
修正BSDではなく、オリジナルのBSD?
修正BSDでも書かなきゃいけないんじゃないの
ところでTangoはなにか必要に迫られてコアまで置換しようとしたの? 大した理由なかったら無闇に進化遅れさせてるだけだと思うんだけど
GCって絶対に使わないとだめなんですかね?
>>303 そのおかげでdruntimeがphobosから分離されたのがtangoの唯一の成果
Andreiのインタビューで「GCイラネってニーズに取り組んでる」って言ってなかったっけ
マジで? 本当なら超期待しちゃうんだが。
それって、なるべくGC使わないように構造体でRAIIしまくる方向のことじゃない? immutableな文字列とか入ってる時点でGCなしにするの不可能だと思うんだけど。
不可能ってわけじゃないだろう。動的配列は参照カウンタでも持たせればいい。 ウォルたんの労力ハンパないだろうけど。
本気でGC無くすとphobosはほとんど使えなくなりそうだな
だったらC++使えよって思うんだが。相変わらずの万年β言語だな。
今さらDでGCありなし混在させるくらいなら C++/CLIの方がましだわ
>>310 それだとimmutableの価値がない。immutableはノーコストでスレッドをまたいで使えることに意味がある。
よーしパパimmutable外しキャストしちゃうぞー
>>314 別に参照カウンタでもimmutableの価値は変わらんと思うが?
x86ならlockプレフィクス命令で同期無しで参照カウンタ増減させられるし。
templateをポコポコ発生させて共通化を進めてると 関数内にtemplateを書けないのが苦痛に思えてくる 楽さを追求し始めたらキリがないな
mciSendStringを使って音声ファイルの再生やら録音とかをやろうとします。 他の機能は普通に使えてるんですが、下記の wchar[] length = "STATUS "~key~" LENGTH"; HANDLE nil; int n = 0; wchar[255] c; mciSendString( cast(const wchar*)length, c.ptr, n, nil); writefln( c); writeflnで帰ってきた再生時間を表示しようとすると、 core.exception.UnicodeException : iliegal UTF-16 value と出ます。なんでUTF-16なのか分かりません。エラーでググッってみたんですが、 これはcに何かしないと駄目なんでしょうか?
たぶん終端の0を出力しようとして死んでる。 文字列長調べてc.lengthにセットしてやればいいんでは。
この場合はstd.utf.toUTF16z(length)を使えばいいと思う
あ、ごめん戻ってきた後か
import std.string; writefln( c[0 .. c.indexOf('\0')] );
Winとlinuxで使えて機能どっさりでnativeな部品を使ってるGUIライブラリ となるとwxDとDWTしか選択肢が無いわけだが、ひょっとしてwxDって死んだ?
Dのforumだかどこだか知らなかったけどGtkDを薦められた人が GtkD is GTK. GTK is shit. って言ってた
GTKに替えてGtkDを勧めているのか 三段論法でGtkDがshitと言っているのか悩ましいところだな
GUIはもうC#でいいやーって思う。
Tango嫌いにとってはWPFの命名ルールは地獄じゃないか?w
えっ
ウォルたん「Macに似てるから楽勝だったお^^」
一緒なのはPOSIX APIだけで、MacはMach-Oで、BSDはELFとフォーマットが全然違うから、そんな楽勝なはずは……流石ウォルたん
335 :
デフォルトの名無しさん :2010/10/11(月) 23:22:59
337 :
335 :2010/10/12(火) 00:43:51
>>331-334 あー、src に freebsd.mak なんて転がってるじゃん。マジで知らんかった。
これから試しにコンパイルしてみるわ。
D言語有理数入らないかなあ
std.rationalが欲しい時期が俺にもあった
Cyclic dependency in module hoge.hage ってなんですかね?
static this付きのモジュールが相互に依存してると困るよって言われてる
いつの間にか3D対応してるのか。 いるか知らんが書いた人乙。
外部アプリを立ち上げて必要なくなったら落とすみたいな事は何を使えばできるんでしょうか? ProcessのSystemを使ってコマンドプロンプトで立ち上げるように使えばいいカナと思ったんですが、 それだと任意のタイミングで落とせません。 Threadにもそれらしいものはみあたりませんでした。
windows?もしそうでwindowアプリなら、apiのSendMessage使って、 WM_CLOSEでも送ればいいんじゃないかな?
350 :
デフォルトの名無しさん :2010/10/15(金) 20:49:54
\ / \ 丶 i. | / ./ / \ ヽ i. .| / / / \ ヽ i | / / / \ -‐ ー __ わ た し で す -- 二 / ̄\ = 二  ̄ | ^o^ |  ̄ -‐ \_/ ‐- / / ヽ \ / 丶 \ / / / | i, 丶 \ / / / | i, 丶 \
ブログで作った云々見たことあるけどその人かな
353 :
348 :2010/10/16(土) 07:48:44
対象がコンソールアプリなんで、無理みたいでした。 TerminateProcessで強制終了ですが成功しました。
強制終了しかないんじゃない? 通信しないなら
static の関数の走る順番が今一よくわからないんですが、 importが全部終わったあとに末端から走り始めるんでしょうか? 実験して見た限りそうみえるんですが。
\ / \ 丶 i. | / ./ / \ ヽ i. .| / / / \ ヽ i | / / / \ た わ し で す -‐ ー __ __VV >:::::::::::::::::::: < _>':::::::: ::::::::< ,>'::::: ::::::::< >::::::: :::::::::< >;;::::: :::::::< >i::::::::::::::ゞ< 'ヘトハト! ‐- / / ヽ \ / 丶 \ / / / | i, 丶 \ / / / | i, 丶 \
>>339 報告遅れてすまん。
dmd2 自体のコンパイルはできたんだが、phobos がコンパイルできん。
std/c/freebsd/socket.d がないって言われる。
std/socket.d(85): Error: module socket is in file 'std/c/freebsd/socket.d' which cannot be read
でっちあげれば何とかなるのかな?
いまだにwriteflnの使い方分からなくてprintf使う俺 import std.stdio; void main() { int a = 1; string b = "mahime"; float c = 43.64; writefln(a, b, c); // なんか怒られてコンパイル通らない }
writelnおすすめ
>>360 うおおおおおおおおおおお
俺アホか・・・・
f.. f... formatted....
D1なら通った気がするなぁ 今のwriteflnは先頭の引数が文字列じゃないといけない
writef, writeflnはD2の途中で変更したと記憶している。2.03xでは通らなかった気がするな。
>>359 printfと書式一緒だけど?
あとwritelnてマルチスレッドだとメインスレッド以外出力されなくね?
こんなC臭い名前やめて現代的にwrite_line_formattedにすべきだ
hello worldが長くなっちゃうだろうが
アンダーラインで繋ぐのって現代的か?
バイト数を無理に減らすのが古臭いってことじゃね?
だが文字数を無駄に増やすのはアホ臭い
インテリセンスみたいな機能があるならマシだが、無いなら長いと面倒臭い
インテリセンスの無い環境は古臭いので矛盾しません
インテリセンスあっても横に長くなると見にくくなるような
改行を出力するかどうかを関数名に含めるのが既に現代的ではないと思う。 formattedをモジュール、lineをメソッドチェーンにして、 formatted.write(...).line; でいいじゃないか。
クラス名なんかで修飾してあるのは短く 頻繁に使うのも短く めったに使わないのは長く 使い方が複雑なものはクラスにしてしまえ
それと寿命の短いのは短く 寿命が長いのは長く
あのJavaですら 「Enumeration使うと一行が長くなりすぎるよ?馬鹿なの?死ぬの?」 と言ってIteratorを新しく入れてるからなぁ
tangoはモジュールの命名規則とコア関係以外はなんら問題ない
我らがウォルター様はインテリセンス使わないと苦痛に感じるような言語古臭いよねとおっしゃっております
インテリセンスが効く言語ってそんなに種類あるか?
今の所Dが一番書いてて楽しい言語だからめんどくさくなるのは困る
「printfなんかクソなのになんでwriteflnみたいなのがあるんだよ」 「うるせーバカ楽なんだよ」 みたいな問答がFAQにあった気がする
pythonの%演算子が欲しい
format関数じゃだめなのか
正規表現がs///g;とかでできるともっとよい
387 :
デフォルトの名無しさん :2010/10/19(火) 12:12:49
すみません、refの使用について教えてください。 先ほどThreadを扱うクラスで変な所でハマってしまいまして、原因がわからないため困っています。 問題のソースが要約していますがこんな感じで、Hoge::run内で強制終了してしまいます。 ---ここから class Param{} class Hoge : Thread { this( ref Param param) { this.param = param; super( &run ); } void run() { // paramを用いた無限ループ } Param param; } void main() { Param param = new Param(); Hoge hoge = new Hoge( param ); hoge.start(); hoge.join(); } ---ここまで で、以下のようにref修飾子を取ると直るのですが… ---修正内容ここから - this( ref Param param) { + this( Param param) { ---ここまで refの使用方法を間違っているのでしょうか? CentOS5.5 DMD2.049です。
試しても別に落ちないんで(Windows+dmd2.049)原因はよくわからんけど、 classはrefつけなくても参照渡しだから、ref取って直るならそれでいいんじゃないかって気がする。
クラスと構造体で値と参照渡しの違いがあるので、 明示的にref付けておいたほうが親切かなーと思いまして・・。 で、今クラスを受ける引数のrefを全部削除してみたら、 また落ちるようになった・・・ 何これc++より難しいorz
refとっちゃいけない部分まで取ったのが原因でしたorz ともあれ極力ref無しで大丈夫そうです。 失礼しました。
> クラスと構造体で値と参照渡しの違いがあるので、 > 明示的にref付けておいたほうが親切かなーと思いまして・・。 誰にとって親切なのか
C#ではref引数の呼出し側にもrefをつけなきゃいけないことを思い出した 間違いが少なくなっていいよね これに限らずC#はJava並の安全性を確保しつつ先進的な機能を入れようとする姿勢に好感が持てる でもテンプレートと破壊的変更が無いのは致命的だわ
破壊的変更を欲しがるのってD言語使いぐらいだろw
394 :
デフォルトの名無しさん :2010/10/19(火) 18:28:24
え?言語仕様の?
言語仕様の
こういう機能の為なら互換性が失われてもいい!っていうのは他の言語でもあるけど 破壊的変更そのものを望むのってどうなんだよw
破壊を乗り越える度にユーザーアプリケーションのコードが洗練されていくんだよ。
新しいdmdが出るたびにコンパイルできるかわくわくしながら試す こんな言語他には無いぜ
むしろコンパイルが通ると不安になる
コンパイルが通るとバージョンアップ失敗したかと思う
今回の変更点はコンパイルエラーにならないとこか……と思う
コンパイルが通ることをバグとして報告しようとする
破壊なくして創造はないのだ
Dコンパイラはテストドリブン開発されてないのか
Dっていう
test「とにかくいっぱい更新する」
バージョン変わる毎にテスト書き直さなきゃいけないからな
Dのテストがそんなに正しいわけがない
お前らはいったいDをなんだと思ってるんだ
>>411 何これ全ての欠点に目を瞑って異様に褒めてるように見える
import std.xml; void main() { auto doc = new Document(new Tag("a")); doc.tag.attr["b"] = `<&>"`; std.stdio.writeln(std.string.join(doc.pretty, "")); } 出力: <a b="<&>""></a> どう見ても属性値のencodeに失敗しています 本当にありがとうございました というかstd.xmlって全然使われてないのな
//dmd v2.049
import std.stdio;
void main() {
auto a = [cast(short)1, 2, 3];
writefln("%s", typeid(typeof(a))); //NG ---> int[]
auto b = [cast(byte)1, 2, 3];
writefln("%s", typeid(typeof(b))); //NG ---> int[]
auto c = [cast(long)1, 2, 3];
writefln("%s", typeid(typeof(c))); //OK ---> long[]
}
仕様には
> 配列リテラル全体の型としては、先頭要素の型が採用されます。
とあるが、byte・shortなどでは、int[]になってしまう
D1では問題なし
http://codepad.org/bVmm4xLS
>>413 そりゃ消えると言われてるモジュールをわざわざ使う人は少ないだろう
>>413 実は内部でdecode仕様としています。
つまり、`<&>"`と書いても<&>"ってなる。
>>415 消えるとわかっているんだから、使えば破壊的変更でハッピーになれるんだぜ…?
417 :
416 :2010/10/21(木) 00:14:21
しまった… `<&>"` こう、かな?
encodeしようとしてdecodeしてるくさい
419 :
デフォルトの名無しさん :2010/10/21(木) 10:09:28
D 2.037 での変更点 配列や連想配列リテラルの型は、先頭要素の型ではなく、 全要素に ?: した型を使うようになりました。
英語もろくにできないのに、今年出たDの本買ってみた。 Hello World!から細かく解説してるので入門書的な扱いかと思ったんだが、次のページでいきなりコンパイラが型を解釈しやすいように書けとか言い出したのでいつものDだと安心した。
真のDゲンガーは訓練されたどMの事を指す
>>419 ありがとう理解しました
言語仕様書へは反映されているとは限らないから、更新履歴にも目を通す必要あったんですね
今から全部読んでくる
dmdの動作はD言語の仕様でありdmdのバグはdmdのバグであってD言語の仕様ではない んん?
std.zlibってboostライセンスだから使ってもクレジット書かないでOK?
boostもzlibもクレジットいらないんじゃね? ソース頒布する時にライセンス消しちゃ駄目だろうけど。必須なのはBSDだよね。
ああ、zlibライセンスはバイナリには適用されないのか ありがとう
また今日もtangoのライセンスを罵る作業がはじまるお…
>>427 そんなことよりopApply使ってマルチタスクする方法考えようぜ!
関係ない場所でコンパイルエラーがあるたびに 戻り値を省略したdelegateリテラルの戻り値の型が化けて エラーメッセージがややこしいことになるのは何とかならないのかな
dflのフォーカスが離れたときのイベントってありますか?
onLostFocus
古いライブラリのソース見ると、cの関数呼び出しでchar*引数与える際に、 単に cast(char*)しているだけのソースがあるんだけど、 これtoStringz()しないとダメなままだよね?
文字列リテラルは、null終端になってるからキャストだけでも問題ない その他は、toStringz()などでnull終端にしないとマズイ
文字列リテラルはconst(char)*に暗黙変換できるから、 基本的にはキャストだけでおkってシーンはあんまないはず。
>>433 ,435
にゃる。ありがと。
mysqlドライバが・・・
なぞ?の現象で落ちてしまいます。 なんのバグか分からないので分解してみたんですが、 int l = parent.pages.length;//3 int sw = TabPage.s_width; int bw = TabPage.btn_wigth; int k = sw/bw;//5 int p=3, n=5;//リテラルでやってみる auto r = l/p/n;//落ちない auto r2 = l/k;//落ちる なんか変なことしてますか?
実際のコード部は int br = pages.length / this.width / TabPage.btn_wigth; int row; foreach(i, page; Tab.pages ) { msgBox(format("%d %d %d ",pages.length, this.width, TabPage.btn_wigth)); if (!i % br) { msgBox("!"); ++row; } msgBox("!"); page.btn.bounds = Rect(TabPage.btn_wigth*i, TabPage.btn_hegiht*i,TabPage.btn_wigth, TabPage.btn_hegiht); } です。msgBoxで表示されてるのは 3 520 100の数値なんだけどなぁ
すいません。 すべては自分の勘違いですた。
そろそろ本気出す
ウォルたんとandreiはいつでも本気っぽいからライブラリ作者も頑張れ
俺はdwtが2対応したら本気だす
なんだかんだで機能的にdwt最強なんだよな 困る
444 :
デフォルトの名無しさん :2010/10/31(日) 03:02:12
dmd2.050 Windows const string str = "hello world"; // constはずすと通る。 std.algorithm.startsWith( str, "hell" ); // 引数から推論できないよエラー ちくしょー
自分はdflにイメージリストが出来たら本k(ry
opencv2.0って日本語描けるようになったのかな
dsourceのbindingsの一部が通らなくなってるな C形式の関数ポインタの宣言が禁止されたため。
dflのdropサンプルでドラッグ始めると落ちるんだけど。 dmd2.047
こっちじゃListViewへのドロップがたまに落ちる 必ずじゃないのがタチ悪い DFLのforum見たらすでに報告されてたんだけど その前辺りからtrunkの動きが無いんだよな
d1のGuiライブラリは安定してるのかな。
バグってる箇所を特定できる程度には安定してる
既知のバグはバグじゃないって奴か
DFLのドラッグ&ドロップ使うとき なんで Application.autoCollect = false; にする必要あるんだろうか CG走ると困る作りになってるのかな
DFLでD&Dする時は、気を付けた方がいいよ 以前にdropしたファイルが、消滅したことがある 特にファイルを処理するコードはなかったんだけど、削除されていた テストするときは、ダミーファイル作ってやったほうがいいよ
なにそれ・・・こわい・・・
まじでこわいw
ごめん、英語サイト見てもどの辺に情報あるのかちんぷんかんぷんなので教えてください。
>>449 が指摘している変更で、
例えばcのqsortをインポートする場合とかはどう書かないといけなくなったの?
> void qsort(void *base, uint nelems, uint elemsize, int (*compare)(void *elem1, void *elem2));
こうかな? void qsort(void *base, uint nelems, uint elemsize, int function(void *elem1, void *elem2));
>>460 通った。サンクス。
mysqlドライバぇ・・・
>>461 ありがと。
functionて使ったことなくて
> int function (*compare)(void *elem1, void *elem2);
こんな書き方で怒られた後の質問だったのです('A`)
delegateと一緒では
将来的にはな 今はdelegateだとthis(コンテキスト)ポインタが変数にも引数にも入ってるはず
構文の話でした。
将来的といいつつ、functionとdelegateはD1.0の最初期から統合するする詐欺では
mixin is not define ってもじかしてMixin自体がないってことですか?
俺も現実に対してmixin is not define
質問です。 遅延評価の式に使われている変数のうち一部だけをその場で評価したいのですが何か良い方法はないでしょうか。 たとえばfuncの引数が遅延評価されるものだとして、 func(a * b); と与えた時に、aは遅延評価してほしいが、bはfuncを呼びだした時の値を使いたい。 といった状況です。
意味が分からない。 bを普通のローカル変数にして中身はその文に到達するまでに計算しとくのではだめなのか?
funcの呼出し側に入ってきた時点でaとbがlazyってこと? void a(lazy int a, lazy int b) { func(a * b); } ということなら void a(lazy int a, lazy int b) { int c = b; func(a * c); } で済むと思うけど
あーっと例が悪かったです。 class test { double delegate() a; void b(lazy double arg) { a = {return arg();}; } } というクラス作っといて test[] t; double f = 1.; for(int i=0;i<t.length;i++) { t[i].b(f + i); } //この時点でi=t.lengthになる みたいにして のちのち for(int i=0;i<t.length;i++) //先のiとは別物 { t[i].a(); } と書くと、iが遅延評価されて、 t[i].a() == 1.+t.length になってしまいます。 そこを、t[i].a() == 1. + i という形にしたいのです(つまりfは遅延評価されるが、iはその場で値にされ代入)
……やっぱりiを別のローカル変数に一回代入すれば済む話じゃね?
dwtにdflとかでいうPanel的なものってないかね?
>>473 t[i].b(f+i);の代わりに
t[i].a = (int j){return{return f+j;};}(i);を使えばよろしい
おうふいい感じです。ありがとうございました。 ってなんか、こう、C言語のマクロ的に完結に書きたいですね('A`)
mixin・・・使ったことないけど、これで解決できるのかな・・・
スレに動きがないな・・ よしお題でも・・ お題:mixinでC#のstring.Formatを作ろう int n = 10; string s = "test"; assert(DFormat("int→{0}、string→{1}", n, s) == "int→10、string→test");
>>480 めんどくせ。
真面目にやるなら、Phobosのformat()をラップする。
最近思った事。 例外処理の全体テストって、どうやれば綺麗な物になるだろう? 知恵欲しいお。
Hara Kenjiさんの"expand for std.metastrings"が多分それに近いんじゃないかな。
3日前とかなら動くと思う 4日以上はかなり厳しい
486 :
sage :2010/11/06(土) 18:55:07
D言語友の会 の The Case for D と TDPL - Concurrency in D Programming Language の和訳を読んでるけど、とても面白いね。 Dの言語機能が何をしたくて実装されたかが理解できて D言語がさらに面白くなりました。 訳した人、乙です。
age てしまった・・・
D1のstd.random貧弱すぎワロタ
線形なんとかだけだったっけ
>>488 今見た
俺が昔Cでゲーム作るときに使ってたアルゴリズムよりましだったorz
そのゲームはカルドセプトサーガとかいわないか?
いい事思いついた mixinで.hファイルをパースしてDにポーティングしよう
D1とD2で、ErrorとExceptionの継承関係変わってたのね・・・ ちゃんと書きやがれ。
いいだしっぺの法則
コードがphobosの仕様でdmdコンパイラの挙動がDの仕様
http://www.dsource.org/projects/bindings/wiki/WindowsApi ここのWin32APIのポーティングなんだけど
IUnknown継承したインターフェイスをCoCreateInstanceして
QueryInterfaceすると実行時に落ちる
調べたら継承先インターフェイスでQueryInterface、AddRef、Releaseを定義してあると
IUnknownの実装がIShellFolderに受け継がれないっぽい。
3つの定義コメントアウトしたらちゃんと動いた。
これってD2のバグ?やり方がおかしいだけ?
それともPhobosのIUnknown使って全部書き直せって事?
×interface IShellFolder : public IUnknown{
HRESULT QueryInterface(REFIID,PVOID*);
ULONG AddRef();
ULONG Release();
HRESULT ParseDisplayName(HWND,LPBC,LPOLESTR,PULONG,LPITEMIDLIST*,PULONG);
HRESULT EnumObjects(HWND,DWORD,LPENUMIDLIST*);
:
}
○interface IShellFolder : public IUnknown{
//HRESULT QueryInterface(REFIID,PVOID*);
//ULONG AddRef();
//ULONG Release();
HRESULT ParseDisplayName(HWND,LPBC,LPOLESTR,PULONG,LPITEMIDLIST*,PULONG);
HRESULT EnumObjects(HWND,DWORD,LPENUMIDLIST*);
:
}
IUnknownの実装ってなんだろ?
>IUnknownの実装ってなんだろ?
参照カウント増減とインスタンス返す部分だと思うけどvtblがおかしいのかIxxxxx.QueryInterfaceしても
IUnknown.QueryInterfaceが呼べてない感じがした
>>497 みたいにコメントアウトするとIUnknown.QueryInterfaceがちゃんと呼ばれるという具合
IUnknownの定義も載せて欲しいな。 原因分らない可能性も十分あるけどwww
extern (Windows) { interface IUnknown { HRESULT QueryInterface(REFIID riid, LPVOID* ppvObject); ULONG AddRef(); ULONG Release(); } alias IUnknown LPUNKNOWN; interface IClassFactory : IUnknown { HRESULT CreateInstance(IUnknown UnkOuter, IID* riid, void** pvObject); HRESULT LockServer(BOOL fLock); } alias IClassFactory LPCLASSFACTORY; } 実装は派生Interfaceの実装毎にDLLの中にあるのかな(shell32.dllとか・・?) 仕様には呼出規約も継承されるって書いてあるけど、まさかインターフェイスの場合は オーバーライドすると継承されない不具合とかが潜んでてDLLのQueryInterface呼出時に死んでるとか・・・?
なんでIUnknownでは、 HRESULT QueryInterface(REFIID,LPVOID*); って、型になってるのに、 IShellFolderでは、 HRESULT QueryInterface(REFIID,PVOID*); って、型になってるんだろう? 正直これが原因のような気もする。 そもそもIUnknownで、 HRESULT QueryInterface(REFIID riid, LPVOID* ppvObject); ULONG AddRef(); ULONG Release(); がリストされてるんだから、IShellFolderで改めてリストする必要は無いよねえ・・・
派生先の定義をLPVOID*に変えてみてもQueryInterfaceで落ちるなぁ
そしてコメントアウトすると上手く行く
>>502 さんの言うようにポーティングが不要な事してるっていうのがまずあるけど
それで落ちるのが理由が全然わからない・・
今ためしにこういうプログラム作ってD2でコンパイルしてみたけど、
http://codepad.org/mt4iUfnQ Error: function main.B.foo of type void() overrides but is not covariant with main.A.foo of type voidWindows ()
って、怒られた。 ・・・あれ?
ホントだ、全部extern(Windows)にすると通るけどなんでだろう・・・
ファイルのグローバル変数の値を全て辿れる方法って ありますか? class における .tupleof みたいなことが出来たら・・・。
まずallMembersをぶちかまして 頑張って一つ一つグローバル変数かどうか識別するとか?
情報ありがとうございます。traits を知らなかったので 調べてみましたが、これはクラスの型を指定しないといけないみたいですね・・・。 あ、調べたいソースファイル自身をインポートして グローバル変数部分の文字列抜き出すようなほげほげすれば あるいは・・・!? ムズソウ。。。
xmlって読み込む系はサンプルあるんだけど、保存系が見当たらない。 どっかにいいサンプルないすか?
510 :
デフォルトの名無しさん :2010/11/09(火) 02:22:28
いい事思いついた mixinでE4Xをパースし(ry
struct Value { string str; long _int; (略 } enum TYPE : byte { STRING, INT, (略 } class Value { TYPE type; Value value; void val(string val) in { assert(type != TYPE.STRING); } body { value.str = val; } void val(long _int) in { assert(type != TYPE.INT); } body { value._int = _int; } (略 みたいなコードを何か一括纏められる方法ってDにありますかね?
std.variant
>>506 コンパイラスイッチの -vtls じゃ不十分だろうか?
std.variantで試してみます。 所でモジュール名が同じだと駄目なんでしょうか?パス(名前空間?)は違うんですが。
>>513 ありがとうございます。こんなのあったんですね。
今回調べようと思ってた理由は、Derelict2 を使っていたら
アクセスバイオレーションで落ちてしまい、恐らく
ロードしていない関数(へのポインタ、これはグローバル変数)が
あるだろうと思ってそのポインタ値を出力してどれが null かを
調べたかったのでした。
実はその変数自体がわざわざ __gshared: 指定されており、
スレッドローカルではなかったので、そのオプションは使えなさそうです・・・。
結局ステップ実行して原因を突き止めました。
ともあれ、情報をありがとうございました。
517 :
515 :2010/11/09(火) 21:19:45
勘違いですた。
最近の質問の傾向からすると今になってDを使い始めた人が結構いるのだろうか メジャーか。メジャーに躍り出るのか
Dから去る人間も結構いるんじゃないだろうか
linux64bit対応まだですか? 数値計算用途で考えているんだけど、SciD使っている人いたらレビュー求む。
まったく使ってないけどスレには居る人間もここに と言うかD1の中期くらいで止まってるから変わりすぎてて笑う
1回使ったけど今後使う予定のない漏れも
>>519 まあでも、C++に去っていく人は少ないだろう。
一回も使ったことないけど何となくいる俺も
ええいお前ら使え アプリ作れ そして俺のように破滅的状況を味わうのだ
だってレンタルサーバーのCGIに使えねーんだもん
自分でレンタルサーバー立てればいい
すまん、D1からD2に移行しようと思っただけで新規じゃないです・・・ メジャーにはなって欲しいけど。
そーいえばマイクロソフトが謎のD言語ってのを開発してるってニュースが昔あったな。
最近流行りの仮想レンタルサーバとかなら普通に動くよ。
レンタルサーバーって言い方が悪かった 無料サーバーって言えば良かった
C:\D\dmd2\import\win32\windef.obj(windef) Error 42: Symbol Undefined _D5win326windef13__readfsdwordFkZk って奴がいきなり出始めました。 それまでは動いてたので何が悪いのか分かりません。どういう風に解決すればいいんでしょう?
まず何をしたのかがわからないと まったく何もしてないってことはないだろう …いや、Dならありえるな
>>533 1. dmdをインストールしなおす(解凍してパスをとおす。必要ならフォルダの構成を変更する)
2. sc.iniを確認して、Phobosとdruntimeにパスが通っていることを確認する
3. phobos.libが最新でsc.iniで見れるlibフォルダに入っているか確認する
4. win32.libをgnu-makeで作成し、libフォルダに入れる。コンパイル出来ないときは、そのへんに落ちているパッチを当てるか自分で修正する。
5. sc.iniを編集するとかして、win32にもパスをとおす
6. プログラムの内部に pragma(lib, "win32"); って書くか、コンパイル時またはリンク時にwin32.libのリンクを指定する
D言語はP/ECEに似たワクワク感がある
537 :
デフォルトの名無しさん :2010/11/11(木) 01:15:16
pragma(msg, "hoge".toupper ); // ok
pragma(msg, "HOGE".tolower ); // cannot evaluate at compile time
こうゆうところですねわかります
>>536 ※ 既知バグだった。
>>532 まさかコンパイルしてないわけじゃないよな
俺のとこじゃ普通に動いたぞ
どこのサーバー? 無料なら乗り換えるよ!
無料ではなくねw
いや無料 今ryuquoだけど閉鎖してkuronowishに変わる んで、どっちも使えるっぽい 鯖調べしてた時に他にもいくつか使えるっぽいとこあったぞ
俺が借りてる@PAGEは無料で使えるはず。
>>543 あんまり関係無いどころか、鯖選びのハードル上がっちまうじゃねーかwww
-I のパス指定って相対パスは指定できない・・・? 一つ上のフォルダを指定したいんだけど、うまくいかない。。。
できるはずだけどな -I.. じゃ駄目なの?
-I..\Derelict2\DerelictGL こんな感じでやってるんだけどうまく行かないんだよね。 最初は \ ではなく / でやってみたりもしたけど。 相対指定しなくて良い場所にフォルダ置いてみるとうまく行く。
Documents and Setting の下ってのが怪しい・・・?
549 :
デフォルトの名無しさん :2010/11/12(金) 03:25:22
>>548 それだッ!
スペースを含むパスには対応してなかったはず。
あとたしか日本語入りのパスもだめ。
550 :
549 :2010/11/12(金) 03:39:34
ごめん。ウソ。 今試したらどっちもいけたわ。 ところでもしPowerShell使ってるならオプションを'-I..'とかって括らないとだめみたい
あれー・・・、いける? こっちは無理だ・・・。'' で括っても見たけど。。。 ちなみに bud を使ってて、 Bud 用レスポンスファイルの中に -I..\Derelict2\DerelictGL ってな感じに書いてます。 レスポンスファイルに書いてるってのも良くないのかなぁ。
あ、コンパイル通らないのは違う原因かも。 もうちょい調べてみます。どうもありがとう。
あ、間違えた。リンカでこけるんだ。
OPTLINK (R) for Win32 Release 8.00.2
Copyright (C) Digital Mars 1989-2009 All
http://www.digitalmars.com/ctg/optlink.ht C:\Documents.obj
Error 2: File Not Found C:\Documents.obj
やっぱりフォルダ名のスペースがまずい気が・・・。
配列内の順番を変えたい場合、さくっと出来る方法はDにありますか?
void main() { auto a = [2,1,4,3]; a.sort; writeln(a); } 簡単に出来る方法も何も、sortってプロパティがそのものじゃね?
すいません。 条件書き忘れてました。 3番目のデータを先頭に持っていくとか、そういう奴です。 ところで配列の要素の削除って出来ないんでしょうか? 探しても見つからないんですが・・・
//n番目を先頭に auto result = [array[n]] ~ array[0 .. n] ~ array[n+1 .. $]; まあサクッとできてるほうかな・・?
>>557 ありがとうございます。動きました。
が、さらに誤解を与えてすいません><
n番目の奴をm番目に移動とか・・・です。
要素の削除とかはstd.algorithmにあったと思う
>>558 そういう用途に配列を使うのもどうかと思うよ
通常はListとかのデータ構造を使うと思うよ
DだとSListとかあるけど英語の資料しかなくて使い方わからないよ
でもsortがあるのにinsertとかdeleteとかがないのもなんか違和感
>>561 →
>>559 Arrayが第1引数になる関数はArrayのメンバ関数のように扱えますので
そちらをお使い下さいってことだろうね。
ならsortもalgorithmになきゃ不自然じゃねってこと言いたかったんだごめん
ちげえや sort自体はalgorithmにもあるけど、sortだけ組み込みなのが許せないってことだごめん
きっとremoveやinsertは1行で書けるけどsortは書けないからだ
D言語マンが変身するときの掛け声は”構文糖衣!”
D言語が日の目を見ることはあるのでしょうか?
>>567 あるとしたらそれは世界が非常時の時だろう
非常時に颯爽と現れたDプログラマが救世プログラムをコンパイルするわけだ $ dmd -run christ.d Segmentation fault $ omg omg: command not found
軒並みだめじゃねぇかww
ワロタwww
D言語はもっと評価されていいと思うんだ auto mio = new けいおん!(ポロリもあるよ);
D勉強したあとにPythonに手を出した Pythonでいいじゃんって思った
>>573 待て,それはbearophileの罠だ
破壊的変更のない言語に何の価値があるんだ?
D勉強したあとにC#に手を出した C#でいいじゃんって思った
対象ファイルのDirEntryを直で吐く方法ってないすかね? listdirだとディレクトリ内全部のファイルになっちゃう。
無いような感じ 配列の要領で path.isdir; みたいに書けるからいらなくね?ってことか?
なるほど、一覧から返すようにします。 ついででなんですが、EclipseにC#の#Regionみたいなものあります?
Descentでした。
パイ損やらC#でいいじゃん、って思う気持ちも分かるけど、記述が面倒なんだよな。 Dならさくっと書けるのに・・・、と思ってまた戻ってくる。
Pythonは、まああれはあれでいい C#とかIDE使ってても発狂しそうになるわ
C#/VBは文字列処理で悶絶しそうになる 現状文字列の扱いにもっとも長けた言語の一つではないかと言う気がする
Error: function dfl.drawing.Icon.fromHandle (HANDLE hi) is not callable using argument types (HANDLE) Error: cannot implicitly convert expression (shfi.hIcon) of type HANDLE to HANDLE Error: function etc.iconFromFile no return exp; or assert(0); at end of function これってどう直せばいいんでしょうか・・・
586 :
デフォルトの名無しさん :2010/11/14(日) 06:11:10
D言語のコンセプトは正しいと思うわ ちゃんと完成してライブラリが増えてきたら十分Cに置き換えられると思う ちゃんと完成してライブラリが増えてきたら・・・
ごめんなさいageてしまいましたごめんなさい
十年後かもしれないし 二十年後かもしれないけど がんばってね
>>586 D言語に関して確実に言えることは、待っていてもだれもやってくれないということだ。
もし何かライブラリがほしいと思ったら、自分で作るか、
少なくともどんなのがほしいかくらいは声を大にして言っておかないと絶対に作られない。
言語が完成しないと、ライブラリ作ってもすぐ使えなくなりそうで 作ろうにも作れないだろう
HWNDをきっちりラップした軽いAWT実装欲しい・・・(小声で)
どうせD言語なんて絶対完成しないから、 破壊的変更を承知でライブラリつくっては壊れてそれを直し …ってサイクルを続けるしか無いんじゃない?
>>592 他に追加したい機能なんてあるのだろうか?
誰かが新しい言語仕様に対応出来るパーサを一つ作って、 D言語の更新の度にパーサも更新ってどうよ?
そこまでいくと本末転倒な気がw
tioportたんのの出番だな
>>591 JVMをシームレスに使えるインターフェースがあれば良いかもなー
絶望した。
なんで? Dって強力なんでしょ?
今までwith文の存在に気づいていませんでした。 これからは有効に使おうと思います。
with文って可読性低くするからあまり使わないほうがいいんじゃ? struct Test { int hoge; } void main(){ Test foo; string hoge = "string"; writeln(hoge);// string with(foo) writeln(hoge);// これはどうなる? }
>>603 D2ではコンパイルエラーになるようです。
~と打ち間違えてこんなん↓で落ちたんだけど
string ip = "192.168.0.1";
string uri = "
http:// " = ip ~ "/hoge.html";
コンパイルエラーになってくれないのね(´・ω・`)
一時期はD便利って思ってたけど、最近では普通にPythonだな・・・ スタイルさえ確立すればPythonでもDでも同じ。
Dに比べりゃPythonなんてかたなしだろ。動的型付けだけに
>>606 速さが違う
>>586 組み込み機器CPUがマルチコア過ぎてC言語じゃ対応できない未来のための
D言語だと思ってる。対抗馬のGoは今どうなってるんだろう。
Google「Go…?」
えっGoってなかったことにされてんの?ちょっと期待してたんだけど
>>604 ほう
codepadでテストするもんじゃないな
>>609 現状、並列処理用の拡張やライブラリの充実度ってCとDじゃ
比較にならないと思うんだけど、どのぐらい未来の話?
Concurrency in D ってやつか。アンドレイたんの思い描く未来のD並列処理は 読んでて確かに面白かった。
並列処理はもう標準ライブラリだけで出来るけど・・・?
Concurrencyは並列じゃなくて並行だぞ マルチコアで全く関係の無い別々のスレッドを走らせるなら間違ってないが
ん?並列と並行は別の意味があるのか・・・ まあ、どっちにしても出来るけど。(ドキュメントに嘘書いて無ければ)
まあ、当然できねえからっこういう話題になってるんだけどな。
うお、ドキュメントの日本語訳更新されてる! そろそろ俺も本気出す。
622 :
615 :2010/11/16(火) 20:34:35
>>617 並列と並行、確かにごっちゃにしてた。
調べてみたら、次の説明が。
Parallelは、日本語訳は並列。Instructionレベルでの同時多重処理を実現するのための技術。
Concurrentは、日本語訳は並行。Taskレベルでの同時多重処理を実現するための技術。
調べてみよっと。どうもありがとう!
>>620 じゃあ、俺の見たスレッドの作成が出来る、って記述は幻だったのか。
そりゃスレッドはあるけど、逐一処理でスイッチするだけじゃん。 マルチコア使って実際に並列処理してくれるかどうかは別の話だろ。 処理を並列化できることを示せるような方法は今のところなかったと思うし。 配列演算使うと並列で処理してくれる「かも」とは書いてあるが。
>>624 何でスレッドは並列処理しないと思ってるのか。
せっかく独立して動かせるのに。
ファイバーと勘違いしてるってこと?
配列演算での並列ってさ、SIMD ってことじゃないの? マルチコアでやってくれることを期待するものなの??
>>627 自動並列化っていうのはあるけど、コンパイラ次第。
まあ、今はあまり期待出来ないが。
DでOSやらなんやらのリソースを扱うクラス(☆)を別のクラス(★)のメンバとして 持たせる場合、解放処理が必須になると思うんだけどそういう場合どうやってしてる? デストラクタの処理順は不定だから★のデストラクタで☆の持ってるリソースを解放しようとすると アプリケーション終了時に☆の方が先に解体&メモリ解放されてエラー堕ちしちゃうんだ・・・
DのGCはメモリ管理のみだと割り切ったほうがいい リソース管理は基本手動かscope
まあJavaで解放強制するSWTみたいな代物もあるんだ やってやれないことはない
>>630 Dィィィィ オマエェェェェェェ
しくしく;
int hoge(int, int); みたいな関数のポインタへのキャストはどう書くのでしょうか?
int function(int, int) p = cast(int function(int, int))&hoge;
Dなんだからauto使ってくれ
>>632 他の言語でその辺上手くやってる言語ってあるっけ?
637 :
633 :2010/11/18(木) 08:31:42
みなさんありがとうございます
>>634 int function(int, int) phoge = cast(int function(int, int))GetProcAddress(hLibrary, "hoge");
でコンパイルは成功して実行(a = (*phoge)(3, 5); みたいな)も出来るようになったのですが
引数の値がうまく渡せないみたいです
(DLL 側でみると 1番目の引数は正しい値になっているのに 2番目の引数の値が出鱈目です)
戻り値はなんとか間違った値で返っているみたいですがスタック壊してるっぽいですよね
>>635 auto phoge = GetProcAddress(hLibrary, "hoge");
ってやると
Error: expected 0 arguments, not 2 for non-variadic function type intWindows ()
みたいなエラーが出てしまうんです
ちなみに DLL の方は __cdecl で作っています
dmd 2.050 を使っています
>>635 auto phoge = cast(int function(int, int))GetProcAddress(hLibrary, "hoge");
だとコンパイル通りましたが
やはり実行時に 2番目以降の引数がおかしくなります
D から DLL 呼び出すのは無理なんでしょうか?
cdeclならextern(C)しないとダメなんじゃね? auto f = cast(extern(C) int function(int, int))GetProcAddresss(..); この位置のexternきもいなっていうかこんなことできるの?
だめですね コンパイルエラーになります
641 :
633 :2010/11/18(木) 09:04:13
一応 implib で .dll から .lib 作って LoadLibrary じゃなくて extern (C) { export int hoge(int, int); } を書いて静的リンクしてやればうまく動くことは確認しました GetProcAddress で取得した関数の型変換で失敗しているみたいです (出来れば LoadLibrary で正常に動作させたいです)
予めextern(C)の中で確保した関数ポインタに入れてやると解決した覚えがあるかもしれない extern(C) { int function(int, int) hoge; } ... hoge = GetProcAddress(..);
643 :
633 :2010/11/18(木) 09:32:37
解決しました ありがとうございました
このスレも役に立つことあるんだな
>>629 「☆がデストラクタで自分が死ぬときに自分のリソースを解放する」
としてて困ったことがないんだけど、☆のさらに外の★がリソースの面倒
みる必要があるのってどういう状態?
クラスの参照渡し+delete使ってるんじゃないの?
Dってdeleteで削除してくれないの?
>>642 extern(C) { alias int function(int, int) HOGE; }
auto hoge = cast(HOGE) GetProcAddress(..);
でも行けた気がするな
650 :
デフォルトの名無しさん :2010/11/18(木) 21:39:48
>>645 例えばHWNDとWindowクラスを関連付けるmapオブジェクトをWindowクラスが持っている状況で
WindowクラスがWM_DESTROYを受けたときmapオブジェクトから関連付けを削除する仕組みがあるとして
PostQuitMessageが飛んでくるとWM_DESTROYが来ないでアプリが終了してしますね
そのためにデストラクタでもmapから関連付けを削除しようと試みたときに
Windowクラスのデストラクタではmapオブジェクトが既に解体済みとなってしまって
アクセスした時点でアプリが不正メモリアクセスで落ちます。
↓は上とは関係ないけど落ちるケース
scopeつければいいんだけどscopeつけると宣言と同時にnewしないといけないから
ちょっと使いにくいなあ
class R{
A a;
~this(){a.func();}
void set(A a){this.a = a;}
};
class A{
void func(){}
}
void main()
{
auto r = new R;
r.set(new A); // rが解体されるときaは既に解体済みのためa.func()でcore
}
デストラクタでメンバオブジェクトに触っちゃダメってどっかで聞いた気がする
>>650 その例だとmapごと消えるんだからわざわざ手動で関連付けを消す必要性が感じられない
もしWindowクラスがOSのリソースを持ってるからというなら、
>>645 の通りWindowクラスのデストラクタで解放すればよいのでは
>>651 本家マニュアルのデストラクタの説明に書いてありますな
653 :
デフォルトの名無しさん :2010/11/18(木) 22:24:57
>>651 デストラクタの呼ばれる順番は不定だから
でもデストラクタ以外に自動で呼ばれるものがないからね・・
自分で解放メソッド呼ばなければならないなんてCやってた頃に巻き戻されたようだ
メモリだけ管理してもらってもこれじゃあんまり意味なくね?
655 :
デフォルトの名無しさん :2010/11/18(木) 22:32:59
>>652 mapは用途から考えるとstaticでWindowインスタンスから共通で触れるもの、っていうのと
Dはdeleteでデストラクトが出来るっていうのを踏まえて考えると
デストラクタで解放しないとすると勝手にdeleteやられちゃった場合
リソースが宙ぶらりんで残っちゃうわけで、そうなるとやっぱりデストラクタで
解放するしかうんぬんと、、、 どつぼに嵌っています
>>655 mapをmainの中に入れる。(autoにする)
静的デストラクタ。
解決するか分かんないけど。
あともう一つ。 静的グローバル変数のオブジェクトを、mainで生成、開放する。
658 :
デフォルトの名無しさん :2010/11/18(木) 23:27:29
性的デストラクタの方が通常のデストラクタより呼ばれる順早い罠に気をつけて
http://ideone.com/ixADU import std.c.stdio;
class A{static ~this(){printf("~A\n");}}
class B{~this(){printf("~B\n");}}
class C{~this(){printf("~C\n");}}
void main()
{
auto a = new A;
auto b = new B;
auto c = new C;
}
---output
~A
~C
~B
GC.addRoot と GC.removeRoot を使うのはどうでしょ
やっぱり詳細を予想しながら回答すんの無理。 詳細のソースだしてくれ...
>>659 のやり方が多分ある程度正当だと思う。
構造体で包んで、コンストラクタとデストラクタで登録するのが良いかと。
>>659 >>662 ちょっと待て。
そんな変な方法取るぐらいなら、scopeで処理する方が幾分もマシだぞ。
>>663 どっちのスコープ?scopeストレージクラスはそのうち消えるよ。
scopeガード文は消えないけど、それを使ってclassのデストラクタが呼ばれること自体を保証
できるわけではない(クラスを使う人が確実にdeleteするとは限らない)から、
クラスが破壊されるときにメンバのオブジェクトをいじる/壊す方法が欲しくなる。
その方法としては、
>>659 >>662 の方法が妥当かなと思う。
scopeストレージクラスは廃止予定だとか、std.xmlは・・・とか 誰か、今後の変更予定をwikiにまとめておくれよ
DIPでいいのでは
>>664 どこが妥当だ。
本来GCで管理してないメモリを、無理やり管理させたら、何が起こるか分らないぞ。
ライブラリの生成・破棄のルールをGCが知ることも出来ないしな。
リソースを管理してるクラスを、mainで生成・破棄を確実に起こすようにするか、
メンバをstaticにして、静的デストラクタでやっちゃう方が幾分もマシ。
参照カウント増やしとくみたいなもんなのかー
>>670 デストラクタの呼ばれる順番が、classによって保証されているのか
classを使う側次第なのか、の違いなんじゃないの
deleteを書き忘れたら、順番が不定になって
落ちたり落ちなかったり、わかりずらいバグを生むとか
672 :
デフォルトの名無しさん :2010/11/20(土) 17:59:15
struct のデストラクタは 1.呼ばれる順番(goes out of scopeした順?) 2.必ず呼ばれる 3.メンバ(クラスを含む?)にさわれる ことが保障されてるのか
htod.exe で jni.h を変換しようとするとハングアップするんですがみなさんのところではどうですか?
>>673 それは、GC管理下のメンバオブジェクトには触ってないから、動いて当然
C++から来た俺がちょっとメモ代わりに書き残します。 is:参照(ポインタ)同士の比較 ==:opEquals(operator==)での比較 インスタンスがnullかチェックする場合、isの方を使います。 分かりづらかったので、同じくC++から来た人用に。
htodって保守されてんの?
>>668 テンプレートすごいなあ
thisを置き換えることでTをstructの外側から透過的に使えちゃうとか
こういうテクニックってどこかにまとまってたりします?
自分じゃこういう使い方絶対思いつけない。
struct ControlledData(T) {
T self;
alias self this;
Dのテンプレートテクの纏めとか見たことないけど ある意味phobosのコードが見本市状態だな andreiのコードとか変態極まる
>>676 あと、値型のポインタの比較はどっちでもいいような気がする
int* p;
p is null
p == null
>>681 BのデストラクタでAに触ってみてテストするべきじゃ?
>>682 なにを?
とりあえず触れ、ということなら、それは不要だ。(目的は達成しているので)
>>677 一応最新のダウンロードしたら
2010/04/28 08:58
になってたお
半年も経ってたらコンパイル通らないな
687 :
686 :2010/11/21(日) 15:09:04
書き込んでから気づく。 ただ、描画処理が別スレッドで動いてるだけだねww
>>683 何の目的を果たしたのか分からないけど
BのデストラクタでAに触ったら落ちた
689 :
686 :2010/11/21(日) 16:27:41
>>688 目的は確保したリソースの解放。
元々そういう想定でしょ?ちがうの?
>>673 みたいに各リソースが独立した単純なケースなら、わざわざ質問しないと思うけどなぁ
複雑な依存関係があって、別のオブジェクトを触る必要がある場合の話なんじゃないの?
>>690 他の場所から参照されている以外に、
リソースを解放する時に他の場所を気にする必要があるケースってなんだ。
解放する順序が決められているとか
また微妙なケースだな... それにしても質問者はどこへ?
>>689 元々はデストラクタが呼ばれる順を制御したいって話じゃなかったっけ?
>>694 それは解決法の一例であがっただけだよ。
>>696 まじだ
あれ?演算子オーバーロードはalias先のthisのを使えないのは仕様なのかな
698 :
672 :2010/11/22(月) 14:51:26
デストラクタほんとメンドクサイな。ちょっと整理させてくれ。 クラスのデストラクタは 1.たかだか1回しか呼ばれない 2.GC管理外のメンバには触れる o 明示的にdeleteされるか、GC.collectが呼ばれない限り 3.いつ呼ばれるか、そもそも必ず呼ばれるのかすら分からない 構造体のデストラクタは、 4.スコープから出たときに必ず1回呼ばれる o ただし構造体AがクラスBのメンバの場合 5.構造体Aがスコープから出るのはクラスBのデストラクタが実行された後である o さらにこの構造体AのメンバにクラスCが含まれる場合、 6.クラスBがすべての参照を失った時点で、クラスCの参照は1減る では、添削を頼む!↓
std.signals って使えないかな。
>>650 のだと、
windowをmapに登録するついでに window.connect(&map.removeMe)、
で、windowが死ぬときに this.emit(this)。
mapがデストラクトされたら勝手にdisconnectされるようにはなってたはず。
と思ったけど、デストラクタから呼ぶとsignal関係のメンバ自体が先に解放されてる可能性があるか…
>>698 1. true. デストラクタが呼ばれる回数は1回以下(0回のこともある)
2. true. GC管理外のメンバには触れる。
3. true.
4. false. 構造体でもnewされた場合は呼ばれない可能性がある。
5. おそらくtrue. 明確に規定されていないが、事実上(少なくともdmd)はtrue.
一応デストラクタで触れないのはGC管理下のメンバと言うことになっているので大丈夫だとは思う。
6. 参照カウンタではないので参照が減るという表現もおかしいが…
構造体AのデストラクタではCをいじることはできない。
(ただしaddRootなどでGCが自動で解放しないことを確実にした場合はこの限りではない。)
>>698 まずGCの動作原理を理解しろって
ttp://www.kmonos.net/alang/d/2.0/garbage.html 自分の理解では…
GCは、メモリの要る/要らないを、staticデータ/スタック/rootリスト からポインタをたどって調べる。
GCが動作したした時点で、たどる事の出来ないGC管理メモリは、全て破棄の対象になる。
(mallocなどのメモリは、GC管理メモリではないので対象外)
デストラクタの呼ばれる順序は、破棄対象であれば、親子順などの考慮は一切無く呼ばれる。(順序は予測不能)
つまり、デストラクタが呼ばれた時点で、メンバオブジェクトが既に破棄されている可能性がある。だから触ってはダメ。
メンバオブジェクトを、あらかじめGC.addRootでrootリストに登録しとけば、破棄されてないはずなので触れる。
不要になったら、GC.removeRootで登録解除 & 必要に応じてdelete。
GC.collect により任意の時点でGCを動作させる事が可能。(破棄対象のデストラクタが全部呼ばれる)
struct{ imt a; double b; long c; } のメンバは、一緒に破棄されるのか、それとも別々なのか。 多分一緒だと思うけど。
imtがクラスなら話が違うんじゃねぇの!?
あ、タイプミス。intね。
706 :
698 :2010/11/23(火) 00:20:34
>>700 >>701 ありがとうございます!
4.false -> あっ!構造体で new とか盲点
>>668 をnewで書き直したら(落ちなかったが)デストラクタよばれんかった。
クラス(設計)側でデストラクタの挙動を保障するのは無理?なのか?コメントの出番ですか?
6.参照カウンタ-> そう、それはまあ概念テキな表現上のアレです。
デストラクタって話題にのぼるたびにチェックしてるつもりなんだけど
結局「なんかメンドクセ!」という印象しか残らないんだよな。
708 :
デフォルトの名無しさん :2010/11/24(水) 21:06:44
ところでみんなは、D言語で何か作ってる? 俺は生態系シミュレータ(形だけ)作ってるけど。
Windowライブラリ的なものとかゲームの移植とかかな一応・・・
ゲームの移植とな? 何故移植?
でかいテキストデータの処理だな。 D最強説
ニッチな用途向けのGUIプログラム作ってるけど 将来の展望が真っ暗です(ライブラリ的な意味で
数値計算
>>710 ゲーム製作の練習に単純そうなゲームを選んで移植してます
テトリスとか1度作り方がわかるとすぐ作れちゃうから ボンブリスとかぷよぷよとかいいよね
.i'^.D Lノ \ ./ .\ ./ _ \ / l~l ̄ _``ー- 、 .\ \. l .l i' /ゝ_i"iヽ`ヽ / .\l,l ゝlノ~ゝl.ノ i/ ,l .l l `l゙l、 l l ,l` | l l l ,l ,l′ .l l l l おめーらもっと実用的なもの作れよ ,l ,l° ,l .,// ,l' l. ,l゙ l _/゙ ./ . /゚,l゙  ̄ _,,,ノ // ̄ ̄ ̄ _.,-' `` ゙̄/ ̄ ̄\ / / \ / (⌒つ ( "つ  ̄  ̄
>>717 それは個人レベルだとなかなか大変...
/ ̄ ̄\ (⌒ヽ ヽ⌒) |:::: ̄  ̄l . |::: | |:::: (● ) (●)| .|::: (_人__) | … |::: `⌒´ | |::: __ |_ |::: ノ__) |_) |::: | |::: | \___、⌒i___ノ⌒ヽ (_ノ ヽ_ノ
卑猥だな・・・ DというよりHだな・・・
え?
CMakeの使い方がよく分らなくて、QtDのインストールが出来ない・・・ 悪戦苦闘中。
やっと出来た・・・! 実は環境変数PATHの設定の仕方がよくわかって無かったというオチ。
QtDって一時バイナリ配布してたけどどうなったのかな
ubuntuでbudを使おうとして挫折した Dを使うときは「駄目なら駄目でもいいや」くらいの気合いの入れ方じゃ駄目だ
budに、実行すべきコマンドラインを出力する機能でもあればいいんだけどなあ
Dのビルドツール模様ってどうなってるんだろ
>>728 そういえば俺もまったく同じレスをこのスレでした覚えがある…
/|`ヽ ( .|__丿、 /  ̄ \ / \ . / _,,,---─--、_ \ < | | ,,--、 `ヽ、. / \.| | { Yミリ`Y´,,ヽ ヽ / \.| ゝしイ ({ミ:リ ∨ l .| | `l´| | | | .|. | | | ,' ,' .,'. ,' ,' | // ./ // ,' // / ,/ / ...//  ̄ ./ /ィ-─────イ `── /──\ / 〉 \ / ( ̄`ヽ、 /〃 ̄) `─-イ ゝ--'
ああああああああもう (int a){return f(a);}() のシンタックスシュガーが欲しいいい('A`)なんども出てくると可読性が悪すぎる f(a) @ int a みたいなさぁ、なんかこう、わかりやすくできないかなあ
可読性悪いか? 汚いからイヤってのじゃねーの
alias で出来んと?
735 :
デフォルトの名無しさん :2010/11/28(日) 13:17:09
すげえごめん、寝ぼけてたのか間違えた。 (int a){return{return f(a);};}(b) を f(a) @int a=b だったけど、よく考えなくてもシンタックスシュガーが必要なほど一般的に使われそうな文じゃないわな
何これ凄くややこしい
>>735 まだ寝ぼけてるでしょ?
aがf()に伝わってないぞ。
aは外側のdelegateのスコープ内にあるんじゃないの? 内側のクロージャでも使えるはず
最終的に得られる結果は、b = 42の場合 42を引数にf()を呼び出すクロージャになるわけだ ややこしさはともかく用途が気になる
そのスコープでのfと与えた引数をバインドさせたものを返す?
いやまてよ・・・ もうどうでもいいやww
普段こういうことやらないから頭混乱してるwww
よく考えたら
>>742 であってるわwqww
で、 writeln(a()); で13が出ると
f(a)を返すdelegateリテラルを作るdelegateリテラル ……何に使うのこれ?
>>751 普通に(int a){return{return f(a);};}をその場でコールせずに関数間で受け渡ししたりするんじゃね?
>>752 前スレに「bindはずっと前から壊れてるけど誰も直そうとしない」とあった
curryとかなかったっけ。 bindの修復はbind自体が不要だと思えたから投げた
757 :
754 :2010/11/29(月) 04:42:30
759 :
754 :2010/11/29(月) 05:42:00
>>764 てか、よく見たら・・・
(int a){return{return f(a) + b;};}(i)
意味変わってんじゃねえかwwwww
f(a)のままだと利用価値がわかんなかったんだよwwww f(a,b)ってことでここはひとつw
うん?よくわからないんだけど・・・
ちょっと危ない式だな、って思って。 俺もなんか良く分らなくなってきたw
俺は最初からさっぱり分からなかった
作って見て思ったけど、テンプレートが美しすぎるっていう。
だからテンプレートと破壊的変更が無い言語は駄目だというんだ
で、これって何がしたいわけ?
ある関数と特定の引数をセットで取り回せるのが嬉しいのかな? いちいち構造体作らなくていいし
これあれか。エクセルのセルみたいなテーブル作れるのか。 一ヵ所変更したらそれにつられて、ほかの値も自動的(呼び出し時に)に変わるんだな。 つどループまわせばいいだけなんだけど。
>>776 違うよ、クロージャを作るってだけだよ。
そういうことが聞きたかったの
分かって貰うのも一苦労じゃ
ideoneの広告でQtがNokiaに買収されていることを知った俺 DはGC周りを整理すればモバイル機器用のミドルウェアを書くには最適だと思うんだがなあ
どう整理するか…
ミドルウェアだったらCでよくね?
言語部分だけ貰いたくてGCイラン場合があるとおもうのですがどうにかする方法ありませんか?
GCはクロージャを作るときとかには必要なので GCだけ切ると言語も変なことになる 注意してGC経由でのアロケートを避けるしかないんじゃないかね
配列に ~= するだけでもちょくちょく動いてるしね。
ここは男らしくGC.disposeだ メモリ消費がガンガン増えていく? 男なら細けぇこと気にすんな!
IronDマダー
delegateやら配列(連想配列含む)やら用に、汎用free関数(static領域を使ってる時はなにもしない)を 用意してくれればいいんじゃなかろうか
で、おまえらはGC切れないので、本当に困ってるのか?
GC切れなくて困る人の選択肢にDは無いので、GC切れなくて困っている人はいない。
システムプログラミング言語じゃないよな アプリケーション向きだ GUIライブラリさえちゃんと使えればだけど
メモリ制約が厳しい環境に向いてないだけで、 十分システムプログラミング向けだと思うけど。
>>784 GCないC++0xにclosure入るんじゃなかった?
>>793 C++のラムダは、ローカル変数への参照を持った関数オブジェクトなんで、
一般的に言われるクロージャ(環境付き関数ポインタ)とはちょっと違う。
使うたびに別の型になるしね。
たぶん既存のコンパイラにC言語にない制御構造を追加するのがめんどくさいせい。
とりあえず、環境の寿命>クロージャの寿命であることが保障できればGCを使わなくて済むので、 クローじゃの代入による副作用を禁止するか、privateなものにのみ代入できればOKか。
いや、そんなんでいいなら、D1のころの実装(クロージャを関数の返値として持ち出せない)でOK
DelphiのクロージャはInterfaceで実装されてるな つまりは参照カウント出来ればいいだけなんだけど
ゲーム作ろうぜ!まずはシューティングから ↓どうぞどうぞ
ゲームに使えるライブラリが必要だ
800 :
デフォルトの名無しさん :2010/12/01(水) 02:11:18
あったような
というかDでSTGもどっかで見たような
Dを使いながら自分でメモリ管理したい場合はどうするのが普通ですか?
cのmallocを使う
mallocを使う前提で便利なライブラリがあれば… ことあるごとにGC動くからどうせダメか
基本GC.disableでかなり頻繁にGC.collectするのってアリかな?
>>805 メモリ確保と解放や、動的配列の長さ変更を頻繁にするなら。
struct std.container.Array(T) if (!is(T : const(bool))); メモリ制御を deterministicにした配列型です。配列のために割り当てられたメモリは、不要になると直ちに解放されます。 ガベージコレクションに頼ることはありません。Array は malloc と free で独自のメモリ管理を行います。
Dであいふぉんとかあんどろいどとかのアプリ作れるん酢かね?
もちろん
すみません、MySQLドライバなんですが、 -O付きでビルドすると強制終了してしまって困ってます。 -O無し(release、inlineはおk)だと動きます。 何か解決策で思い当たるふしがあれば教えていただけないでしょうか? また、ソースからpragmaか何かを使用してコンパイラオプションを変更する方法はないでしょうか?
思い当たるふし? 俺もdmdの-Oとか-inlineとかには散々苦しめられましたよ… 使わないことで解決した
でも最適化しなかったらDじゃなくていいじゃんってのが加速するよね
814 :
811 :2010/12/01(水) 20:01:16
(^p^)あうあうあー ・・・と、今c++の方と比較したら構造体のサイズが違うのを見つけました。 まだ何とかなるかもしれないのでがんがります。
アラインメント調整だな
リンケージの違いとか中途半端に発覚するから困るよな
でかい配列を確保すると中身を全部調べるからGCにすごく時間がかかるらしいな…
リンケージが違うと有無を言わさず落ちて原因解明に困ったわ
819 :
811 :2010/12/02(木) 11:36:03
動いた! ご迷惑おかけしました。 昔は宣言と定義が一緒だったのかな・・? ↓ alias st_mysql* master; alias取ったら構造体のサイズが一致して-Oでも動くようになりました。
C#のList<T>みたいに使い勝手のいいコンテナないかな(Public Domainで)
コンテナライブラリはdcollections一択じゃないの。 ライセンスは2.0ならBoost Licenseだった。1.0はBSD
配列最強じゃなイカ
後はsetだけあれば万事おk
voidな連想配列って使えなかったっけ?>set
配列、set、map、リストがあればええんちゃうの
voidか盲点
std,containerではだめなん?
そういえばこれないかなあ list.remove(obj);
immutable int i; と、 immutable(int) i; って、違うものだったんだね。(突然)
どう違うのかkwsk
>>830 immutable int i;
は、記憶域クラス。
immutable(int) i;
は、データ型。
今、例作ってるから待ってて。
と、思って例を作ってる最中にだんだん良く分らなくなってきた。
えーと、また勘違いで物言ってしまったw immutable int i; と、 immutable(int) i; は意味的には同じですw immutable int f(){} と、 immutable(int) f(){} は、完全に別物だけど。
const const(T) f() {} とかわけわかんないことになるよな
>>834 そこらへんの仕様変わらないかな?
すんごくまぎらわしい。
836 :
デフォルトの名無しさん :2010/12/04(土) 22:41:06
>834は const(T) f() const{} って書けるからいいや
>>836 それはそうだけどさ、
const int* f() {}
って、書いてあったら、
本来はどっちの意味で書かれているのか、見ただけじゃ分らないじゃん。
>>836 某日本人コミッタは後置きとか統一が取れなくなるから廃止するべきじゃね?って言ってるな
でも後置きすると結構すっきりするから俺は好きだ
気づいたらこんなの出来てました。
pure nothrow const const(int) delegate() pure nothrow f() { return delegate const(int)() pure nothrow { return i; }; }
一応合法ですよ。
http://ideone.com/mYR2B
synchronizedも入れてやってくれ
>>837 それはint* f() const {}じゃないの?
型にconstを付けたいなら()が出てくるでしょ
>>843 もしかしたら間違えて書いてるかも? という話。
たまたま覗いてみたんだがstd.fileのgetcwdとかlistdirとかシステムロケールのまま返してるな 誰か、直すか9x系は切り捨てるかしといてくれ
sharedとsynchronizedの使い方がわけわからん・・
sharedは共有ロック、読取専用にする synchronizedは占有ロック、書き込みもする為にに一つのスレッドで独占する
>>847 二つとも間違ってるって酷い・・・・
>>846 sharedは、データ型修飾(または記憶域クラス)のキーワードで、スレッド間共有をする為の物。
D2では、グローバル変数やstatic変数はTLS(スレッドローカルストレージ)で、
個別のスレッドごとに、実態が一つずつ用意されるけど、
sharedと付けた変数は、プログラム中で実態が一つだけ用意されて、
全てのスレッド間で、その一つの実態を共有するようになる。
synchronizedは、ブロック文と記憶域クラスのキーワードで、同時実行制御をする為の物。
同じ文を異なるスレッド間で同時に実行しないようにする。
マルチスレッドプログラミングを学べばすぐに使い方がわかると思う。
記憶域クラスのsynchronizedを、変数に付けるとどうなるのかは、ドキュメントに書いてないから知らない。
どちらもスレッド機能を使わないなら、いらない物だ。
ん?よく見たら
>>847 のsynchronizedの説明は合ってるかな・・・?
間違ってるなんて言ってすまそ。
>>846 sharedとsynchronizedの比較というところから想像するに、クラスの属性か、メンバ関数の属性に関する質問かな?
だとすると、
>>848 の回答も、合っているけど焦点がちょっとずれている。
クラスとかの属性としてsharedを指定すると、メンバ変数・メンバ関数すべての属性にsharedがつく。
また、sharedクラスは複数のスレッドから参照/更新するために利用されるというドキュメント的な意味もある。
クラスの属性としてsynchronizedを指定すると、sharedクラスに加え、メンバ関数が
synchronizedメンバ関数になる。
sharedメンバ関数は排他処理の管理を独自で行うときに使用するもので、ロックフリーとか
細かくクリティカルセクションを切りたい時に使ったりする。
あとsharedメンバ関数からは、shared型のメンバ変数しか参照/更新できない。
これにもドキュメント的な意味がある。
synchronizedメンバ関数は、sharedメンバ関数に加え、関数に入った瞬間に
クラスインスタンスでクリティカルセクションを作って排他する効果がつく。
ちなみにsharedのあたりはアンドキュメントなので、ウォルター氏とかアンドレイ氏の
スライドとか読まないとわからなかったりする。
長文すみませんでした。
sharedとsynchronizedがゲシュタルト崩壊
ドキュメント的ってなんやねん。
self-documentingってやつ?
自己文書化ってやつじゃないの
いや、繋がってるか? どっちにしても違和感あるけど。 クラスにsharedと付いてても、クラスの用途はあんまりわからんし。
ありがとう sharedとsynchronized難しいな
できるだけDのスタイルガイドに従おうと思ってるんだけど、命名規約に書いてある 「privateメンバ変数以外では、アンダースコア '_' で始まる名前は使用しません」 は、「privateメンバ変数はアンダースコアで始まる名前にする」、と解釈していいのか?
普通に読むと、privateメンバ変数のみ'_'で始まっていいよだと思うけど 俺は末尾に'_'派
C++だと頭につけちゃいけなかったから俺も末尾派なんだけど、 わざわざ「始まっていいよ」って許可出されるとちょっと深読みしてしまう。
_ _ r' lメ、 / ̄´ \ . /____ \ . < Y l r‐, r‐,\ / \! l ビノ_ヒ'ノ、 Y l l ! !l l . ! ! l l ! .! l l l !ノ ! . l l ∠-‐´_ . ;.' l,ノ――_二- ´  ̄ ̄/ \ _\ /_ `ー-' ゝ--'
仕事でガリガリ生CやってるとDが神言語に見えてくる 今時Windowsの特に速度も要しないシステムでC言語って… 第一今のCには破壊的変更が無いしなぁ
>破壊的変更 まてそれは毒されてる
objectモジュールを見ていて思ったこと。 デフォルトのtraceHandlerって、いつ実装されるんだろ?
と、思って調べてたらcore.runtimeに発見。 でも、なんでデフォルトで機能させてないんだろう?
なにするもの?stack trace?
>>866 かもしれないし、違う方法のトレースかもしれない。
でも、外郭だけは実装されてるんだよねえ。(コード見た限りだと、Windowsだけ非対応なのかもしれないがw)
ちょっと前に話題になった、ユニットテストを必ず全実行するコードも、外郭だけ実装されてたな。
次のバージョンは、いつくるのかな?
unittestを全部実行するのはもう動いてなかった?trunkだからかな?
windowsでのstack traceはわかる人がいないからできてない、みたいな話があったような
870 :
デフォルトの名無しさん :2010/12/11(土) 04:50:16
int型の数値を文字列に変換する方法が分からんですorz
import std.conv; int a; string s=to!string(a);
>>871 サンクス!ベリーサンクス!一晩中悩んでたのが嘘みたいだorz
!の使い方が見慣れなくてポカーンだけど、頑張ってググってみる。
それにしても、前途険しいな・・・・・・
to!(string)とto!stringは同じなのでね。 パラメータが一個なら括弧を略せるよ。
オーバーロードみたいなもんだ
いつの間にかドキュメントにtoImplの群れが… どういうことなの
>>874 こう使うんだよ
auto 澪 = new けいおん!ぽろりもあるよ;
>>874 > template t(T){
> f(T v){...}
> }
↑これはDのテンプレートの宣言。
使う時は、
> t!(int);
のように、!カッコに型を書く。
すると、一番上のテンプレートの宣言は、
> template t(int){
> f(int v){...}
> }
と言う風に、Tの部分が、!カッコの型に置き換えされる。
他の型を指定した場合は、
> t!(char[]);
他の型を指定した時とは別に置き変えがされる。
> template t(char[]){
> f(char[] v){...}
> }
>>877 それは例として適切ではないな。
alias けいおん!ぽろりもあるよ 澪;
が、適切。
>>880 なんでそうなってるだろうね?
まあ、近いうちに調整入るのかもしれないけど。
bluetoothAPIs.h やもろもろの Bluetooth 関連のヘッダや.libファイルを D用に準備して、bthprops.lib をリンクして実行してみたんだけど、 実行時に bthprops.dll が無い、と言われてエラーになってしまう。 調べてみたら bthprops.cpl があって、これが実質の dll 的な ものらしいんだけど、どうしたものか・・・。 bthprops.cpl をコピーしたものを bthprops.dll と言う名前にして system32 フォルダに置いておくと大丈夫なんだけど。 coffimplib で .lib を変換したときに、所望の関数は .cpl にある、 という情報が抜け落ちてる感じ・・・?
あ、bthprops.cpl に対して GetProcAddress すればいけそうかな・・・。
std.container の Array に bool full() とか bool isFull() みたいなの欲しいな・・・
phobosのtrunkを DFLAGS=-unittest -d でビルドすると Error: out of memory って言って落ちるんだが? DFLAGS=-unittest -d -g にしたらdmdがクラッシュするし どうなってんだ
* * *クラッシュ版でク〜+ n ∧_∧ n + (ヨ(* ´∀`)E) Y Y *
http://erdani.com/tdpl/2010-12-08-ACCU.pdf * Associative arrays were built in, now library
* Built-in complex types are being replaced by library types
* Built-in arrays are being replaced by library types
最後のはなんかこう、Luaのを初めて見たときに近い衝撃を感じる。
しかしメモリ管理に合わせて配列の実装を言語上で選べるってのは魅力的かもしれない。
そういえば Built-in の複素数って記述の美しさがウリみたいに 書いてあったけど、opUnary の "i" とかでライブラリでも実現できるのかね?
std.container の Array の capacity に const が付いてない。。。
それ以前に hasElaborateDestructor というのがどこにも定義されてないぞ・・・。 std.container はまだ使えないのか。
>>891 いや、Built-in の優位性を主張(Dの複素数型 vs C++のstd::complex)
していたのにそれを撤回するってことは、妥協的にそれを捨てざるを得なかったのか、
それともライブラリ化しても表現力や効率性を減らさずにいけることに
なってきたからなのか。。。
んで opUnary って何だか自由に演算子を定義できそうに見えたので、
i という単項演算子でも定義すれば複素数をライブラリ化できたりするのかなぁと。
opUnary も完璧に理解してないので妄想に近い感じです。。。
>>892 「Dの複素数型 vs C++のstd::complex」の論点は、
一つ目は複素数型だけでなく虚数型単体も用意しろ、
虚数を0+niのペアとして与えると余計な計算や余計な精度落ちが増える、ということ。
C++でもimaginary型を適切に実装すればライブラリ化できる、と書いている。
テンプレートでimaginary(T)型を定義し、
Complex(T)との関係を定義し、
alias imaginary!(double) idouble;
してやれば、あとは接尾辞iの定義をすれば組み込み型の利点を損なうことなくライブラリ化完了。
D言語らしく理論的にはすばらしい
単項演算子d,e,h,l,o,r,wを定義して helloworld;
やめろ そんなこと言ってたらウォルたんが何とかして実装しちまうだろうが
そう言いながらも影ながら悦んでるんじゃないのか
D2 で遊べるようにして最初に感動したのが、 タイプミスを、グーグルさんよろしく、もしかしてこれ?みたいな コンパイルエラー出してくれたこと。 そこから、既存の識別子に何かくっついてるのくらいは 判定できるんじゃないかと思ったので接尾辞くらいできそうだよね。 そして些細なタイポが有効なコードとみなされて、めくるめく魅惑の バグ地獄へ誘ってくれるんだろう・・・。
druntimeのwin32.makが unittest : $(SRCS) $(DRUNTIME) src\unittest.d $(DMD) $(UDFLAGS) -L/co -unittest src\unittest.d $(SRCS) $(DRUNTIME) -debuglib=$(DRUNTIME_BASE) -defaultlib=$(DRUNTIME_BASE) ってなってるとビルド中にdruntime.libが見つからないみたいなエラーが出てるので $(DMD) $(UDFLAGS) -L/co -unittest src\unittest.d $(SRCS) $(DRUNTIME) -debuglib=$(DRUNTIME) -defaultlib=$(DRUNTIME) にして出なくしたけどこんなところ間違えてるわけないよねと疑心暗鬼
Dに限ってあらゆる箇所で疑心暗鬼になる必要があるから疑心暗鬼にならなくてよろしい
疑心暗鬼になってたらD使う意味ない罠 Cで充分
Complex(Complex(T))で四元数型が出来るな 胸が熱くなるな
fibaerをcallするとき、引数を渡すことはできないのでしょうか?
できない。自分で一枚ラップするしかないと思う。
すみません。構造体のコンストラクタはどう使うのでしょう? 一応下記でコンパイルは通るんですが、呼ばれんとです。 struct hoge{ this(this) { // なんたら } }
this(this)はコンストラクタじゃない this(SOME_TUPLE)がコンストラクタ this(int a)とかthis(string s)とか ただしthis()はダメ
ぐぬぬ。
初期化が複雑なモノは素直にクラスにするのがいいのかな。
>>906 さんくす。
複雑ってのは複数フェーズ必要っていう意味? それともthis(ここがたくさん)という意味? どっちにしてもクラスか構造体かを決めるものではないような
struct hoge { Area[AreaID] allArea; Unit[UnitID] allUnit; static Area[AreaID] initAllArea(); } な感じでして、hogeを持つクラスの方に初期化処理を書きたくないなーとか思ったのです。 今考え直すと構造体にする意味もないなーと。。。 スミマセン。
Dも型名と同じプロパティ名付けられるようにならないかな @property Size Size(){return this._size;} でも構文解析があいまいになるからやってくれないだろうな
911 :
デフォルトの名無しさん :2010/12/17(金) 03:38:24
ちげーや 小文字からだ☆
むしろプロパティの実体のときに困る
>>910 で、あちこちで型名なんだかプロパティ名なんだか分からない物が出てくるわけですね。
C#にalias thisとmixinがなくて憤死しそうになる
2.051はまだか…
そろそろ本気でWindowsアプリ用クラスライブラリ整えようか
来年になったら本気出す
>>918 今日は12月19日(日)ってことは、来週末には本気出すんですね?
再来週じゃないんですか?
きっと次のバージョンは、クリスマスプレゼントにとってあるんだよ!
D2.0は次のクリスマスにな、が合い言葉になるんですか?
そしてクリスマスから冬休みになるんですね。
だから2009年の11月に仕様が固まるって言ってんだろ
テンプレートクラスで受け取るクラスをあるクラスの派生クラスに限定する方法ってあります? if(typeof)だと派生クラスも許容しない・・
if(is(T : C))とか?
テンプレートで受けた関数を、関数名のstringに変換する方法はありますか? std.convやtypeidはダメみたいで。 void hoge() { } template Hoge(func...) { // ここで"hoge"を取りたい。引数や戻り値も必要なのでtemplateにしてます。 } Hoge!(hoge)
template Hoge(alias F) { enum Hoge = F.stringof; }
>>930 ありがとうございます。
例が悪かったんですが、引数有りだとどうなるでしょうか?
お、ParameterStorageClassTupleと組み合わせたら行けました。 ありがとうございました! alias ParameterStorageClassTuple!(F) pstc; static if(pstc.length > 0 ) Enum Hoge = F(pstc).stringof; else Enum Hoge = F.stringof;
Dが破壊的変更しなくなったら俺は明日からどう生きていけば…
と言うかバグ多いな
バグ修正重視に方針転換したのな で、偉大なるstd.datetime様は見なかった事にすると
datetimeどこいった
ねえねえ、 public { ... import hoge; ... } と public import hoge; って別物だよね? なんか他人のそういうコード見つけちゃって勘違いしてるのがどっちかわからないんだけど
そのくらい試せよと思ってやってみたら同じだった 違ったら紛らわしいからこのままでいいと思うよ
public importってそれで一つの予約語なんだっけ? static thisとかはそのはずだけど
構造体かどうか判定する方法はズバリ ↓
ズバリ
正解はTwitterで!
あれ?abc_じゃなくて_abcがメンバなのか?
今回の目玉は-m64と、 datetimeとbase64のreplaceか
>>941 is ( Type == struct );
あぶねぇあぶねぇ、エラー3個だけだったぜ
>>948 くそ・・・! 俺なんか0個で土俵にすら上がれなかった・・・!
・・・精進します。
ちなみに順位をつけると コンパイルエラー < コンパイラクラッシュ < 実行時クラッシュ ってな感じ?
一瞬実行時クラッシュの順位がなんでそんなに高いんだと思ったが コンパイラが丁寧に罠を仕込んでくれるアレですね
たまにis式が全能に見える
wxDってD2に対応してないのか... →じゃあwxWidgetをC++から呼び出せばいいんじゃね? そんで、それを独自にD2から呼び出せばいいんじゃね? →あれ?これwxDとやってること同じじゃね? →つーか、DのC++へのインターフェイスがしっかりしてればこんなに苦労しなくてもいいんじゃね? →さっさと対応しろやゴルァ!!
D2対応してたよ 昔は
俺はD言語とクリスマスを過ごすわ
あしたからほんきだす。
そろそろ本気になるのか
おれはほんきだぞ。いいのか。
おまえらが本気になったら俺も本気になる
行き止まり感どうにかならんの
破壊的変更が無くなるのは良いことじゃないか 仕様が固まれば普及するよ
たしかに仕様がいつまでも固まらないのは嫌だな
D3期待sage
D2の仕様が固まっても、D使いが食いつくのは破壊的変更の繰り返されるD3になるんだろうな 現状のD1とD2の関係みたいに
つーか現状でも1.0使ってる奴がまだいる、みたいなことになるから 正直なとこ安定バージョンとか作らないで欲しいくらいだ。
本当はD2使いたいけどライブラリが… あまつさえtangoとか死んでも使いたくないけどライブラリが…
version(DMD2xxx) { ... } version(DMD2xxy) { ... }
2.051のswitchってなんか変わった? ↓"A"が出力されるのを期待したんだけど"D"が出力されてる auto hoge="aaa"w; switch(hoge) { case "aaa": writeln("A");break; case "bbb": writeln("B");break; case "ccc": writeln("C");break; default: writeln("D"); }
2.050までだとUTF8文字列とUTF16文字列の比較って一致するの?
972 :
970 :2010/12/26(日) 23:47:38
>>971 意識してなかったけど一致しなかったはず。
ただswitchって型推論で
switch(T) {
case T:
...
}
になると認識してたんだけど勘違いなのかな。
auto hoge="aaa"w;
switch(hoge) {
case "aaa"w:
writeln("A");break;
case "bbb"w:
writeln("B");break;
case "ccc"w:
writeln("C");break;
default:
writeln("D");
}
wつけても動かんのはわけわからん。
trunkではちゃんと動いてるよ? >dmd -run a Max # of fixups = 29 1 >type a.d import std.stdio; void main() { auto s = "hoge"w; switch (s) { case "hoge"w: writeln("1"); break; default: writeln("0"); } }
すみません、オーバーロードした関数をテンプレートへ明示的に渡す方法はどうやるのでしょう? c++だとキャストでいけたんですが。。。 class Test { int x; int getX() { return x; } int getX(int mx) { return mx+x; } } void func(F...)(){ // 関数名や引数を受けていろいろと } void main() { func!(Test.getX)(); // ←Test.getX() でインスタンス化される func!(cast(int function(int))&Test.getX); // ←コンパイルエラー int function(int) f = &Test.getX; func!(f)(); // ←理想はコレに近いが関数名"f"が渡されてしまう }
976 :
975 :2010/12/28(火) 10:56:37
>>975 まず、functionじゃなくて、delegateじゃないだろうか?
次に、テンプレートのインスタンス化の時に、!()には変数の値は渡せないぜ?
(コンパイル時に決まる、整数型・浮動小数点型・文字列型は除く)
もし値渡しをやるなら、テンプレートの宣言は、
void func(F...)(F f) もしくは void func(alias F...)()
と、するべき。(後者は厳密には値渡しじゃないが)
今回は後者にすれば解決?
978 :
977 :2010/12/28(火) 12:24:01
あれ・・・ タプルとaliasは同時に宣言できないのかな・・・? まあ、いいや。
979 :
977 :2010/12/28(火) 13:37:33
>>977 遅くなってスミマセン。
細かいことを説明すると、Luaの関数登録を自動でやろうとしてます。
luabindに近いことをやりたいと。
他人様のブログですが、こんな感じです。
http://d.hatena.ne.jp/scior/20100824/1282660955 テンプレートの部分は本来は下記のようになってまして、func内では関数の自動生成をさせてます。
template regist(T, F...) {
string func() {
}
mixin(func);
void regist(T t ) {
}
}
Fには様々な関数を突っ込みますので、alias Fではコンパイルエラーになりました。
delegateを受ける形は上記のとおり関数生成の過程でNG。
delegateかfunctionかは別段不要なので、とりあえずでfunctionにしています。
ともあれc++と同じ指定ができない部分についてどうしたものかと。。。
981 :
デフォルトの名無しさん :2010/12/28(火) 14:59:20
traitsにFieldTypeTupleのように型タプルを取り出すのではなくフィールドのシンボル一覧を取り出すようなものはありますか?
これ? __traits(allMembers, T)
983 :
デフォルトの名無しさん :2010/12/28(火) 16:17:50
>>982 自分が定義したクラスのメンバ関数等を除くフィールドのみを取得したいのです。
allMembersだとメンバ関数やコンストラクタ等、余計なのが取れてしまって具合が悪いんですよね。
984 :
977 :2010/12/28(火) 17:06:29
>>980 まさかの難題。
ウォルたんに聞けば一発なんだろうけどなー。英語出来ないしなー。
もう少し調べる。
985 :
977 :2010/12/28(火) 17:25:36
986 :
977 :2010/12/28(火) 17:40:07
dlua死んでると思ったらluadってのが活発になってる。 これだからDはやめられんぜ。
988 :
977 :2010/12/28(火) 17:57:14
989 :
980 :2010/12/28(火) 18:09:45
すみません、大掃除で帰宅後確認しますです。助力感謝!
>>986 これは関数情報が入ってる構造体(thisと関数が入ってる)のアドレスじゃないかな
f.funcptrに関数そのもののアドレスがある
このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所
Dが人類の枠を超えてる事なんて周知の事実だと思ってた
ピロートーク
996 :
977 :2010/12/28(火) 20:57:24
ごめんスレ間違えた
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。