D言語 Part34©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2015/01/25(日) 12:07:29.52ID:gAd5OZDm
プログラミング言語 D (D Programming Language) について語るスレッドです。

■本家
http://dlang.org/ - 公式(英語)
http://www.kmonos.net/alang/d/ - 公式の和訳 (やや古いので注意)
https://issues.dlang.org/ - D言語バグ報告
https://github.com/D-Programming-Language - D言語開発リポジトリ

■Wiki
http://wiki.dlang.org/ - 公式Wiki
http://dusers.dip.jp/ - D言語友の会(日本語フォーラムあり)

■プログラミング言語D (TDPL: The D Programming Language)
Andrei Alexandrescu 日本語版
http://www.shoeisha.co.jp/book/detail/9784798131108

ソース貼付サイト http://dpaste.dzfl.pl/
<$><$> https://www.bountysource.com/trackers/383571-d-programming-language

■前スレ
D言語 Part33
http://toro.2ch.net/test/read.cgi/tech/1396145538/

■過去スレ、関連スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=D%8C%BE%8C%EA&;sf=2&all=on&view=table&shw=5000
2016/02/15(月) 22:47:40.09ID:obZmlxnC
>>431
mixin template loop(string s,r...){mixin(s); mixin loop!(r);}
mixin template loop(string s){mixin(s);}
2016/02/16(火) 16:56:10.74ID:qagv5yy3
信用は一度失うと取り戻すのは困難ってことさね

D言語について少しでも調べてもらえば今そうでないのはわかることだから、
D言語を知らない人がD言語に触れる機会を増やす・・・
つまりD言語で書かれた一般向けアプリがもっと出ればいいわけだ

よし!あとはまかせたぞ!
2016/02/18(木) 12:23:28.05ID:S96kZ0X7
もう Julia でいいような気がしてきた
手遅れかもな
2016/02/19(金) 13:09:30.63ID:Ap7HgcUx
http://www.tiobe.com/index.php/tiobe_index
少し人気出てきた
2016/02/19(金) 13:59:24.31ID:hw/X0Y/j
簡単過ぎて調べなくても判ってしまう言語だと人気が無いことになるな
2016/02/19(金) 18:48:50.77ID:3Pzm9drf
D言語って名前のイメージが悪くなっちゃってるからD++とかに変えよう
2016/02/19(金) 20:15:44.55ID:unMO5CFj
求められているのは D-
2016/02/20(土) 14:46:25.61ID:X13YwWkx
マイナスなんか要らないわ
2016/02/20(土) 16:07:27.61ID:WzAGBuRR
D#
2016/02/21(日) 10:34:55.98ID:zmvsu5mb
>>440
exeはnativeなDの足元にも及ばない
2016/02/21(日) 22:57:01.53ID:satROU6m
D未満はおっぱいと呼ばない
2016/02/22(月) 02:56:00.48ID:gsexe38f
D†
2016/02/22(月) 12:16:25.94ID:Y1bHL8fN
D<0
451デフォルトの名無しさん
垢版 |
2016/02/27(土) 03:16:45.72ID:GUJ5wO/X
iota(-10,1)やrecurrence!(q{ -n })(0)がintになるのに
sequence!(q{ -n })だけuintで負の値を使えないんですがこれって何か理由があるんですかね?
2016/02/29(月) 00:18:12.07ID:zsA7yhFD
>>451 ソース見た感じ、
recurrence!(q{-n})(0) は 0 の型とってる→int
sequence!(q{-n}) は -n の型とってる、ここで n の型は size_t → size_t
ってことみたい。
453デフォルトの名無しさん
垢版 |
2016/02/29(月) 07:53:56.99ID:9aTNra24
 alias compute = binaryFun!(fun, "a", "n");
 alias ElementType = typeof(compute(State.init, cast(size_t) 1));
で、nにcast(size_t)1を入れてsize_tになってるんですね
単に気になっただけなんですけど
2016/02/29(月) 15:44:30.93ID:iGEmA67j
配列の中の最大値を探すときって普通どうやるんでしょうか

enum arr = [3, 1, 4, 1, 5, 9, 2];

aliasSeqOf!arr.max.writeln; // 要std.metaなのと定数でないとダメ
arr.minPos!
2016/02/29(月) 15:52:25.48ID:iGEmA67j
なんか途中で切れた
minPosとか使ってるんですが、しっくりこなくて
2016/02/29(月) 16:26:00.44ID:VNz3PeoZ
>>454
std.algorithm使って関数型っぽく

arr.reduce!max.writeln;
2016/02/29(月) 22:57:05.78ID:6Vt2kK/P
リデュースリユースリサイクル♪
2016/03/01(火) 00:52:26.74ID:joyDtek2
LDC 1.0αでとる。
2016/03/01(火) 21:04:14.81ID:s5WMaGjg
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でエラーが出るのはどういう理屈なんですか?
2016/03/01(火) 21:12:38.53ID:oyuxQPKV
arr.lengthが右辺値を返すから?
2016/03/01(火) 21:23:46.68ID:CYOvNsDD
out が付いてるなら当然としか
2016/03/01(火) 21:26:20.10ID:CYOvNsDD
いや、ひょっとして length のセッターを呼んで欲しい…?
流石に無理なんじゃ
463459
垢版 |
2016/03/01(火) 22:02:04.13ID:s5WMaGjg
arr.length = 0とかできるから普通の変数と同じように考えてました。
hogeに渡す時に、ただの右辺値のuintとして評価されるってことですね。
2016/03/01(火) 22:18:28.05ID:BG2OG/pG
できてもいいとは思うけどな
内部的には一時変数が作られるとかで
465デフォルトの名無しさん
垢版 |
2016/03/02(水) 03:05:50.56ID:S8FWiipj
もしlengthをいじりたいなら深く考えず
void nobasu(T)(ref T[] arr) {
 arr.length ++;
}
とかでいいんじゃ?
466459
垢版 |
2016/03/02(水) 21:10:33.37ID:Py15QFNz
lengthをいじりたいというより、out引数を持つ関数を使いたかったんですよね。
なのでこうしました。
uint lenght;
hoge(length);
arr.length = length;
467454
垢版 |
2016/03/07(月) 16:09:07.92ID:KpyO6Zd7
>>456
reduce!maxか!
遅くなりましたが、ありがとうございました。
2016/03/07(月) 16:22:17.87ID:nbAKle/L
遅い、遅すぎる
時代は既に reduce から fold に変わろうとしているのに
2016/03/07(月) 17:38:25.23ID:hzTv2Fg2
とはいえまだマージされただけでリリースはされてないし
内部でreduce使ってるから無くなることはないだろうけどな
2016/03/07(月) 21:13:14.18ID:ZACCB8Ww
struct S { int[] arr; }
S s1;
...
S s2 = s1;

構造体のデフォのコピーコンストラクトを使った場合、メンバarrはシャローコピーされますよね?
ディープコピーしたい場合、コピーコンストラクタを書き換えるか、ディープコピー用のメンバ関数を書く方法が思いつきますけど、
もっと手軽な方法はないでしょうか?
2016/03/07(月) 22:22:23.50ID:hzTv2Fg2
前者はpostblitを指してるんだと思うけど、すでに十分手軽じゃね?
this(this){arr=arr.dup;}

ところでマニュアルによればpostblitは初期化時の話らしいけど、代入時にも呼ばれるのは何故だ
2016/03/07(月) 22:31:36.23ID:ZACCB8Ww
>>471
構造体なのでコピーコンストラクタじゃなくてpostblitでしたね。
this(this){arr=arr.dup;}を構造体ごとに書いていかないといけないのが面倒くさく感じました。
2016/03/07(月) 22:49:33.64ID:hzTv2Fg2
>>472
つまり1回書くだけで全ての構造体に一括して適用されるような方法を期待してる?
さすがに無い気がするし、むしろあったら怖い
せいぜいmixinして文字数削る程度じゃね
2016/03/08(火) 00:13:35.69ID:P+r5NzGC
>>473
自分で書くならtupleofとtraitでdupテンプレートを書いて
S s2 = s1.dup;
っていうのを思いつきました。
2016/03/08(火) 00:30:29.31ID:y3RNmON1
>>474 実装してみた。
http://dpaste.dzfl.pl/0464d5f310e6
2016/03/08(火) 00:43:55.17ID:P+r5NzGC
>>475
おお、仕事が速いですね。
2016/03/12(土) 05:14:08.80ID:/9wKb/bF
>>433
今更だけどありがとう、
そんなアタリマエのことを全然思いつかなかったw
CTFEすげー(今更)
2016/03/15(火) 00:58:06.47ID:sgjiEx6Z
VS2013とLDCでビルドしたら、
LINK : fatal error LNK1104: cannot open file 'legacy_stdio_definitions.lib'
というエラーが出たんですけど、原因は何が考えられますか?
2016/03/15(火) 01:02:28.11ID:zLB+iwEH
>>478
読み込むライブラリの場所の指定がおかしい
2016/03/15(火) 02:36:06.05ID:sgjiEx6Z
>>479
うーん、わからないです。
legacy_stdio_definitions.libがHDDの中にないし、ぐぐってもなんなのかよくわからない。
2016/03/15(火) 07:36:35.68ID:vxrFHeSb
>>478
デフォルトは VS2015 の設定だから
etc/ldc2.conf の該当行 を書き換えてくれってどっかに書いてあった

