D言語 Part25

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
プログラミング言語 D (D Programming Language) について語るスレッドです。

■前スレ
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)
2デフォルトの名無しさん:2010/08/15(日) 08:01:30
3デフォルトの名無しさん:2010/08/15(日) 08:03:41
Part24がレス数981のまま過去ログ入りしていたようなので→http://hibari.2ch.net/tech/kako/o1264/subject.txt
立ててみました
4デフォルトの名無しさん:2010/08/15(日) 08:13:41
いちおつですよ
5デフォルトの名無しさん:2010/08/15(日) 14:16:55
おお、2年ぶりに 「D言語」 という単語を見たわー。
まだ生きてたかー、あれから状況は良くなったんかな?
6デフォルトの名無しさん:2010/08/15(日) 14:43:08
>>5
今年の5月にD2の安定版が出る予定。今4月137日だからあと少しだな。
7デフォルトの名無しさん:2010/08/16(月) 18:25:53
WalterBright
#d_lang Got Phobos' object.d to compile in 64 bit mode. On to the rest of Phobos.
8デフォルトの名無しさん:2010/08/16(月) 22:52:54
D言語でWin32APIやSDLのThreadを使って大丈夫でしょうか
GCまわりとか
9デフォルトの名無しさん:2010/08/17(火) 01:34:35
>>1 乙!

>>8
「メッセージをポストするだけ」とかなら他のでもかまわないだろうが、
そうでないなら標準ライブラリのcore.threadを使うのが無難なんじゃないだろうか。
10デフォルトの名無しさん:2010/08/17(火) 22:55:58
>>7
あと一息ってことでしょうか
もうすぐ私もD言語を使えるってことでしょうか
11デフォルトの名無しさん:2010/08/17(火) 22:58:28
俺D3.0が出たらD2.0はじめるんだ…
12デフォルトの名無しさん:2010/08/18(水) 01:44:28
現状って64bitじゃ全く起動できないの?
13デフォルトの名無しさん:2010/08/18(水) 02:15:12
>>12
x64Vistaだがコンパイラもコンパイルしたソフトも(WoW64上で)普通に走ってる。
64bitモードのバイナリ吐けるのがそろそろ出るとか出ないとか。
てか、DMCって64bit対応してないんじゃ?その辺どうなるんだろう
14デフォルトの名無しさん:2010/08/19(木) 00:20:06
関数の名前の最後に@NN(←引数のサイズ?)が付かなくて、かつ呼び出し規約がstdcallな外部関数はどうやって定義すればいいんでしょうか?
extern(System)とすると勝手に@NNが付くし、extern(C)だと名前は合うから呼び出せるけどスタックが崩れてすぐ落ちちゃうんですけど
15デフォルトの名無しさん:2010/08/19(木) 01:03:23
FreePascalのようなそういうのを呼べてOMFも吐けるコンパイラで一枚挟むか、
インラインアセンブラか、いっそエクスポートしてGetProcAddressか、だろうなあ……
16デフォルトの名無しさん:2010/08/19(木) 01:05:58
ああ定義するほうか、ごめん。
.dllを作るなら.defファイル書けばいけるだろうけど、静的ライブラリは無理だろうなあ……

っていうかどういう用途だ?
既存のライブラリと合わせるためなら、ライブラリの方をdmcでコンパイルしなおして
@付きを要求するようにしちゃえ
17デフォルトの名無しさん: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_; // 変換
 :
 :

こんな感じでとりあえずは思ったように動いてる感じです。
なんかどっか間違ってそうでこわいけど
18デフォルトの名無しさん:2010/08/19(木) 02:13:06
確かに怖いなあ……。
一応、n += T.sizeof; の部分は、4単位に切り上げたほうがいいとは思うけど
それ以前に最適化次第でどうにでも変になってしまいそうだ……。

というか.dllの関数を呼ぶだけなら、それこそGetProcAddressでいいんじゃない?
19デフォルトの名無しさん:2010/08/19(木) 02:33:53
DLLだったら、.libファイルを静的リンクすればいいと思うのだけど…
pragma(lib, "d3d9");
みたいにして。
あるいは動的リンク(GetProcAddress)だろうね。
2017:2010/08/19(木) 02:36:20
>GetProcAddress
よく考えたら確かにそうですね
なんかテクニカルそうなことやってみたい盛りだったんでしょうかね……
普通にそっちでやりますね、スレ汚してすみませんでした
21デフォルトの名無しさん:2010/08/19(木) 02:47:17
>>19
.dllの供給元から提供されてる.libを使ったら@が付いてなかった、という話だと思われる。
自分で.def書いて.lib作り直せばいけるだろうけど、.dllの更新が頻繁だとめんどくさいしなー。
22デフォルトの名無しさん:2010/08/20(金) 01:18:00
すみません、長いですが良ければ相談に乗っていただけると助かります。

Linux上で動くCUIサーバアプリケーションの開発を予定しています。
スレッド、ソケット、その他多少IO系が使えれば、残りはほぼ実装であることや、
自社に特にc++のリソースが無くゼロベースからの開発であることから、
D言語の方がリファレンスや参考サイトを見る限り、
開発が素早く完了しそうな感触を得たため、D言語の開発環境を構築しています。

ところがどっこいLinux上に環境を作るのにかなり手こずっている状況です。

ひとまず要件としてこんな感じです。
・開発コストを抑えること。
・Eclipse等のIDEの利用(CUIでデバッグは考えたくないです)
・ネイティブコードが吐けること。
・gc以外のメモリ管理も可能なこと。
・DBとコルーチンがあれば尚可。

続きます
2322: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がアク禁なので、返事は早くても明日になると思います。
24デフォルトの名無しさん:2010/08/20(金) 02:20:54
C++とboostでおk
25デフォルトの名無しさん:2010/08/20(金) 02:29:17
もうちょっと書こう.
LinuxでIDEを使ってD言語やってる人はほとんどいないんじゃなかろうか.
何にせよIDEはおもちゃみたいなのしか聞かないね.
2.xのPhobosが特に不安定な時期だからここの変更をカバーできるように書いた方がいいと思う.
dsssは実質使われていない.
Tangoは最近もライセンスでいざこざがあるなどPhobosと同調しないからおすすめしない.
26デフォルトの名無しさん:2010/08/20(金) 03:35:01
IDEは諦めて、使いやすいテキストエディタを利用したほうが良い。emacsなんかで書いている人は多いように思う。
一応あるにはあるけど、CentOSで仕えるのってあったっけ。
GC以外のメモリ管理もおすすめできない。
どうしてもやりたいのであれば、mallocなどは使うことができるけど、慎重に使わないとGCに刺される。
DBはPhobosには無い。JsonもXmlも一応存在するが、あまり良いものではない。
コルーチンであれば、core.thraed.Fiberが利用可能。
ビルドツールは、専用のものを自分で適当に書いてしまうか(200行程度でそれなりに仕上がる)、make、Antを使ったほうがいい。
デバッグツールは、Descentからつかえるものの、Descent自体相当重いのでアテにしてはダメ。昔ながらのprintf(Dではwriteln)が一番強力に思う
27デフォルトの名無しさん:2010/08/20(金) 14:41:07
自社とか書いてるけど、仕事で2系を使うのか?チャレンジャーだなw
多分次のdmdのバージョンアップでそのサーバは動かなくなるw
28デフォルトの名無しさん:2010/08/20(金) 17:03:57
>>27
いつのdmdの話をしてるんだ…
2922:2010/08/21(土) 00:06:41
dionのアク禁余裕でした。

>>24-25
外部ライブラリの件、非常に参考になります。
同じ最新環境でガシガシ書いているのではないのですね。

>>26
IDEは…そこを何とか('A`)
エディタ+αとして使えれば十分なので、実行/デバッグを除けばDescentで事足り
てます。
実行/デバッグはアドバイス通りAntを書いてみたいと思います。

メモリ管理の件は、Javaのようにいつ回収されるかわからないような状況でなければ
問題ないというような意味でして、私の書き方が悪かったと思います。
D言語仕様で問題ないです。
その他、諸々とても参考になりました。

>>27
C++開発の総コスト < D2.x開発+D3.x対応・・・と信じたい。
30デフォルトの名無しさん:2010/08/21(土) 03:41:04
Dにはもともと契約や組み込みのassert、単体テストなどが備わっているし、
d2の最新版でスタックとレース表示も入ったらしいし、
実はデバッガが言語組み込みだと考えていいのではないかと思う
31デフォルトの名無しさん:2010/08/21(土) 03:49:40
それらの機能のパクリ元であるEiffelにもちゃんとデバッガは別にあるぞ
32デフォルトの名無しさん:2010/08/21(土) 12:53:37
JavaとかだとIDEの助けが無いと書くのは無理
PerformanceCounter pc = new PerformanceCounter();
とか書くだけでめまいがする
Dなら
auto pc = new PerformanceCounter;
と書けてライブラリも略名が多いからサポート無しで書くのが存外苦痛じゃなかったりする

結論から言うとC++0xでおk
33デフォルトの名無しさん:2010/08/21(土) 12:57:40
デバッガはddbg健在だよ
でもlinuxなら本体にスタックトレース入ったらしいからいらないかな

でもstd.socketが近いうちに差し替えられるかもしれない
34デフォルトの名無しさん:2010/08/21(土) 18:09:22
多分、D2を使い続けるうちは破壊的変更は最小限だと思う。
特にライブラリは、古いのを残して新しいのを追加する形で、なるべく新しいのを使う形になると思う。
D3になったら…覚悟したほうがいい。少なくともscope, typedefあたりは今のうちから排除していったほうがよさそう。
35デフォルトの名無しさん:2010/08/21(土) 19:32:02
えっscopeって無くなる感じなの?
36デフォルトの名無しさん:2010/08/21(土) 19:46:42
スコープガードはわからないけど、ストレージクラスの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();
こういう時、コンパイルエラーなしに実行できて、未定義動作起こすのが嫌らしい。
37デフォルトの名無しさん:2010/08/22(日) 23:51:47
今後はdsourceのphobosにがっつんがっつん入ってく感じな気がするんでもうTangoのことは忘れていいですか?
38デフォルトの名無しさん:2010/08/23(月) 19:36:20
Tango…って何?
39デフォルトの名無しさん:2010/08/23(月) 20:21:15
アルゼンチン人の魂
4022:2010/08/24(火) 20:08:52
久々にdion解除キターので近況報告。
ようやっとLinux+Eclipseからコンパイルが成功しました。
結局dmdを使用するmakefileを作成してEclipseのビルダーを置き換えし、
Ctrl+Bにてコンパイルできるようになりました。

単語補完も昔のPHPEclipse並の微妙感が良い感じです。

アドバイスいただいた方々、ありがとうございました。
あとはデバッガさえ動けば・・!
41デフォルトの名無しさん:2010/08/24(火) 21:51:37
根性だなぁ。おめ

linuxでD使ってないからよくわからんけど-gcオプションつけてgdbがいいのかな?
頑張ればEclipseから使えそうな気がしないでもない
4222:2010/08/25(水) 02:04:07
>>41
試しにDdgbをEclipseから選択してみたらWindowsでやれ的なエラーがw
ということでgdbしか選択肢が無さそうです。
とはいえDescentのメニューからgdbを選択できたので、
特に問題なくデバッグできました。

まだDの設計が理解できてないので、
レジスタ等の動きが正しいのかわかりませんが、
ステップ実行やメンバ変数のトレースは問題なく動きました。

これで勝つる!!
43デフォルトの名無しさん:2010/08/25(水) 07:28:35
$ cat test.d
void main() {
int[int] a = (int[int]).init;
a[1] = 2;
}

$ dmd -run test.d
object.Error: Integer Divide by Zero


やだ…なにこれ…
44デフォルトの名無しさん:2010/08/25(水) 20:17:16
void main() {
int[int] a;
assert(a == a.init);
}

Error: incompatible types for ((a) == (AssociativeArray(null))): 'int
[int]' and 'AssociativeArray!(int,int)'

やだ…なにこれ…
45デフォルトの名無しさん:2010/08/25(水) 21:15:29
>>22が色々問題なく動かしてるのを見て少し心配になったがその後の流れで安心した
DのDたるところは健在だな
46デフォルトの名無しさん:2010/08/25(水) 21:27:03
いや、D言語だったら大抵の場合問題なく動くだろ。
回避方法がすぐに見つからないバグも少ないし、何とかなる場合がほとんど。
47デフォルトの名無しさん:2010/08/25(水) 23:38:08
久々にDFL使ってみてるけどやっぱいいなぁこれ
他言語からの移植品に比べて格段にコードが短くなる
後もう少し機能が揃えば…
48デフォルトの名無しさん:2010/08/27(金) 01:31:42
dmd2.048のphobosにthread.dが無いのは何かの間違いでしょうか( ´Д`)?
49デフォルトの名無しさん:2010/08/27(金) 02:38:01
>>47
何が足りない?
50デフォルトの名無しさん:2010/08/27(金) 07:17:10
>>48
core.thread
51デフォルトの名無しさん:2010/08/27(金) 07:17:55
>>49
SpinnerだかSpinBoxだかNumericUpDownだかとレイアウトマネジャ
あとGraphics関連が弱い

どうせラップするだけだから自作してみようかと思ったら
SpinnerってWindowsAPIにないんだよな
なんだというんだ

>>48
src/druntime/import/core
にthread.diがあるよ
52デフォルトの名無しさん:2010/08/27(金) 17:48:25
Spinnerって何だ
UpDown(UPDOWN_CLASS=msctls_updown32)?
この手の名前はいろいろありすぎて困る
53デフォルトの名無しさん:2010/08/27(金) 19:35:36
ああUpDownっていうのか
ぐぐったら猫が出てきた。これこれ
ttp://homepage2.nifty.com/c_lang/sdk3/sdk_205.htm

AndroidではいわゆるコンボボックスがSpinnerという名前になってたりする
どういうことなの…
54デフォルトの名無しさん:2010/08/28(土) 00:24:07
Range(笑)

D3まだー?Range落ち着くまで来ないんかな
55デフォルトの名無しさん:2010/08/28(土) 01:53:36
64...bit....版..........は.....?
56デフォルトの名無しさん:2010/08/28(土) 05:38:48
fedora14にD言語がパッケージングされるっぽ
57デフォルトの名無しさん:2010/08/28(土) 06:02:19
>>56にソースのリンク書き忘れた
http://gihyo.jp/admin/clip/01/linux_dt/201008/25
58デフォルトの名無しさん:2010/08/28(土) 06:34:31
D1とD2で同じものコンパイルしたらD2のが2倍ファイルサイズでかかった
そういうもの?
59デフォルトの名無しさん:2010/08/28(土) 08:02:36
静的にリンクされまくるからそういうものだと思う。

DLL Hell に巻き込まれるよりはましかもしれない。
DLL にしても、最近は結局自分のディレクトリに入れておけという感じだしな。
60デフォルトの名無しさん:2010/08/28(土) 08:12:45
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)って、
ここのWikiだよね?
61デフォルトの名無しさん:2010/08/28(土) 08:21:01
>>56
正気かfedora
62デフォルトの名無しさん:2010/08/28(土) 09:27:11
1から2のDll使えたりしますか?
63デフォルトの名無しさん:2010/08/28(土) 09:29:18
extern(D)な関数は駄目だった気がする
64デフォルトの名無しさん:2010/08/28(土) 15:06:46
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'
65410◇hmqb6VZ0L :2010/08/28(土) 18:04:20
66デフォルトの名無しさん:2010/08/28(土) 18:52:21
あれ、インストーラとかあるんだ…
マジかよすげぇなまるでパッケージソフトみたいだ
67デフォルトの名無しさん:2010/08/29(日) 02:46:33
>>65
わざわざ新しいの作らんでも、dusersに移すのじゃあかんの?
PhobosとTangoの分裂みたいに情報や編集人が分散するのはちょっとなあと思う
68デフォルトの名無しさん:2010/08/29(日) 03:06:00
D言語のDはdistortedのD
69デフォルトの名無しさん:2010/08/29(日) 12:32:26
>>67
ん・・・ とりあえず記事がある程度仕上がったら考える。
70デフォルトの名無しさん:2010/08/29(日) 12:54:32
"文字列"   ← string
"文字列".dup ← char[]

これどういう意図があるんだろう
D1→D2時のdupの修正し忘れ?
71デフォルトの名無しさん:2010/08/29(日) 12:58:35
ああ、immutableはずすためなのか
連投すまん
72デフォルトの名無しさん:2010/08/29(日) 15:02:11
やっぱstringだけimmutable(char)[]って表示されないのずるい
73デフォルトの名無しさん:2010/08/31(火) 01:04:47
import std.stdio;
struct S{
//ubyte[65528] m;// OK
ubyte[65529] m;// Access Violation
}

void main()
{
writeln(S());
}

なんだこれ?
ちなみに一定数(環境依存)を超えるとStack Overflowってのもあった
74デフォルトの名無しさん:2010/08/31(火) 07:27:59
Sをもう少し小さな構造体にしても

void main() {S[100] s;}

とかやると実行時Stack Overflowになるねぇ
75デフォルトの名無しさん:2010/08/31(火) 11:07:54
ここじゃ動くようだけど。
http://codepad.org/IAL91LHa

つか逆に大きな配列だからと勝手にヒープ確保されたらたまらん。
7673:2010/08/31(火) 14:51:34
>>75
そこ__VERSION__ == 1026だが
あと俺が言いたかったのはwritelnに渡すと・・・ってことだったんだが流石に伝わらんかったか
77デフォルトの名無しさん:2010/08/31(火) 19:36:22
なんかstd.file.listdir()が重い
→DirEntryを初期化してる部分を削ると100倍くらい早くなる
→更新日時とかを入れるときに使ってるstd.date.FILETIME2d_time()が
  他の処理の100倍くらい時間を食ってるっぽい

std.dateが徹底的にタコということでよろしいか?
78デフォルトの名無しさん:2010/08/31(火) 21:22:55
いままさにstd.date消してstd.time入れようぜって動きがある。
YaoとJohnathanに期待。
http://lists.puremagic.com/pipermail/phobos/2010-August/002187.html
79デフォルトの名無しさん:2010/09/01(水) 02:21:40
dusers.jp重い...
80デフォルトの名無しさん:2010/09/01(水) 03:41:48
ウェブページ保存したい場合はどうしたらいいんでしょう?
1・2どっちでもいいです。
81デフォルトの名無しさん:2010/09/01(水) 22:02:26
普通にHTTP喋って取ってくればいいんじゃない?
82デフォルトの名無しさん:2010/09/02(木) 00:06:19
TcpSocketなかったっけ
83デフォルトの名無しさん:2010/09/02(木) 19:27:37
Socket作るときにTCPを選べるようになってる

ただしstd.socketは間もなく(ry
84デフォルトの名無しさん:2010/09/02(木) 19:42:39
GUIライブラリは必要だよなぁ…

unix界隈で遊んでるような人にとってはカスみたいなものかもしれんけど
Win使ってる一般人とかそういう人向けにアプリ書いてる人から見れば
GUIライブラリの無い言語 == 存在しない言語 だからなぁ
85デフォルトの名無しさん:2010/09/02(木) 21:12:49
DWTがあるんじゃなかったのか
86デフォルトの名無しさん:2010/09/02(木) 21:35:11
cursesは?
87デフォルトの名無しさん:2010/09/02(木) 22:55:22
DWTはD2で動かない、というかTangoでしか動かない時点で詰んでる
D2に移植する途中で死んだみたいだし
88デフォルトの名無しさん:2010/09/03(金) 08:40:32
そのD2版のDWTってどこにあります?
オレ引きとって続き書くよ?
89デフォルトの名無しさん:2010/09/03(金) 17:46:53
スレ違いかもしれないですが、Descentについて質問です。
こちら http://www.dsource.org/projects/descent/ を参考に
インストール、設定を済ませたと思うのですが、
参考動画のようなオーバーライドの補完等ができません。

以下のように戻り値を受ける形だと補完されるのですが、
int a = str ( まで入力してCtrl+Space)
strやstdのみの補完や、
クラスメンバの関数やオーバーライドの補完が全く機能していません。
(op〜関数はopまで打つと補完されますが、
 super.opで保管しても super.override void op〜・・・ となり使えません)

JDTやインクルードパスは問題ないと思うのですが、
どの辺を注意したら良いでしょうか?
90デフォルトの名無しさん:2010/09/03(金) 19:04:32
>>88
http://hg.dsource.org/projects/dwt2
これがDWT2のリポジトリ。
91デフォルトの名無しさん:2010/09/03(金) 19:47:12
Tangoはライブラリじゃないぞ。
D1+Tangoというプログラミング言語だ。
いやD1ですらない。
druntimeというお情けがいつまでもらえるかはわからん。
92デフォルトの名無しさん:2010/09/03(金) 20:01:04
>>88
torhusという死に体のDWTに唯一パッチを送り続けていた人がいて、
一月半くらい前にとうとうforkした
ttp://bitbucket.org/torhus/dwt2

でもその後音沙汰が無い
彼に強力してあげてください
93デフォルトの名無しさん:2010/09/03(金) 20:10:59
Qt の D 版みたいなのってないのかな
94デフォルトの名無しさん:2010/09/03(金) 21:58:17
モロbindingがあるよ
ttp://www.dsource.org/projects/qtd
95デフォルトの名無しさん:2010/09/04(土) 00:53:01
QtD requires the ”patched” dmd compiler.
Σ゚(゚Д)
96デフォルトの名無しさん:2010/09/04(土) 02:01:51
char* sからchar[] dに変換する方法って↓しかない?
auto d = new char[n];
for(int i = 0; i < n; i++)d[i] = s[i];
9788:2010/09/04(土) 02:05:31
>>90 >>92
ありがとう。
どこまでできるかわからんけどやってみるよ!

>>93
やっぱりそういう需要ってあるよね。
Dの適用領域からいってDWTみたいなのは必要だと思うんだ。
98デフォルトの名無しさん:2010/09/04(土) 02:31:55
>>96
>char* sからchar[] dに変換する方法って↓しかない?
>auto d = new char[n];
>for(int i = 0; i < n; i++)d[i] = s[i];
d[] = s[];ってできない?
99デフォルトの名無しさん:2010/09/04(土) 02:49:35
>>98
s[]は出来ないね
ポインタは配列として扱った時
長さ情報持ってないからスライス出来ないって事かな
100デフォルトの名無しさん:2010/09/04(土) 02:52:06
GUIにWindows以外の需要がどのくらいあるかがいまいち分からんところだな
101デフォルトの名無しさん:2010/09/04(土) 03:04:37
>>100
Macなら多少の需要はあるんじゃないかな?
Linuxはあまりないかもしれないけど、アプライアンスとかなら、あるいは。
102デフォルトの名無しさん:2010/09/04(土) 03:13:57
WindowsはW版とA版のAPIに対応しなきゃいけないのが辛い・・
103デフォルトの名無しさん:2010/09/04(土) 03:16:54
9xは捨てろよ。Wだけでいいよ。
104デフォルトの名無しさん:2010/09/04(土) 11:23:33
>>96
実は範囲を指定すればスライスできる
d = s[0 .. strlen(s)];
105デフォルトの名無しさん:2010/09/04(土) 11:25:39
>>100
ただOS自体の比率でWindowsとMacが圧倒的だからなぁ
PCでlinux使ってる人なんか1%もいないんじゃないの
106デフォルトの名無しさん:2010/09/04(土) 15:32:32
>>104
>>96
>実は範囲を指定すればスライスできる
>d = s[0 .. strlen(s)];
左辺をd[]にして並行処理できない?というのが目的ですた
107デフォルトの名無しさん:2010/09/04(土) 17:56:42
DでGUI作るとしたらどんなインターフェースがいいのかな
今のトレンド知らないけど

・継承してクラスの内側でイベント実装タイプ
・外側からdelegateでイベントリスナー追加みたいなタイプ

俺は前者が好きだなクラス内に共通のデータ置けるし
108デフォルトの名無しさん:2010/09/04(土) 17:58:51
DってRailsみたいなFWありますか?
109デフォルトの名無しさん:2010/09/04(土) 18:57:48
あるかもしれないけど死んでるか止まってる事は確信できる
110デフォルトの名無しさん:2010/09/04(土) 19:53:40
>>106
参照取るなら並列処理するまでもなくね?

…あれ?スライスって参照だよね?
111デフォルトの名無しさん:2010/09/05(日) 04:01:07
>>107
好みによるけど、後者かな。
今のOOPの流れ自体、継承より委譲だし。
JavaみたいにEventListener登録型もなくはないが
delegateを使えばコーディング量が劇的に減る。
エディタ派も嬉しいんじゃないかと。

ついでに聞いてみたいんだけど、LinuxでDって
どういう用途に使われることが多いのかな。
サーバー系の使い勝手がよいライブラリありますか?
112デフォルトの名無しさん:2010/09/05(日) 06:03:21
DFLだと両方やれるね
113デフォルトの名無しさん:2010/09/05(日) 12:48:02
delegateっつかクロージャ付き無名関数が使える言語だとそれが非常に便利だからなあ。
クラス標準の関数をデリゲートの呼び出しに充てておくとかすると並列に実装可能かな。

>>111
サーバ系で言うと、数値計算と文字列処理の組み合わせで、
バイオ系(bioengineering+bioinformatics)なんかは実はD最強ではないかと思う。
C#のdynamic型みたいなのも欲しいが、variantで実装可能かなあ。
114デフォルトの名無しさん:2010/09/05(日) 13:28:43
>>108
Tangoを使ってやろうってのはあったけど,コンセプトだけで死んでた気がする
まぁテンプレートライブラリもなければORMもなかったわけで…
11589: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が上がっていたので、明日あたりにこちらも試してみたいと思います。
116デフォルトの名無しさん:2010/09/08(水) 04:01:59
D1.0 dmdで、
下のソースがコンパイル通っちゃって、走らすと[2]って出力が出るんだが、
引数の配列の中身を変更させない関数定義ってできないの?

import std.stdio;

void main()
{
int[] a = [1];
inc(a);
writefln(a);
}

void inc(in int[] a) { a[] += 1; };
117デフォルトの名無しさん:2010/09/08(水) 07:24:32
動的配列は参照型だからな
incの冒頭辺りでa.dupでコピー作ればいい
118デフォルトの名無しさん:2010/09/08(水) 11:40:19
関数定義はできないってことになるが
119デフォルトの名無しさん:2010/09/08(水) 16:02:51
D言語にも対応、GNU Debugger 7.2リリース - SourceForge.JP Magazine : オープンソースの話題満載
http://sourceforge.jp/magazine/10/09/07/0436202

だってお
120デフォルトの名無しさん:2010/09/08(水) 17:09:59
D1ってimmutable無いんだっけ? あれ、違う?
121デフォルトの名無しさん:2010/09/08(水) 20:01:30
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; };
とかだとコンパイルエラー
123デフォルトの名無しさん:2010/09/09(木) 00:33:10
( ´д)ヒソ(´д`)ヒソ(д` )





     *      *
  *  バグです   +  
     n ∧_∧ n
 + (ヨ(* ´∀`)E)
      Y     Y    *
124デフォルトの名無しさん:2010/09/10(金) 20:02:08
import std.stdio;
void main() {
 string s = "a" "bc" "d";
 writeln(s);
}

abcd


これって仕様のどこに載ってるんだ?
125デフォルトの名無しさん:2010/09/10(金) 20:12:15
探してないけどCから引き継いだ仕様だから書いてないかもね
126デフォルトの名無しさん:2010/09/10(金) 20:41:15
>>124
http://www.kmonos.net/alang/d/2.0/lex.html
文字列リテラル の最後のところ
> 演算子~でつなげられているか、 あるいは単純に並べて書かれている文字列どうしは結合されます
> 以下は全て同じ意味です:
127デフォルトの名無しさん:2010/09/10(金) 21:17:41
>>126
確かに載ってるありがとう

switch (s) {
case "a", "b"
  "c", "d":
 ...
 break;
}

みたいなコード書いて5分くらい嵌った
128デフォルトの名無しさん:2010/09/14(火) 05:21:24
VisualDがutf-8で保存してくれない……。
129デフォルトの名無しさん:2010/09/14(火) 11:32:49
日本語が使えなくなるだけだと思えば許せる。
VisualDはVS2010のデバッガが使えるってだけで最高だけど、やっぱりインテリセンスがなぁ。
130デフォルトの名無しさん:2010/09/14(火) 17:42:21
ファイル→保存オプションの詳細設定でUTF-8に変えてくれる
デフォでUTF-8にして欲しいけどな
131デフォルトの名無しさん:2010/09/15(水) 00:58:23
簡単に解決できそうな気がするけど。問題として認識されてないんだろうなあ。
132デフォルトの名無しさん:2010/09/15(水) 01:00:25
いつものパターンか
133デフォルトの名無しさん:2010/09/16(木) 18:57:36
--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

