D言語 Part34©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
あそこの一連のインターフェイスは「こんなん作ってみたんだけど〜」程度のもので
ほとんど使われてない
構造体テンプレートにしてコンパイルエラーが出ない程度に既定プロパティを補うのが主流
そのやり方なら 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にぶち込んでもよかったよね、ってことだと思ってる ■ このスレッドは過去ログ倉庫に格納されています