D言語 Part34©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
でかいJPEGファイルをロードしたくらいで引っかかる上に 外部ライブラリを使ってるから回避できなくてとても困る やはり時代は@nogcか… いい加減、64bit環境を構築するかー さんくす! 一応 delete で、不要と教えてあげれば落ちないけど GCの意味ないなあとか思っていじってました GC「要らないならいうてやー」 10-20MB以上のデカいブロックだけmalloc/freeするのがいい GCに預けたやつを中途半端に手出しするのもあんまり GCの方がトータルで速いと主張してたのはなんだったんや・・・ つか、GC無しが有り環境に移行するのはまだしも、有りだったのが無しに移行するのって辛いよな D言語からC言語のヘッダファイルを読み込むにはどうしたらよいですか? 具体的にはwindows.hとかを読み込みたいです。 DirectXとかも使いたいのでC++用のCOMのヘッダも読み込みたいです。 D言語はライブラリが少ないし、 マイナー言語なので、ライブラリ提供者から公式なサポートが無いです。 そのため、C/C++用のライブラリをそのまま流用して使いたいです。 ヘッダファイルには、C/C++用のマクロなども定義してあるので、 D言語はC/C++の全機能をサポートする必要があります。 このために、DとC/C++を切り替えるスイッチが必要で、( 例えば extern C++{ } ) 私が知りたいのはこの機能です。 原則: ・C/C++のヘッダを直接読むことはできず変換が必要 ・DMDでWin32アプリを作る場合に限り、C/C++ののライブラリの変換も必要 大抵のライブラリはすでに変換済みのが用意されてるのでそれを使うだけ Win32API -> http://www.dsource.org/projects/bindings/wiki/WindowsApi/ ゲーム用とかなら github/DerelictOrg が充実してる いちおう公式のバインディング集 使ったことないからどのくらいあてになるかは知らない https://github.com/D-Programming-Deimos wxDを使えている人に質問です。windows上でmingwからwxDをコンパイルしようとすると、wxWidgetsのコンパイルまでは成功したのですが 、wxDのコンパイルで以下のようなエラーがでます。 export PATH=/e/D/dmd2/windows/bin:/e/D/dm/bin:$PATH export WXDIR=/e/D/wxWidgets-2.8.12 make dmc -D__DMD__ -mn -g -o+none -D____ -D__WXDEBUG__ -Ie:/D/wxWidgets-2.8.12\inclu de -Ie:/D/wxWidgets-2.8.12\lib\dmc_lib\mswd -w- -I. -WA -DNOPCH -HP90 -Ar -Ae -HP99 -c -oaccel.obj accel.cpp virtual ~name() \ ^ local_events.h(49) : Error: storage class is illegal in this context { \ ^ local_events.h(50) : Error: illegal constructor or destructor or invariant decla ration ProcessEvent(e); \ ^ local_events.h(52) : Error: undefined identifier 'ProcessEvent' } ^ local_events.h(53) : Warning 18: implied return of name at closing '}' does not return value void RegisterDispose(Virtual_Dispose onDispose) { m_onDispose = onDispose; } \ ^ local_events.h(67) : Error: undefined identifier 'm_onDispose', did you mean 'on Dispose'? virtual ~name() { m_onDispose(this); } \ ^ local_events.h(68) : Error: storage class is illegal in this context Fatal error: too many errors --- errorlevel 1 --- errorlevel 1 --- errorlevel 1 dmd 2.067.0, dmd 2.054 wxWidgets-2.8.12 wxd 0.16 dmd 2.067.0, 2.054どちらでもエラー内容は同じでした。何が問題なのでしょうか? 久しぶりにさわったらUFCSとかrangeとかイケてるやん、書いてて気持ちえ〜わ〜 replaceはstringとregexで被ってるのか http://www.kmonos.net/alang/d/overview.html >非仮想メンバ関数。C++では、関数がvirtualになるかどうかは クラスの設計者が前もって決定します。 >メンバ関数をオーバーライドすることにしたのに、基底クラスの方で改造を忘れる… というのは、 >よくある(けれども非常に見つけにくい)コーディングミスです。 >全てのメンバはvirtualにしておき、 オーバーライドが存在しないことをコンパイラが検知して非 virtual に変える、 >というアプローチの方が信頼性があります。 と書いてありますが、実際にどこまでそんな最適化が機能しますかね。 ローカルスコープでnewされたオブジェクトなら簡単に検地できますが、 メソッドの引数で渡されたオブジェクトや、 メンバ変数で保持しているオブジェクトに対して、 オーバーライドが存在しないことを、どこまで検地できるものなのでしょうか。 D言語はモジュール単位でコンパイルするので、 自分のモジュール以外で何が行われるかわからないのでは? 詳しくないのでさっぱりなのだがこっちにも http://www.kmonos.net/alang/d/function.html#virtual-functions >コード生成時にDはクラス階層を全て把握していますので、 >オーバーライドされていない関数への呼び出しは全て最適化されて non-virtual になります。 って自信満々に書いてあるね。 で、なんかそんな話題どっかでみたなあと思って探してみたが http://hibari.2ch.net/test/read.cgi/tech/1293500945/300-303 別に結論出てなかった。 まあ「finalつけると速くなる」なら(今でも同じかは確認してないが) 可能であろうと、少なくとも真面目に実装はしてないんだろうね。 virtual がキーワードとして追加された後しばらくして撤回されたのが最近の出来事 dmdしか使ってない俺にもdmdが最善ではなさそうなことはわかる コンパイルが最速でプロファイルもカバレッジもちゃんと動くdmdが最善でないとな? win32/simd とか win64/seh とか足りないのはあるけど dmdのsimdってまだSSE2までしか対応してないのけ? ポストC++を目指してるんだけど C++自体が使われてないから 俺が思うに、Cとソースレベルの互換を切ったのが不味かったな。 Cのヘッダが読み込めないんじゃ、生産性悪すぎ。 Cのライブラリを使おうと思っても、誰かがこっそりDに移植したのを使うしかない。 そんな怪しげなものは企業じゃ使いにくいわな。 でもプリプロセッサみたいなXXXXXXなもの積んだら元の木阿弥だしなあ C言語にはマクロがあるから難しいだろうね。 マクロとインライン関数とじゃ微妙に動作が違うし。 それを再現するのは難しいし、再現したらしたでDの人たちが怒る 他の言語に比べりゃマシ。 普通はC側からもグルーコードを書かないといけない。 ライブラリ側の改造なしで普通にリンクできるってのは大きいなあ でも、CのライブラリはC++からだと何の改造もなく普通に読み込めるし、 殆どのライブラリはC++から使われること「も」想定して書いてあるし。 ライブラリの公式なサポートがあるってのも大きいかと。 Dの宿敵は完全にC++なわけで、ここからシェア奪うの厳しくね? しかも最近のC++はやたら高性能になってて、Dが圧倒的に優位といえるのは、 GCが有ることぐらいか。しかしDのGCは完全じゃないので、実際には開放できる領域を 見逃すことがあるらしい。>>125-127 しかもメモリを使えば使うほど、切迫していればいるほど、誤認の確率が高くなる。 本当にGCが必要な時ほど、GCが上手く動かなくなるという・・・。これはなんかおかしい。 まー一生C++使ってろって言われそうだが。 京大院卒の元日立社員ですらrust,go,nimとやってきたがDは目次で投げ出すほど難しいらしい 仕様書であるTDPLを入門書と間違えて買ったんだろうな Visual D使ってる人に質問です。 Visual Dって標準ライブラリの予測変換でないんですか? どうせ出てほしい時に出なくて 必要ないときに邪魔なポップアップが出るみたいな お粗末なものにしかならないべ 言語設計レベルからそこまで考慮してないと C#はforeach使うとGCが増えるらしいけど Dはどうなの? Dってどこで学んだらいいんだ dlang.orgしかない? https://gist.github.com/repeatedly/2470712 ここ読んで文法身につけて、 標準ライブラリは公式がそこそこわかりやすいからそれで。 (日本語訳はちょっと古いが、参考には十分なる) んで、わからないことはここか、 最近はtwitterで#dlangのハッシュタグつけて質問するのも流行り。 自分も去年一度質問投げたら、一時間で三人から同じ解答来て震えた。 >>164 ありがとうございました。なんか出てきました。 以前にC++とねんごろになれるうpあったとか見た気がしたけど、あれは幻覚だったのかこの流れ見ると namespaceに対応したり、C++側でインスタンス化されたテンプレートがDから使えるようになったんじゃなかったっけ? C++ヘッダを直接import出来るようにするDコンパイラも開発されてるけど結構実用的ぽい https://github.com/Syniurge/Calypso/blob/master/tests/calypso/libstdc++/vector/vector.d >C++ヘッダを直接import出来るようにするDコンパイラも開発されてるけど結構実用的ぽい あ、それいいね。てかそれしないと普及しないでしょ。互換性は大事。 COMとかもそもまま使えるようになるんかね。 ☆ 日本の核武装は絶対に必須ですわ。☆ http://www.soumu.go.jp/senkyo/kokumin_touhyou/index.html ☆ 日本国民の皆様方、2016年7月の『第24回 参議院選挙』で、改憲の参議院議員が 3分の2以上を超えると日本国憲法の改正です。皆様方、必ず投票に自ら足を運んでください。 私たちの日本国憲法を絶対に改正しましょう。☆ dsource.org もいよいよ廃止に向かう模様 使ってる人ほとんどいないだろうけど ちなみに移住先は?最近D使ってないんでよくわからんけど この言語 親クラスのprivate変数に継承先のクラスがアクセスできるじゃん 継承先のクラスが同一ファイル内にないか? 同一ファイル内のメンバは常にpublicだぜ まじかよ酷いな ファイル=モジュールだからファイル分けるの面倒くさい 同一ファイル内にあるものは自動的にfriendだと思えばC++より便利だな D2はまだ使用が固まってないからとうぶんの間は開発にはD1を使うことになるな 1のことは忘れるんだ……。 2も最近は破壊的変更が少ないし、 どうしても仕様が固まってるものを求めてるなら別の言語のほうがいいよ。 少なくともD1を使っていいことは一つもないと思う。 D1かC++かならまじでC++使えばいいと思うよ 雰囲気っていうか、まあ確かにC++使うならここで宣言する必要はないと思うけど 意外なことにrustの方が言語とAPI仕様の安定化に積極的っぽい 明確なゴールもなくフワフワと手を広げるから収束しないんだよ effectivec++読んだ時点でc++を見限らない奴はセンス無い >>186 それここ1ヶ月くらいのことじゃね? まあでもそういう姿勢を公式に明確にするのはいいことだ PCがオワコンになって一般人はスマホやアップルウォッチしかコンピューターを持たない時代が来るのに Dを始めとするPCアプリ専用言語に未来はあるのか >>190 そもそも、一般人はプログラミングしていない。 >>192 Goで泥アプリ開発できるようになったし、PCから移行するにつれいろんな言語が泥とかアフォン とかでも使えるようになる。 という妄想 Tcpを用いたサーバーアプリケーションを作成しています。 一つのSocketを処理するスレッドをspawnで起動しようとしたのですが、 "Aliases to mutable thread-local data not allowed." というエラーが出てしまいます。 Socketをスレッドのコンテキストとして渡す方法はありますか? enumのメンバの中からランダムに1つ取り出すにはどう書いたらいいですか? import std.stdio, std.traits, std.random; enum E { Hard, Normal, Easy, } auto lv = [ EnumMembers!E ]; lv[ uniform(0, 3) ].writeln(); >>197 ありがとうございます。 std.traitsにenumのメンバの配列を作る機能があったんですね。 あ、配列なんだからuniform(0, $)でよかった…。 タプルの配列化?みたいな 他にも関数の引数リストとか、構造体のメンバ変数を タプルでとれたり、std.traitsは結構楽しい メンバにUDAを付加するだけで 文字列化やシリアライズのメソッドが自動or暗黙生成されるような いい感じの小技はないかしら static ifと文字列mixinを駆使すればなんでもできそう コードはくっそ汚くなるけど…というかいくらなんでも汚すぎるので俺がなにか勘違いしてる class Cls { @getset(true, true) private string prop; mixin Prop!(__traits(allMembers, typeof(this))); } struct getset { bool get, set; this (bool get, bool set) { this.get = get; this.set = set; } } mixin template Prop(Members...) { static if (Members.length) { mixin("alias Alias = " ~ Members[0] ~ ";"); static if (is(typeof(__traits(getAttributes, Alias)[0])==getset)) { static if (__traits(getAttributes, Alias)[0].get) { mixin("auto get_" ~ Members[0] ~ "() { return " ~ Members[0] ~ "; }"); } static if (__traits(getAttributes, Alias)[0].set) { mixin("void set_" ~ Members[0] ~ "(" ~ typeof(Alias).stringof ~ " value) { " ~ Members[0] ~ " = value; }"); } } mixin Prop!(Members[1..$]); } } void main() { import std.stdio; auto cls = new Cls; cls.set_prop("getset"); writeln(cls.get_prop()); // write "getset" } これいいなあ それにしてもstatic foreachが欲しい… >>190 そんなのは日本だけだぞ 海外ではPCとモバイルを使い分けるのが普通 DmInst ver.0.0を公開しました。 コンパイラーのDMCとDMDを簡単にインストールできるプログラムです。 http://katahiromz.web.fc2.com/dminst/ AliasSeq を Alias Equal と読み間違ってしまうマン >>212 がgithub版でもおきるかなー?と思ったんだけど、github版dmdをコンパイル中にエラーが出た。 内容は、「ソースに\r\nが含まれますよ」というもの。 出してるのは、dmd -run src/checkwhitespace.d の部分。 このツールは 1. \r\n がソースに含まれている場合。 2. インデントに\tを使っている場合。 3. 行末に不要な空白文字がある場合。 にエラーを出すようなんだけど、3はともかく、これで行くことに決まったのかな。 smart-tab派なんだけどなー。 あ、github版でも212は再現しました。 おまいらこれはなんでなんだぜ http://dpaste.dzfl.pl/7fa1a12a8c4a 1. enum をクラスインスタンスで初期化できない→わかる。構造体でラップすると通る→? 2. 1. において、ラップされたクラスが mutable。 This Week in D (英語) http://arsdnet.net/this-week-in-d/ 年初から続いてて筆者はDの入門書出版したりしてる 2.068.2 出てた ちなみに Win32-COFF が隠しオプション(-m32mscoff)で出来るようになってるので OMF/optlink がイケてないと思っていた諸兄は試してみるがよいよいよい int arr[x][y][z]; これと同じメモリレイアウトでヒープに確保するにはどうすればいいですか? new int[x*y*z]でよかった。 問題なのはint[]のメモリへのアクセスをint[x][y][z]と同じようにする方法だった。 自己解決。 [0][0][0],[0][0][1]...[0][1][0],[0][1][1]...の順番で並んでるだけだった。 くっそ! ↓Manifest ConstantsのenumとAAのからみがおかしい。 http://dpaste.dzfl.pl/36ab529d6fc5c ↓CTFEで変数を修飾する方のscope class使うと abnormal termination http://dpaste.dzfl.pl/8ad7e24e5d05 const class A { int a; this(int v) { a = v; } } このクラスAを値に持つ連想配列を作りたいんだけど、 const(A)[int] hoge = [1: new const A(1)]; hoge[3] = new const A(3); // cannot modify const expression hoge[3] みたいに、初期化はできても代入ができない。 A[int] hoge = cast(A[int])[1: new const A(1), 2: new const A(2)]; hoge[3] = cast(A)new const A(3); てなふうにcastしたら回避できたけど、なんか美しくない。 typeof(new const A(1)).stringof == "const(A)" なのがおかしい気がするんだが。 書き込んでから思い出したけど、Rebindableとかできて結構経つしあきらめるしかない気がしてきた。 >>218 optlink死んでまうん? const classとかscope classとかは今もまともに使おうと思えないね 普通のclass内でメンバをconstにするとかじゃないとまともに動く気しない nullではなく、空の連想配列で初期化するにはどうすればよいですか? 空の配列 == null なので無理 ただし空文字列 "" は例外 落とし穴になりがちなので注意 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる