乙
早く周辺ライブラリがdmd2.020に対応してくれないかなー DFLつかえねー
乙 うぉるたんかわいいようぉるたん
かわいいオッサン甘く見るなよ
LL Futureで見た生のラリー・ウォールは非常にお茶目だったといわざるを得ない うぉるたんもあんな感じなんだろうか
dmdのコーディング規則は今風ではないと思う。
では何風なんだ?
馬耳東風
今風ってどんな感じ?
略語の多用とか関数の引数がやたら多いと古くさい感じがする
refを返す関数テンプレートがよく分からん real t; ref real f(S)(S rhs) { size_t tmp; return t; } z.f(1.0); z.f("hoge"); variable f!(double).f.tmp only parameters or foreach declarations can be ref variable f!(invariant(char[4u])).f.tmp only parameters or foreach declarations can be ref # 返値を ref T から T にすると通る # 関数テンプレートでなければ通る # ローカル変数を作らなければ通る
どう見てもバグ
なんかもうすぐマルチコア全盛期になって C言語では生かしきれない、Lisp/Haskelマンセー って記事を見たんだけど、D言語はこの先生きのこれるのか?
どこの記事?
本当にCの立場がやばくなるとしたらDの方がまだ戦えるんじゃ
我らがDには組み込みのsynchronizeもあることだし、 標準ライブラリにスレッドもあるからCよりはやりやすかろう。 並列化をカプセル化しての隠蔽もやりやすいし、 デリゲートもあるからイベントドリブンなコードを並列化するのもやりやすいと思う。 しかし何より配列演算が定義されたことがうれしい。 あれがあるとないとでは、直感的にベクトル演算が使えるかどうかで大きく差がある。 あとは実装されるのを待つだけだな。 固定長配列の"rectangular"なalignmentも含めてFORTRANを知っている人間ならうれしいはず。 gotoもあるから移植も楽にできるしね。 ……やっぱDプログラマって古い作法が好みなのか
関数型言語がほんとに並列計算に強いならスパコンあたりで すでにマンセー状態になっていないとおかしくない?って思うんだけど
ピュアな関数型言語はin-placeに値を書き換えることが出来ないから、大規模な数値計算には向かないよ。
matzがerlangを褒めていたときを思い出すな 個人的にはGLSLを隠蔽したいと思ったときがある expression templateを使って普通の式を書くようにシェーダを記述するとか夢があるなあと。 Cellは設計の概要しか見たことがないが、ローカルストレージの小ささが印象的 アセンブラが書ける人でないとつらいかなという気もするが、 DでもGCを書き換えるか、struct/unionと固定長配列を使い倒せば結構いけると思ったなあ。
マルチコアをぶんまわせるようにはなって欲しいな ところでシェーダといえばCgの次はDgでおk?
DTLってまだできないんか…? 標準で便利なコンテナライブラリないとめちゃくちゃ不便なんですけど…
Tangoに色々あるよ DFLがdmd2.020サポートktkr うまく動いたわほーい
Tangoのコンテナライブラリは使い物にならないなぁ… STLのIteratorみたいにinsertとかremoveとかできないし、種類も足りてないしdelegateでsortできないし。 せめてdcollectionsくらいの性能はほしいなぁ DFLまじだ…!SVNの更新とかないからどうしたのかと思っていたが…
>>28 DTLってまだ開発続いてるの?
ずっと止まってる気がするし誰かが引き継いでいるようにも見えないんだけど…
一時期名前を変えて開発されてたような気がするんだけどどうなったかな
D言語でDirectXが使いたいので試してみたのですが、
コンパイルエラーが出てしまい、解決できません。
ソースはこちらのをコピペして使っています。
ttp://www.thrudr.net/wiki/index.php?D%B8%C0%B8%EC%2FDirectX%2FCreateDevice エラーコードはこれ(Poseidonを使ってビルドしています)
C:\dmd\dmd\bin\dmd.exe Main.d -ofDirectXTest d3d9.lib
OPTLINK (R) for Win32 Release 8.00.1
Copyright (C) Digital Mars 1989-2004 All rights reserved.
DirectXTest.obj(DirectXTest)
Error 42: Symbol Undefined _D5win328winerror6FAILEDFiZb
DirectXTest.obj(DirectXTest)
Error 42: Symbol Undefined _D5win327directx9d3d9types13D3DCOLOR_XRGBFhhhZT5win327directx9d3d9types8D3DCOLOR
DirectXTest.obj(DirectXTest)
Error 42: Symbol Undefined _D5win328winerror9SUCCEEDEDFiZb
DirectXTest.obj(DirectXTest)
Error 42: Symbol Undefined _D5win327winuser13CreateWindowWFPxuPxukiiiiT5win325winnt6HANDLET5win325winnt6HANDLET5win325winnt6HANDLEPvZT5win325winnt6HANDLE
DirectXTest.obj(DirectXTest)
Error 42: Symbol Undefined __moduleUnitTests
--- errorlevel 5
dmdのバージョンは2.020、DirectXのヘッダはdsource.orgで落としたのを使っています。
d3d9.libはcoffimplibで変換出来たのですが、
dxguid.libは"not an import library"というエラーが出てしまい、変換出来ません。
どなたかお分かりの方がいらっしゃいましたらご教示下さい...
>>33 使っているwin32(とDirectX)ライブラリをコンパイルしてlibファイルを作って、
それもリンクする必要がある。
リンカエラーのSymbol Undefined = コンパイル済みobjが見つからないというのは常識ですな
newsのTonyってなにもんだ
Thread.sleep()ってどんくらい信用できるんだろう? TimerCallback的なことをThread使ってやろうと思ってるんだけどいい方法あれば教えて下さい。 class CTimerCallback : Thread { public: this (void delegate() dg) { _dg = dg; super(&run); } private: void run() { sleep(10_000_000_0); _dg(); } private: void delegate() _dg; } これで10s後にdg()が動くって認識だけどあってますか?
>>36 PASCALとFORTRANの世代でcollege卒でengineerだったと言ってるから、40〜50代の工員さんだろうな。
教育言語について語ってるから指導的立場だろう。
>>37 RTOSでない限りは、スレッドのスケジューリングで10秒開けたら平均10秒、標準偏差1秒以内でやってくれる。
忙しい時にそのスケジューリングが守られる保証はどこにもない。
40 :
33 :2008/11/18(火) 09:18:39
// dmd 2.020 import std.stdio; import std.string; import core.thread; void main() { real r = 12.0L; string inThread; string outThread; auto t = new Thread({ inThread = format("%.20f", r); }); t.start; t.join; outThread = format("%.20f", r); writefln(inThread); // 11.99999999999999964400 writefln(outThread); // 12.00000000000000000000 assert(inThread == outThread); // core.exception.AssertException@main(17): Assertion failure } 何でこんな結果に…?
どういうバグだこれー
仕様。浮動小数点数は最適化によって値が変わる場合がある。
45 :
41 :2008/11/19(水) 00:46:56
コンパイラによる最適化の結果というより実行時の問題ような気がするし、仕様ではない気がするなぁ…。
std.formatのassert群(10.0と5.0しか確認してない?)の趣旨からすれば間違いだし、 浮動小数点といえど整数表現可能なものなら精度というのもどうかと思う、 とはいえ桁を数えて引き算したりしてるのかなと思ってソースを読もうとしたが、 最終的にsnprintfを呼んでいたので読む気がなくなった
%f じゃなくて、%a で2進数でどう表現されているのか確認した方がいいんじゃね?
>>47 それは同じ。
10進数変換時のミスだと思われる。
しかし有効桁数以内の整数なのになあと
すでにバグ報告されてるのかどうかわかんねー どうやって探すかな・・・
同じコードからは同じ数が生成されるべき、という理想はわかるが、 現実問題としては、そもそも浮動小数を==で比較するのが間違いの元なんじゃないかと。 「浮動小数 比較」でググるとそういう話がいっぱい出てくる。
ちなみに、CやC++で
>>41 のようなコードを書いた場合、C95や標準C++の仕様では==で一致しないことがあり、C99では一致することが保障されているらしい。
いや、そういう問題じゃないし これはstd.formatのバグ
いや、演算してないから丸めが行われること自体バグなんだが
とりあえず逆アセンブルして確かめてみればどうなのさ
ウチのKubuntu8.04で走らせたら同じ値だった
58 :
41 :2008/11/19(水) 20:48:24
>>44 の言いたいことが
>>50 のレスで理解できた。
でも、文字列と数値の変換の段階で再現性が出ないというのは
保存とかのあたりで困るので、やっぱりバグにしておきたい気分だね。
12.0という値をiniとかxmlに保存するとき、
容易に編集可能な"12"という文字列と、
Base64エンコードされた"AAAAAAAAAMACQA=="とかいう文字列
前者がいいと思うのは俺だけではないハズ。
編集させたくない場合はエンコードでもいいと思うけど。(バイナリファイル使えよとも)
どう見ても普通の浮動小数点の丸めの話と全く違うんだが、 なんでそういう方向に話が行ってるんだ? 同じ入力からは同じ出力が出ないとおかしいだろ。 12 は 1.8p+3 で表現できてるから、2進-10進変換問題とも微妙に違う気がする。 どっかで80bit精度失うようなことしているんだろうか?
2.020の参照返し出来る関数使って、 ただアクセスするだけのプロパティを関数一つで出来そうだなと思ったんだけど、 class A { private int n; ref int count() { return n; } } auto a = new A; a.count() = 5;//呼び出しに括弧つけないとプロパティ用意しろと怒られる これ括弧取れるようにならないかなぁ… void size(int m)とかあればそっち優先なのは分かるんだけども、 通常引数が無い奴は省略できる構文規則があるはずだよね… 構文解析の時に関数がマッチしなかったら、 先にプロパティとして呼び出し規則適用してみる、とかできないのかな
>>60 俺は関数コールで()をつけなくていいっていうこと事態がキモイんで
早く直してほしいと祈るばかりです
プロパティはプロパティとしてちゃんと構文用意して欲しいわぁ。 というかJava7のプロパティ、 アレならprivateプロパティ使えばメンバ変数はもう要らなくできるんじゃ…… Dならメンバ変数と同レベルまで最適化できるはずだし
プロパティのコード・バイナリの最適化について考えたことはあるが、 ・メンバ変数への直接get/setとしてほしい場合 ・get/setのどちらかが直通になって片方は関数を噛ませる場合 ・プロパティをインターフェースに記述した際の、変数アクセスと関数アクセスのオーバーライドと選択 この辺を整理すると結構面倒なことは確か。
更新まだ?
まーだだよ
もーいーかい
まーだだよ まーだなの?
導入しやすいDirectXラッパライブラリ教えてくれ〜
なくね?
dHellはSDLラッパだったか
DってC++とDの部分に分かれてるけどどうやって処理してるの?
限られた条件の下であればC++の関数やクラスとリンクできるとか言うやつなら知ってるが・・・
73 :
デフォルトの名無しさん :2008/11/23(日) 08:01:06
分かれてる?なんのことだろう
CとC++の区別がついてないとか
dmdのソースのコメントに//が使われてるよ! ……あれ? ヘッダ内でstruct内に普通にメンバ関数っぽく関数宣言があるけど、 Cってstructの中に関数をメンバとして書けたっけ? DMの拡張?
コンパイラがCでライブラリがDで書かれてるって話じゃないのか
dmdはC++を使って書かれてるっぽいね。thisとかあったし //に関しては最近のC言語だと使えるはず
dmdコンパイラはC++で書かれてるよ ライブラリは当然Dだよ
ところでgdcのほうは最近なんで動きが無いんだろう?
忙しいって話だったはず。
適当に書きすぎた 今手元にあるのは2.020っていうバージョンなんだけど srcフォルダの中にdmdっていうのと、druntimeの下にもdmdっていうのがあるじゃん? 前はC++で後ろはDだと思うんだけどこれってどう繫げてるのかなって。 C++の方は構文解析とかでDの方はオブジェクトとかの内部実装に見えるんだけど
>>81 CallExpなど+リンカで。というかソース嫁。
確かにextern (C)ってついてるから普通に出来るっぽい
>>81 druntimeの下のはライブラリだ。
コンパイラ(src/dmd, C++)とリンクされるものじゃなくて
dmdでコンパイルした*.dとリンクするためのもの
どうもTangoのUnicodeBomのEncoding.UTF_8NがBOM有のほうを指してるんだが… 日本人感覚から行くと違うよな? 指摘しようにもどこでいえばいいのかわからん…匿名でのバグ報告ってできないのか?
>>82 >>84 思いっきり勘違いしてた。
C++からDに書き直しているんだと思ってて、どうなってんだろうと
すっきり出来た、有難う。
>>86 ちなみにDで書かれたdmdfeが欲しいならdparserってのがある。
88 :
87 :2008/11/23(日) 21:16:53
お前らdmdfe/dparserって要するに何ですか gccとかと連携取れるの?
gccとの連携はgdc、llvmとの連携はldcがある。 dmdfeはdmdのフロントエンド部分をコンパイルできるようにしたもので、それをD言語に直した物がdparserね…といいたいのだが、何かdparserにllvm_backendの文字が…。
もう少しだけ教えてください どんな形式で抽象構文木を出力するの?
つ lexer.c, parse.c ちなみにパーサは再帰下降の手書きパーサね。
DUnitでぐぐったら見つかったから一瞬ウヒョーって思ったけど、 よく見たらdelphi用だった。
そもそも、unittest 構文があるのに必要なのかと。
win32.commctrlをインポートするとコンパイル時にエラー吐くんですが 安定したバージョンって無いですかね?
>>96 あれだけじゃユニットテストは出来ないよ
総合件数、成功件数、失敗件数、失敗メッセージを羅列するようなのが必要
assertで一回失敗しただけで止まるようなのは困る
>>99 assert しなければ良い、とかじゃなく?
UnittestAssert みたいなの定義して、件数カウントしたりメッセージ保持したり
するシステム作れば。
というか、そういうことをしてくれるのが DUnit ってことか?
unittest{}のassertは全部実行して欲しいな
Dってコンストラクタとかで変数の初期値を決めた値を変更できないようにできる? ロックとかそういうのじゃなくて staticとconstの中性的な存在
出来るのか、サンクス
C#でいうreadonly的なモノかな
>>105 そうそう、これです。
初期化を死ぬまで忘れない、
first impression never forgetな感じです。
>>99 そもそも unittest には assert 使わなければならないなんて仕様はないわけだが。
まぁ、他のライブラリで assert 突っ込んであって、止まるってのはありがちだけど。
ちゃんとテスト管理してるやつはそのくらい自前でやってるだろ。
すみません、ちょっと質問させてください。 Tango & DFLを使っています。 "main.d" import win32.core; void main() { Beep(440, 1000); } というのを"dfl -gui main.d"だとうまくコンパイルできるのですが、 "dsss build -gui main.d"とすると C:\tango\bin\..\import\win32\winnt.d(47): template instance forward reference to template declaration CPtr(T) とエラーが出ます。どうすればいいでしょうか。
template instance forward reference to template declaration CPtr(T)
>>108 バージョンの情報とかがないから何とも言えませんが
dsssの問題かもしれません。dmdだけでいけるか試してみるといいと思います。
その程度のコードなら
dmd win32.lib main.d
とかでいけるはず。
>>109 「テンプレートの宣言の前にテンプレートが参照されている」
ということでしょうか?
win32\basetsd.dを修正してみたところ、うまくいきました。
ありがとうございます。
>>111 その方法でも大丈夫ですね。
ありがとうございます。
C#がネイティブ吐いてくれればいいのに
更新マダァァァァァァ
C#はインテリセンスを出しやすいように考えられたと聞いたがDはどうなのだろう
IDEが事実上存在しないDにどうしろとw
結局、文字列mixinの最凶っぷりの前に伝説のIDEでさえも屈するわけだが、っていうのがいつもの流れだな
C++erは文字列mixinが導入されたりしたら喜ぶの?絶望するの?
そもそも、いつもプリプロセッサマクロ使っているんだから、 文字列 mixin が増えたところで 単にめんどくさい機能が増えたくらいの印象だろう。 新機能増えてもしばらく移植性ないから使えないし。 新機能増えて移植性下がって喜びまくるのはD言語くらいだぜ。
きたー ちゃんとバグ投票の結果が拾われているようだ
*Exceptionを*Errorに変えたってか・・・うーん
>>123 OutOfMemory以外のエラーはコーディングのエラーだからから悪くないと思うが。
でも何でOutOfMemoryまで?
onRangeError存在しねー?
またsc.ini変わってるな 前のdruntimeは削除 sc.iniをdruntimeからruntimeへ
今回の変更がよく分からないよウォルタン! 誰か解説ぷりーず。 何気にdruntime分離したけどやっぱりそのうちlibphobos2.aに統合するよって書いてある?
その理解は英語能力的にやばいだろ
-safeスイッチってなんだ? safe memory model…? ちょっとググろうとしたけど産総研のCコンパイラとか出てきたりよくわからなかった…誰か解説ぷりーず
131 :
129 :2008/11/26(水) 23:24:28
つまり、module(safe)は、ポインタの操作のような危険なことをしているけれど 外部から見たらそれを隠蔽してSafeDのように動作するという保証をつける、ということかな? んで、-safeスイッチはSafeDのみのコードで構成することを強制するってことかな?
version `GLIBC_2.4' not found (required by dmd) orz lenny入れるか
>>128 畜生やっぱダメなんだーぁ俺の英語力じゃその程度なんだー
くっそぉー、明日こそ正しい翻訳を……
実数の区間を表現する構造体を作りたいのですが、 開区間を閉区間の設定を(正しくない用法と知りつつ)opCall, opIndexで代用しています。 interval[min, max] この方法だと半開区間が表現できないし汚いので、なにかうまい方法がないかなと模索しています。 実装が必要なだけなら上限加減と両者の開閉の4引数関数を作るだけでいいのですが、 Dらしい変態的方法があればなあと存じます。
std.random.UniformDistributionを参考にしてはいかがだろう
ChangeLogにThis breaks existing code. とか書いてあるとやっぱりちょっと安心してしまうな。
D 用の wxWidgets ってありますか?
wxD
DMDでコンパイルしたやつってかなりサイズ大きくなるよな。 だいたい同じ機能のプログラムをVC++でコンパイルしたものとDMDでコンパイルしたもの を比べると1桁サイズが違ってワロタ
>>140 それはVCランタイムは外部DLLを使うようになってないか?
あとDMDはリリースコンパイルしてる?
それなら差は100KB以下になるはず
Dも任意でcrtdll.dllとかを使うようにできないかな
>>143 ユーザサイドの努力では辛いものがあるような
これらをstd.conv.toに統一しないのかな std.string.toString std.conv.toXxxxxx
ようやくコンパイルまでたどり着いたけどファイルが複数あるときはどうすればいいんだろ、うまくいかない ---------------------------------- // hello.d import std.stdio; import hello2; int main(char[][] args){ int z = hello2(); writef(z); return 0; } -^-------------------------------- // hello2.d int hello2(){ return 0;} ---------------------------------- >C:\Dev\DSciTE\bud.exe -DCPATHC:\Dev\DSciTE\dmd\bin -IC:\Dev\DSciTE\lib -I.. -I..\.. -full -debug -g -unittest -w hello.d hello.d(5): Error: function expected before (), not module hello2 of type void >Exit code: 1
そのhello2には暗黙にmodule hello2;ってされていて、 モジュール名と同じ名前の関数は定義できない
クラス定義でテンプレートmixinがprivateで修飾出来ないのは仕様か 出来ないなら無駄な宣言に警告でも出してくれればいいのに…
>>147 上手くいった、ありがとう・・・本当に・・・ありが・・・と・・・ぅ・・・
指定フォルダ以下のすべてのファイルのパスってどうやって取得するの?
151 :
150 :2008/11/28(金) 18:56:42
もう誰かforeachの変更を解析した?
やってることはforeachからforへの書き換えだよ
Rangeとして集合っぽい型そのものを与えるのは苦労しそうな予感。 既存のものを非破壊的に拡張するには foreach(iter; agg.iter) が一番楽なのかな
DのRangeはnext/retreatすると勝手に短くなるから、 後で使いたいならコピーをとっとかないといけないのか。
空レンジの判定はdoneだった気がしたが、やっぱりemptyにしたのか。
配列を後置で宣言する人っているの? 前置(int[] a;)と後置(int a[];)があるって余計な気がする。
Cのコードをコピペするときようの機能だろ。
ふとやってみてわろた void main(){ { int[] a,b; }{ int a[], b[]; }{ int a[], b; } } a.d(6): multiple declarations must have the same type, not int[] and int[] <=== ちょ a.d(8): multiple declarations must have the same type, not int[] and int
dmd/srcフォルダに*.cファイルがある位だしな
それは関係ないと思うよ
初歩的な質問だと思うけどなぜか動いてくれない、左項の char[] a が静的配列になってるのかな?
>import std.stdio;
>int main(){
> char [] a = "123";
> return 0;
>}
>test.d(4): Error: cannot implicitly convert expression ("123") of type invariant(char[3u]) to char[]
>>163 ガーーン
>>164 文字列リテラルの型は、invariant(char[N])
これは、char[]に変換できない。
const char[] a = "123";
char[] a = "123".dup;
のどちらかにする必要がある。
char[] a = "123"; じゃなくて string a = "123"; // string is invariant(char)[] const(char)[] a = "123"; const(char[]) a = "123"; const char[] a = "123"; を使うべし string推奨
>>165 動いたー、ありがとー
どっかのサイトをコピペしたコードも動かなかったけど、どこのサイトだったんだろ。
これもD2.0になってからの仕様変更かな。
const char[] と string にフォルダパスいれてから、mkdirを試したけどstringは動いてconst char[]はエラーだった。 D_Try.d(6): function std.file.mkdir (const(invariant(char)[])) does not match parameter types (const(char[])) とりあえず文字列はstring使ってみます。
やっとなんとかDirectXのプログラムをビルドできるようになったのですが、 今度プログラムを分割して、複数のファイルから import win32.DirectX.d3dx9; というようにインポートしたところ、 module win32.directx.d3dx9 is in multiple packages win32.directx.d3dx9 というようなエラーが出るようになってしまいました。 初歩的な問題で申し訳ありませんが、どなたか対処法を教えて下さい。
/* foo\hage.d */ module foo.bar; /* foo\hoge.d */ module foo.bar; /* main.d */ import foo.bar; void main(){} module foo.bar is in multiple packages foo.bar
>>168 mutable/const/invariantの変換規則はこう
constは何でもそのまま受けられる
void main(){
char[] m;
const(char)[] c;
invariant(char)[] i;
char[] mm = m;
char[] mc = c.dup;
char[] mi = i.dup;
const(char)[] cm = m;
const(char)[] cc = c;
const(char)[] ci = i;
invariant(char)[] im = m.idup;
invariant(char)[] ic = c.idup;
invariant(char)[] ii = i;
}
172 :
169 :2008/11/30(日) 20:14:50
自己解決しました。モジュール名を import Win32.DirectX.d3dx9; と大文字にしていたのがまずかったようです。 import win32.directX.d3dx9; と小文字に統一したら通りました。 お騒がせして申し訳ありませんでした。
foreachのrangeだけ特別扱いするんじゃなくて c++0cのconcept_map相当を導入できないもんかな
alias invariant(char)[] string; って要るの?
>>174 どういう意味か分からんけど、object.dに書かれているので自分で宣言する必要は無い。
>>173 コンセプト導入するよ!とかいつか言い出すかもしれない
stringとchar[]はについては、特定のメモリ列を管理したいわけでなく、
どこかから持ってきた文字列を切り貼りすれば事足りるなら、
迷いなくstringでいいと思われ。
>>171 constはスコープの中では書き換えないという表明ですからな。
書き換える予定がある(constでもinvariantでもない)なら書き換えてはいけないもの(constやinvariant)は渡せないが、
書き換える予定がない(const)なら書き換える予定のものも書き換えてはいけないものも渡せる。
みんなstringとかchar[]って文字数どうやって取得してるの?
.lengthじゃダメ?
テキストファイルを一行ずつ読みたいんだけど・・・そんな関数ないんだ・・・
std.streamのFileでreadLineとか使えなかったっけ?
ふつうにstd.stream.Fileをforeachに食わせればいい。
>>178 マルチバイトとか考えるのならstd.utfで正しいシーケンスかどうかは確認できる
一度CやプラスなどやってからDのリファレンス読んだらいい
185 :
180 :2008/12/01(月) 20:53:11
Tangoで1行だけ読みとろうと思ってえらくハマった。 原因を追究した結果、TangoのUnicodeBomのソースが2か所間違ってることがわかった。 それがD言語です。
variantがポインタを格納できないときはマジびびった
stringをtoMBSz()でマルチバイト文字に変換した後の 文字列長ってどうやってとればいい?
lstrlen関数というプラットフォームSDKの関数。 関数名でググればすぐに詳細が見つかるはず。 もしくは、\0で終わっているはずだから int len; while (str[len] != '\0') len++; とかすればいいと思うよ
192 :
190 :2008/12/02(火) 14:40:35
TIOBEはcommunity indexなんで、使われているかどうかはともかく、 news groupeが盛り上がっていれば数字が上がる
int strlen(char*);だからchar*がUTF8じゃないのか・・・うーん
テキスト置換ツール作ったけど、Rubyの方が立ち上がりが早い気がする
気がする、とかいわれてもw
何度も起動して比べたけど、 Rubyは一瞬で起動・処理して終了するけど、Dは1・2秒処理まで間が空く Rubyってなんか常駐してたっけ。
正規表現使ってないか?D のはクソとろいぞ 正規表現使いまくるなら外部ライブラリ使ったほうがいい
ワイルドカード?なら一箇所使ってる。 foreach (string path; listdir("source", "*.html")){ (ry } ・・・書いてて気づいた、Dの方がフォルダを深く検索してる。sourceフォルダだけでいいのに。
>>189 やっぱりWin32APIつかわんとだめか。
なるだけDで完結させたかったんだが、そういうところcharがUTF8になったおかげで
不便になったなぁ。
std.encodingとかがその辺解決してくれんのかね。
つ strlenの再発明
foreach(string path; dirEntries("source", SpanMode.shallow)) { で行けるが、パターンマッチを逐次人力で行う必要があるな if書いてcontinueするだけとは言え
使ったこと無いけどstd.utfのtoUCSindexとか?
>>200 toMBSzで変換後もinvariant(char)*ならfromMBSzで低コストで配列として読めるはず
日本語も使うならむしろtoUTF16zとWin32 APIのワイド文字関数(Wで終わるやつ)を組み合わせた方が安全
しかし古ハングルとかいう非実用的な文字を5千字もねじ込んでUTF-16の固定長性を破壊した韓国は万死に値する
サロゲートペアを無視すればいいのだが、セキュリティーホールになる可能性を考えるとやりたくないのが実情
>>200 toMBStringの再発明しかないな。
ポインタで返すからいけないんであって、配列を返せばいい。
std.windows.charsetはシグネチャおかしいし 再発明したほうがよさそうだよね。
import std.stdio; void main() { writefln("test."); } ----------------------- dmd test.d -release -inline -w _, ._ ( ゚ Д゚)
>>207 これってどういうこと?
どれか一つでもオプション削れば通るし
>>178 文字数ってバイト数じゃなくて文字の数?
>>208 いまさらというかDっぽいというか、
標準ライブラリが警告に引っかかるってどうよ?
phobosは長らく-w付きでコンパイルできなかった。
overrideが書いてないって文句言われまくりだったな
>>199 windows版のlistdirfやdirEntriesは、必要ないのにファイルスタンプを毎回取得するから、
それで信じられないくらい遅かったりするのだが、それは関係……なさそうだな
任意のクラスの値コピーが欲しい場合はどうやるのでしょうか
>>215 ひでえw Dならタプルで美しくできるだろ
tupleofは構造体にしか使えなかったはず。クラスの場合はABI見ながらvoid*にキャストしてコピーが一番美しい。
>>204 ちょっと俺には難しい話はよくわからんのだがワイド文字使えってことだよね。
まぁそうしたほうがいいんだろうけど。
結局、sjisの文字列の長さを数えるにはubyte*にキャストして\0までを数える
くらいしか今のところ方法はない?
それで何の不都合があるの?
string s = "abcあいう"; s.length -> 12 hogelen(s) -> 6 配列の長さも重要だけどUnicodeが文字というなら文字列長を標準ライブラリ(ry
>>220 Unicodeでは組み合わせ文字とかあるから「文字」数に大した意味がないんだよ。
「文字」の単位を扱えんと、ユーザに対して「何文字目がアレです」とか表示することすら出来んぜ…… Unicodeの突っ込んだ部分はロクに知らんけど、1文字という単位をそんな簡単に放棄できるもんなのか?
昔、メンバ変数を構造体にすると書いたら不評だったなあ。
使わないけど、std.string.cmp()の規則性がよくわからない。文字列の比較って他の言語でもこうなの? import std.stdio , std.string; void main(){ writef( cmp("ooo","ooo")); //0 writef( cmp("ooo","oxo")); //-1 writef( cmp("ooo","oxx")); //-1 writef( cmp("ooo","oooooo")); //-3 writef( cmp("ooo","ooxxxx")); //-1 }
>>222 そのユーザってのはどういうレベルの人種を意図してるのかわからんけど、
プログラマならとりあえずUTF-32のコードポイント数を教えとけばいいと思うよ。
視覚的な文字数が必要なら、膨大な文字情報データベースが必要になって
標準ライブラリに入れられるようなもんじゃないと思う。
>>224 0か負か正で順序を返す関数だから、-1と-3に深い意味の違いはないよ。
227 :
224 :2008/12/03(水) 22:40:46
なんだ、30分くらい悩んでた
文字コード周りはどれもウンコなので、みんな結局再発明してるんじゃないのか。
こんにちは。 Dをはじめようと思い、以下のソースを書きました。 import std.stream; import std.cstream; void main() { File inp = new File("input.txt", FileMode.In); File oup = new File("output.txt", FileMode.OutNew); foreach( string line; inp ) { oup.writeLine(line); dout.writeLine(line); } } が、std\std.stream が見つかりませんエラーが発生します。 なぜなんでしょうか? dmd1.030 を展開した状況でコンパイルしております。
とりあえずimportさせるパスの指定でしょうな。 コマンドラインから?
最近どこかで取り上げられたりとかでもしたのか?
10日まえからD言語はじめたけど、ドキュメントが少ないから詰まるとここで質問してる。 始めたきっかけは思い出せない。
オフィシャルのドキュメントがあれば大抵のことはできる気がするが、 まあ、「D言語を題材としたプログラミング例」が少ないのは確かですな。
>>230 sc.iniのDFLAGSどうなってるよ
ちなみにsc.iniは(インストールフォルダ)\dmd\bin\sc.iniにある。
ちなみに、オフィシャルのdownloadページにある、スナップショットをダウンロードしました。
>>231 はい、インストールできたか確認をするために、簡単なものを確認しました。
>>235 DFLAGS="-I%@P%\..\import" -version=Tango -defaultlib=tango-base-dmd
-debuglib=tango-base-dmd
となっております。
これかなあ・・・phobosがないですし
D言語・Tango・dflで作ったソフトって商用可なの?
239 :
デフォルトの名無しさん :2008/12/05(金) 12:22:31
>>237 std.streamはphobosなんだから使えなくて当然。
Tango版をインストールしたならTangoを使わないと
>>239 ありがとうございます。
やっぱり、そうですよねえ・・・・
夕べ自分で見直していて、そう思いました。
Windows版phobosだけど、いつのまにかmainの引数がUTF-8になってるね。
>>241 次はwritef?(ln)?にフィルタを被せられるようにして欲しいな
set_iofilter(stdout, new Encoding("cp932"));
JavaのIO周りがここでいいって言われていたので それをD向けに移植すればいいのではないかと思うのだが(Javaのは俺は見たことない)
auto file = new BufferedReader(new FileReader("hoge.txt")) とかやらねばならんのは勘弁して欲しい
class JpStream : FilterStream {} というのは前に提案されているが auto file = new EncordedStream(new File("hoge.txt"), "cp932"); // ファイルをcp932とする auto eout = new EncordedStream(dout, "cp932"); eout.writefln("ほげ");//utf8からcp932に変換される auto ein = new EncordedStream(din, "cp932"); string line = ein.readln(); // cp932からutf8に変換される こんなんはどう?
それいいなあ
一式書いて送ってください、、、
>>250 文字コードが打ち決めなのさえ変えればいいと思うよ。
*Stream系はそれでいいとしてstd.stdio.write*関係はどうするかな
俺としては、低レベルなバイト列の入出力を扱うストリームと、 それを何らかの形に翻訳したデータ構造の入出力を行うリーダライタの二段階構造に すべきだと思うんだよね。 要するに、入出力デバイスに関するコードはストリームに、 データの解釈や整形に関するコードはリーダライタに書いて、 それらを自由に組み合わせられるようにする。 現状の、ストリームにフィルタを被せるという方式だと、 派生ストリームを使うプログラマも、低レベルな入出力関数を 使えるけど、そういう状況はよろしくないと思う。
ここはひとつ俺らで団子ライブラリを…
団子ライブラリってなんぞ
>>253 StreamとReader/Writerの2層はともかく
Encording層をどこに置くべきか悩む
246ですが C++のstring = basic_string<char>みたいによく使う組み合わせにaliasがあるんなら 特に文句は無いのです。 当時はなんでこんなに標準クラス名が長いんだとか、Eclipse糞重たいとか、 演算子オーバーロード無いくせにStringで+演算子が使えるのは何故だとか Javaにげんなりしていたので単にトラウマが刺激されただけです。
>>257 文字コード変換はTextReaderなりなんなりの仕事じゃないか。
現状ではStreamに文字列を書き込んだときのフォーマットは、
「自分が書き込んだのを読み込んだら同じになる」程度しか既定されてないのに
そこに文字コード変換の機能をつけるなんて無理無理だよ。
ストリームといえば、デストラクタでcloseしないの何とかして欲しい。
>>258 TextReaderとFileStreamをくっつけて
TextFileReaderとかはありだろうな。
名前が長くなるのはIDEでなんとかなる……と思う。
>>261 じゃあnew EncodedStream(din, "cp932");じゃなくて
new EncodedTextReader(new File("hoge.txt", "cp932");
もしくは
new TextReader(new File("hoge.txt"), EncodingScheme.create("cp932"));
あとTextReader+FileにはTextFileReaderも用意して
ちなみに誰かEncodingSchemeCP932書いてない?
不勉強なので既にあったとしてもどれがShiftJIS相当なのかわからん
>>265 1つめの例、括弧たりないね。
new EncodedTextReader(new File("hoge.txt"), "cp932");
こういうことでいいのかな?
ちょ /+ class EncodingSchemeUtf8 : EncodingScheme { static this() { EncodingScheme.register("std.encoding.EncodingSchemeUtf8"); } +/ auto e = EncodingScheme.create("std.encoding.EncodingSchemeUtf8"); >a.exe std.encoding.EncodingException: Unrecognized Encoding: std.encoding.EncodingSchemeUtf8 なんて書けばいいの
>>268 EncodingScheme.createの引数は、
Object.create("std.encoding.EncodingSchemeUtf8").toString
>>265 の例を見てるとTangoのConduitとStreamのような関係に見えるんだけどなにか違うのか?
>>269 auto e = EncodingScheme.create(Object.create("std.encoding.EncodingSchemeUtf8").toString);
a.d(5): Error: no property 'create' for type 'object.Object'
...
なので
auto e = EncodingScheme.create(Object.factory("std.encoding.EncodingSchemeUtf8").toString());
object.Error: Access Violation
あれ?
>>270 Tangoのこの辺がわかりにくいのだが・・・こうか?
Conduit(FileConduit/SocketConduit/...) * Stream(LineStream/UtfStream/...)
>>265 は
Stream(ConsoleStream/FileStream/StringStream/SocketStream/...)
* Reader/Writer(LineReader/FormattedWriter/...)
* Encoding("CP932"/...)
対応関係は
>>265 | Tango
Stream | Conduit
Reader/Writer | Stream
Encoding | Streamの一部
Encodingを一般化したTranslater(Filter)も考えたが
そもそもReader/WriterとTranslaterを別にしてもメリットないか?
ああ、そうか、Conduitって土管のイメージでいいんだな。 それで、土管の中を流れるのがStreamなのか。
275 :
デフォルトの名無しさん :2008/12/07(日) 19:29:03
よく使う組み合わせのためにヘルパークラスいるな
Phobosに入れてもらえるものがいいなぁ
エンコーディングといえば、std.encodingもインターフェイス悪いよな。 文字列から文字列へ変換する関数がないのは使いづらすぎる。
std.encodingは標準ライブラリの中でも基礎のものなのだと思う よりハイレベルのライブラリをこの上に構築せねば
std.encodingって初めてまともに見たが typedef ubyte CHAR; alias invariant(CHAR)[] STRING; でエンコードごとに文字列型を作るアプローチを採ってるじゃないか!
import std.stdio; import std.bigint; void main(){ BigInt x,y; x = "1_0000_0000_0000_0000_0000_0000_0000_0000" ~"_0000_0000_0000_0000_0000_0000_0000_0000"; y = "1_0000_0000_0000_0000_0000_0000_0000_0000" ~"_0000_0000_0000_0000_0000_0000_0000_0000"; writefln(x*y); } なぜか結果が99999999999960597993785257531857664400770054262477057386034207 084416955692331543239945395293578420218806492958866804047385460736になった。 いつのまにか多倍長整数が標準になってると思ったけどまだダメか。
void main(){ BigInt x,y; x = 1_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000; y = 1_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000; writefln(x*y); }
import std.stdio, std.bigint; void main(){ BigInt x = 1_000_000_000_000; writefln(x * x); // 999981553255926290448384 } bigint信用できなすぎワロタ std.bigint.mulInner内のupdateShrをupdateUShrにすれば直せるってことは分かったが libの再コンパイルの仕方が分からん
makeすりゃいいだけじゃないのかい?
284 :
282 :2008/12/09(火) 20:49:42
>>283 druntime.libがないと言われてどーなってるんだと悩んでたが
普通にこっちもmakeすればいいだけだった…
いわれるまで気付かなかったorz ありがとー
>>271 がエラーになってるのは、EncodingSchemeUtf8のメンバを全部実装してないから。
EncodingSchemeUtf8が抽象クラスになってて実体化できない。
>>286 std.encodingはそういうものなのか?
本当にインタフェース だけ を規定しているのか?
>>288 いや、そんな大げさなことじゃなくて、単にvtblに穴があるからアクセス違反なってるだけなんだけど。
まず createに渡すのはスキームの別名で "UTF-8"。 でも EncodingSchemeUtf8の static thisが実行されてなくて Unrecognized Encoding:〜が出る。 それだけの話。 スキームの別名は、std.encodingのページを見るか ソースを見るかすれば書いてある。
今は使えない状態だってことか・・・
自前で登録して作らせるか EncodingScheme.register("std.encoding.EncodingSchemeUtf8"); auto e = EncodingScheme.create("UTF-8"); 直接作るか auto e = new EncodingSchemeUtf8; で使えるんじゃね?
>>268 が使い方間違ってるだけっていってるのに…
話は変わるが、呼び出されるかわからないデストラクタって何の意味があるの? せめてデストラクタでオブジェクトのインスタンスのdeleteが行えたり 確実に呼ばれる保証がないと使いようがないんじゃないかと思うんだが…
確かに使いづらいねえ。 いまのところscopeクラスにしてRAII強制するしか使い道がない。 でもこれも、scopeメンバフィールドがないと意味がない。
>>294 既に破棄されているオブジェクトをdeleteするのもダメだっけ?
それは平気だぷー
とはいってもオブジェクトの参照はただのポインタだから, 再利用されてたら関係ないオブジェクト消しそうな気がするが…
import std.stream; class Point { int x , y; this(int x , int y) { this.x = x; this.y = y; } ~this() { stdout.printf("Delete Point Object %d, %d\n" , x , y); } } int main() { Point point = new Point(100 , 70); stdout.printf("1\n"); delete point; stdout.printf("2\n"); Point point2 = new Point(100 , 70); stdout.printf("3\n"); delete point; stdout.printf("4\n"); delete point2; return 0; }
それはいったい何時のバージョンのDMDで動くコードなんだ
>>296-298 アウトだね。これがあるからdeleteは完全に自分で寿命管理できるオブジェクトにしか使えない。
import std.stdio;
class C {
int x;
this(int x) { this.x = x; }
~this() { writefln("C(%s) deleted", x); }
}
void main() {
auto c1 = new C(1);
auto c1p = c1;
delete c1p;
auto c2 = new C(2);
delete c1;
}
>>301 にも書いてあるけど
auto c1p = c1;
delete c1p;
によってc1pはnulになっても
c1がnulにならないのが問題なんでしょ
単に二回dekete(delete c1p; delete c1p;)とかと
既に破棄されているオブジェクトをdelete
とはニュアンスが違うような
>>298 >>302-303 の言いたいことはわかる
それよりも
>>294 はdeleteそのものが
(呼ばれても実行されないから)
意味がないって言ってるんじゃないかな
これも
>>301 に書いてあるけど
なんかdeleteが何のためにあるのかよくわからなくなってきた。
明示的な delete よりも使い終わったら ptr = nul; を徹底した方が良いじゃないかな
scope周りを整理すれば解決しそうなんだが・・・
309 :
294 :2008/12/11(木) 20:38:17
なぜかdeleteのほうに話が飛んだけど、たしかにdeleteもやる意味がなさそうだな… デストラクタは呼ばれない可能性を考慮すると、C言語のfree関数みたいなことをすることができない。 デストラクタからオブジェクトへのアクセスも不正だから明示的なメモリ開放も不可能。 (というかそもそもdeleteでのメモリ開放は望めないのか…) …じゃあデストラクタで何すればいいの?ってかなんであるの?というのが本来の疑問。
scope x = expr; が auto x = expr; scope(exit) delete x; のシンタックスシュガーで、一応deleteも直接使えるようにしてあるだけなんだと思う。
finalなくなって以来、scope変数が書き換え可能なのはまだ治ってないのか。
RAIIと、一時オブジェクトの滞留とはごっちゃにしちゃいかん。 リソースを close すべき時は、きっちり close しておけ。 ptr = null; なんてのはタイミング不明瞭なんだからそんなものに期待しちゃいかん。 中身が純粋データなら何の問題もないが。
何のためにscope変数なんてものを作ったのか理解できない理不尽さ。 auto f = new File(...); scope(exit) f.close;
ガベコレでしか呼ばれないデストラクタは リソース解放の最終手段のためにあるんだ。 うっかり close 忘れちゃってポインタも破棄された場合に、 ガベコレで回収されるときに、オイオイまだリソース残ってやがるぞといいながら close すると。 リソースを持つクラスを作るなら、close メソッドの実装は必須、 同時にデストラクタにも解放機能をつけておく。 ただ、あくまで「保険」であって、クラスを使う側はデストラクタが解放してくれると期待してはいかんのよ。
C++/CLIみたいに、デストラクタとファイナライザを分ければいいのに。
C++のように見えるコードはC++のように動く それがDのポリシーじゃなかったのか
>>315 IDisposableだっけ。あれはいいアイデアだと思う
>ただ、あくまで「保険」であって、 >クラスを使う側はデストラクタが解放してくれると期待してはいかんのよ。 まさかのときに期待できないのに保険ですかw
サーバーアプリとかで24時間稼働のプログラム書くときに それなりにありがたみがあるんですよ。 バグっていてもそれなりに動くというのがミソ。
あと、実際に大手のライブラリで、ファイナライザに解放コードがなくて、 close しないとリソース駄々漏れってケースもあるんだよなぁ。 ガベコレしてるから大丈夫なんて考えてると痛い目にあう。
dsssが何やってもError: 4invalid UTF-8 sequenceというログしかはかないんですが、 どうすればええんでしょう。
コンパイルしようとした.dファイルがUTF-8で書かれているか確認する
いや、コンパイルじゃなくて普通にdsssのコマンドでそのエラーが出るんです・・・ 何がおかしいんでしょうか。
何をやってもってことは、 dsss --help とかしてもそのエラーが出るのか?
どんなコマンドライン引数をつけてやってるのか書かないと誰もわからんのじゃね。 何をやってもって、dsssを無引数で実行してもそうなったってこと?
>>314 >ガベコレでしか呼ばれないデストラクタは
>リソース解放の最終手段のためにあるんだ。
scope outで呼ばれる関数がないと使い物にならんという話だろ
そもそもさあ ガベージコレクト時に駆動される関数って必要か?
>>326 結局のところ、scope out でのデストラクタと、GC でのファイナライザの
両方の関数が必要ってことかなぁ。
個人的には scope out で close 実行させとけばいいじゃんと思ってるので、
あんまり気にしてないんだけど。
>>328 そのcloseを自動化するためのシンタックスシュガーが欲しいって話だよ。
プログラマがclose書き忘れたらリソースリークするんじゃ、GCがあっても何の意味もない。
明示的にdeleteした場合やscope属性の場合は即デストラクタが呼び出されて、 しかもその(ガベコレ時でない)場合はメンバ触ってもOK、って仕様に書いてあるっぽいけど、 問題あるの?
>>330 プログラマがdeleteしたかGCかdeleteしたかをデストラクタから判別する方法がないから、
デストラクタでメンバを触りたいときはscopeクラスにする必要がある。
で、scopeクラスは非常に使い勝手が悪い。
そういえば人生のデストラクタまだ書いてないわ もれの死体はだれが片付けてくれるんだろう
scope外だから気にするなw
override void sleep() { super.sleep; delete this; }
しょうがないな俺が代わりに実装してやるよ お前のリソースの所有権は俺が引き継ぐようにしとこう
人はそれを(遺産の)継承と呼ぶ
>>331 > プログラマがdeleteしたかGCかdeleteしたか
メンバを触れるか否かが(scopeクラスか否かではなく)その一点で
決まるわけだから、それは判定できる仕様であるべきだろな。
そもそも呼ばれるかどうかもわからないデストラクタでメンバをいじったところで何がおいしいのかと。
>>314 の言うような保険や、リソースのリーク検出のためのassert文を書くのはいいかもしれない。
scopeクラスなら確実にデストラクタが呼ばれるけれど、やはりあれは使い勝手悪過ぎだと思う…
>>332 死して屍拾うもの無し 死して屍拾うもの無し
投稿ミスすまんorz
投稿ミスすまんorz
何で二回言うの?
何で二回言うの?
大大事事ななここととななののでで
ムムーーンンササイイドドへへよよううここそそ
大体の場合デストラクタは呼ばれると思うんだけど デストラクタが呼ばれない状況ってどんなの?
>>337 そんなこと分からなくても、メンバオブジェクトが既にdeleteされているかを知れれば十分なんでない?
そのくらいGCに問い合わせれば分かりそうだけど、そういう機能ないのかな。
>>351 ファイナライザが二度呼ばれないことは保証されてるから、
GC.getAttr(cast(void*)obj)&GC.BlkAttr.FINALIZE
でいいのかもしれない。
とりあえず、
void f(){
auto o = new Object;
auto o2 = o;
assert(GC.getAttr(cast(void*)o)&GC.BlkAttr.FINALIZE);
delete o2;
assert(GC.getAttr(cast(void*)o)&GC.BlkAttr.FINALIZE);
}
は、期待通りdelete後のassertでAssertion failureになった。
void f(){ auto o = new Object; auto o2 = o; writeln(GC.getAttr(cast(void*)o)&GC.BlkAttr.FINALIZE); // 1 delete o2; writeln(GC.getAttr(cast(void*)o)&GC.BlkAttr.FINALIZE); // 0 new Object; writeln(GC.getAttr(cast(void*)o)&GC.BlkAttr.FINALIZE); // 1 }
Dはたのしいげんごです
再利用されたときにダメか。そりゃそうか。やっぱりどうにもならんね。
単純に、 class X { Resource r = null; this() { r = new Resource(); } void close() { if (r) { r.close(); r = null; } } ~this() { close(); } } この程度で必要十分だと思ってるけど、それ以上必要か?
private import std.stdio; class A{ ~this(){ writefln(`~this!`); } static ~this(){ writefln(`static ~this!`); } } void main(){ auto a = new A; } で試したけど呼ばれてるよ? tangoだとダメとか?
呼ばれるかもしれないけど呼ばれることが保証されてないってことじゃないの?
>357 GodJob ! b
>>356 static ~thisを利用すれば、終了時に漏らさず各~thisを呼べるわけか。
オブジェクトのポインタ値はGCによる再配置で変わりうるらしいから、
private static bool[void*] _map;
ってのの、ポインタをキーにするのはまずいかも。
>>357 ガベージコレクトで~this経由でclose呼び出された場合に、
rが解放済みだとまずいことになるよ。rの参照オブジェクトが先に解放されても、
rが自動的にnullになってくれたりはしなかった。
>>359 tangoだと普通に呼ばれないのか。
aがstaticだったりグローバル変数だったりするとDMDでも呼ばれなかったよ。
>>356 静的デストラクタの呼ばれる順序って制御できないから、
まだ必要なのに解放されちゃうことあるよね。
>>356 foreachで列挙中にremoveするのって大丈夫だっけ?
リソース管理オブジェクトの解放を通常オブジェクトの解放の後にする保証がないと
>>356 のような方法で解放して良いのはGCで管理してないリソースだけになると思う
ただ、確実に解放したいものってCのライブラリのハンドルとかそういうものなので、
今のところそれで困らないかなぁ
>>362 継承したとき親のstatic~thisは呼ばれるのか
文字列mixinのことコンパイル時evalって呼べば注目されるかな?
何の意味があるのかわからない
>>362 rがnullにならないのはgcがたぶん別スレッド扱いになってるから。
その場合は r.close(); r = null; をアトミックになるようにすればいい。
>>369 いや、そういうこと言ってるんじゃないでしょ。
GCがrをdeleteしてから、Xのデストラクタが呼ばれる場合があるってこと。
そのばあい、rはnullにはならないからr.closeが実行されてしまう。(が、これは不正)
371 :
358 :2008/12/13(土) 20:40:58
>>362 ,363
GCによる再配置と静的デストラクタ内での利用か…これは考えてなかった…
あと、静的コンストラクタ内でも使えないな。
ちょっと正直あれ以上は思いつかない…
(というかこういうことを考えると、静的コンストラクタと静的デストラクタではオブジェクトは使わない方がいいのでは…という気も)
後はみんなで煮るなり焼くなり好きにして…
dmain.dのmain関数を弄っていいなら、もうちょっとなんとかできそうかも。
結局 ・オブジェクトの持つリソースの解放 ・オブジェクトの後片付け はどこに書けばいいんだ?
コンソールアプリで作業状況を%で表示したいんですが、表示するたびに画面がスクロールしていきます。 同じ場所で表示するために、バックするかリフレッシュしたいのですがどうすればいいでしょうか。
Dの質問じゃない気がするが、端末によっては\bとか\rとかでなんとかなるんじゃね。
\r で上手くいきそうです、ありがとうございました。
[エスケープシーケンス]スレってないんだな
スレまで立てて何の話するんだよwwwwwwwwwww
379 :
デフォルトの名無しさん :2008/12/13(土) 23:51:08
sleepを使いたいんですがどうすればいいでしょうか。 ループ中PC全体が操作できなくなるので、sleep挟みたいんですが。 >import std.stdio , std.thread; >void main(){ > for(int i = 0 ; i < 100000 ; i ++){ > writef(i ); > Thread.sleep( 500 ); > } >} >hell.d(5): Error: no property 'sleep' for type 'std.thread.Thread' >hell.d(5): Error: function expected before (), not 1 of type int
core.thread.Thread.sleep
>>324 レス遅くてすいません。
その通りです。
druntime導入前だとstd.c.time.sleepか。
C:\**>dsss Error: 4invalid UTF-8 sequence こんな感じです
ちなみにdmdコマンドだと普通にコンパイルできます。
パスに日本語はいってるとかそんなんじゃねえの。
dmd / dsssのパスのは C:\d の下で、全角文字は入ってません。
なんだろう…考えられるのは… ・dsssやrebuildに関するファイルを書き変えた ・環境変数PATHに日本語が混じってる ・カレントディレクトリに日本語が混じってる くらいしか思いつかないや。
解決しました。 環境設定のPATHの中にあっても駄目なんですね・・・ ありがとうございました。
Version D 2.022 Dec 11, 2008 New/Changed Features * Changed IUnknown to use the extern(System) interface rather that extern(Windows). * Pure functions now get semantically checked. * Nothrow functions now get semantically checked. * shared is now a type constructor.
きた!pureきた!これでかつる!
The requested URL /dmd.2.022.zip was not found on this server.
ズコー(AA略
>>384 ありがとうございます、でもsleepは成功したんですけどループ内のwritef(i)の動作がおかしいです。
十周してからまとめてwritef(i)が表示されてしまいます、どうしてなんでしょう?
import std.stdio , std.c.time;
void main(){
for(int i = 0 ; i < 10 ; i ++){
writef(i );
sleep(1);
} }
そりゃ、バッファリングされてるから。
バッファリングでググったら原因はわかったけど、 解決策は直ぐに見つからないかも、とりあえずprintfだと大丈夫みたい。
つ flush
>>399 とりあえずこんな感じでできました、どうもありがとう
import std.stdio , std.c.time;
void main(){
for(int i = 0 ; i < 5 ; i ++){
write(i);
sleep(1);
flushall();
} }
>>370 それはGCのバグというんじゃないのか?
rを先にdeleteするケースはどこにどう存在するんだ?
>>401 GCには詳しくないので全くの想像で言うと
メンバオブジェクトの所有関係をGCが把握してないってことなのかなと
>>401 import std.stdio;
class A{
B o = null;
~this(){
writeln("A");
if(o){
writeln("A1");
delete o;
}
}
}
class B{
~this(){
writeln("B");
}
}
void main(){
auto a = new A;
auto b = new B;
a.o = b;
}
これで、手元ではB→A→A1の順に表示された。
つまり、Aのデストラクタに入る前にBが処分されちゃってるのに、
A1に入ってBをdeleteしちゃってる、ってことになる。
こういうオブジェクトの解放順序になることもあるからメンバオブジェクト触んな、
ってのは仕様に書いてあるとおり。
>>404 リソースを外から渡してるからちょっとそれはないなぁという感じ。
それとデストラクタとメモリアロケートの話とごっちゃになってないか?
デストラクタが動いたあとで、メモリアロケートを解放するのは正当動作だと思うぞ。
>>401 このrはXからしか参照されていないので、コレクトの対象になるのは、Xがコレクトの対象になったとき。
このとき、rとXのどちらが先に開放されるかは決まってない(循環参照の場合があるから)。
>>403 コンストラクタと逆順で実行されると言っているだけで、プログラマが制御できるわけじゃないでしょ。
それに、そもそも制御できたとしても静的デストラクタで相互に使用される場合などは、どうしようもない。
>>401 C.o.__dtorが先に表示されたよ(Windows)
----
import std.stdio;
class C {
Object o;
this() {
o = new class {
~this() {
writeln("C.o.__dtor");
}
};
}
~this() {
writeln("C.__dtor");
}
}
void main(){
new C;
}
408 :
405 :2008/12/14(日) 23:55:46
改めて検証して、なんじゃこりゃって感じに。 これ GC のバグだよなぁ。解放順の定義がまずいんだと思う。 これだとデストラクタに何も処理書けないよ。
Javaとかってそのへんどうなってんの?
>>409 Java言語仕様では、オブジェクトツリーの末端から finalize されることが保証されてる。
循環参照はちょっとわからん。
循環参照の呼び出し順なんて定義しようがないんじゃ まあそもそも、ファイナライザ自体が最終手段に近い扱い
>>406 > コンストラクタと逆順で実行されると言っているだけで、プログラマが制御できるわけじゃないでしょ。
静的コンストラクタの順序もある程度仕様で決まってるよ。
モジュールの依存関係とソース上の出現順にしたがう。
(まあ、自由に操れるわけじゃないから、問題になる状況が無くなるわけじゃなかろうが)
> それに、そもそも制御できたとしても静的デストラクタで相互に使用される場合などは、どうしようもない。
仕様で定まる順序でもなお解放順序が問題になる場合は依然としてアウトだな。
そうでない場合は有効なテクニックだと思う。
「確実に呼び出される」のと「順序がある程度定まる」ってのがあのコードのポイントだな。
>>409 .NETだとファイナライザの呼び出し順は不定。
ただし、ファイナライザの中では、自分が参照を持っているオブジェクトは
(ファイナライズ済みであったとしても)解放されていないことは保障されている。
つまり、解放すべきオブジェクトをいったん列挙して、全部ファイナライズしてからメモリを回収していく感じ。
実際は、世代型GCだからもっと複雑。よう知らんけど。
ちなみに、.NETやJavaでは、ファイナライザの中で自分の参照をどこかに追加すると、オブジェクトは生き返る。
デストラクト後のプロパティの読み出しはできるみたいだけど、
メソッドはもう呼べないみたいだ。
object.Error: Access Violation 出して死ぬ。vptr 壊されてるって感じかなぁ。
.NET の実装に近いのかな。
メモリが解放済みなのかそうでないのかをしようと delete メソッド追加してみたら
デストラクタの呼び出しが後に回された(A→A1→Bになった)ので、
GCの挙動と違う。確認困難だな。
>>410 修正。Java の finalize は呼び出し順自体は不定が正解。
ただ、finalize 後、メモリを解放できるかどうかは参照ツリーに従うことになる。
finalize していないオブジェクトから参照されていたらメモリは解放されない。
.NET と動きは同じか。
初めてGCのソース見てみたけど、ファイナライザ呼んだ直後にClassInfo消してるね。
ということは、ファイナライズ済みかどうかは.classinfo見ればいいんじゃ。
問題なのはファイナライズ済みかどうかとかじゃなくて、 すべてのオブジェクトが確実に開放される保証がないことではなかったのか? だからデストラクタでリソースの解放ができないとかそういうの。
Version D 2.022 Dec 11, 2008 ダウンロードできるようになった!
>>418 * 必ず呼ばれないとデストラクタの意味ないだろ…常識的に考えて
* デストラクタでメンバ触れないならリソースの解放できねえだろヴォケ
って具合に問題点は二つ挙がってて議論は同時進行中。
GCによって先に解放されたことで参照の無効になってる可能性がないメンバなら べつに触ってもおkなんだぜ。 もしかして、プログラム終了時だけでなく、通常時にGCで回収される場合も デストラクタ呼ばれることは保証されないのかな? となると、scopeなりdeleteなりは必須になるから、delete忘れが問題になりそうな気が。
finalクラスのメンバ関数って継承元のメンバ関数をオーバーライドできないのか? // @Digital Mars D Compiler v1.038 interface I { void hige(); } final class A: I { // main.d(9): function main.A.hige does not override any function override void hige(){} } void main() { auto a = new A; } おかしいだろ…orz
424 :
422 :2008/12/15(月) 03:52:11
んー? 誰かpure関数に違反する関数を書いてエラーになる?
ここで議論してると別の話が出た途端に前の議論が終わってしまって それは前からもったいないと思っていたんだ スレッド形式のD専用掲示板欲しくない? 作っても誰も使わないかな? それともML有効活用する?
>>426 話の続きしたいなら、いくらでも蒸し返してくれたらいいんよ。
10レス100レス1000レス離れてたって構わない。
それがないのは、つまり議論を継続するネタが尽きたということだと思うよ。
仮に話題ごとにスレッドであったとしても、もうあとは沈んでいくだけ。
スレッドは別にいらないけど議題別のまとめみたいなのがあるといいかも
DのGCに不満ならもっとE言語作ってくれ
>>425 int g;
pure void f() {
g = 1;
}
: Error: pure function 'f' cannot access mutable static data 'g'
----
struct S { int x; }
pure void f(S* s) {
s.x = 1;
}
: Error: cannot modify const/invariant (*s).x
Dに対応しているweb穂スティングサービスはありますか
>>432 C言語のcgiが許可されている所ならどこでも動く。コンパイルがちと面倒かもしれんが。
自分の場合はhostも借りてるホスティングサービスもLinuxなので楽だった。静的リンクする必要はあったが。
さくらサーバだとFreeBSDなのでgdcのクロスコンパイルが面倒とかどこかで見た覚えがある。
自分で書いた関数にpureを付けるのはあんまり意味がないのかな FAQ読んだらライブラリに付けるとウマーみたいなこと書いてあったけど エロい人教えて
436 :
433 :2008/12/15(月) 16:23:17
ああ
自分でコンパイラをインストールするのもありなら
>>434
>>430 thx
pure関数のことちょっと誤解してた
CTFEとは関係ないんだな
>>435 CTFEできるという保証としての目印として便利だし、シグネチャ異なるからオーバーロードも可能だし(現状ではメリット無いけど)、最適化にも有利だし(実装されているかは別として)。
実利的には純関数の利点が得られるということですわな(実装されているかは別として)。 再帰やアウトオブオーダーな最適化ができたり並列化(スレッドセーフに)できたりラムダ計算が気軽になったりその他。 pureな世界だけは静的型付けのある関数型言語の特性を持たせられると。 その意味では、数少ない真のマルチパラダイム言語かもしれない。 OCamlとかHaskellとかぶるようになるかな
>>438 >>439 それじゃあinlineと同様に「コンパイラがpureの性質を活かすように頑張ってくれる」程度で考えておいたらいいのかな
pureかどうかはコンパイラが賢かったら判別できるはずだし
(実際
>>430 みたいにコンパイルエラー出るんだから)
一番の利点はプログラマがpureに書いたつもりなのにそうじゃなかったってケースをなくせることくらいか?
ああそうかpure関数の中で 別の翻訳単位のpure関数を呼んでいるときに pureのマークがないと活かせないわな
pureって要するに契約のひとつだよね?
ある目的のための契約ではあるね。
IDE で Descent とMmrnmhrm ってどうなん? 今から始めるのだけど、慣れてる eclipse が使いたいなぁ〜というかんじで。
Descentは変態的インテリセンスで一世を風靡したがいまいち後が続かなかった
なんでIDE頓挫してしまうん?
節子に読ませてね
これ、まともにコーディング>ビルド>トライ>エラー>デバッグの ループが出来るようにするだけでえらい疲れるね?
各所を参考にdsss導入したけど挫折したな。デバッガとかもよく分からんし。 そんな根性無しでも労なく扱えて設定カスタマイズも容易なD用IDEがあったらなあ。 インテリセンスとかとりあえずいいから。
Poseidon
あ、448=444なんだけどね?
descent と Mmrnmhrmを比べた結果、descent を使うことにしますた。
MMR も基本的な機能は持っているのだけど、コードフォーマッターが使えなかったり、
インデントそろえるのが変だったり、
結局ビルドは dsss の rebuild という奴を使わなくてはいけないようだったり、
結局、先発の分 descent のほうが便利かなーとおもった。
で、descent で dsss やら rebuild 使うよりは ant を使う方が良いっぽい。
ソースを src フォルダにおいて、オブジェクトファイルを obj において〜というのがどうもうまくいかなかった。
ant に関してはここが参考になった。
http://www5.atwiki.jp/yaruhara/pages/74.html build.xml を作ってビルダーとして登録するとビルドできた。
とりあえずの報告まで。
人それぞれ要求する条件というものもあるのだろうが、俺は ・テキストエディタとして使いやすいかどうか ・F5押してコンパイルリンクランできるかどうか ・全ての操作をキーボードだけで行うことができるかどうか、つまりマウスレス IDEでなくていいなら、最近はeditraやnotepad++みたいなエディタもあるからいいね コマンドランチャとmake, ant, rake, バッチやシェル機能なんかを いろいろ組み合わせればIDEに及ばなくても 近いことやそれ以外のことまでできるから、そういう選択肢もある 設定が面倒くさいけど
JavaやんないせいでEclipse触ったことなくて未だに慣れない。 結局エディタ使っちゃってるんだよなあ。
おいらもdsssなんですが main.d => main WARNING: Module main.d does not have a module declaration. This can cause proble ms with rebuild's -oq option. If an error occurs, fix this first. OPTLINK (R) for Win32 Release 8.00.1 Copyright (C) Digital Mars 1989-2004 All rights reserved. OPTLINK : Warning 23: No Stack OPTLINK : Warning 134: No Start Address というエラーが。 これ一体どういう意味なんでしょうか
main.d に module main; って書いてないとか?
main.dの一番上にmodule main;と書けばWARNINGは消えると思われ。 No Start Address ってことは、main() 関数を書いてないんじゃないか?
解決しました、ありがとうございました。 mainはさすがに書いてますw dmdとかrebuildでは普通に通ったので、dsssはmodule付けてないと駄目だったようです。
458 :
デフォルトの名無しさん :2008/12/17(水) 01:38:55
2.x対応のdflって何処にあるんでしょうか。
dflコンパイルしようとして気づいたんだけど、dmd2.022、なんかあほみたいにコンパイル遅くないか? 今回のリリースって、もしかして地雷か?
D言語ってどこの現場が使ってるんだ? 大学で使ったことある教授におめにかかったことがないんだが
>>458 snapshotまたはsvnの最新が2.020に対応してる
set dfl_flags=-version=DFL_DMD2020
dfl -build
>>459 本家でも遅いと話題になってたかと
>>460 教育目的での使用はまだ報告ない
研究論文では、実装に1件、データ処理に1件(同じ論文か?)
プログラミングコンテストに多数件
ソフトウェア製品の実装に1件(BOFでプレゼンされた)
自社内製アプリケーションで1件(GUIアプリ)
こんなところ
既に自分の研究があるんだから D にかまけるよりは 慣れ親しんだ言語を使ってもっと優先度の高いタスクを行うのは当たり前だろ。 言語的にはそんなに目新しいものでもないしな。
ということは新しい物好きの暇人くらいしかDで何か造ることはないのか
なにをいまさらw
軽くてランタイム不要なバイナリ作りたい人とかがDのターゲットユーザーじゃないかな。 新しい物好きとか一般人は次世代の業界標準予定なC++0xの方に行きそう。 まだ策定中だけど。
規模が大きくなってくるとそんな要請は無意味になるし 自分でちょっと使うだけならランタイムなんて関係ないからね
windowsのサービスとかDLLで作るのに C/C++よりDの方がいいかな?とか思うんだけど ガベコレがあやしくてサービスとして使い物にならないのが怖いので 結局C/C++で書いてしまうのが安心だとか錯綜した感情に悩まされています
>>467 注意すべきところはあるみたいだけど
たいしたことはないと思う
すいません意見ください これバグだと思う? isの中に .. があるとおかしいみたいなんだけど void main() { static if (is(foo(p[0..1]))) {} } >bud a a.d(2): found '..' when expecting ']' a.d(2): found '1' when expecting ')' a.d(2): found ']' when expecting ')' a.d(2): found ')' instead of statement a.d(3): unrecognized declaration
違うか isの中に関数呼び出し形式のトークンは書けないのかな?
>>469 仕様。
is(typeof(foo(p[0..1])))で多分おk
仕様か 上がokで下がダメなのは不思議です void main() { //static if (is(foo())) {} //good static if (is(bar(1))) {} // bad }
>>472 構文的にはis(型)なんだけども、意味解析で型が値、値が型として扱われるという不思議な事になってる。typeof(TypeA + TypeB)みたいなのが通ったり…。
ただこの意味解析の挙動は仕様では無いはず。
実装依存なのか それは困るぞ
ちょっと前まで、typeof(Type)が通ってたし、そのあたりは不安定だな。
477 :
デフォルトの名無しさん :2008/12/18(木) 07:10:30
しゅはきませりしゅはきませり しゅはきませりしゅはきませり しゅはしゅはきませり
478 :
458 :2008/12/18(木) 10:43:02
再び質問ですいません。 -version=DFL_DMD2020をコンパイル時に付け加えたらInvariant系のエラーが出なくなったので、 そこは上手く言ってると思うんですが、次はcore\memory.dがないと出ました、これはどこにあるんでしょうか。
dmd/src/druntime/import/
dmdの下の階層がありません・・・ 今気付いたんですが2020ってバージョンのことなんでしょうか? 使ってるバージョンは2.014なんですが、2.020が使えって事ですかね?
じゃなかったdmd/src/の下にはdruntimeのフォルダ階層がありません。
探したらありました>< 試して見ます、ありがとうございました。
>>476 ひどすw
ところで
template A(alias fn,int i=0){
alias ParameterTypeTuple!(fn) Params;
Params p;
static if(is(typeof(fn(p[0..i]))))
const int result=i;
eles
const int result=A!(fn,i+1).result;
}
void func(int x,int y=0,int z=0){}
const int n=A!(func).result;
funcを呼び出すのに最低限必要な引数の数を得るコードだと思うんだけど
今でもこれ実現可能?
今、出先なので元のコードは示せないのだがそっちは無限ループするんだ・・・
上のままだとうまく動くなw お騒がせしました
fnが関数(か類似する何か)じゃなければ無限再帰するよね。
あ・・・それでか・・・
class SomeClass{} const SomeClass Null; template Hoge!(alias fn){ static if(is(typeof(fn)==SomeClass)) const int n=-1; else const int n=A!(fn).result; } dmd1.xで動いていたこれが 2.xでHoge!(Null)のときに無限再帰して困っていたのだが typeof(Null)==const(SomeClass)に なっていることにようやく気が付いた orz
dfl使ってるんですが、こういうエラーはどうやったら直るんでしょうか? hello.obj(hello) Error 42: Symbol Undefined _D3dfl11application11Application3runFC3dfl4form4Form Zv hello.obj(hello) Error 42: Symbol Undefined _D3dfl4form4Form7__ClassZ hello.obj(hello) Error 42: Symbol Undefined _D3dfl4form4Form6__ctorMFZC3dfl4form4Form hello.obj(hello) Error 42: Symbol Undefined _D3dfl5label5Label7__ClassZ hello.obj(hello) Error 42: Symbol Undefined _D3dfl5label5Label6__ctorMFZC3dfl5label5Label hello.obj(hello) Error 42: Symbol Undefined _D3dfl7drawing4Size6opCallFiiZS3dfl7drawing4Size hello.obj(hello) Error 42: Symbol Undefined _D3dfl7control7Control4sizeMFS3dfl7drawing4SizeZv hello.obj(hello) Error 42: Symbol Undefined _D3dfl7control7Control6parentMFC3dfl7control7Control Zv --- errorlevel 8
dfl.libをリンクする
そういえばdflのイメージリストマダー?
module dfl.imagelist; ならあるけど
Descent 0.5.3 released 何が変わったかはちょっとわからんけど…
リフレクションとか使えないようなんですが、設定項目とか皆さんどうしてるんですか? 1項目ずつコーティングですかね。
Utf-8をShift-jisにするのは、何か外部ライブラリとか使わないと無理ですか?
Dってほとんど外部ライブラ(ry
499 :
デフォルトの名無しさん :2008/12/22(月) 01:16:29
toMBSzは?
>>497 自前でテーブル持つか、文字コード変換ライブラリ使うしかない。
テキスト内の文字列をコンソールに表示してるんですが、文字化けてしまいます。 toMBSzを使ってもA02EA0とかA02EB0みたいな文字に変わってしまうんですが、 何を間違えてるんでしょうか。
>>501 A02EA0とかはたぶんポインタの値が表示されてる。
import std.c.string;
auto len = strlen(cstr);
auto dstr = cstr[0..len];
とかでDの配列に変換してやるか、printfなんかのCの関数なら正常に表示できる。
まあtxとかの外部ライブラリ使ったほうがいいと思うけども。
char* cstr; printf("%.*s",cstr);
dflのdirlistviewのサンプルいじってるんですが、 32x32のアイコンをShell32.dllから抽出するのは問題ないんですが、 16x16のアイコンを指定すると Error: AssertError Failure imagelist.d(171) Image list: invalid image size ってエラーが出てきます。 このエラーは何が問題なんでしょうか
Image list: invalid image size じゃないか?
descent 、紹介動画が上がってるね extentionMethod って初めて知ったわ。
>extentionMethod って初めて知ったわ。 ツッコミ待ち?
っ [なんでやねん]
ddbgでdflを使ったアプリケーションを実行すると Unhandled Exception: EXCEPTION_ACCESS_VIOLATION(0xc0000005) at invariant._d_invariant.Object (0x00431925) thread(6556) とか出るのだけど、これは設定が間違っているのか、それともdflのバグなのか?
dflを使ってる場合はコンパイラは1系にした方がいいんじゃないでしょうか。 自分は2系で動かすのはあきらめました。
1で使ってる。ddbgじゃなく、普通に実行する分には問題なく起動するんだけどね… ぶっちゃけると、descent+DMD1.037+Tango+DFL+ddbgでうまく動かす方法が知りたい… いろいろ試した結果、rebuildを使ってライブラリまですべてコンパイルし直すとうまくいくくさい…けど、なんか負けた気分になる。
>>506 そうなんですが、コードを追っていくとLoadImageでとまっているっぽインです。
UINT ExtractIconExA(LPCSTR, int, HICON *, HICON *, UINT);
を使おうと思うんですが、これをDで使う場合はそのままだと駄目なんでしょうか。
Error 42: Symbol Undefined _ExtractIconExA@20
というエラーが出るんですが。
>>513 ちゃんとライブラリをリンクしてるのか。
ねぇ、ちゃんとリンクしてる?
この関数だけ extern(Windows){ UINT ExtractIconExA(LPCSTR, int, HICON *, HICON *, UINT); } とやって後はdflのを使っています。
だからライブラリをリンクしてるのかと聞いてるんだが。
externを付けて宣言すれば使えるもんだと思い込んでました。 dflやPhobosにはなかったので他のライブラリを使おうと思いましたが 自分には出来そうにないので、dflのResourcesで使われてる LoadImageAのパラメータを変えていじってたらできました。 お騒がせしてすいませんでした。
少し前までの勢いが懐かしく感じる今日この頃
じゃあむし返すが、結局デストラクタによる2つの問題 ・非GC管理リソースの解放を確実に行えない ・クラス/構造体内のGC管理リソースの寿命を管理できない は、いまのDのまま進化を続けたらどういう風に解決されるだろう?
GC をメモリ以外のものにも適用できるようにする。 そして、メモリ以外のものに対する GC は 自前で拡張できるようにもする。
それってデストラクタが確実に呼ばれるようになるのならそれでいいんじゃないの
デストラクタをC#のファイナライザ相当のイベントにしてしまったら? デストラクタのタイミングで処理しないといけないことって何がある?
年末ですね
メンバ変数にscope属性が付けられれば後者は解決するかな?
宿題の季節
質問
Tangoのxmlを使おうと思ってるんですが、
XmlPath!(T).NodeSetって型じゃないんですかね。
サンプルのソースも全部受け取りがAutoになってたり略されてたりで分かりません。
変数 = .query["width"];
変数.value = 'hoge';
でいけるかと思ったんですがNodeSetにvalueはないといわれます。
でもサンプルだとforeachで取った変数から.valueで値をとってるんですが・・・
http://shoo.s20.xrea.com/shoo/programing/chirno_quality/0005.html ここを参考にしてるんですが、作成と取得はあるんですが変更がありません。
誰か教えて><
autoが何になるか分からなければ、typeofで型とって表示してみればいい。
>>528 ありがとう。
てか、 .data = "hoge";でいけました><
ここに書き込んで冷静に見直したら即効で事故解決しました。
どうも!
>>525 scopeメンバ変数のあるクラスはscopeクラスにしないといけないだろうから、
scopeがどんどん伝染して酷いことになりそうだが……
a. デストラクタがいつかは必ず呼ばれるようにしろ
b. デストラクタでメンバオブジェクト触れるようにしろ
b1. deleteで呼ばれたかGCで呼ばれたか分かるようにしろ
b2. 依存関係にしたがって解放順序を保証しろ
って感じだよな。
>>530 scopeクラスじゃなくて、「俺をdeleteした場合はscopeメンバも暗黙にdeleteしろ」って目印じゃね?
scopeメンバを持つクラスはscopeクラスの寿命にせずともよくて、
そのクラスの寿命が来たらscopeメンバも自動的にdeleteされる、って感じの。
今は(scopeクラス以外は)デストラクタでメンバをdeleteするのも無理だから、
その点では解決になると思う。もしscopeメンバ同士で循環参照してても、
delete順序が不定になるだけで、仕様上双方一度しか呼び出されないだろうし。
>>531 でもそうすると、scopeメンバ変数にscopeクラスを代入できなくなるよね。
現状 GC のトリガや基準がメモリに関してのみなのが GC を採用している言語全体の問題だ。 トリガを拡張できるようにするべき。
>>533 メモリ以外のリソースにも参照変数を導入する必要ができるぞ
参照の有無で生死を判断するのだし
メモリとRAIIに全部任せるべきじゃないかね
>>531 b1が必要な理由がよくわからなかったので説明しなおしてもらえないか
536 :
535 :2008/12/26(金) 12:58:08
あ わかりそう もう少し考えてみます
あれは(b1&& b2)じゃなくて(b1 || b2)。
スレ違いかもしれませんが、Descentでプロジェクトエクスプローラーで表示されるobjファイルを 表示されないようにするにはどうしたらいいんでしょうか。
>>534 別に GC をもう1つ作るわけじゃない。
優先的に GC を走らせるだけに過ぎない。
>>459 DFL+dmd2.022でコンパイルおわらねーな
誰もいない・・・
いるよ
このスレのユニークユーザってどのくらいいるんだろうな
俺はこのスレに50レスぐらい書いてるから、きっと10人強だな
書き込み10、ROMを足して40くらい?
書き込み10が正しいとして ROMは100以上1000未満くらいいると思う
D2になってから、何か方向性が違うなあーとおもって触らなくなった。
そもそもconstとかinvariantを使いこなしている人ってどれだけいるんだ? constメンバ関数とかinvariantクラスとか。 制限きつすぎて使いどころがわからん。
つ マルチスレッドのimmutableパターン
invariantクラスは使いどころに遭遇したことがないな でもconstメンバ関数は普通に使うでしょ C++と一緒で
const/invariantは文字列周りのバグを減らせるのが主な価値だと思っている
年が更新されたねぇ
553 :
デフォルトの名無しさん :2009/01/01(木) 06:07:47
D2になってから、何か方向性が違うなあーとおもって触らなくなった。
D2 で win32api って使えないんですか?
つかえますよ・・・
const/invariantに引っかかってるんじゃ? 引数がchar[]を要求してたらconst(char)[]/invariant(char)[](stringとか)は そのままでは与えられないから.dupでchar[]にしないといけないよ
そろそろD3が登場する時期か
伝説のDでかかれたDコンパイラな
>>557 正月早々、短縮URL・・・
踏むのこわいなー
Dでコンパイラコンパイラ作ろうとしてる人いなかったっけ
OS作ってるひとはいるね
以下DOS禁止
567 :
566 :2009/01/01(木) 20:51:01
× 作れるのも ○ 作れるもの
Dでmbrにアクセスするプログラムとか手軽に書ける?
>>569 gdc+attribute拡張+リンカスクリプトで何とか可能かも?
30日OS本持ってるけど内容忘れたので何とも言えない。
>>563 ctfe.zipってのがあった気がする。実装はあまり良くなかったような。
もう一つあった気がする。そっちは悪くなかったような。
でもそれを使った実用的アプリが無い限りは消えゆく運命。
言語的にこんな事が出来る!って感じから こんなアプリ作られた!の流れマダァ?(・∀・ )っ/凵⌒☆チンチン
win32 の HelloD を書いたのだけど、 DigitalMars のリンカは OMF しか対応してないから変換が必要になるのであって、 MS のリンカは COFF も OMF も対応してるんだから MS のリンカでリンクしてみると 幸せになれるんじゃね?とかもくろんだ俺、涙目
まぁ、確かにキラーアプリというかフレームワークとかの登場は待たれるね。 Ruby の Rails みたいな感じで。 アプリケーション自体は言語非依存なのがふつーだから、 アプリだけあっても言語は普及しないんだよな。 とりあえず、今 ANTLR で遊んでるところ。 こいつの実装自体は Java だけど、D言語のパーサー吐けないかなぁとか思ってる。
577 :
576 :2009/01/02(金) 18:47:06
って、ググったら ANTLR-D とかでてるじゃん。 でも、リンク死んでるな… これはプロジェクトがお亡くなりになったのか。
dmcでTinySchemeうごいたぜうひひ
D言語仕様が一社だけで決まるのは明らかによくないよなぁ だれかうぉるたん説得して
>>580 そして仕様が決まらないままん何年経つんですね、分かります。
D 0x の旗揚げである
実際には2xあたりになりそうだなw
D歴 0080 我らの愛してやまないうぉるたんは死んだ!何故だ!!!
0xってあと364日なのか
>>580 作っているのが一社かどうか一人かどうかは関係なくて
仕様の悪いところを説得するだけで十分だよ
Dはコミュニティが作るって言ってたよ
>企業の戦略的なロードマップや、偉大なプログラミング理論によって方向が決まっているような言語ではありません。 D言語コミュニティ からの要望や提案・協力が、向かう先を決めていきます。
>>580 例え一社でもBorlandみたいに、本腰入れて作ってくれればいいんだけど・・・
それで失敗したら救いようがないんだけどねw
とりあえず言語より環境をなんとかして!
企業がやるなら儲けが出る見込みがないとなぁ gdcがmonoぐらい軌道に乗ってくれればいいのだが・・・
ないないw
企業の立場からすると、いつ仕様変更されて 今まで書いたコードが台無しになるかわからない言語なんて 使えるはずがない
話がつながってないな
これ、なんか作ろうと思ったら 2.xは使わない方がよさそうだね
本気でなんか作ろうと思ったらD1.0+Tangoになるんじゃないかな …ともおもったけど、TangoもTangoで期待通りに破壊的変更が大好きだからな。
バージョンアップしなければいいじゃん!
>>594 だがこのスレの住人はバージョンアップするために使ってるMばかりなのだった。
ABAさんは1.x以前の時代に既にゲームを作ってたよ
2.022でコンパイルが終わらないのは何が原因なんでしょう
>>597 相互依存テンプレート云々。良く分からなかったけど。
コンパイラ側の問題であって欲しい。
いよいよ、C++も真っ青な templete 地獄がやってきましたか。
先生、dmd でコンパイルしたときに 一定のメッセージを表示させたりすること出来るかな? rebuild で、*.d より新しい *.objがある時に コンパイルを省略してくれてるかを しらべたいねん
人を先生呼ばわりする前に払うもん払ってもらおうか
>>601 その目的ならrebuild -vで良くね?
はらったまーきよったまー
>>603 ないすです。ありがと。
GCんときに全スレッドが止まるのにOSとはねぇ・・・
並列gc実装すればおk
OSレベルでライトバリアとか張れたら、もっとまともなGC実装できそうだよね
609 :
デフォルトの名無しさん :2009/01/06(火) 19:29:32
なんだか、ものすごくかっこいい何かを思い浮かべてしまった。orz
一般名詞だけでwrite, right, rite, light / liteとあるからなあw 固有名詞まで含めればLeight, Lyte, Reit, Rite, Rheydt, Wrightとより取りみどり
光の障壁か。かっこよさそうだな。
インド人を右に!
the type of a string literal is now invariant(char)[] rather than invariant(char)[length_of_string]. こりゃいいや
string s = "hoge"; はアウアウ?
>>614 どこが? テンプレートでlengthが使えなくならないか?
static assert (isStaticArray!(typeof("string literal"))); これの結果が反転しちゃったね
>>616 こういうことでいい?
import std.stdio;
void main() {
string a = TailCutter!("abcd");
assert(a == "abc");
enum b = StaticReplacer!("abcdefg","b","_");
assert(b == "a_cdefg");
// static assert にしてみたらわろた
}
template TailCutter(string s) {
enum TailCutter = s[0..length-1];
}
template StaticReplacer(string s, string from, string to) {
static if (s.length == 0)
enum StaticReplacer = "";
else
enum StaticReplacer = ([s[0]]==from?to:[s[0]]) ~ StaticReplacer!(s[1..length],from,to);
}
はてコンパイルタイムの文字列連結はどうすればいいのか
>>619 ちゃう。
import std.stdio;
uint foo(T)(T s){
int[T.length] x;
return x.length;
}
void main(){
writefln(foo("test"));
writefln(foo("t"));
}
の場合。
お話のところすまん 今回のバージョンってやばめ?
破壊的だとしても>614の件くらい
std.c.windows に書かれてる windows api がじゃまくさいっ
>>625 win32bindingsがあるからもうそれ誰も使ってない気がする
>>621 そんな得体の知れない長さの配列をスタックに割り当てるなんて怖いお…
w32 api bindings、足りない API おおくね?とくに winuser.d ていうか、descent でライブラリに phobos を指定してると いつの間にか stc.c.windows を import してたりして 重複でエラーとかでるのが鬱陶しい。
629 :
622 :2009/01/07(水) 21:01:11
おいらもdsssでpathも通したのですがコマンドプロンプトで dsssは何をしてもError: 4invalid UTF-8 sequenceしか返しません。 dsss--helpでも単にdsssと打ち込んでも同様です ですが、 c:\d\bin>dsss build *.d とやると正常にコンパイルされました。 dmdのほうはどこのカレントディレクトリでも問題なくコンパイルできました。 コマンドプロンプトの文字コードをUTF-8にしてもだめでした。環境変数も全て半角です。 何か考えられる原因がありましたらお教え頂ければと思います。お願いします。
>>630 もう少し環境を詳しく書いた方がいいのでは、dsssのバージョンとかOSとか。
パスでWindowsだろうってことはわかるけど。
svnで落としてきてリビジョンを変えてビルドしてみるか、ビルド済みバイナリ
版を落としてみたらどうだろう。うちの環境ではLinuxは前者、Windowsは
後者でないと上手く動かなかった。
632 :
630 :2009/01/08(木) 00:26:07
>>632 すいません、当方環境はお察しの通りWInXPです。
dsssのバージョンは0.78-x86-winです。
さっそく0.77から0.75まで順番に変えて試してみましたが駄目でした・・・
C:\>dsss
Error: 4invalid UTF-8 sequence
となってしまいます・・・
すいませんがバイナリ版はどこにあるのでしょうか?
「おいらも」って、話がどこから続いてるんだかわからないのだけど c:\> dsss だけなら、usage が出たような気がする。 なんかそれ、うまくビルドできてないとかそういう落ちだと思うな。 svn.dsource.org/projects/dsss/downloads/0.78/ からどーぞ
635 :
634 :2009/01/08(木) 01:11:17
しまったorz
636 :
デフォルトの名無しさん :2009/01/08(木) 01:48:01
>>321 と同じようなエラーだけど、
>>389 ,390で上がってる解決方法の、
環境変数からすべての日本語を取り除いた状態でもだめっぽいってことかな?
637 :
630 :2009/01/08(木) 11:23:32
Web之匠ツールでの、アップロードしたファイルを外部から参照する事を目的とした利用は、規約により禁止されております。
639 :
630 :2009/01/08(木) 20:00:18
他所様にも迷惑かけてしまったみたいで・・・ 不便ですがbinフォルダを使う事にします・・・
dmd2.023でDLL作ったら変な関数が見覚えの無い関数が一緒にエクスポートされてました… gc_clrProxyとgc_setProxyってんだけど、なんだろうこいつら ついでに、コンパイル時はエラー無いけどイメージ無効とかなんとか言われる 2.020の時は動いたのに…(´・ω・`)
OneClickDMDの必要性を感じる
>>642 探したらいました、ありがとう
中身はよく分からんけど、呼び出さなきゃいてもいなくても一緒か…
プロセス間での同期ってやっぱりOS依存のAPIを叩くしかないんかな?
D言語って日本語で変数や関数定義できるんだ
できるお
昔のスレでそれで遊んでる人いたよね
昔のスレで遊んだと言うと、 Part12 の Ruby のイテレータっぽいやつ作ってた頃は楽しかった。
それって前スレでもやってなかったか
継続とか取得できるようになんねーかなー
そいえば、d でコンパイルして、Win98 で動くアプリってつくれるのかなw 今日、IE4 で動いてる環境を見てきたw
>>650 継続は使わなくても言語仕様に入れるだけで重くなる
状態移管を正しく記述できないマ専用の機能だよね
Wikipedia では Web アプリでの応用が書いてあるけど、 変数元に戻すのマンドクセ くらいの意味にしか取れなかった。 そもそも、何を残して何を残さないかちゃんと考えないと すぐにメモリパンクするだろ。
>>654 たとえばコルーチンでは、二回目呼び出したときは前回yieldしたところから実行が再開されるけど、
それを更に拡張し、コード上の任意の位置で実行を中断して、
その一時停止の状態を一級市民として扱えるようにするのがいわゆる「継続」。
そういえば、Dって処理系が書きやすいんだっけ? 文法が処理しやすいように定義されてるとか聞いたような
>>656 gdcの開発が止まっているような中で、オープンソースの処理系が進展しているのは頼もしい
GDCの開発に加えてくれ!とMLにポストしてる人もいるし流れ自体は止まってないよね
これtangoがデフォルトなのか、phobosは使えないのかな・・・
dmd2.023とdmd1.039は、dmd2.022とdmd1.038に比べたら速くなったけど、 dmd2.021とdmd1.037に比べたら遅くなった気がする。 ……気のせい?
>>661 ttp://www.dsource.org/projects/ldc >or
>Fetch the druntime for D2 (this is experimental)
>druntime is the new runtime for D2 to enable Phobos (official standard library) and Tango (community driven library) to coexsist peacefully when Tango will move to D2.
みなさんエディタは何を使ってるんですか?
descent と サクラエディタをときどき sedit とか edlin などという呆けはかまさない。
667 :
デフォルトの名無しさん :2009/01/11(日) 21:40:54
Entice Designer
サクラエディタだなあ。
普段はgeany。winではEmEditor。
D用だとCodeBlocksかなあ 起動が重いが
notepad++使ってます しかし見事にバラバラだなwww
秀丸
私はvim
emacs/xyzzy
ほんとかよw
Peggyです。
poseidonです。 DOSでコンパイルしてるけど・・・
678 :
661 :2009/01/11(日) 23:23:59
>>664 レスサンクス。でも使ってるのD1なんだ・・・。
D1用のランタイムでビルドしてみたけどmake runtimeで挫折。
公式にphobosに対応したらまた使ってみるよ
>>675 1.0以降Dが意外と普及してきたから
補完機能付きのメジャーなテキストエディタだと結構対応できる
Ginnieメインでたまにdescent使ってるわ。
>>679 SmultronというMac向けのエディタでさえ対応してたり
しかしネスト可能コメントに対応しているGUIベースのエディタはなかなか見ない
変態文法を理解させるならそれこそemacsにやらせるのが早い気がする
WZ Editor
>>679 ほんとかよってのは本当にこんなにバラバラなのかよってことでした
WindowsMobileアプリは書けないですよね?
OSというよりは、CPUが違うから無理だな。 GDCに手を加えて、クロスコンパイルできるようにしてやるとか。
>>686 GDCというものがあるんですね。
ARMはサポートされてるみたいですね。
688 :
685 :2009/01/12(月) 14:45:10
>>686 本家の方でもちらほら話題に上がってるみたいですね。
参考になりました。ありがとうございます。
689 :
685 :2009/01/12(月) 17:20:45
690 :
デフォルトの名無しさん :2009/01/12(月) 17:25:52
今北三業 D言語とは一体 デブ言語?
>>689 爆発的普及はないがじわじわと普及してはいるんだなあ
おっ もう内部的にinvariantがimmutableに置き換わっているんだね //dmd2.023 void main(){ char[] a = "hoge"; } a.d(1): Error: cannot implicitly convert expression ("hoge") of type immutable(char)[] to char[]
D2のThreadクラスで、pause()とresume()を使いたい場合って 何か代用方法などはあるのでしょうか?
いや、伝わるわ。なぜなら俺も似たような質問をしたことがあるから。Tangoで。 結論から言うと、ない。WinでいうところのSetEventとWaitForSingleObject相当の機能もないと思う。 それこそOS依存なAPIを叩くしか。 TangoならMutexとかConditionとか活用すればたいていの場合切り抜けられるけど…
ユーザースレッドを実装するとか。 1スレッド内でやる擬似スレッド。 当然1cpuしか使えないけど。
697 :
693 :2009/01/12(月) 22:13:59
質問が言葉足らずで申し訳ありませんでした。 当方Phobosを使用しております。 ThreadPoolの実装で、 WorkerThreadを待機させておくのにpause()を使いたかったのです。 D1では上手く行ったのですが、D2にはpause()が無いので ビジーループ以外に方法が思いつかなくて・・・。 簡単な解決方法は無さそうなので、大人しくD1で開発して行こうと思います。 お時間割いて頂き、ありがとうございました。
core.Threadになってから変わったからか
流れを破壊的変更するけど、
DirectX SDK の Direct3D Tutorial.1 まで行けた。
しかし、coffimplib で↓のような状態なのだけど、これどうすりゃいいの?
C:\test\lib>coffimplib "\dxsdk Nov.08\Lib\x86\DxErr.lib" DxErr.lib
Error: not an import library
C:\test\lib>coffimplib "\dxsdk Nov.08\Lib\x86\DxErr9.lib" DxErr9.lib
Error: not an import library
C:\test\lib>coffimplib "\dxsdk Nov.08\Lib\x86\dxguid.lib" dxguid.lib
Error: not an import library
C:\test\lib>coffimplib "\dxsdk Nov.08\Lib\x86\xapobase.lib" xapobase.lib
Error: not an import library
C:\test\lib>coffimplib "\dxsdk Nov.08\Lib\x86\xapobased.lib" xapobased.lib
Error: not an import library
>>33 さんのその後が気になるぜ。
dflのTreeViewってHitTest(だっけ?)出来るようになった?
知ってると思うがdirectxはcom(component object model)
関係ないしw
D3DX9 がほとんどポーティングされてないぜ・・・orz tutorial 3、いきなりこけたw
win32 api bindings, win32/directx/d3dx9.d でバグ発見。 D3DXCreateTextureFromFileA(〜, LPCTSTR, 〜); って書いてあるせいで version=Unicode 時に適切な引数を渡せず、いつも D3DXERR_INVALIDDATA の結果になっちゃう。 D3DXCreateTextureFromFileA(〜, LPCSTR, 〜); D3DXCreateTextureFromFileW(〜, LPCWSTR, 〜); って書き直したら直った。他にもあると思う。 フォーラムはいる気はさらさら無いので、入ってるひといたらバグレポお願い。 いなかったらチラシの裏
Vista + Descent + Rebuild + DMD1.039で module Foo; import win32.winuser; int main(){ MessageBox(null, "SampleFoo", "", MB_OK); return 0; } をDOS窓で >dmd Foo.d だと問題なく実行されるんですが 同じくDOSから >rebuild Foo.dだと ..\win32\winnt.d(47): template instance forward reference to template declaration CPtr(T) という警告が出てしまいます。 初歩的な点で申し訳ないんですが、何かヒントいただけないでしょうか?
709 :
705 :2009/01/15(木) 18:50:38
win32.basetsdにwin32.winntの alias CPtr!(char) LPCCH, PCSTR, LPCSTR; alias CPtr!(wchar) LPCWCH, PCWCH, LPCWSTR, PCWSTR; をコピーしてみたところ通りました。 このやり方に問題があったらご指摘お願いします。
710 :
706 :2009/01/15(木) 18:51:17
すいません(汗 ↑は706でした
711 :
706 :2009/01/15(木) 20:36:00
連投すいません、結局やってみたらあちこちでひっかかってしまって(汗 cptr.dとか作ってあちこちにimportさせてみたらうまくいきました。
うーん、やっぱり土台がいつまでも揺れてると 立派な建物建ててもすぐ崩れるな。 RoR みたいなライブラリは作りたくても作れないってのが現状かなー。
rubyってそんなに安定してたっけ
rebuild の conf ファイルと sc.ini を見てみないことにはなんともいえないとおもうぜ
716 :
706 :2009/01/15(木) 22:17:56
>>715 そのrebuildのconfってやつなんですが、探しても見つからなかったんですが
dsss-0.78-x86-windowsでなくてdsss-0.78のほうにあるrebuild.confってフォルダの
中身のことですか?
dsss-0.78-x86-windows\etc\rebuildが相当するフォルダのようなんですが
この中のファイルの設定ということでしょうか?
sc.iniにはlibとsrcの場所を追加してます。
rebuildだのbudだのはこれがあるからdmdのレスポンスファイル書くハメになるんだよな
>>716 すまん、使ってないからファイル名わすれた。
ただ、そういうファイルがあって、dsss か、rebuild はそれに影響を受けた記憶がある。
バージョン管理始めててふとおもった。 bin ディレクトリや src ディレクトリも、バージョン管理対象に含めた方がよくねぇかな?
>>719 それって要はdmdのってことだよな?それは俺も何度か思ったことがw
721 :
706 :2009/01/17(土) 15:48:49
Descentの補完で例えば WNDCLASS wc; wc. でstd.c.windows.windowsのWNDCLASSだとメンバが表示されるのに win32.winuserのWNDCLASSだと補完が表示されないのはなぜ?
しらんがな ここは君のサポートじゃないし。
723 :
706 :2009/01/17(土) 17:59:44
お邪魔しました。 素直にC#にもどりますw
初心者はD使うなよ(笑) ファミコンでもやってろよな(笑)
そういえばDで実装したNESのエミュレータがあったな・・ 今もコンパイルできるのかのう・・
うんそうだねきみにはむりなんだよさようなら
なんか必死なのがいますね
そろそろ破壊的うpがほしい 禁断症状が・・・
すまない、Tangoは食わず嫌いなんだ(´・ω・`)
早くD2でphobosとtangoが一緒に使えるようになったらtango調べるのに
Phobosを使うこと自体が破壊的変更だからな
破壊的うpが多いと利用者が減ってしまうのでは
Phobosしか使ってないから分からんのだけど Tangoってそんなに良いものなのかい?
自分の場合ほぼ100%Tangoでやってるので、Phobosより悪いところを探す方が大変なのだけど… UpperCamelのモジュール名くらいじゃなかろうか。 それにしたってむしろ全部小文字よりも読みやすいし個人的には気に入っているのだけど… あまりにもたくさんあるモジュールが導入の敷居を高めているのか…?
Stdout()()()()みたいなのなれないなあ。
そういう人はStdout.formatln()使えばよくないか?
>>740 その関数の名前はwritelnであってほしいんだよねえ…
俺の美意識と微妙なところで齟齬があって好きになれんのだ。
writeflnか。 ともかく、formatってのはおかしいだろうと。
alias format writef;
たしかに、ライブラリの設計って設計者の美意識を反映する部分があるね。 なんていうか、シムシティ的な。
formatって何由来だろ。Common Lisp?
>>742 の言いたいのはformatで出力までするのはおかしいってことじゃないの?
Stdoutに対するformatlnなのだから出力までして当然だろう! ってことじゃないの?
>>747 そゆことです。
formatっていうと、文字列を返して欲しいイメージが。
Tangoはセンスがな・・・
You!! import dango.io; つくっちゃいなYO!
Tango でファイルを 最大 2kb だけ読み込むってどうやるの? tango.io.read だと一気に全部読んでしまいそうだし・・・
C++でもprintfを使っちゃう人はPhobos派 素直にstd::coutを使う人はTango派 間違いない
Stdoutに対して書込み操作するのはwriteといちいち言うまでもなく当り前なわけで、writeと書くのは冗長だ。 じゃあ文字列の出力にメソッド名なんていらなくない?ってなったのがStdout()で、 Stdout.flnだけだと意味不明なメソッド名だから、Stdout.formatln。 いいと思うんだけどな… …まぁ、何はともあれ、wvnsprintfとかつけられるよりはましなんじゃね?
Stdout(format("〜", "〜")) にしろって落ち?
>>754 その場合冗長なのはwriteじゃなくてStdoutの方だと思う
「何をするか」に比べれば「何に対して」なんて付加的な情報に過ぎないし、
何も明示しなかった場合の出力先だからこそ「標準」出力と名づけられてる、と思うし
>>753 ノ該当してるわ。C++でprintf派。
巨大ライブラリ嫌い。分厚いラッパーも嫌い。アダプタ地獄は嫌ずら。
758 :
デフォルトの名無しさん :2009/01/19(月) 22:18:18
>>758 setHandle相当をやってるかと言えばやっている
だけど,そのsetHandleのようにGCを入れ替え可能かと言えば出来ない
そこに出てくるProxyはそれとは別でプログラム側からの呼び出しの間に挟まっているもの
760 :
758 :2009/01/19(月) 23:12:00
そもそも標準出力なんてしょっちゅう使うものなのかと。 そんなにStdoutが嫌いなら嫌いなところだけTangobos使えばいい
Tangobosとかますます汚いじゃん
まず第一に、名前が汚いからなあ、、、
中身はPhobosと一緒なんでしょ? D2.0系との誤差はあるかもしれないけど。
みんな、C++ のヘッダを D に移植するときは long と int の違いに注意だ! これ、俺との約束な!!! ・・・すっげーなやんだorz
>>765 どうもありがとう。ちょうどそういうことしてるところだった(ODE)
ところで mixin の中に mixin をさらに埋め込むことってできますか?
mixinするtemplateのなかでmixinをするってことなら出来る
文字列mixinのなかで、文字列mixinもできるよ。更にそのなかでも
まとりょーしか?
>>769-770 マジすか!どうもありがとう!
マトリョーシカミックスイン、やってみます。
こんな感じでできたっぽいです!手で展開する羽目にならなくてよかった。 C++ : enum { D_ALL_PARAM_NAMES(0) dParamsInGroup, D_ALL_PARAM_NAMES_X(0x000,1) D_ALL_PARAM_NAMES_X(0x100,2) D_ALL_PARAM_NAMES_X(0x200,3) dParamGroup=0x100 }; D : mixin( `enum {` `mixin D_ALL_PARAM_NAMES_MIXIN!("0");` `dParamsInGroup, ` `mixin D_ALL_PARAM_NAMES_X_MIXIN!("0x000", "1");` `mixin D_ALL_PARAM_NAMES_X_MIXIN!("0x100", "2");` `mixin D_ALL_PARAM_NAMES_X_MIXIN!("0x200", "3");` `dParamGroup=0x100` `}` );
775 :
773 :2009/01/23(金) 01:22:13
>>774 できそうですか?CTFE やったことない・・・。
そして773のはできたと思ったらできていなかった・・・!
もうちょい試行錯誤してみます。
なにやってるかわからん俺、涙目^-^; google video なくなるんだってね D言語関連でなにか上がってなかったっけ?
ウォルたんのD解説動画あたりが上がってた気がする
俺も
>>775 がやってることがわからんw
778 :
773 :2009/01/23(金) 02:44:04
物理エンジンライブラリのODEをDで使いたくてC++のヘッダを持ってこようと してるんだけどね・・・。 今は意地みたいな感じでいじくりまわしてるけど、 正直マクロを展開した結果を手で書いたほうが速いw (derelict はそうしてました)
enumまでmixinするならdefineEnumで定義した方がいいような
/ < __>  ̄ どうした?! _/ /\ |\ :ハ // ̄ つこう太郎!! :/ |: Σ( ◎) / |: _ノ(ノヽノ ヽ- : :/ \: :/ ノ人 U ヽ: :| イ‐ヽ\) U ): :| <●> ヾ) ): と、父さん!! :ヾ/' ( o o ) ヽ, U /: :| ,.-‐U-、 i ノ ノ: 踏んだ気配です!!… :ヘ <EEEEE > レノ /: :ヽ、ヽ--ィ´ ノノノノ,,: :/~/`ーーーー´/___/ヽ: :/ | ̄~|ヽ/\/| |' |: :/ |__| o .|__| |:
でもそこにこだわっちゃうあたりが D プログラマっぽいかもしれないw
さて何か面白い話ないかなー verうpまだー?
785 :
773 :2009/01/23(金) 23:15:27
>>780 わざわざすいません!チェック用コードがとんでもないことにw
昨日あれから以下のページを参考に作ってみました。
ttp://www.kmonos.net/alang/d/1.0/mixin.html mixin(
`enum {`
~D_ALL_PARAM_NAMES_MIXIN!("0")
~`dParamsInGroup, ` ///< Number of parameter in a group
~D_ALL_PARAM_NAMES_X_MIXIN!("0x000", "1")
~D_ALL_PARAM_NAMES_X_MIXIN!("0x100", "2")
~D_ALL_PARAM_NAMES_X_MIXIN!("0x200", "3")
~`dParamGroup=0x100`
`}`
);
他のところでコンパイルが通ってなかったので正しいか未確認だったけど、
同じようですね。どうもありがとうございます!
ちなみにこだわる理由は一応ありまして、今後 ODE の開発が進んで追加など
された場合に、毎回展開するのが手間だなぁと思ったからです。
786 :
773 :2009/01/23(金) 23:23:19
ちなみに書いていただいたページは今後の資料としてありがたく頂戴しました。 どうもでした。
787 :
デフォルトの名無しさん :2009/01/24(土) 14:04:13
例外に、Javaっぽいスタックトレースってつけられないのかなぁ? 意図していないタイミングで発生するとどこで落ちたんだか判らなくて困る。
flectioned
catchsegv
catchsegvなんてもんがあるのか
以前、flectioned 使おうとしたんだけど、Phobos を -g でコンパイルしようと したんだけど、そもそもコンパイルが通らなくてやめた。今はどうだろう。
D2.013 にある __FILE__ と __LINE__ を、 引数のデフォルト初期化子として使いやすいように変更 って、D1.xではダメなのか・・・ orz
>>787 処理速度遅くてもいいから-debugか-version(unittest)付いてる時は詳細情報欲しいよね
>>793 それは何度も思ったなぁ。
でも、なぜか-debugつけてPICマイコンとのUSB通信用DLL関数の処理が1/100くらいの
めちゃくちゃ遅いスピードになったときは、デバッグモードで処理速度速くする方法はないものかと思ったものだ…。
foreach(hoge h; hogeManager) { } ってさせたくて、 hogeManager に opAssign を実装しようとしたんだけど、 これって配列が出来てないとダメなんだね...orz C# みたいに hoge opAssign() { yield return new hoge(); } みたいに、opAssign の中で新しい hoge を作ることが出来なさそう。
int opApply(int delegate(ref hoge) dg) { while(hogehoge) { auto tmp = new hoge; if (auto result = dg(tmp)) return result; } return 0; }
int opApply(int delegate(ref uint) dg) { int result = 0; for (int i = 0; i < array.length; i++) { result = dg(array[i]); if (result) break; } return result; } みたいに、配列を 0 からなめ直せって書いてあるよ? それに795 の方法だと、hoge が例えば id とかもってたら困らない? あとは new するたびに Factory の状態が変わるとか。おれがこまったのはこいつなんだ。
opapplyなのかopAssignなのかどっちの話なんだ
あ、ごめん、opApply
うーんと、 hoge が、new された時間とid を持つとして、 こっちの求めているのは hoge(00:00:00 - 1) hoge(00:00:01 - 1) hoge(00:00:02 - 1) なのに、796のパターンだと hoge(00:00:00 - 1) hoge(00:00:01 - 2) hoge(00:00:02 - 3) になってしまうんだけどこういうのはどうすればいいの? っていうか、dg って何者?
opApplyは単なる内部イテレータなわけだが、いったい何がわからないんだよ。 int opApply(int delegate(ref hoge) dg) { auto id = getid(); while(hogehoge) { auto tmp = new hoge(id); if (auto result = dg(tmp)) return result; } return 0; } でいいだろ。
>>802 そのIDはどういう理由で変わったり変わらなかったりするの?
なんか日本語にすると語彙不足で難しいんだけど、 「その秒の中につくった、何個目かを示すインデックス」。
>>805 そのidは、hogeのコンストラクタで決めてるの?
Factory です。
ごめん、ねむくてマウスがお茶浸しになったから寝る。
意味不明すぎる。小出しにせずにコード全部乗せろよ。
どういう設計になってたら、外部イテレータではうまくいって、 内部イテレータだと変なことになるのかわかんないなあ。
enumについて教えてくれ。 enum STR: string { FOO = "abc", BAR = "def" } ↑って言語仕様上正しいの? -g付きコンパイルだと怒られるんだが。
>>811 EnumBaseTypeには大小比較可能である以外の要件は求められていないよ。
813 :
811 :2009/01/25(日) 18:10:58
>>812 大小比較可能なchar配列を使用しているからOKだと思って使ってたんだ。
で、デバッガ使いたくてdmdに-gを渡すとコンパイルできないんだ。
すまん、根本的に認識が間違っているなら教えてくれ。
たぶんデバッガ用のタイプタグを生成できないんでしょ。 CやC++では、列挙型は整数以外になり得ないから。
815 :
811 :2009/01/25(日) 19:09:31
そういうことかぁ。 ありがとう。
>>811 -g 渡さなければ使えてたの?
言語仕様上OKなら便利だから使いたいな。
enumするメリット見えないんだが
ビットフラグ用のenumってないの?
>>817 複数の定数にまとまった名前がつけれる。
ただ、string->enumの暗黙変換が出来るから微妙だけど。
namespace 使えば十分じゃね?
ところで enum { FOO } の FOO を"FOO"という文字列化する方法ってある?
値が連続してることが簡単に保証できるのが enum の利点
>>821 ない。そういう関数を自分で用意する以外に。
C99 のインデックス指定配列初期化があればいいのか。
826 :
821 :2009/01/25(日) 20:21:00
>>824 そっか。どうもありがとう。
enum に値を追加したら文字列化関数にも実装を追加
しないといけないから、ちょっとメンドクサイよね。
827 :
811 :2009/01/25(日) 20:28:57
>>820 namespaceは無い。けどstatic structならあってそれで十分なはず。tupleof+stringofで名前取り出しもできる…か?
829 :
811 :2009/01/25(日) 21:01:55
>>828 おお!
static structの存在を忘れてた。
これでほんの少し修正するだけでデバッガ通せそうだ
>>826 そこでstd.typeconsにあるdefineEnum
conceptまだかうよ
832 :
デフォルトの名無しさん :2009/01/26(月) 18:50:56
ん?1個減った?元々2つだったかな
配列演算も予定の一つで、 あともうひとつ何かあった気がした。
ジェネリックデリゲートが欲しい
そういえばcovariant/contravariantがまだない
Descent 0.5.4 released
839 :
デフォルトの名無しさん :2009/01/28(水) 18:24:26
2年前と比べるとずいぶんもり下がって北ね、 なんか疲れてきた。
これから勉強するなら1.0より2.0?
昔より更新頻度が落ちたし、更新の内容も破壊的なのが減ってきた。 IDEもそれなりのものが既にあるし、ライブラリもそれなりに整ってきた。 Dはインフラを得た代わりに話題を失いつつある…そんな気がする。
>>839 ,841 まだ
>>832 ,835-836 とか残ってることはたくさんあるよ
ウォルたんは次あ何をしようとしているのかなあ
>>840 そろそろ破壊的変更も少なくなってきたから
これから始めるなら問答無用でD2でもいいんじゃないか
>>841 魅力的な更新が減ったのがなぁ。gdcの更新も滞っているし、ldcはまだまだだし。
ldcの安定待ち。
>>838 凄いな。でもコンパイルタイムで色々しまくると激しく遅くなりそうな予感。
D3.0まだ?
このスレでは 魅力的な更新==破壊的な更新 なのかい?
個人的には違うがマゾが集まっているのも事実。
今年もまだメモ帳で頑張れる
俺はどっちも好きだなあ。 とりあえずgdcmacが安定してほしいのといくつかシンタックスシュガーが欲しい
自分でシンタックスシュガー作れる仕組み出来ねえかなぁ マクロより安全な方法で
コンパイラ弄って自分でシンタックスシュガーを追加している俺勝ち組
どんなシュガー追加してるかkwsk
あればうれしいのはシンタックスシュガーを作れる仕組みではなくて それで作りたいシンタックスシュガーそのものではないのか?
だから早くタプルリテラルを作れと(ry
タプルリテラル作るって言ってたっけ? テンプレートできるからいらないとか言われてなかったっけ
タプル返せるようにしてけろ
構造体でおk
>>860 回避策
import std.typetuple, std.stdio;
struct tupleWrapper(TL...){
TL tl;
}
void main(){
TypeTuple!(string, int) tup;
tup = foo().tupleof;
writefln(tup[0]);
writefln(tup[1]);
}
tupleWrapper!(string, int) foo(){
return tupleWrapper!(string, int)("test", 12);
}
>>863 クリスマスにマックミニ買っちゃった!なんて、なんかちょっとかわいいw
しかもAmazonとか親近感沸くなぁw
マック地下室監禁わろたw
gdc が全然アップデートされない今、 本家が Mac をサポートしてくれれば言う事無しだ
Tango 使ってみてるけど、使いにくい・・・。 なんか利点在るの?これ・・・
どういう点が使いにくいと思うか書いてみて?
連想配列を全てを削除するのって下のでいいのかな? D1.038 で落ちることがよくある・・・。 例えば long[string] hoge; に対して foreach (key, h; hoge) { hoge.remove(key); } hoge.remove(key) じゃなくて writefln(key) とかなら全然大丈夫。
全部消すなら hoge = null; でおk
foreach中にその対象に変更加えるとダメだったと思う
873 :
870 :2009/01/31(土) 10:23:54
874 :
870 :2009/01/31(土) 21:07:19
ちなみに削除して再登録していきたかったので、下のようにしたらうまくいった。 auto remove_keys = hoge.keys.dup; foreach (key; remove_keys) { hoge.remove(key); }
連想配列にeraseが欲しいよな そうするとイテレータが必要になってくるのか
---a.d import b; import c; void main() { Hoge h; } ---b.d interface Hoge {} ---c.d import b : Hoge; // : Hoge を無くせば直る alias Hoge[] HogeArray; --- a.d(5): Error: b.Hoge at b.d(1) conflicts with c.Hoge at c.d(1) 名前指定インポートつかえねえええ
選択インポートだっけ? 滅多に使わないよなぁ、丸ごとインポートすれば事足りるし public付けたりしたらより一層意味不明な事になりそうだな、試してみよう
色々試したけどよくわかんね ただシンボルとしては同じなんだなー 完全修飾して衝突さえ回避すればHogeArrayにb.Hoge連結できるし、 Hogeをクラスに変えたらb.Hoge h = new c.Hogeで怒られない だがこうなるとどうして衝突で怒られるのかが不思議だ、やっぱりバグか?
何気にシンボル関係は挙動不審 privateとかいろいろと
880 :
デフォルトの名無しさん :2009/02/05(木) 01:29:57
この言語ははやらん。 理由は開発者の数が少なすぎる。もっとも、ボランティアの開発グループ を結成して実用的なものに改良を加えていくとC++みたいに言語使用が破綻 するが。。。 JAVAが一応、成功した理由にはいろいろあるが、GUI、マルチスレッド のサポートが大きいと思う。C++でもそういうのを整備してほしい。 しかし、MSがC++/CRIをANCI C++委員会?で却下されたのは仕方ない。 独特の癖があるから。
どこから突っ込めばいいんだ
まずはD更新欠乏症にかかって3日間沈黙したスレ住民に対して突っ込めばいいんじゃないかな
C++の言語仕様が破綻したのは互換性の崩れを極度に怖がったから。 だが勇者ブライトはそんな過ちを繰り返すことはなかったッ!
D/CLIまだかよ
個人的には流行らないことは使わない理由にならないなぁ。 だっておもしろいんだもの、D。
pureの最適化がさりげなくいい感じだ 再帰呼び出しを恐れず書ける
自動メモ化されるの?
888 :
デフォルトの名無しさん :2009/02/05(木) 19:15:37
いやいや・・・
890 :
デフォルトの名無しさん :2009/02/06(金) 02:50:12
>>887 少なくとも末尾最適化はされているっぽい
Mono叩けないのかな WindowsFormsとか使えれば流行る気がする
C#でいいじゃん
C#ユーザーとか取り込めばDユーザー増えるかな?
.NET Frameworkのクラスライブラリを全部実装できたら流行るよ
>>891 pureじゃなくても末尾最適化はできるんじゃないの
Mono たたいた瞬間、 ランタイムの不要なバイナリをはくという利点が消えるな Win7 の登場で、利点がべつにどうでもよくなりつつあるけどな。
リフレクション経由で.NET叩くのは簡単なんだが、パフォーマンスが微妙だわ
うぉるたん、もうちょっと営業センスあるといいんだけどねぇw
ドットネットのライブラリ使えてネイティブ吐き出すとかはどうよ? うけると思うぜ? 誰がつくってw
>>896 単にコンパイラに読みやすいか否かなのかも知れんが、
10^10回くらい再帰する関数にpureつけるかつけないかでコンパイル時間が相当変わる
>>900 LLVMとかぶるんじゃないかなあ
コンパイル時定数化が効ないようにすると void main() { Random r; long n = r.next*1000000000L; auto perf = new PerformanceCounter; perf.start; recursion(n); perf.stop; writeln(perf.milliseconds); } long recursion(long n) pure { if(n==0) return 1; else return recursion(n-1)+n; } // pureなし → Stack Overflow // pureあり → 0 (milliseconds)
返値保存してないから、(副作用無いのは保証されてるので)最適化でコードまるまる削除されてるだけとかではないの?
pureは戻り値つかってないと削除されるよ
>>901 んー、コンパイル時間が変わるってのはCTFEしようとしてるんじゃないか。
末尾再帰最適化に時間はかからないはずだが
>>903-904 覗いて見たらコード丸々削除でしたorz
>>905 定数ぶっ込むとpure付きなら問題ないが、なしだとdmdが終わりません。
が、上記アレなんで……
>>902 のrecursionは末尾再帰してない気もするしな
const private { invariant protected { private { protected { static public { export { static { invariant { const { nothrow pure auto a="(;´Д`)"; } } } } } } } } } 自分でも何したかったのか分からん
よく頭悪いって言われない?
GCが動かなくて困ってる。 試しに下を動かすと"Error: Out Of Memory"を吐いて落ちる。 int main(char[][] args) { for (int i = 0; i < 32; i++) { a(); } return 0; } void a() { new char[96 * 1024 * 1024]; } gdc 0.24 mingw なんだけど、何かGC動かすための条件とかある? 何か勘違いしてるのかな・・・
明示的にGC動かすならGC.collect()とかdelete式 暗黙的に行われるメモリ回収はいつ行われるのか予測不可 その暗黙的にメモリ回収を行わせる条件の話をしてたならスマソ判らん
912 :
910 :2009/02/07(土) 21:33:00
>>911 forの中にstd.gc.fullCollect()を入れてみても結果は変わらず。
deleteはOKだったが、GCを使う旨味が・・・
といわけで、暗黙的にメモリ回収を行わせる条件が知りたいんですけど、
GC周りのソースを読んで調べるしかないですかね・・・
void a()で1KBくらいnewさせて無限ループさせたらちゃんと使用メモリ量はある一定から上がらないんだよな サイズの問題とか?newした回数とか?よくわからんな
new するサイズを変更すれば サイズか回数か分かるんでない?
普通に考えれば new やらなんやら D 内で GC に紐付けされた 要素 が実行されたとき freelist更新 → free して一回の呼び出しで free に到達するかどうかは 運次第
>>912 >deleteはOKだったが、GCを使う旨味が・・・
逆に考えるんだ。こういう困った場面で小手先の対処(delete)が可能なのがDなんだと。
917 :
910 :2009/02/08(日) 01:13:23
実験してみた。
int main(char[][] args)
{
for (int i = 0; i < 5; i++) a();
for (int i = 0; ; i++) b();
return 0;
}
void a() { new char[1 * 1024 * 1024]; }
void b() { new char[1 * 1024 * 1024]; }
a():new char[1 * 1024 * 1024]
b():new char[1 * 1024 * 1024] で、メモリ4,600K以上上昇せず。
a():new char[96 * 1024 * 1024]
b():new char[1 * 1024 * 1024] で、753,364K。
a():new char[96 * 1024 * 1024]
b():new char[24 * 1024 * 1024] で、788,424K。
a():new char[96 * 1024 * 1024]
b():new char[25 * 1024 * 1024] で、Out Of Memoryで落ちる。落ちる直前で1,300,000Kくらいまでいってた。
よくわからないが、サイズが問題なのかな?24MBがボーダーライン?
>>916 とりあえず、そう考えてdelete使います・・・。
>>917 std.utf か std.uni かなんかの使ってるマジックナンバーが
24MBおきくらいの値を漏れなくとってるので、
それが偽ポインタとみなされて、ある程度以上でかい配列は
全て常にグローバルから参照されてる扱いになっちゃってるとか
そんな問題が昔あったので今もあるのかも
D言語がこの先生きのこるには
D言語学校の先生キノコるには
ライブラリとキラーアプリケーションじゃね
ウシロを顧みず爆進するsyntax改良だとおもう。
923 :
910 :2009/02/08(日) 11:21:56
>>918 なるほど。そういう問題があったのですか。
ちょっと調べてみます。
ユビキタス社会が注目されている昨今の状況から、組み込みに目を向けたらいいと思う
うぉるたんが作るのやめたときが死ぬときでしょ。 発展させるには、ってことか。
をるたん以外の人はコンパイラ作ってんの?
>>926 泣きながらPhobos作ってんじゃね?
高校在学の頃からD言語の完成を待ち続け今や20代半ば
ホントだ、自分もD言語触り続けてもう5年くらいになる。
三十路突入、、、
D言語の代わりになる処理系がありません。
Phobosで良い感じの xhtmlParser ご存知の方いらっしゃいます? std.xmlだと上手くいかなくて・・・
>>933 それだとDユーザーっぽくないな。自分で作れ、じゃなかろうか?
PhobosだのTangoだのを参考にすればそこまで労せず作れる気がする。
やはり無いですか・・・ 色んなパーサ読みながら、解決方法考えてみます。 ありがとうございました。
D.netになればライブラリの心配はしなくて済むのか…
そんなD使いたくないな
tinyxmlは?
phobosのコミット権が欲しいのは俺だけじゃないよね
Visual Dまだー?
そんなD使いたくないな
なんで使いたくないのかkwsk 簡単なのはいいことだと思うが
ネイティブコード吐いてくれるのがDの旨みの1つだから 開発するのに .NET/Mono なんて大層なモノ使いたくないから マゾだから けど確かにライブラリの豊富さだったり、 GCの実装具合とかで羨ましくもなる。
.NETならC#と同じ土俵での勝負になっちゃうからなw
あえてC#と同じ土壌でも戦うことでD言語はより強力になっていくと思う。 ネイティブコード吐くの捨てなきゃ歓迎。
VisualStudioで開発できなきゃ永久にC++以下の生産性
Dは言語が生まれるさまをヲチするための言語です
そして伝説のIDE誕生の瞬間に立ち会えるのがD
つーかインテリセンス使わない生活にはもう慣れてしまった。 書くのが速くなっても生産性があがるわけじゃないからなぁ・・・。
953 :
デフォルトの名無しさん :2009/02/10(火) 04:59:34
正直、D言語はここまで中途半端な存在に成るとは思わなかった Java,C#のVMの出来が良くなって来た事が原因だと思うけど、 MicroSoftを始めIDEベンダーはガン無視じゃん、酷すぎる。勉強した時間を返せ
956 :
デフォルトの名無しさん :2009/02/10(火) 15:32:22
>>952 インテリセンスがあればメンバ調べたりする手間省けるだけ効率はあがるw
Dユーザーって 言語いじること自体が好きなタイプ C#使ってるがちょっと背伸びしてみたいタイプ の2つにわかれるのかな? で、もっともターゲットにしたいC/C++ユーザからはしかとw
>>955 若いっても出てから4〜5年ぐらいたってなかったか?
まだ小学校にも入学してないじゃないか
このままだとをるたんのオナヌー言語で終わっていまいそw
>>957 GCがあって、お気軽に使えてコンパイルの速いC++みたいなのがあったらいいな〜
ってC++使いもいると思う。
そして何度も「ちくしょう、まだ早すぎたんだ!」を繰り返しながら、
夢を見続けると。
C++=AT&T Java=Sun C#=MS D=DigitalMars まあ無理だろ こうなるのは目に見えてた
MS辺りが拾ってくれたらいいんだけども、 ウォルタンは孤高の道を行くから・・・
単独で使ってこそ意味がある言語だよな どう考えてもC#と違って.NETみたいなクロスランゲージな世界には向いてない
逆に言えば他の言語(C以外)との連携は苦手なのがD
ヘタすりゃ最後のネイティブマンセー言語かも
>>957 >言語いじること自体が好きなタイプ
言語オタクが実験を繰り返すだけで
実用的なアプリを誰も作らないから流行らないんだよな
D言語とかハスケルとか
Haskellはまあ、そういう言語じゃん Dは一応実用重視を謳ってるのにこれじゃあ…
>>963 MSよりはGoogleに拾って欲しいな
Native Clientもあるし、C++使いばっかりだから
中の人との相性も悪くないと思う
D製のアプリっていりす症候群しか知らない
後は芝生やすゲームとか、ABAさん所のゲームとか ゲームばっかだよねこの言語
普通のアプリ探してて D で書かれてたの見つけたのは rulesPlayer だけだな
webはRubyとかでいいし 業務アプリは.netでいいし
やっぱりDは、破壊的変更にゾクゾクする為の言語なんだね
M言語とかに名前変えたらいいのにな
言語自体はSだからS言語でいいよ
じゃMSはどうなんだ?
誰かがD言語と呼ばなければ、MARS (M And Reacted S)という名称になっていたのに。
.netに依存しないところがDの美点。
>979 流れの中でキレイなオチをつけたなww
982 :
デフォルトの名無しさん :2009/02/11(水) 09:27:48
おまんこハンドル=おまんこオープン(若菜 書き込み)
D言語が駄目だというよりも いつまでもC++にしがみついてる奴等がムカつく 特にゲ製作技術板なんてC++の話ばっかで全然ゲ製作技術を話してない
もう、プロトタイプ宣言が必要な言語には戻れないっす
CとC++だけか
D elphiもだお もっとも自動的に挿入してくれるからあんまり意識しないけど
たのむから64ビットねいちぶなのを・・・
>>972 テキスト処理が強力だから手元用で便利に使っているのだが、
公開するほどでもないし、ちょい用途ではスクリプト言語に適したものがあるしねえ。
という意味でDがそれなりに活躍できる用途は高負荷なウェブサーバ関連処理だと思う。
個人的には1からPHPで書くくらいだったら、
DにCGI / FastCGI用のインターフェースでも書くかなと。
C++でいうところのメンバ関数ポインタが欲しいんだけど、 メンバメソッドに&つけるとデリゲートがかえって来ちゃう。 どうすればいいの?
>>989 &typeof(obj).member ?
staticメンバ関数なら&で取れるんじゃない?
いや、staticだとメンバ関数にする意味がないんだけど…
オブジェクトと引数を渡すと適切なメソッドに引数を渡す関数 を自動生成するテンプレート関数なら作れそう
>>989 D言語仕様の知識としてでしか知らんから役に立たないものかも知れんが
>デリゲートの .funcptr プロパティは、 function型で関数ポインタの値を返します
てか1000近いな
>>989 auto fp = &MyClass.func;
void delegate() dg;
dg.funcptr = fp;
dg.ptr = cast(void*)obj;
タイプセーフじゃないのでもう少しましな方法がある気がする
せめて 「仮想関数で動くかどうか心配でしたがその方法でうまく行きました」とか 「仮想関数では○○という結果になりました」とかさあ…
スペック読んで疑問に思ったから質問しただけで まだコンパイラすらダウンロードしてないです^^;
バイナリげろスレってまだあったんだ(笑
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。