◎正当な理由による書き込みの削除について: 生島英之 とみられる方へ:D言語 Part34©2ch.net YouTube動画>3本 ->画像>2枚
動画、画像抽出 ||
この掲示板へ
類似スレ
掲示板一覧 人気スレ 動画人気順
このスレへの固定リンク: http://5chb.net/r/tech/1422155249/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。
ノ ゚.ノヽ , /} ... ,,イ`" 、-' `;_' ' ..::::::::::::::... ,-、 _.._ ( (,(~ヽ'~ ..::::::::::::::::::::::: )'~ レー' 〉 ヽ i`'} .::::::::::::::::::::::: ~つ '-ー、 i | i' ...::::::::::::::::::::::: / < / 。/ ! ......::::::::::::::::::::::::: これは>>1 乙じゃなくて / ~^´ /},-'' ,●:::::::::::::::::::::::::::::::::::: i、 ,i' _,,...,-‐-、/ i :::::::: .::::::::::::: ..ゝ <,,-==、 ,,-,/ .::::::::::: 放射能がうんたら ) {~''~>`v-''`ー゙`'~ ..::::::::: ........::. { レ_ノ ..::::::::. ......::::::::: ノ '' ..::::::: ...::.:...::::::::: .::::::::: ...:......:::::::::::: . .:::::::::::. ..... .. ..:::::::::::::::::::::::: :::. ::::::::::::::::.::::::....:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.. :: ::.. .:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::: ::. ::::::::::::::::: :::::::::::::::::::::::::::::: ::::: .:: ::. ::: 最新verにしたらgl3nってライブラリがコンパイル通らなくなった 破壊的変更入れる方も糞だが 製作者もカッコつけて変な機能使わずに、betterC程度で実装すべき
>>4 DMD2.064以降が必要っぽいね
エラー箇所を見てみたが、破壊的変更というよりコンパイラのバグだなコレ
破壊的変更は一般的に前方互換性を壊すことであって……
直そうかと思ったけどgl3nってGNU make使えないのかまじかよ makeコマンドまで専用に置き換えることないだろJK・・・
>>11 普通に使えるんだが……
バージョンの問題なのかな? 少なくともGNU make 4.0ではコンパイルできる
何かDの公式サイトがちょっとモダンになってるなw …で、日本語版はいつまで放置状態なんですかね
言語の方はPRでなんとかなるけどライブラリの方はどうにも手が出せんな 翻訳元がどのバージョンかもわからん ソース一本一本バラバラで頭痛くなった
2.067のchangelog はもう上がってるんだなw
http://dlang.org/changelog.html 本体はよ
ベータテストをサボってない? 2.067.0-b1とか、changelogにある変更点は一つも入ってない時のバージョンじゃないか こりゃregression地獄だろうな
まだβテスト始まってない 2.067.0-b1はアルファ版だけど担当者不在の状態でベータとして公開された 手違いか確信犯かは知らない
異常な早さで出てたもんなb1 2.066と同じくらいの時期に出たんじゃなかった?
D言語初心者なんですが教えて下さい
<プログラミング言語D 日本語版>の12Pに出てくる、テキストに含まれる
単語ごとに出現回数を数えるプログラムを打ち込んでみてるのですが、
ソース上どこにもテキストファイルを読み込むような箇所が無いような気が
するのですが、その部分は自分で実装しろって事なんですかね?
http://ideone.com/nqOOCq 標準入力からテキストをもらうコードになってるよ。 a.exe < text.txt
stdinが標準入力 byLineが一行ずつ取り出し
derelict3使ってらっしゃる方いますか・・?
ソースをダウンロードしてコンパイルまでは問題なくいったんですけど、
実行すると以下のようなエラーがでてしまいます。。
Building all packages.
Building DerelictPQ
../import/derelict/pq/functions.d
../import/derelict/pq/pq.d
../import/derelict/pq/types.d
dmd -lib -O -release -inline -property -w -wi -I"../import" -of"../lib/dmd/libDerelictPQ.a" "../import/derelict/pq/functions.d" "../import/derelict/pq/pq.d" "../import/derelict/pq/types.d"
/usr/src/phobos/std/stdio.d(975): Error: not a property fileno
/usr/src/phobos/std/bitmanip.d(1650): Error: not a property iota(this.dim()).filter!((i) => ptr[i])
/usr/src/phobos/std/bitmanip.d(1651): Error: not a property filter(iota(this.dim())).map!((i) => BitsSet!size_t(ptr[i], i * bitsPerSizeT))
対処法分かる方いらっしゃいますか??
バージョンはDMD64 D Compiler v2.066.1です。。
一応ぐぐってこういうページ(
https://github.com/repeatedly/xxhash-d/issues/1 )
とかは見つけてみて、
posix.makとかいうテキストファイルをあさって中みてみたけど、
サイトの人が答えてる箇所と同じ部分は見つからないし、
何がなんだかサッパリ!
詳しい説明を省略するとコンパイルオプションに-propertyがついてるのが悪い dmd -Isrc -m64 -w -d -property -O -release … から -property を削って dmd -Isrc -m64 -w -d -O -release … にすればコンパイル通るはず。-propertyで検索するといい
あとposix.makはlinuxとかで使うメイクファイルだろうから もしWindows使ってるなら直すべきはwin32.makとかかも
>>28 先輩さすがっす!!
もう自分一人じゃ万策尽きてました!!
linux使いなんですがposix.makはいじらなくても平気でした。
Direlict3を落とした時についてたbuild.dの中の-propertyを全2箇所、
仰せの通り削除したら普通に通りました。
もっと勉強が必要ですね。
今日はこれでやっと寝れます。どうも有難う御座いました。
Pythonに代わってDの時代、来ちゃったかー
http://postd.cc/d-for-the-win/ 枕詞はいいとして、srcgenのD版でのopIndexとopDollarの使い方が秀逸だわ
名前付き引数も実現できるんだな
凄い、と感動するけどハックっぽいのが… 言語機能として欲しいよね、名前付き引数 あと多返値
http://qiita.com/yasei_no_otoko/items/ae23b681a47d9a16f4c6 ↑ここに書かれてる方法に従って進め、ソースコードのビルドを試みたのですが、
以下のようなエラーが出ました。
libDerelictSDL2.a(sdl.o):(.rodata+0x20): `_D8derelict4util6loader12__ModuleInfoZ' に対する定義されていない参照です
libDerelictSDL2.a(sdl_71_698.o):(.data+0x40): `_D8derelict4util9exception17DerelictException7__ClassZ' に対する定義されていない参照です
libDerelictSDL2.a(sdl_71_698.o):(.data+0xb0): `_D8derelict4util6loader15SharedLibLoader7__ClassZ' に対する定義されていない参照です
libDerelictSDL2.a(sdl_71_698.o):(.rodata+0x4568): `_D8derelict4util6loader15SharedLibLoader4loadMFZv' に対する定義されていない参照です
libDerelictSDL2.a(sdl_71_698.o):(.rodata+0x4570): `_D8derelict4util6loader15SharedLibLoader4loadMFAyaZv' に対する定義されていない参照です
libDerelictSDL2.a(sdl_71_698.o):(.rodata+0x4578): `_D8derelict4util6loader15SharedLibLoader4loadMFAAyaZv' に対する定義されていない参照です
libDerelictSDL2.a(sdl_71_698.o):(.rodata+0x4580): `_D8derelict4util6loader15SharedLibLoader6unloadMFZv' に対する定義されていない参照です
libDerelictSDL2.a(sdl_71_698.o):(.rodata+0x4588): `_D8derelict4util6loader15SharedLibLoader8isLoadedMFNdZb' に対する定義されていない参照です
libDerelictSDL2.a(sdl_71_698.o):(.rodata+0x4598): `_D8derelict4util6loader15SharedLibLoader10loadSymbolMFAyaZPv' に対する定義されていない参照です
libDerelictSDL2.a(sdl_71_698.o):(.rodata+0x45a0): `_D8derelict4util6loader15SharedLibLoader3libMFNdZS8derelict4util9sharedlib9SharedLib' に対する定義されていない参照です
libDerelictSDL2.a(sdl_71_698.o):(.rodata+0x45a8): `_D8derelict4util6loader15SharedLibLoader8bindFuncMFPPvAyabZv' に対する定義されていない参照です
collect2: error: ld returned 1 exit status
--- errorlevel 1
ライブラリの配置等は書かれてる通りにやったと思うのですが・・・
どういう原因が考えられますか?
>>34 組み込みのタプルが欲しいってことでしょ
DIPがあったけど、どうなったんだろう
>>35 本当にそのページ通りにやってる? libDerelictUtil.aをコンパイラの引数に指定してないのでは
もしGNU/Linuxの利用者なら、さらに -L-ldl も必要
ところで、Derelict3はもうメンテナンスされてないのでDerelictOrgを使った方が良いかもしれない(dub必須だけど)
https://github.com/DerelictOrg DerelictOrgをラップしたゲーム製作用ライブラリもあって、用途によってはこちらを使うのが便利かも
https://github.com/d-gamedev-team/gfm http://wiki.dlang.org/DIP32 これのワクワク感はんぱないんだけど、あんま進展はしてないっぽいね。
>>36 私には誤りが2つありました。
サイトの通りにやったつもりでしたが、私はlinuxユーザ
としての仕様を理解していなかったようです。
ご指摘の通り-L-ldlをつけていませんでした。
しかしそれだけではできませんでした。
最初はページの順番で最後にdlをリンクして
dmd test.d -LlibDerelictUtil.a -LlibDerelictSDL2.a -L-ldl
このように記述しましたが、これでは先ほどのようなエラーがまた出てしまい、
dmd test.d -LlibDerelictSDL2.a -LlibDerelictUtil.a -L-ldl
このように順番を変えたらうまくいきました。
しかしderelict3にしてもそうですが、当然とはいえD言語+SDLでは
日本語ドキュメントがかなり少ないですね。
貼って頂いたサイトのライブラリもとても興味がわきますが、
英語頑張らないとダメですかね・・。
にしてもやっと最初の一歩が踏み出せました!
有難う御座いました!
struct Hoge { Hoge _hoge; } 構造体ってこんなこともできねーのか
>>40 構造体は値型でclassとかと違って常に実体があるから
_hogeの中の_hogeの中の_hogeの中の_hogeの中の_hogeの中の_hogeの中の…
みたいになる
struct Hoge { Hoge* _hoge; } なら可能なのかな
>>46 それはもちろんできる。
実際にstd.container.SListとかDListはそんな感じになってる。
(正確には内部のNodeが、だけど)
>>36 さんが貼ってくれたgfmを使おうとしたんですが、
その中に書いてあったサンプルプロジェクト
https://github.com/p0nce/aliasthis をdubでビルドを試みたんですが、
Error executing command build: Root package aliasthis contains reference to invalid package gfm:math
って言われて、
あれ?dubって足りないパッケージ自動でダウンロードしてくれるんじゃなかったっけ?って
思いつつも、仕方ないからdub.jsonから"dependencies"の項目全部消してimportファイルを手動で配置して
実行したら、今度はsource/aliasthis/colors.d(11): Error: module hsv is in file 'gfm/image/hsv.d' which cannot be read
と怒られた。
gfmの最新リポジトリ内のimageにはhsv.dがないが、ソースにはインポートされている。
こうなったらもうこのプログラムの実行は無理かな。
>>48 バージョン1.1.4が古すぎて、dubリポジトリから消えたのが原因
(最新30バージョンしかダウンロードできない)
dependenciesに書いてるバージョンのgfmを持ってくればいいよ
git clone (gfmのgitレポジトリ); git checkout v1.1.4してdub add-localするなり、手動でコンパイルするなり
wxDでポトペタで開発できる環境はまだ無かったり? そういう環境があればあっさり普及しそうなんだが
QMLバインディングがあるから、QtCreatorとやらでGUIを作れるんじゃないか 試したことないから知らないけど
ポトペタは実はあった DFLとDWTのコードが書けていた 遠い遠い昔の話だ
そもそもwxDが今や死んでるという… お願いですからwxDかQtDかのどっちかでいいから生き返ってください C++からのポーティングはやっぱ難しいのかな
QtDは最初よかったけどなんか根が深そうなエラーが散発的に出てきて辛くなったな 開発者の人もくじけてしまったんだろうか
ポトペタという単語、自分とは別の文化圏の香りがする……
QtD サポートのために traits 増やしたお というのを数年前に見て度肝を抜かれた だがそれでも時既に遅しだったのかもしれない
>>49 なるほど、確かに古いパッケージ見てみたら該当のソースがあった!
しかし今度はね。それだけじゃなくてね。std.loggerってのもないんだって・・w
Wikiでちょっと見た所、過去にあったimportファイルみたいなのだが、
今はstd.experimentalとやらに分類されてるようで、
それは標準添付ではなくて、リポジトリから持ってこないといけないみたい。
で、loggerというディレクトリに5つのソースファイルに分割されていた・・w
たった1年か2年前のソースをビルドするのがこんなにも大変とは、
D言語の破壊的成長力に、め・・目を見張るばかりだ!
互換性維持しない方向で成長するのは別に構わんけど 過去のリポジトリ消される(ライブラリ含めて)のはめっちゃ困る罠
こういうことがあるからあんまり流行らないんだろうなぁと思う
うーん・・ dub buildで急にエラーが出て何もできなくなった。 ソースとかまるで関係なく、どんなプロジェクトでも同じ文言を吐き出す ようになったのだが、、 dub build Error executing command build: Failed to invoke the compiler dmd to determine the build platform: { "compiler": "dmd", "frontendVersion": 2066, "compilerVendor": "Digital Mars D", "platform": [ "linux", "posix" ], "architecture": [ "x86_64" ], } Error: Error writing file '/tmp/dub_platform_probe.o' dub_platform_probe.d見ても原因がさっぱり分からない助けてくれ。
Dの破壊的変更はもっとマシになるべきだが対策することが出来る だが半生ライブラリはダメだ 滅ぶべき パッケージシステムは道を誤りし背教者どもの墓標
>>60 え、そっちもGitレポジトリでしょ? 過去の状態のを使えばいいのでは
(内容も変わってるかもしれないし)
>>61 dubレポジトリは個人がボランティアで運営してるっぽいから仕方ない
あそこはGithubからミラーしてるだけだから、どうしても古いバージョンが入手できないということはないしね
2015年前半に、D言語の宣伝・普及のための団体を作るとかいう計画を立ててるらしいけど
それ以前にこういうボランティア任せの部分をちゃんとしたサービスとして運営できる組織を作って欲しいなぁ
永遠の17歳でいればずっと輝いていられる そんなD言語
Swiftのポジジョンに収まっていれば安泰(?)だったかもなぁ
必要なのは D言語の入門・解説ではなく D言語とのつきあい方のガイドである
>>70 たしかにそうかも
自称ですら「2番めに学ぶ言語としていいよ!」とか言ってるし
1番目に学ぶべきはCかJavaかC# 2番目に学ぶべきはCかJavaかC#のまだやってないの 3番目に学ぶべきはJavaScriptかPythonかRuby
実際の状況を考えると、CとJavaとC#が選択肢に並ぶ場面ってそうそう無いよな
>>73 ありゃ相当古い記述なのであまり真に受けない方がいい
今は割と初心者向けのリソースがあるし(英語が読めない人間には無いも当然だけど)
D言語はまだ英語無しで学べる言語じゃない まあレファレンス読むよりソース読んだ方が手っ取り早いかもしれないけど (でもソースがレファレンスの代わりになるってunittestのおかげだよね)
お前らが「最近のD言語は安定しててつまらない」って言い始めたら本気出す
本当に安定しててつまらないよ、細々とした調整ばかり 今年はDIP69含めて大幅な変更に期待
RoRみたいなキラーフレームワークの登場が最優先だろ 変更ばっかじゃいつまでたっても出てこねえんだよお
まさにRubyも仕様変更の多い言語なわけだし、あまり関係なさそう キラーなんたらが出る以前に、それなりに人気が無いと始まらん
RubyやPythonと違ってネイティブ吐けるところがメリットだけど Pythonで間に合ってます
PythonとDの両方が、同時に選択肢に入ってくる状況なんてあまり無さそうだがな
>>81 ライブラリが充実して実用的に使えるバージョンがない
複数組み合わせて使うとたちまち破綻する
比べる土俵が間違ってる
バージョンが変わって動かないなら自分で直せばいいじゃない
他の言語に比べて、D言語でしかできない or ものすごくやりやすい ことってなによ?
自分がそうだけど継ぎはぎだらけのC++の汚さに絶望した人がやってるんだと思う スマートなコーディングができるのにアセンブリコードが出力されるから Javaやスクリプト系のように速度で妥協することもない
C++で同じことできるって言われても意味ないんだよねえ。 単なる見せかけの機能だけに釣られてる奴はC++やってた方がいい。
ちょっと理解できてないのかな C++よりスマートなコーディングができることに魅力を感じてるって話なんだけど
>>87 >>89 たとえば?
C++ も 11, 14 で多少はマシになったと思うんだけど、
どの辺りが問題で、D言語ならどういうふうにスマートに書けるんだろう?
>ライブラリが充実して実用的に使えるバージョンがない ?
テンプレート絡みだけでかなり差別化できてるんじゃね あと今更イテレータとか触りたくないよね
C++の偉い人もタイムマシン手に入れたら何したいって聞かれて C++のテンプレート周りの構文をD言語風にしたいって言ってたな
D言語は気持ちよくプログラミングできるんだ 俺にとってのD使う理由はそれで十分
C++は気持ち悪いからな 関数ポインタとデリゲードが別物であった時点で俺の中では終わった。
>>97 C++で統一できるなら、std::function<...> で統一すれば済む問題だろ?
DのデリゲードはCの関数ポインタに変換できるのか? 既存のC製ライブラリを使うときはどうするんだ?
>DのデリゲートはCの関数ポインタに変換できるのか? Dにも普通の関数ポインタがあるので、そちらを使う まあデリゲートでも(cast(void function())dg.funcptr)とか出来る、もちろんキャプチャした変数は使えなくなるけど
訂正:dg.funcptrは既に関数ポインタなのでキャストは不要 当たり前だな、何を勘違いしてたんだろう
キャプチャなんてもんがある辞典でC++は消滅すべき
>>100 C++もキャプチャ変数が無ければC関数ポインタとして渡せるから、似たようなものだね。
つまり
>>97 は単に無知だったということだな。
>>102 も言葉通りだとナンセンスだが、「キャプチャ変数を明示する必要がある」という意味なら一理ある。
キャプチャ自体はなるほど、と思ったけど キャプチャ周りの書式はもうちょっとどうにかならんかったかなと思う 初見のときはあまりの違和感に頭がしばらくぐよんぐよんした
https://issues.dlang.org/show_bug.cgi?id=14213 S氏のバグ報告、これってProxyにtoHash付いたのが原因か
getHash(cast(const void*)a)としてるけど、delegateをconst void*にキャストするのがdeprecatedになった
constなdelegateとかにいまだに違和感がある
2.067マダァ-? (・∀・ )っ/凵⌒☆チンチン
まだ RC も出てないよ 後1,2回ベータが出てからその後のはず
vibe.dの問題が解決できるまで2.067のリリースを遅らせるようだ
D言語わくわく http://next 2ch.net/tech/1425486862 ↑ ツメル フォーラム見てるとWalterとAndreiに対してヘイトが溜まるなぁ なんだこいつら
別に横暴って訳じゃないけど、なんか他人を見下してる風なんだよな 自分たちと違う意見を持つ人間ってだけで馬鹿にするような返答や皮肉を繰り返してた時はちょっと引いた 特にWalterは何かにつけて「30年間プログラマをやってきた経験」とやらで他人の意見を蹴ったり、一方で都合が悪くなると返事しないので腹立つ
>自分たちと違う意見を持つ人間ってだけで馬鹿にするような返答や皮肉を繰り返してた時はちょっと引いた あるある こういう態度からは何も生まれない
FacebookがD言語を開発してるみたいな誤解を与えられたの、AAの目論見通りなのかな 実際はちょいと金貰っただけだし、業務ではほぼ使われてないとAAも言ってたし
以前ここで見た気がするけど dmd2.067(win32)でも、windows8.1 64bitで 以下が落ちる --- size_t count; scope(failure) count.writeln; foreach (_; 0 .. 100) { count++; new byte[100_000_000]; } --- 13 core.exception.OutOfMemoryError@(0)
GC「それはな…ちゃうねん」 なんかGC作動オプションつけられるようになったっぽいから色々試してみたけど どうやっても落ちるのな
PreciseGC にならないとダメ 非アドレスをはじけないから デカいブロックを使用中と誤認したり無駄なスキャンも防げない 自前で malloc/free するか Win64使うか
でかい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 なので無理 ただし空文字列 "" は例外 落とし穴になりがちなので注意
ちょっと良くわかりませんが、D言語は空の配列すら作れないんですか? 不便ですね
>>227-230 レスありがとう。やりたかったのはこういうことです。
string[string] buf;
auto buf2 = buf;
buf2["hello"] = "world";
buf.writeln; // > []
これと↓
string[string] buf = ["": ""];
buf.remove("");
auto buf2 = buf;
buf2["hello"] = "world";
buf.writeln; // > ["hello":"world"]
では結果が違うわけだけど、後半の上2行を初期化1行で書きたいな。
という話でした。
結局どういうことなんですか? Dでは空の配列を作れないんですか? 必ず何か入っていなければダメなんですか? int[] a; って書けば空の配列になるんじゃないんですか?
>>232 int[] a; で空の配列になりますよ。
226のは「連想配列」が俺にはややこしいっていう話です。
>>231 string[string] buf = (a => (a.remove(""), a))(["" : ""]);
ところで、コンマ演算子を廃止しようとか言ってたのは自然消滅したのか?
>>234 ありがとうございます。ところでもっと基本的な疑問がわいたのですが、
>>231 の後半での、bufとbuf2の中身がずっと同じであるっていうのは、仕様で保証されてるんでしょうか?
Windows版dmd2.068.2では、1000個値を追加しても同じでした。
>>231 バグっぽい removeしつくしたら null になってるはずなんだけど
それに連想配列の内部実装は最近まで大きく書き換えられてて 動作の微妙な違いとかあるのでトリッキーなことは避けるべき
>>236-237 そうなんですね。書き換えます。ありがとうございます。
リンクエラー。2.067.1では通ってた。
http://dpaste.dzfl.pl/255495e7489a 1. -m64 で
2. CTFEで実行されるラムダ内で定義されている
3. 配列をメンバに持つ構造体の
4. 配列のconcatを行う
↓CTFEでtoHash/opEqualsが効いてない。
http://dpaste.dzfl.pl/ec40b544f45d CTFEはまだまだなかなかナヤマシイな!
>>237 がらみかしらん。
D言語って、Javaみたいにソースファイル名とクラス名を同じにしてしまうと、 他のソースでクラス名のつもりで記述したものがパッケージ名扱いになってしまうため Hoge.Hoge のように同じ名前を2回書かないとクラス名と解釈してくれないと思うのですが、 これを1回だけの記述で済ましたい場合、皆さんはどのように解決されているんでしょうか? ソースファイル名を変えるのもmodule文で別名にするのも、何か違うように感じてしまいます。
モジュール名とファイル名は小文字 クラス名は大文字始まり それでもカブるようなケースはパッケージを作るからまず困らない
>>241 D言語の命名規則に則れば
>>242 の言うとおり。
ただ、どうしてもと言うならこんなんはいかがか。
http://dpaste.dzfl.pl/dce8977dacc7 えーと。やっぱ242で。
>>242 なるほと確かにD言語の命名規則からするとモジュール名は小文字でしたね。
でも、どうしても大きなクラスは同名の一ソースにしたいのです‥すみません。
ところでパッケージで気付かせてもらったのですが、この問題って、
クラスのソースらをルート階層に置いているからこそ起きる問題なのですね。
というわけでディレクトリを一つ掘ってパッケージ下に配置することで一応解決しました!
ただ、パッケージ下にあるソースって module パッケージ名.モジュール名 の記述は必ず必要なのでしょうか?
module文の記述が無いとルートパッケージ下として格納されてしまうようで、
module文を普段省略していた身からするとちょっと面倒に感じています。
この辺りの挙動はjavaのpackage文の踏襲かなと思うのですが、
D言語ではパッケージはディレクトリに対応すると書かれているようなので、
module文を省略しても適切なパッケージに配置してくれて良いような?
>>243 おぉ‥改名選択importというやつでしょうか。確かにこれで通りました。
import _Hoge = Hoge : Hoge; という風に変換されるんですね。
import文までコンパイル時生成できるとは、D言語きm‥素晴らしいです。
ただこの書き方ではモジュール名変更リファクタリングの際にIDEが解析しにくい気がするので
(そもそもそこまでお世話してくれるIDEは現存しないようですけれど‥)、
取り敢えずは先のパッケージへの配置法でがんばってみます。
凄いものをありがとうございました。今後の困難の際に参考にします。
Error: template std.algorithm.searching.countUntil cannot deduce function from argument types !()(int[11], int), candidates are: こういうエラーが出たんですけど、countUntilに静的配列は使えないということでしょうか? Error: template instance sort!((uint a, uint b) あと、sortに無名関数を渡したらエラーが出ました。無名関数も使えないのでしょうか?
静的配列に対して popFront() が呼べない(初めて知った!) だからレンジ系操作に対しては全滅に近い ソートの方はそれだけじゃ分からんね 無名関数は使い方間違えた時にわかりづらい
静的配列は要素数が変更できないからですか。 Rangeの要件を満たしてないとなると結構不便ですね。 sortはエラーメッセージがこの1行しか出ないんですよね。 シンプルな例でテストしたらコンパイルは通ったんですけど、他のコードが影響してるのかなぁ。
固定長配列の全体のスライスを取って動的配列に見せかければ ある程度のRange操作だったら固定長配列にもかけられるのでちょっと便利です
delegateのcovariane/contravarianceはなくなったんですかね
SortedRange!(R, ((a, b) => binaryFun!less(unaryFun!transform(a), unaryFun!transform(b)))) schwartzSort(alias transform, alias less = "a < b", SwapStrategy ss = SwapStrategy.unstable, R)(R r) if (isRandomAccessRange!R && hasLength!R) { ... } こんなの見ても揺らがないのが真のD言語er
真のD言語erはそんなに書いて(書かせて)もらえることに感謝する
デバッグ用に関数名を出力したいんですけど、関数名を取得する方法はあるでしょうか? __FILE__や__LINE__みたいな感じのが欲しいです。
標準入出力をフラッシュするにはどうすればいいですか?
基本的には、DではCの標準ライブラリと同等の関数をほぼそのまま薄いラッパで提供しています
dout.flush()ということですか。 writeln()に対応するものはないんでしょうか?
>>254 __FUNCTION__ も使える
日本語訳サイトは古すぎるから
英語サイトも必ず併用すべき
>>259 関数名の取得もあったのですね。
英語苦手だけど見ないとだめですね。
自作のプログラムを実行すると毎回同じ場所でobject.Error: Access Violationが発生します。 エラーとは関係なさそうな修正(stderr.writeln()を増やしたり減らしたり)をするとエラー発生の場所が変わったり、 InvalidMemoryOperationErrorに変わったりします。 エラーの原因がさっぱり分からないんですけど、どういうことが考えられるでしょうか?
GCのある言語でメモリリークとなると、どういうケースがあるのか想像がつかないです。 エラー発生の場所も変わるので謎です。
GCのリーク以外に 確保してない場所に書き込むのもリークって言わない?
こマ?初めて聞いたその結び付け リーク=解放処理漏れ 以外の認識ないわ
newする前のクラスのインスタンスの関数を使ってAccess Violationが出たことは過去にありますね。
しかし、今回はちゃんとnewされているし、1回目の呼び出しでエラーが発生してるわけでもないんですよね。
そして
>>261 で書いたようにstderr.writeln()を追加するだけでエラー発生のタイミングが変わるので難解です。
AVならばぬるぽか RangeErrorか deleteの間違い -g -debug してないんかいな InvalidMemoryOperationError ならばデストラクタの中で何か変なことしてる疑い デストラクタの中でdeleteとかしちゃダメダメよ〜
似たことなったことあるなあ。なんやったか。 templateとかmixinがらみで依存関係見落としててobjの更新忘れとか。
すみませんReleaseビルドになってました。 DebugビルドにしたらRangeErrorになりました。
char *hoge[] = new char *[N]; scope(exit) free(hoge.ptr); とするのと char **hoge = cast(char **)(new char *[N]); scope(exit) free(hoge); とするのとでは同じ動作が期待出来ますか? あとガベコレを期待するなら scope(exit) free(hoge.ptr); も scope(exit) free(hoge); もどちらも不要ですか?
色々とカオス(感想) C : malloc/free C++: new/delete D : new/[destroy] GCがあるので解放は不要だが、領域が不要になったことをdestroyで明示してもよい ただしdestroyで領域が即時解放されるわけでなく、GCが必要に応じてよしなにやる C++のdeleteと区別するために、destroyになった(想像) --- auto hoge = new int[][N]; // int型の動的配列をN要素もてる動的配列(二次元配列) foreach (elem; hoge) elem = new int[色々]; // ジャグ配列も可能 // 以下は不要(してもよい) foreach (elem; hoge) destroy(elem); destroy(hoge); --- GCを使わずmalloc/freeすることも一応可能 (今だと、std.experimental.allocatorを使うべき?) newしたものをfreeすることに保証はないと思う、知らんけど
× foreach(elem; hoge) ○ foreach(ref elem; hoge)
クラスのstaticメンバ関数で、継承先の型って見られますか? class Base { static T[] takusanMake(T)(int n) { //Hogeから呼んでT=Hogeがほしい T[] ret = new T[n]; foreach (ref e; ret) { e = new T; } // ... Baseのフィールドしかいじらないような設定 ... return ret; } } class Hoge : Base { } void main() { //Hoge auto hoge = Hoge.takusanMake(30); } 内容はともかく、大体こんな感じのことをしたいです Baseから派生したクラスで定義するとか、ちゃんと!(Hoge)してもいいんですが、 (this T)を見てから何か方法があるような気がしてきて・・・
staticなメンバ関数からは、thisは見えないので UFCS前提でいっそ外部に出して === import std.stdio; class Base {} class Hoge : Base {} class Other {} T[] takusanMake(T : Base)(lazy T d, int n) { auto ret = new T[n]; foreach (ref e; ret) { e = d(); } return ret; } void main() { auto hoge = (new Hoge).takusanMake(30); typeid(hoge).writeln; // Baseに暗黙変換できない型はNG //auto other = (new Other).takusanMake(30); } === こういうのはどうだろう (もっといい方法ありそう。。)
Hoge という型と Fuga という型があって Hoge[Fuga] hage; という連想配列は定義できるみたいなのですが Any という任意の型があるとして Any[Any] moge; みたいな連想配列は作れますか?
ちなみに ["A": "B", "C": 3, 4: "E"] みたいなのを作りたいのです
Object[Object] moge = ["A": "B", "C": 3, 4: "E"]; これでだめでした orz
import std.variant; auto moge = [Variant("A"): Variant("B"), Variant("C"): Variant(3), Variant(4): Variant("E")]; とかいうダサい感じのしか思いつかない。
>>277 確かにもう外に出してしまう方がいいかもしれないですね
外に出すことは考えてなかったのでもうちょっと考えてみます
>281 ダサくてよければ Variant[Variant] constructor(T...)(T plist){ Variant[Variant] result; foreach(ref p; plist) result[new Variant(p.keys[0])] = new Variant(p[p.keys[0]]); return result; } Variant[Variant] moge = constructor(["A": "B"], ["C": 3], [4: "E"]); 試してないけど
引数が1個ずつ別のAAになってる…? きもちわるすぎる
import std.variant; import std.stdio; Variant[Variant] makeTable(T...)(T p) { static assert(T.length%2 == 0); Variant[Variant] t; foreach (i, ref v; p) { static if (i%2 == 0) { t[Variant(p[i])] = Variant(p[i+1]); } } return t; } void main() { auto t = makeTable(1, 2, "hoge", 123.2); writeln(t); }
やろうとしてること自体闇魔術臭いしわりと妥当なのかもしれない
>>284 と
>>286 ってどちらもコンパイル時に
解決された型変換のコードが生成されるのですか?
つまり前者も後者も実行時の速度パフォーマンスは同じですか?
>>291 どんなコードが生成されるか知らないのでベンチとって見た結果
http://dpaste.dzfl.pl/85212474e9f0 281: TickDuration(3595337)
284: TickDuration(9347285)
286: TickDuration(4128184)
288: TickDuration(3554533)
Dでcomのclientを書こうとして付属のサンプルソースを試したら動作しました wshサーバーをdispatchしてEcho('hoge')みたいなポップアップを出したいのですが サンプルをどのように書き直せばよいのですか
途中まで書いたコードです extern (Windows) HRESULT CLSIDFromProgID(const wchar *, CLSID *); const string wsh = "WScript.Shell"; interface IWSH : IUnknown { extern (Windows) int Echo(); } DWORD dwVer = CoBuildVersion(); HRESULT hr = CoInitialize(null); hr = CLSIDFromProgID(wsh.toUTF16z(), &clsid); IWSH pIWSH; hr = CoCreateInstance(&clsid, null, CLSCTX_ALL, &IID_IUnknown, &pIWSH); // FAILED(hr)の判定コードは省略していますがここまでは動作しているようです // pIWSHに値は入っているようですが次の場所でAccessViolationします pIWSH.Echo(); CoUninitialize(); pIWSH.Echo(); の行をコメントアウトすると何も起きませんが正常に完了します あと &IID_IUnknown のところを &IID_IDispatch に書き換えてもだめでした
>>294 ちょっとまだよく分かってなくてEcho呼んでも何も起きなかったけど、
PopUp呼べたので参考になりますか?
http://dpaste.dzfl.pl/15f1655e540e >>294 IDLとかタイプライブラリとか見ずに静的バインディングしようとしてる
普通は中間ヘッダを入手するかツールで生成する
C++で一度やったことがないとダメ
ちなみに
>>295 は動的バインディング
>>294 WScript.Shell に Echo は無いよw
>>297 うっかり勘違いしてました
標準のinterfaceから継承する方法ですが
interface IWSH : IUnknown { // add vtbl to define as IDispatch
extern (Windows) HRESULT GetTypeInfoCount(UINT *);
extern (Windows) HRESULT GetTypeInfo(UINT, LCID, REFIID);
extern (Windows) HRESULT GetIDsOfNames(REFIID, LPOLESTR *, UINT, LCID, DISPID *);
extern (Windows) HRESULT Invoke(DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *);
}
にして
hr = CoCreateInstance(&clsid, null, CLSCTX_ALL, &IID_IDispatch, &pIWSH);
したら
後は
>>295 さんと同じように PopUp("Hage") を Invoke 出来ました
ほんとうにありがとうございました
質問です。 SysTime st = Clock.currTime(); writefln("%s", st.toISOExtString()); writefln("%s", st.toISOString()); の動作で末尾の小数点以下の数字 (hnsecs) が 7桁になるときと6桁になるときがあるみたいです。 先頭の 0 が表示されないケースがあると思ったのですが 通常の '年月日T114500.1234567' 以外に '年月日T114500.0123456' は表示されました。 ところがたまに '年月日T114500.123456' と表示されることがあります。 つまり '年月日T114500.0123456' なのか '年月日T114500.1234560' なのか判りません。 hnsecs==0 のときにこのパターンがあるみたいなのですがみなさんのところはどうですか? DMD32 D Compiler v2.063.2 です。
ちょっと紛らわしいので一部訂正します。 x 小数点以下の数字 (hnsecs) が o 小数点以下の数字 (total hnsecs) が x hnsecs==0 のときにこのパターンが o msecs==123, usecs=456, hnsecs==0 のときにこのパターンが
"年月日T114500.123456" == "年月日T114500.1234560"じゃないの?
なるほど小数点以下だから末尾の0は除かれるんですね。 7桁だと思って決め打ちしない方が良いですね。
Duration d = hoge - fuga; d.total!"msecs", d.total!"usecs", d.total!"hnsecs" を使うことにします。
python の __getattr__
ruby の method_missing
javascript の __noSuchMethod__
みたいなものを期待して
D で同じようなものが有るかどうか検索したら
http://forum.dlang.org/post/op.usipp0mij5j59l@my-tomato というやりとりが見つかりました
そこのサンプルをコンパイルしようとしたのですがエラーになります
D で opDotExp ってどう使うんですか?
opDispatch() ただし型のコントロールは引数とか名前付けとか工夫して自前で面倒を見る必要がある
import std.stdio; class Hoge { void opDispatch(string s)() {
IDispatch で auto xl = Dispatch("Excel.Application"); xl.Visible = true; auto workbooks = xl.Workbooks; まではうまく逝くのに auto book = workbooks.Add(); で Access Violation してしまう 何が間違ってるんだろう
Add がデフォルト引数を持ってるけど引数明示したらどうなるかな ぐぐったら xlFileFormat 列挙型 とか出てくる
a.unknownproperty = hoge; みたいなのも opDispatch!"unknownproperty"(Args args...) で書けますか?
ちょっと違う気がしますが なんとなく方向性はわかりました
さっきから変な現象になりました windows10 なのですが import std.stdio; int main(string[] args) { writefln("@"); return 0; } だけのファイルを d_opDispatch.d というファイル名で保存して dmd -run d_opDispatch.d を実行しても何も表示されないので dmd d_opDispatch.d を実行して出来た d_opDispatch.exe を cmd.exe から実行すると UAC のポップアップが出ていることがわかりました そのまま許可すると別の cmd.exe が開かれてその中で @ が出力されています また d_opDispatch.exe を test.exe に rename したら UAC は出なくなりましたω それで test_opDispatch.exe にするとまた UAC が出たので test_op_Dispatch.exe とか op_Dis_patch.exe とか試したのですが この二つも UAC が出てきますω また test.exe に戻したら普通に動くようになりました ソースのときのファイル名は関係ないみたいなので dmd -oftest.exe -run d_opDispatch.d でとりあえず解決は出来てるんですけど何なんですかねこれ windows10 のブラックリストに登録されちゃってるんですか?ω それともうちだけですか?
opDis_patch.exe もだめです 名前変えるだけで動かなくなります orz
実行ファイル名で必要権限が変わるという余計なお世話なアレか
Dのenumってどうなってんの?
名前付きだけA.B.Aとかできるのがわけわからん
http://dpaste.dzfl.pl/99ffb64db405 名前付きenumが普通に想像するようなenum 名前なしenumは常時インライン展開されてデータセクションに出力されないconstもどき、じゃなかったっけ その上で 型.メンバ の形で使えるプロパティは 変数(定数).メンバ の形でも使えるというだけのような気がする
>>321 なるほど、(名前付き)enumが型という認識が不足してたのか
それなら各要素自体はprivateじゃないからアクセスもできて当然なのかな
ありがとう
auto hoge(T...)(T args){ return args[0] ; } みたいな関数があるとき 呼び出し側で auto fuga = hoge(); で呼ばれたか auto fuga = hoge; で呼ばれたか どちらなのかを呼ばれた側で区別出来ますか?
たぶん無理 それにその辺りの仕様はふらついているので 今の仕様で組んでも後でダメになる可能性がある
call と get と set を実装して dispatch する目論見だったんですが PyObject だと get と call の区別が微妙なんです
DWT(
https://github.com/d-widget-toolkit/dwt )を試しているのですが
Drag and Drop のサンプル(snippetxx.d)が全く見つからないので
SWT(
http://www.eclipse.org/swt/snippets/#dnd )を取ってきて試すも
cannot cast expression event.data of type object.Object to string
のコンパイルエラー、cast じゃダメなので何がしかの変換が必要らしい
で、DWT の Drag and Drop はこんな感じで
動かしてるよ〜という情報をお持ちの方おしえてくださいませm(_ _)m
2.069.2でDelimited Strings内にASCII以外があると怒られるよぅ q"EOS 日本語 ← Error: character 0xa5 is not a valid token EOS"
2.069の文字列処理で日本語入ってるときの挙動が変わって往生した
>>324 とりあえず呼び出し側で
auto fuga = hoge.unknownmethodcall([]);
と
auto fuga = hoge.unknownproperty;
で区別することにしたらうまく別けられました
ところが今度は
hoge.unknownproperty = hage;
で代入しようと hoge class 内で
void opDispatch(string propertyname, T)(T arg){
}
と setter を定義したのですが
hoge.unknownmethodcall([]);
の方まで setter に奪われるようになってしまいました
getterのopDispatchの戻り値を構造体でラップするとか。
http://dpaste.dzfl.pl/e089dbd99093 ああテンプレートで呼び分けるんじゃなくて 全部まとめて一ヶ所で受けて if で分けるんですね 参考になります ありがとうございます
import std.process; で pipeProcess とか spawnProcess とか使えるのは判ったのですが windows で win32api の CreateProcessAsUser とか CreateProcessWithLogonW に相当することが実行可能なモジュールはありますか?
標準では最低限のAPIしかないので 自分でポーティングするか拾ってくるかしましょう
linuxで7zip.soのbindingを書こうとしています。7zipのC++側のIUnknownが struct IUnknown { STDMETHOD(QueryInterface) (REFIID iid, void **outObject) PURE; STDMETHOD_(ULONG, AddRef)() PURE; STDMETHOD_(ULONG, Release)() PURE; #ifndef _WIN32 virtual ~IUnknown() {} #endif }; このように宣言されているのですが、Dのinterfaceでデストラクタを宣言できなくて困っています。 超その場しのぎとして、DのIUnknownの宣言のReleaseの後にダミーのメソッドを、 ・2個追加することでC++で実装されたinterfaceをDから呼び出すことが、 ・1個追加することでDで実装されたinterfaceをC++から呼び出すことが、 それぞれできたのですが、とてもまともな解決策とは思えません。 どうすべきでしょうか。
winじゃなくてlinuxでやりたいみたいよ 一晩寝たら 空のデストラクタなんていらなかったんや って気づくかもしれない
>>337-339 クソして寝ましたが、仮に空(とはいえvirtual)のデストラクタがまるで無意味だったとしても、
bindingの体をとっているのでp7zip側のコードを変えるのはちょっと。
むしろvtblのズレが336程度の単純さならばソレで行くかと。
気になるのはDから呼ぶ場合とC++から呼ぶ場合の非対称性ですが、こういうもんなんですか?
C++ネイティブの呼び出しっていつから「ちゃんと」できるようになったんですか?(小声)
あ、非対称っていうのは勘違いだったかもごめ。
http://dpaste.dzfl.pl/4e7956f36a47 これで解決や!どうもありがとう!
>>341 WindowsでCOMを使った7zipのbindingはもっとすんなりいきましたよ。
自分のクラス(Fuga)を定義していて string へ変換するときに Fuga f("hage"); string hoge = f; みたいな書き方をしたいのですが どんなメソッドを作っておけば良いのですか?
Fuga f = new Fuga("hage"); string hoge = f; です
class Fuga { private string s_; this(string s) { s_ = s; } alias s_ this; }
alias s_ this; とは驚きですが Fuga f = new Fuga("123"); int i = f; としたときでも i に 123 が入るようになりますか? 条件後出しですみません
ちなみに Fuga f = new Fuga("123"); string s = f; // なら s = "123"; と同じ int i = f; // なら i = 123; と同じ という意味です これも alias だけで出来てしまうんでしょうか?
そういうのはたいてい変数に移して終わりじゃなくて、その先があるでしょ 例えば関数に渡すならその関数をテンプレートでうまくまとめるのが D流 単に出力するだけなら writeln(f)
ここを参考に
http://www.kmonos.net/alang/wnd/topics/winapi.ja.html Win32API を使って drag & drop を実装してみたところ
case WM_DROPFILES: の中で
HDROP dr = cast(HDROP)wp;
TCHAR[] buf = new TCHAR[MAX_PATH];
int l = DragQueryFile(dr, 0, buf.ptr, buf.length);
if(l < buf.length) buf[l] = 0;
string bs = to!string(buf[0..l]);
version(Unicode){
writefln("0: %s", to!string(bs.toMBSz()));
string name = bs;
}else{
writefln("0: %s", bs);
string name = fromMBSz(bs.toStringz());
}
writefln("1: %s", name);
とすると
drag & drop したファイル名が 「森鷗(環境依存文字2)外(環境依存文字3)る.ext」 のとき
最後の name の表示が -version=Unicode したときとしないときで結果が違います
toMBSz と fromMBSz とで不可逆なのは判るのですが
MBSz -> UTF8 するときも結果が違うのは何故でしょうか?
(ただし表示は違うのですが同じファイルが対象になってちゃんと動作します)
>>351 Multiple AliasThisを使えば可能
もちろんコンストラクタ内で変換して保持とかする必要はあるけど
……なので実装されるのを楽しみに待っててくれよな!
>>353 SHIFT-JISに含まれてない文字だから仕方ないとおもわれ。
DragQueryFileAの方ではかわりに 63(ASCIIのハテナマーク)が送られてきてる。
A付関数のことなんて早く忘れるんだ!
string valueOf(){ return s_; } int valueOf(){ return to!int(s_); } alias valueOf this;
>>356 不思議なのは *A バージョンの方でも正常に動作してるって所なんだよね
上は Utf16->Utf8->SJIS で余計な変換してるからじゃないの
>>358 A版の内部処理でことごとく文字化けしてるから
文字化けしたファイル名がマッチするせい
>>360 わたしもそう思ったんですが
出来上がった hoge.7z ファイルの中の
ファイル名は文字化けしておらず正常なんです
>>361 ?が1文字マッチのワイルドカードってのは関係してない?
あれ、戻り値だけ違う関数ってオーバーロードできたっけ?
宣言はできるけど使えない 左辺値から型推論とかしてくれると嬉しいんだけどね
T valueOf(T)(){ return to!T(s_); } これもうまくいかんな
明示cast必須になるけど T opCast(T)(){ return s_.to!T; }
alias hoge this; しなくてよくなるからありがたいね
Advent Calendar面白かったよ。 書いた人たち乙です。
冬休み中にAdventCalendarゆっくり読む 楽しみだなあ。書いた人たち乙〜。
https://github.com/D-Programming-Language/dlang.org/commit/77324039087e9283f40244195857c2f9fd4712eb#diff-59280080f58c2ff747f066c5b0b2fcebL423 - $(LI As a first programming language - Basic or Java is more suitable
+ $(LI As a first programming language - Python or JavaScript is more suitable
時代の流れを感じる
Basicの方が初めてのプログラミングには良いと思うんだがなぁ
まあ妥当と思う。Basicって括りがざっぱだけど、 (N-88とかそういう)BASIC → まあやらんでええやろ。行番号とか。ねえ? VB → PowerShellが出てシリスボミ感がある。 Python → 個人的にはtkinterの存在がでかい。 JavaScript → すぐ遊べる。すぐ自慢できる(←重要 あとは英才教育的な観点からならプログラミンとか?
時代は Elixir ですよ D でもいいけど すぐ自慢できるのは Python だろ
std.experimental.yeslolitanotouch
64bitのWin32対応DLL作りたいんだけど?
あれ途中で切れた。 dmd -m64 -shared mydll.d dll.d mydll.def
>>384 それぞれ書かれた時期が違うんじゃまいか
DMD で単純な x64 バイナリを作るところまでは行けてるんでしょ? Win32 DLL も作れるんでしょ? x64 で Win32 App と結合できるかって話でしょ? 出来ないと思うけど
ブリッジ役のDLLも用意して64<-->32間をプロセス間通信でうんたらかんたら
>>336 > DのIUnknownの宣言のReleaseの後にダミーのメソッドを、
> ・2個追加することでC++で実装されたinterfaceをDから呼び出すことが、
> ・1個追加することでDで実装されたinterfaceをC++から呼び出すことが、
> それぞれできたのですが、とてもまともな解決策とは思えません。
https://issues.dlang.org/show_bug.cgi?id=15589#comment_text_0 やっぱりダミーを追加するしかないらしい
わぁ!どうもありがとう!まだ書きかけ&お粗末ですが、その時の成果物です。
https://github.com/garlic-flavor/D7z ツッコミ/プルリクお待ちしております。m(_ _)m
いつのまにか公式が改装してた なんかすごくプログラミング言語の公式ページっぽい
/r/programming 見てるとほぼ毎日Dの記事があって、ついに時代がきたか感がある
scope(exit)はスコープ抜けるときに実行されるけどさ、 呼び出し元のスコープ抜けるときに実行されるような処理を書く方法って存在しないのかな 例えば foo(){ hoge(); } で、hoge()の定義内に書いてfoo()の最後に実行されるようなやつ
部品化の概念を否定するその硬派な姿勢、俺は評価するよ
>>394-396 scoped型をhogeが返せばいいんじゃね、って思ったけど
もうscoped型って無くなったんだっけ?
std.datetime.measureTime がそんなんだったような。
core.sys.windowsのナカミがおきかわっとるー\(・∀・)/
もしかしてdmcって64bitのコンパイルオプションないの?
ないっしょ 16bit ならまだあるかもしれない それに optlink まで含めると 32 ですら騙し騙し使ってる状況
今さらだけどD用のお勧めのGUIライブラリある? マルチプラットフォームで。
自分でメンテする気があれば正直どれでもいいし そうじゃなければ D でGUIなんて考えないほうがいい
LDCからEmscripten通してHTML5にでも変換したほうがいいんじゃない?(適当)
時代は io.js + Electron ですねわかります
ぜんぜんわからない D普及のために、できるだけわかりやすく情報を提供してください。切に望みます
Cのインタフェースがていきょうされていれば、利用できる これが鍵なんだろうけど、初心者むけではない
わからんわからんわからんわからんわからんわからんわからんわからん
自分は何がしたいのか、何ができなかったのか 情報がなければ答えようもなかろう
>>408 DlangUI、結構良さそう
使ったことある人いたら感想聞きたい
>>408 dクス
やっぱDWTが定番かー
DlangUI、最初のmixinが美しくないなぁ・・・・・・(笑)
>>409 あれ、Dの利点あんまりないですやん><
DでwrapしたPythonObjectでwxPython使ったら意外と便利だったな
DFLがマルチプラットフォームになれば文句ないんだがなぁ
どうしてもマルチプラットフォームが必要なら HTML5 でどうにかする方が現実的
もう仕様固まってきて大きな動きないのにサードパーティのライブラリが整備されないのは Dが今まで積んできた業かな
Oh my D-lang, Oh my D-lang, Oh my D-lang Clementine.
ライブラリが整備されないのはなぜ? ユーザーが少ないから ユーザーが少ないのはなぜ? ライブラリが整備されないから
コンパイル時にテキスト読み込んでさ、 行数の数だけ文字列mixinして関数作りたいんだけど 任意回数の文字列ミックスインのループってどう書くんだろう・・・・・・。
>>431 先に文字列加工して最後にまとめてミックスイン出来ないのん?
本家に追いつくのは無理だから mingw で動くように戻しておくれ
>>436 過去に仕様変更し過ぎたせいでD言語=仕様変更っていう認識が一般に広まったせいじゃね?
>>431 mixin template loop(string s,r...){mixin(s); mixin loop!(r);}
mixin template loop(string s){mixin(s);}
信用は一度失うと取り戻すのは困難ってことさね D言語について少しでも調べてもらえば今そうでないのはわかることだから、 D言語を知らない人がD言語に触れる機会を増やす・・・ つまりD言語で書かれた一般向けアプリがもっと出ればいいわけだ よし!あとはまかせたぞ!
もう Julia でいいような気がしてきた 手遅れかもな
簡単過ぎて調べなくても判ってしまう言語だと人気が無いことになるな
D言語って名前のイメージが悪くなっちゃってるからD++とかに変えよう
>>440 exeはnativeなDの足元にも及ばない
iota(-10,1)やrecurrence!(q{ -n })(0)がintになるのに sequence!(q{ -n })だけuintで負の値を使えないんですがこれって何か理由があるんですかね?
>>451 ソース見た感じ、
recurrence!(q{-n})(0) は 0 の型とってる→int
sequence!(q{-n}) は -n の型とってる、ここで n の型は size_t → size_t
ってことみたい。
alias compute = binaryFun!(fun, "a", "n"); alias ElementType = typeof(compute(State.init, cast(size_t) 1)); で、nにcast(size_t)1を入れてsize_tになってるんですね 単に気になっただけなんですけど
配列の中の最大値を探すときって普通どうやるんでしょうか enum arr = [3, 1, 4, 1, 5, 9, 2]; aliasSeqOf!arr.max.writeln; // 要std.metaなのと定数でないとダメ arr.minPos!
なんか途中で切れた minPosとか使ってるんですが、しっくりこなくて
>>454 std.algorithm使って関数型っぽく
arr.reduce!max.writeln;
void hoge(T)(out T t) {...} uint x; hoge(x); // コンパイル通る int[] arr; hoge(arr.length); // コンパイルエラー(Error: template hoge cannot deduce function from argument types !()(uint), candidates are:) arr.lengthでエラーが出るのはどういう理屈なんですか?
いや、ひょっとして length のセッターを呼んで欲しい…? 流石に無理なんじゃ
arr.length = 0とかできるから普通の変数と同じように考えてました。 hogeに渡す時に、ただの右辺値のuintとして評価されるってことですね。
できてもいいとは思うけどな 内部的には一時変数が作られるとかで
もしlengthをいじりたいなら深く考えず void nobasu(T)(ref T[] arr) { arr.length ++; } とかでいいんじゃ?
lengthをいじりたいというより、out引数を持つ関数を使いたかったんですよね。 なのでこうしました。 uint lenght; hoge(length); arr.length = length;
>>456 reduce!maxか!
遅くなりましたが、ありがとうございました。
遅い、遅すぎる 時代は既に reduce から fold に変わろうとしているのに
とはいえまだマージされただけでリリースはされてないし 内部でreduce使ってるから無くなることはないだろうけどな
struct S { int[] arr; } S s1; ... S s2 = s1; 構造体のデフォのコピーコンストラクトを使った場合、メンバarrはシャローコピーされますよね? ディープコピーしたい場合、コピーコンストラクタを書き換えるか、ディープコピー用のメンバ関数を書く方法が思いつきますけど、 もっと手軽な方法はないでしょうか?
前者はpostblitを指してるんだと思うけど、すでに十分手軽じゃね? this(this){arr=arr.dup;} ところでマニュアルによればpostblitは初期化時の話らしいけど、代入時にも呼ばれるのは何故だ
>>471 構造体なのでコピーコンストラクタじゃなくてpostblitでしたね。
this(this){arr=arr.dup;}を構造体ごとに書いていかないといけないのが面倒くさく感じました。
>>472 つまり1回書くだけで全ての構造体に一括して適用されるような方法を期待してる?
さすがに無い気がするし、むしろあったら怖い
せいぜいmixinして文字数削る程度じゃね
>>473 自分で書くならtupleofとtraitでdupテンプレートを書いて
S s2 = s1.dup;
っていうのを思いつきました。
>>433 今更だけどありがとう、
そんなアタリマエのことを全然思いつかなかったw
CTFEすげー(今更)
VS2013とLDCでビルドしたら、 LINK : fatal error LNK1104: cannot open file 'legacy_stdio_definitions.lib' というエラーが出たんですけど、原因は何が考えられますか?
>>478 読み込むライブラリの場所の指定がおかしい
>>479 うーん、わからないです。
legacy_stdio_definitions.libがHDDの中にないし、ぐぐってもなんなのかよくわからない。
>>478 デフォルトは VS2015 の設定だから
etc/ldc2.conf の該当行 を書き換えてくれってどっかに書いてあった
"-Llegacy_stdio_definitions.lib" とその前の行のカンマを消せばいい
>>481 ldc.confにlegacy_stdio_definitions.libはありませんでした。
色々、調べてて気づいたんですけど、LDCを使うにはLLVMもインストールしないといけないですか?
LLVMのバイナリは公開されていないみたいだし、ビルドしないといけないとなると面倒ですね。
日本語の解説サイトもなさそうだし難易度が高い。
忘れてた VS2015 以外のバージョンで動かすには LDC をその設定で再構築してくれと書いてあった 今探してもどこだったか見当たらないけど… たぶん VS2015 入れるのが一番簡単
>>483 なるほど・・・VS2015なら簡単でしたか。
D言語でGCが動かなせない環境(組み込み環境)で クラスを使ったコードを走らせるために手動でメモリ管理をする(配置new) みたいなC++的な使い方できますのん? もっと具体的に言うと、 メモリ管理クラスをD言語で書きたいんだけど・・・ できれば、ほかの言語(C/C++)を混ぜたくない。 Dでこの望みは叶えられる? GCが完璧な言語で何を言ってるんだって話だけど C言語とABI互換バイナリが吐ける言語でかつ、きれいな構文のDはかなり魅力だから、つい。
>>486 あざます!!!!
ちとググってみましたけど
WikiにExplicit Class Instance Allocationっておもいっきり書いてありました・・・
手元の環境でもそれ書いたら動いたので
組み込み先の環境でもコレができるか試してみます!
foldとかHaskellみたい いいぞもっとやれ 実行時のパターンマッチとかどんどんやって
パターンマッチは本当に欲しい castSwitchは型で分岐するだけで不満が残る ついでにAlgebraicもいい感じにしてほしい
Cライクな構文でパターンマッチをどう表現するか? dropThree :: [a] -> [a] dropThree (_:_:_:xs) = xs dropThree _ = []
>>491 を読んで、
>>489 に必要なのは490ではなくて
if (auto a = cast(A)x) if (0 < a.b) {...}
の省略表記みたいのなのかなと思った。
今試してて気づいた if (auto a = 0 < (cast(A)x).b, cast(A)x) {...} は通るんだね。キャスト2回いるけど。
あ、バグですらないや。結果を使わないからカンマの前半が評価されてないだけだ。 スレ汚しでしたorz
>>492 考え直してみたら、俺が欲しいのは、クラス以外にも対応したcastSwitchと多重代入かなと思った
最初に欲しかったのは定数もパターンとして扱えるようなものだけど、それ自体は条件分岐で事足りる
さあ早く shibuyad とやらの潜入リポート作成に戻るんだ
new int[][](10,10) なんてあったんだな・・・今の今まで律儀にループしてたわ・・・ 恥ずかしい
レスポンシブなウェブページになってるね
https://dlang.org/ Dってエルミート行列の固有値と固有ベクトルを下か上の三角行列から出してくれるライブラリある?
知らないが、 「Cでそれ扱ってるライブラリ」→「Dのバインディング」の順番で探すと見つかるかもしれない。
そんな劣化バインディングの出てくる場面じゃないと思う Dよお前の力はその程度かッ
バインディングに劣化とそうじゃないものの区別方法を教えれ
EUC-JPの文字列をUTF-8にエンコードするにはどうやればいいですか?
>>508 iconvかicuのバインディングを探します
>>509 なるほど。
標準ではできないんですね。
>>506 複素数はがんばってほしいよね。Dに。
>>510 EUC-JPは滅んだんだよ!もうそういう事にしようよ!
EUC->(簡単)->JIS->(どのAPIがいい?)->UNICODE->(簡単)->UTF8
writeにクラスを渡した時クラス名だけじゃなくて中身も表示させたいんだが何に手を加えればいいんだろか?
>>514 即座に返事くれてすごい助かった
ありがとうございます
D言語でクラスを使って dmd -c Dソース でコンパイルだけして GCC(mingw)でWindows用dllをクロスコンパイルする時、リンカが参照できないエラー吐くけども 参照できないメソッドはこれ _D9invariant12_d_invariantFC6ObjectZv _d_assert_msg この参照できないメソッドが入ってるライブラリとその依存関係にあるライブラリって どのファイルか分かります?
そうやって混ぜてコンパイルするのは無理…で普通は済む問題なんだけど 何がしたいのかしら
>>517 https://github.com/kubasz/uefi-d これを参考に、UEFI AppをD言語で作りたいんだけども、
クラスを使うとリンクエラーでてしまい と言う話で、
>>516 やっぱり、Dのクラスの仕組み上、こういう変な使い方するのは厳しいかな
>>519 サンプル自体ビルドは通ってQEMUで動作確認済みです。
確認済みのサンプルソースに、追加で適当なクラス
(プリミティブ型(検証時はintのみ)のメンバ1つとコンストラクタ、セッタ、ゲッタのみ)とか
プリミティブ型(同上)メンバのみ構造体を定義すると
リンクしないといけない何かが足りなくなるらしいと言うところです
それなら -debug -release のオプションの不一致かな druntime の debugあり/なし バージョンが分かれてるのかな
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
・
>>521 とりあえず、Objectのスタブを見つけたので、試しにコンパイルだけしてみました。
https://github.com/JinShil/D_Runtime_ARM_Cortex-M_study/wiki/1.3-Structs これをそのままobject.dにコピペして、コンパイルだけ通そうとしたんですが
dmd -v -c object.d
binary dmd
version v2.070.2
config /etc/dmd.conf
parse object
importall object
semantic object
semantic2 object
semantic3 object
Error: undefined identifier 'Error'
Error: undefined identifier 'Error'
ってことなので、
class Error{
this(string){}
}
こんな感じのを作って、再度ビルドしたら、DMDが保護例外で落ちたんですが
D言語わからないですけど、多分CTFEが動いたんですかね?
Errorクラスの最小実装ってどうすればいいかわかります?
ごめんなさい、話が飛んでた。(ドツボにはまってました)
>>516 は一旦解決しました。ありがとうです。
-releaseオプションつけたら、一先ずassert関連の
リンクエラーは出なくなりました。
Dって長方形配列を動的に確保するにはどうするのがベストなんでしょう?
>>533 おお、この記法でギザギザ配列回避できるのか!ありがとうございます
>>535 これがまさに求めていたものだった
日本語のページではこれ全然見つからないし教えてくれなかったらこれに気付かず過ごすところだった
ありがとうございます!
それまだ入ってから半年も経ってないし experimental な上に注目度高いからガンガン変わるよ
DerelictAllegro用のdllファイルがAllegro公式漁ってもみつからねぇ いっそ同封してくれりゃいいのに
dってpythonでやれるように関数の引数としてクラスをとることは出来ますか?
型と値は別物なので、Pythonのtypeクラスみたいなものは無いはず テンプレートでは型を引数に取れるからそれで大概足りるしな
そのままのものはなくても __traits/std.traits を隅々まで見るとだいたいのことは出来る
なるほどdでは型を引数にしたかったらテンプレートを使うんですね わかりましたありがとうございます
すいません、
>>535 のndsliceを包含したクラスでnumpyのように動的にshapeを変えられるクラスを作ることは可能でしょうか?
slicedの引数が動的配列ではいけないせいでスライスの形をメンバ変数として持てず、Sliceの次元がコンパイル時に決定されていないといけないせいでslicedの結果をメンバ変数として持てなくて困っております。
>>546 同じインスタンスに対してshapeをかえるのはむりっぽいとおもわれ
決め打ちできる所までtemplate化していくしかないきがす
https://dpaste.dzfl.pl/32747b208179 >>547 やっぱり無理でしたか……
コードの例まで載せてくれてありがとうございます。参考になりました
テキストファイルをstringに読み込んでstd.string.indexOfを使うと Invalid UTF sequence: e5x a3x - Attempted to decode past the end of string (at index 2) という実行エラーが出ます。 テキストファイル自体は、TeraPadで開くとUTF-8として自動認識されているのですが、 D言語の標準ライブラリが認識してくれない原因は何が考えられますか?
エラーメッセージそのまま 文字列が中途半端なところで終わってる 読み込むサイズが足りないか、元々ファイルがおかしくてTeraPadが開く時に自動で直してくれてるのか
>>550 thx
コードの中に、文字列が中途半端に終わってる部分がありました。
D言語の複素数ってなんか組み込みのとライブラリのがあってしかも行き来が不自由なんだけどどうなってんだこれ
ライブラリの方を使う
組み込みのやつは互換性のために残してあるだけ
https://dlang.org/deprecate.html 「ライブラリで実現できる」「言語仕様を小さくする」とかで 機能追加が却下されたり言語の機能が削られたりしてるが 「できる」じゃなくて本当にライブラリ側でやった方が良いのかどうか検討してからにして欲しい 言語仕様の大きさなんてユーザには関係ないよ、必要な部分しか使わないんだから
言語仕様が小さくなってフットワークが軽くなる(== 破壊的変更が増える) ならそれはユーザ体験の向上であろう。 さあはやく俺のstd.math.expi多用したコードをはじくのだ!
初期の頃は、ライブラリより構文側でやった方が最適化できるというスタンスだったのに いつの間に方針転換したんだろな
少なくとも
>>553 読む限りでは、需要がないと判断されただけに見えるけど
http://dlang.org/builtin.html でも最初に挙げられてる理由は「よく使われる」だし
8年間futureのままだったが、今月ようやく警告を出すPRが出たんだな
>>559 CTFE が充実したとかLDCにぬかれたとかありそう
それに PreciseGC が未だにないのにビルトイン型だけ充実してますと言われても困る
Pythonでいうところの np.array([[[i,j] for i in range(3)] for j in range(5)]) や np.array([[i,j] for i in range(3) for j in range(5)]) はDではrangeやndsliceを使って一行くらいで表現できますか?
>>562 import std.algorithm, std.range;
3.iota.map!(a=>5.iota.map!(b=>[a,b])).join
ndslice使ってないけどこんなんですか
>>563 おお、綺麗だ……
まさかpythonより短く書けるとはびっくりしました。
ありがとうございます
dmcの質問なんですけど a->b(a); みたいなオブジェクトaに対するインスタンスメソッドbの呼び出しを #define M(x, y) x->y(x) みたいに定義して M(a, b); と書きたいのですが エラーになります どうマクロを書くのが正しいのですか
>>566 俺の環境ではその書き方のままで動くけど?
そもそもそのマクロの意図がわからんが。
http://codepaste.net/j8ub3f 現象がdmc限定っぽかったのでここで質問しました 実際のコードはメソッドにいくつかパラメータ(可変長)があって a->b(a); のケース以外に a->b(a, c, d, e); でも呼ぶケースがあるので #define M(x, y, ...) x->y(x, ## __VA_ARGS__) みたいに定義して M(a, b); するとエラーになります 条件後出しで済みませんでした
「##」 を無くしてもエラーになるんです #define M(x, y, ...) x->y(x, __VA_ARGS__) M(a, b);
可変個引数が0個の場合、C99的にはコンマが余っちゃうからそれぞれ独自拡張しますってリンク先に書いてあります。
dmcはもうあんまり使わないほうがいいかも
http://en.cppreference.com/w/cpp/compiler_support 時代はDだよね!?(スレチ回避)
ありがとうございます!! Dで書き直すことにします!!!
mixin templateでopIndex(size_t I)を定義した後mixinなしでopIndex(size_t i, size_t j)を定義するとopIndex(size_t I)が無効になりますが、これは何が起こっているのでしょうか?
>>574 http://dlang.org/spec/template-mixin.html#mixin_scope If the name of a declaration in a mixin is the same as a declaration in the surrounding scope, the surrounding declaration overrides the mixin one:
っていう仕様
>>575 これって引数の型や数が違っててもオーバーライドするんですか……
575のリンク先の下のほうにあるけど、aliasでオーバーロードに含めることができます。
オーバーロード集合はちゃんと使えないとハマることがあるのに 説明が不十分だと思う
FreeStandingな環境向けのD2向けRTTIの実装って有ったりするです?
5月31日 5時10分
31日、火星が地球に最接近します。「スーパーマーズ」とも言われ、今回は最近10年間で最も近い距離となり、都市部でも肉眼で見ることができることから、身近な天体ショーとして気軽に楽しめそうです。
太陽系で地球の1つ外側の軌道を回る火星は、太陽の周りを687日かけて1周しながら、およそ2年2か月に1回、地球に接近しています。ただ、地球の軌道がほぼ円形なのに対して、火星の軌道がだ円になっていることから、火星と地球との距離は接近するたびに変わります。
国立天文台によりますと、火星は31日に地球に最接近し、今回はおよそ7500万キロまで近づいて、この10年間では最も近い距離になります。
火星の明るさは1等星のおよそ15倍の「マイナス2等星」くらいになるとみられ、地球から見える火星の見かけの大きさも、ことしの最も小さいときと比べて直径がおよそ3倍になります。
(続きや関連情報はリンク先でご覧ください)
引用元:NHKニュース
http://www3.nhk.or.jp/news/html/20160531/k10010540551000.html ※関連板
http://wc2014.2ch.net/galileo/ 宇宙
配列が提供するインターフェイスを揃えたクラスを簡単に作るには何のインターフェイスを継承して何にalias thisすればいいのでしょうか?
>>579 castじゃだめなん?
>>582 こうですか?
https://dpaste.dzfl.pl/4f46d257323c >>580-581 dmd と間違って smd と入れるとスーパーマーズD言語ちゃんが接近してくるジョークソフトを作ってくれるんですね↓
>>583 rangeのいずれかのインターフェイスを継承させてやりたいです……
複数種類のクラス(全て配列のインターフェイスを持っている)を引数として取れる関数を定義したいんです
voidポインタなんて久々に見ました
std.mathとstd.complexをimportしたらexpiが競合した…… まさか毎回どっちのを使うか指定しないといけないのか?
インターフェイスAとBがあって、関数fはインターフェイスAとBの両方を継承したクラスを引数に取る こんな関数fの引数の記述方法はありますか?
>>589 なるほどtemplate+ifでやればいいのですか
こんなに汎用性のあるものとは知りませんでした
ありがとうございます!
D使いもWindowsユーザーの方がやっぱり多いんだろか……
dmcの質問なんですけど、 wchar_t *hoge = L"あ"; としてファイルを UTF-8 で保存&コンパイルして実行したとき、 hoge の中の値は \u3042 を期待していたのですが、 なぜか \xe3\x81\x82 になるみたいなのですが、 なぜでしょうか?
入力がUTF-8と思われてないんじゃね Windowsなら普通はSJISかLatin-1かが仮定されてるはずだから、オプションを付ける必要があると思う dmcのことは知らん
core.simdのfloat4って、要素を移動させるのにシフト演算って使えないでしょうか? 例えば[1.0, 2.0, 3.0, 4.0]のベクトルを[2.0, 3.0, 4.0, 4.0]にしたいです。
iotaからの一連の流れで好きな配列つくれるのホント便利だわ
>>595 もしかしてそのままシフト演算子が使えたりします?
http://www.kmonos.net/alang/d/simd.html ここに書いてないので、単純にそのままできるとは思いませんでした。
で、試そうと思ったらError: undefined identifier 'float4'というエラーが。
core.simdはimportしてるんですけど、なぜでしょう?
>>583 castは型のキャストって意味?
もしそうなら意図が伝わってなくて申し訳ない。
Freestandingな環境だとlibc.soはもちろん存在しないし
動的リンクなんて仕組みもないので
既存のdruntimeは使えないって思い込んでるんだけど
(合ってる?もしかして、この辺りで勘違いしてる?)
最低限、そういう環境で構造体は使えるようにObject.TypeInfo_Structクラスが
実装されてるもの無いのかな・・・と。
dmd ver2.071.0でObjectクラスを自作するとErrorクラスの実装でコケるので
既存で最小限(RTTIのみ?)の機能を持つライブラリがあればそれを使いたいなと言うことで。
std.rangeに入ってるRandomAccessFinitを継承してクラスを作ったら、メンバの配列にalias thisしてもなお実装すべきものがいっぱい残ってるんですが、 これは全て自分で一つ一つ書いていくのですか? もしくは配列と同じ操作を提供するインターフェイスを作るにはどうすれば楽でしょうか?
あそこの一連のインターフェイスは「こんなん作ってみたんだけど〜」程度のもので ほとんど使われてない 構造体テンプレートにしてコンパイルエラーが出ない程度に既定プロパティを補うのが主流 そのやり方なら alias this の転送でほとんど足りるはず ただしどのプロパティを再定義すべきかはインターフェイスを見るのがいい
>>600 ええっとすみません。間違っていたら申し訳ないのですが、もしかしてinterfaceとclassを使うよりstructを使うのが主流なのですか?
D言語のファンはオーバーヘッドとかGCとか嫌う声が大きい
実際のところ GC の実装がチープでそれほどあてにならないし
構造体とメタプログラミング乱舞で読みにくいライブラリが人気
でもインターフェイスでやりたければやればいいのよ
>>599 の 大半のメソッドは1行関数で済むはず
双方向とか明らかにいらなそうなのを省くなら std.typecons.WhiteHole が使えるかも
>>602 Whiteholeは知らなかったし参考になります。
人気のライブラリとかってどこを見ればわかるんでしょうか?
>>598 わかんないや。ごめんね。
>>603 人気ぶりはわからないけど、ここのを
https://code.dlang.org/ これ
https://code.dlang.org/packages/dub 使ってダウソして欲しいと、ヲルたんは思っているのではないだろうか。
>>604 あ、すみません。人気のライブラリって標準ライブラリ中でも人気な奴という意味からと思ってました。
そういうことでしたか。ありがとうございます。
ところで、ひとつ聞きたいのですが、dではpureやimmutableが使えますが、これらを使うと実際どの程度最適化されるのでしょうか?
InterfaceにopBinaryなどのテンプレート関数を持たせるにはどうするのですか?
すいません
>>606 これ自己解決しました
finalにすれば良いのですね
GCの性能は連想配列とかクロージャとかクラスの性能に直結するので、 「できるだけGCが動かないように」じゃない方向に進んでGC性能うpしてほしいな・・・
速い行列演算したいんだけどIntel mklのblasを読み込む方法がよくわからん…… あとScidってなんか開発止まってるっぽいけどどうなんだろ?
ネイティブも吐けるJuliaと比べて どっちが速いん? どっちが書きやすいん?
C系に慣れてればこっちが書きやすい どっちが速いかは用途によるんじゃないの ベンチマーク取った!→チューニングが足りん! てのがいつもの流れ
ってかDで線形代数する時のスタンダードってなんだ?
Scidもdepricated放置されてるし科学方面弱いな
std.experimental.ndsliceはどうなんだろう experimentalだし俺は使ってないからわからんけど
import std.stdio; // 例えばこういう interface に対して、 interface Iinc{ final int opUnary(string OP : "++")(){ return opInc; } int opInc(); } // こんな mixin template 使う場合に、 mixin template incImpl(alias target){ int opInc(){ return ++target; } } class A : Iinc { int a; // ↓これはまあいいとして、 mixin incImpl!a; } class B : A { int b; // ↓ ここに override って書いて動くってはじめて知りました。 override mixin incImpl!b; } void main(){ Iinc c = new B; ++c; (cast(A)c).a.writeln; (cast(B)c).b.writeln; }
テンプレート制約で複素数とか、複素数または実数にヒットさせるにはどうすりゃええんや…… 組み込み複素数は__traitで簡単にヒットさせれるけど
>>627 こう?
is(T == Complex!U, U) // T が std.complex.Complex の場合に true
std.traits.isNumeric!T // T が組み込みの数値型の場合に true
>>628 こんなis の使い方あったのか
勉強不足でしたすいませんありがとうございます
やべえndsliceのライブラリstatic if多すぎて何が起こってるのか全然わかんねえ
1、dub.exeを実行すると、コマンドプロンプトが一瞬立ち上げってすぐに消えます。 2、コマンドプロンプトからdub init
1、dub.exeを実行すると、コマンドプロンプトが一瞬立ち上げってすぐに消えます。 2、コマンドプロンプトからdub init"プロジェクト名"でプロジェクト制作すると、 プロジェクト名のフォルダーが制作され、フォルダー内には、以下の階層ができる 1./source/ 2./source/app.d 3、ここで、"dub.jsonを記述する"とありますが、そのファイルが何処にも有りません。 dubの設定及び使用方法教えてもらえませんか。 Win10、dmd.2.071.1.windowsです。よろしくお願いします。
実行するとコマンドプロンプトが一瞬立ち上がってすぐに消えるのって dub.exeをエクスプローラからダブルクリックした時とかの挙動じゃね? ちゃんとコマンドプロンプトからdub init
気の利いた IDE が作ってくれるかもしれんけど
そうでないなら自作
https://code.dlang.org/package-format?lang=json まあ実際はどっかのプロジェクトから持ってきて修正して流用くらいじゃないの
まず、Windowsのロゴがあるキー( 田 )を押しながら、Rを押してください。「ファイル名を指定して実行」ウィンドウが開きます。 次に、cmdを入力して、Enterを押してください。
1、コマンドプロンプトからdub init"プロジェクト名"Enter 2、Package recipe format (sdl/json) [json]:このようになり、 Package recipe format (sdl/json) [json]:json ↑これ入力 3、Enterキー連打していくと、 Name [test]: Description [A minimal D application.]: Author name [user]: License [proprietary]: Copyright string [Copyright ツゥ 2016, user]: Add dependency (leave empty to skip) []: Successfully created an empty project in 'C:\Users\user\test'. Package sucessfully created in test ↑このようになり、プロジェクト名のフォルダー内に"dub.json"が制作されました。 4、しかしながら、"dub.json"に"dependencies"が無く、ぼちぼち格闘中です。 プログラム歴0の初心者には敷居が高いですね^^;
↑これ入力←この位置が少しずれていますので、書き直しました。 Package recipe format (sdl/json) [json]:json ←これ入力
いやいやいや プログラム歴0の初心者が dub init 使うってどんな状況よ 最初の一歩から間違ってるとしか
あれ、今は普通のアプリ開発でもビルドツールに dub 使うんだっけ? やったことないな
たしかにD言語ってコマンドラインの文化に慣れてないと厳しいな。ってか大体の言語がそうだが
dependencyは最初はdub.jsonに書いてないけど、手入力したら認識してくれるから、
>>636 を参考に自分で手入力するといいよ
コマンドラインの文化に慣れてないと違和感感じるかも知れないけど、この手の設定ファイルは最初は何も書かれてないから項目を自分で書いていくのが定石
ってかdubのライブラリ使わないならdependencies 書かなくていいから最初はdependencies 書かなくていいよ
>>641 某イクサゲームをやっていまして、10万円金くじ引いても天なるものが1枚しかでなくてwww 自分でゲーム作ったほうがいいんじゃね!っと思い立ったのが吉日でして。 >>643 ゲーム用のライブライ追加してぼちぼちやってみようかと思ったのですが、 ズッコケすぎて全然前に進みません。^^; dmdダウンロードして4日目くらいですがw ちなみに、"プログラミング言語D"とゲーム開発関係書籍2冊ほど手元に置いてますけど 最初の一歩目で迷子になってます、、、。
1、"dub.json"に下記を追記しました。 "dependencies": { "dgame": "~>0.6.4" } 2、C:\Users\user>dub build Enterキー Neither a package description file, nor source/app.d was found in ↑このようになります。 app.dに何のために、どんなソースを書くのかわかりません>< よろしくお願いします。
dlangerの人口減らしたくないし取っ掛かりの部分だけナビゲートしちゃる
dub initによって作られたsource/app.dには
コンソールに文字列を出力するコードが最初から書かれてるから
そっから自分で動かしたいように書き換えるのが通例
dependenciesは
https://code.dlang.org/ のリストにあるパッケージが必要な時に書く
これで何言ってんだか分かんなかったらdub.jsonは弄らないで最初のままでおけ
てか dub(ビルドツール)の前にdmd(コンパイラ)の使い方を覚えるほうが先だね
そもそも言語仕様も標準ライブラリ(phobos)も知らん段階だろうから
main.dを新規作成してエディタで開いて
std.stdioをimportしてmain関数内でwriteln関数を使って
HelloWorldをコンソールに出力するコードをmain.dに記述して
コマンド
レス本文にダブルクォーテーションが入ると文章途切れるのか
(
>>646 の途切れた部分)
main.dを新規作成してエディタで開いて
std.stdioをimportしてmain関数内でwriteln関数を使って
HelloWorldをコンソールに出力するコードをmain.dに記述して
コマンド dmd main.d でコンパイルするとこからはじめようか
新しいプログラミング言語に触れるなら↑が本来の最初のステップになる
>>646 助言ありがとうございます。 HelloWorldの門は一番最初にくぐりました。 レス文見てたら、dubの使い方を勘違いしてたみたいでした。 最初は任意のライブラリを勝手にダウンロードし、dmdにサインイン。 その後自由にライブラリが使えるものだと思っていました。 違う方法でライブラリが使える方法を探ってみたいと思います。 レスをくれた皆さんありがとうございました。
「D言語は2番目に覚えるべき言語」とか言うけど、「ゲーム作りたい」という動機だと、もっと、かなり順位下がる気がする。 ABA GamesさんからD言語入った身で言えたギリじゃないけど。 短い期間で出力を得たいならJavaScript(かそのトランスパイラ)おすすめ。 コントローラからの入力がまだ標準化されてないかもしれないけど。 というか俺が思ってる某IXAゲームもクライアントサイドはJS+WebGLなのでは? 7〜8年前だったらActionScript推したけどなー。 あ、やる気に冷や水かけるつもりじゃないですよ。言語の習得は平行してできるので、どっちもやるとイイよ!
DMDScriptってこの先生きのこれるの? 例えばreadme.txtのMain Goalのリストにも載ってない64bit対応とかする目あるのだろうか?
Releaseビルドで作られたexeファイルには、開発環境由来の個人情報は含まれますか?
hello, worldをダンプしてみたけどPhobosのシンボルが読めるからまあ
D言語が使われているであろうこととか
>>655 がマゾ豚であることとかがわかる。
幼女>犯罪に使おうとかキモいこと考えてないでさっさとDちゃんの抱き枕相手に腰振る練習してなさいよ!このブタッ!
>>656 犯罪なんて考えてないです><
ネットで公開したとき、特定につながる情報が入ってないか気になっただけですよ。
あと、マゾ豚でもないです><
My Documents以下で開発してて、デバッグ情報にあるフルパスからアカウント名が……って話だな
templateを使ってループをunrollしたいと思ってるんですけど、うまい方法はないでしょうか? static ifならぬstatic foreach的なものが欲しいです。
レンジの先読みとか save の方が現実的じゃないの
>>662 レンジの先読みっていうのは、1ループで例えば4要素ずつ回すとかするやつですか?
saveはよくわかりませんでした。
templateでは無理なんですかね?
タプルをforeachするときは静的に展開されるよ import std.stdio; template T(P...){ alias P T; } alias MetaArr = T!("a", "b", "c"); void main() { foreach (v; T!(0, 1, 1, 2)) { writeln(MetaArr[v]); } //foreach (v; [0, 1, 1, 2]) { writeln(MetaArr[v]); } // error } テンプレート再帰を使って便利なやつ(iotaとか)を作るとよし。 std.metaにタプル操作テンプレート群がある
せっかくAliasSeqって名前がついたんだから使ってやろうぜ
公式ももうタプルの名はtypecons.tupleに譲ろうって感じだし、せめて静的タプルとか
https://dlang.org/tuple.html >>664 なるほど、タプルを使うとstatic foreachみたいなことができるんですね。
>>665 型タプルの名称が変わってたんですね。
assert(RegexMatch!string().empty,
質問です C# なんかだとジェネリクスの変性を指定できて、たとえば Base <- Derived のとき List<Base> <- List<Derived> になる、つまり List<object> a = new List<string>(); ってできたと思うんですが、こういうのって D言語だとどう書けばいいんでしょうか opCast を使う?
>>670 テンプレートの範囲を拡大させることで実現する。
しばしばmain直下まで汚染されるが気にしない。
import std.container, std.traits;
void foo(A)(A a) if (is(A : Array!B, B : long)){}
void bar(A)(A a) if (isInstanceOf!(Array, A)){}
void main()
{
auto a = Array!int();
foo(a);
bar(a);
}
そういや最近ハマったんだけど auto x = (int a) => a; auto y = (int a) => { return a; }; この二つって型が違うのね 初めて知ったわい
>>678 2つの記法を混同してたのかな
(int a)=>a に対応するのは (int a){return a;}
(int a)=>{return a;} は (int a){return {return a;};}
>>679 そうそう
javascript なんかと混ざったのかも
>>683 まじかよ朗報
---
std.datetime.benchmark!func(10_000)[0].to!Duration.writeln;
---
>136 ホシs and 8 hnsecs
∴Windowsはクソ
μ(マイクロ)がマルチバイトになってて化けるやつだな 俺も前から変えてほしいと思ってるけど
クリスマスプレゼントにこういうのが欲しい。 struct FatStruct { Object obj; void opAssign(headconst ref FatStruct rvalue) { obj = rvalue.obj; } } 1. refで修飾された引数専用のオプション修飾子で、 2. mutableな変数にcastなしで代入可能で、 3. 「参照とってるけど、このメソッド内では変更を加えないよ。」ということをcallerに伝える。 ものクレクレ
なんかRustがやけに元気だけど、D言語って消えていくの?
もう戦力外 せめて Julia 以上に使えないとな
ANSI Cみたいに規格化できなかったのが致命的だったね
ndslice が deprecated に… 面白そうだったのに残念
リリースサイクルが合わないから dub repo に移すと言ってた dub もほぼ公式だから問題あるまい
もうちょっとdubで成熟させてからexperimentalにぶち込んでもよかったよね、ってことだと思ってる
メタプログラミングが必要な複雑さで高速なバイナリが欲しくてベクトルの計算が必要ならDって良い感じな気がしてきた
>>684 いつの間にか直ってる!? と喜びかけたが
std.datetime と core.time で不揃いというタチの悪い結果ががが
2.074.0 それと入れ違いに DMD バックエンドの権利問題が解決して オープンソースになった
ウェブスクレイピングがしたいんですけど、おすすめのライブラリはありますか?
もしかしてVisualDのプロジェクトはリソースエディタ使えない感じ?
クラスのメンバ変数をファイルに保存する一番手軽な方法は何になりますか?
自己解決。 std.csvとかstd.jsonあたりか。
std.xmlはいつまで非推奨なんだよ 作り直すならはやくやれ kxmlいつのまにか通らなくなるし
xmlはガチで実装しようとすると仕様のデカさ半端じゃないしな 周辺仕様(xsd,xslt,xpathくらいはほしいな)までやる気なのかもしれん。そうなったらかなり使えるはずだな!
std.net.curlを使ってサーバーと通信しています。 サーバー側は、エラーが発生した場合、エラーの詳細がJSONで返信される仕様なのですが、 std.net.curl.CurlException@[中略]\phobos\std\net\curl.d(1014): HTTP request returned status code 404 (NOT_FOUND) という例外が発生してしまい、JSONが受け取れません。 どうすればいいのでしょうか?
std.json.JSONValueの値がたまたま整数(1.0のことを1と表記されてた)場合にfloatingを呼び出すと例外が発生するんですけど、 何か回避方法はありますか?
すぐ気が付きましたけど、stringにしてからconvでいいか・・・
VSCodeにcode-dじゃないほうのD Language拡張入れてみたけど補完とかもろもろが効かない・・・ 誰か使っている人いたら助けて settings.jsonは以下の通りです { "d.dub": "/usr/local/bin/dub", "d.tools.dcd.client": "/usr/local/bin/dcd-client", "d.tools.dcd.server": "/usr/local/bin/dcd-server", "d.tools.dfmt": "/usr/local/bin/dfmt", "d.tools.dscanner": "/usr/local/bin/dscanner", "d.tools.dfix": "/usr/local/bin/dfix" }
2.076.0 beta で static foreach が試せるぞい
ちょっとしたexe作るにはDが楽で Pythonも楽だけどexe化するとデカイし
ちょっとしたexeならC#じゃね? monoは触ったことないからLinuxでの事情は知らんけど、Winに限ればあれほど楽なのはない
ちょっとしたexeで.NETとかないわーと思ったけど、GUIならまあしょうがないのか 人によってちょっとしたexeの範囲も違うんだな
VisualD残念過ぎるな エクスプローラからのフォルダやファイルの管理がゴミすぎる 見た目通りにフォルダが出来てないし、どこにファイルが作られるのかもわからんのがやばい。 まずはこういう基本的なことからまともに作ってけよ。
ちょっとしたってのは メモ帳やviで書けるレベルの100行にも満たないって レベルだったんだけど・・・ IDEを使うレベルは ちょっとしたじゃないイメージ
基本的にWindowsユーザーは作業用VisualStudioを常時開いてるからな。 ちょっとした作業は適当にC#で書いてそのままVisualStudioから実行してる。 実際にはexeを作ってすらいない。スクリプトを書いてるような感覚で使てる。
いや結構そういう感じだわ俺 実行するとたまに結果が微妙に違うなと思ったら、普段VS上からデバッグバージョン実行してて、リリース版上書きするの忘れてるだけだったり
質問はここでいいですか?
Windows で DLL を作ろうとしています。
https://wiki.dlang.org/Win32_DLLs_in_D を見てやってみましたが、コンパイルできず、LNK1561 になります。
dmd -m32mscoff -ofx86\test.dll dllmain.d test.def
dmd -m64 -ofx64\test.dll dllmain.d test.def
リンカが MS のものを使っているためこのエラーが出ると思うのですが、
エントリーポイントをどのように指定すればよいのかわかりません。
わかる方ご教示いただけませんでしょうか。
DMD のバージョンは 2.076.0、VS のバージョンは 15.3.4 です。
defなしでも同じ結果になりました: LINK : fatal error LNK1561: エントリー ポイントを定義しなければなりません。
-shared で 32bit、64bit とも作成できました。 ありがとうございました。
dmd2\samples\d\mydll\build.bat には入ってなかった(戦慄) -shared って割と最近の変更だしな
これでGUIアプリ作るならウィジェットはナニを使えば良いんだー
やめとけ と一蹴したいところだが、あえて勇者に DlangUI を勧めてみよう
ファイル、フォルダの命名規則がクソすぎる 別に無視してもかまわんだろうけど
https://github.com/Dgame/Dgame クソ命名規則を無視している優良プロジェクト
みんなもクソ命名規則は無視しよう
private this() だけでコンパイル通るのが糞だわ。 {}が無いのに。 ライブラリ作った時点では何もないのに リンク時にエラーとして出てくるとかやめれ。
単体テスト書いてそれを通すまでがライブラリ作成ですよ
連想配列に環境依存のバグがありそう 使ってるクソライブラリが端末によってエラーになるし糞かよ
2.077.0 テンプレート使うと修飾名がありえないほど長くなるという昔からの問題が改善された ライブラリとか一通り注意すべし
あれはGC使いたくない&ランタイムのデカさが気にならない巨大アプリ特化みたいなところある Dの対抗はgoとかnim
システムプログラミング言語なのでアプリ特化ってことは無いよ 下層も上層も両方いける
スレ違いかも知れないが、D言語初心者だけど質問しても良い?
D言語に関する質問はどこのコミュニティがオススメですか?
stackoverflowもteratailもあまり活発ではなさそうなので
D言語のエラー・バグ・問題の解決方法|teratail
https://teratail.com/tags/D%E8%A8%80%E8%AA%9E 新着の 'd' 質問 - スタック・オーバーフロー
https://ja.stackoverflow.com/questions/tagged/d >>781 rustは巨大なランタイムとツールチェインがネックになって
ガチのシステムプログラミングには使えないと踏んでる
あと小物にも向かない。lsやechoみたいなコマンドが何MBもあったら嫌だろう
それってコンパイラが進化してもどうにもならんことなの?
>>788 lsやechoをrust,d,c++,go,swiftで書いて比較でもしたの?
rust はダイナミックリンクすれば小さくなるよ。
実際のとこは知らんがしばらくRust追っててランタイムが巨大とか初めて聞いたわ 試しにいくつかreleaseでビルドしてみたが大量のcrate使ってるやつは10MB超えてて 少なめの奴は300KBくらいだった まあそりゃライブラリコミコミなら大きくなるわな
ま、スタティックリンクで数kbからにならないとCの置き換えは不可能
C++を駆逐すると思っていた時期が私にも有りました
標準ライブラリの関数の名前の付け方がJavaっぽくて嫌なところ以外は好きだよDくん
2.078.2
dwt もアップデートされたらしいぞいぞい
>>800 Win なら Visual D
2.079
新機能大爆発なのに人がおらんぞー
そういえば公式の D Tour に日本語訳ついててのけぞった
https://tour.dlang.org/tour/ja/welcome/welcome-to-d >>802 Tour のインストールしましょー!のページで 2.074 にリンクされてるのを見てしまった
(ノ∀`)アチャー
いやだってもうオワコンだろこれ というか始まってもないというか
個人的に00年代前半の頃はC/C++後継として期待してたんだけどな なにやっとんねんと言いたい 勿体無い
聞こえるぞ D3 を唱えようといううぉるたんの鼓動が…
Rustやったことないけど どうせ綺麗なメタプログラミングパズル解いてホルホルしてるだけで終わるだけの 実用的じゃない言語だと思う。 Caml書いてた俺だからわかる。
C/C++の後継は完全にGoにもってかれたね うぉるたんはどう考えてるのか知らないけど
goroutineが有効な用途ならともかく それ以外はD言語のほうが遥かにいいと思うんだけどなあ。何が命運を分けたのか
rubyの埋め込み文字列みたいなのできる? "hoge=#{hoge}" みたいなの
>>815 頻繁に変わる言語仕様も問題と言えば問題だけど
やっぱ一番はライブラリっつーか周辺やろ…
Dはクラス使えばいいのかと思いきや構造体推奨ってのが初見殺しすぎる
>>820 推奨ってことはない
俺はほとんどクラスしか使わないしGC上等
まあクラスの派生とか皆無だし
vtable も邪魔に思えてきたけどw
それを言うならD言語だってC++の後継にはなんないわけで そしてDとgoは割と被ってる。方向性は逆を向いててもターゲットとしている領域が
goって他のVM使わない静的言語と何が違うんだよ。 実行速度が早いと言われているOCamlと何が違う?
Cとの競合をはっきり掲げる Zig とかいう LLVM 言語が出てきてるな
https://ziglang.org/ Cのヘッダをそのまま読み込む?とかすげーこと書いてる…
まだ情報少ないし俺は調べないけど興味ある人よろ
いい言語ですね! 前に進めてください!! (感涙)
いつの間にやら契約プログラミングのbody使う場面でdoを使えって話になってるな
DがしっかりしてればGoだのRustだのでてくる余地はなかったのに
所詮はコミュニティベースの開発だからな GoogleやMozillaみたいな企業ベースに対抗するのはコアメンバーのモチベーションや運に依存する そういう意味ではRubyやPythonってすげーな
Dで作ったWindowsコンソールアプリで標準出力に文字列が流れ続けてるところに 例:while ( true ) { writeln( "hoge" ); } クリックで文字列選択したあと右クリックすると Access Violationで落ちる現象どうにかならんもんか writeだろうがlogger.logだろうがprintfだろうがputsだろうが落ちる VCのCコンソールで作ったコンソールアプリだとこんな事起きないのに これの対策がtry-catchでErrorクラスをトラップとか馬鹿げてる
落ちない場合もあったんで最小コードを探ってみたところ これ↓だと>>837 の操作をしても落ちなかった import core.sys.windows.windows; import std.stdio; void main() { SetConsoleOutputCP( CP_UTF8 ); while ( true ) writeln( "ほげ" ); } 出力が"hoge"だとSetConsoleOutputCP呼び出しの有無に拘わらず落ちる SetConsoleOutputCPを呼んでいない場合は出力の内容に拘わらず落ちる SetConsoleOutputCPを呼んでいる場合は出力が"ほげ"だと落ちないが"ほげhoge"だと落ちる どうしてそんな事になるのかワケワカメ [[[ ][ ]]]\[[]] [[[]]]],[[[ [][] ]
>>837 >>839
再現しませんでした
Windows7(32bit)
DMD32 D Compiler v2.074.1
LDC - the LLVM D compiler (1.3.0): based on DMD v2.073.2 and LLVM 3.9.1
試したコンパイルコマンド
dmd -w -m32 main.d
dmd -w -m32 -debug main.d
dmd -w -m32 -O main.d
ldc2 -w -m32 main.d
ldc2 -w -m32 -O main.d
試したコード
import std.stdio;
void main() {
while (true) {
writeln("hoge");
}
}
>>842 すまん、こっちの環境はWindows10(64bit) 、DMD32 D Compiler v2.079.1 だわ
でも俺の環境だと2.074.1でコンパイルしても落ちたわ
-g -debugオプション付けて
>>842 と同様のコードで例の手順やって出るエラーログが以下↓
object.Error@(0): Access Violation
----------------
0x00425935 in write
0x00421A6D in fflush
0x004028A0 in @safe void std.stdio.File.LockingTextWriter.put!(char).put(char) at D:\develop\dmd2\windows\bin\..\..\src\phobos\std\stdio.d(2788)
0x00402263 in @safe void std.stdio.writeln!(immutable(char)[]).writeln(immutable(char)[]) at D:\develop\dmd2\windows\bin\..\..\src\phobos\std\stdio.d(3582)
0x004021EC in _Dmain at D:\library\projects\d\d_error_test\main.d(6)
0x00402C5B in D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZ9__lambda1MFNlZv
0x00402C1F in scope void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll()
0x00402B20 in _d_run_main
0x00402908 in main at D:\library\projects\d\d_error_test\main.d(7)
0x00420775 in mainCRTStartup
0x75538654 in BaseThreadInitThunk
0x774E4B17 in RtlGetAppContainerNamedObjectPath
0x774E4AE7 in RtlGetAppContainerNamedObjectPath
少々遅くなってもいいなら writeln() のたびに stdout.flush() してやるのが簡単 以前から終了時のバッファ排出でバグがあったけど 去年くらいに Writer 系内部処理を何度も"改善"してたと思う
stdout.flush();で問題は解決しなかったけど -m64オプション付けてコンパイルしたら落ちないようになった WOW64を過信し過ぎてたわ
[[[ [ "[]" ]]] [] [][[[ [] ]][]
Dカンファレンス2018 in ミュンヘンのライブ配信
VIDEO 日本電子専門学校で非公式Dカンファレンスやったのがもう10年前か…
ポトペタどころか バージョンアップにしっかり追随して安心して使えるGUIライブラリないよ
インスタンス作るまでオーバーライドしてない抽象メソッドがあってもエラーにならないってわけわからん さっさと教えろよ
-betterC が使えるようになってから出来ることが格段に増えたな 組み込み周りはもちろんのこと、DのコードからWebAssembly吐ける日が来るとは思ってなかった
D言語も大分落ち着いてきた頃合いだしそろそろ見直される時代が来てもいいのよ? (なんか最近deleteが非推奨になったような気もするが)
競プロとD言語は相性いいと思うんだけどな 俺も競プロでD言語使ってるし
変数への再代入禁止を意味するfinalがいつの間にか使えなくなっとるやん コンパイラに促された通りconst付けてもnot callable using a `const` objectって怒られるし ちゃうねん、Javascriptのconstみたいに事故防止に再代入のみを禁止したいねん 廃止要素に関してはどうも知識のアップデートが追いつかん
D言語はもう終わりなんだよ というか始まってもないというか
final変数がいつの間にか廃止してた問題は scope変数への再代入がいつの間にかコンパイルエラー出るようになってたことで解決したわ スコープ内限定で再代入禁止でスコープを抜ければ変数の寿命が来る、ってことでscope変数で要件を満たせる
>>862 流産というか仕様変えすぎて育つ前に首切ってる感じ
aliasがいつの間にか構文変わってたのは知ってたけど typedefもいつの間にか消えて使えなくなってるのかよ しかも従来のやり方と比べて代替手段がクソ面倒
MDN並みに日本語ドキュメントが最新に追いついていて 現行仕様、廃止仕様がきちんと整理されていないとツライな ちょっと離れてるだけで記憶に残ってるD言語とはまるで別言語になってる
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 KUKID
change log は見やすくなってるよ
時々重要な変更がすっぽり抜けてるけどな
言語レベルの廃止も一応リスト化されてるよ
https://dlang.org/deprecate.html 今気づいたが2ヶ月毎のリリースって明言されてるな
minor release とかふざけたこと書いてるけど
>>871 そのページ初めて見るんだけどどっから飛べるんや…
>>871 そして昔確かにあったはずのfinal/const/invariantの
(
https://digitalmars.com/d/final-const-invariant.html )
再代入禁止を意味するfinal記憶クラスの仕様は何処へ消えたんや…
文句あるならチミたちがD言語開発に直接関わりなさいな
いつの間にか使えなくなってて しかも廃止仕様リストにも載ってなきゃ どこに消えたんだってのは普通に抱く感想だよ
少なくとも俺がいじり出した10年くらい前には既にそんな機能なかった
当時穴が開くほど読んだもんだなぁ
https://web.archive.org/web/20071011061638/http ://www.kmonos.net/alang/d/final-const-invariant.html
次バージョンから来る契約構文の追加は楽しみだ int fun(ref int a, int b) in(a > 0) in(b >= 0, "b cannot be negative") out(r; r > 0, "return must be positive") out(; a != 0) { // ... }
Dってnull安全性の機能は今のところ標準では用意されてないカンジ? template使って実現すること自体は簡単そうだけど
std.conv.to!intでstringからintに変換しようと思ったんですけど、 stringで表現される数字が全角でした。 こういう場合、どうすればいいですか?
要素に対し'0'引くだけでint値を得られるし '0'引いて'0'足せば半角数字の文字コード得られるし あとは煮るなり焼くなり
>>884 なるほど。
文字コードが連続してるからそういう方法あるんですね。
漢数字はテーブル用意するのかそれともi18nされてるのか
意味的に連続する文字の文字コードが連続してる保証ってないって話ではなかったっけ
tr関数でASCIIに変換すればいいんじゃね。 と思ったらハイフン'-'が厄介だった。tr(s, "0123456789+−", "0123456789+-");
RustスレでD言語は死に絶えたって言われて何も言い返せなかったわ…
むしろ更新が落ち着いた今こそ復権のタイミングじゃないか というか他の言語だって追加に廃止に非推奨と仕様コロコロ変わってて Dのこと言えないじゃないか
D->LLVM->ネイティブとかさ アプリのフレームワークで共通の鰌で Windows,Android,OSX,iOSとかで動くようにならないかな
D言語でCGI作る場合POSTデータってどうやったら取れますか?
CGIならサーバーの設定次第で勝手にコマンドライン引数なり標準入力なりに入ってくるはずだろ D側で考えることは特にない
むしろPOSTは普通に取れてた 取れないのはGETの方だった まぁ結局getenv("QUERY_STRING")で取れたけど DってCみたいにポイントをそのまま配列としては使えないんですね
>DってCみたいにポイントをそのまま配列としては使えないんですね 試してみたら普通に配列のように使えたけどどゆこと? import std.stdio : writeln; import core.stdc.stdio : putchar; char[] text = "Hello World".dup; char* pHello = text.ptr; char* pWorld = &text[6]; // 添え字アクセス for ( int i = 0; i < 5; i++ ) putchar( pHello[i] ); // 長さ付与 writeln( pWorld[0..5] ); 出力結果: HelloWorld
ようやくDMD2.081.0のリリース版来たやんけ
C言語みたいな化石言語使い続けないといけないの早くなんとかしてくれ
1年以上ほったらかしだったがフォーク版なら特に問題なかった
https://github.com/JesseKPhillips/dfl ここが最新メンテナだと思ってたが更新停止を明言されちまったな
DWT が標準GUIとして継続してくれればいいんだが
別にD言語に限った話でもないけど DelphiやQt DesignerやXcodeのリソースファイルを読み込む部分だけ書けば どんなGUIライブラリでもポトペタモドキはできると思うんだ 実例は見たことない
今日本で最もアツいD言語コミュニティって何処なん? 15年前はここだったけど
自分もコミケでD同人買って読むまで知らなかったけどDUBっていうD言語のパッケージマネージャあるんだよな
http://code.dlang.org/ vive.d は希望の星やで DUB もそこが作ってるし
ごく最近だよ gccの公式リポジトリにgdc一式が入った
入るのはだいぶ前に決まってたけど実際に入ったの? だとしたらめでたい
gcjが外れたからgc付き言語が無くなってチャンスではあったのだけれども goが先に入っちゃって時節を逃した感はどうしても
ついに入ったのか しかしGDCはバージョンアップが遅れに遅れてほとんど相手にされないレベルだったけどどうなったのかしら
風評被害甚だしい
【接客】クレーマーの餌食になる人は「この言葉」に注意 モンスタークレーマーだけでなく「ふつうのお客様」をも怒らせる“D言語”とは
http://2chb.net/r/editorialplus/1539062055/ でもその「D言語」はマナー屋の造語なんですよ ですからこのスレとは関係ないんです。だってここのD言語はうぉるたん作ですもの
CPUとメモリをたっぷり使うプログラムを書いたんですけど、実行中、下記のエラーが発生してしまうことがあります。 core.exception.OutOfMemoryError@src\core\exception.d(693): Memory allocation failed タスクマネージャを見ながら実行してみると、多い時でメモリを1700MBぐらい使っていて、上記のエラーが出たときは1100MB程度でした。 PCのメモリは8GB積んでいて、プログラム実行中も2〜3GBぐらいは空いていました。 未使用のメモリがまだ残っているのにアロケーションに失敗するのはどうしてなんでしょうか? そして、何か回避方法はありますか?
大きな領域を一度に確保しようとして 空き容量には余裕があるけどその領域を確保できる隙間がないから失敗したとか?
たぶん 32bit やろ 64 bit でいいならそっちにしたほうが無難 GC も肝心なときにコケる印象 まさか無いとは思うけど仮想メモリ無効にしたりしてないよね
D言語のGCってコンパクションやってないんだっけ?
>>934 なるほど、そういう可能性もあるんですね。
>>935 32bitのdmdを使っていました。
4GBより大きいメモリを積んでる場合、32bitだと使えない場合があるということですね。
64bitを試してみます。
>>929 のDLang Tourっての見たらVibe.dの事も普通に載ってるのな
興味はあったけど今まで拾い読みする程度の情報くらいしか知らなかったけど
これを機にやってみようかな
>>937 32bitプロセスならプロセスが使える仮想メモリの上限は2GBだからね
これはOSの制限なので、しょうがない
コンパイラを変えるんじゃなくてビルドモードを変えるんやで ( -m64 ) デフォルトの GC はゴミだが 64bit ならまぁまぁ使えると言ってるんやで
インストール版でインストールしたdmd2.083で適当なコードをビルドすると"Access Violation"とだけエラーが出て、 ビルドが完了しないんですが、原因は何なんでしょうか? 上記のエラーはDebugモードの時のみで、Releaseモードの時は正常にビルドできます。 またこのコードはdmd2.071ではDebug、Releaseともに正常にビルドできました。
>>944 import std.stdio; void main() { writeln("Hello World!"); } これをビルドすると例のエラーになります。 >>945 win10です。 IDEはVS2013を使いました。 >>947 厳しいですね。
https://qiita.com/sfujita/items/55dfd9203dffe05598c6 一番下のsc.iniで上書きして、hello.dとBuild.batをコピペして、
Build.batを実行したら、正常に動作しました。
VSの方で何か問題があるのかもしれないです。
去年くらいから VS のインストール情報を検索してリンカやSDKを自動選択する機能がついた VS2013 は古すぎてマズイ気がする
VS2017のインストールとdmd2.083インストーラ版のインストールを行い、Hello World!をビルドしてみましたが、 hoge.pdb: cannot add symbols to module, probably msobj140.dll missing というエラーが出ました。 $(VCINSTALLDIR)binと$(VSINSTALLDIR)Common7\IDEをエクスプローラで確認してみましたが、 どちらともmsobj140.dllはありました。 なぜエラーが出るのか全く分かりません。
私の環境では、Program Files (x86)\Microsoft Visual Studio 14.0にはありましたが、 Program Files\Microsoft Visual Studio 14.0にはありませんでした(全部で64KB程度しかない)。 sc.iniはProgram Files (x86)の方を参照するようになっていますが、32bit版のVSじゃ使えないんでしょうか?
>>948 のサイトの手順をやり直したら解決しました。
VSのインストール時に、VisualC++に関するオプションをいじった(5GBぐらい大きくなった)のが影響したのかなぁ。
つーか
>>948 の記事が古い
2.079以降は64bit版ビルドするのにVC++もWindowsSDKも不要になってる
llvm のツールチェーンが使えるようになったんだっけ でも本格的にやるにはデバッガがあったほうがいい
12月1日のQita Advent Calendarが何かしらの参考になるかもしれないね まだ内容は当然わからないけど
無事1日が終わりました 本当にありがとうございました
Linuxでvibe.dやるならコンパイラどれ使ったらいい?
2.085 で Precise GC の試験実装が始まったのにお前らときたら
>>958 公式でいいんじゃね
ldc の追随も凄まじいけど
std.conv.toから投げられた例外をThrowableでcatchしてtoStringとwritelnでエラーメッセージを書き出すと、 関数呼び出しの経路とかソース上の行番号が表示されますよね。 それが、いろいろ改修してるうちに途中で途切れたようなエラーメッセージしかでなくなってしまいました。 原因わかる方いますか?
ascii以外の字が混ざってないか multibyteの不正な文字(1byte目だけあって2byte目が現れずに次のascii文字が並ぶとか)
>>961 main関数の中でto!uint("a")とやってみましたが、同じように途切れたエラーメッセージになりました。
std.conv.ConvException@***\src\phobos\std\conv.d(2267): Unexpected 'a' when converting from type string to type uint
----------------
0x00007FF77B85E400 in std.string.representation!(immutable(char)).representation at ***\src\phobos\std\conv.d(2271)
0x00000207C32A3000
スタックトレースは結構雑で何年もバグが放置されてる感ありあり そのへんを気にする人はデバッガを使うから OSやコンパイラ実装でも違う処理してるからそのへん書かないとだめよ Windows は新しめのバージョンで改善があったはずだけど
Win + 64bit (MSVC) と思っていろいろやってみたけど再現しない llvm 実装は動かしたことないからわからんちん >Windows は新しめのバージョンで改善があったはず これは関係なかったぽい
windows は git bash を cmd の代わりに使ってる 快適すぎる
>>963-964 Windows10、dmd2.083.0です。
VSにVisualDを入れて使ってます。
今年はロンドンでカンファレンスやるみたいね
5月8日〜5月10日までカンファレンス、11日にハッカソン
https://dconf.org/2019/index.html 2.086 では import std; 一発で Phobos 全部入りができるらしいぞ
gcc9.1リリースされgdcが含まれるようになったね。
>>971 今までモジュール処理がクソだったから何年もかけてバグ潰してきたんやで
char[]をstd.algorithm.sorting.sortでソートしようするとコンパイルエラーになるんですけど、 辞書順にソートしたい場合、どうやればいいですか?
1文字の文字列の配列という扱いをしないといけないのかー
なるほどその手があったか 全く使わないから存在そのものを忘れてた(一応 wchar までは試した
32bit 対応すらマトモにできてるとは言い難いのに
C C++ D Go それぞれのメリットデメリットを教えてください
俺は案外gccに入ったからDはそのうち人気出るんじゃないのかなと思ってる。使わないけど。他の言語より明かに素直でとっつきやすいと思うから。
知らんけど/メリット/デメリット C/小さい・速い・枯れている・ライブラリ豊富/古い・手間掛かる C++/betterthanC/カオス・遅い D/小さい・速い・素直・ガベコレ/利用者少ない? Go/ガベコレ/でかい・癖強い
Rust > D > Go > C > C++ こんな感じか
まもなくここは 乂1000取り合戦場乂 となります。 \∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!! ,,、,、,,, /三√ ゚Д゚) / \____________ ,,、,、,,, /三/| ゚U゚|\ ,,、,、,,, ,,、,、,,, ,,、,、,,, U (:::::::::::) ,,、,、,,, \オーーーーーーーッ!!/ //三/|三|\ ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧ ∪ ∪ ( ) ( ) ( ) ) ,,、,、,,, ,,、,、,,, ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧ ,,、,、,,, ( ) ( ) ( ) ( )
-curl lud20250119214913caこのスレへの固定リンク: http://5chb.net/r/tech/1422155249/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像 ↓「D言語 Part34©2ch.net YouTube動画>3本 ->画像>2枚 」 を見た人も見ています:・DQ10・11リアリティ齊藤が公開生放送の場でSwitchに対して苦言 ・【iOS】VOEZ総合 part5【Android】 ・【DMM.R18】アイオライトリンクR Part43 ©bbspink.com ・【DMM.R18】LitGear(リットギア)part9 ©bbspink.com ・【DMM.R18】アイオライトリンクR Part20 ©bbspink.com ・【HONDA】フィット3 ガソリン車専用 Part10【FIT3】 ・【DMM.R18】天樹下のリベリオンガール X指定 part10 ©bbspink.com ・【愛知】酒を飲んで車運転し原付バイクと衝突か 大学生2人死傷させ知人の男を身代わりにした疑い 57歳女を逮捕 [PARADISE★] ・【DB】データベーススペシャリスト試験 Part58 ・【DMM.R18】AliceRe:Code-X アリスレコード Part16 ©bbspink.com ・【DMM.R18】天樹下のリベリオンガール X指定 part19 ©bbspink.com ・【DMM.R18】 迷宮探索ドラゴンプリンセス Part78 ©bbspink.com ・【DMM.R18】戦乱プリンセスG Part43 ©bbspink.com ・【DMM.R18】姫狩りインペリアルマイスターpart13 ©bbspink.com ・【VRAV】作品語りスレ30【バーチャルリアリティAV】 ©bbspink.com ・【Juice=Juice】稲場愛香ちゃん応援スレPart148【まなかん】 ・西武鉄道車両総合スレッド Part57 ・最強クリップボード拡張ソフトはこれだ!Part10 ・【海外BO】ハイローオーストラリアPart47【アフィ禁】 ・ハリルホジッチジャパンpart745 ・聖飢魔II PART134 (セットリスト・ネタバレOK) ・リラックスコンビニ 快活CLUB PART65 ・【PS4】リトルウィッチアカデミア 時の魔法と七不思議 Part1 ・パシフィック・リム Pacific Rim 91 ・【YouTube】関根理紗アンチスレpart19 【5.5頭身チビゴリラ】 ・南アフリカで「半人半羊」が生まれ、村人はパニックに(画像あり) ・【作家デビュー希望】ジェームズリッチマンヲチスレpart3【無職】 ・どうぶつビスケッツ×PPP ようこそジャパリパークへ専用 Part.2 ・ハリルホジッチジャパンpart753 ・【つばきファクトリー】小片リサちゃん応援スレ Part54【りさまる。】 ・【箱1】TES V:SKYRIM スカイリム エロネタ part48 ©bbspink.com ・北島達也の奇跡体験!アンビリバボー【part4】 ・シノアリスのんびりスレッド【SINoALICE】 Part.80 ・【エリック】Eric Clapton Part 28【クラプトン】 ・【年齢サバ読み】戸田真琴part7(ヤリマン女】 ©bbspink.com ・【B.LEAGUE】リンク栃木ブレックスpart18【BREX】 ・【箱1】TES V:SKYRIM スカイリム エロネタ part20 ©bbspink.com ・シノアリスのんびりスレッド【SINoALICE】 Part.118 ・シノアリスのんびりスレッド【SINoALICE】 Part.50 ・【箱1】TES V:SKYRIM スカイリム エロネタ part51 ©bbspink.com ・幻獣契約クリプトラクト Part156 ©2ch.net ・【PS4/PS3】テイルズオブベルセリア part121【TOB】 ・【プロスピ】プロ野球スピリッツA part413 ・NFL 2022/2023 week6 Part2 ・【無能運営】テイルズ オブ アスタリアpart313【Klab】 ・【宮城】仙台情報局Part338 ・【箱1】TES V:SKYRIM スカイリム エロネタ part44 ©bbspink.com ・【新宿】リトリートバーPart9.5(一時避難所) ©bbspink.com ・【プロ麻雀リーグ】Mリーグ Part1817 ・ランス10 part212 ©bbspink.com ・【PS3/PS4】テイルズオブゼスティリア【TOZ】part788 ・【元アイドリング!!!7号】谷澤恵里香 part15 ・リラックスコンビニ 快活CLUB PART51 ・新繁殖牝馬 サクラプリンセス Part372 ・【元N国党】さゆふらっとまうんど Part76【掣肘】 ・遊☆戯☆王VRAINS 第17話「完全無欠のAIデュエリスト」Part1 ・【スパドラ】THE BLACKLIST part13【ブラックリスト】 ・【無能運営】テイルズ オブ アスタリアpart359【Klab】 ・スピーカーケーブルおすすめ Part34 ・ポケットモンスターソード・シールド Part21 ・アトリエさくらpart15 ©bbspink.com ・シノアリスのんびりスレッド【SINoALICE】 Part.72 ・【頼りは】アトリエさくらpart13【おんぼろ】 ©bbspink.com ・ャtトリョナ Part.9 [無断転載禁止]©bbspink.com ・デジモンユニバース アプリモンスターズ 第40話 Part1 ・シノアリスのんびりスレッド【SINoALICE】 Part.65
04:13:54 up 26 days, 5:17, 0 users, load average: 43.87, 49.79, 53.71
in 0.11857914924622 sec
@0.11857914924622@0b7 on 020818