D言語 Part34©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
ノ ゚.ノヽ , /} ...
,,イ`" 、-' `;_' ' ..::::::::::::::...
,-、 _.._ ( (,(~ヽ'~ ..:::::::::::::::::::::::
)'~ レー' 〉 ヽ 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分
http://www3.nhk.or.jp/news/html/20160531/K10010540551_1605310509_1605310510_01_03.jpg
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 ミュンヘンのライブ配信
https://www.youtube.com/watch?v=HvqsUO77FGI
日本電子専門学校で非公式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言語”とは
https://rosie.5ch.net/test/read.cgi/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 (:::::::::::) ,,、,、,,, \オーーーーーーーッ!!/
//三/|三|\ ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
∪ ∪ ( ) ( ) ( ) )
,,、,、,,, ,,、,、,,, ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
,,、,、,,, ( ) ( ) ( ) ( ) このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 1733日 10時間 49分 0秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。