"-Llegacy_stdio_definitions.lib" とその前の行のカンマを消せばいい
2016/03/15(火) 15:54:15.40ID:sgjiEx6Z
>>481
ldc.confにlegacy_stdio_definitions.libはありませんでした。

色々、調べてて気づいたんですけど、LDCを使うにはLLVMもインストールしないといけないですか?
LLVMのバイナリは公開されていないみたいだし、ビルドしないといけないとなると面倒ですね。
日本語の解説サイトもなさそうだし難易度が高い。
2016/03/15(火) 19:09:38.41ID:vxrFHeSb
忘れてた VS2015 以外のバージョンで動かすには
LDC をその設定で再構築してくれと書いてあった
今探してもどこだったか見当たらないけど…

たぶん VS2015 入れるのが一番簡単
2016/03/15(火) 22:12:49.10ID:sgjiEx6Z
>>483
なるほど・・・VS2015なら簡単でしたか。
485デフォルトの名無しさん
垢版 |
2016/03/18(金) 15:04:55.64ID:adG1WSEK
D言語でGCが動かなせない環境(組み込み環境)で
クラスを使ったコードを走らせるために手動でメモリ管理をする(配置new)
みたいなC++的な使い方できますのん?

もっと具体的に言うと、
メモリ管理クラスをD言語で書きたいんだけど・・・
できれば、ほかの言語(C/C++)を混ぜたくない。

Dでこの望みは叶えられる?
GCが完璧な言語で何を言ってるんだって話だけど
C言語とABI互換バイナリが吐ける言語でかつ、きれいな構文のDはかなり魅力だから、つい。
2016/03/19(土) 16:14:28.14ID:fGh+hC5f
>>485
Cにポインタ渡すのにこんなんつかってます。
http://dpaste.dzfl.pl/1d143cf043f4
487デフォルトの名無しさん
垢版 |
2016/03/19(土) 16:46:55.65ID:pnhuGA3J
>>486
あざます!!!!
ちとググってみましたけど
WikiにExplicit Class Instance Allocationっておもいっきり書いてありました・・・

