3 :
1 :2010/12/28(火) 10:54:08
Eclipseスレ無くなってるっぽいけど消しても良かったかな… 他にもリンク切れあったらスマソ
このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所
5 :
977 :2010/12/28(火) 12:27:17
ここはアイちゃんが来ていい場所ではありません。
977 デフォルトの名無しさん [sage] 2010/12/28(火) 12:22:23 ID: Be:
>>975 まず、functionじゃなくて、delegateじゃないだろうか?
次に、テンプレートのインスタンス化の時に、!()には変数の値は渡せないぜ?
(コンパイル時に決まる、整数型・浮動小数点型・文字列型は除く)
もし値渡しをやるなら、テンプレートの宣言は、
void func(F...)(F f) もしくは void func(alias F...)()
と、するべき。(後者は厳密には値渡しじゃないが)
今回は後者にすれば解決?
7 :
デフォルトの名無しさん :2010/12/28(火) 21:20:50
下記のCTestのようなクラスでmNumやmTextのみを抽出したいんだけど何か良い方法あります? allMembersで取り出したタプルに対してisSomeFunctionで判定しようかと思って下記の様に書いたらコンパイルエラーになったのでどうしたものかと。 class CTest{ int mNum; string mText; void Function(){} } void main(){ foreach(mem;__traits(allMembers, CTest)){ static if( !isSomeFunction!(__traits(getMember, CTest, mem)) ){ // Todo! } } }
>>7 何でそんなまわりくどい方法でやろうとしてるの?
9 :
8 :2010/12/29(水) 00:33:32
>>7 もう一度見返してみたけど・・・
とりあえず、static ifを動的に使おうとしてコンパイルエラーになってるのはわかった。
で、やっぱり疑問になるのは、なぜわざわざそんな方法でメンバ関数を特定しようとしてるのか、という所だ。
インターフェイスやデリゲートを使って、使用できる関数を知らせるのじゃダメなのだろうか?
・・・ん?そうじゃなくて、クラスのフィールドを抽出したいの?
だったらもっと簡単な方法があるな。 つ[ .tupleofプロパティ ]
10 :
8 :2010/12/29(水) 00:40:29
てか、よく見たら__traitsも動的に使えないのな。
D言語逆引き作ろうぜ ・コンテナからの追加削除検索 ・テンプレート ・実行時型情報 ・etc
もう時代は Windows = C# Mac = Objective-C サーバーサイド = Java or PHP になってて D言語なんてもう日の目を見ることは 絶対にないから。
日の目を見るより破壊的変更をくれ!
Dは遅すぎた
開発者サイドならともかく、このスレに居る人間って別にDが著名になればいいとか思ってないよねえ。
D言語でプログラムを組むことによって 破壊的変更毎にプログラム全体を見直す必要が生ずる。 これにより同じアルゴリズムを何度も眺めることになるのだが、 この行為はプログラマにとってアルゴリズムの反復学習として機能する。 上記より私はD言語の履修を学校教育に強く勧めたい。
22 :
デフォルトの名無しさん :2010/12/29(水) 16:41:28
>>7 フィールドの名前なしでいいなら
>>8 の通り.tupleofを使う、名前ありなら下のコードで可能
class CTest{
int mNum;
string mText;
void Function(){}
}
void main(){
foreach(mem;__traits(allMembers, CTest)){
static if (is(typeof(mixin("&CTest." ~ mem))))
pragma(msg, "f ", mem);
else
pragma(msg, "@ ", mem, ", isType = ", mixin("is(CTest." ~ mem ~ ")"));
}
}
interface Object.Monitorが出てきたのでisType==falseではじく必要がある。
あと、__traitsで取ってきたタプルをforeachで回すと、ループ内のコードはコンパイル時に評価される。
ので、
>>7 のコードは考えとしては正しい。
すまん、書き込むの久しぶりだったのでsage忘れた。
毎年恒例の元旦update。楽しみにしてるぜウォルたん
3か 3なのか 3が来るのか
いやそれは喜ぶべきことなのでは
外道てw
慈善活動のひとか
ジェネレータのネーム貼りロジックが甘いようだな 誰か改善してやれよ
構造体の継承とインタフェース実装ができればいいのに
いや、それは素直にクラス使えよwww
構造体をアダプトしてクラス化するテンプレートがあればいい 値型のまま扱いたいのならconceptくさいなにかになるんだろうけど。
だからクラス使えってwww
2.051落としたらwindows\binに.exeなるファイルが入ってる なんだこれ
dmd2.051.zip .exe
import std.string; void main() { const(string) a = "a"; "a".startsWith(a); // compile error splitlines(a); // compile error } たぶん他の関数もそうなんだろうけど ちょっと前までは通ってたはずなんだよなぁ…
C:\> type w.d /// --- /// string foo = ")"; /// --- void main() {} C:\> dmd -D -w w.d w.d(4): Warning: Ddoc: Stray ')'. This may cause incorrect Ddoc output. Use $(RP AREN) instead for unpaired right parentheses. おいィ?
だーいぶ変更加わってるみたいだね phobosから.dが消えて.diだけになったのは今回?
>>38 ) の代わりに $(RPAREN) 使えだとさ
丸カッコ ( ) はDdoc用コメント中では特殊文字扱いだぜ
>>40 ああ、そうだったのか
どうせdmdだしと思ってまともにメッセージ読んでなかった
ごめんよ
42 :
7 :2011/01/01(土) 15:43:11
>>22 おおー、ありがとうございます。
取得したtupleをなんでforeachで回せるのかは疑問だったんだけど、
static foreach的な構文を使わなくてもコンパイル時に実行される
んですね。
importとかコメント置く位置によって動作が変わることがあるんだけど。。。 外部ライブラリのクラスのデストラクタが自動で呼び出されないとか。 マニュアルにはimportする順序は動作に関係無いみたいなんだけどなぁ。
そういう意味不明な動作はポインタの操作を間違えて 変な所にアクセスしてるせいかもしれない 最近の言語はそういう事とは無縁だけどDだと発生するから困る
D Programming Advent Calendar 2010というのがあったような気がしたがそんなものはなかった
今日からAdvent Calendar 2011を始めたら年末までには25人集まるんじゃないだろうか
Dプログラマって25人もいるの?
技術を発信できるレベルの人が25人も居るかどうか
その25ってのは、なんらか意味のある数字なのか?
最近流行りのアイドルグループの過半数を超えている
なんだっけそれ A.K.D 48だっけ
TDPLの和訳はいつ出版されるのん?
残念ながら… 売れないもんなあ
ですよねー(´・ω・`) D友のTDPL第13章和訳みてすごい面白かったから出ないかなぁと思った Dに留まらず、他の言語にも適用可能な考え方とかも書いてあって結構な良書だと思うんだけどなー
なんかいきなりほったらかしのライブラリが整理っていうか処分され始めたな
traitsを使ってクラスのディープコピー用のcloneメソッドを
作ろうと思ってるのですが、うまくいきません。
http://ideone.com/TCR8r 上記のコードでcloneが実装されているフィールドはclone呼び出し、
それ以外は=で代入という処理をしてます。
これだと組み込み型や配列でないユーザー定義型はディープコピー
できるのですがユーザー定義型の配列のディープコピーができ
ないのですが何か良い方法ありますでしょうか。
std.traits.isArrayでtrueだったら新しく配列作って各要素をディープコピー 俺も同じ事やろうとした覚えがあるけどデフォルトコンストラクタの無いクラスで詰んだな
tangoの存在はさておき出すならとっとと1.0出してくれないかなぁ
過去ログのdatを全廃棄するかも、なんて話があるので、 スレの過去ログが必要って人は今のうちに保存しておいたほうがいいかも
なんか過去スレ表示されないなぁ
Reiserさんが(社会的に)突然死しちゃったらReiserFSも死んじゃったね。
突然Dが完成する
打ち切り御免
andreiがコンパイラ担当になって大規模に手を入れ始める
andreiタソのリミッターが解除されてDがさらに進化するだけだな
仕様から消える予定なのってどっち? 1. scope class A{} ← 2. class B{} scope B b; ←
2 でも2が消えたら1も消えるんじゃ?
3. Mutex m = new Mutex; lock(m); scope(exit) unlock(m);
>>72 これは消えないって誰か前スレで言ってた気がするよ
スコープガード文が無くなったらDを使う理由の3分の1が消えちゃう
allMembersで取得した関数がprivateか否かを判断する方法はありますか? staticとか何とかは見つかるんですが…
探しても無いなら無いんじゃねーの。
Dって探しても無い機能は結構あるけどな
なんのために?
仕様変更に対応するために 仕様が確定するまで手を付けないのは よくあること
80 :
75 :2011/01/14(金) 12:36:41
無いかぁ…とりあえずfinalつけて判別しました。
ごめん78は75に
別モジュールからそのメンバにアクセスするコードを書いて isで失敗したらprivate… うん、自分で書いてて無茶だと思った
インターフェイス使えばいいのに。
84 :
75 :2011/01/15(土) 03:33:24
>>81 今作っているのがLuaを使うプログラムでluadを使用しています。
この子がluaへクラスとメンバ関数を渡す処理を自動化してくれるんですが、
その際allMembersで関数全部を渡してくれると。
d側で使用する関数は渡さないようにしたいわけで、
フツーに考えてprivateだよなぁって流れです。
LuaDすごいなこれ。新次元すぎてわろた
なるほどインターフェイス使えばいいのに。
dmdがまともなエラーメッセージ出すはずがないと思って読み飛ばしてたら 実は内容も行も正しくて時間無駄にした…
>行も正しくて えっ?!mjd?
一体いつの時代の話なんだ。
dinstaller.exeでdmdとdmd2を両方を一気にインストール出来たのですが、 dmd2を使うにはどうしたらいいのでしょうか?
フルパスでdmdを呼ぶかパス通すといい
>>92 コマンドで切り替えられたりしないんでしょうか?
普段D1なのでD2をdmd2にリネームして使ってる DWTさえD2で使えればD1捨てで何の問題も無いのに…
D2はD1との連携を考えるべき
よく知られている方法はないんでしょうかねぇ? とりあえず環境変数を切り替えられるwshを作って見ました。 コマンドラインでは出来ないけど、、、。 これをクリックすればバージョン変えられます。xpで動作してます。 envd.wsf <?xml version="1.0" encoding="Shift_JIS" standalone="yes" ?> <package> <job id="environment"> <?job error="true" debug="true" ?> <script language="JScript"> <![CDATA[ var WshShell = WScript.CreateObject("WScript.Shell"); var WshSysEnv = WshShell.Environment("SYSTEM"); var path = WshSysEnv("PATH"); var m2pos = path.match(/.*\\dmd2\\/)[0].length; var m1pos = path.match(/.*\\dmd\\/)[0].length; path= path .replace(/\\dmd2\\/,"\\dmdtmp\\") .replace(/\\dmd\\/,"\\dmd2\\") .replace(/\\dmdtmp\\/,"\\dmd\\"); WshSysEnv("PATH")=path; if(m2pos < m1pos) WScript.Echo("change version 2 to 1"); else WScript.Echo("change version 1 to 2"); ]]> </script> </job> </package>
んな面倒な今年なくても普通にパス通してsubstで切り替えれば良い
俺はdmd1.0はdmd1にaliasして使ってる dmd2.0を使いたいときはdmd source.d dmd1.0を使いたいときはdmd1 source.d
要は ruby の rvm があるといいなと
Dのライブラリって生きてるんだか死んでるんだかよくわからないのが多すぎる
半生状態なんじゃ?
103 :
75 :2011/01/17(月) 14:55:27
>>86 一度目は理解できずにすみませんでした。
luadを若干変更することで対応できました。
ありがとうございます。
104 :
デフォルトの名無しさん :2011/01/17(月) 18:40:43
std.algorithmは好調みたいだな。よかった
std.stringが解体されていく
D言語のライバルはGo言語なの?
そんなの言われてたこともあったなあ
Dのスレってもうここだけになったの?
DとGoとではどっちがぐぐりやすいかって話か
GoはワクワクしねえDはワクワクするそれだけだ
Goは実行速度が遅いからな それだけで不合格
合体してDoとかにならないの
それってDoよ
GoD言語だろ
逆にくっつけてドゴォォ言語とかに
アンサイクロペディアに 闇プログラマはDを使うと書かれていましたが これは本当ですか?
闇プログラマ?何じゃそりゃw
__TIMESTAMP__の代わりに日時のシリアル値をくれるトークンはないものか 好きなようにフォーマットしたいんよ いや文字列を解析してシリアル値にしてから改めてフォーマットすればいいのか? CTFEでやれそうかな
functionとdelegateって使い分ける必要あります? functionはポインタひとつ分節約できるとかそういうレベル?
Cなんかとの互換性のためだから普通はdelegate使う 統合されるって話もあった気がする
functionとdelegateの互換性制限は緩和されるとか10年くらい前に聞いた気がするな
linux64bit版はいつまで工事中なんだ
またFedoraのバグが大量に増えるのか
yum install ldc
D言語つったらD1+Tangoに決まってるだろヴォケ 破壊的変更なんぞシラネー と息まくにわかが増えるのか
DFLのD&Dバグの何とかならんかなー Windowsに特化してるのに GCとめて回避とか納得いかんざき それとドロップしたファイルがなぜか たまにデスクトップに移動してることがあるバグもなおs(ry
ええい誰かDFLのコミット権を手に入れられんのか
DFLってLGPLだから
>>131 がリポジトリこぴってクローン作ればいいのだ…
zlibライセンスでもいいんじゃなかったっけ
+オリジナルライセンスのトリプルライセンスだね
>>130 d2だとGCとめても・・・
修正パッチどこかに置いておくだけでもいいんじゃないですか?
少なくとも自分は大いに助かる
>>132 困っているので手は入れたし
されど全体を見渡すほどの余力もなし
って感じ
オプソなんてそんなもんなんじゃないの 気づいた人が報告して、直せる人が直すっていう
DFL exampleすらまともに動作しないんですがどうしましょう
一部はちょっと手直ししたら動くんだぞ Dのライブラリとしては上出来じゃないか
ドラッグドロップだけはどうにかしてほしい
import std.stdio; void main() { auto hoge(T)(T a, T b) { return a~"."~b; } auto f = mixin(hoge("12", "34")); writeln(typeid(f), ":", f); } 文字列mixinって値的に使えるんだな。初めて知った。 というかその発想がなかったわー
>>142 じゃあ次のアップデートでそれなくします
その代わりにどんな断片的な文字列でもmixinできるようにします
使わないと思うけどimport式ってのもあったり。
画像リソースを取り込んだりするのに使える
頭いいな
mixin(import("stdio.h")); void main() { printf("hello, world!\n"); }
なんてことを・・・
コンパイルタイムhtod
前スレかなんかで話上がったけどみんなどうぞどうぞ状態で誰もやりたがらなかったやつか・・
コンパイル遅くなるのは勘弁なんで、ふつーのhtod欲しいです。
>>153 .dも吐くようにして.hと同名の.dがあれば.dをimportするようにすればいいんじゃね
>>154 Dの外部ライブラリと比べればCのライブラリを使う方が圧倒的に多いんで
実現できるならぜひ欲しいな
自己レス流行ってるのか?
DMD2.051なんですが、 -inlineの有無でコンパイルが通ったり通らなかったりします。 どのような原因が考えられるでしょうか? こんな感じのコードなんですが・・・ class Stage { Unit[UNIT_ID] unit; Unit[ENEMY_ID] enemy; } class MyStage : Stage { void update() { foreach(u; units) { } foreach(e; enemy) { // ←enemyを使用するとエラー。コメントアウトでコンパイルが通る } } }
158 :
157 :2011/01/31(月) 16:14:03
すみません、正しくはリンクエラーで undefined reference to となります。 エラー時に指定されている行番号がforeachの行で、 enemyを使用している箇所をコメントアウトするとコンパイルが通ると。。。 元々リリース用ビルドで作成していて、 気がついたらデバッグ(-inline無し)でリンクエラーになるようになっていました。
stage.dをコンパイル&リンクしていないんじゃないかな。 mystage.dだけdmdに渡してる場合そういうことになることもあるかと思うが。
dmdで-inlineとか-Oとか使うのは勇気ではない それは無謀というのだ
俺無謀だったんだな・・
いいじゃない。蛮勇上等!
nazomen二等兵の戦死まだ?
164 :
157 :2011/02/01(火) 00:41:20
>>159 リンカに存在していることは確認済み、
順序を入れ替えてもNGでした。
>>160 -inline有りでNGならまだ良いんですが、
無しでNGなので困ってます。。。
うーん、階層が深すぎるかなぁ・・・
Java風にco/jp/hoge/app/・・・な感じでmodule切ってるんですが。
今俺†階層指向プログラミング†って言葉を発明した
うがーーー luad、本体のGCであぼんorz
おすすめの汎用ddocファイルとかどっかに配布されてない?
ずっとdwt+d1でGUIやってたけど限界が見えてきた(忍耐力的な意味で) もう.NETでいいんじゃないかな
ネイティブなバイナリであることに拘らないなら
D2でGUIライブラリの再発明してる俺乙だな
実用面なら.NETだろうけど遊ぶならDだよね・・・
Dは下手なスクリプト言語以上に短く書けるのがいい C#で20行くらいのコードならDなら2行で書けるね。たぶんだけど
ネストを深くしないようなスコープガード文って他の言語にあるの? これが最高でDやめられないんだけど
>>168 Qt4 もあるしな
D は色んな意味で遅過ぎた
残念だけど
終わった雰囲気出すのは病めようぜ
終わってんじゃん 漏れの中ではな
まあ、ネイティブコンパイラなんて今後汎用PCでは必要とされないかもね。 D言語は組み込み用途のC言語置き換えを担ってる。 今のところ敵はいないし(Go?)
Goはライブラリ揃える人がいないから普及しないよな DはCの豊富なライブラリが利用できるからこれから流行る はず・・・
GoはGoogle自体普及させる気があるのか判らん
☆ チン ☆ チン 〃 ∧_∧ ヽ ___\(\・∀・) <DのIDEまだー? \_/⊂ ⊂_ ) / ̄ ̄ ̄ ̄ ̄ ̄ /| | ̄ ̄ ̄ ̄ ̄ ̄ ̄| .|
Dほど堂々とC置き換えを宣言した言語はないね。 C++は名前の通り単なる拡張だったし。
まあ、やり過ぎて殆ど別の言語になったとも言えるがな → C++
流行り廃りもそれなりに意識はするけど、やっぱ触ってて楽しいってのが一番だな Dほどしっくりくる言語は今のところない
Cのライブラリがどんどん使えるから どれだけDのライブラリ群が使い物にならなかろうと 実はライブラリ面ではあんまり苦労しない やっぱり問題なのはGUIライブラリみたいな巨大な奴
ソース書いてて、ここの処理を後で改良しなきゃ、ってときに 以下の mixin を使って記述しておいてるんだけど、 __FILE__ と __LINE__ を書かなくてもちゃんと mixin した場所を 出力されるようにできないかな? D2 なら動くはず、と思ってたんだけど、やっぱり駄目みたい。 template CompileMsg(string MSG, string FILE = __FILE__, int LINE = __LINE__) { pragma(msg, "CompileMsg = " ~ FILE ~ "(" ~ LINE.stringof ~ "):" ~ MSG); } 〜ソース中で〜 mixin CompileMsg!("FIXME:bug", __FILE__, __LINE__); ←これならうまくいく。 mixin CompileMsg!("FIXME:bug");←本当はこうやって __FILE__ などを省略したい。
__FILE__ と __LINE__ を CompileMsg の引数じゃなくてブロック内で直接使っちゃ駄目なんだっけ?
うん、どうしてもテンプレートを定義した場所の情報になってしまう・・・。
それ前スレで 「なんで仕様にはテンプレートがインスタンス化された場所の ファイルと行になるって書いてあるのにならないの?」 「バグだよ」 という流れを見た気がする
そりゃ mixin があるから #define いらねーよ、というのを 真っ向から叩き潰すバグだな。 最上級優先で対処すべきD崩壊因子バグだな。
190 :
デフォルトの名無しさん :2011/02/05(土) 22:06:25
>>190 一般的な目で見れば、そう言われたことなんてただの一度もないな。
D言語やってた層とDelphiやってた層ってなぜか一致するんだよな
うそつけ
わからんでもない
Delphi層はC#に流れてるんじゃないか?別に根拠はないけど。
ポトペタのDelphiとポトペタなんて夢のまた夢のDって最も遠い存在じゃないか?
言語機能のこと言ってるんじゃないの?
Delphiをつくっていたやつが引っこ抜かれてC#つくったとかBorland信者の友人が言ってたな。
個人的にDの次によさげなのがC#だけど 凶悪なテンプレートとか考えるとDの方が3歩くらい先を行ってる C#はすでに崖っぷちだ
アンダース・ヘルスバーグ
C#は酷いことになってるよね C++なんて負の遺産を抱えてるから・・・
DelphiもDelphiで、TurboPascal時代の古い機能が溜まっていって結構ひどいことになってるけどな。 機能的には関数として書くか式として書くかの違いしか無くて同じように使える関数内関数とクロージャに互換性が無いんだぜ、信じられるか……?
Javaは安定してるというがそんなことはない 1.5で予約語が増えたから既存コードが微妙にコンパイルできなくなった おまけにJ#とかDalvikとか亜種がいて本家とは互換性が無いと来てる ひどい言語だ
もう新しい言語作らないでください。 Dで終わりにしよう
D3マダー?
D3はプリプロセッサがついて文字列mixinがグレードアップ クラスを値型としても使えるようにし、多重継承にも対応 そして不評のGCは排除してphobosには標準コンテナライブラリが入る上、 Cのコードを直接書けるようになる
びっくりするほどC++!
208 :
デフォルトの名無しさん :2011/02/06(日) 22:38:30
D++ですね。わかります。
内部で勝手に new したりしないコンテナライブラリが欲しいなぁ。
>>209 ポリシーで分けるようにしたらいいんじゃないかな
シンボルが見つからない時のコンパイラさんのサジェスチョンがさり気に性能良くなってるな
TypeInfoの値に関して、それがclassかstructかとか判別するにはどうすればいいんでしょうか?
bool isClass(TypeInfo info){ return null !is cast(TypeInfo_Class)info; }
>>209 dcollectionsって自分でアロケータ設定できなかったっけ?
「newしたりしない」ってのがどこまでのこと言ってるのか分からんけども
>>209 最近、公式のガベージコレクションのドキュメントに、GCを使うDの操作って項目が追加されてたの知ってた?
まあ、勝手にnewとか言ってる時点で、GCのことよく分って無いんだろうけど。
217 :
209 :2011/02/07(月) 22:23:48
うん、GC のことはいくら説明を読んでも使いこなせる気がしないってのが 正直なところかなぁ。 使わなくなったポインタは null を代入しておけば良い、というのを 読んで、それをやってみたりもするんだけど、微妙な不安感が・・・。 コンテナとは違うけど、std.string はソース見てみるとドンドコ new してる のを見て不安になったり・・・。 だからゲーム開発でよく使う、固定サイズのバッファを 渡して使うコンテナ、というのはすごく安心できるんだよねぇ。 これ以上追加できないってときには assert で止まってくれていいから! みたいな。 気持ちの問題かしらん。 dcollections はちょっと見てみます。ありがとう。
俺も昔はそうだったから気持ちは分かるが、割り切れ メモリなんて丁寧に管理してやるよりGCに任せた方が安全だと
>>217 固定サイズのバッファを使いたいなら、静的配列使えばいいじゃない。
220 :
209 :2011/02/08(火) 08:01:32
趣味で PC 上で動くアプリ書くだけなら割り切った方がいいよね。
仕事でも使えたらなぁ、という妄想をしてしまうけど、
GC にべったりである限りはそれもできなさそう。
>>219 うん、静的配列を使って push とか pop とかできるコンテナを
書いてます・・・。
今時GCがない環境での仕事の方が少なそうだけども D言語はCoWな方針だからstd.stringの実装で基本newなのは仕方ないね InPlace版かバッファ渡す版を用意すればそれで解決な気もする
そのためのRange・・・とか超適当な事言ってみる
テンプレートとスコープガード文のあるC言語みたいに使えばいいんじゃね?
225 :
209 :2011/02/09(水) 03:08:55
>>221 どうもありがとう。確かに難しく考えすぎかも。
もう一度読み返して勉強してみます。
ちなみに仕事はゲーム機関連で、メモリ管理も
ヒープをどーんと確保してそこから new し、
シーンを移るときはそれを一括で削除
するので、スマートポインタや参照カウンタはおろか、
デストラクタすら書く必要無いような作り方してる。
だからメモリ残量での苦労はあっても
メモリ管理で苦労した記憶はあまりないんだよね。
似たようなことが D 言語でも出来るなら何も問題は無いかも。
>>225 GC使ってるからって、大量のメモリを確保できない訳でもなく、大量のメモリを解放出来ない訳でもないから、そこは問題ないね〜。
むしろ、GC自体が使うメモリの消費を許容できるかどうかの方が重要だろう。
spawn(&func, socket.accept()); とか出来ないですが、どうすればいいんですか?
>>228 エスパーすると、funcの定義が void func(Socket); じゃ無い。
ちゃんと回答が欲しいなら、エラーメッセージを出すべし。
↓ これって仕様なの? めまいがするぜ void main(string[] args) { string cba = "CBA"; cba.sort; writeln(cba); // ABC assert(cba != "CBA"); // assert failed! }
void main(string[] args) { string cba = "CBA"; //←"CBA"への参照を代入 cba.sort; //←"CBA"をソート(未定義動作) writeln(cba); // ABC(?) assert(cba != "CBA"); // assert failed! } たぶん、これで解決。 string cba = "CBA".dup; たぶん。
char[] cba = "CBA".dup だろ
↓ 初学者にはこれを見せてDを学ぶのを思いとどまらせようぜ void main() { string xyz = "XYZ"; assert(xyz.reverse == "ZYX"); // assert success! string abc = "ABC"; assert(abc.reverse == "ABC"); // assert success! }
D ってやる気無さ杉だろ そろそろ本気出せよ
>>230 dup/idupしなかった場合、醜いことになるんだねぇ
バグなのか仕様なのか…
import std.stdio;
void main(string[] args)
{
string cba = "CBA";
cba.sort;
writeln("cba --- ", cba); // cba --- ABC
assert(cba == "ABC", "a-1"); // assert success!
assert(cba != "CBA", "a-2"); // assert failed!
string x = "CBA";
writeln("x --- ", x); // x --- ABC おいっ
assert(x == "CBA", "a-3"); // assert success! しかし、sの表示はABCなので、この書き方では正しく評価出来ていない
assert(x.dup.reverse == "ABC", "a-4"); // assert failed!
assert(cba != x, "a-5"); // assert failed!
}
sort/reverseはconst/immutableで出来てはいけないはず(自身をソートする)だからバグということで
D2だとちゃんと実行時エラー吐いたよ。
CTFEでコンパイルエラーが出るとエラー箇所の追跡でハマる phobosがコンパイラの処理を吸い出す方針なら 我々は望むと望まざるとに関わらず CTFE の輪の中にとらわれ そこでのコンパイラエラーとの戦いに悩まされる羽目になるであろう CTFEを言語機能の主要部に置くのと同様 コンパイル時スタックトレース(CTST?)もまた出力されねばならない auto list = makeXXXlist(); // 関数 は stringを返す assert(list == ["aaa","bbb","ccc"]); // コンパイルエラー in object.di な、そう思うだろ?
>>241 そう思うだろ? と言われても。
makeXXXlist() が見つからないから、再現できないし。
["aaa","bbb","ccc"] は string[] 型で string 型じゃ無いし。
http://ideone.com/AHI9A テンプレート使うならCTFE必須だし。
こっちとしては、どうしようも無い訳だけども。
おっと、CTFEは必須ではないか。 まあ、似たようなもんだけど。
244 :
241 :2011/02/14(月) 13:55:09
>>242 すまない
今困ってる訳じゃないんだ
// 関数 は stringを返す
ってのは最後の最後に判明したことで
string と string[] を比較するというお馬鹿なミスのために
大海原の真ん中で object.d のソースに漂着させられたことが問題なんだ
命綱(トレース)をくれ・・・
DWT2をphobos2でコンパイルしようと努力してみたが 実行段階まで来て意味不明なアクセス違反連発でくじけた 改めて見渡せば五体満足なGUIライブラリが一つもない GUIなんて窓から投げ捨てろ
>>244 CTFEは pragma(msg,〜〜〜); で、printfデバッグ的なことは出来るよ
OpenGLのpbufferかFBOを使いたいと思い、GLEWをD言語にポーティングしようとしてます。 htodを使って変換しようとしたところ、__int64とかint64_tとかwchar_tでコケます。 どうするのが安全でスマートなんでせうか?
更新の少ないライブラリだし、ある程度手でやってもいいんじゃない?
>>248 GLEWはマクロ使いまくってるからhtodで変換するのは難しいと思う
ひとつひとつAPIエントリを取得したほうがいい
>>248 ヘッダが15000行もあるぞ、正気かこれ?w
最初の200行くらいで環境依存のすりあわせをやってるから
自分の環境に合わせて -Dxxxx をいくつかやってやればエラーは止まると思う
Windows 32bitならたとえば
htod glew.d -D_MSC_VER=1200 // Visual C 6.0用の環境定義を流用
スマート(っぽい)けど安全かどうかはわからない
まともに使える物かどうかは試してみてくれw
>>252 付け加え
glew.h しか試してない
他のヘッダは形式が全く違うし必要かどうかもわからないのでパス
CALLBACK のところがやっぱりおかしい
alias function 〜で extern (Windows) ※もしくはそれに類するもの
を1行ずつ追加しないといかん
254 :
デフォルトの名無しさん :2011/02/16(水) 13:13:34
Dねえ
D姉?
出ねぇ(4日目)
すみません規制解除されたかテストさせてください
解除されてた・・・ 恥ずかしい・・・ テストするんじゃなかったorz
unittest { while(!post2ch()); }
>>249 >>251 >>252 ありがとう
glextをポーティングして、毎回APIエントリ取得することにしました。
こっちはほぼhtodそのまま。
ただし、やはり
>>253 みたいに手動でextern(Windows)する必要ありました。
(試行錯誤で一日使った…。でもこれが楽しいのかな。他言語にするか、と思った途端やる気なくなる)
>>259 unittest {
while(!post2ch()) {}
}
>>260 glext.hをhtodする時の備忘録。(Windows32bit)
・htod前
gl.hとglu.hのAPIENTRYとかを全消ししてinclude
wchar_tとかint64_tとか
typedef long int int32_t;
typedef long long int int64_t;
typedef unsigned long long int uint64_t;
typedef unsigned short wchar_t;
・htod後
頭にextern(Windows):
htodで追記されてるextern(C)を削除する
GLsyncとか構造体の宣言は手動でやる必要あり
関数宣言の引数名でrefとinが登場してる
他にもあったかもしれんけど、忘れますた。
アホっぽいところあったら指摘してください。
いやー、ちょっとOpenGL借りたいときFBO便利だー
しかし、wglMakeCurrentしないとwglGetProcAddressできないのは誰が決めたんだろう
メンバ関数のデリゲートを作った際に、 デリゲートの.ptrがどの実体を指しているか判定する方法はありますでしょうか。 たとえば class Inst { void f() {} } auto inst = new Inst; auto deli = &(inst.f); と置いたとき、deli.ptrがinstを指すものかどうか判定したいのですが……
deliと&(inst.f)を==で比較すればいいんじゃね?
ついにstd.datetimeが来たのか…
64bit linux サポート
ええいさっき2.051でコンパイルしたwxDがタッチの差で動かなくなってやがる
>>268 くそー、ノロケか・・・
俺的にはforeach( ; )をforeach( : )に修正して欲しい
class A1{}
class A2 : A1{}
class A3 : A2{}
:
という継承関係があるとき、(n <= m)なクラスAn, Amについて
あるメンバ関数fがAn〜Amの間でオーバーライドされているかの判定は
どのような方法がありますか?
isで比較してみたのですがこの方法ではどうも結果がおかしいです
http://ideone.com/bGbOD
予約語invariantは消滅したと思ってたけどcast(invariant)ってまだ利くのな バグなの?仕様なの?
>>270 void delegate() dg1 = &a1.f;
writeln(dg1.funcptr == dg1.funcptr);
デリゲート変数の関数ポインタを比較で、とりあえず出来るみたいだけど
込み入った事すると、前スレで上がったsuper周りのバグに引っかかって、うまく機能しないかも
>>271 class invariantが残ってね?
DFL が落ちまくってイライラしていたが 常駐ソフト(IME Watcher)が悪さしていたでござる 今までWinXPのタスクバーに抵抗してたのに・・・w
>>265 ありがとうございました。
そのコードを参考に組んでみたところ、
なにかうまくいかないので調べていたところ、
interface参照をcast(void*)していたことが原因でした。
http://ideone.com/fJEJ3 cast(Object)で再びアドレスが一致したので、
正解ではないかもしれませんがこれでいけそうです。
ありがとうございました。
interfaceといえば void func(T)(T obj) if (is(T:Object)) {} interface I {} void main() { I obj = new class I {}; func(obj); } これがエラーになるのって言語仕様的にどうなん? interfaceを実装するものは確実にObjectも継承すると思うんだが…
cast(Object)
>>278 後で思ったんだけど、writeln()に出力する時にcast(void*)が必要なだけで、
普通の比較にはいらなかった気がするw
文字列mixinで定義してあるシンボルを選択インポートできない・・・やられた
誰がマゾやねん
M言語に名前変えようぜ! 拡張子は.mな
Dさんの視点で考えろよ S言語が正解
saD
MarsからsaDに改名した訳だ
一年ぶりくらいに触ったら全く別の言語になってて吹いた 相変わらずだな
一年前はそんな別物だったか?
とりあえず予約語がたくさん消えてるのは確認した
DってSIMD演算はCから使えばいいの?
mmintrin.h〜xmmintrin.h〜emmintrin.h〜intrin.h〜smmintrin.h〜nmmintrin.hをポートするかインラインアセンブラ使えば良いんじゃないの
gdcって実は生きてるんだっけ ldcも復活したって噂は聞いたが
MinGWのgccでO3をつけてコンパイルしたのが6秒くらいだった環境で -O -inlineをつけたdmdでstructでやってみたら8秒くらいだった classだとvirtualになるからかさらに1.5倍くらいかかる もうちょっと頑張れ
dmdだけど、classでもfinalつけると速くなるなあ。 「Dでは全部virtualだけど、オーバライドされてない関数はコンパイラが検出して非virtualにしてくれるよ!」 ってどっかに書いてあった気がしたんだが。 まあ今まであんまりfinalつける癖がなかったから、 「速度的なアドバンテージもあるから、なるたけつけるようにしようね!」 っていうDさんの優しさだと思っとく。
>「Dでは全部virtualだけど、オーバライドされてない関数はコンパイラが検出して非virtualにしてくれるよ!」 リンカが検出してくれるなら判るが コンパイラに検出可能なんかね
finalがついてる関数は検出して非virtualと判定するよ!とかじゃね?w あとモジュールprivateなクラスはソース内で閉じてるから検出可能とは思うけどどうなんだろう。
GCの制御に「弱い参照」って作れませんでしょうか。 オブジェクトAとBが相互参照していても その相互参照以外の参照ルートがなくなるとGCが回収してくれて、 回収時にデストラクタでメッセージングして相互参照を消すコードを書くような形で。
アク禁のおかげで若干旬が過ぎた気もするけど 2.052であばばばってなった人殆どいないんかな・・・ std.string.replace >> std.array.replace std.date >> std.datetime 俺はかーなーりー痛かったぞと。
>>305 そんな痺れるような痛みが大好きなんですよね。わかります。
gdcってgdbと紛らわしいからやめて欲しい
>>305 replaceはまだしもstd.datetimeはドキュメントが膨大すぎて途方に暮れざるを得ない
だが翻訳の中の人の痛みに比べたらこの程度…
言語仕様の破壊的変更が一段落したから 今度はライブラリかー わくわくが止まらない
2.051から2.052にしたらアプリサイズが3MBから5MBになたw それはそうと、Linuxで開発してる側の人間から見ると、 DMDとGDBて同じにしか思えないんだが…何か違うのかなぁ。 2.052のzip内のDMDがlibcのバージョン違いで動かなかったもんで、 ソースをgccでコンパイルしなおしたりしてるんだけど。
なぜindexOfをグローバルに出したしstd.datetimeェ・・・ private付けてくれよ
Objectが投げられなくなったのが地味に面倒だった
>>304 それ、デフォルトの動作じゃね?
DMDは世代型コピーGCなはず。
2.048からバージョンアップしたけどOpenGLのポーティングがコンパイル通らなくなってて嬉しくなった
GUIライブラリどうするかな… コンパイルできる奴が1つも無いというのは置いておくとして どれが見捨てられてどれに未来があるのかがまったく読めないのが困る いっそどれが生き延びてもいいようにラッパを書くか?
Qt on D があると嬉しい
いまはもう動かない〜
へ〜あるんだ でも9年も前か 残念だけど 話にならんな〜
>>320 ん?誤爆?
QtDの最終更新は先月だけど
GUIする時Eventに対するEventArgはEventの種類で親子関係あるから classにせざるを得ないと思うんだけど、GC付きの言語でこれやると 例えばMouseEventとかマウスが動くたびに大量のnewが発生してGCがバリバリ動いてしまう ゲームのメイン処理中はプールしたメモリ内をやりくりしてGC動かないように必死なのに こういうフレームワーク的な部分でGC発動してたら萎えるなと思うんですけど そういうものと諦めるものなんですか?
>マウスが動くたびに大量のnewが発生してGCがバリバリ動いてしまう newは大量だろうけどその都度GCする訳じゃないし
マウスをぐりぐり動かすとゲージが伸びて MAXに到達したらGC発動! ぴきーん! そんなゲームを作ってくれ # こういう単純なのが演出しだいでウケるんだよな
>MAXに到達したらGC発動! ぴきーん! ここの動作を kwsk
あれだ GC過程でWin95時代のデフラグみたいなのが表示されるんだ
.NETとかGC標準だけどどうやってるんだろうな PCの性能がよくなってるから速い遅いの感覚があてにならん
基本ゲーム用に作られたモジュールだけ使うようにして、 残りはオブジェクトプールでなんとかってとこかと
>>327 デフラグ表示の過程でもnewするだろうから……ゴクリ
>>322 がGUIライブラリの不満なのか言語に対する不満なのか
よくわからなくなってきた
SDLかわいいよSDL
少し前にSDLでゲーム作ってみたら
テキスト表示するのに毎回フォント→画像イメージ生成する羽目になって
GCについては考えないことにしたw
明示的deleteも出来ると言うのに、お前らときたら・・・
DigitalMarsのmakeって OBJ = $(SRC:.d=.obj) みたいなことできないの?
可能
マジか… もうちょっとやり方調べてみるかー
337 :
デフォルトの名無しさん :2011/02/27(日) 21:26:58.11
338 :
334 :2011/02/27(日) 21:32:33.53
うーん、置換できん ひょっとしてDigitalMarsのmakeって何種類かある? dmdについくるのはハズレmakeだったりするのか
何年か前に試したけどできなくて、結局当時からmingw32-make使ってるなあ。
340 :
デフォルトの名無しさん :2011/02/27(日) 22:10:13.89
Windowsならnmakeと相性いいよ。batch-modeはやい
rdmd myappbuild.d とかやればいいような気がしてきた
>>337 東京は遠い…
会社がDのために出張費を出してくれるとか
150%ありえないか
東京なら日本全国日帰り可能だろ? どんな僻地に住んでんだよ
>>343 何を言っとるんだ。
東京「が」僻地なんで遠いんだ。
平安時代の話?
極東のさらに東端なんかいちいち行ってられねって
そっか、残念。世界で一番デカイ都市圏なのにな・・・
(ただし23区に限る)
ウォルたん辺りがひょっこり来ないかな
ニコ生でひとつ
>>352 2.051 では出ない
2.052 では結合後のlength が 2で返ってきててワロタ
きっとLinux 64bitサポートの恩恵に違いない・・・さて 2.052をアンインスト(ry
条件演算子は他にもバグるのでやめたほうがいい 左右の型を合わせるよう気をつけたら大丈夫かも
>>352-353 static assert( ("" ~ '\xE3').length == 1 ); // ver.2.051
static assert( ("" ~ '\xE3').length == 2 ); // ver.2.052
どうみても(ry
そういうののテストコードはないのかね
すみません、リファレンスに詳しく載っていないので心配なんですが、 スレッドセーフな配列を作りたい場合は以下で良いのでしょうか? synchronized Class[] Array; それとも要所要所にキチンとsynchronized ブロックするべき?
いつまでも未完成だから流行んないのか。残念だなぁ。
>>358 それだと変数宣言がsynchronizedブロックで囲まれるだけじゃないかな
使う時にsynchronizedすべきかと
それ公式に送ってあげたら? DFL以外にも生きてるのがあったとは
>>362 問題は100点満点で連続1桁を取るレベルの英語力なんだよ…
小学生から英語やっとくべきだったなぁ
Dを触りだしてからとみにそう思う
>>157 の現象がDMD2.052で通るようになったぞと。
>>362 gtkDもこないだ 2.050,Windows で試してみたらさっくり動いた
trunkはそれなりに更新されているみたい
そんな中自力でGUIを作ろうとしてしまった件について HTML5/CSS3のレンダラを書けばそれでGUI代わりにならね?的な。
DでGUIライブラリ作るのめっちゃ楽しいです!
Objective-Cのメッセージに変換される呼び出し規約書けないかなあ。楽しくなると思うんだが。
オープンソースだから、自分で拡張するという方法も、あるにはある。
仕方なくへたくそな英文メール書いて パッチを送る直前まで行ったけど踏ん切りがつかない 英文添削スレとかあるのかと思ったのに無いのか…
ここに書けばいいと思うよ このスレは住人の1/4くらいは東大関係者だし
ええと、1/3くらいは英語で論文を書いている人だと思う。 そういうところで気軽に頼めたりするのが2chのいいところ。
マジか…さすがDさんはエリート言語だな ちょっと変な所が無いか見ていただけますでしょうか。スレ汚しごめんなさい Title: DWT2 patch for D2+Phobos Dear Jacob Carlborg, Nice to meet you. (こんにちははじめまして) I wrote patch to compile and execute DWT2 with dmd 2.052 (and Tango 0.99.9). (dmd 2.052とあとTangoでDWT2をコンパイル・実行するためのパッチを書きました) But target is only base, swt (for win32), and swtsnippets. (対象はbaseとswt(win32)とswtsnippetsだけです) And, I fixed bugs in swt for win32: (あと、swt(win32)のバグをいくつか直しました) * Access violation in beginning drag at TableItem. (TableItemのドラッグ開始時にアクセス違反) * Garbling multibyte string at CTabItem. (CTabItemでマルチバイト文字列が文字化けする) * FileDialog doesn't become modal. (FileDialogがモーダルにならない) * to_path() problem in rakefile. (rakefileのto_path()の問題) My patch include these. (これらの修正もパッチに入れてます) Please use it if it is good. (よろしければお使い下さい) My English unskilled, sorry. (私は英語が下手くそです。すいません) Best regards, (署名)
開発系のフォーラムでそこまで形式ばった書き方する人あまり見たことないな。 Hi, Jacob! とかで初めて、 Thanks! とかでしめるのをよく見る。 あと My English unskilled, sorry. とかは不要じゃない?
俺も英語得意じゃないけど Please はかなり強い謙遜だから 気軽に使わない方がいいって聞いたことがある
そんなの人それぞれ。 俺は丁寧で気持ちの良いコミュニケーションが好きだから、 could you kindly ~ please? みたいなのは普通に使うぞ。
むむむ。please以外の書き方がわかんね 最初だから多少堅めの方がいいんじゃないかなと思っていますが 開発系の常識だと軽い方がいいのかなぁ とりあえず「英語下手です」とかは外す事にします なぁに、今はいい翻訳ソフトもあるんだから何とかなるさ アドバイスありがとうございます
このスレみとったらオラもD言語やりたくなった
まあ意味は取れる文だからいいんではないかなと。 語感的に I wrote a patch for DWT2(base, swt-win32, and swtsnippets) to compiling it with dmd 2.052 (and Tango 0.99.9). Additionally, I fixed some bugs in swt-win32: みたいなほうが落ち着くけど、 前置詞とかネイティブでも迷う時があるらしいし。
>>376 Hi Jacob,
I've written a patch which allows dmd(2.052) and
Tango(0.99.9) to compile and execute DWT2.
It works for base, swt on win32 and swtsnippets.
Also, it fixes some bugs of swt/win32.
Bugs fixed in my patch are:
- An access violation that occurs at the beginning of dragging a TabletItem.
- Multibyte strings are garbled on CTabItem.
- Sometimes it's unable to set FileDialog to be modal.
- to_path() problem in rakefile.
Could you please have a look at it?
I hope it will be included in D.
Thanks,
you name
バグについてはもっと詳細に具体的な情報を書いた方が良いと思われ。
もし既知のバグなら関連する URL とか、発生するタイミングとか。
D はあまり詳しくないのと、
>>376 さんのパッチについても
よく理解していないので、おかしな文書だったらスマソ。
添削してもらって完璧な英文になって英語できる奴だと勘違いされると割とマジでまずいw 意味さえ伝わればおkくらいの勢いで、添削していただいた文を参考に書き直して送ってみます 後は野となれ灰となれロストなれ スレ占有失礼しました。ありがとう!
ガンガレ!
tangoのFileSystem.rootsに該当する機能ってphobosにはまだ無いのかな
公式サイトどぞー
ねんがんのswig の D対応と irrlicht のインターフェースファイルをてにいれたぞ! あと1年はやく出会いたかったぜ・・・
C++とのインターフェイスがしっかりしてれば、こんな問題起きないのに!
C++の言語仕様が糞だから簡単にコンパイラを実装できるものを目指してDが作られたのに C++とのIFをしっかり盛り込んだら本末が転倒しちゃう!
ウォルたん「C++コンパイラの実装できるやつなんてこの世に存在しねーよ だから完璧なインタフェースも無理だよ」
マングリング規則を揃えるだけじゃん?
wxDの努力には涙ぐましいものがある
.NET的なフォーマット関数("{:0X}"みたいなの)ってまだ無いよね 書こうかな と思ったところでstd.dateの二の舞になるから誰も書かないだけだと気づいた
>>396 馬鹿な、tangoは.NETスタイルだぞ
僕のライブラリに至ってはobject.Error: Access Violationが出てまともに動かないスタイルだぞ!
いや、そういうスタイルならまともかどうかは関係ない 僕のはイカスAVが出るスタイルさ と言うべき
T enforce(T)(T value, lazy Exception ex); って定義なのに enforce!sizet(line.length, new IOException); じゃなくて enforce(line.length, new IOException); で呼び出せるのってどんな仕組み?
const(Object)refとかマジで欲しいんだけど const(Foo) foo = getFoo1(); : foo = getFoo2(); とかやりたいときにいちいち import std.typecons とやって Rebindable!(Foo) foo = getFoo1(); とやるなんて狂気の沙汰だぜ autoすら使えない… おまけに演算子オーバーロードとか無効化されるし
int c; int[] arr; std.algorithm.countUntil(arr, c); // OK int cc; const(int[]) carr; std.algorithm.countUntil(carr, cc); // だめ うーん、通ってほしい…
immutable COMMA = ","; std.string.split("a,b,c", ","); // OK std.string.split("a,b,c", COMMA); // (immutable(char)[], immutable(char[]))だから駄目と言われる templateの引数チェックが鬼すぎるんだ
あああもうDラヴ!D大好き!D愛してる!! Dのない生活なんて考えただけで・・・ やだー!!
>>406 よせ、それはまだ極秘のプロジェクトだ
かかわると消されるぞ
ところで std.zip や std.zlib の void[] ってどんなもんだとイメージすればいいの? ubyte[] はイメージしやすいけど、似たようなもん?
import std.regex; void main() { .replace("a", .regex("a"), "b"); // ok .replace("a"w, .regex("a"w), "b"w); // compile error .replace("a"d, .regex("a"d), "b"d); // compile error } Dって楽しいなァアーハハハアハアハアハ
>>void[] 有名進学塾に通う塾生達かな 空っぽの心で勉強だけひたすらしてるイメージ
そろそろD言語で何か作ろうか
>>ubyte[] こっちは学校のトイレでタバコ吸ってるDQN達か。 噛み付くぞてめぇ!って粋がってるイメージ
>>411 Dのプロジェクトなんて無数にあるぜ!
でも心の綺麗な人にしか見えないんだ
心のきたない俺は 空に瞬いている星と地に墜ちた星を見分けられる ようになりたい
必死になってD1からD2に移植してきたアプリがまともに動くようになってしまった コンパイルエラーが出ない const関係で詰んだりしない unittestが意味不明な理由で失敗しない 循環static thisで落ちたりしない どこからともなくHiddenFuncErrorが投げられたりしない よくわからない箇所でアクセス違反が発生したりしない 虚しい…
D言語の人ってエディタ何使ってるんですか?
サクラエディタにキーワード登録して使ってる
emacsかVisualD
DFL+scintillaで自作エディタ
サクラエディタがもう一人。 VisualDはutf-8で保存してくれるようになったんかな。
秀丸とマクロ
VisualDうまく入れられなかった。 画像付きで解説してるところないですか? あるいは誰か解説をしてもらえると幸いです。
VisualD をGoogleの画像検索すると、1番上にそれらしいのが出るぞ
サクラエディタ Dの1_234.56みたいな数値定数とr""を認識してくれる設定ファイルが欲しい・・・
>>424 VS2003〜2010のどれかをインストールしてる状態でVisualDをインストールしてDMDのフォルダを指定するだけじゃん
VS立ち上がったままでやったら駄目だぞ?
>>426 `\"`とかやると変になるよな
正規表現キーワードとかで何とかなるのかしらん
>>426 うまく機能してるか不安だけど
/(?<!\w)0[xX][\da-fA-F_]*(\.[\da-fA-F_]+)?([pP][\+\-]?[\d_]+)?[fFL]?i?(?!\w)/k
/(?<!\w)([\d_]+\.([\d_]+)?|([\d_]+)?\.[\d_]+)([eE][\+\-]?[\d_]+)?[fFL]?i?(?!\w)/k
/(?<!\w)([1-9][0-9_]*|0[bB][01_]+|0[xX][0-9A-Fa-f_]+|0[0-7_]*)(L|u|U|Lu|LU|uL|UL)?(?!\w)/k
/(`[^`]*`|(?<!\w)r"[^"]*"|(?<!\w)q"[^"]*")[cwd]?/k
おっと、通常の""文字列と''の文字定数も必要なんだった /((?<!\w)x"[\s0-9A-Fa-f]*"|(?<!r)"([^"\\\r\n]|\\.)*?")[cwd]?/k /'[^']+'/k 標準機能の""と''の色付けは無効にして、全部正規表現キーワードでやってる
おお、8進数まで認識する… GJ
正規表現キーワードは複数行対応したら神なんだが
よし、サクラエディタはオープンソースなんだからD言語で実装し直そうぜ
それはやらないのがDスタイルだろ?
サクラエディタの描画周りのコードの汚さェ・・・
今まで@propertyをメソッドの一行上に書くスタイルで書いてたんだが、 class Test { @property void delegate() func() { return _func; } private void delegate() _func; } がコンパイル通らなくてびっくりした。 void delegate() @propertyっていう型に認識されてるっぽいんだが、そんなものあるのか? まぁ今後はvoid delegate() func() @propertyって後置しようと思ってるから良いんだけど…
後置ってそのためだったのか
その@は句読点じゃなくてatという単語だったのかw @property ってアノテーションと同じ感覚で書きたくなるよなあ
Javaのアノテーションとpythonのデコレータも同じような書き方で全然意味が違ってややこしいのに これ以上@に変な意味与えるのやめて
@propertyとかを別の行に書くとgrepして検索した時に プロパティってすぐ分からないから1行に書きたくなる俺は異端?
前置の@propertyが高階関数に付けられなくても困らないかな?
>>422 文字コードの話ならエディタでDのソースコードを開いている状態で
VSのファイルメニュー→「保存オプションの詳細設定」で変えられるぞ
ソリューションエクスプローラで.dファイルを選択しているだけだと出てこないのが罠
128 名前:デフォルトの名無しさん[sage] 投稿日:2010/09/14(火) 05:21:24 VisualDがutf-8で保存してくれない……。 129 名前:デフォルトの名無しさん[sage] 投稿日:2010/09/14(火) 11:32:49 日本語が使えなくなるだけだと思えば許せる。 VisualDはVS2010のデバッガが使えるってだけで最高だけど、やっぱりインテリセンスがなぁ。 130 名前:デフォルトの名無しさん[sage] 投稿日:2010/09/14(火) 17:42:21 ファイル→保存オプションの詳細設定でUTF-8に変えてくれる デフォでUTF-8にして欲しいけどな 131 名前:デフォルトの名無しさん[sage] 投稿日:2010/09/15(水) 00:58:23 簡単に解決できそうな気がするけど。問題として認識されてないんだろうなあ。 132 名前:デフォルトの名無しさん[sage] 投稿日:2010/09/15(水) 01:00:25 いつものパターンか
>>443 VSの仕様って良く分からんけど、アドオン側からデフォルトの保存コードを変更できるもんなの?
VS本体でも変えられないのに
俺もよくわからんが、VS本体でも変えられないってのはよくわからん。 保存オプションからコードは変えられるんだろ? 新規作成かなんかの時にアドオンからutf8にしてくれるなら、 別にVSの「デフォルトの保存コード」を変更する必要はなくね? いや、そういうことができるのかはわからんし、結論としてはよくわからんが。
メモ帳でBOMつき空ファイル作って Visual D の新規ファイルのテンプレートに 突っ込んでやればいいんじゃないかな
>>427 なんか、前はなぜまともにいかなかったのかわからないほどあっさりでけたw
これ、メソッドのインテリセンスはなし?
Eclipse使い('A`)ノ
インラインアセンブラのコンパイルエラー文が 標準出力に出ると気づかずに時間を無駄にした・・・統一して orz コンパイラ →エラー出力 インラインアセンブラ→標準出力 リンカ →標準出力
DWT2 with D2、何とか動くけどたまに異常に長時間固まるなぁ どこを直せばいいことやら…
確かにphobosよりはdmdっぽい
GCが悪さしてるとかじゃなくて?
今core.sync.*ってまともに動くの?
多分動く
課題が山積過ぎて今何やってるのかさっぱりわからんのだが
大丈夫だ。Dのコミュニティには船頭クラスの人材がゴロゴロいるからな
船頭多くして山に登る・・・?
船頭多くしてTIOBEランキングを登ってくれると良いんだが
委員会設計と独裁者設計の悪いとこどりしてね?w
クラスのポインタ取るのって void* でキャストとかすればよかったのね。。。 クラスは参照だっていうから、C++ のように & してたけどうまくいかなんだ。 emplace のソース見てはじめて知ったけど、常識?
462 :
デフォルトの名無しさん :2011/03/09(水) 01:09:21.34
面接でD言語使ってますとアピールしたら不思議がられた。
会社にもよるが、元々DelphiやらHaskellやらScalaやらを使ってます!みたいなところでもないかぎり むしろ言わないほうがいいと思うぞ。 普通の会社はプログラミング言語といえばC系とJavaとC#とPHPぐらいしか選択肢がない。
日本語訳サイトの更新キター と思ったら std.datetimeが英語だw これは誰か翻訳手伝ってくれということだな・・・
日本語サイトの中の人はたまに英文のまま公開してからゆっくり翻訳してる事があるから つまり手伝ってあげて
そういえば自分も構造体の継承が欲しかったんだけど、 alias this すれば近い感じで使えるのね。便利便利。
だからクラス使おうぜ・・・
Phobosにも構造体で実装されてるのが結構あるから、 そういう既存のものに自分機能をつけたいことはあるかもしれない。
機能の追加には興味ないけど一つの配列に種類の異なるものを入れたりすることには興味ある Variant使えばいいのか?
コンパイル時に型が決定してる必要がある
>>469 継承
タプル
variant型
お好きなのをどうぞ。
継承→事前定義の必要あり タプル→型の順番はコンパイル時に決まる。その場で定義できる構造体に等しい。 variant→実行時に何でも入るが、実行時処理が増えるのと、値取り出しの型に関する処理が面倒。 って感じか。
ああ、もう二つあった。 共用体 void*型
variantは共用体やvoid*型に実行時型情報を加えた構造体ですな。
誰か日本語シンボルを扱えるデバッガをつくってくれ ローカルシンボルをすべて日本語で記述して 漢字かな混じり文の伝統を継ぐガラパゴス文化を創造するのだ なに、全角英数が使えないだと・・・?
boxer それなりに便利だったんだけど、消滅する運命になってしまったね・・・。
なんでだろ。
ちなみに今使おうとするとコンパイラが落ちた気がする。
>>476 前お遊びでやってみたんだけど、いちいち日本語に切り替えるのが
めんどくさくてやめてしまった・・・。
全てを全角でかけないときついね。
地震怖かったー・・・!
boxはvariantに置き換えられるだけでしょう コンパイル時型情報を生かした高速なやつ
地震後にD言語友の会が死んでてひやっとしたけど 中の人は神回避したらしい
地震に巻き込まれて命を落とされたD言語利用者の御冥福をお祈りします
itkz が ついったでデマ流したとかで叩かれてる どのくらい関わっている人かよく知らんけど
Visual D の更新が活発だ ううむ、これは困ったぞw
クラスのgetterからクラス内の配列をconstにして返してもらって その配列をdupでコピーすると配列のメンバに変更を加えることができる 理屈としては問題ないんだろうけどなんか気持ち悪いなぁ…
状況がよくわからんけどオリジナルに変更加えられるわけじゃないんでしょ? 変更したくないなら dup を const で受け取ったりすればいいのかな?
486 :
デフォルトの名無しさん :2011/03/12(土) 20:34:48.92
>>486 なるほど、クラスか・・・。
これは気持ち悪い。
推移的constが推移しないんだよな
よくわからんが、const([]T) をdupしたら []T になっちゃうってことか? 本当は[]const(T)になってほしい、と。
[]の位置が逆だ……ごめん。
クラスの場合const(T)==const(void*)かmutable(T)==mutable(void*)かしか定義できない const(void)*にあたるものがない
>>409 パッチ上げられてたぞ
完全に直ってるのかしらんけど
ifでテンプレート引数を絞り込むのって乱用するべきじゃないな
細かくやりすぎると
>>409 みたいに想定漏れを招く
どうせテンプレート内でエラーになるんだから通してしまえばいい
495 :
494 :2011/03/13(日) 12:33:57.11
>>494 これ、まさにコンセプトでも懸念されてたことなんじゃないか
static if で実現できることはそっちでやった方がいいお Constraint のシンタックスハイライトに対応するIDEは登場するのかなー?
テンプレート制約って&&で繋げるよりもifの行を増やす方向の方がいいなあ &&を使った今の状況だとどの条件に引っかかったかが長々と表示されてすげー分かりにくい
プリプロセッサを無くした代わりにポストプロセッサが必要になりました、と
>>500 std.container.SList.thisで例えれば、
this(Stuff)(Stuff stuff)
if (isInputRange!Stuff
&& isImplicitlyConvertible!(ElementType!Stuff, T)
&& !is(Stuff == T[]))
{
これを、
this(Stuff)(Stuff stuff)
if (isInputRange!Stuff)
if (isImplicitlyConvertible!(ElementType!Stuff, T)
if (!is(Stuff == T[])
{
こう書いて、引っかかったifを示してくれればいいなあとか思う
ubyte* p;があるとして ubyte[] r = p[0..n];したときのrってスタック上に確保されないで ヒープ上でnewされてRangeかなんかのインスタンスになっちゃいます?
それだけでは、内容のコピーはされない。pの示す先を直接参照する格好 r ~= 0; などすればコピーされるけど
>>504 rの持ってる情報ってpへのポインタとlengthくらいだと思うんですけど
これはスタック上かGC管理のヒープ上のどちらに確保されるんでしょうか
>>503 の例だと新たに確保はされず、「共有」される
lengthどこ行った?
こういうソース見て目からウロコが落ちた、と思った union{ wchar[] dstring; DStringW filename; // 配列ヘッダの構造体 } struct DStringW{ uint length; wchar* pointer; }
特に珍しい構造でもあるまい
>>505 コンパイラによる。
でもそもそも、本当にそんなことを気にしないといけないプログラムを作っているのか?
immutableとクラスは今かなり水と油だなあ
>>512 プログラムの内容が現象とマッチしていてすばらしいw
そういえばコンパイル時乱数、なんてできんのかな?? かぶらない変数名の定義とかに使いたい(__LINE__ がうまく動けばそれで良い話だが・・・)。
むしろ乱数だったら希少な確率で被って、再現性のないコンパイルエラーになるんでは。 もう一回コンパイルしたら何故か通る。
>>517 そこはあれですよ。種を変えてその場をしのぐ。
>>518 乱数もそうだけど、配列にしてもどこかで状態を保持しないといけないね。
やり方わからん。。。
予めファイルに乱数列を書きだしておいてimport()で読み込むとかどうッスか
セシウムをデクリメントするスーパープログラムはないのかっ!
おまえら、乱数で変数名を決めるとか、愚策だって分ってるんだよな?
ええ、そりゃもう分かってますw
__LINE__ がちゃんと動けばそれでいい。けど動かないから・・・。
__RANDOM__
使い込むと数百回に一回しかコンパイルが通らない神コードが出来ます
ストカスティックプログラミング!
Dにもgensymだと……?
やはりプリプロセッサを
>>520 そういやdmd本体もまずソースコードを生成するプログラムを作ってから
そいつで生成したコードを改めてコンパイルしてた気がする
makeの話題で build.d 書けば、みたいな話が出てたし
一つのソースに収まらない事を気にしなければ簡単にできそうだ
コンパイル時にこういうの使えない? import std.process; import std.conv; string getUniqID() { string id = environment["uniq_id"]; environment["uniq_id"] = to!string(to!int(id) + 1); return id; }
ああそれとも、コンパイル時にバージョン番号を自動的に+1させたいのかな? そういうツール、探せばあると思うけど。(Dでも使える無料のが。自分で作ってみるのも一興。)
535 :
516 :2011/03/16(水) 14:36:35.00
みなさんすいません。 やりたいことは RAII を使ったクラスに対して new するような テンプレートミックスインを作って運用したいんだけど、 入れ子にしたときに変数名がかぶるのを避けたい、ということです。 例えば template Hoge() { mixin("scope auto hoge = new ScopeHoge();"); } を使って { mixin Hoge!(); 〜処理〜 { mixin Hoge!(); // 変数名衝突? } } ていう使い方も出来るようにしたいんです。 行番号を変数名にくっつけられれば避けられるんですけど、 現状それができないなぁ、という感じです。 今は mixin Hoge!(__LINE__) というように使えばいいか。
536 :
516 :2011/03/16(水) 14:36:49.78
と思ったんですけど、あれ? 今やってみたらコンパイル通りました。 mixin template Hoge() { scope auto hoge = new ScopeHoge(); } でも普通にコンパイル通りますね。意図通りに動いているかどうかは まだ確認していないですけど。。。
rdmdて使ったこと無いんだけど、 ソースが書き換わらない場合でdmdの実行と比較して、 やっぱり遅いよね? 普通に考えればソースファイルのチェックしなきゃだし。
539 :
516 :2011/03/16(水) 18:10:00.70
>>538 どうもありがとう。
もう __LINE__ を渡すようにしてやってみるわ・・・。
今は何故かスコープクラスのデストラクタが呼ばれないことがあるのを調査中・・・。
ちなみに処理計測のスコープクラスです。
540 :
516 :2011/03/16(水) 20:20:40.82
わーお。 テンプレートでミックスインしてその中で new したスコープクラスの デストラクタ呼ばれないっぽい。 素直に new と書くか・・・。
>>539 そんなことするなよ。
代わりに、aliasパラメタを使って何とかしようぜ。
テンプレートの外で宣言したシンボルを、テンプレートに渡すんだ。
たぶんいける。
542 :
516 :2011/03/16(水) 21:00:10.02
>>541 aliasパラメタね。やってみる。ありがとう。
545 :
516 :2011/03/16(水) 22:20:10.22
>>543 ありがとう。
自分も文字列ミックスインでスコープクラスの new まで
出来たんだけど、スコープ抜けてもデストラクタが呼ばれなくて・・・。
alias パラメタって、外部のパラメタ渡すということは外部の宣言を
渡すのかな?
なかなか出来ないんだけど、そもそも1行でかけないと意義薄いかも・・・。
546 :
516 :2011/03/16(水) 22:21:29.64
547 :
516 :2011/03/16(水) 22:28:06.18
>>544 出来たけど出来ない・・・!
デストラクタ、仕事しろ!
最新の dmd で試してみる。不具合報告が多かったから
躊躇してたんだけど。
newとペアで scope(exit)delete xx; もmixinしてみたら?
あともうひとつ。 ストレージクラスのscopeは今後廃止されるかもしれないので、 scope(exit)文でdeleteするのが無難かもしれない。
550 :
516 :2011/03/16(水) 22:40:40.53
>>549 なるほど、ありがとう!試してみる。
ちょっと気になるのが、scope クラスの new って
スタックへのクラスインスタンス割り当てだったと思うので
無くなったら効率面でちょっと気になるな・・・。
ちなみに最新にしたら std.datetime がすごい行数になって
コンパイルも通らない・・・!
ワクワクしてきた!
そして地震にハラハラ。
本当にデストラクタ呼び出されないの?
552 :
516 :2011/03/16(水) 22:53:08.91
>>551 デストラクタで writeln しておいて、普通に new した場合は
コンソール出力されるけど、テンプレートミックスインすると何もされない。。。
最新では試せてないけど。
>>553 そのコードだけで言うなら、mixin templateにし忘れている。
>>553 template test() -> mixin template test()
とか?
558 :
516 :2011/03/16(水) 23:30:13.44
>>556 あー、なるほど!おもしろい。
ちょっと検証してみる。
ありがとうです。
mixinで scope(exit)をねじこむだと・・・!? 俺がウォルたんならそんな使い方は蹴る。てか泣いて謝る
>>556 の
void watcher(void delegate() f)
を
void watcher(scope void delegate() f)
に変えると最適化が効いて普通の関数呼び出しと同じくらいの速さになるらしいよ
何その scope ・・・! 知らなかった。 ってか、scope って意味が多すぎ。
564 :
516 :2011/03/17(木) 00:39:36.53
最新でやっと動くようになったけど、相変わらずデストラクタ呼ばれなく、
mixin template Foo()
{
scope auto rec = new Foo();
scope (exit) delete rec;
}
ってやると
>>557 と同じコンパイルエラーが出る。。。
Scopedじゃ駄目なのか?
>>564 mixin template の中は宣言しか書けない
class Foo
{
scope auto rec = new Foo();
scope (exit) delete rec;
}
とやって書けないのと同じ
文字列ミックスインでねじこめないのも同じ
567 :
516 :2011/03/17(木) 01:16:29.30
そもそも mixin template Foo() { scope auto rec = new Foo(); } と書けてしまうのがおかしい? まぁ諦めて普通に書きます。 みなさんありがとう。
568 :
516 :2011/03/17(木) 05:47:03.81
っつーか、RAII なら構造体使えばいいことに気付いた・・・。 scope とか new とか書かなくていいし。 注意するのは引数無しのコンストラクタが使えないくらいか。 ストレージクラスのscopeが無くなるのは構造体使えばいいからなのかな。
>>568 しかし構造体の一時オブジェクトはデストラクタが呼ばれないバグがあるらしい
572 :
516 :2011/03/17(木) 17:36:35.36
>>569 なんと!?今のところ大丈夫そうだけど・・・。
念のためユニットテスト用意してチェックしておく。
バグも調べてみます。ありがとう。
>>570-571 使う側から見て、シンプルにできるのかな。
1行で書けると見通しがいいので、やっぱり RAII が便利だなぁ。
でもありがとう。覚えておきます。
574 :
516 :2011/03/17(木) 17:54:21.07
>>573 なるほど。
確かにちゃんと変数に入れてた。だから大丈夫だったのか。
重ね重ねどうもありがとう。
ほんと直して欲しい
578 :
デフォルトの名無しさん :2011/03/17(木) 19:43:30.04
>>572 プログラムを理解するのに必要なコードが、変に分散したり、複雑に絡みあったりしなければ読みやすい。
行は関係ない。
579 :
516 :2011/03/17(木) 19:57:52.46
>>578 でも同じことするのに1行で書ける方法があるならそっちがいい。
コピペしなくてもいいように mixin とかできるならいいかもしれない。
ということで RAII で最低限満たしているから今のところそれでいいかなと。
>>579 結局の所、何かやりたいのかよく分からないから、曖昧なレスしか出来ないんだよね。
なんでmixinの中でscope付ける必要があるんだろう?
581 :
516 :2011/03/17(木) 20:53:02.70
>>580 元々は C++ で実装していたようなことを D で実現したくて、
書き方も似たようなシンプルなものにしたかったのね。
んでマクロは無いけどテンプレートとか使えばできるかなぁと
やってみたんだけど、色々無理そうなことがわかった、という感じかな・・・。
みなさんどうもありがとう。勉強になりました。
そろそろ消えようと思います。
マクロ的な事なら文字列mixinがおすすめよ
C++でいうところのこういうの作りたいんだとエスパー class Time { time_t t_; public: Time(){t_ = time(NULL);} ~Time(){printf("処理時間:%d\n", time(NULL) - t);} }; int main(){ Time t0; { Time t1; // この変数名がかぶらないようにmixinで変数名を自動割り当てしたい doSomething1(); } doSomething0(); return 0; }
>>582 文字列 mixin は試したみたいよ。
テキストファイル読み込みをUTF-8エンコーディングしながら読みたいんですけど std.encodingってどうやって使うんでしょうか それとBufferdFileでファイルを開いてreadLineしたものをstd.encodingで stringにして使おうと思ってるんですけどこのやり方って一般的ですか?
std.encodingは使えないモジュールNo1候補だよ 使い方も意味不明だしもちろんMS932ことshift jisには対応してないよ
str = std.c.windows.charset.fromMBSz((str ~ "\0").ptr) とかやればSJISからUTF-8に変換できるかな?
Windowsのコードページに従って変換したいのか、SJIS決め打ちで変換したいのかは一考しろよ
>>589 Shift-JIS/JIS/EUC/UTFに関わらずテキストファイルを読み込んだ時点で
UTF-8として読み込むようなイメージです
>>590 まさにJCodeですね ありがとうございます試してみます
jcode使って自動判別させるなら一行ずつ渡すと誤判定ありそうだし、 頭から何百バイトか渡して判別だけして、あとは毎行変換って感じになる? なら、個人的にはファイル読み込みが二度手間になるのが嫌な感じなんで、 std.file.readで一気に読み込んで変換してstd.string.splitlinesかなあ。 まあ凄いデカいファイルを想定してる場合はしゃーないが。
>>355 あたりのバグさっさと直んないかなあ
dateからdatetimeに直したからもう戻れねえ・・・
パッチが出てるから先に当てればいいよ
>>594 ありがとう
bugzillaとか使いこなせる人が羨ましいなあ
splitlinesいいね foreachと組み合わせて手軽に行毎の処理できるんだ
>>357 の irrlichtポーティングがとりあえず動くようになってた
一方 swigは書式がよくわからん上に
インタフェースファイル修正→変換が遅くてやってられん 頭痛くなったorz
すみません・・・これなんでしょう?
http://ideone.com/Ks6qI ・デストラクタのthis参照がだめ?
・それ以外に不正なコードがある?
・std.convがダメ?
・GCがダメ?
・その他?
csv設定ファイルをキャッシュする処理に連想配列を使ったら、
やけに落ちるなーと思って追いかけてったらこんな感じですっごく困ってます。
>>598 D2.052+Windows だとコンパイルエラーもなく
実行できてそれなりのログも出た
そこのツールはD2.042
結局どこで困ってるのかわからん
>>598 text関数って内部でto!string()してるからcast(void*)とかしちゃだめじゃない?
void*ってto!string()できないから。
http://ideone.com/THXpl >>599 が最新のdmdだといけるって言ってるからstd.convのバグだろうね
とりあえずcast(ubyte*)thisにすれば2.042でも回避できる。
2.042→2.052間でconv.dめちゃくちゃ修正入ってるけどここ直したら行けた 【誤】 /** Pointer to string conversions prints the pointer as a $(D size_t) value. */ T toImpl(T, S)(S value) if (isPointer!S && !isSomeChar!(typeof(*S.init)) && isSomeString!T) { return to!T(cast(size_t) value, 16u); } ↓ 【正】 /** Pointer to string conversions prints the pointer as a $(D size_t) value. */ T toImpl(T, S)(S value) if (isPointer!S && (!is(typeof(*S.init)) || !isSomeChar!(typeof(*S.init))) && isSomeString!T) { return to!T(cast(size_t) value, 16u); }
602 :
598 :2011/03/21(月) 11:45:47.85
Linux DMD2.052/2.051で再現してます。 cast(void*)が未定義だとかで悪いんなら良いんですが、 どうもそうでなさそうな感じなんですが・・・ 先のソースも"remove test:"の箇所を若干書き換えるだけで 再現したりしなかったりします。 問題なのは、同じく文字列の連想配列を持つcsvの設定ファイルを キャッシュるクラスが頻繁にクラッシュしてまして。 ※元のソースはcast(void*)はありませんでした。 ダンプを取ったらconvの中だったり、utf.encodeの中だったりで メモリアクセス関連か、convなのかと思っていましたが・・・ 原因がわからない状態だと、対処もできず困ってます。
>>602 GCによる解放順序は未定義なのでデストラクタではクラスメンバのインスタンスだろうがアクセスするのはアウト
デストラクタの中でハッシュにアクセスしたりしてないですか?
メモリ解放系の後処理を放棄してGCに任せるか 明示的にdeleteやらdisposeを作って呼ぶってことか scope(exit)と組み合わせて何とかなるのかな
今は標準ライブラリの中でGC依存してるから努力しても無駄な気もする
607 :
598 :2011/03/21(月) 12:51:51.93
ありがとうございます。 デストラクタはthisのキャスト以外してなかったと思いますが、 デバッグの過程で色々とやり過ぎたかもしれません。 デストラクタ中心にもうちょい追ってみます。
608 :
598 :2011/03/21(月) 13:54:50.14
全力のデストラクタ全消しで安定しましたorz デバッグのログ出力に問題があったということか… ありがとうございました。
const int i = 0; auto j = i; これだとjの型はconst intと推論されるらしいのですが、 intと推論して欲しいときはどう書けば良いのでしょうか。 C++の型推論と同じかと思っていたら違っていたので驚きました。
>>609 で型推論からconstを外して欲しい局面が思いつかない
この場合は普通に宣言する
逆にconst外れちゃうようじゃ安全性に問題あるよね?
const A a = new A;
auto b = a;
とかbを通してaの中身触れちゃうし
それはもうautoじゃなくてintって書くしかないんじゃないか。 どうしても推論させたいなら auto j = cast(int)i; とか、とにかくintって具体的な型名書きたくないなら Unqual!(typeof(i)) j = i; とか。
Unqualで
const int i = 0;
const int j = 0;
auto k = i + j; //const int
実際はimmutableな値とimmutableな値の和をmutableな変数に入れたかったのですが
これもだめみたいなので。
auto l = i + j + 0; // int
抜け道を見つけたのでしばらくこれでごまかしておきます。
それとcodepadだと
>>609 のjはintと推論されてしまうみたいですね。
codepadってD1だっけ
ちょっと古いD2だったと思う 2.042くらいだったかな 10×10個くらいは破壊的変更が入ってることになりますね
617 :
福盛俊明 :2011/03/22(火) 00:42:43.06
アハ〜♪”
2.042なのはcodepadじゃなくてideoneだな
>>613 見て思ったけど、constな左辺値がconstに推論されるのに、
constではない右辺値がconstではなく推論されるのは……いいんだろうけどどうなんだ。
>>613 抜け道というか、落とし穴になりそうだな
D3っていつ出るの?
引数の宣言のように inout k = i + j; でimmutable, constを引き継いで auto k = i + j; // mutable const k = i + j; // const とかなってくれたら分かりやすい気がするがなぁ…
明日
明日っていつ?
なんかD3が出て今のD2が安定版扱いになるのって、 結局のところ複数のバージョンに対応するライブラリ作ってる人の手間が増えるだけじゃねえの? って気がする。
普通は安定版になったら喜ぶんだけどな 安定版を死骸と同一視するマゾのなんと多いことか
安定版になるには、bugzillaの消化ペースをもっと上げないとなあ
D1が安定しているという幻想をぶち壊す
ヘ(^o^)ヘ いいぜ |∧ / / (^o^)/ てめえがD1が /( ) 安定しているというなら (^o^) 三 / / > \ (\\ 三 (/o^) < \ 三 ( / / く まずはそのふざけた 幻想をぶち壊す
上のほうで使ってる人に触発されてluad触ってるんだが、構造体渡そうとするとdmd落ちた。 渡そうとしてた構造体の中のunittest消したら通ったんで、 すげえ釈然としないが同じ症状で悩んでる人のためにメモ。
luad内の"__traits(allMembers"付近をいじってunittestを無視するようにすれば解決するかもしれない
datetimeのunittestが通らない件 Windows
ubuntu64bitにインストールできません。 debファイルは「amd64用じゃない」と怒られるし、zipの方は「librtが無い」と怒られる(あるのに)。 やり方知っている方いたら助言お願いいたします。
gcc-multilibをインストールしたらdmdできるようになりました debファイルの方はやっぱりインストール怒られる
いや、コンパイル時にdmd -m64 すればいいだけでした。(zipからインストールの時) debファイルはアーキテクチャ無視のインストールでいけるのかな。
64bitマシンとOSは手に入れたが-m64はこわくて試せない
君はそれでもDゲンガーかね
なるほど、デフォルトでは常に32bitコードとしてコンパイルするのね。
せいぜいDゴース
642 :
デフォルトの名無しさん :2011/03/24(木) 00:08:44.99
D言語からperlとかのスクリプトを実行したいんですけど、 どうすれば良いですか?
644 :
デフォルトの名無しさん :2011/03/24(木) 01:14:34.36
perl.dを書くところからかと思った。
libperlってC++だったよな…
テキストボックスのクリックされた行を知りたい ↓ クリックされるとワードが選択状態になるので 選択範囲の位置とテキスト全体から改行文字を数えよう ↓ 日本語を含む場合に行ズレが ↓ テキストボックス:SJIS 2バイト 文字列データ: UTF8 3バイト ↓ orz 今ココ ハジメテ シッタゼ
Windowsと仮定して、なんでGetWindowTextWとwcharを使わないんだ?
649 :
647 :2011/03/24(木) 16:45:16.28
文字位置から行数を取得というのは解決。ちゃんとAPIを探すべきだった。 wcharか・・・まあ考えておきまひょ
テキストボックスだと? DでGUIプログラミングをやるような覇王級の猛者がまだいたのか…
DWT2 のD2対応が更新されてるな たぶん今月頭に誰かがパッチを送った内容だと思うけど さあみんな、これで安心してGUIプログラミングできるな!!!
うわマジだ パッチ送ってから色々あって一週間くらいやり取りが途絶えてたからてっきり忘れられてるものだと ここの人達に感謝 DLL不要で/機能が揃っていて/マルチプラットフォームで/コードがDネイティヴで という条件をつけるとDWTが唯一のGUIライブラリになっちゃうから何とか生存してほしいなぁ
>>654 読みましたd
ライブラリ使用者側としては「DWTを使ってるけど何かあってもDWT作成者には責任はないです」
っていうのをDWTのリンクに添えて書いておけばソース開示なしで商用利用も可能って感じかな
間違ってたら突っ込みお願いします
Cのソースを手っ取り早くDに書き直すとき、 exit(0)とかはとりあえずthrow new Exception("exit(0)")してるんですが、 もっとそれっぽいのありますか。
std.c.stdlib.exit(0);
// s.d struct S { private int n; } // main.d import s; void main() { S s; s.tupleof[0] = 10; } が通っちゃうらめえ。
tupleofでprivateメンバにアクセスできるのかー またバグなのか仕様なのかよくわからない動作なのか
private とか static とか deprecated とか この辺はバグ満載な感じ 修正優先度も低そうだし
-m64であえなく玉砕。 リンカが通らないorz
テンプレート関数はまだオーバーロードできなかった気がする
>>658 見て気づいたが、構造体リテラルでprivateメンバも設定できるのな。
privateメンバあるなら大抵コンストラクタもあるだろうから問題はないだろうけど、なんか微妙に気持ち悪い感じ。
>>664 >>658 の場合は
auto s = S(42);
ができるんだよなぁ
privateは見えない建前だから、その42はどこ行くの?っていう
単に代入するだけのコンストラクタが自動的に定義されてるだけと考えるとわりといける リテラルだと思うときもいけど
privateは読み飛ばしたらいいかな
not accessibleでコンパイルエラーが自然じゃね。
opCall()をオーバーロードすればいいんじゃね?
a += b; と a =+ b; を間違えて30分くらいハマった こういう文法を持つC言語は邪悪すぎる みんなでDに移行しようぜ
>>666 privateと指定することができないじゃん
半年ぶりに戻ってきてdmdのバージョンを上げてコンパイルしたらエラーが沢山 イヒヒイイヒヒ
半年くらいならCとBASIC程度の違いで済むのかな
修正ではなく移植と申したか。
Lua使ってる人がいるみたいだけど、squirrel.dってどっかにあるのかな Bindingsにあるのかと思ったら古かったんで自分で書こうかと思ってるんだが
importファイルだけならhtod使えば30分くらいでできたよ
自動変換して30分とかDさんぱねぇっす というかhtodってメンテされてんの?
いやある程度自動変換させといてエラー出るところだけ自分で修正するんだけどね・・・
htodはconst char*をchar*に変換してくれるのを初めだいぶ使えない子 「エラー出るとこだけ修正」だと↑とかマクロがっつりコメントアウトしちゃうとことか修正できないし ぶっちゃけ手書きとあんま変わらん
exportってどういうときに使うんでしょうか? なんだか無くても動いてるような気がするんですが。
dmd2.052 -m64にてコンパイル… struct st_list { alias st_list *prev; alias st_list *next; void *data; }; assert(st_list.sizeof == 8); // safe どういうことだってばよ?
aliasを何だと思ってるんだ?
prevというメンバがいるんじゃなくて、prevというalias型を定義しただけだから問題ない
ごめん、古いソースだったもんでこうなってたんだ。 こりゃ32bitでもダメっぽいな。失礼しました。
gtkDも生きてたか
dflの中の人が動き出したんですか?
auto f = to!float("0"); // 落ちる えええ・・
692 :
デフォルトの名無しさん :2011/03/29(火) 21:55:02.69
>>691 落ちない
Ubuntu 10.10 64 bit
落ちない win7-64bit dmd 2.052 ちゃんと落ちないなんてどうしちゃったのうちのdmd…
struct Foo(T){ T i; this(T i) pure { this.i = i; } } を-Hスイッチでdiファイルにするとpureが消えますが、これはdmd2.052の仕様ですか。 Foo!(T) bar(T)(T i) pure { return typeof(return)(i); } とか出来なくなる。SciDやろうとしてハマった。
695 :
694 :2011/03/30(水) 00:37:02.76
ちなみに
>>691 は落ちなかった。
ubuntu 10.04 64bit
>>691 2.048で落ちた小数点を探しに行ってなんとなく落ちるぽい動作だな
最新版だと直ってる
void main(){ int i; int* p = &i; writeln(i.sizeof); //-m32でも-64でも4 writeln(p.sizeof); //-m32だと4で-m64だと8 } これが原因でSDLでセグメンテーションエラーとか出る。 具体的には-m64で auto screen = SDL_SetVideoMode(640,480,32,SDL_SWSURFACE); すると、screen.format以降がずれずれ。 こういうのってどうしようもないの?
そもそもDのintはCと連動してない。ビット数固定だったはず。
言語側にint_ptrみたいな汎用整数型が欲しかったな というかなんでないんだろう
よくわからんけどSDLが64ビット対応してないんじゃね?
alias std.traits.Signed!size_t int_ptr; extern(C) SDL_Surface* SDL_SetVideoMode(int_ptr, int_ptr, int_ptr, Uint32); auto screen = SDL_SetVideoMode(640,480,32,SDL_SWSURFACE); これでどうだろ? まあSDLが64bit対応してなかったらどっちにしろ詰むわけだが
intptr_tとかの型ならstd.stdintにあるよん
// c/c++ -m64 printf("%d", sizeof(MYSQL)); => 1248 // D MySQL Driver + DMD2.052 -m64 writeln(MYSQL.sizeof); => 1040 ( ゚д゚)… ! (゚д゚ ) version(X86_64) { struct MYSQL { byte[1248] a; } } 今は反省してない。
>>703 おおマジか…
sizediff_tとかhash_tみたいな意味不明の型は何もimportしないでも使えるというのにどうしてそんな差別を
>>698 構造体の定義を全部64bit用に調整してやるしかないんじゃないかな
大丈夫だSDLの構造体はそんなにいっぱいない
64bit対応に詳しくないんだけどそもそもSDLのDLLを64bitでコンパイルしちゃえばサイズ合う、なんてことはないの?
言語以前のことで悩んでるとしか
そもそも64bitなんて必要あるのかから議論をしようか マーケティングに踊らされていないか オール電化に似た負のイメージしかない
いや、その議論は他所でやろうぜ。
単にメモリが増えるという意味での64bit化は要らんけど、 x86の場合はレジスタ数が増える恩恵のほうがでかいし、各プラットフォームともにここぞとばかりにABIを改良してたりするからなあ ……という話をしようと思えば他所にいくべきですねわかりましたごめんなさい
>>698 64bit対応のことはよくわからんけど
・SDLのバイナリが64bitで構築されているか?
・ヘッダが64bitのラッパーになっているか?(htodは対応してないはず)
・import libが64bit用で生成されているか?(またOMF変換とか一手間かかるの?)
・Dアプリを64bitで記述・コンパイルしているか?( -m64の部分 )
あとWinでSDL使ったらSDL_ImageだのSDL_mixerだのさらにzlibだの
依存が多くてうんざりしたがそいつらみんな64bitなの? とか
derelictは対応してるの? とか
1つ1つ潰してみては
いや、ここまで読む限り、単にD版ヘッダーがおかしいだけでしょ
linuxならいいんだろうけどwinだと64bit版のDLLそろえるのがめんどくさそうだなー
いや、自分でコンパイルしようとしたら面倒だけど、どっかにあるのを取ってくるならそうでもないだろ。 一応Windowsはバイナリ互換性が保証されてるわけだし。
716 :
デフォルトの名無しさん :2011/04/02(土) 09:54:52.90
当方ubuntu 10.04 64bit。 デフォルトのリポジトリにあったlibsdlを入れてるから、64bit版で間違いはないはず。 で、使ってるDインポートファイルの抜粋↓ align(4) struct SDL_Surface { Uint32 flags; SDL_PixelFormat* format; int w, h; Uint16 pitch; void* pixels; int offset; private_hwdata* hwdata; SDL_Rect clip_rect; Uint32 unused1; Uint32 locked; SDL_BlitMap* map; uint format_version; int refcount; } extern(C) SDL_Surface* SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags); これをどうすれば
717 :
デフォルトの名無しさん :2011/04/02(土) 10:03:48.10
sage忘れた if (SDL_Init(SDL_INIT_VIDEO) < 0) throw new Error("SDL_Init failed."); scope(exit) SDL_Quit(); SDL_Surface* screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE); if (screen is null) throw new Error("SDL_SetVideoMode failed."); writeln(screen.fags);// 0 writeln(screen.format);// XXXXXXXXFFFFFFFF ← !! writeln(screen.w);// 0 ← あー writeln(screen.h);// 640 ← はいズレたー
すまんまた忘れた
ちなみに、Dソース中でscreen.??を呼ばない限りははうまく動く。(ように見える)
あ!! alignか? くそー、今試せない
>>720 たぶんそう
SDLの構造体はVC、CodeWarrior、Borlandだと4Byteアライメントが指定されてるけど他はないっぽい
ubuntuならたぶんGCCだろうからalign(4)だとずれるかもしれない。特に64bit
SDLのヘッダに、「ディスクからロードした時の為に4Byteで揃えてます」みたいに書いてあるけど
これは嘘ってことだな
まずC/C++ 64bitと、D言語64bit、の双方で SDL_Surface構造体の各メンバの配置位置とサイズを確認すべきじゃない? 配置位置は、構造体先頭ポインタとメンバのポインタの差から サイズは、sizeofで
| ̄:/ : : /: : : : : : : :i: : : i: :\ : :\ \ |: / : : : / : : : : :.i: : : : |: : : :|: : : |: : : i ' : :|: : : : |: : i: : : :|: : : /i|: : :|:| : : :|: : : | | : :|: : : : |: :.|:斗 十‐/ i|: :∧-‐ト|: : : | | : :|: : : : |イ|: :|:/ |:/ |:/ |ハ: : |: : : | \_,ノ : :|: : : : | レヤ示ト rテv|:./|: : : :| ヽ|: : : : |/{:::::::i } トイ レ: :|/|/ 関東地方 ( |: : : : 代c::ノソ レリ |: : : : | 東北地方 北海道地方 .〈.|: : : : |x`¨ 、¨x.|: : : i:| にいる \|i: : : :| , /|: : : i:| すべての 愛すべき 国民へ 告ぐ ∨リ\: :iト 、 `´ ィ |: : /|リ ‐┴―\|- 〈 >rァ 爪|V |/ :::::::::::::::::::::::ヽ \ リ ::::::::::::::::::::::::__\ :::::::::::::::/ ::r――‐へ rっr‐-、_ :::::::::/ ::// ∧. | ̄ ̄ ̄| | | | | ̄ ̄ ̄ ̄ ̄ ̄ ̄| :::/ ::/ / ヽ|. L|_|_ト' | / ::::/ / \ ただちに 逃げろ | . :::/ |/ | |.........
DのIDEがあるの無いのという話を聞くたびに思う D2でIDEを作れないことの方が問題だと でもDFLのforkといいgtkDの復活といい状況よくなってきてるな
D-IDEは.NETのポートだけじゃなくて全部C++なの?
VisualDはD製だぜ
PoseidonはDWTだったか
むしろDMDと同じくDを使わずにIDEを作るほうが はるかに楽な気もするが 文字列ミックスインがにくい! CTFEがにくい! DMDのよくわからない挙動が(ry
全部愛しいですけど何か?
多分 729 はツンデレ
万能すぎのis文が一等こわい
D言語でまどかマギカのアクションゲーム作ろうず
734 :
デフォルトの名無しさん :2011/04/03(日) 21:00:16.87
絵と音楽を用意してくれるなら手伝う
手伝い方教えてくれたら手伝う
ええい早くgithubなりbitbucketなりのリポジトリを作るんだ
DXlibってDで使えたのか
dxlib4dってのがある
なんか新しい流れw
741 :
デフォルトの名無しさん :2011/04/03(日) 21:39:04.12
リポジトリまだか? 俺は本気で手伝うぞ
まずシステムをどうするかだな・・
2Dアクションか3Dアクションか。 2Dでいいとも思うけど。
DXライブラリならニコニコのMMD使えるからフリーで短期決戦ならそっちが良くね?
そういえばニコニコにも自作ゲームタグってのがあるな 芝が生えるゲームどこ行ってもうたんや…
746 :
デフォルトの名無しさん :2011/04/03(日) 22:13:00.30
システムやジャンルを決める前に、作る側の役割を決めないと。 チームでゲームを作る上でもっとも大切なのはポジショニング。
まどかマギカなんかほっとこうぜ。 それよりD言語でD言語のマスコットキャラの育成ゲーム作ろうずwww
特にD使うような奴が、何もかも全部一人で決める魅力を放棄できるとは思えんw
あんなマスコットを育成するくらいならC++使うほうを選ぶわ
じゃあ間を取って、Dのマスコットキャラのアクションゲームだな。
Dマスコットアクションに清き一票を
じゃあFPSでDマスコットが撃たれると うざいポーズでよけまくるゲームを
破壊的変甲グレートDのマスコットキャラ
Dマスコットのエロゲ
こうしてこの話は雲散霧消していくのだった・・・
―235年後―
D2の仕様っていつ固まるの?
235年してもD2仕様固まんないのかよ…
☆ チン マチクタビレタ〜 マチクタビレタ〜 ☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽ ___\(\・∀・) < D3まだ〜? \_/⊂ ⊂_ ) \_____________ / ̄ ̄ ̄ ̄ ̄ ̄ /| | ̄ ̄ ̄ ̄ ̄ ̄ ̄| | | 愛媛みかん |/
その前に D2.01.0001 が出るのがスジだろ
おお、SDLとOpenGLのインポートファイル使わせていただいております DXも使ってみようかな 協力して一緒に覚え酔う
マスコットアクションw
何の話かと思ったら確かにDの形をしてるな
dmdのmをひっくり返してdwdか…
>>721 確認遅くなったが、align(4)を全部消したら普通に動いたので一応報告。
Portable C Compiler 1.0登場ってすごいな Dも うかうかしてられない うぉるたんにもっと開発スピードを落としてもらわないと
俺が空気の悪い職場に缶詰になってる間にD forumに物凄いGUIツリーができてるなぁ DによるDのためのGUIライブラリって本気で欲しいのは欲しいんだがDFLスルーされすぎワロタ
なぜだ…DFLは素直じゃないか…
つまり素直なライブラリなど要らぬと
素直が一番いいんだよーう
誰かBoostライセンスなGUIライブラリを・・
DFLってなんでそんなにスルーされてんの?
DFL==.NETライク .NETライク==MS的 MS的==悪い DFL==悪い ということだったりして Windows版だけならあとレイアウト関係とgraphics関係の機能が揃えば ほぼ完璧ってくらいまで来てると思うんだけどな
DFLってあまりにも普通に使えすぎて大した話題にもならないんだよね。
そもそもWindows使ってないとか 外国のPC事情なんて知らないけど
DFLのマルチプラットフォーム対応は Gtkの上に実装しようとしてたが 頓挫してるんだよねー。
っていうかWindows専用で.NETライクでってことならもうそれ.NETでいいじゃん。
D.NETは欲しいなあ。GCの意味なくなるけど。
すみません。 DでMMO鯖アプリケーションを作成しているのですが、 同時接続人数10人程度でCPU負荷5%前後、 5%のうち3割近くをGCの処理だけに持って行かれています。 メモリ使用量が増えるにつれ、GCの処理も遅くなる傾向があるようで、 このまま公開に至ると100人程度でパンクしそうな感触なんですが、 このあたり皆様どう対処しているでしょうか? カスタムnewとフローリストの組み合わせあたりが妥当でしょうか。。。
>メモリ使用量が増えるにつれ、GCの処理も遅くなる傾向があるようで、 これあるなぁ 大量にデータを作って大量に捨てるソフトで 3割どころか8割近くGCの処理時間だったことがある 今のDのGCは出来がよくないって聞いたような気もする その時はクラスを廃して構造体だけにしたら格段に早くなったけど GCされるのはクラスだけじゃないよね
まだ古典的なMark&Sweepなのかね? 何にせよJVMのように膨大なリソースを投入されているわけではないからなあ
メモリ使いすぎるとGCが重くなっちゃうとかかわいい///
dmdは世代型コピーGCなはず。
>>782 とりあえず、メモリの確保と解放が最小限になるプログラムを作ろうか。
目標は、プレイヤーのログインとログアウト、ゲームの状態や場面の切り替えの時だけで、確保と解放をする。
...それとも、既にそんな感じ?
std.typeconf.RefCountedタソにも頑張って欲しいんだが こっちも構造体デストラクタのバグのせいでドジッ娘なんだっけ。
ABA Gamesの人だったかが昔 「なるべく注意してnewも使わずリソースがその場限りで 開放されるようにしてるのにそれでもGCが走ッちまうぜ」 みたいな愚痴を言ってたような気がする
D1がメンテナンスモードに入ってる現在、GCの実装が糞とは考えにくいけどなあ。 Dの標準ライブラリが糞な可能性は、今も高いけど。
揺れたー。 DのGCへの信頼が揺らいだと思ったら地面も揺れた。
公式の説明を素直に読めば世代コピーみたいな高度なことなんかしてなくて 普通に全スキャンするイマイチなGCのままじゃない?
793 :
782 :2011/04/08(金) 01:45:36.75
>>783 ちゃんとログを取っていなかったので数値を出さなかったのですが、
30人ログインさせた際CPU負荷30%付近(瞬間的に100%近く)で、
メインループは5%前後だったので残りは・・・
クラスを廃して構造体ってのは参照で少々痛い目に遭ったので控えたいなぁ。
refを使い出すと一時変数の参照を受けたりしてc++より厄介に感じました。
>>787 PCはそんな感じですが、
他は後から調整するつもりで(というかもう少しGCがいい子と期待していた…)
敵やマップの生成、破棄がそこそこ多いかもです。
一番newが多いのはAIのLuaDと通信周りなので、このあたり詰めてみます。
世代別GCじゃなくてまだ単なるM&Sだよ オブジェクトが増えるとGCに掛かる時間が増えるのも認識されてて,Davidがパッチ投げてる(正確なヒープスキャンとはまた別) あと,forkがある環境向けに並行Markとか行う実装もブランチはある(テスターが全然いないから取り込まれる予定は今の所無し)
>>792 公式の説明を素直に読むなら・・・
1.GCで確保された領域を指す 'root' ポインタを全て列挙します。
2.rootから指されている領域内から、 再帰的にGCメモリ領域内を指しているポインタを探索します。
3.GCで割り当てられた領域のうち、 生きたポインタで指されていないことが分かった領域を全て解放します。
4.残ったメモリ領域のデータをコピーして使用領域をまとめる処理 (コピーGCと呼ばれます) が実行される可能性があります。
1~3で少なくともマーク&スイープが実装されていることがわかり、
4で少なくともコピーGCが実装されていることがわかる。
これやっぱり世代型コピーGCだろ。
「可能性があります」ってのは「各処理系はそのように実装してもよい」程度の意味じゃね? DMDの実際がどうなのかは知らないけど別の事のような気がする
説明見るとそうだけど、現在のGCは単純なマーク&スイープで実装されてるってのも前に見たが・・・
>>796 1~3までに、メモリが十分に空いたら、実行しないかも? ということじゃね。
>>797 何時の話か書いてくれないと、コメントのしようが無いって言う。
将来コピーGCを実装するかもしれないから メモリ領域が移動されないことを前提としたコーディングはしないでね!ってことだよ
だいぶ古い話なんでソースが見つからなかったんだけど、コピー&コンパクションはコストの問題で非現実的なので
実際は単純なマーク&スイープに留めてあるよって言う話があってふーんそうかって思ってたんだよね。
一応こんなの出てきたけど俺が見たのとは違う。
ttp://goo.gl/8Ci3Z
つーかソース嫁
>>800 古いのかよ。
むう、せめてGCのソースが見つかれば・・・(見つけられない俺)
tangoなんかは独自にGC組み込んでるんだよねえ
>>796 ,799だろうなあ。
GCの実装変えたよなんて話あったらもっと話題になってるっつーの。
やっぱGCって遅いんだなあ
あーでももしかしたらtrunkの中じゃなくて公式リリースのsrc\druntime\src\gc\gcx.dかも
DのGCはクソ、というのは読めばわかる
初歩的なGCを素直に実装しただけなので、他のGC実装(boehmとか)に比べれば簡単で読みやすい
GCの仕組みを知る入門用として読むのはおすすめ
しかしlispやjavaが営々と積み上げてきた高速化技術がなんもはいってないので実用的にはクソ
>>800 「俺が見たのとは違う」って俺が見たのはどのバージョン?
4年ぶりに2.052確認したけど変わってないと思う
やはりDはだめな子なのか!? 誰かナイスなGC実装してくれよ
モダンなGCにはオブジェクトの移動が不可欠で、オブジェクトを移動するにはある値がDオブジェクトのポインタ(移動可)なのか数値やC由来のポインタ(移動不可)なのか区別できる必要があり、その情報をコンパイラが吐いてくれないことにはライブラリだけでは実装できない
>>809 ぶっちゃけるとネイティブでかつランタイムに大きな負担をかけずに
JavaレベルのGCを搭載するのはかなり厳しい(実際そんなGC見た事無い)
コンパイラを弄ってランタイムとの関係をもっと密にすれば行けるかもしれないけど
そうするとJavaみたいに環境の差を吸収する基盤のないD言語だとそこで死ぬ
勿論タスクを分解して,処理の並列度を上げるという逃げ道はあるけども
region inference的なものを入れれるのであれば新しい道が開ける可能性もあるが
どこまで実用で使えるのか分からんしなぁ
>>810 immutableの仲間が増えそうな気がするな
fixed(char *) c = malloc(10);
char *d = new char[10]; //movable
c = d; // error!
d = c; // ok
よく知らんのだけど、ポインタがありながらexact GCを許すために C#はそんなようなトリックを使ってるんだっけ?
C#はunsafeを明示してポインタを使うと、そのブロック内では対象オブジェクトは移動をロックされる。
>>812 はそうではなくて、D言語風に、素のポインタはいつの間にか移動するポインタ、
fixedを付けると移動しないポインタ、ぐらいのつもりで書いた。細かいことは考えてない。
今思ったんだがポインタ演算中に別スレッドでgc走ってポインタが移動すると結果が狂うんじゃ……
質問なんだけど interface A{} class foo{} class bar: foo , A{} class baz: foo, A {} があって foo[] array に、fooとbarとbazが混在してるとして arrayのうちinterface Aを継承してるものをピックアップなんてできないよね? 書いてるうちに、出来るわけねーじゃんって思ったけど一応質問してみる・・・
Is式は全能
immutableとconstは統一してほしい、inoutがダサい Cとのインターフェイスでもこの辺りや文字列でイラっとくることがある
GCのやり方はプログラマがえらべるよってのがDのスタンスのはずだ 仮想マシンもないのにGCにごりごり依存してる標準ライブラリの存在がネック だとすると・・・ピコーン alias std!FooGC std;
void* p = std!fooGC.stdlib.mallloc(); std!barGC.stdlib.free(p); ('A`)
SDLつかえねええええええ SDL\SDL_audio.d(45): C-style function pointer and pointer to array syntax is dep recated. Use 'function' to declare function pointers SDL\SDL_audio.d(77): C-style function pointer and pointer to array syntax is dep recated. Use 'function' to declare function pointers SDL\SDL_rwops.d(31): C-style function pointer and pointer to array syntax is dep recated. Use 'function' to declare function pointers
>>822 int (*fp)(int, int); //C-Style
↓
int function(int, int) fp; //D-Style
つ DerelictSDL main() の頭でDLL初期化が必要なので注意 DerelictSDL.load(); // SDLのそれぞれのDLLに対してこういう初期化文を追加
構造体のinitのオーバーライドどうやってやります?
>>823 ,824
thx!
とりあえず
>>823 の変換をちまちまやってみるが
うまい正規表現とかないですか
おとなしくDerelictSDLにしといたほうがいいですか
$1とか使って置換すればそんな難しくないと思われる
undefined indentifer bitとか\(^o^)/ bitって廃止になったんじゃなかったか DerelictSDLしてくる
>>830 Cとのインターフェースで使う構造体で初期値が固定なものがあって
それを使うたびに自前で毎回全メンバーに決まった値入れたり
initXXX()みたいな関数呼び出したりするのが自明すぎだし書き忘れたらバグの元だしで嫌なんだ
initを使えれば見た目もすっきりしていいんだけど・・・
struct S { int i=10; } とかするとS.init.iは10になった気がするんだけど、使えそう?
今日からDはじめました 勉強のためにほかの人が書いたプログラムを写経しようと思ってます 初心者でも理解できるような物があれば教えてください
836 :
835 :2011/04/09(土) 21:41:55.63
ごめん、Hoge.a.init ではなく Hoge.init.a と書けばいいのか! できたー!サンクス!
>>833 D公式のトップにあるやつとか?
ただ、もしあなたがプログラミング自体の初心者なら、別の言語から始めることをお勧めする。(とりあえずjavaでいい)
えと、何か言いたい?
T.init.s.a とか?
そーいや今日の会議はどうだったのかなっと
会議行った人、感想ちょーだい
実際Phobosは妙な機能は充実してるけど基本的な機能が足りない気がするんだよね Locale周りとか…dwt2使ってて国別のリソース取るところではたと困ったし
「こんなに沢山いたのか」「非実在D言語er」「僕は一人じゃなかったんだ」 とかお前ら人数に感動しすぎww
>>848 こんなこと出来たのかw
テンプレートとか苦手なロートルだけどこういうの見るとやってみたくなるな
動画撮ってたりしないのかな?
動画を撮るプログラムをDで書くのが間に合わなかったらしい
完成してたはずなのに、当日コンパイルできなくなってたんですね、わかります
昨日はpushがあったからな(笑) 破壊的なのかはしらんが
いやースコープガード文スタイリッシュだー。 最新dmdにスリルを求めてしまう事の次にD言語使ってる感が出る。
一応いっとくとDのGCが特にクソな訳ではなく rubyとかのスクリプト言語のもたいていクソなんだが メインの実行が遅いので、メインとGCの比率で見ると目立たないだけ
すみません、
>>794 のGCのパッチは何処にあるでしょう?
GCも何とかなるなら何とかしたい。
大量のバグをかかえているdmdよりも、ドキュメントを疑うのかよ
dmdは常に正しい
値型がconstなら初期化以外変更不可 そう、貴様は同じ場所に留まって、もがき続けるしかないのだ!
言語仕様書は、dmdの挙動の説明書ではない
dmdの挙動が言語仕様を決定する
つまり、挙動不審なんですね、わかります。
なあ、いいこと思いついたんだ聞いてくれ scope class を、scope class のメンバ変数としても存在出来るようにするんだ。 で、scope class はデストラクタ終了後に自分の scope class メンバ変数を delete する。 ちょっと突破口の香りしね?
面白いと思うけど、何に対する突破口? 光魔術に対する突破口?
闇プログラマーとしての突破口か。
↓こういうのを一つにまとめて if (nodeSrc == node.parent || nodeRes == node.parent || nodeExt == node.parent) { 〜以下省略 ↓みたいに書けそうな気がするけどなにか簡単な書き方ないかな? if (node.parent in [nodeSrc,nodeRes,nodeExt]) { 〜以下省略
つ template
てかこれでいいわ。 void*[T] include(T)(T[] a...) { void*[T] bar; foreach(o;a) { bar[o] = null; } return bar; } を定義しといて if(node.parent in include(nodeSrc,nodeRes,nodeExt) ){〜以下略
C/C++でいう、 〜前略〜 int i; int a[256]; char b[1024]; 〜中略〜 int *ap = a; char *abp = (char *)ap; for(i = 0; i < 1024; i++) abp[i] = b[i]; 〜後略〜 とか、 struct test_s{ int a; char b[16]; }; 〜中略〜 test_s a; char b[20]; 〜中略〜 test_s *ap = a; char *abp = (char *)ap; for(i = 0; i < 20; i++) abp[i] = b[i]; 〜後略〜 とか、できますか?
つ asm
相変わらず、趣味で遊ぶにはいいね、ってとこから進んでないのなw
どゆこと?普通にできるでしょ
>>875 int[256] a;
char[1024] b;
(cast(char*)a.ptr)[0 .. 1024] = b[];
test_s a;
char[20] b;
(cast(char*)&a)[0 .. 20] = b[];
え、バイト列から構造体や型の違うデータを取り出すのに、アセンブラが必要なわけ・・・?
>>879 おぉ、これはずいぶん簡潔に・・・・。
こうすれば出来るんですね。ありがとうございます。
int[256] a; char[1024] b; (cast(char[])a)[] = b[]; これでもいける
D2 + DFL のサンプルコード探しているのですが GUI部分とメイン処理を別スレッドでやるのに、参考になるもの何処かにないでしょうか?
可変個引数 (...) な関数の内部で、可変個引数 (...) な関数に 引数をまるまるスルーパスすることってできます?
>>883 C#(というか.net)で、やりたい事書いているサンプル探して、それと同じ様な
クラスやメソッドがDFLにないか、探してみるといいよ
enticeのヘルプにクラスの一覧みたいなのがあったと思う
>>884 void f(T...)(T args){ g(t); }
void g(T...)(T args){}
>>884 C/Dスタイル可変個引数だと出来そうにない。
代わりに、テンプレートのタプルパラメタを使えば出来るはず。(
>>887 と同じ方法)
void foo(...) を void foo(T...)(T t)に変えて、tをそのまま渡す。(渡す先はC/Dスタイル可変個引数でもおkなはず)
型安全可変個引数だと、受け取った配列(またはクラス)をそのまま渡せばよさそうだ。
WindowsのコマンドプロンプトでもPowerShellでも、標準出力でascii外の文字 を使うと、正しく表示されないのが困ったもんだ。何でUTF-8なんか使うんだ。
891 :
884 :2011/04/13(水) 03:09:52.72
>>887 , 889
なるほどなるほど。試してみます。
ありがとうございました。
D言語コンパイラをCentOSにインストール出来ない・・・。
なんかニューカマー多い?
CentOSでDMDがなぜ動かないのかと思ったら、gccが4.1.2に巻き戻っていた・・・。 make長げー・・・。
ついにD言語が一大流行をはじめたか
>>890 コマンドプロンプトの文字コードは変えられる
>>895 多分、流行ってない。
けど、思ったよりだいぶマトモな仕様だし、
有名なソフトに使われればその日も近いかも。
本来ならPhobosがOSのロケールを見て出力(入力もか)文字コードを変えるべきなんだよな 内部UTF-8と決め打って、なおかつ他の箇所では適切に(なるまで時間かかった気もするけど)変換してるんだから
や、やっぱり俺なのか!?
ライブラリじゃなくてフィルタ(SJIS->UTF, UTF->SJISの2つ)があれば パイプであれこれ柔軟にできるんじゃないかと思うが 探してもうまく見つけられなかった
nkfとか?
本家につながらないー
ホントだ。
節電のためサーバを落とします
東電エリアなのかよ
>>897 キラーアプリがあればとみんな待ち望んで誰も動こうとしないのもまたD。
そろそろすごいもの作りませう >>910-
やっとつながった
上の方のD言語使いがみんなして「俺がスゴイの出すからちょっと待ってろ」って言ってるんだもん
912 :
883 :2011/04/13(水) 20:12:55.82
キラーアプリキラー それがD
いま俺がやってる、ってのはいつまでも出ないフラグ 無視して先に出すべ
Dマスコットアクションの敵にキラーが必要だな
真の敵は自分自身だ スパイダーマン3みたいだな
spy Der man Derの中にC++のスパイが?
luad には未来を感じた 誰か似たようなインタフェースのSquirrel版を作ってくれまいか Squirrel使ったことないけどw
現状だと構造体のインスタンス保存してないからメソッド呼べなかったりとかで
(つか中でthis参照するとめちゃくちゃな値が返ってくる)
使い物にならん感じだったなあluad
自分でも作ろうとしてみたが、
>>75 もいってるprivate判定とかで面倒になってる。
__traits(compiles)で呼び出すコード書いて通るか否かでやってるんだが、
・特殊関数(__ctorとか__unittest*とか)
・静的変数と普通の変数
・static関数と普通の関数
・↑の各種オーバライド
とか判定してたら条件分岐多すぎて閉じ括弧の量がlispみたいになっちまって今書き直してるとこw
はぁ・・・。DMDがCentOS5.6で動いてくれない・・・。 gcc-4.5.2にアップしたのに、4.2.3よりバージョンが低いと言われた・・・死にたい。 そもそも、なんでgccが必要なんだよ・・・。
dmcじゃダメなんだね
923 :
デフォルトの名無しさん :2011/04/14(木) 06:11:31.55
うちはいけてる
924 :
920 :2011/04/14(木) 07:42:10.66
なんか寝る前に書き込む時違和感あったんだがオーバーライドじゃなくてオーバーロードだった。 はじゅかしい。
>>900 各自で作るのはいいけど、
作ったらPhobosに入れて欲しい
>>926 おおおおおおおお俺は、つつつつつつつ作らないぞ!???????????????
>>921 良く分からないけどgccって名前のプログラム作って引数を変換してdmcに渡すとかじゃだめなの?
gdbがd言語に対応してたことに今気づいた ddbgの完成度にもどかしさを感じてたので mingw環境(3つ目)をまた入れてみるか
dmcはwindow用しかないでしょ
windows
>>928 OPTLINKを使わなくていいなんて嗚呼
なんて羨ましいんだ!!なんて羨ましいんだ!!
嫌いなの?
ちょっと大き目のソフトを-gつきでリンクして 意味不明のダイアログが出てきて失敗した思い出しかない
mingw-gdcとかってないの?
普通にあるよね
alignはprivate:みたいな感じでスコープの断絶があるのかな?って想像はできるけど Bはなんだろな
D言語はバグとか破壊的変更といった鞭も多いけど高性能なforeachとかscopeとか飴も一杯ある ここは一つDに飴をくっつけてDame言語と呼ぼうと思う
>>939 2パスせまんてくすまじっく!
Dはだめじゃないよかわいいよ
import式はgtkbuilderと相性がいいな。UIファイルと実行ファイルをまとめられる。
>>942 何いってんだ飴ばかりじゃないかと言おうと思ったがDame言語が強まるだけだった。
D言語は好きだけどD言語erの自虐的なMっぷりも大好き。
Bugzillaの残り件数見てもなお、D2を使おうとする俺は、Mなんだろうなあ
ウォルたん「バグ多くねーし。GCCと比べてもちょっと少ないし」
ヒント:ユーザー数に対して見つかっているバグの数
Dは仕様が明確だからC++みたいにバグがバグかどうか分からないという事例が少ないんだよ
そりゃあもちろんバグじゃなく仕様だからな
VisualDでリンクできねえええええええ SDL.libとSDL_mixerだけはできてるうう
953 :
921 :2011/04/16(土) 04:57:15.84
GDC入れて落ち着いた。 DMDなんて、夢だったんや・・・。
開発スタッフの人数に対して見つかっているバグの数を考えると憂鬱になる
発見数は愛の指標だと思うことにした
.libってバイナリじゃないの? SDL_netのlibをリンクしようとすると エラーがでる エラー 3 Error 43: Not a Valid Library File
ひょっとして忍法帖がいるのか?
Derelictでかいし、SDL+OpenGLだけなら
>>829 のほうがすき
つうか確認のために踏んだら素材が増えてるよwww やったねたえちゃん!
libはBorland用の(omf)使うか、VC++用(coff)をcoff2omfで変換するか、
もしくはimplib /s xxx.lib xxx.dllでdllから自分で生成する。
この辺のことって今はどっか(友の会あたり?)に書いてあるのかしら。
現状見出しにある項目って公式和訳で完全に事足りるよね・・・
>>829 にlibつけてほしいけどライセンス的に問題あったっけ
>>829 は文面から放置のにおいを感じたから
スルーするつもりだったのにw
もりもり増えてるじゃないか!
スペルインターセプト
D言語は犠牲になったのだ...大量のバグによってな
もしかして class C {
static int Func() { return 2; } } とかして C.Func()ってできない? C inst = new C(); inst.Func()でなくて
できるはず
久々にバグに出会えたと思ったらデマかよ
何で出来ないと思っちゃったのか気になる
バグが出ないってのはアレだ、使い込みが足りない 1日10本ぷろぐらむを書く、それを日課にすべし
コード2万本です
それで足りるのか?
import std.stdio; class C { public: static int func() @property { return data; } private: static int data = 13; } void main() { writeln(C.func); }
しまったまた書きこんでしまった import std.stdio; class C { public: static int func() @property { return data; } private: static int data = 13; } void main() { writeln(C.func); } これでコンパイル通らず5行目で'this' is only defined in non-static menber functions, not func と出るのだがどういう意味ですか><
普通にコンパイル通るし実行もできる@2.052
あれ?コンパイル通ってしまった スペルミスだろうか(#^ω^)ビキビキ
スレ汚しすみません
こんな感じのシングルトンクラスをマスターに作ってたんですが、 複数のスレッドからA.instance()を呼び出す際に、 ちょくちょくセグメンテーション違反で落っこちます。 static変数はスレッドセーフと思ってましたが、 根本的に何か間違っているでしょうか? class A { B[] b; static A instance() { static A a; if(a is null) { a = new A(); } a.update(); return a; } void update() { B[] tmp; // 外部ファイルの更新チェック、読込み等。で、だいたいこの辺で落ちる synchronized(this) { b = tmp; } } } class B {}
constでもなけりゃスレッドセーフじゃないんじゃね?
985 :
982 :2011/04/19(火) 21:58:51.90
ありがとうございます。 log4cxxも同じような感じで使ってたんですが、 ログ出力を止めたら再現しなくなりました。 恐らく他(自分のコード)に問題がありそうなので調査してみます。
>恐らく他(自分のコード) Dに限っては疑うべきは自分のコードにあらず
大丈夫じゃないと思います
っていうかスレッド別に生成されるからスレッドセーフになってるんであって、 sharedにしたらふつーにsynchronizedにしないとダメなんじゃ
gccにInterlockedIncrementが無いぜーと嘆いてたら、D言語なら文法レベルでサポートしてるぜ、 と言われたんですが、本当ですか。
>>990 どんな話題だ、と思いつつ、、、
単体の命令には無いけど、synchronized文を使えば同じ事は出来るな。
てか、gccでも同じ関数使えるだろ。。。
synchronized文は、その文を同時に複数実行できないようにするだけあって、 アトミック化するのとは違うのでは。 core.atomicってどうなってるのだろう。
>>990 gccには__sync_add_and_fetchってあったような
キーワード長ぇよ せめてsyくらいにしてくれ
>>986 そこは意図的にスレッド別に作ってます。
スレッド数が最大8程度なので、
同期を取って一つを使い回すよりかはこういう使い方のほうがいいかなと。
うめ
998
999
100000000000000000000000000000!!!!!!!!!!!1111111
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。