(´・ω・`)
134デフォルトの名無しさん:2010/09/16(木) 19:34:10
誰もが通る道
135デフォルトの名無しさん:2010/09/16(木) 19:36:08
プログラムがなんか変な動きするから
まーたdmdのバグかと思って必死に調べたらコードのバグだった
たまにはそんなこともあるんだな…
136デフォルトの名無しさん:2010/09/16(木) 22:07:01
テンプレートじゃなくて、いつか導入されるらしいマクロを使ったら
>>133のコードは意図した動作にできるんだろうか
マクロだと呼び出し側のスコープで変数を評価するとかできるんだよね?
137デフォルトの名無しさん:2010/09/16(木) 23:44:53
文字列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 );
}
ってできるんだからねっ!!
139133:2010/09/17(金) 10:09:19
一応関数のデフォルト引数なら動いたので、そちらで実装したとです。

でもこう書いてあったもので・・・
http://www.kmonos.net/alang/d/2.0/template.html
>__FILE__ と __LINE__ は、 テンプレートがインスタンス化された場所のファイル名と行番号に展開されます。
140デフォルトの名無しさん:2010/09/17(金) 19:51:30
本当だ。英語版でもそうなってるな

dmdにはよくあること
141デフォルトの名無しさん:2010/09/17(金) 19:56:31
>>139
D1でコンパイルした可能性は?
142デフォルトの名無しさん:2010/09/17(金) 21:33:15
dmd 1.064 and 2.049 release
143デフォルトの名無しさん:2010/09/18(土) 11:18:07
trunk使ってるともうリリース関係ないな
144デフォルトの名無しさん:2010/09/18(土) 13:27:51
LGPLの、例えばSDLとかgtkDとかってimportして
実行モジュール作って公開した時点で
ソース公開の義務が発生しちゃうの?
145デフォルトの名無しさん:2010/09/18(土) 13:31:40
中身のDLLが別にあるんなら発生しないんじゃねぇの?
146デフォルトの名無しさん:2010/09/18(土) 13:50:38
本体はダイナミックリンクするとしてヘッダの(D翻訳の)ライセンス次第だな
ときどきヘッダ翻訳に際して元と違うライセンスを設定する奴もいるから注意な
147144:2010/09/18(土) 14:46:06
なるほどね
ただで使わせてもらっといてなんだけど
ライセンスって嫌だね・・
誰でも使えるようにするならPublicDomainに統一してほしい・・
148デフォルトの名無しさん:2010/09/18(土) 15:23:20
必要な関数のプロトタイプ宣言だけ自分で書いたらどうなるんだろ?
名前と戻り値と引数列に著作権は発生するのか
149デフォルトの名無しさん:2010/09/18(土) 17:22:09
インターフェースの仕様自体に著作権はないからおけ
ただしUNIX裁判よろしくオリジナルをコピーしてないという証明はめんどい
150デフォルトの名無しさん:2010/09/18(土) 18:13:05
それ証明する必要があるのはコピーしてるって主張する側じゃないの?
151デフォルトの名無しさん:2010/09/18(土) 20:46:21
その通りではあるんだが、現実には良い腕の弁護士を雇えたほうが勝つ……らしい。
Rubyなんかも、わざわざライセンス不明のパッチを避けて、
それを見たことがない人に直させてたりするね。
152デフォルトの名無しさん:2010/09/20(月) 04:10:08
>>147
日本でもPublic Domainが出来るようになったらいいのになぁと常々思う
153デフォルトの名無しさん:2010/09/20(月) 06:57:14
パブリックドメインって著作権捨ててるんだっけ?
154デフォルトの名無しさん:2010/09/20(月) 11:26:46
BSDL系でも不満はないけどなあ。〜を使わせていただきました、ぐらい書くのは当たり前じゃね?
日本では著作権放棄はできないけど、言い回しを工夫してCCとかNYSLみたいなのはあるね。
155デフォルトの名無しさん:2010/09/20(月) 13:17:59
要は著作権侵害と言われるリスクをゼロにできりゃいいんだから
それこそCC0とかNYSLで放り出せばいいんじゃね
CC0が出てきてからNYSLは非推奨になったんだっけ?
156デフォルトの名無しさん:2010/09/20(月) 13:29:30
いや、GPLをCC0で再公開するのはやっぱりライセンス違反だぞ
157デフォルトの名無しさん:2010/09/20(月) 14:40:09
派生の話してたっけ?
158デフォルトの名無しさん:2010/09/20(月) 19:18:56
>>157
元がLGPLのライブラリを使う話じゃなかったっけ?
159デフォルトの名無しさん:2010/09/21(火) 19:42:01
LGPLのコードを取り込んだ上でPDに…という繋がり方はしてないと思う

それはそうと
ttp://dusers.dip.jp/modules/forum/index.php?topic_id=80#post_id310
放置された数々のライブラリを使うべく立ち向かう企画とかやってくれないかなー
tioportとかDDBIとかwxDをmingwで使おうとするとかドン・キホーテvs風車のような熱い展開になりそうだ
160デフォルトの名無しさん:2010/09/22(水) 21:22:18
D言語いじり以外でD言語で何か作ってたりしてる人いる?
なんかGUIどうすっかなーってAWTみたいなの目指して書いたり消したりして
なかなかちゃんとしたアプリ作れない
161デフォルトの名無しさん:2010/09/23(木) 02:40:32
DFL使ってるから
162デフォルトの名無しさん:2010/09/23(木) 10:15:54
デザイン格好良くなってる。中の人乙。
163デフォルトの名無しさん:2010/09/23(木) 11:58:14
どこが?
164デフォルトの名無しさん:2010/09/23(木) 13:04:47
言語デザインが?
165デフォルトの名無しさん:2010/09/23(木) 14:10:22
だまされるな・・・ あれは英語の新公式サイトのデザインを流用しているだけだ・・・!
http://d-programming-language.org/
166デフォルトの名無しさん:2010/09/23(木) 15:26:14
日本語の方も変わってたのかー
inabaさん乙すぎるだろ
167デフォルトの名無しさん:2010/09/23(木) 17:01:15
cooooooooool!!
やべえなめっちゃ好きな色になっとる
168デフォルトの名無しさん:2010/09/23(木) 17:07:57
火星の夕暮れの写真をモチーフとした背景画像だね
169デフォルトの名無しさん:2010/09/23(木) 20:59:48
QtDが死んでDWTが生き返るとかどうなってんだ
170デフォルトの名無しさん:2010/09/24(金) 01:25:08
先日、試しにQtDでHelloWorld表示するのを作ってみたんだけど・・・
8MBのexeが出来たw
しかも動作には、QtDのDLLと、QtのDLLが必要ときたもんだ
QtのDLLは全部で700MBはあるし、どうすりゃいいんだよコレw
171デフォルトの名無しさん:2010/09/24(金) 03:06:08
QtのDLLは全部必要なわけではない
172デフォルトの名無しさん:2010/09/24(金) 07:22:08
coreとguiがあればおk
たったの20MBだよ
173デフォルトの名無しさん:2010/09/24(金) 09:53:10
合計たった28MBのHello, worldか……。
確かにどっか別世界にこんにちはしてる感はある。
174デフォルトの名無しさん:2010/09/24(金) 15:42:54
DFLなら1MB未満ですよ!
175デフォルトの名無しさん:2010/09/24(金) 15:45:35
Delphiのexeがでかいでかいと言われて600kぐらいなのに、なんなんだこの別世界は
176デフォルトの名無しさん:2010/09/24(金) 18:26:44
Qtはこれでもスリムになったんだぜ、
5、6年前のQt3の頃は全部ひっくるめてたんだから
177デフォルトの名無しさん:2010/09/24(金) 20:07:02
その点DWTはバイナリ一つで20MB
話のわかるヤツだ
178デフォルトの名無しさん:2010/09/24(金) 23:34:17
バイナリ一つだけならupxで多少縮むか。
179デフォルトの名無しさん:2010/09/24(金) 23:42:30
多少どころか1/10未満になったと思う
180デフォルトの名無しさん:2010/09/24(金) 23:55:13
upxってアンチウィルスとかに引っかかったりしなかったっけ
181デフォルトの名無しさん:2010/09/25(土) 00:36:36
今更引っかからないと思う。あと今時UPX非対応なアンチウイルスもあったような。
182デフォルトの名無しさん:2010/09/25(土) 00:52:26
Norton先生なめんな
今年圧縮したソフトでも余裕でひっかかったわ
183デフォルトの名無しさん:2010/09/25(土) 16:24:54
ノートン先生マジぱねえっす・・・
184デフォルトの名無しさん:2010/09/25(土) 16:28:30
upxは実行環境に負荷かけるわけだから、ほんとに見た目を満足させるだけだよ……
どうせ配布時にはzipなりの中なんだから通信負荷はupxかけなくても一緒だろ?
185デフォルトの名無しさん:2010/09/25(土) 16:31:57
>>184
外部記憶装置が遅くて計算とメモリが豊富な場合は意味がある
テープ・フロッピーの時代だと自己展開や自己書き換えはザラだった気がするが
186デフォルトの名無しさん:2010/09/25(土) 17:11:42
UPXは圧縮レベル1〜3で使う分には良いと思うけど、
dllを圧縮レベルMaxにした日にゃ所々のdll読み込みで負荷が掛かるね
187デフォルトの名無しさん:2010/09/25(土) 18:04:52
>>185
最近のOSは実行可能ファイルはメモリマップドで読み込むから、
プロセスごとに実行時のコード展開が走ったりすると
複数起動されたときに共有できるものも共有できなくなる。
それで展開後のコードがスワップされたりしたら本末転倒だろ?
188デフォルトの名無しさん:2010/09/25(土) 23:08:16
なんで基底クラスのメンバが派生クラスより先にデストラクト・・・
◆基底クラスのメンバ→派生クラス→基底クラス
http://codepad.org/RrmwJXvw
※D2.048でもこうなる事を確認

C++だと派生クラス→基底クラス→基底クラスのメンバの順でデストラクト
http://codepad.org/P3Edu0L6

俺的には明らかにバグなんだけどDの仕様でこの順で正しいとかあるんですか
189デフォルトの名無しさん:2010/09/26(日) 00:19:34
>>188
それは仕様です。実は結構今更感が強い。
ついでにいうと、そういうことがあるからデストラクタでは
GCで回収される可能性のあるデータを弄ってはいけない。
190デフォルトの名無しさん:2010/09/26(日) 00:38:09
まじか・・・
どうすればいいんだ・・・
191デフォルトの名無しさん:2010/09/26(日) 01:14:25
Dって実装重視の言語じゃないんですか?
なんかスレ見てると、触ってみようかとないう気が途端に失せるんですが・・
192デフォルトの名無しさん:2010/09/26(日) 01:18:30
触ってみる分にはこれほど面白い言語は滅多にないよ

実用についてはお察し下さい
193デフォルトの名無しさん:2010/09/26(日) 01:34:36
>>191
スレ見なければいいよ!
194デフォルトの名無しさん:2010/09/26(日) 06:47:01
dwtってd2版ってなんすか?
195デフォルトの名無しさん:2010/09/26(日) 12:30:44
作りかけ
196デフォルトの名無しさん:2010/09/26(日) 15:13:22
phobos用のDWTが欲しいなあ
197デフォルトの名無しさん:2010/09/26(日) 15:46:18
tangobos+DWTでアプリ書いてる
今のところtango風のコードは1行も無いがちゃんと動いてるようだ

D2にしたいなぁ…
198デフォルトの名無しさん:2010/09/28(火) 15:51:30
D1の式の表が出来た。新しい発見があるかも?
http://www22.atpages.jp/~dwiki/pukiwiki/index.php?%E5%BC%8F

New式の項目が説明放棄してるけど気にしない。
199デフォルトの名無しさん:2010/09/28(火) 21:18:53
スレ見つからないからdat落ちしたのかと・・
200デフォルトの名無しさん:2010/09/29(水) 16:32:49
Windows環境でD2の開発環境を作ってみたんですが、
ddbgって正常に動作してますか?
Eclipse+Descent+dmd2.049でコンパイル、通常起動までは行けるんですが、
デバッガを起動すると以下の感じでエラーに…
パスは合っているのですが。

Loading symbols from Path to hoge.exe
->Source file "Path to main.d" not found
201デフォルトの名無しさん:2010/09/29(水) 17:41:58
WinならVisualDでいいんじゃないかな。結構頻繁に更新されてるし。
VisualStudioでのデバッグはなんだかんだで快適。それとそんなに重さも感じないし。
202デフォルトの名無しさん:2010/09/29(水) 18:19:54
>>201
ウチの職場に製品版のVisualStudioが無いのです・・・
小物の制作には使ってますが、.NETで事足りてしまいまして。
203デフォルトの名無しさん:2010/09/29(水) 19:17:32
204デフォルトの名無しさん:2010/09/29(水) 19:18:36
ミス
>>202
Visual Dのページ見たか?
> It works with Visual Studio 2005, 2008 and 2010 as well as the free Visual Studio Shells.
                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~
205デフォルトの名無しさん:2010/09/29(水) 19:25:08
マジかよ最高じゃね
206デフォルトの名無しさん:2010/09/30(木) 00:10:48
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" )() );

208デフォルトの名無しさん:2010/09/30(木) 00:47:59
それかaddprop内で文字列mixinして変数とメソッドを生成してからtemplate mixinかな

文字列mixinとtemplate mixinが別物だから話がややこしくなるんだよな
209デフォルトの名無しさん:2010/09/30(木) 00:55:07
>>207-208
あああ・・なるほどありがとう

>文字列mixinとtemplate mixinが別物
まさにこれが区別ついてなかった
210202:2010/09/30(木) 10:25:09
>>204
一応インストーラーは起動したんですが、
Register with VS xxx の項目にチェックが入れられなかったので
てっきり使えないものかと・・・
ということで入れてみましたが、Dのプロジェクトが・・・選べない?
もうちょい調べてきます。
211202:2010/09/30(木) 10:32:47
これですね。
http://www22.atpages.jp/~dwiki/pukiwiki/index.php?Visual%20D
何とかイケそうです。ありがとうございました。
212デフォルトの名無しさん:2010/09/30(木) 12:37:40
お、役立った。
213デフォルトの名無しさん:2010/09/30(木) 21:42:34
GoとDの比較ってどこかにあります? 探したけど見つからん。
214デフォルトの名無しさん:2010/09/30(木) 23:11:49
両方死ぬほど検索しにくいな。
215デフォルトの名無しさん:2010/10/01(金) 00:07:59
神なんて唯一だからそうそう見つかるわけない
216202:2010/10/01(金) 10:38:34
VisualDを使ってみた感じ、
Eclipse+Descentの方がコーディング面ではかなり上かなと。
ddbgがダメならgdbで試してみるかぁ。
217デフォルトの名無しさん:2010/10/01(金) 22:56:46
是此在我
218デフォルトの名無しさん:2010/10/02(土) 10:35:07
dflってd2版はないんすかね?
219デフォルトの名無しさん:2010/10/02(土) 13:54:20
220デフォルトの名無しさん:2010/10/02(土) 13:59:13
module memory cannot read file 'core\memory.d'
とでるんですが、coreフォルダ自体がありません。
本家のdmd.2.049.zipをダウンロードしたんですが、他にダウンロードするものがあるんでしょうか?
221デフォルトの名無しさん:2010/10/02(土) 14:08:53
src\druntime\import\core\
222デフォルトの名無しさん:2010/10/02(土) 14:21:07
>Tested with DMD 2.047 with Phobos
だから2.049で動かなくても一向に驚かん
バージョンの0.001違いは死亡フラグ

dmd.2.047だけあれば大丈夫だと思う
223デフォルトの名無しさん:2010/10/02(土) 16:03:25
coreがないって言われるとしたら、それはインストールミスっているとしか思えない…
%PATH%とsc.ini確認するといいと思うよ
224デフォルトの名無しさん:2010/10/02(土) 18:16:18
D2の安定版っていつ出るんですか?
225デフォルトの名無しさん:2010/10/02(土) 18:41:33
D3が出てから
226デフォルトの名無しさん:2010/10/02(土) 19:15:15
今年の5月くらいかな
227デフォルトの名無しさん:2010/10/02(土) 19:37:08
2009年の11月に仕様が固まる予定
228デフォルトの名無しさん:2010/10/02(土) 20:59:49
どこの暦だ
229デフォルトの名無しさん:2010/10/02(土) 22:01:58
0x2010年5月
230デフォルトの名無しさん:2010/10/02(土) 22:43:46
ありがとうございます。
何度もすいませんが、dfl.internal.dlib.dで、D_Version2になってないのかstd.gcをインポートしようとします。
弄ってDFL_D2にしたら、今度はコンパイルが終わりません。
全部インストラーを使って環境を作り直しても、変わりませんでした。

コンパイル時に何か指定しないとだめなんでしょうか?
ツールはdsssを使っています。
231デフォルトの名無しさん:2010/10/03(日) 02:00:49
dsssは死んでる
dfl.exeで
232デフォルトの名無しさん:2010/10/03(日) 02:58:35
公式が新しいプロジェクトではD2を推奨するようになったから、
D2はもう安定版になったとみてもいいような?
233デフォルトの名無しさん:2010/10/03(日) 06:29:42
あっさり動きました・・・
何度もありがとうございました。
234デフォルトの名無しさん:2010/10/03(日) 13:23:58
Dのビルドツール模様ってどうなってるんだろ
235デフォルトの名無しさん:2010/10/03(日) 13:58:25
budしか使ったことがない
236デフォルトの名無しさん:2010/10/03(日) 15:23:40
makeしか使ったことがない
237デフォルトの名無しさん:2010/10/03(日) 16:14:43
各種ライブラリがバグだらけで修正しなきゃならんので
毎回フルビルドするbudしか選択肢が無い
238デフォルトの名無しさん:2010/10/03(日) 17:18:04
bud -full -cleanはデフォ
239デフォルトの名無しさん:2010/10/03(日) 17:27:19
240デフォルトの名無しさん:2010/10/03(日) 17:37:00
>>239
おおありがとう
いつの間にか色々あるなぁ
241デフォルトの名無しさん:2010/10/03(日) 17:43:33
Dのクラスのフィールド、アクセス指定子を何も指定しないと、C++にならってprivateになると思ってました。
継承もデフォルトはprivateだと思ってました。
242デフォルトの名無しさん:2010/10/03(日) 17:48:39
private継承とか使わんしなあ。
protectedに至っては何に使うのかもわからん。
243デフォルトの名無しさん:2010/10/03(日) 17:50:13
ぐああああ
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しても直りません。
これは一体?
244デフォルトの名無しさん:2010/10/03(日) 17:50:19
Javaなんかデフォルトに特別な意味があった気がする
245デフォルトの名無しさん:2010/10/03(日) 17:56:10
>>243
リンクするときに、_D5layer12__ModuleInfoZ が無いって言ってるわけか。

DFL_DE~1.LIBの拡張子が.LIBだからまずいのかな・・・?
246デフォルトの名無しさん:2010/10/03(日) 18:04:28
dmd本体のバージョンが合わない時とかにも出た気がするなぁ
247デフォルトの名無しさん:2010/10/03(日) 18:09:14
たぶんlayerみたいな名前のクラスをmain.dで呼び出してると思うんだけど、layerはどこにあるの?
248デフォルトの名無しさん:2010/10/03(日) 18:41:38
import layerして、layerをビルドしてないだけじゃね。
C/C++だとincludeだから、その辺で勘違いしてたことが俺はあった。
249デフォルトの名無しさん:2010/10/03(日) 19:35:43
dsss使ってるような感じでdfl.exeを使ってました・・・
bud main.d -full -cleanで解決しました。
お騒がせしました。
ありがとうございました><
250デフォルトの名無しさん:2010/10/04(月) 01:03:36
今まで、クラスのprivateメンバは単体テスト出来ない、と思ってました。
よく考えたら、同じモジュールのクラスなら、privateでも直接操作出来る事を思いだしました。
251デフォルトの名無しさん:2010/10/04(月) 02:22:10
D言語もそろそろフォームデザイナ付きのRAD開発環境は整ってる?
252デフォルトの名無しさん:2010/10/04(月) 06:20:13
entice designerに期待
253デフォルトの名無しさん:2010/10/04(月) 10:50:48
その前にGUIライブラリの充実が先だ。
254デフォルトの名無しさん:2010/10/04(月) 17:39:39
RADでDSL吐いて、Dに変換すればいいんだよ
Dに飽きても再利用できるし
255デフォルトの名無しさん:2010/10/04(月) 19:21:31
再利用出来るなんてとんでもない
バージョンアップするたびに書き換える必要がなければDのライブラリとは言えないぞ
256デフォルトの名無しさん:2010/10/04(月) 20:25:23
XULとかXAMLとかあるんだからそれで記述されたものをUIとして使えればいいのか
257デフォルトの名無しさん:2010/10/04(月) 20:43:27
xamlはコンパイル時XMLパーサがあればmixinで実現できる
xmlが難しいならyaxamlでもいい
コンパイル時yamlパーサってあったっけ?
258デフォルトの名無しさん:2010/10/04(月) 22:14:02
インスタンスを作成したクラスが或るメソッドを
オーバーライドしてるか判定したいんですけど
オーバーライドの挙動がおかしい?
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の方が挙動が正しいと思うんだけど違うのかな
259デフォルトの名無しさん:2010/10/05(火) 15:45:28
ver2..047です。
Error: alias win32.winbase.LPOFSTRUCT is deprecated
ってエラーがでるんですが、推奨してないでエラーがでるってのは他に何を使えばいいんでしょう?
260デフォルトの名無しさん:2010/10/05(火) 18:26:17
>>259
win32APIの事を俺らに調べさせるつもりか。
261デフォルトの名無しさん:2010/10/05(火) 19:47:01
deprecatedの代替って話?

…コメントとか?
262デフォルトの名無しさん:2010/10/05(火) 21:47:48
ちょうどdeprecatedにメッセージが指定できたらなーとか思ってたところだ

deprecated("Dじゃmainの戻り値はvoidが推奨なんだぜ") int main();
void main(string[]);

みたいな
263デフォルトの名無しさん:2010/10/05(火) 21:50:04
>>261
deprecatedは、Dの属性。
非推奨の機能に付ける。
264デフォルトの名無しさん:2010/10/05(火) 21:50:44
tangoだったか他のライブラリだったかでpragma使ってたな

pragma(msg, "fugaは殺したからhogeを使ってね");
int fuga() {
/+
...
+/
}
265デフォルトの名無しさん:2010/10/05(火) 21:52:36
>>262
埋め込みドキュメントにそんな項目があったような?
266デフォルトの名無しさん:2010/10/05(火) 22:30:24
エラーと一緒に出してもらうと色々と嬉しくね?
267デフォルトの名無しさん:2010/10/05(火) 22:35:16
コンパイルエラー時に表示されるコメントみたい機能か
Dなら入りかねんな
268デフォルトの名無しさん:2010/10/05(火) 23:53:56
>>266
あんまり意味ないような、、、
269デフォルトの名無しさん:2010/10/06(水) 00:23:46
代替機能があるのに非推奨って言われてもドキュメントかソースでも見ないと分かんないじゃん
その手間を省いてくれたり
意味なんてスペルチェックと同程度だと思うよ
270デフォルトの名無しさん:2010/10/06(水) 00:59:21
>>258
報告したいけどフォーラム?の使い方わからん&英語読めない…
271デフォルトの名無しさん:2010/10/06(水) 01:15:32
>>269
コンパイルエラーの時にメッセージがでても、結局ドキュメントやソースを見る事になるような、、、
エラーの時に代替え機能の戻り値や引数や目的なんかを全部表示するなら別だけど。
272デフォルトの名無しさん:2010/10/06(水) 01:18:42
>>270
公式和訳の人に頼んでみるとか。
やってくれるかはしらんけど。
273259:2010/10/06(水) 06:17:40
deprecatedってコンパイラの機能だったんですね・・・
コンパイル時に-dをつけて、こちらの別のライブラリを使ってみたら動きました。
http://pen-jr.org/lang_d/win32/htod.php
ありがとうございました。
274デフォルトの名無しさん:2010/10/06(水) 07:01:22
いや、「わざわざ」deprecatedが付いてるってことは、Win32的に他のを使えって教えてくれてるってことじゃないか。
ライブラリを変えて警告が出なくなりました、って、解決としてどうよ。
275デフォルトの名無しさん:2010/10/06(水) 22:35:52
>>272
さすがにボランティアでしてくれてる方に頼む勇気はないすわw
276デフォルトの名無しさん:2010/10/07(木) 01:22:23
サンプルコードだけ載せても通じるよなこれ、と思いつつも自分で書き込む気は起きない。
277デフォルトの名無しさん:2010/10/07(木) 10:13:42
http://www.kmonos.net/alang/d/2.0/mixin.html
DMD2.049でここのコードがエラーになるのは何ぞ?
278デフォルトの名無しさん:2010/10/07(木) 10:47:26
stringじゃないから?
279デフォルトの名無しさん:2010/10/07(木) 11:03:11
stringでもエラーだった。
関数を実行するような形のmixinなら平気なんだけどな・・・
280デフォルトの名無しさん:2010/10/07(木) 13:01:53
>>279
stringだとエラー出ないぞ
281デフォルトの名無しさん:2010/10/07(木) 15:25:17
ぬ? 何処かミスってる?

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)
282デフォルトの名無しさん:2010/10/07(木) 15:40:06
template GenStruct(string Name, string M1)
{
    const string GenStruct = "struct " ~ Name ~ "{ int " ~ M1 ~ "; }";
}

mixin(GenStruct!("Foo", "bar"));
283デフォルトの名無しさん:2010/10/07(木) 16:00:34
>>282
immutable const・・・
まぁいいか。サンクス。
284デフォルトの名無しさん:2010/10/07(木) 17:04:40
>>283
string は immutable(char)[] だから、immutable const にはならないよ
const( immutable(char)[] )
 immutableは、charに対してのもの
 constは、[ ] に対してのもの
結局 const char[] と同じなんだけど
285デフォルトの名無しさん:2010/10/07(木) 17:27:00
定数ならenumの方が良いのでは?
286デフォルトの名無しさん:2010/10/07(木) 17:50:34
enum GenStruct = "struct " ~ Name ~ "{ int " ~ M1 ~ "; }";
みたいな書き方は、D2から使えるようになったものだから
D1,D2共通で使えるconstがいいのでは?
287デフォルトの名無しさん:2010/10/07(木) 17:57:53
共通だなんてそんな敷居の高い
288デフォルトの名無しさん:2010/10/07(木) 18:02:19
D1なんか捨てていい。
289デフォルトの名無しさん:2010/10/07(木) 18:13:49
その前に、なんで文字列定数で、enumの方がいいと思うんだ?
290デフォルトの名無しさん:2010/10/07(木) 18:22:34
const変数はコンパイル時に決定されるとは限らないから。
(今回のそのコードではコンパイル時に決定されるので問題ないけど)
291デフォルトの名無しさん:2010/10/07(木) 18:23:11
enumは.oに埋め込まれず、使ったその場でインライン展開されるんじゃなかったっけ?
だから数値ならいいけど、文字列をenumにすると、使った回数分実体が展開されてしまうけど
mixin前提なら有りの気がする。
292デフォルトの名無しさん:2010/10/07(木) 18:25:36
DFLやDWTはD1をばっさり切り捨てるべき
293デフォルトの名無しさん:2010/10/07(木) 18:37:23
DWTはtangoをばっさり切り捨てるべき
294デフォルトの名無しさん:2010/10/07(木) 19:15:10
java.langとjava.utilさえ再実装できればtango切り捨ては楽勝っぽいんだけどなぁ
295デフォルトの名無しさん:2010/10/07(木) 22:54:54
DWTはtangoをばっさり切り捨てるべき
大切な事なので俺も言っとく
296デフォルトの名無しさん:2010/10/07(木) 22:59:00
最近Dには疎いんだが、Tangoは素晴らしい次世代ライブラリということじゃなかったっけ?
何がどうなって捨てるべき存在になったんだ?
297デフォルトの名無しさん:2010/10/07(木) 23:02:21
正直俺にも何が何だか分からない
298デフォルトの名無しさん:2010/10/07(木) 23:22:50
全然流れと関係ないが、importでpackageだけ指定してmoduleを省略したときに
デフォルトでなんかの(指定したor決まった名前の)moduleをimportして欲しい。
具体的には「import foo.all」を「import foo」って書きたい。

>>296-297
tangoは次世代標準を目指して開発されていて
ウォルたんも「phobosもtangoも似たようなところを目指してるから緩やかに一つになるよ将来的には」みたいなことをいってた(と思う)。
けど誰もが思ってた通りそんな未来はこなくて、phobosも2.0以降もりもり進化してきてこっちがみんな楽しみになってきちゃった。
……みたいな感じか? 具体的に何が問題だったのかは色々意見があるだろうけど。
299デフォルトの名無しさん:2010/10/07(木) 23:40:11
Tangoがただのライブラリなら最高だったとはよく言われるね
コア部分まで置換しようとするから…
300デフォルトの名無しさん:2010/10/08(金) 00:10:58
最大の問題はライセンス問題。
Tangoのコードを使ったら、実行ファイル配布の際に必ず「私はTangoを使いました」と
言わなきゃいけないライセンス(BSDライセンス)を採用している。
これのためにPhobosにマージすることはできないため、統合はできない。
何度も議論されて結局変わらない。
301デフォルトの名無しさん:2010/10/08(金) 00:18:45
修正BSDではなく、オリジナルのBSD?
302デフォルトの名無しさん:2010/10/08(金) 00:21:05
修正BSDでも書かなきゃいけないんじゃないの
303デフォルトの名無しさん:2010/10/08(金) 05:01:30
ところでTangoはなにか必要に迫られてコアまで置換しようとしたの?
大した理由なかったら無闇に進化遅れさせてるだけだと思うんだけど
304デフォルトの名無しさん:2010/10/08(金) 15:05:26
GCって絶対に使わないとだめなんですかね?
305デフォルトの名無しさん:2010/10/08(金) 15:35:10
>>303
そのおかげでdruntimeがphobosから分離されたのがtangoの唯一の成果
306デフォルトの名無しさん:2010/10/08(金) 17:09:29
>>304
そうですね。

とりあえずこれ読めばいいんじゃないかな。
http://www.kmonos.net/alang/d/2.0/garbage.html
307デフォルトの名無しさん:2010/10/08(金) 23:29:03
Andreiのインタビューで「GCイラネってニーズに取り組んでる」って言ってなかったっけ
308デフォルトの名無しさん:2010/10/09(土) 01:21:00
マジで? 本当なら超期待しちゃうんだが。
309デフォルトの名無しさん:2010/10/09(土) 01:59:43
それって、なるべくGC使わないように構造体でRAIIしまくる方向のことじゃない?
immutableな文字列とか入ってる時点でGCなしにするの不可能だと思うんだけど。
310デフォルトの名無しさん:2010/10/09(土) 07:27:59
不可能ってわけじゃないだろう。動的配列は参照カウンタでも持たせればいい。
ウォルたんの労力ハンパないだろうけど。
311デフォルトの名無しさん:2010/10/09(土) 11:34:26
本気でGC無くすとphobosはほとんど使えなくなりそうだな
312デフォルトの名無しさん:2010/10/09(土) 11:38:27
だったらC++使えよって思うんだが。相変わらずの万年β言語だな。
313デフォルトの名無しさん:2010/10/09(土) 13:03:19
今さらDでGCありなし混在させるくらいなら
C++/CLIの方がましだわ
314デフォルトの名無しさん:2010/10/09(土) 17:07:39
>>310
それだとimmutableの価値がない。immutableはノーコストでスレッドをまたいで使えることに意味がある。
315デフォルトの名無しさん:2010/10/09(土) 18:06:31
よーしパパimmutable外しキャストしちゃうぞー
316デフォルトの名無しさん:2010/10/09(土) 18:53:40
>>314
別に参照カウンタでもimmutableの価値は変わらんと思うが?
x86ならlockプレフィクス命令で同期無しで参照カウンタ増減させられるし。
317デフォルトの名無しさん:2010/10/10(日) 11:13:58
templateをポコポコ発生させて共通化を進めてると
関数内にtemplateを書けないのが苦痛に思えてくる

楽さを追求し始めたらキリがないな
318デフォルトの名無しさん:2010/10/11(月) 09:45:37
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に何かしないと駄目なんでしょうか?
319デフォルトの名無しさん:2010/10/11(月) 10:01:27
たぶん終端の0を出力しようとして死んでる。
文字列長調べてc.lengthにセットしてやればいいんでは。
320デフォルトの名無しさん:2010/10/11(月) 10:28:54
この場合はstd.utf.toUTF16z(length)を使えばいいと思う
321デフォルトの名無しさん:2010/10/11(月) 10:30:29
あ、ごめん戻ってきた後か
322デフォルトの名無しさん:2010/10/11(月) 13:05:36
import std.string;
writefln( c[0 .. c.indexOf('\0')] );
323デフォルトの名無しさん:2010/10/11(月) 14:47:44
Winとlinuxで使えて機能どっさりでnativeな部品を使ってるGUIライブラリ
となるとwxDとDWTしか選択肢が無いわけだが、ひょっとしてwxDって死んだ?
324デフォルトの名無しさん:2010/10/11(月) 15:37:10
>>322
通りました。ありがとうございました。
325デフォルトの名無しさん:2010/10/11(月) 16:00:40
>>323
GtkDさんの事もたまには(ry
326デフォルトの名無しさん:2010/10/11(月) 16:33:06
Dのforumだかどこだか知らなかったけどGtkDを薦められた人が

GtkD is GTK.
GTK is shit.

って言ってた
327デフォルトの名無しさん:2010/10/11(月) 16:37:30
GTKに替えてGtkDを勧めているのか
三段論法でGtkDがshitと言っているのか悩ましいところだな
328デフォルトの名無しさん:2010/10/11(月) 16:41:39
GUIはもうC#でいいやーって思う。
329デフォルトの名無しさん:2010/10/11(月) 16:50:54
Tango嫌いにとってはWPFの命名ルールは地獄じゃないか?w
330デフォルトの名無しさん:2010/10/11(月) 17:57:24
http://www.kmonos.net/alang/d/
見たら、FreeBSD に D2 があるみたいに書いてあって wktk したんだけど、
やっぱり、そんなわけないよねー orz
331デフォルトの名無しさん:2010/10/11(月) 18:48:50
>>330
え。
332デフォルトの名無しさん:2010/10/11(月) 19:53:58
えっ
333デフォルトの名無しさん:2010/10/11(月) 20:46:29
ウォルたん「Macに似てるから楽勝だったお^^」
334デフォルトの名無しさん:2010/10/11(月) 21:23:25
一緒なのはPOSIX APIだけで、MacはMach-Oで、BSDはELFとフォーマットが全然違うから、そんな楽勝なはずは……流石ウォルたん
335デフォルトの名無しさん:2010/10/11(月) 23:22:59
Eclipse用プラグインは何を使えばいいの?

DDTを↓に書いてある方法で取ろうとしたけど、無理みたい。
http://code.google.com/a/eclipselabs.org/p/ddt/wiki/UserGuide

なんか間違ってる?
336デフォルトの名無しさん:2010/10/11(月) 23:51:57
>>335
>>2のDescentがポピュラーなんじゃないかな
337335:2010/10/12(火) 00:43:51
>>336

いけた。サンクス。

Descentのページに、
「This project is dead. Please use http://code.google.com/a/eclipselabs.org/p/ddt/
ってあるからDDTを取りにいったんだけど。。。

もしかしてD用のプラグインはみんな死んでる?
338デフォルトの名無しさん:2010/10/12(火) 13:34:51
>>331-334
あー、src に freebsd.mak なんて転がってるじゃん。マジで知らんかった。
これから試しにコンパイルしてみるわ。
339デフォルトの名無しさん:2010/10/12(火) 20:28:55
>>338
どうだったの?
340デフォルトの名無しさん:2010/10/12(火) 22:12:26
D言語有理数入らないかなあ
341デフォルトの名無しさん:2010/10/12(火) 22:31:10
>>340
実数でよくね?
342デフォルトの名無しさん:2010/10/12(火) 22:37:50
std.rationalが欲しい時期が俺にもあった
343デフォルトの名無しさん:2010/10/13(水) 01:31:09
Cyclic dependency in module hoge.hage
ってなんですかね?
344デフォルトの名無しさん:2010/10/13(水) 01:34:10
static this付きのモジュールが相互に依存してると困るよって言われてる
345デフォルトの名無しさん:2010/10/13(水) 11:12:04
>>344
おおう。解決。
ありがとう。
346デフォルトの名無しさん:2010/10/14(木) 00:18:17
DxLibのD言語対応版出てた
http://code.google.com/p/dxlib4d/
347デフォルトの名無しさん:2010/10/14(木) 06:09:32
いつの間にか3D対応してるのか。
いるか知らんが書いた人乙。
348デフォルトの名無しさん:2010/10/14(木) 21:34:25
外部アプリを立ち上げて必要なくなったら落とすみたいな事は何を使えばできるんでしょうか?
ProcessのSystemを使ってコマンドプロンプトで立ち上げるように使えばいいカナと思ったんですが、
それだと任意のタイミングで落とせません。
Threadにもそれらしいものはみあたりませんでした。
349デフォルトの名無しさん:2010/10/14(木) 21:51:42
windows?もしそうでwindowアプリなら、apiのSendMessage使って、
WM_CLOSEでも送ればいいんじゃないかな?
350デフォルトの名無しさん:2010/10/15(金) 20:49:54
351デフォルトの名無しさん:2010/10/15(金) 21:18:53
 \                    /
   \  丶       i.   |      /     ./       /
    \  ヽ     i.   .|     /    /      /
      \  ヽ    i  |     /   /     /
   \
                                  -‐
  ー
 __          わ た し で す            --
     二          / ̄\           = 二
   ̄            | ^o^ |                 ̄
    -‐           \_/                ‐-

    /
            /               ヽ      \
    /                    丶     \
   /   /    /      |   i,      丶     \
 /    /    /       |    i,      丶     \ 
352デフォルトの名無しさん:2010/10/15(金) 22:43:46
ブログで作った云々見たことあるけどその人かな
353348:2010/10/16(土) 07:48:44
対象がコンソールアプリなんで、無理みたいでした。
TerminateProcessで強制終了ですが成功しました。
354デフォルトの名無しさん:2010/10/16(土) 10:43:24
強制終了しかないんじゃない?
通信しないなら
355デフォルトの名無しさん:2010/10/16(土) 10:57:22
static の関数の走る順番が今一よくわからないんですが、
importが全部終わったあとに末端から走り始めるんでしょうか?
実験して見た限りそうみえるんですが。
356デフォルトの名無しさん:2010/10/16(土) 12:05:20
 \                    /
   \  丶       i.   |      /     ./       /
    \  ヽ     i.   .|     /    /      /
      \  ヽ    i  |     /   /     /
   \
           た  わ  し  で  す        -‐
  ー
 __            __VV
             >:::::::::::::::::::: <
            _>'::::::::  ::::::::<
            ,>':::::   ::::::::<
            >:::::::   :::::::::<
            >;;:::::   :::::::< 
             >i::::::::::::::ゞ<
               'ヘトハト!             ‐-

    /
            /               ヽ      \
    /                    丶     \
   /   /    /      |   i,      丶     \
 /    /    /       |    i,      丶     \ 
357デフォルトの名無しさん:2010/10/16(土) 22:47:45
>>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

でっちあげれば何とかなるのかな?
358デフォルトの名無しさん:2010/10/16(土) 22:54:47
ググってスレ見つけた。要パッチか。
http://www.digitalmars.com/d/archives/digitalmars/D/D2_and_FreeBSD_114434.html#N117260

あー、そういえば、FreeBSD の浮動小数点数、
いまだに long double が double 扱いなんだっけか。すっかり忘れてたわ。
359デフォルトの名無しさん:2010/10/16(土) 23:29:07
いまだにwriteflnの使い方分からなくてprintf使う俺

import std.stdio;
void main()
{
  int a = 1;
  string b = "mahime";
  float c = 43.64;

  writefln(a, b, c); // なんか怒られてコンパイル通らない
}
360デフォルトの名無しさん:2010/10/16(土) 23:42:29
writelnおすすめ
361デフォルトの名無しさん:2010/10/16(土) 23:56:50
>>360
うおおおおおおおおおおお
俺アホか・・・・
f.. f... formatted....
362デフォルトの名無しさん:2010/10/17(日) 12:03:25
D1なら通った気がするなぁ
今のwriteflnは先頭の引数が文字列じゃないといけない
363デフォルトの名無しさん:2010/10/17(日) 12:38:10
writef, writeflnはD2の途中で変更したと記憶している。2.03xでは通らなかった気がするな。
364デフォルトの名無しさん:2010/10/18(月) 10:41:22
>>359
printfと書式一緒だけど?
あとwritelnてマルチスレッドだとメインスレッド以外出力されなくね?
365デフォルトの名無しさん:2010/10/18(月) 13:14:47
こんなC臭い名前やめて現代的にwrite_line_formattedにすべきだ
366デフォルトの名無しさん:2010/10/18(月) 13:24:13
hello worldが長くなっちゃうだろうが
367デフォルトの名無しさん:2010/10/18(月) 15:21:01
アンダーラインで繋ぐのって現代的か?
368デフォルトの名無しさん:2010/10/18(月) 15:37:34
バイト数を無理に減らすのが古臭いってことじゃね?
369デフォルトの名無しさん:2010/10/18(月) 15:41:13
だが文字数を無駄に増やすのはアホ臭い
370デフォルトの名無しさん:2010/10/18(月) 15:42:45
インテリセンスみたいな機能があるならマシだが、無いなら長いと面倒臭い
371デフォルトの名無しさん:2010/10/18(月) 15:47:41
インテリセンスの無い環境は古臭いので矛盾しません
372デフォルトの名無しさん:2010/10/18(月) 15:52:57
インテリセンスあっても横に長くなると見にくくなるような
373デフォルトの名無しさん:2010/10/18(月) 15:56:39
改行を出力するかどうかを関数名に含めるのが既に現代的ではないと思う。
formattedをモジュール、lineをメソッドチェーンにして、
formatted.write(...).line; でいいじゃないか。
374デフォルトの名無しさん:2010/10/18(月) 17:44:56
クラス名なんかで修飾してあるのは短く
頻繁に使うのも短く
めったに使わないのは長く
使い方が複雑なものはクラスにしてしまえ
375デフォルトの名無しさん:2010/10/18(月) 17:46:58
それと寿命の短いのは短く
寿命が長いのは長く
376デフォルトの名無しさん:2010/10/18(月) 18:07:41
>>373
だんだんtangoじみてきたな
377デフォルトの名無しさん:2010/10/18(月) 18:09:12
あのJavaですら
「Enumeration使うと一行が長くなりすぎるよ?馬鹿なの?死ぬの?」
と言ってIteratorを新しく入れてるからなぁ
378デフォルトの名無しさん:2010/10/18(月) 18:12:00
tangoはモジュールの命名規則とコア関係以外はなんら問題ない
379デフォルトの名無しさん:2010/10/18(月) 18:13:01
我らがウォルター様はインテリセンス使わないと苦痛に感じるような言語古臭いよねとおっしゃっております
380デフォルトの名無しさん:2010/10/18(月) 18:44:34
インテリセンスが効く言語ってそんなに種類あるか?
381デフォルトの名無しさん:2010/10/18(月) 19:04:51
今の所Dが一番書いてて楽しい言語だからめんどくさくなるのは困る
382デフォルトの名無しさん:2010/10/18(月) 19:18:07
「printfなんかクソなのになんでwriteflnみたいなのがあるんだよ」
「うるせーバカ楽なんだよ」

みたいな問答がFAQにあった気がする
383デフォルトの名無しさん:2010/10/19(火) 00:32:02
pythonの%演算子が欲しい
384デフォルトの名無しさん:2010/10/19(火) 00:43:32
format関数じゃだめなのか
385デフォルトの名無しさん:2010/10/19(火) 00:47:41
正規表現がs///g;とかでできるともっとよい
386デフォルトの名無しさん:2010/10/19(火) 06:03:30
新しいGDC全然ビルドできなくてワロタ
http://bitbucket.org/goshawk/gdc/wiki/Home

phobosのソースがなんかダメっぽい
動かないリリースを躊躇いもなくロールアウトするとか益荒男過ぎる
かつてのdmd0.x.xを見ているようだ
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です。
388デフォルトの名無しさん:2010/10/19(火) 14:02:48
試しても別に落ちないんで(Windows+dmd2.049)原因はよくわからんけど、
classはrefつけなくても参照渡しだから、ref取って直るならそれでいいんじゃないかって気がする。
389デフォルトの名無しさん:2010/10/19(火) 14:19:27
クラスと構造体で値と参照渡しの違いがあるので、
明示的にref付けておいたほうが親切かなーと思いまして・・。

で、今クラスを受ける引数のrefを全部削除してみたら、
また落ちるようになった・・・
何これc++より難しいorz
390387=389:2010/10/19(火) 15:12:53
refとっちゃいけない部分まで取ったのが原因でしたorz
ともあれ極力ref無しで大丈夫そうです。
失礼しました。
391デフォルトの名無しさん:2010/10/19(火) 15:45:01
> クラスと構造体で値と参照渡しの違いがあるので、
> 明示的にref付けておいたほうが親切かなーと思いまして・・。
誰にとって親切なのか
392デフォルトの名無しさん:2010/10/19(火) 18:12:13
C#ではref引数の呼出し側にもrefをつけなきゃいけないことを思い出した
間違いが少なくなっていいよね

これに限らずC#はJava並の安全性を確保しつつ先進的な機能を入れようとする姿勢に好感が持てる
でもテンプレートと破壊的変更が無いのは致命的だわ
393デフォルトの名無しさん:2010/10/19(火) 18:16:29
破壊的変更を欲しがるのってD言語使いぐらいだろw
394デフォルトの名無しさん:2010/10/19(火) 18:28:24
え?言語仕様の?
395デフォルトの名無しさん:2010/10/19(火) 18:30:34
言語仕様の
396デフォルトの名無しさん:2010/10/19(火) 20:00:42
こういう機能の為なら互換性が失われてもいい!っていうのは他の言語でもあるけど
破壊的変更そのものを望むのってどうなんだよw
397デフォルトの名無しさん:2010/10/19(火) 20:21:33
破壊を乗り越える度にユーザーアプリケーションのコードが洗練されていくんだよ。
398デフォルトの名無しさん:2010/10/19(火) 20:38:38
新しいdmdが出るたびにコンパイルできるかわくわくしながら試す
こんな言語他には無いぜ
399デフォルトの名無しさん:2010/10/19(火) 20:39:12
むしろコンパイルが通ると不安になる
400デフォルトの名無しさん:2010/10/19(火) 20:48:04
コンパイルが通るとバージョンアップ失敗したかと思う
401デフォルトの名無しさん:2010/10/19(火) 21:30:41
今回の変更点はコンパイルエラーにならないとこか……と思う
402デフォルトの名無しさん:2010/10/19(火) 22:36:47
コンパイルが通ることをバグとして報告しようとする
403デフォルトの名無しさん:2010/10/20(水) 02:07:04
破壊なくして創造はないのだ
404デフォルトの名無しさん:2010/10/20(水) 08:27:22
Dコンパイラはテストドリブン開発されてないのか
405デフォルトの名無しさん:2010/10/20(水) 08:57:46
Dっていう
406デフォルトの名無しさん:2010/10/20(水) 13:00:35
test「とにかくいっぱい更新する」
407デフォルトの名無しさん:2010/10/20(水) 13:09:21
バージョン変わる毎にテスト書き直さなきゃいけないからな
408デフォルトの名無しさん:2010/10/20(水) 16:07:47
>>405
Dは乗り捨てられるということか
409デフォルトの名無しさん:2010/10/20(水) 18:44:57
Dのテストがそんなに正しいわけがない
410デフォルトの名無しさん:2010/10/20(水) 19:27:36
お前らはいったいDをなんだと思ってるんだ
411デフォルトの名無しさん:2010/10/20(水) 19:53:44
もしもプログラミング言語がアイドルグループだったら
ttp://anond.hatelabo.jp/20100727224744
412デフォルトの名無しさん:2010/10/20(水) 20:54:16
>>411
何これ全ての欠点に目を瞑って異様に褒めてるように見える
413デフォルトの名無しさん:2010/10/20(水) 21:06:09
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って全然使われてないのな
414デフォルトの名無しさん:2010/10/20(水) 23:26:38
//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
415デフォルトの名無しさん:2010/10/20(水) 23:33:53
>>413
そりゃ消えると言われてるモジュールをわざわざ使う人は少ないだろう
416デフォルトの名無しさん:2010/10/21(木) 00:12:15
>>413
実は内部でdecode仕様としています。
つまり、`<&>"`と書いても<&>"ってなる。

>>415
消えるとわかっているんだから、使えば破壊的変更でハッピーになれるんだぜ…?
417416:2010/10/21(木) 00:14:21
しまった…
`&lt;&amp;&gt;&quot;`
こう、かな?
418デフォルトの名無しさん:2010/10/21(木) 00:37:40
encodeしようとしてdecodeしてるくさい
419デフォルトの名無しさん:2010/10/21(木) 10:09:28
D 2.037 での変更点
配列や連想配列リテラルの型は、先頭要素の型ではなく、 全要素に ?: した型を使うようになりました。
420デフォルトの名無しさん:2010/10/21(木) 11:33:11
英語もろくにできないのに、今年出たDの本買ってみた。
Hello World!から細かく解説してるので入門書的な扱いかと思ったんだが、次のページでいきなりコンパイラが型を解釈しやすいように書けとか言い出したのでいつものDだと安心した。
421デフォルトの名無しさん:2010/10/21(木) 20:42:28
真のDゲンガーは訓練されたどMの事を指す
422デフォルトの名無しさん:2010/10/22(金) 00:02:57
>>419
ありがとう理解しました
言語仕様書へは反映されているとは限らないから、更新履歴にも目を通す必要あったんですね
今から全部読んでくる
423デフォルトの名無しさん:2010/10/22(金) 00:12:10
dmdの動作はD言語の仕様でありdmdのバグはdmdのバグであってD言語の仕様ではない
んん?
424デフォルトの名無しさん:2010/10/22(金) 00:31:44
std.zlibってboostライセンスだから使ってもクレジット書かないでOK?
425デフォルトの名無しさん:2010/10/23(土) 09:21:29
boostもzlibもクレジットいらないんじゃね?
ソース頒布する時にライセンス消しちゃ駄目だろうけど。必須なのはBSDだよね。
426デフォルトの名無しさん:2010/10/23(土) 13:18:40
ああ、zlibライセンスはバイナリには適用されないのか
ありがとう
427デフォルトの名無しさん:2010/10/23(土) 14:32:54
また今日もtangoのライセンスを罵る作業がはじまるお…
428デフォルトの名無しさん:2010/10/23(土) 15:23:46
>>427
そんなことよりopApply使ってマルチタスクする方法考えようぜ!
429デフォルトの名無しさん:2010/10/24(日) 12:45:42
関係ない場所でコンパイルエラーがあるたびに
戻り値を省略したdelegateリテラルの戻り値の型が化けて
エラーメッセージがややこしいことになるのは何とかならないのかな
430デフォルトの名無しさん:2010/10/27(水) 19:28:21
dflのフォーカスが離れたときのイベントってありますか?
431デフォルトの名無しさん:2010/10/27(水) 22:42:36
onLostFocus
432デフォルトの名無しさん:2010/10/28(木) 12:17:17
古いライブラリのソース見ると、cの関数呼び出しでchar*引数与える際に、
単に cast(char*)しているだけのソースがあるんだけど、
これtoStringz()しないとダメなままだよね?
433デフォルトの名無しさん:2010/10/28(木) 13:05:34
文字列リテラルは、null終端になってるからキャストだけでも問題ない
その他は、toStringz()などでnull終端にしないとマズイ
434デフォルトの名無しさん:2010/10/28(木) 13:27:10
>>431
おお、あった。ありがとうございます。
435デフォルトの名無しさん:2010/10/28(木) 13:31:20
文字列リテラルはconst(char)*に暗黙変換できるから、
基本的にはキャストだけでおkってシーンはあんまないはず。
436デフォルトの名無しさん:2010/10/28(木) 14:20:21
>>433,435
にゃる。ありがと。
mysqlドライバが・・・
437デフォルトの名無しさん:2010/10/29(金) 22:02:05
なぞ?の現象で落ちてしまいます。
なんのバグか分からないので分解してみたんですが、

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;//落ちる
なんか変なことしてますか?
438デフォルトの名無しさん:2010/10/29(金) 22:24:23
実際のコード部は
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の数値なんだけどなぁ
439デフォルトの名無しさん:2010/10/29(金) 22:30:25
すいません。
すべては自分の勘違いですた。
440デフォルトの名無しさん:2010/10/30(土) 14:52:35
そろそろ本気出す
441デフォルトの名無しさん:2010/10/30(土) 15:22:15
ウォルたんとandreiはいつでも本気っぽいからライブラリ作者も頑張れ
442デフォルトの名無しさん:2010/10/30(土) 15:42:43
俺はdwtが2対応したら本気だす
443デフォルトの名無しさん:2010/10/30(土) 16:21:54
なんだかんだで機能的にdwt最強なんだよな
困る
444デフォルトの名無しさん:2010/10/31(日) 03:02:12
dmd2.050 Windows

const string str = "hello world"; // constはずすと通る。
std.algorithm.startsWith( str, "hell" ); // 引数から推論できないよエラー

ちくしょー
445デフォルトの名無しさん:2010/10/31(日) 05:52:02
(*´∀`)σ)´;ω;`) >>444
446デフォルトの名無しさん:2010/10/31(日) 09:00:19
自分はdflにイメージリストが出来たら本k(ry
447デフォルトの名無しさん:2010/10/31(日) 12:22:06
opencv2.0って日本語描けるようになったのかな
448デフォルトの名無しさん:2010/10/31(日) 12:28:55
449デフォルトの名無しさん:2010/10/31(日) 15:05:38
dsourceのbindingsの一部が通らなくなってるな
C形式の関数ポインタの宣言が禁止されたため。
450デフォルトの名無しさん:2010/10/31(日) 20:20:52
dflのdropサンプルでドラッグ始めると落ちるんだけど。
dmd2.047
451デフォルトの名無しさん:2010/10/31(日) 20:32:50
こっちじゃListViewへのドロップがたまに落ちる
必ずじゃないのがタチ悪い

DFLのforum見たらすでに報告されてたんだけど
その前辺りからtrunkの動きが無いんだよな
452デフォルトの名無しさん:2010/10/31(日) 20:50:12
d1のGuiライブラリは安定してるのかな。
453デフォルトの名無しさん:2010/10/31(日) 20:54:54
バグってる箇所を特定できる程度には安定してる
454デフォルトの名無しさん:2010/10/31(日) 22:24:32
既知のバグはバグじゃないって奴か
455デフォルトの名無しさん:2010/10/31(日) 23:53:25
DFLのドラッグ&ドロップ使うとき
なんで Application.autoCollect = false; にする必要あるんだろうか
CG走ると困る作りになってるのかな
456デフォルトの名無しさん:2010/11/01(月) 08:35:06
DFLでD&Dする時は、気を付けた方がいいよ
以前にdropしたファイルが、消滅したことがある
特にファイルを処理するコードはなかったんだけど、削除されていた
テストするときは、ダミーファイル作ってやったほうがいいよ
457デフォルトの名無しさん:2010/11/01(月) 08:55:00
なにそれ・・・こわい・・・
458デフォルトの名無しさん:2010/11/01(月) 12:05:17
まじでこわいw
459デフォルトの名無しさん:2010/11/01(月) 12:55:27
ごめん、英語サイト見てもどの辺に情報あるのかちんぷんかんぷんなので教えてください。
>>449が指摘している変更で、
例えばcのqsortをインポートする場合とかはどう書かないといけなくなったの?

> void qsort(void *base, uint nelems, uint elemsize, int (*compare)(void *elem1, void *elem2));
460デフォルトの名無しさん:2010/11/01(月) 14:03:09
こうかな?
void qsort(void *base, uint nelems, uint elemsize, int function(void *elem1, void *elem2));
461デフォルトの名無しさん:2010/11/01(月) 14:06:33
462デフォルトの名無しさん:2010/11/01(月) 14:21:47
>>460
通った。サンクス。
mysqlドライバぇ・・・
463デフォルトの名無しさん:2010/11/01(月) 14:25:38
>>461
ありがと。
functionて使ったことなくて
> int function (*compare)(void *elem1, void *elem2);
こんな書き方で怒られた後の質問だったのです('A`)
464デフォルトの名無しさん:2010/11/01(月) 15:18:46
delegateと一緒では
465デフォルトの名無しさん:2010/11/01(月) 16:33:35
将来的にはな
今はdelegateだとthis(コンテキスト)ポインタが変数にも引数にも入ってるはず
466デフォルトの名無しさん:2010/11/01(月) 20:03:37
構文の話でした。
467デフォルトの名無しさん:2010/11/01(月) 20:31:01
将来的といいつつ、functionとdelegateはD1.0の最初期から統合するする詐欺では
468デフォルトの名無しさん:2010/11/01(月) 22:38:35
mixin is not define
ってもじかしてMixin自体がないってことですか?
469デフォルトの名無しさん:2010/11/01(月) 22:47:55
俺も現実に対してmixin is not define
470デフォルトの名無しさん:2010/11/02(火) 00:17:19
質問です。
遅延評価の式に使われている変数のうち一部だけをその場で評価したいのですが何か良い方法はないでしょうか。

たとえばfuncの引数が遅延評価されるものだとして、
func(a * b);
と与えた時に、aは遅延評価してほしいが、bはfuncを呼びだした時の値を使いたい。
といった状況です。
471デフォルトの名無しさん:2010/11/02(火) 00:22:30
意味が分からない。
bを普通のローカル変数にして中身はその文に到達するまでに計算しとくのではだめなのか?
472デフォルトの名無しさん:2010/11/02(火) 00:29:43
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);
}

で済むと思うけど
473デフォルトの名無しさん:2010/11/02(火) 00:50:41
あーっと例が悪かったです。


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はその場で値にされ代入)
474デフォルトの名無しさん:2010/11/02(火) 00:58:18
……やっぱりiを別のローカル変数に一回代入すれば済む話じゃね?
475デフォルトの名無しさん:2010/11/02(火) 08:47:07
dwtにdflとかでいうPanel的なものってないかね?
476デフォルトの名無しさん:2010/11/02(火) 12:56:27
>>473
t[i].b(f+i);の代わりに
t[i].a = (int j){return{return f+j;};}(i);を使えばよろしい
477デフォルトの名無しさん:2010/11/02(火) 17:53:38
おうふいい感じです。ありがとうございました。
ってなんか、こう、C言語のマクロ的に完結に書きたいですね('A`)
478デフォルトの名無しさん:2010/11/02(火) 17:56:31
mixin・・・使ったことないけど、これで解決できるのかな・・・
479デフォルトの名無しさん:2010/11/03(水) 00:08:49
>>475
それってCompositeのこと?
480デフォルトの名無しさん:2010/11/04(木) 23:48:41
スレに動きがないな・・
よしお題でも・・

お題:mixinでC#のstring.Formatを作ろう

int n = 10;
string s = "test";
assert(DFormat("int→{0}、string→{1}", n, s) == "int→10、string→test");
481デフォルトの名無しさん:2010/11/05(金) 00:53:13
>>480
めんどくせ。
真面目にやるなら、Phobosのformat()をラップする。
482デフォルトの名無しさん:2010/11/05(金) 00:57:52
最近思った事。
例外処理の全体テストって、どうやれば綺麗な物になるだろう?
知恵欲しいお。
483デフォルトの名無しさん:2010/11/05(金) 03:15:14
Hara Kenjiさんの"expand for std.metastrings"が多分それに近いんじゃないかな。
484デフォルトの名無しさん:2010/11/05(金) 03:27:48
>>480
昔作ったなあ
でも今でも動くかどうか
485デフォルトの名無しさん:2010/11/05(金) 06:43:00
3日前とかなら動くと思う
4日以上はかなり厳しい
486sage:2010/11/06(土) 18:55:07
D言語友の会 の
The Case for D

TDPL - Concurrency in D Programming Language
の和訳を読んでるけど、とても面白いね。

Dの言語機能が何をしたくて実装されたかが理解できて
D言語がさらに面白くなりました。
訳した人、乙です。
487デフォルトの名無しさん:2010/11/06(土) 18:55:59
age てしまった・・・
488デフォルトの名無しさん:2010/11/06(土) 23:23:15
D1のstd.random貧弱すぎワロタ
489デフォルトの名無しさん:2010/11/06(土) 23:28:30
線形なんとかだけだったっけ
490デフォルトの名無しさん:2010/11/07(日) 00:25:58
>>488
D1なんてなかった
491デフォルトの名無しさん:2010/11/07(日) 01:47:35
>>488
今見た
俺が昔Cでゲーム作るときに使ってたアルゴリズムよりましだったorz
492デフォルトの名無しさん:2010/11/07(日) 03:18:31
そのゲームはカルドセプトサーガとかいわないか?
493デフォルトの名無しさん:2010/11/07(日) 06:04:45
いい事思いついた
mixinで.hファイルをパースしてDにポーティングしよう
494デフォルトの名無しさん:2010/11/07(日) 11:51:06
D1とD2で、ErrorとExceptionの継承関係変わってたのね・・・ 
ちゃんと書きやがれ。
495デフォルトの名無しさん:2010/11/07(日) 13:10:38
いいだしっぺの法則
496デフォルトの名無しさん:2010/11/07(日) 13:39:00
コードがphobosの仕様でdmdコンパイラの挙動がDの仕様
497デフォルトの名無しさん:2010/11/07(日) 14:22:02
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*);
  :
}
498デフォルトの名無しさん:2010/11/07(日) 14:34:54
IUnknownの実装ってなんだろ?
499デフォルトの名無しさん:2010/11/07(日) 15:45:48
>IUnknownの実装ってなんだろ?
参照カウント増減とインスタンス返す部分だと思うけどvtblがおかしいのかIxxxxx.QueryInterfaceしても
IUnknown.QueryInterfaceが呼べてない感じがした

>>497 みたいにコメントアウトするとIUnknown.QueryInterfaceがちゃんと呼ばれるという具合
500デフォルトの名無しさん:2010/11/07(日) 15:51:31
IUnknownの定義も載せて欲しいな。
原因分らない可能性も十分あるけどwww
501デフォルトの名無しさん:2010/11/07(日) 16:43:33
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呼出時に死んでるとか・・・?
502デフォルトの名無しさん:2010/11/07(日) 17:31:35
なんでIUnknownでは、
HRESULT QueryInterface(REFIID,LPVOID*);
って、型になってるのに、
IShellFolderでは、
HRESULT QueryInterface(REFIID,PVOID*);
って、型になってるんだろう?
正直これが原因のような気もする。

そもそもIUnknownで、
HRESULT QueryInterface(REFIID riid, LPVOID* ppvObject);
ULONG AddRef();
ULONG Release();
がリストされてるんだから、IShellFolderで改めてリストする必要は無いよねえ・・・
503デフォルトの名無しさん:2010/11/07(日) 17:58:09
派生先の定義をLPVOID*に変えてみてもQueryInterfaceで落ちるなぁ
そしてコメントアウトすると上手く行く
>>502 さんの言うようにポーティングが不要な事してるっていうのがまずあるけど
それで落ちるのが理由が全然わからない・・
504デフォルトの名無しさん:2010/11/07(日) 18:32:35
今ためしにこういうプログラム作って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 ()
って、怒られた。 ・・・あれ?
505デフォルトの名無しさん:2010/11/07(日) 18:56:27
ホントだ、全部extern(Windows)にすると通るけどなんでだろう・・・
506デフォルトの名無しさん:2010/11/08(月) 23:33:13
ファイルのグローバル変数の値を全て辿れる方法って
ありますか?
class における .tupleof みたいなことが出来たら・・・。
507デフォルトの名無しさん:2010/11/08(月) 23:50:34
まずallMembersをぶちかまして
頑張って一つ一つグローバル変数かどうか識別するとか?
508デフォルトの名無しさん:2010/11/09(火) 00:07:57
情報ありがとうございます。traits を知らなかったので
調べてみましたが、これはクラスの型を指定しないといけないみたいですね・・・。

あ、調べたいソースファイル自身をインポートして
グローバル変数部分の文字列抜き出すようなほげほげすれば
あるいは・・・!?

ムズソウ。。。
509デフォルトの名無しさん:2010/11/09(火) 00:37:47
xmlって読み込む系はサンプルあるんだけど、保存系が見当たらない。
どっかにいいサンプルないすか?
510デフォルトの名無しさん:2010/11/09(火) 02:22:28
いい事思いついた
mixinでE4Xをパースし(ry
511デフォルトの名無しさん:2010/11/09(火) 09:11:35
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にありますかね?
512デフォルトの名無しさん:2010/11/09(火) 11:42:44
std.variant
513デフォルトの名無しさん:2010/11/09(火) 12:17:27
>>506
コンパイラスイッチの -vtls じゃ不十分だろうか?
514デフォルトの名無しさん:2010/11/09(火) 12:18:43
>>511
モジュール機能じゃ不十分か?
515デフォルトの名無しさん:2010/11/09(火) 21:09:24
std.variantで試してみます。
所でモジュール名が同じだと駄目なんでしょうか?パス(名前空間?)は違うんですが。
516デフォルトの名無しさん:2010/11/09(火) 21:10:25
>>513

ありがとうございます。こんなのあったんですね。

今回調べようと思ってた理由は、Derelict2 を使っていたら
アクセスバイオレーションで落ちてしまい、恐らく
ロードしていない関数(へのポインタ、これはグローバル変数)が
あるだろうと思ってそのポインタ値を出力してどれが null かを
調べたかったのでした。

実はその変数自体がわざわざ __gshared: 指定されており、
スレッドローカルではなかったので、そのオプションは使えなさそうです・・・。

結局ステップ実行して原因を突き止めました。
ともあれ、情報をありがとうございました。
517515 :2010/11/09(火) 21:19:45
勘違いですた。
518デフォルトの名無しさん:2010/11/09(火) 21:59:00
最近の質問の傾向からすると今になってDを使い始めた人が結構いるのだろうか
メジャーか。メジャーに躍り出るのか
519デフォルトの名無しさん:2010/11/09(火) 22:56:28
Dから去る人間も結構いるんじゃないだろうか
520デフォルトの名無しさん:2010/11/09(火) 23:25:58
linux64bit対応まだですか?
数値計算用途で考えているんだけど、SciD使っている人いたらレビュー求む。
521デフォルトの名無しさん:2010/11/10(水) 00:33:05
まったく使ってないけどスレには居る人間もここに
と言うかD1の中期くらいで止まってるから変わりすぎてて笑う
522デフォルトの名無しさん:2010/11/10(水) 00:58:10
1回使ったけど今後使う予定のない漏れも
523デフォルトの名無しさん:2010/11/10(水) 02:06:35
>>519
まあでも、C++に去っていく人は少ないだろう。
524デフォルトの名無しさん:2010/11/10(水) 02:28:47
一回も使ったことないけど何となくいる俺も
525デフォルトの名無しさん:2010/11/10(水) 06:38:02
ええいお前ら使え
アプリ作れ
そして俺のように破滅的状況を味わうのだ
526デフォルトの名無しさん:2010/11/10(水) 06:48:01
だってレンタルサーバーのCGIに使えねーんだもん
527デフォルトの名無しさん:2010/11/10(水) 06:57:57
自分でレンタルサーバー立てればいい
528デフォルトの名無しさん:2010/11/10(水) 07:11:05
すまん、D1からD2に移行しようと思っただけで新規じゃないです・・・
メジャーにはなって欲しいけど。
529デフォルトの名無しさん:2010/11/10(水) 09:37:04
そーいえばマイクロソフトが謎のD言語ってのを開発してるってニュースが昔あったな。
530デフォルトの名無しさん:2010/11/10(水) 11:16:33
>>526
使えるような気がするのは俺だけか。
531デフォルトの名無しさん:2010/11/10(水) 12:26:34
最近流行りの仮想レンタルサーバとかなら普通に動くよ。
532デフォルトの名無しさん:2010/11/10(水) 12:57:16
レンタルサーバーって言い方が悪かった
無料サーバーって言えば良かった
533デフォルトの名無しさん:2010/11/10(水) 17:46:03
C:\D\dmd2\import\win32\windef.obj(windef)
Error 42: Symbol Undefined _D5win326windef13__readfsdwordFkZk
って奴がいきなり出始めました。
それまでは動いてたので何が悪いのか分かりません。どういう風に解決すればいいんでしょう?
534デフォルトの名無しさん:2010/11/10(水) 18:25:03
まず何をしたのかがわからないと
まったく何もしてないってことはないだろう


…いや、Dならありえるな
535デフォルトの名無しさん:2010/11/10(水) 18:40:43
>>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のリンクを指定する
536デフォルトの名無しさん:2010/11/11(木) 00:40:50
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

※ 既知バグだった。
538デフォルトの名無しさん:2010/11/11(木) 04:06:28
>>532
まさかコンパイルしてないわけじゃないよな
俺のとこじゃ普通に動いたぞ
539デフォルトの名無しさん:2010/11/11(木) 04:12:12
どこのサーバー?
無料なら乗り換えるよ!
540デフォルトの名無しさん:2010/11/11(木) 05:31:50
無料ではなくねw
541デフォルトの名無しさん:2010/11/11(木) 17:22:23
いや無料
今ryuquoだけど閉鎖してkuronowishに変わる
んで、どっちも使えるっぽい
鯖調べしてた時に他にもいくつか使えるっぽいとこあったぞ
542デフォルトの名無しさん:2010/11/11(木) 21:13:59
俺が借りてる@PAGEは無料で使えるはず。
543デフォルトの名無しさん:2010/11/11(木) 22:04:22
そこでFastCGIですよ
http://dsource.org/projects/fastcgi4d/wiki
544デフォルトの名無しさん:2010/11/11(木) 22:19:40
>>543
あんまり関係無いどころか、鯖選びのハードル上がっちまうじゃねーかwww
545デフォルトの名無しさん:2010/11/11(木) 22:35:29
-I のパス指定って相対パスは指定できない・・・?
一つ上のフォルダを指定したいんだけど、うまくいかない。。。
546デフォルトの名無しさん:2010/11/11(木) 23:15:30
できるはずだけどな
-I..
じゃ駄目なの?
547デフォルトの名無しさん:2010/11/12(金) 00:30:41
-I..\Derelict2\DerelictGL

こんな感じでやってるんだけどうまく行かないんだよね。
最初は \ ではなく / でやってみたりもしたけど。
相対指定しなくて良い場所にフォルダ置いてみるとうまく行く。
548デフォルトの名無しさん:2010/11/12(金) 00:33:53
Documents and Setting の下ってのが怪しい・・・?
549デフォルトの名無しさん:2010/11/12(金) 03:25:22
>>548 それだッ!
スペースを含むパスには対応してなかったはず。
あとたしか日本語入りのパスもだめ。
550549:2010/11/12(金) 03:39:34
ごめん。ウソ。
今試したらどっちもいけたわ。
ところでもしPowerShell使ってるならオプションを'-I..'とかって括らないとだめみたい
551デフォルトの名無しさん:2010/11/12(金) 07:54:05
あれー・・・、いける?
こっちは無理だ・・・。'' で括っても見たけど。。。

ちなみに bud を使ってて、
Bud 用レスポンスファイルの中に

-I..\Derelict2\DerelictGL

ってな感じに書いてます。
レスポンスファイルに書いてるってのも良くないのかなぁ。
552デフォルトの名無しさん:2010/11/12(金) 07:58:11
あ、コンパイル通らないのは違う原因かも。
もうちょい調べてみます。どうもありがとう。
553デフォルトの名無しさん:2010/11/12(金) 08:45:42
あ、間違えた。リンカでこけるんだ。

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

やっぱりフォルダ名のスペースがまずい気が・・・。
554デフォルトの名無しさん:2010/11/12(金) 18:50:03
配列内の順番を変えたい場合、さくっと出来る方法はDにありますか?
555デフォルトの名無しさん:2010/11/12(金) 19:13:39
void main() {
auto a = [2,1,4,3];
a.sort;
writeln(a);
}
簡単に出来る方法も何も、sortってプロパティがそのものじゃね?
556デフォルトの名無しさん:2010/11/12(金) 19:16:44
すいません。
条件書き忘れてました。
3番目のデータを先頭に持っていくとか、そういう奴です。

ところで配列の要素の削除って出来ないんでしょうか?
探しても見つからないんですが・・・
557デフォルトの名無しさん:2010/11/12(金) 19:41:07
//n番目を先頭に
auto result = [array[n]] ~ array[0 .. n] ~ array[n+1 .. $];
まあサクッとできてるほうかな・・?
558デフォルトの名無しさん:2010/11/12(金) 20:16:55
>>557
ありがとうございます。動きました。
が、さらに誤解を与えてすいません><
n番目の奴をm番目に移動とか・・・です。
559デフォルトの名無しさん:2010/11/12(金) 20:55:50
要素の削除とかはstd.algorithmにあったと思う
560デフォルトの名無しさん:2010/11/12(金) 22:56:53
>>558
そういう用途に配列を使うのもどうかと思うよ
通常はListとかのデータ構造を使うと思うよ
DだとSListとかあるけど英語の資料しかなくて使い方わからないよ
561デフォルトの名無しさん:2010/11/12(金) 23:08:11
でもsortがあるのにinsertとかdeleteとかがないのもなんか違和感
562デフォルトの名無しさん:2010/11/12(金) 23:17:01
>>561>>559
Arrayが第1引数になる関数はArrayのメンバ関数のように扱えますので
そちらをお使い下さいってことだろうね。
563デフォルトの名無しさん:2010/11/12(金) 23:49:30
ならsortもalgorithmになきゃ不自然じゃねってこと言いたかったんだごめん
564デフォルトの名無しさん:2010/11/12(金) 23:50:54
ちげえや
sort自体はalgorithmにもあるけど、sortだけ組み込みなのが許せないってことだごめん
565デフォルトの名無しさん:2010/11/12(金) 23:56:26
きっとremoveやinsertは1行で書けるけどsortは書けないからだ
566デフォルトの名無しさん:2010/11/13(土) 00:18:20
D言語マンが変身するときの掛け声は”構文糖衣!”
567デフォルトの名無しさん:2010/11/13(土) 01:27:36
D言語が日の目を見ることはあるのでしょうか?
568デフォルトの名無しさん:2010/11/13(土) 01:52:44
>>567
あるとしたらそれは世界が非常時の時だろう
569デフォルトの名無しさん:2010/11/13(土) 02:02:13
非常時に颯爽と現れたDプログラマが救世プログラムをコンパイルするわけだ

$ dmd -run christ.d
Segmentation fault
$ omg
omg: command not found
570デフォルトの名無しさん:2010/11/13(土) 02:42:51
軒並みだめじゃねぇかww
571デフォルトの名無しさん:2010/11/13(土) 03:16:06
ワロタwww
572デフォルトの名無しさん:2010/11/13(土) 03:17:00
D言語はもっと評価されていいと思うんだ

auto mio = new けいおん!(ポロリもあるよ);

573デフォルトの名無しさん:2010/11/13(土) 03:22:44
D勉強したあとにPythonに手を出した
Pythonでいいじゃんって思った
574デフォルトの名無しさん:2010/11/13(土) 10:15:34
>>573
待て,それはbearophileの罠だ
575デフォルトの名無しさん:2010/11/13(土) 10:58:46
破壊的変更のない言語に何の価値があるんだ?
576デフォルトの名無しさん:2010/11/13(土) 11:10:20
D勉強したあとにC#に手を出した
C#でいいじゃんって思った
577デフォルトの名無しさん:2010/11/13(土) 11:27:26
対象ファイルのDirEntryを直で吐く方法ってないすかね?
listdirだとディレクトリ内全部のファイルになっちゃう。
578デフォルトの名無しさん:2010/11/13(土) 12:55:17
無いような感じ

配列の要領で
path.isdir;
みたいに書けるからいらなくね?ってことか?
579デフォルトの名無しさん:2010/11/13(土) 14:44:35
なるほど、一覧から返すようにします。
ついででなんですが、EclipseにC#の#Regionみたいなものあります?
580デフォルトの名無しさん:2010/11/13(土) 14:44:58
>>572
何気に日本語シンボル通るのな
581デフォルトの名無しさん:2010/11/13(土) 14:45:59
Descentでした。
582デフォルトの名無しさん:2010/11/13(土) 15:04:11
パイ損やらC#でいいじゃん、って思う気持ちも分かるけど、記述が面倒なんだよな。
Dならさくっと書けるのに・・・、と思ってまた戻ってくる。
583デフォルトの名無しさん:2010/11/13(土) 16:10:02
Pythonは、まああれはあれでいい
C#とかIDE使ってても発狂しそうになるわ
584デフォルトの名無しさん:2010/11/13(土) 17:21:46
C#/VBは文字列処理で悶絶しそうになる
現状文字列の扱いにもっとも長けた言語の一つではないかと言う気がする
585デフォルトの名無しさん:2010/11/14(日) 04:08:44
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に置き換えられると思う
ちゃんと完成してライブラリが増えてきたら・・・
587デフォルトの名無しさん:2010/11/14(日) 06:12:25
ごめんなさいageてしまいましたごめんなさい
588デフォルトの名無しさん:2010/11/14(日) 06:15:23
十年後かもしれないし
二十年後かもしれないけど
がんばってね
589デフォルトの名無しさん:2010/11/14(日) 06:41:12
>>586
D言語に関して確実に言えることは、待っていてもだれもやってくれないということだ。
もし何かライブラリがほしいと思ったら、自分で作るか、
少なくともどんなのがほしいかくらいは声を大にして言っておかないと絶対に作られない。
590デフォルトの名無しさん:2010/11/14(日) 07:14:09
言語が完成しないと、ライブラリ作ってもすぐ使えなくなりそうで
作ろうにも作れないだろう
591デフォルトの名無しさん:2010/11/14(日) 08:13:12
HWNDをきっちりラップした軽いAWT実装欲しい・・・(小声で)
592デフォルトの名無しさん:2010/11/14(日) 08:52:18
どうせD言語なんて絶対完成しないから、
破壊的変更を承知でライブラリつくっては壊れてそれを直し
…ってサイクルを続けるしか無いんじゃない?
593デフォルトの名無しさん:2010/11/14(日) 09:23:37
>>592
他に追加したい機能なんてあるのだろうか?
594デフォルトの名無しさん:2010/11/14(日) 09:27:45
誰かが新しい言語仕様に対応出来るパーサを一つ作って、
D言語の更新の度にパーサも更新ってどうよ?
595デフォルトの名無しさん:2010/11/14(日) 09:41:34
そこまでいくと本末転倒な気がw
596デフォルトの名無しさん:2010/11/14(日) 09:44:58
tioportたんのの出番だな
597デフォルトの名無しさん:2010/11/14(日) 10:32:38
>>591
JVMをシームレスに使えるインターフェースがあれば良いかもなー
598デフォルトの名無しさん:2010/11/14(日) 11:22:49
絶望した。
599デフォルトの名無しさん:2010/11/14(日) 14:18:40
>>597
きっと JNI 経由で呼べるよ
600デフォルトの名無しさん:2010/11/15(月) 02:17:55
>>599
JNIとか茨の道じゃないか
601デフォルトの名無しさん:2010/11/15(月) 15:22:18
なんで?
Dって強力なんでしょ?
602デフォルトの名無しさん:2010/11/15(月) 15:54:40
今までwith文の存在に気づいていませんでした。
これからは有効に使おうと思います。
603デフォルトの名無しさん:2010/11/15(月) 16:23:48
with文って可読性低くするからあまり使わないほうがいいんじゃ?

struct Test { int hoge; }
void main(){
Test foo;
string hoge = "string";
writeln(hoge);// string
with(foo)
writeln(hoge);// これはどうなる?
}
604デフォルトの名無しさん:2010/11/15(月) 17:30:28
>>603
D2ではコンパイルエラーになるようです。
605デフォルトの名無しさん:2010/11/15(月) 18:37:51
~と打ち間違えてこんなん↓で落ちたんだけど

string ip = "192.168.0.1";
string uri = "http://" = ip ~ "/hoge.html";

コンパイルエラーになってくれないのね(´・ω・`)
606デフォルトの名無しさん:2010/11/15(月) 19:33:20
一時期はD便利って思ってたけど、最近では普通にPythonだな・・・
スタイルさえ確立すればPythonでもDでも同じ。
607デフォルトの名無しさん:2010/11/15(月) 19:38:16
>>605
リテラルに代入しようとしてる…?
608デフォルトの名無しさん:2010/11/15(月) 19:41:04
Dに比べりゃPythonなんてかたなしだろ。動的型付けだけに
609デフォルトの名無しさん:2010/11/15(月) 20:00:25
>>606
速さが違う

>>586
組み込み機器CPUがマルチコア過ぎてC言語じゃ対応できない未来のための
D言語だと思ってる。対抗馬のGoは今どうなってるんだろう。
610デフォルトの名無しさん:2010/11/15(月) 23:22:01
>>609
Goはなかった
611デフォルトの名無しさん:2010/11/15(月) 23:26:17
Google「Go…?」
612デフォルトの名無しさん:2010/11/15(月) 23:43:06
えっGoってなかったことにされてんの?ちょっと期待してたんだけど
613デフォルトの名無しさん:2010/11/16(火) 00:39:51
>>604
ほう
codepadでテストするもんじゃないな
614デフォルトの名無しさん:2010/11/16(火) 01:04:41
>>609
現状、並列処理用の拡張やライブラリの充実度ってCとDじゃ
比較にならないと思うんだけど、どのぐらい未来の話?
615デフォルトの名無しさん:2010/11/16(火) 03:40:29
Concurrency in D ってやつか。アンドレイたんの思い描く未来のD並列処理は
読んでて確かに面白かった。
616デフォルトの名無しさん:2010/11/16(火) 12:56:51
並列処理はもう標準ライブラリだけで出来るけど・・・?
617デフォルトの名無しさん:2010/11/16(火) 14:18:27
Concurrencyは並列じゃなくて並行だぞ
マルチコアで全く関係の無い別々のスレッドを走らせるなら間違ってないが
618デフォルトの名無しさん:2010/11/16(火) 14:39:36
619デフォルトの名無しさん:2010/11/16(火) 18:18:16
ん?並列と並行は別の意味があるのか・・・
まあ、どっちにしても出来るけど。(ドキュメントに嘘書いて無ければ)
620デフォルトの名無しさん:2010/11/16(火) 19:45:09
まあ、当然できねえからっこういう話題になってるんだけどな。
621デフォルトの名無しさん:2010/11/16(火) 19:52:20
うお、ドキュメントの日本語訳更新されてる!
そろそろ俺も本気出す。
622615:2010/11/16(火) 20:34:35
>>617

並列と並行、確かにごっちゃにしてた。
調べてみたら、次の説明が。

Parallelは、日本語訳は並列。Instructionレベルでの同時多重処理を実現するのための技術。
Concurrentは、日本語訳は並行。Taskレベルでの同時多重処理を実現するための技術。

調べてみよっと。どうもありがとう!
623デフォルトの名無しさん:2010/11/16(火) 20:39:00
>>620
じゃあ、俺の見たスレッドの作成が出来る、って記述は幻だったのか。
624デフォルトの名無しさん:2010/11/16(火) 21:03:37
そりゃスレッドはあるけど、逐一処理でスイッチするだけじゃん。
マルチコア使って実際に並列処理してくれるかどうかは別の話だろ。
処理を並列化できることを示せるような方法は今のところなかったと思うし。

配列演算使うと並列で処理してくれる「かも」とは書いてあるが。
625デフォルトの名無しさん:2010/11/16(火) 22:49:40
>>624
何でスレッドは並列処理しないと思ってるのか。
せっかく独立して動かせるのに。
626デフォルトの名無しさん:2010/11/16(火) 23:12:14
ファイバーと勘違いしてるってこと?
627デフォルトの名無しさん:2010/11/17(水) 04:43:59
配列演算での並列ってさ、SIMD ってことじゃないの?
マルチコアでやってくれることを期待するものなの??
628デフォルトの名無しさん:2010/11/17(水) 08:59:43
>>627
自動並列化っていうのはあるけど、コンパイラ次第。
まあ、今はあまり期待出来ないが。
629デフォルトの名無しさん:2010/11/17(水) 22:44:06
DでOSやらなんやらのリソースを扱うクラス(☆)を別のクラス(★)のメンバとして
持たせる場合、解放処理が必須になると思うんだけどそういう場合どうやってしてる?
デストラクタの処理順は不定だから★のデストラクタで☆の持ってるリソースを解放しようとすると
アプリケーション終了時に☆の方が先に解体&メモリ解放されてエラー堕ちしちゃうんだ・・・
630デフォルトの名無しさん:2010/11/17(水) 22:52:56
DのGCはメモリ管理のみだと割り切ったほうがいい
リソース管理は基本手動かscope
631デフォルトの名無しさん:2010/11/17(水) 22:58:47
まあJavaで解放強制するSWTみたいな代物もあるんだ
やってやれないことはない
632デフォルトの名無しさん:2010/11/17(水) 23:37:09
>>630
Dィィィィ オマエェェェェェェ

しくしく;
633デフォルトの名無しさん:2010/11/18(木) 02:09:16
int hoge(int, int);
みたいな関数のポインタへのキャストはどう書くのでしょうか?
634デフォルトの名無しさん:2010/11/18(木) 02:13:19
int function(int, int) p = cast(int function(int, int))&hoge;
635デフォルトの名無しさん:2010/11/18(木) 02:28:04
Dなんだからauto使ってくれ
636デフォルトの名無しさん:2010/11/18(木) 05:19:29
>>632
他の言語でその辺上手くやってる言語ってあるっけ?
637633: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 を使っています
638デフォルトの名無しさん:2010/11/18(木) 08:35:30
>>635
auto phoge = cast(int function(int, int))GetProcAddress(hLibrary, "hoge");
だとコンパイル通りましたが
やはり実行時に 2番目以降の引数がおかしくなります
D から DLL 呼び出すのは無理なんでしょうか?
639デフォルトの名無しさん:2010/11/18(木) 08:55:40
cdeclならextern(C)しないとダメなんじゃね?
auto f = cast(extern(C) int function(int, int))GetProcAddresss(..);
この位置のexternきもいなっていうかこんなことできるの?
640デフォルトの名無しさん:2010/11/18(木) 09:00:45
だめですね
コンパイルエラーになります
641633:2010/11/18(木) 09:04:13
一応 implib で .dll から .lib 作って
LoadLibrary じゃなくて

extern (C)
{
  export int hoge(int, int);
}

を書いて静的リンクしてやればうまく動くことは確認しました
GetProcAddress で取得した関数の型変換で失敗しているみたいです
(出来れば LoadLibrary で正常に動作させたいです)
642デフォルトの名無しさん:2010/11/18(木) 09:17:58
予めextern(C)の中で確保した関数ポインタに入れてやると解決した覚えがあるかもしれない
extern(C) { int function(int, int) hoge; }
...
hoge = GetProcAddress(..);

643633:2010/11/18(木) 09:32:37
解決しました
ありがとうございました
644デフォルトの名無しさん:2010/11/18(木) 09:54:25
このスレも役に立つことあるんだな
645デフォルトの名無しさん:2010/11/18(木) 17:28:53
>>629
「☆がデストラクタで自分が死ぬときに自分のリソースを解放する」
としてて困ったことがないんだけど、☆のさらに外の★がリソースの面倒
みる必要があるのってどういう状態?
646デフォルトの名無しさん:2010/11/18(木) 17:52:02
クラスの参照渡し+delete使ってるんじゃないの?
647デフォルトの名無しさん:2010/11/18(木) 18:20:52
Dってdeleteで削除してくれないの?
648デフォルトの名無しさん:2010/11/18(木) 19:44:39
>>642
extern(C) { alias int function(int, int) HOGE; }
auto hoge = cast(HOGE) GetProcAddress(..);

でも行けた気がするな
649デフォルトの名無しさん:2010/11/18(木) 19:50:07
>>639との違いがわかりません!
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
}
651デフォルトの名無しさん:2010/11/18(木) 22:13:01
デストラクタでメンバオブジェクトに触っちゃダメってどっかで聞いた気がする
652デフォルトの名無しさん:2010/11/18(木) 22:23:02
>>650
その例だとmapごと消えるんだからわざわざ手動で関連付けを消す必要性が感じられない
もしWindowクラスがOSのリソースを持ってるからというなら、
>>645の通りWindowクラスのデストラクタで解放すればよいのでは

>>651
本家マニュアルのデストラクタの説明に書いてありますな
653デフォルトの名無しさん:2010/11/18(木) 22:24:57
>>651 デストラクタの呼ばれる順番は不定だから

でもデストラクタ以外に自動で呼ばれるものがないからね・・
自分で解放メソッド呼ばなければならないなんてCやってた頃に巻き戻されたようだ
654デフォルトの名無しさん:2010/11/18(木) 22:30:57
メモリだけ管理してもらってもこれじゃあんまり意味なくね?
655デフォルトの名無しさん:2010/11/18(木) 22:32:59
>>652
mapは用途から考えるとstaticでWindowインスタンスから共通で触れるもの、っていうのと
Dはdeleteでデストラクトが出来るっていうのを踏まえて考えると
デストラクタで解放しないとすると勝手にdeleteやられちゃった場合
リソースが宙ぶらりんで残っちゃうわけで、そうなるとやっぱりデストラクタで
解放するしかうんぬんと、、、 どつぼに嵌っています
656デフォルトの名無しさん:2010/11/18(木) 22:49:23
>>655
mapをmainの中に入れる。(autoにする)
静的デストラクタ。

解決するか分かんないけど。
657デフォルトの名無しさん:2010/11/18(木) 23:17:33
あともう一つ。
静的グローバル変数のオブジェクトを、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
659デフォルトの名無しさん:2010/11/18(木) 23:32:46
GC.addRoot と GC.removeRoot を使うのはどうでしょ
660デフォルトの名無しさん:2010/11/18(木) 23:38:25
>>659
すごい力技すなぁw
考えてみます
661デフォルトの名無しさん:2010/11/18(木) 23:42:30
やっぱり詳細を予想しながら回答すんの無理。
詳細のソースだしてくれ...
662デフォルトの名無しさん:2010/11/19(金) 00:43:41
>>659 のやり方が多分ある程度正当だと思う。
構造体で包んで、コンストラクタとデストラクタで登録するのが良いかと。
663デフォルトの名無しさん:2010/11/19(金) 10:29:43
>>659>>662
ちょっと待て。
そんな変な方法取るぐらいなら、scopeで処理する方が幾分もマシだぞ。
664デフォルトの名無しさん:2010/11/19(金) 19:00:21
>>663
どっちのスコープ?scopeストレージクラスはそのうち消えるよ。
scopeガード文は消えないけど、それを使ってclassのデストラクタが呼ばれること自体を保証
できるわけではない(クラスを使う人が確実にdeleteするとは限らない)から、
クラスが破壊されるときにメンバのオブジェクトをいじる/壊す方法が欲しくなる。
その方法としては、 >>659>>662 の方法が妥当かなと思う。
665デフォルトの名無しさん:2010/11/20(土) 00:15:07
scopeストレージクラスは廃止予定だとか、std.xmlは・・・とか
誰か、今後の変更予定をwikiにまとめておくれよ
666デフォルトの名無しさん:2010/11/20(土) 03:02:59
DIPでいいのでは
667デフォルトの名無しさん:2010/11/20(土) 11:14:34
>>664
どこが妥当だ。
本来GCで管理してないメモリを、無理やり管理させたら、何が起こるか分らないぞ。
ライブラリの生成・破棄のルールをGCが知ることも出来ないしな。

リソースを管理してるクラスを、mainで生成・破棄を確実に起こすようにするか、
メンバをstaticにして、静的デストラクタでやっちゃう方が幾分もマシ。
668デフォルトの名無しさん:2010/11/20(土) 12:37:15
>>667
addRoot/removeRootは本来GCで管理してないメモリを無理やり管理させる機能ではありません。
つまり、こういうこと。
ttp://ideone.com/k8oBR
669デフォルトの名無しさん:2010/11/20(土) 13:41:43
参照カウント増やしとくみたいなもんなのかー
670デフォルトの名無しさん:2010/11/20(土) 15:16:10
>>668
・・・・・
http://ideone.com/R8f3F
671デフォルトの名無しさん:2010/11/20(土) 17:22:28
>>670
デストラクタの呼ばれる順番が、classによって保証されているのか
classを使う側次第なのか、の違いなんじゃないの
deleteを書き忘れたら、順番が不定になって
落ちたり落ちなかったり、わかりずらいバグを生むとか
672デフォルトの名無しさん:2010/11/20(土) 17:59:15
struct のデストラクタは
1.呼ばれる順番(goes out of scopeした順?)
2.必ず呼ばれる
3.メンバ(クラスを含む?)にさわれる
ことが保障されてるのか
673デフォルトの名無しさん:2010/11/20(土) 18:17:36
http://ideone.com/I74uW
これでも動いた。

>>672
それはないだろー。
674デフォルトの名無しさん:2010/11/20(土) 18:19:08
htod.exe で jni.h を変換しようとするとハングアップするんですがみなさんのところではどうですか?
675デフォルトの名無しさん:2010/11/20(土) 19:28:49
>>673
それは、GC管理下のメンバオブジェクトには触ってないから、動いて当然
676デフォルトの名無しさん:2010/11/20(土) 22:03:52
C++から来た俺がちょっとメモ代わりに書き残します。

  is:参照(ポインタ)同士の比較
  ==:opEquals(operator==)での比較

インスタンスがnullかチェックする場合、isの方を使います。

分かりづらかったので、同じくC++から来た人用に。
677デフォルトの名無しさん:2010/11/20(土) 22:46:12
htodって保守されてんの?
678デフォルトの名無しさん:2010/11/21(日) 00:25:50
>>668
テンプレートすごいなあ
thisを置き換えることでTをstructの外側から透過的に使えちゃうとか
こういうテクニックってどこかにまとまってたりします?
自分じゃこういう使い方絶対思いつけない。

struct ControlledData(T) {
  T self;
  alias self this;
679デフォルトの名無しさん:2010/11/21(日) 00:54:17
Dのテンプレートテクの纏めとか見たことないけど
ある意味phobosのコードが見本市状態だな
andreiのコードとか変態極まる
680デフォルトの名無しさん:2010/11/21(日) 01:57:34
>>676
あと、値型のポインタの比較はどっちでもいいような気がする
int* p;
p is null
p == null
681デフォルトの名無しさん:2010/11/21(日) 11:55:24
>>675
じゃあ>>673でいいってことだね。
682デフォルトの名無しさん:2010/11/21(日) 11:59:20
>>681
BのデストラクタでAに触ってみてテストするべきじゃ?
683デフォルトの名無しさん:2010/11/21(日) 12:42:44
>>682
なにを?
とりあえず触れ、ということなら、それは不要だ。(目的は達成しているので)
684デフォルトの名無しさん:2010/11/21(日) 12:49:44
>>677
一応最新のダウンロードしたら
2010/04/28 08:58
になってたお
685デフォルトの名無しさん:2010/11/21(日) 14:07:39
半年も経ってたらコンパイル通らないな
686デフォルトの名無しさん:2010/11/21(日) 15:04:57
ちょっと前に出た並列処理の検証プログラムを作ろうとしたんだけど・・・
http://ideone.com/Fu3iF

あれ?並列処理されてる?(不完全だが)(-O -release -inlineでコンパイルしてね。)
687686:2010/11/21(日) 15:09:04
書き込んでから気づく。
ただ、描画処理が別スレッドで動いてるだけだねww
688デフォルトの名無しさん:2010/11/21(日) 15:40:02
>>683
何の目的を果たしたのか分からないけど
BのデストラクタでAに触ったら落ちた
689686:2010/11/21(日) 16:27:41
>>688
目的は確保したリソースの解放。
元々そういう想定でしょ?ちがうの?
690デフォルトの名無しさん:2010/11/21(日) 17:42:28
>>673みたいに各リソースが独立した単純なケースなら、わざわざ質問しないと思うけどなぁ
複雑な依存関係があって、別のオブジェクトを触る必要がある場合の話なんじゃないの?
691デフォルトの名無しさん:2010/11/21(日) 18:04:28
>>690
他の場所から参照されている以外に、
リソースを解放する時に他の場所を気にする必要があるケースってなんだ。
692デフォルトの名無しさん:2010/11/21(日) 18:41:50
解放する順序が決められているとか
693デフォルトの名無しさん:2010/11/21(日) 19:32:56
また微妙なケースだな...
それにしても質問者はどこへ?
694デフォルトの名無しさん:2010/11/21(日) 20:06:07
>>689
元々はデストラクタが呼ばれる順を制御したいって話じゃなかったっけ?
695デフォルトの名無しさん:2010/11/21(日) 22:19:54
>>694
それは解決法の一例であがっただけだよ。
696デフォルトの名無しさん:2010/11/21(日) 22:26:32
>>678
http://digitalmars.com/d/2.0/class.html#AliasThis
何を勘違いしているのか分からないけどtemplateとか関係ない普通の機能
697デフォルトの名無しさん:2010/11/21(日) 23:04:24
>>696
まじだ
あれ?演算子オーバーロードはalias先のthisのを使えないのは仕様なのかな
698672: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減る

では、添削を頼む!↓
699デフォルトの名無しさん:2010/11/22(月) 16:31:30
std.signals って使えないかな。>>650 のだと、
windowをmapに登録するついでに window.connect(&map.removeMe)、
で、windowが死ぬときに this.emit(this)。
mapがデストラクトされたら勝手にdisconnectされるようにはなってたはず。

と思ったけど、デストラクタから呼ぶとsignal関係のメンバ自体が先に解放されてる可能性があるか…
700デフォルトの名無しさん:2010/11/22(月) 18:30:05
>>698
1. true. デストラクタが呼ばれる回数は1回以下(0回のこともある)
2. true. GC管理外のメンバには触れる。
3. true.
4. false. 構造体でもnewされた場合は呼ばれない可能性がある。
5. おそらくtrue. 明確に規定されていないが、事実上(少なくともdmd)はtrue.
 一応デストラクタで触れないのはGC管理下のメンバと言うことになっているので大丈夫だとは思う。
6. 参照カウンタではないので参照が減るという表現もおかしいが…
 構造体AのデストラクタではCをいじることはできない。
 (ただしaddRootなどでGCが自動で解放しないことを確実にした場合はこの限りではない。)
701デフォルトの名無しさん:2010/11/22(月) 19:42:36
>>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を動作させる事が可能。(破棄対象のデストラクタが全部呼ばれる)
702デフォルトの名無しさん:2010/11/22(月) 21:11:55
struct{
imt a;
double b;
long c;
}
のメンバは、一緒に破棄されるのか、それとも別々なのか。
多分一緒だと思うけど。
703デフォルトの名無しさん:2010/11/22(月) 21:29:42
imtがクラスなら話が違うんじゃねぇの!?
704デフォルトの名無しさん:2010/11/22(月) 21:41:40
あ、タイプミス。intね。
705デフォルトの名無しさん:2010/11/22(月) 21:42:01
>>702
別々にnewされたメンバでないなら問題ないはず

>>703
typoじゃないの?w
706698:2010/11/23(火) 00:20:34
>>700 >>701 ありがとうございます!

4.false -> あっ!構造体で new とか盲点
>>668 をnewで書き直したら(落ちなかったが)デストラクタよばれんかった。
クラス(設計)側でデストラクタの挙動を保障するのは無理?なのか?コメントの出番ですか?

6.参照カウンタ-> そう、それはまあ概念テキな表現上のアレです。

デストラクタって話題にのぼるたびにチェックしてるつもりなんだけど
結局「なんかメンドクセ!」という印象しか残らないんだよな。
707デフォルトの名無しさん:2010/11/23(火) 00:32:29
>>706
通常は>>673
解放の順序が重要なら>>668でFA
708デフォルトの名無しさん:2010/11/24(水) 21:06:44
ところでみんなは、D言語で何か作ってる?
俺は生態系シミュレータ(形だけ)作ってるけど。
709デフォルトの名無しさん:2010/11/24(水) 21:15:34
Windowライブラリ的なものとかゲームの移植とかかな一応・・・
710デフォルトの名無しさん:2010/11/24(水) 21:17:36
ゲームの移植とな?
何故移植?
711デフォルトの名無しさん:2010/11/24(水) 21:27:29
でかいテキストデータの処理だな。
D最強説
712デフォルトの名無しさん:2010/11/24(水) 21:30:35
ニッチな用途向けのGUIプログラム作ってるけど
将来の展望が真っ暗です(ライブラリ的な意味で
713デフォルトの名無しさん:2010/11/24(水) 22:09:15
数値計算
714デフォルトの名無しさん:2010/11/24(水) 22:29:30
>>713
ちょwwwww 曖昧すぎwwwww
715デフォルトの名無しさん:2010/11/24(水) 22:37:28
>>710
ゲーム製作の練習に単純そうなゲームを選んで移植してます
716デフォルトの名無しさん:2010/11/24(水) 22:54:09
テトリスとか1度作り方がわかるとすぐ作れちゃうから
ボンブリスとかぷよぷよとかいいよね
717デフォルトの名無しさん:2010/11/24(水) 22:56:51
     .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゙   ̄ _,,,ノ
// ̄ ̄ ̄ _.,-'  
`` ゙̄/ ̄ ̄\     
   /      /     
   \   /    
  (⌒つ  ( "つ
   ̄     ̄  
718デフォルトの名無しさん:2010/11/24(水) 23:03:58
>>717
それは個人レベルだとなかなか大変...
719デフォルトの名無しさん:2010/11/24(水) 23:42:12
     / ̄ ̄\
   (⌒ヽ    ヽ⌒) 
   |:::: ̄       ̄l
  . |:::        |
   |:::: (● ) (●)|
   .|:::   (_人__) |  …
    |:::    `⌒´  |
    |:::  __  |_
    |::: ノ__)  |_)
    |:::       |
    |:::       |
    \___、⌒i___ノ⌒ヽ 
      (_ノ  ヽ_ノ
720デフォルトの名無しさん:2010/11/25(木) 05:23:17
卑猥だな・・・ DというよりHだな・・・
721デフォルトの名無しさん:2010/11/25(木) 07:07:25
え?
722デフォルトの名無しさん:2010/11/25(木) 18:18:59
CMakeの使い方がよく分らなくて、QtDのインストールが出来ない・・・
悪戦苦闘中。
723デフォルトの名無しさん:2010/11/25(木) 19:06:20
やっと出来た・・・!
実は環境変数PATHの設定の仕方がよくわかって無かったというオチ。
724デフォルトの名無しさん:2010/11/25(木) 20:06:40
QtDって一時バイナリ配布してたけどどうなったのかな
725デフォルトの名無しさん:2010/11/27(土) 17:48:57
ubuntuでbudを使おうとして挫折した

Dを使うときは「駄目なら駄目でもいいや」くらいの気合いの入れ方じゃ駄目だ
726デフォルトの名無しさん:2010/11/27(土) 18:04:08
budに、実行すべきコマンドラインを出力する機能でもあればいいんだけどなあ
727デフォルトの名無しさん:2010/11/27(土) 18:16:44
Dのビルドツール模様ってどうなってるんだろ
728デフォルトの名無しさん:2010/11/27(土) 19:04:46
>>727
全く同じレスをこのスレで見たな。
729デフォルトの名無しさん:2010/11/27(土) 19:20:03
>>728
そういえば俺もまったく同じレスをこのスレでした覚えがある…
730デフォルトの名無しさん:2010/11/27(土) 19:44:14
      /|`ヽ
      ( .|__丿、
    /  ̄    \
   /         \
. / _,,,---─--、_    \
<  | | ,,--、   `ヽ、.   /
 \.| | { Yミリ`Y´,,ヽ ヽ /
   \.| ゝしイ ({ミ:リ  ∨
   l .|    |  `l´|  |
    | |   .|.   | |   |
   ,' ,'   .,'.   ,' ,'  |
  //   ./   //   ,'
  //   /  ,/    /
...//    ̄      ./
/ィ-─────イ
`── /──\
    /     〉
    \    /
  ( ̄`ヽ、  /〃 ̄)
  `─-イ  ゝ--'
731デフォルトの名無しさん:2010/11/28(日) 05:52:41
ああああああああもう
(int a){return f(a);}()
のシンタックスシュガーが欲しいいい('A`)なんども出てくると可読性が悪すぎる
f(a) @ int a
みたいなさぁ、なんかこう、わかりやすくできないかなあ
732デフォルトの名無しさん:2010/11/28(日) 06:05:28
可読性悪いか?
汚いからイヤってのじゃねーの
733デフォルトの名無しさん:2010/11/28(日) 08:53:34
alias で出来んと?
734デフォルトの名無しさん:2010/11/28(日) 09:32:53
>>731
lazy f(a)
735デフォルトの名無しさん:2010/11/28(日) 13:17:09
すげえごめん、寝ぼけてたのか間違えた。
(int a){return{return f(a);};}(b)

f(a) @int a=b

だったけど、よく考えなくてもシンタックスシュガーが必要なほど一般的に使われそうな文じゃないわな
736デフォルトの名無しさん:2010/11/28(日) 13:49:18
何これ凄くややこしい
737デフォルトの名無しさん:2010/11/28(日) 20:48:20
>>735
まだ寝ぼけてるでしょ?
aがf()に伝わってないぞ。
738デフォルトの名無しさん:2010/11/28(日) 20:49:45
aは外側のdelegateのスコープ内にあるんじゃないの?
内側のクロージャでも使えるはず
739デフォルトの名無しさん:2010/11/28(日) 20:52:34
やべえ>>735さっぱり意味が分からんw
740デフォルトの名無しさん:2010/11/28(日) 21:12:13
あれ? あーなってこーなって・・・

http://ideone.com/ZXlDS
こうなるのかな?
741デフォルトの名無しさん:2010/11/28(日) 21:16:15
ちがう、こうだった。
http://ideone.com/UnWhJ

あー、ややこしい。
742デフォルトの名無しさん:2010/11/28(日) 21:20:33
最終的に得られる結果は、b = 42の場合
42を引数にf()を呼び出すクロージャになるわけだ
ややこしさはともかく用途が気になる
743デフォルトの名無しさん:2010/11/28(日) 21:35:30
そのスコープでのfと与えた引数をバインドさせたものを返す?
744デフォルトの名無しさん:2010/11/28(日) 21:43:48
>>742
いや、ちがう。
(int a){return{return f(a);};}(b)
で、返ってくるのは、f(b)の結果だ。

・・・どうでもいいけど。

>>743
>>741見れば、どうなってるのかイメージしやすいと思う。

・・・それにしても、何故これが通らない?
http://ideone.com/DeXTI
745デフォルトの名無しさん:2010/11/28(日) 21:49:28
いやまてよ・・・ 
もうどうでもいいやww
746デフォルトの名無しさん:2010/11/28(日) 21:51:23
普段こういうことやらないから頭混乱してるwww
よく考えたら>>742であってるわwqww
747デフォルトの名無しさん:2010/11/28(日) 22:00:26
最後に・・・
http://ideone.com/zC7VM
748デフォルトの名無しさん:2010/11/28(日) 22:01:29
で、
writeln(a());
で13が出ると
749デフォルトの名無しさん:2010/11/28(日) 22:05:19
はい、そうです。
http://ideone.com/oeT7z
750デフォルトの名無しさん:2010/11/28(日) 22:22:21
ところで、>>735って、これでよかったんじゃないだろうか?
{int a = b; return f(a);}

http://ideone.com/u5oTJ
751デフォルトの名無しさん:2010/11/28(日) 22:44:47
f(a)を返すdelegateリテラルを作るdelegateリテラル ……何に使うのこれ?
752デフォルトの名無しさん:2010/11/28(日) 22:45:54
http://ideone.com/CJYdS
ところでstd.bindののコンパイルの通し方が分からんのだが。
753デフォルトの名無しさん:2010/11/28(日) 22:51:11
>>751
普通に(int a){return{return f(a);};}をその場でコールせずに関数間で受け渡ししたりするんじゃね?
754デフォルトの名無しさん:2010/11/28(日) 23:55:12
使い方・・・?
http://ideone.com/BEu6y
755デフォルトの名無しさん:2010/11/29(月) 00:50:07
>>752
前スレに「bindはずっと前から壊れてるけど誰も直そうとしない」とあった
756デフォルトの名無しさん:2010/11/29(月) 02:42:58
curryとかなかったっけ。
bindの修復はbind自体が不要だと思えたから投げた
757754:2010/11/29(月) 04:42:30
http://ideone.com/x7hRb
こうやって比較してみると・・・まあ意味はあるのか
758デフォルトの名無しさん:2010/11/29(月) 05:05:49
http://ideone.com/Kjv6i
ごちゃり。。。正直他人の書いたこの手のコードは読めない
759754:2010/11/29(月) 05:42:00
^p^<シンタックスシュガーつくってみたよ
http://ideone.com/hoYNv
760デフォルトの名無しさん:2010/11/29(月) 10:56:15
>>750がガン無視されて悲しいぞー
761デフォルトの名無しさん:2010/11/29(月) 11:36:14
って、あれ? 上手くいかないな・・・
http://ideone.com/AuK94
762デフォルトの名無しさん:2010/11/29(月) 11:45:19
ちょっと逃避ww
http://ideone.com/jrTYq
763デフォルトの名無しさん:2010/11/29(月) 12:03:33
>>759
わかりずらくなってるwww
764デフォルトの名無しさん:2010/11/29(月) 12:20:27
>>760
そもそも>>735
(int a){return f(a);}()
ってエラーだろw


>>763
http://ideone.com/6RFIh
ちょっとしたことだがこうすると
f(a) @int a=b
っぽいな。少なくともreturnが2回連続で出てくることはなくなったなw
765デフォルトの名無しさん:2010/11/29(月) 12:35:02
>>764
てか、よく見たら・・・
(int a){return{return f(a) + b;};}(i)

意味変わってんじゃねえかwwwww
766デフォルトの名無しさん:2010/11/29(月) 12:38:20
f(a)のままだと利用価値がわかんなかったんだよwwww
f(a,b)ってことでここはひとつw
767デフォルトの名無しさん:2010/11/29(月) 12:54:01
>>766
そういう問題じゃ無く・・・
http://ideone.com/xdC1X
768デフォルトの名無しさん:2010/11/29(月) 12:59:58
うん?よくわからないんだけど・・・
769デフォルトの名無しさん:2010/11/29(月) 13:28:34
ちょっと危ない式だな、って思って。
俺もなんか良く分らなくなってきたw
770デフォルトの名無しさん:2010/11/29(月) 14:02:04
俺は最初からさっぱり分からなかった
771デフォルトの名無しさん:2010/11/29(月) 14:30:45
比較用コード。
http://ideone.com/ytBVu 無名関数とクロージャ。
http://ideone.com/OiE83 クラス。
http://ideone.com/B0hbf テンプレート。
http://ideone.com/R3BFH 直接w

toClosure("f(a)");で、同じものを返す、と言うのもやりたかったが挫折。
772デフォルトの名無しさん:2010/11/29(月) 14:47:11
作って見て思ったけど、テンプレートが美しすぎるっていう。
773デフォルトの名無しさん:2010/11/29(月) 18:11:27
だからテンプレートと破壊的変更が無い言語は駄目だというんだ
774デフォルトの名無しさん:2010/11/29(月) 18:20:25
で、これって何がしたいわけ?
775デフォルトの名無しさん:2010/11/29(月) 18:33:51
ある関数と特定の引数をセットで取り回せるのが嬉しいのかな?
いちいち構造体作らなくていいし
776デフォルトの名無しさん:2010/11/29(月) 19:08:21
これあれか。エクセルのセルみたいなテーブル作れるのか。

一ヵ所変更したらそれにつられて、ほかの値も自動的(呼び出し時に)に変わるんだな。
つどループまわせばいいだけなんだけど。
777デフォルトの名無しさん:2010/11/29(月) 20:55:01
>>776
違うよ、クロージャを作るってだけだよ。
778デフォルトの名無しさん:2010/11/30(火) 10:45:33
そういうことが聞きたかったの
779デフォルトの名無しさん:2010/11/30(火) 12:36:25
分かって貰うのも一苦労じゃ
780デフォルトの名無しさん:2010/11/30(火) 13:36:28
ideoneの広告でQtがNokiaに買収されていることを知った俺
DはGC周りを整理すればモバイル機器用のミドルウェアを書くには最適だと思うんだがなあ
781デフォルトの名無しさん:2010/11/30(火) 16:28:25
どう整理するか…
782デフォルトの名無しさん:2010/11/30(火) 17:17:57
ミドルウェアだったらCでよくね?
783デフォルトの名無しさん:2010/11/30(火) 17:19:53
言語部分だけ貰いたくてGCイラン場合があるとおもうのですがどうにかする方法ありませんか?
784デフォルトの名無しさん:2010/11/30(火) 17:40:19
GCはクロージャを作るときとかには必要なので
GCだけ切ると言語も変なことになる
注意してGC経由でのアロケートを避けるしかないんじゃないかね
785デフォルトの名無しさん:2010/11/30(火) 17:56:35
配列に ~= するだけでもちょくちょく動いてるしね。
786デフォルトの名無しさん:2010/11/30(火) 18:47:33
ここは男らしくGC.disposeだ
メモリ消費がガンガン増えていく?
男なら細けぇこと気にすんな!
787デフォルトの名無しさん:2010/11/30(火) 18:53:30
IronDマダー
788デフォルトの名無しさん:2010/11/30(火) 18:58:08
delegateやら配列(連想配列含む)やら用に、汎用free関数(static領域を使ってる時はなにもしない)を
用意してくれればいいんじゃなかろうか
789デフォルトの名無しさん:2010/11/30(火) 20:06:32
で、おまえらはGC切れないので、本当に困ってるのか?
790デフォルトの名無しさん:2010/11/30(火) 21:07:09
GC切れなくて困る人の選択肢にDは無いので、GC切れなくて困っている人はいない。
791デフォルトの名無しさん:2010/11/30(火) 21:13:06
システムプログラミング言語じゃないよな
アプリケーション向きだ

GUIライブラリさえちゃんと使えればだけど
792デフォルトの名無しさん:2010/11/30(火) 21:19:26
メモリ制約が厳しい環境に向いてないだけで、
十分システムプログラミング向けだと思うけど。
793デフォルトの名無しさん:2010/11/30(火) 22:37:31
>>784
GCないC++0xにclosure入るんじゃなかった?
794デフォルトの名無しさん:2010/11/30(火) 23:19:08
>>793
C++のラムダは、ローカル変数への参照を持った関数オブジェクトなんで、
一般的に言われるクロージャ(環境付き関数ポインタ)とはちょっと違う。
使うたびに別の型になるしね。

たぶん既存のコンパイラにC言語にない制御構造を追加するのがめんどくさいせい。
795デフォルトの名無しさん:2010/11/30(火) 23:37:15
とりあえず、環境の寿命>クロージャの寿命であることが保障できればGCを使わなくて済むので、
クローじゃの代入による副作用を禁止するか、privateなものにのみ代入できればOKか。
796デフォルトの名無しさん:2010/11/30(火) 23:39:18
いや、そんなんでいいなら、D1のころの実装(クロージャを関数の返値として持ち出せない)でOK
797デフォルトの名無しさん:2010/12/01(水) 00:05:14
DelphiのクロージャはInterfaceで実装されてるな
つまりは参照カウント出来ればいいだけなんだけど
798デフォルトの名無しさん:2010/12/01(水) 00:57:23
ゲーム作ろうぜ!まずはシューティングから

↓どうぞどうぞ
799デフォルトの名無しさん:2010/12/01(水) 01:54:03
ゲームに使えるライブラリが必要だ
800デフォルトの名無しさん:2010/12/01(水) 02:11:18
あったような
801デフォルトの名無しさん:2010/12/01(水) 02:23:02
というかDでSTGもどっかで見たような
802デフォルトの名無しさん:2010/12/01(水) 03:33:53
Dを使いながら自分でメモリ管理したい場合はどうするのが普通ですか?
803デフォルトの名無しさん:2010/12/01(水) 04:40:53
cのmallocを使う
804デフォルトの名無しさん:2010/12/01(水) 09:13:22
mallocを使う前提で便利なライブラリがあれば…
ことあるごとにGC動くからどうせダメか
805デフォルトの名無しさん:2010/12/01(水) 09:36:12
基本GC.disableでかなり頻繁にGC.collectするのってアリかな?
806デフォルトの名無しさん:2010/12/01(水) 10:08:58
>>805
メモリ確保と解放や、動的配列の長さ変更を頻繁にするなら。
807デフォルトの名無しさん:2010/12/01(水) 14:26:01
>>798
データ構造だけやってみた。
http://ideone.com/x9Tdl
http://ideone.com/m7ilj
808デフォルトの名無しさん:2010/12/01(水) 15:57:30
struct std.container.Array(T) if (!is(T : const(bool)));
メモリ制御を deterministicにした配列型です。配列のために割り当てられたメモリは、不要になると直ちに解放されます。
ガベージコレクションに頼ることはありません。Array は malloc と free で独自のメモリ管理を行います。
809デフォルトの名無しさん:2010/12/01(水) 18:17:52
Dであいふぉんとかあんどろいどとかのアプリ作れるん酢かね?
810デフォルトの名無しさん:2010/12/01(水) 19:07:19
もちろん
811デフォルトの名無しさん:2010/12/01(水) 19:15:40
すみません、MySQLドライバなんですが、
-O付きでビルドすると強制終了してしまって困ってます。
-O無し(release、inlineはおk)だと動きます。

何か解決策で思い当たるふしがあれば教えていただけないでしょうか?
また、ソースからpragmaか何かを使用してコンパイラオプションを変更する方法はないでしょうか?
812デフォルトの名無しさん:2010/12/01(水) 19:37:14
思い当たるふし?
俺もdmdの-Oとか-inlineとかには散々苦しめられましたよ…
使わないことで解決した
813デフォルトの名無しさん:2010/12/01(水) 19:52:16
でも最適化しなかったらDじゃなくていいじゃんってのが加速するよね
814811:2010/12/01(水) 20:01:16
(^p^)あうあうあー

・・・と、今c++の方と比較したら構造体のサイズが違うのを見つけました。
まだ何とかなるかもしれないのでがんがります。
815デフォルトの名無しさん:2010/12/01(水) 20:16:40
アラインメント調整だな
816デフォルトの名無しさん:2010/12/01(水) 20:18:25
リンケージの違いとか中途半端に発覚するから困るよな
817デフォルトの名無しさん:2010/12/02(木) 03:11:14
でかい配列を確保すると中身を全部調べるからGCにすごく時間がかかるらしいな…
818デフォルトの名無しさん:2010/12/02(木) 03:12:00
リンケージが違うと有無を言わさず落ちて原因解明に困ったわ
819811:2010/12/02(木) 11:36:03
動いた!
ご迷惑おかけしました。
昔は宣言と定義が一緒だったのかな・・?

alias st_mysql* master;

alias取ったら構造体のサイズが一致して-Oでも動くようになりました。
820デフォルトの名無しさん:2010/12/03(金) 23:18:55
C#のList<T>みたいに使い勝手のいいコンテナないかな(Public Domainで)
821デフォルトの名無しさん:2010/12/03(金) 23:27:46
コンテナライブラリはdcollections一択じゃないの。
ライセンスは2.0ならBoost Licenseだった。1.0はBSD
822デフォルトの名無しさん:2010/12/03(金) 23:51:57
配列最強じゃなイカ
823デフォルトの名無しさん:2010/12/03(金) 23:58:22
後はsetだけあれば万事おk
824デフォルトの名無しさん:2010/12/04(土) 00:18:11
voidな連想配列って使えなかったっけ?>set
825デフォルトの名無しさん:2010/12/04(土) 00:21:40
配列、set、map、リストがあればええんちゃうの
826デフォルトの名無しさん:2010/12/04(土) 00:37:52
voidか盲点
827デフォルトの名無しさん:2010/12/04(土) 04:31:52
std,containerではだめなん?
828デフォルトの名無しさん:2010/12/04(土) 12:58:42
そういえばこれないかなあ
list.remove(obj);
829デフォルトの名無しさん:2010/12/04(土) 20:19:59
immutable int i;
と、
immutable(int) i;
って、違うものだったんだね。(突然)
830デフォルトの名無しさん:2010/12/04(土) 20:23:09
どう違うのかkwsk
831デフォルトの名無しさん:2010/12/04(土) 20:51:55
>>830
immutable int i;
は、記憶域クラス。
immutable(int) i;
は、データ型。

今、例作ってるから待ってて。
832デフォルトの名無しさん:2010/12/04(土) 20:58:08
と、思って例を作ってる最中にだんだん良く分らなくなってきた。
833デフォルトの名無しさん:2010/12/04(土) 21:10:19
えーと、また勘違いで物言ってしまったw
immutable int i;
と、
immutable(int) i;
は意味的には同じですw

immutable int f(){}
と、
immutable(int) f(){}
は、完全に別物だけど。
834デフォルトの名無しさん:2010/12/04(土) 21:25:53
const const(T) f() {}
とかわけわかんないことになるよな
835デフォルトの名無しさん:2010/12/04(土) 22:01:17
>>834
そこらへんの仕様変わらないかな?
すんごくまぎらわしい。
836デフォルトの名無しさん:2010/12/04(土) 22:41:06
>834は
const(T) f() const{}
って書けるからいいや
837デフォルトの名無しさん:2010/12/04(土) 22:51:02
>>836
それはそうだけどさ、
const int* f() {}
って、書いてあったら、
本来はどっちの意味で書かれているのか、見ただけじゃ分らないじゃん。
838デフォルトの名無しさん:2010/12/04(土) 23:07:06
構文解析の定義を見てたら、
int f() pure nothrow {}
って、書けることに気付いた。
http://ideone.com/kBooG

他には、inout shared も、後に書ける模様。
839デフォルトの名無しさん:2010/12/04(土) 23:07:27
>>836
某日本人コミッタは後置きとか統一が取れなくなるから廃止するべきじゃね?って言ってるな
でも後置きすると結構すっきりするから俺は好きだ
840デフォルトの名無しさん:2010/12/04(土) 23:44:54
気づいたらこんなの出来てました。

pure nothrow const const(int) delegate() pure nothrow f() { return delegate const(int)() pure nothrow { return i; }; }

一応合法ですよ。
http://ideone.com/mYR2B
841デフォルトの名無しさん:2010/12/04(土) 23:52:48
synchronizedも入れてやってくれ
842デフォルトの名無しさん:2010/12/04(土) 23:56:48
>>841
え、何の話。
843デフォルトの名無しさん:2010/12/05(日) 01:01:40
>>837
それはint* f() const {}じゃないの?
型にconstを付けたいなら()が出てくるでしょ
844デフォルトの名無しさん:2010/12/05(日) 01:05:21
>>843
もしかしたら間違えて書いてるかも? という話。
845デフォルトの名無しさん:2010/12/05(日) 19:51:20
たまたま覗いてみたんだがstd.fileのgetcwdとかlistdirとかシステムロケールのまま返してるな
誰か、直すか9x系は切り捨てるかしといてくれ
846デフォルトの名無しさん:2010/12/06(月) 01:18:40
sharedとsynchronizedの使い方がわけわからん・・
847デフォルトの名無しさん:2010/12/06(月) 02:11:13
sharedは共有ロック、読取専用にする
synchronizedは占有ロック、書き込みもする為にに一つのスレッドで独占する
848デフォルトの名無しさん:2010/12/06(月) 12:34:57
>>847
二つとも間違ってるって酷い・・・・

>>846
sharedは、データ型修飾(または記憶域クラス)のキーワードで、スレッド間共有をする為の物。
D2では、グローバル変数やstatic変数はTLS(スレッドローカルストレージ)で、
個別のスレッドごとに、実態が一つずつ用意されるけど、
sharedと付けた変数は、プログラム中で実態が一つだけ用意されて、
全てのスレッド間で、その一つの実態を共有するようになる。

synchronizedは、ブロック文と記憶域クラスのキーワードで、同時実行制御をする為の物。
同じ文を異なるスレッド間で同時に実行しないようにする。
マルチスレッドプログラミングを学べばすぐに使い方がわかると思う。
記憶域クラスのsynchronizedを、変数に付けるとどうなるのかは、ドキュメントに書いてないから知らない。

どちらもスレッド機能を使わないなら、いらない物だ。
849デフォルトの名無しさん:2010/12/06(月) 12:40:35
ん?よく見たら>>847のsynchronizedの説明は合ってるかな・・・?
間違ってるなんて言ってすまそ。
850デフォルトの名無しさん:2010/12/06(月) 18:36:21
>>846
sharedとsynchronizedの比較というところから想像するに、クラスの属性か、メンバ関数の属性に関する質問かな?
だとすると、>>848の回答も、合っているけど焦点がちょっとずれている。

クラスとかの属性としてsharedを指定すると、メンバ変数・メンバ関数すべての属性にsharedがつく。
また、sharedクラスは複数のスレッドから参照/更新するために利用されるというドキュメント的な意味もある。
クラスの属性としてsynchronizedを指定すると、sharedクラスに加え、メンバ関数が
synchronizedメンバ関数になる。
sharedメンバ関数は排他処理の管理を独自で行うときに使用するもので、ロックフリーとか
細かくクリティカルセクションを切りたい時に使ったりする。
あとsharedメンバ関数からは、shared型のメンバ変数しか参照/更新できない。
これにもドキュメント的な意味がある。
synchronizedメンバ関数は、sharedメンバ関数に加え、関数に入った瞬間に
クラスインスタンスでクリティカルセクションを作って排他する効果がつく。

ちなみにsharedのあたりはアンドキュメントなので、ウォルター氏とかアンドレイ氏の
スライドとか読まないとわからなかったりする。
長文すみませんでした。
851デフォルトの名無しさん:2010/12/06(月) 20:00:35
sharedとsynchronizedがゲシュタルト崩壊
852デフォルトの名無しさん:2010/12/06(月) 22:35:27
ドキュメント的ってなんやねん。
853デフォルトの名無しさん:2010/12/06(月) 22:48:11
self-documentingってやつ?
854デフォルトの名無しさん:2010/12/06(月) 22:48:42
自己文書化ってやつじゃないの
855デフォルトの名無しさん:2010/12/06(月) 22:57:40
>>850の文脈と繋がらないんだが。
856デフォルトの名無しさん:2010/12/06(月) 23:08:30
いや、繋がってるか?
どっちにしても違和感あるけど。
クラスにsharedと付いてても、クラスの用途はあんまりわからんし。
857デフォルトの名無しさん:2010/12/06(月) 23:10:39
ありがとう
sharedとsynchronized難しいな
858デフォルトの名無しさん:2010/12/07(火) 00:01:47
できるだけDのスタイルガイドに従おうと思ってるんだけど、命名規約に書いてある
「privateメンバ変数以外では、アンダースコア '_' で始まる名前は使用しません」
は、「privateメンバ変数はアンダースコアで始まる名前にする」、と解釈していいのか?
859デフォルトの名無しさん:2010/12/07(火) 00:04:26
普通に読むと、privateメンバ変数のみ'_'で始まっていいよだと思うけど
俺は末尾に'_'派
860デフォルトの名無しさん:2010/12/07(火) 00:13:55
C++だと頭につけちゃいけなかったから俺も末尾派なんだけど、
わざわざ「始まっていいよ」って許可出されるとちょっと深読みしてしまう。
861デフォルトの名無しさん:2010/12/07(火) 02:03:58
       _ _
     r'  lメ、
     / ̄´  \
.  /____  \
. < Y l r‐, r‐,\ /
  \! l ビノ_ヒ'ノ、 Y
    l l  !  !l  l
.   ! !  l  l ! .!
   l l   l  !ノ  !
.   l l  ∠-‐´_ . ;.'
   l,ノ――_二- ´
    ̄ ̄/  \
    _\  /_
    `ー-'  ゝ--'
862デフォルトの名無しさん:2010/12/08(水) 23:37:39
仕事でガリガリ生CやってるとDが神言語に見えてくる
今時Windowsの特に速度も要しないシステムでC言語って…

第一今のCには破壊的変更が無いしなぁ
863デフォルトの名無しさん:2010/12/09(木) 02:09:43
>破壊的変更
まてそれは毒されてる
864デフォルトの名無しさん:2010/12/09(木) 23:33:45
objectモジュールを見ていて思ったこと。
デフォルトのtraceHandlerって、いつ実装されるんだろ?
865デフォルトの名無しさん:2010/12/10(金) 00:34:59
と、思って調べてたらcore.runtimeに発見。
でも、なんでデフォルトで機能させてないんだろう?
866デフォルトの名無しさん:2010/12/10(金) 06:31:23
なにするもの?stack trace?
867デフォルトの名無しさん:2010/12/10(金) 12:53:10
>>866
かもしれないし、違う方法のトレースかもしれない。
でも、外郭だけは実装されてるんだよねえ。(コード見た限りだと、Windowsだけ非対応なのかもしれないがw)

ちょっと前に話題になった、ユニットテストを必ず全実行するコードも、外郭だけ実装されてたな。
次のバージョンは、いつくるのかな?
868デフォルトの名無しさん:2010/12/11(土) 03:06:54
unittestを全部実行するのはもう動いてなかった?trunkだからかな?
869デフォルトの名無しさん:2010/12/11(土) 03:08:09
windowsでのstack traceはわかる人がいないからできてない、みたいな話があったような
870デフォルトの名無しさん:2010/12/11(土) 04:50:16
int型の数値を文字列に変換する方法が分からんですorz
871デフォルトの名無しさん:2010/12/11(土) 05:01:06
import std.conv;
int a;
string s=to!string(a);
872デフォルトの名無しさん:2010/12/11(土) 05:43:27
>>871
サンクス!ベリーサンクス!一晩中悩んでたのが嘘みたいだorz

!の使い方が見慣れなくてポカーンだけど、頑張ってググってみる。
それにしても、前途険しいな・・・・・・
873デフォルトの名無しさん:2010/12/11(土) 06:57:35
to!(string)とto!stringは同じなのでね。
パラメータが一個なら括弧を略せるよ。
874デフォルトの名無しさん:2010/12/11(土) 09:47:40
ググってみて判明、このやけに便利で万能(に見える)何かはテンプレートなんですね。
C++で落ちこぼれるキッカケになった、あの奇怪で憎いあんちくしょうですね?

to!string(a);でint aもC文字列なchar* aも簡単にstringへ変換できる。スゲー!
色んな悩みが一遍に片付いた。

けど、どう動いてるのかサッパリ分かんない\(^o^)/ 頭バーン
http://www.kmonos.net/alang/d/2.0/phobos/std_conv.html
を見てもまったく意味が分からなくてワラタw
875デフォルトの名無しさん:2010/12/11(土) 10:11:45
オーバーロードみたいなもんだ
876デフォルトの名無しさん:2010/12/11(土) 10:34:56
いつの間にかドキュメントにtoImplの群れが…
どういうことなの
877デフォルトの名無しさん:2010/12/11(土) 13:10:19
>>874
こう使うんだよ

auto 澪 = new けいおん!ぽろりもあるよ;
878デフォルトの名無しさん:2010/12/11(土) 13:13:32
>>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){...}
> }
879デフォルトの名無しさん:2010/12/11(土) 13:16:52
>>877
それは例として適切ではないな。

alias けいおん!ぽろりもあるよ 澪;

が、適切。
880デフォルトの名無しさん:2010/12/11(土) 13:34:02
http://www.kmonos.net/alang/d/2.0/attribute.html
何これ
@だの__だのなんでこんなにバラバラなの
きもい
881デフォルトの名無しさん:2010/12/11(土) 13:35:29
>>880
なんでそうなってるだろうね?
まあ、近いうちに調整入るのかもしれないけど。
882デフォルトの名無しさん:2010/12/12(日) 01:30:35
bluetoothAPIs.h やもろもろの Bluetooth 関連のヘッダや.libファイルを
D用に準備して、bthprops.lib をリンクして実行してみたんだけど、
実行時に bthprops.dll が無い、と言われてエラーになってしまう。
調べてみたら bthprops.cpl があって、これが実質の dll 的な
ものらしいんだけど、どうしたものか・・・。
bthprops.cpl をコピーしたものを bthprops.dll と言う名前にして
system32 フォルダに置いておくと大丈夫なんだけど。

coffimplib で .lib を変換したときに、所望の関数は .cpl にある、
という情報が抜け落ちてる感じ・・・?
883デフォルトの名無しさん:2010/12/12(日) 03:40:56
あ、bthprops.cpl に対して GetProcAddress すればいけそうかな・・・。
884デフォルトの名無しさん:2010/12/13(月) 21:33:35
std.container の Array に bool full() とか bool isFull() みたいなの欲しいな・・・
885デフォルトの名無しさん:2010/12/13(月) 23:16:15
phobosのtrunkを
DFLAGS=-unittest -d
でビルドすると
Error: out of memory
って言って落ちるんだが?
DFLAGS=-unittest -d -g
にしたらdmdがクラッシュするし
どうなってんだ
886デフォルトの名無しさん:2010/12/13(月) 23:51:02
     *      *
  *クラッシュ版でク〜+  
     n ∧_∧ n
 + (ヨ(* ´∀`)E)
      Y     Y    *
887デフォルトの名無しさん:2010/12/14(火) 00:06:25
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のを初めて見たときに近い衝撃を感じる。
しかしメモリ管理に合わせて配列の実装を言語上で選べるってのは魅力的かもしれない。
888デフォルトの名無しさん:2010/12/14(火) 01:53:18
そういえば Built-in の複素数って記述の美しさがウリみたいに
書いてあったけど、opUnary の "i" とかでライブラリでも実現できるのかね?
889デフォルトの名無しさん:2010/12/14(火) 02:21:54
std.container の Array の capacity に const が付いてない。。。
890デフォルトの名無しさん:2010/12/14(火) 02:24:45
それ以前に hasElaborateDestructor というのがどこにも定義されてないぞ・・・。
std.container はまだ使えないのか。
891デフォルトの名無しさん:2010/12/14(火) 03:10:49
>>888
どういうこと?
892デフォルトの名無しさん:2010/12/14(火) 04:13:07
>>891
いや、Built-in の優位性を主張(Dの複素数型 vs C++のstd::complex)
していたのにそれを撤回するってことは、妥協的にそれを捨てざるを得なかったのか、
それともライブラリ化しても表現力や効率性を減らさずにいけることに
なってきたからなのか。。。

んで opUnary って何だか自由に演算子を定義できそうに見えたので、
i という単項演算子でも定義すれば複素数をライブラリ化できたりするのかなぁと。

opUnary も完璧に理解してないので妄想に近い感じです。。。
893デフォルトの名無しさん:2010/12/14(火) 04:48:13
>>892
「Dの複素数型 vs C++のstd::complex」の論点は、
一つ目は複素数型だけでなく虚数型単体も用意しろ、
虚数を0+niのペアとして与えると余計な計算や余計な精度落ちが増える、ということ。
C++でもimaginary型を適切に実装すればライブラリ化できる、と書いている。
テンプレートでimaginary(T)型を定義し、
Complex(T)との関係を定義し、
alias imaginary!(double) idouble;
してやれば、あとは接尾辞iの定義をすれば組み込み型の利点を損なうことなくライブラリ化完了。
894デフォルトの名無しさん:2010/12/14(火) 12:25:44
D言語らしく理論的にはすばらしい
895デフォルトの名無しさん:2010/12/14(火) 13:26:15
単項演算子d,e,h,l,o,r,wを定義して
helloworld;
896デフォルトの名無しさん:2010/12/14(火) 15:55:10
やめろ

そんなこと言ってたらウォルたんが何とかして実装しちまうだろうが
897デフォルトの名無しさん:2010/12/14(火) 19:01:34
そう言いながらも影ながら悦んでるんじゃないのか
898デフォルトの名無しさん:2010/12/14(火) 20:48:20
D2 で遊べるようにして最初に感動したのが、
タイプミスを、グーグルさんよろしく、もしかしてこれ?みたいな
コンパイルエラー出してくれたこと。
そこから、既存の識別子に何かくっついてるのくらいは
判定できるんじゃないかと思ったので接尾辞くらいできそうだよね。

そして些細なタイポが有効なコードとみなされて、めくるめく魅惑の
バグ地獄へ誘ってくれるんだろう・・・。
899デフォルトの名無しさん:2010/12/15(水) 00:43:43
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)
にして出なくしたけどこんなところ間違えてるわけないよねと疑心暗鬼
900デフォルトの名無しさん:2010/12/15(水) 07:47:23
Dに限ってあらゆる箇所で疑心暗鬼になる必要があるから疑心暗鬼にならなくてよろしい
901デフォルトの名無しさん:2010/12/15(水) 09:57:59
疑心暗鬼になってたらD使う意味ない罠
Cで充分
902デフォルトの名無しさん:2010/12/15(水) 21:17:59
Complex(Complex(T))で四元数型が出来るな
胸が熱くなるな
903デフォルトの名無しさん:2010/12/15(水) 23:49:04
fibaerをcallするとき、引数を渡すことはできないのでしょうか?
904デフォルトの名無しさん:2010/12/16(木) 09:23:15
できない。自分で一枚ラップするしかないと思う。
905デフォルトの名無しさん:2010/12/16(木) 11:04:19
すみません。構造体のコンストラクタはどう使うのでしょう?
一応下記でコンパイルは通るんですが、呼ばれんとです。

struct hoge{
  this(this) {
    // なんたら
  }
}
906デフォルトの名無しさん:2010/12/16(木) 11:19:35
this(this)はコンストラクタじゃない
this(SOME_TUPLE)がコンストラクタ
this(int a)とかthis(string s)とか
ただしthis()はダメ
907デフォルトの名無しさん:2010/12/16(木) 11:27:22
ぐぬぬ。
初期化が複雑なモノは素直にクラスにするのがいいのかな。
>>906
さんくす。
908デフォルトの名無しさん:2010/12/16(木) 11:31:38
複雑ってのは複数フェーズ必要っていう意味?
それともthis(ここがたくさん)という意味?
どっちにしてもクラスか構造体かを決めるものではないような
909デフォルトの名無しさん:2010/12/16(木) 11:43:13
struct hoge {
Area[AreaID] allArea;
Unit[UnitID] allUnit;
static Area[AreaID] initAllArea();
}

な感じでして、hogeを持つクラスの方に初期化処理を書きたくないなーとか思ったのです。
今考え直すと構造体にする意味もないなーと。。。
スミマセン。
910デフォルトの名無しさん:2010/12/17(金) 01:52:22
Dも型名と同じプロパティ名付けられるようにならないかな
@property Size Size(){return this._size;}

でも構文解析があいまいになるからやってくれないだろうな
911デフォルトの名無しさん:2010/12/17(金) 03:38:24
>>910
メソッドは大文字からだぜ☆
912デフォルトの名無しさん:2010/12/17(金) 04:06:57
ちげーや
小文字からだ☆
913デフォルトの名無しさん:2010/12/17(金) 04:08:05
むしろプロパティの実体のときに困る
914デフォルトの名無しさん:2010/12/17(金) 11:58:26
>>910
で、あちこちで型名なんだかプロパティ名なんだか分からない物が出てくるわけですね。
915デフォルトの名無しさん:2010/12/17(金) 18:32:01
C#にalias thisとmixinがなくて憤死しそうになる
916デフォルトの名無しさん:2010/12/18(土) 21:31:31
2.051はまだか…
917デフォルトの名無しさん:2010/12/19(日) 15:34:26
そろそろ本気でWindowsアプリ用クラスライブラリ整えようか
918デフォルトの名無しさん:2010/12/19(日) 16:40:15
来年になったら本気出す
919デフォルトの名無しさん:2010/12/19(日) 18:34:37
>>918
今日は12月19日(日)ってことは、来週末には本気出すんですね?
920デフォルトの名無しさん:2010/12/19(日) 18:37:31
再来週じゃないんですか?
921デフォルトの名無しさん:2010/12/19(日) 19:52:56
きっと次のバージョンは、クリスマスプレゼントにとってあるんだよ!
922デフォルトの名無しさん:2010/12/19(日) 21:10:50
>>917
ものによる
923デフォルトの名無しさん:2010/12/19(日) 21:29:15
D2.0は次のクリスマスにな、が合い言葉になるんですか?
924デフォルトの名無しさん:2010/12/19(日) 21:54:58
そしてクリスマスから冬休みになるんですね。
925デフォルトの名無しさん:2010/12/19(日) 22:13:15
だから2009年の11月に仕様が固まるって言ってんだろ
926デフォルトの名無しさん:2010/12/21(火) 02:03:19
テンプレートクラスで受け取るクラスをあるクラスの派生クラスに限定する方法ってあります?
if(typeof)だと派生クラスも許容しない・・
927デフォルトの名無しさん:2010/12/21(火) 02:33:50
if(is(T : C))とか?
928デフォルトの名無しさん:2010/12/21(火) 02:51:50
>>927
できた!ありがとう
929デフォルトの名無しさん:2010/12/21(火) 12:57:27
テンプレートで受けた関数を、関数名のstringに変換する方法はありますか?
std.convやtypeidはダメみたいで。

void hoge() {
}
template Hoge(func...) {
 // ここで"hoge"を取りたい。引数や戻り値も必要なのでtemplateにしてます。
}
Hoge!(hoge)
930デフォルトの名無しさん:2010/12/21(火) 14:01:49
template Hoge(alias F) {
enum Hoge = F.stringof;
}
931デフォルトの名無しさん:2010/12/21(火) 14:29:42
>>930
ありがとうございます。
例が悪かったんですが、引数有りだとどうなるでしょうか?
932デフォルトの名無しさん:2010/12/21(火) 14:58:08
お、ParameterStorageClassTupleと組み合わせたら行けました。
ありがとうございました!

alias ParameterStorageClassTuple!(F) pstc;
static if(pstc.length > 0 )
Enum Hoge = F(pstc).stringof;
else
Enum Hoge = F.stringof;
933デフォルトの名無しさん:2010/12/21(火) 17:42:26
http://www.digitalmars.com/d/2.0/changelog.html
d2.051

これといった破壊的変更なし
934デフォルトの名無しさん:2010/12/21(火) 18:42:54
Dが破壊的変更しなくなったら俺は明日からどう生きていけば…
935デフォルトの名無しさん:2010/12/21(火) 18:51:38
と言うかバグ多いな
936デフォルトの名無しさん:2010/12/21(火) 18:58:57
バグ修正重視に方針転換したのな
で、偉大なるstd.datetime様は見なかった事にすると
937デフォルトの名無しさん:2010/12/21(火) 19:21:00
datetimeどこいった
938デフォルトの名無しさん:2010/12/21(火) 19:29:07
ねえねえ、
public { ... import hoge; ... }

public import hoge;
って別物だよね?
なんか他人のそういうコード見つけちゃって勘違いしてるのがどっちかわからないんだけど
939デフォルトの名無しさん:2010/12/21(火) 19:38:02
そのくらい試せよと思ってやってみたら同じだった
違ったら紛らわしいからこのままでいいと思うよ
940デフォルトの名無しさん:2010/12/21(火) 19:38:12
public importってそれで一つの予約語なんだっけ?
static thisとかはそのはずだけど
941デフォルトの名無しさん:2010/12/22(水) 00:35:15
構造体かどうか判定する方法はズバリ
942デフォルトの名無しさん:2010/12/22(水) 00:53:14
ズバリ
943デフォルトの名無しさん:2010/12/22(水) 03:38:30
正解はTwitterで!
944デフォルトの名無しさん:2010/12/22(水) 04:02:13
あれ?abc_じゃなくて_abcがメンバなのか?
945デフォルトの名無しさん:2010/12/22(水) 04:54:40
>>944
>>858-860
まあ好きにしろって感じだな。
946デフォルトの名無しさん:2010/12/22(水) 05:12:41
今回の目玉は-m64と、
datetimeとbase64のreplaceか
947デフォルトの名無しさん:2010/12/22(水) 08:44:13
>>941
is ( Type == struct );
948デフォルトの名無しさん:2010/12/22(水) 15:25:29
あぶねぇあぶねぇ、エラー3個だけだったぜ
949デフォルトの名無しさん:2010/12/22(水) 23:49:28
>>948

くそ・・・! 俺なんか0個で土俵にすら上がれなかった・・・!
・・・精進します。
950デフォルトの名無しさん:2010/12/22(水) 23:56:35
ちなみに順位をつけると
 コンパイルエラー < コンパイラクラッシュ < 実行時クラッシュ
ってな感じ?
951デフォルトの名無しさん:2010/12/23(木) 00:07:39
一瞬実行時クラッシュの順位がなんでそんなに高いんだと思ったが
コンパイラが丁寧に罠を仕込んでくれるアレですね
952デフォルトの名無しさん:2010/12/23(木) 00:10:02
>>947
ズバリありがとうgj
953デフォルトの名無しさん:2010/12/23(木) 00:18:07
たまにis式が全能に見える
954デフォルトの名無しさん:2010/12/23(木) 01:01:55
>>953 なんでもやってのけるよな
955デフォルトの名無しさん:2010/12/24(金) 20:28:22
wxDってD2に対応してないのか...
→じゃあwxWidgetをC++から呼び出せばいいんじゃね?
そんで、それを独自にD2から呼び出せばいいんじゃね?
→あれ?これwxDとやってること同じじゃね?
→つーか、DのC++へのインターフェイスがしっかりしてればこんなに苦労しなくてもいいんじゃね?
→さっさと対応しろやゴルァ!!
956デフォルトの名無しさん:2010/12/24(金) 21:07:15
D2対応してたよ
昔は
957デフォルトの名無しさん:2010/12/25(土) 00:22:03
俺はD言語とクリスマスを過ごすわ
958デフォルトの名無しさん:2010/12/25(土) 01:28:51
あしたからほんきだす。
959デフォルトの名無しさん:2010/12/25(土) 20:04:55
そろそろ本気になるのか
960デフォルトの名無しさん:2010/12/25(土) 21:42:18
おれはほんきだぞ。いいのか。
961デフォルトの名無しさん:2010/12/25(土) 23:47:44
おまえらが本気になったら俺も本気になる
962デフォルトの名無しさん:2010/12/26(日) 05:35:35
行き止まり感どうにかならんの
963デフォルトの名無しさん:2010/12/26(日) 10:28:31
破壊的変更が無くなるのは良いことじゃないか
仕様が固まれば普及するよ
964デフォルトの名無しさん:2010/12/26(日) 10:31:35
たしかに仕様がいつまでも固まらないのは嫌だな
965デフォルトの名無しさん:2010/12/26(日) 11:57:52
D3期待sage
966デフォルトの名無しさん:2010/12/26(日) 15:47:29
D2の仕様が固まっても、D使いが食いつくのは破壊的変更の繰り返されるD3になるんだろうな
現状のD1とD2の関係みたいに
967デフォルトの名無しさん:2010/12/26(日) 16:13:24
つーか現状でも1.0使ってる奴がまだいる、みたいなことになるから
正直なとこ安定バージョンとか作らないで欲しいくらいだ。
968デフォルトの名無しさん:2010/12/26(日) 16:37:42
本当はD2使いたいけどライブラリが…
あまつさえtangoとか死んでも使いたくないけどライブラリが…
969デフォルトの名無しさん:2010/12/26(日) 16:40:28
version(DMD2xxx) {
  ...
}
version(DMD2xxy) {
  ...
}
970デフォルトの名無しさん:2010/12/26(日) 22:17:43
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");
}
971デフォルトの名無しさん:2010/12/26(日) 22:33:39
2.050までだとUTF8文字列とUTF16文字列の比較って一致するの?
972970: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つけても動かんのはわけわからん。
973デフォルトの名無しさん:2010/12/27(月) 00:57:45
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");
}
}
974デフォルトの名無しさん:2010/12/27(月) 22:39:25
975デフォルトの名無しさん:2010/12/28(火) 10:46:49
すみません、オーバーロードした関数をテンプレートへ明示的に渡す方法はどうやるのでしょう?
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"が渡されてしまう
}
976975:2010/12/28(火) 10:56:37
ついでに次スレ立てときました。

D言語 Part26
http://hibari.2ch.net/test/read.cgi/tech/1293500945/

更についでに>>972検証。
Linux DMD2.051 で"D"です。
977デフォルトの名無しさん:2010/12/28(火) 12:22:23
>>975
まず、functionじゃなくて、delegateじゃないだろうか?

次に、テンプレートのインスタンス化の時に、!()には変数の値は渡せないぜ?
(コンパイル時に決まる、整数型・浮動小数点型・文字列型は除く)

もし値渡しをやるなら、テンプレートの宣言は、
void func(F...)(F f) もしくは void func(alias F...)()
と、するべき。(後者は厳密には値渡しじゃないが)
今回は後者にすれば解決?
978977:2010/12/28(火) 12:24:01
あれ・・・ タプルとaliasは同時に宣言できないのかな・・・?
まあ、いいや。
979977:2010/12/28(火) 13:37:33
>>975
aliasは式に対しては使えない、という仕様に阻まれたが、何とか物が出来た。
http://ideone.com/TyNL4

こういう事がしたかった訳じゃ無いのかもしれんが、個人的には満足。
980デフォルトの名無しさん:2010/12/28(火) 14:32:10
>>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のように型タプルを取り出すのではなくフィールドのシンボル一覧を取り出すようなものはありますか?
982デフォルトの名無しさん:2010/12/28(火) 15:41:07
これ?
__traits(allMembers, T)
983デフォルトの名無しさん:2010/12/28(火) 16:17:50
>>982
自分が定義したクラスのメンバ関数等を除くフィールドのみを取得したいのです。
allMembersだとメンバ関数やコンストラクタ等、余計なのが取れてしまって具合が悪いんですよね。
984977:2010/12/28(火) 17:06:29
>>980
まさかの難題。
ウォルたんに聞けば一発なんだろうけどなー。英語出来ないしなー。
もう少し調べる。
985977:2010/12/28(火) 17:25:36
>>980
って、結局テンプレートの使い方間違ってただけかいwww
http://ideone.com/Cdb5u
986977:2010/12/28(火) 17:40:07
オーバーロードした関数同士って、アドレス同じなんだねえ。
http://ideone.com/sU3ar
987デフォルトの名無しさん:2010/12/28(火) 17:50:52
dlua死んでると思ったらluadってのが活発になってる。
これだからDはやめられんぜ。
988977:2010/12/28(火) 17:57:14
>>980
http://ideone.com/lpyz7

え?こんなのいらない?
989980:2010/12/28(火) 18:09:45
すみません、大掃除で帰宅後確認しますです。助力感謝!
990デフォルトの名無しさん:2010/12/28(火) 18:15:18
>>986
なにこれこわい
991デフォルトの名無しさん:2010/12/28(火) 18:23:23
>>986
これは関数情報が入ってる構造体(thisと関数が入ってる)のアドレスじゃないかな
f.funcptrに関数そのもののアドレスがある
992デフォルトの名無しさん:2010/12/28(火) 18:37:01
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
993デフォルトの名無しさん:2010/12/28(火) 18:43:54
>>992
今更かよwww
994デフォルトの名無しさん:2010/12/28(火) 19:55:43
Dが人類の枠を超えてる事なんて周知の事実だと思ってた
995デフォルトの名無しさん:2010/12/28(火) 20:15:15
ピロートーク
996977:2010/12/28(火) 20:57:24
>>991
ホントだ。
http://ideone.com/5H4fI
997デフォルトの名無しさん:2010/12/29(水) 05:43:51
>>前スレ970
ttp://d.puremagic.com/issues/show_bug.cgi?id=5381
switchのバグはtrunkで修正された
998デフォルトの名無しさん:2010/12/29(水) 05:48:37
ごめんスレ間違えた
999デフォルトの名無しさん:2010/12/29(水) 09:28:57
1000デフォルトの名無しさん:2010/12/29(水) 09:30:10
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。