手元の環境でもそれ書いたら動いたので
組み込み先の環境でもコレができるか試してみます!
488デフォルトの名無しさん
垢版 |
2016/03/19(土) 17:36:21.89ID:emjvs9Sn
foldとかHaskellみたい
いいぞもっとやれ
実行時のパターンマッチとかどんどんやって
2016/03/19(土) 17:51:51.55ID:szPk7uBU
パターンマッチは本当に欲しい
castSwitchは型で分岐するだけで不満が残る
ついでにAlgebraicもいい感じにしてほしい
2016/03/19(土) 19:52:53.93ID:fGh+hC5f
Cライクな構文でパターンマッチをどう表現するか?
dropThree :: [a] -> [a]
dropThree (_:_:_:xs) = xs
dropThree _ = []
2016/03/19(土) 21:01:17.80ID:vRfO35T6
C#だと、次のバージョンでパターンマッチ採用されるみたいね
https://github.com/dotnet/roslyn/blob/future/docs/features/patterns.md
2016/03/19(土) 23:58:06.13ID:fGh+hC5f
>>491 を読んで、>>489 に必要なのは490ではなくて
if (auto a = cast(A)x) if (0 < a.b) {...}
の省略表記みたいのなのかなと思った。
2016/03/20(日) 00:15:59.18ID:sW9GrChn
今試してて気づいた
if (auto a = 0 < (cast(A)x).b, cast(A)x) {...}
は通るんだね。キャスト2回いるけど。
2016/03/20(日) 00:42:09.88ID:sW9GrChn
...と思ったけど違うな。バグ臭い。
http://dpaste.dzfl.pl/8e56a6c3d640
2016/03/20(日) 01:02:17.46ID:sW9GrChn
あ、バグですらないや。結果を使わないからカンマの前半が評価されてないだけだ。
スレ汚しでしたorz
496489
垢版 |
2016/03/20(日) 04:59:55.44ID:270cchqR
>>492
考え直してみたら、俺が欲しいのは、クラス以外にも対応したcastSwitchと多重代入かなと思った
最初に欲しかったのは定数もパターンとして扱えるようなものだけど、それ自体は条件分岐で事足りる
2016/03/21(月) 08:32:26.92ID:PBSyTjzr
さあ早く shibuyad とやらの潜入リポート作成に戻るんだ
498デフォルトの名無しさん
垢版 |
2016/03/22(火) 18:21:28.75ID:9L67FCyK
new int[][](10,10)
なんてあったんだな・・・今の今まで律儀にループしてたわ・・・
恥ずかしい
499デフォルトの名無しさん
垢版 |
2016/03/24(木) 06:29:39.15ID:JYtPWttv
レスポンシブなウェブページになってるね
https://dlang.org/
2016/03/24(木) 18:45:07.21ID:dsBEx2Ez
まるで今時のプログラミング言語っぽいじゃないか!
2016/03/26(土) 15:48:00.20ID:Hp90Cudb
未来の言語だろ
2016/03/26(土) 18:28:21.07ID:ZDevVvUe
本来の言語
2016/04/06(水) 16:38:36.98ID:goAIGnqr
2.071

deprecation特盛り一丁
504デフォルトの名無しさん
垢版 |
2016/04/17(日) 20:07:45.76ID:jaxl7tJu
Dってエルミート行列の固有値と固有ベクトルを下か上の三角行列から出してくれるライブラリある?
2016/04/17(日) 23:05:34.24ID:Rgu4hbC0
知らないが、
「Cでそれ扱ってるライブラリ」→「Dのバインディング」の順番で探すと見つかるかもしれない。
2016/04/18(月) 14:54:59.76ID:AtRZD2WH
そんな劣化バインディングの出てくる場面じゃないと思う

Dよお前の力はその程度かッ
507デフォルトの名無しさん
垢版 |
2016/04/18(月) 15:40:47.97ID:NxXedIF3
バインディングに劣化とそうじゃないものの区別方法を教えれ
2016/04/18(月) 15:56:31.40ID:wndeF4nL
EUC-JPの文字列をUTF-8にエンコードするにはどうやればいいですか?
2016/04/18(月) 16:29:48.39ID:4lmkHLOP
>>508
iconvかicuのバインディングを探します
2016/04/18(月) 16:39:21.91ID:wndeF4nL
>>509
なるほど。
標準ではできないんですね。
2016/04/18(月) 23:04:02.22ID:8LbOm6LB
>>506 複素数はがんばってほしいよね。Dに。
>>510 EUC-JPは滅んだんだよ!もうそういう事にしようよ!
2016/04/19(火) 15:15:23.43ID:DoDYnfhi
EUC->(簡単)->JIS->(どのAPIがいい?)->UNICODE->(簡単)->UTF8
513デフォルトの名無しさん
垢版 |
2016/04/27(水) 10:07:10.53ID:h7nUlsO3
writeにクラスを渡した時クラス名だけじゃなくて中身も表示させたいんだが何に手を加えればいいんだろか?
2016/04/27(水) 10:09:28.75ID:Nq/5t8Sv
toStringオーバーライドすればいい
515デフォルトの名無しさん
垢版 |
2016/04/27(水) 10:27:53.40ID:KQtnTftA
>>514
即座に返事くれてすごい助かった
ありがとうございます
516デフォルトの名無しさん
垢版 |
2016/04/30(土) 12:14:38.56ID:XHbnmWX8
D言語でクラスを使って dmd -c Dソース でコンパイルだけして
GCC(mingw)でWindows用dllをクロスコンパイルする時、リンカが参照できないエラー吐くけども

参照できないメソッドはこれ
_D9invariant12_d_invariantFC6ObjectZv
_d_assert_msg

この参照できないメソッドが入ってるライブラリとその依存関係にあるライブラリって
どのファイルか分かります?
2016/04/30(土) 12:48:14.66ID:RhLYi0Bf
そうやって混ぜてコンパイルするのは無理…で普通は済む問題なんだけど
何がしたいのかしら
518デフォルトの名無しさん
垢版 |
2016/04/30(土) 14:53:50.70ID:XHbnmWX8
>>517
https://github.com/kubasz/uefi-d
これを参考に、UEFI AppをD言語で作りたいんだけども、
クラスを使うとリンクエラーでてしまい と言う話で、>>516
やっぱり、Dのクラスの仕組み上、こういう変な使い方するのは厳しいかな
2016/04/30(土) 16:19:04.96ID:FuZy8SxD
サンプルは再現出来てんの?
520デフォルトの名無しさん
垢版 |
2016/04/30(土) 17:06:09.96ID:XHbnmWX8
>>519
サンプル自体ビルドは通ってQEMUで動作確認済みです。

確認済みのサンプルソースに、追加で適当なクラス
(プリミティブ型(検証時はintのみ)のメンバ1つとコンストラクタ、セッタ、ゲッタのみ)とか
プリミティブ型(同上)メンバのみ構造体を定義すると
リンクしないといけない何かが足りなくなるらしいと言うところです
2016/04/30(土) 17:18:34.76ID:RhLYi0Bf
それなら
-debug -release のオプションの不一致かな
druntime の debugあり/なし バージョンが分かれてるのかな
522デフォルトの名無しさん
垢版 |
2016/05/01(日) 11:23:20.12ID:tKi6j9CT
匿名通信(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的に分散され、特定のサーバーに依存しません
523デフォルトの名無しさん
垢版 |
2016/05/01(日) 12:30:45.52ID:5H9PV7Hp
年収いくら?
パナマに振り込み可能?
2016/05/01(日) 14:08:25.32ID:vpP9ivFq
新規性がない
525デフォルトの名無しさん
垢版 |
2016/05/02(月) 12:22:10.19ID:IEVsN46J
>>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クラスの最小実装ってどうすればいいかわかります?
526デフォルトの名無しさん
垢版 |
2016/05/02(月) 15:11:51.74ID:aR8AOrvI
どつぼにそれてるパターン?
2016/05/02(月) 17:55:15.75ID:IEVsN46J
ごめんなさい、話が飛んでた。(ドツボにはまってました)
>>516は一旦解決しました。ありがとうです。

-releaseオプションつけたら、一先ずassert関連の
リンクエラーは出なくなりました。
2016/05/02(月) 18:01:06.10ID:aR8AOrvI
良かった
良かった
2016/05/04(水) 16:57:34.57ID:3BQvrgH5
DConf 2016 ustream
https://www.sociomantic.com/blog/2016/05/follow-dconf-2016-in-real-time/#.VymqqVWLQ7Y

Twitter
#dconf
530デフォルトの名無しさん
垢版 |
2016/05/04(水) 18:15:35.48ID:cRuVDbfJ
GJ
2016/05/05(木) 10:11:25.96ID:l/2+Jb+M
割とマジで
http://b.hatena.ne.jp/entry/togetter.com/li/970814
532デフォルトの名無しさん
垢版 |
2016/05/06(金) 20:12:27.55ID:7fiYERlP
Dって長方形配列を動的に確保するにはどうするのがベストなんでしょう?
2016/05/06(金) 22:45:34.04ID:W1xQbJku
>>532
>>498
534デフォルトの名無しさん
垢版 |
2016/05/07(土) 12:22:21.49ID:w1sNmh/I
>>533
おお、この記法でギザギザ配列回避できるのか!ありがとうございます
2016/05/08(日) 14:44:32.46ID:sTrGOFZo
多次元配列は最近こういうのもある
http://dlang.org/phobos/std_experimental_ndslice.html
536デフォルトの名無しさん
垢版 |
2016/05/12(木) 09:37:33.44ID:3GMYNf4t
>>535
これがまさに求めていたものだった
日本語のページではこれ全然見つからないし教えてくれなかったらこれに気付かず過ごすところだった
ありがとうございます!
2016/05/12(木) 14:42:51.13ID:yoZypm21
d言語の日本語情報は古くて、結構アテにならない
2016/05/12(木) 15:10:26.64ID:9ZRvi6Dg
それまだ入ってから半年も経ってないし
experimental な上に注目度高いからガンガン変わるよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況