D言語 Part34©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>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にタプル操作テンプレート群がある ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる