5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

D言語 Part20

1 :デフォルトの名無しさん:2008/11/14(金) 12:05:16
プログラミング言語 D (D Programming Language) について語るスレッドです。
過去スレ、関連スレは >>2

■前スレ
http://pc11.2ch.net/test/read.cgi/tech/1217813098/

■本家
ttp://www.digitalmars.com/d/
ttp://www.kmonos.net/alang/d/ (和訳)

■コンパイラ
http://www.digitalmars.com/d/dcompiler.html (DMD, 本家)
http://dgcc.sourceforge.net/ (GDC, gccフロントエンド)

■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://f17.aaa.livedoor.jp/~labamba/?D%B8%C0%B8%ECBOF (D言語BOF)
ttp://dsource.org/ (dsource)
ttp://tinyurl.com/3da5oa (C/C++に疲れた人のD言語)
ttp://www.kmonos.net/alang/wnd/ (わかったつもりになるD言語)
ttp://shinh.skr.jp/d/ (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか)
ttp://shoo.s20.xrea.com/shoo/programing (D言語とTangoの入門講座)
ttp://www.nicovideo.jp/mylist/4453698 (D言語で作られた芝ゲー niconico動画)
ttp://www.asahi-net.or.jp/~cs8k-cyu/ (ABA Games)

■ IDE
ttp://dronten.googlepages.com/dscite (DSciTE)
ttp://forums.codeblocks.org/index.php?board=20.0 (Code::Blocks)
ttp://www.dprogramming.com/entice.php (Entice Designer)
ttp://www.dsource.org/projects/descent (Descent)
ttp://www.dsource.org/projects/poseidon (Poseidon)

811 :デフォルトの名無しさん:2009/01/25(日) 15:33:07
enumについて教えてくれ。

enum STR: string {
FOO = "abc",
BAR = "def"
}
↑って言語仕様上正しいの?
-g付きコンパイルだと怒られるんだが。

812 :デフォルトの名無しさん:2009/01/25(日) 15:59:10
>>811
EnumBaseTypeには大小比較可能である以外の要件は求められていないよ。

813 :811:2009/01/25(日) 18:10:58
>>812
大小比較可能なchar配列を使用しているからOKだと思って使ってたんだ。
で、デバッガ使いたくてdmdに-gを渡すとコンパイルできないんだ。
すまん、根本的に認識が間違っているなら教えてくれ。


814 :デフォルトの名無しさん:2009/01/25(日) 18:18:34
たぶんデバッガ用のタイプタグを生成できないんでしょ。
CやC++では、列挙型は整数以外になり得ないから。

815 :811:2009/01/25(日) 19:09:31
そういうことかぁ。
ありがとう。

816 :デフォルトの名無しさん:2009/01/25(日) 19:36:43
>>811
-g 渡さなければ使えてたの?
言語仕様上OKなら便利だから使いたいな。

817 :デフォルトの名無しさん:2009/01/25(日) 19:39:25
enumするメリット見えないんだが

818 :デフォルトの名無しさん:2009/01/25(日) 19:41:27
ビットフラグ用のenumってないの?

819 :デフォルトの名無しさん:2009/01/25(日) 19:43:18
>>817
複数の定数にまとまった名前がつけれる。

ただ、string->enumの暗黙変換が出来るから微妙だけど。

820 :デフォルトの名無しさん:2009/01/25(日) 19:50:05
namespace 使えば十分じゃね?

821 :デフォルトの名無しさん:2009/01/25(日) 19:50:22
ところで enum { FOO } の FOO を"FOO"という文字列化する方法ってある?

822 :デフォルトの名無しさん:2009/01/25(日) 20:02:12
値が連続してることが簡単に保証できるのが enum の利点

823 :デフォルトの名無しさん:2009/01/25(日) 20:03:23
>>820
namespaceなんてないよ

824 :デフォルトの名無しさん:2009/01/25(日) 20:06:01
>>821
ない。そういう関数を自分で用意する以外に。

825 :デフォルトの名無しさん:2009/01/25(日) 20:07:34
C99 のインデックス指定配列初期化があればいいのか。

826 :821:2009/01/25(日) 20:21:00
>>824
そっか。どうもありがとう。

enum に値を追加したら文字列化関数にも実装を追加
しないといけないから、ちょっとメンドクサイよね。

827 :811:2009/01/25(日) 20:28:57
>>816
使えたよ。

828 :デフォルトの名無しさん:2009/01/25(日) 20:35:01
>>820
namespaceは無い。けどstatic structならあってそれで十分なはず。tupleof+stringofで名前取り出しもできる…か?

829 :811:2009/01/25(日) 21:01:55
>>828
おお!
static structの存在を忘れてた。
これでほんの少し修正するだけでデバッガ通せそうだ

830 :デフォルトの名無しさん:2009/01/25(日) 22:00:45
>>826
そこでstd.typeconsにあるdefineEnum

831 :デフォルトの名無しさん:2009/01/26(月) 18:12:42
conceptまだかうよ

832 :デフォルトの名無しさん:2009/01/26(月) 18:50:56
ttp://www.digitalmars.com/d/2.0/future.html

 Future Directions
   1. Template inheritance.





833 :デフォルトの名無しさん:2009/01/26(月) 23:12:24
ん?1個減った?元々2つだったかな

834 :デフォルトの名無しさん:2009/01/26(月) 23:19:09
配列演算も予定の一つで、
あともうひとつ何かあった気がした。

835 :デフォルトの名無しさん:2009/01/27(火) 15:48:09
ジェネリックデリゲートが欲しい

836 :デフォルトの名無しさん:2009/01/27(火) 16:28:09
そういえばcovariant/contravariantがまだない

837 :デフォルトの名無しさん:2009/01/27(火) 22:18:33
Descent 0.5.4 released

838 :デフォルトの名無しさん:2009/01/28(水) 16:11:08
Eclipse Descent Compile-Time View
http://jp.youtube.com/watch?v=oAhrFQVnsrY

839 :デフォルトの名無しさん:2009/01/28(水) 18:24:26
2年前と比べるとずいぶんもり下がって北ね、
なんか疲れてきた。

840 :デフォルトの名無しさん:2009/01/28(水) 18:29:45
これから勉強するなら1.0より2.0?

841 :デフォルトの名無しさん:2009/01/28(水) 19:23:22
昔より更新頻度が落ちたし、更新の内容も破壊的なのが減ってきた。
IDEもそれなりのものが既にあるし、ライブラリもそれなりに整ってきた。
Dはインフラを得た代わりに話題を失いつつある…そんな気がする。

842 :デフォルトの名無しさん:2009/01/28(水) 19:25:05
>>838
おや?伝説のIDEかな?

843 :デフォルトの名無しさん:2009/01/28(水) 19:44:28
>>839,841 まだ >>832,835-836 とか残ってることはたくさんあるよ
ウォルたんは次あ何をしようとしているのかなあ

844 :デフォルトの名無しさん:2009/01/28(水) 19:45:24
>>840 そろそろ破壊的変更も少なくなってきたから
これから始めるなら問答無用でD2でもいいんじゃないか

845 :デフォルトの名無しさん:2009/01/28(水) 19:45:44
>>842 これ面白いよね

846 :デフォルトの名無しさん:2009/01/28(水) 19:49:16
>>841
魅力的な更新が減ったのがなぁ。gdcの更新も滞っているし、ldcはまだまだだし。
ldcの安定待ち。

>>838
凄いな。でもコンパイルタイムで色々しまくると激しく遅くなりそうな予感。

847 :デフォルトの名無しさん:2009/01/28(水) 19:56:47
D3.0まだ?

848 :デフォルトの名無しさん:2009/01/28(水) 20:02:19
このスレでは
魅力的な更新==破壊的な更新
なのかい?


849 :デフォルトの名無しさん:2009/01/28(水) 20:04:03
個人的には違うがマゾが集まっているのも事実。

850 :デフォルトの名無しさん:2009/01/28(水) 20:52:39
今年もまだメモ帳で頑張れる

851 :デフォルトの名無しさん:2009/01/28(水) 20:54:33
俺はどっちも好きだなあ。
とりあえずgdcmacが安定してほしいのといくつかシンタックスシュガーが欲しい

852 :デフォルトの名無しさん:2009/01/28(水) 20:55:41
自分でシンタックスシュガー作れる仕組み出来ねえかなぁ
マクロより安全な方法で

853 :デフォルトの名無しさん:2009/01/28(水) 20:57:29
コンパイラ弄って自分でシンタックスシュガーを追加している俺勝ち組

854 :デフォルトの名無しさん:2009/01/28(水) 21:48:34
>>853 ちょw

855 :デフォルトの名無しさん:2009/01/28(水) 22:30:10
どんなシュガー追加してるかkwsk

856 :デフォルトの名無しさん:2009/01/28(水) 23:02:54
D言語BOF2009のネタ募集中だってさ
ttp://twitter.com/kinaba/status/1119668964

857 :デフォルトの名無しさん:2009/01/28(水) 23:47:45
あればうれしいのはシンタックスシュガーを作れる仕組みではなくて
それで作りたいシンタックスシュガーそのものではないのか?

858 :デフォルトの名無しさん:2009/01/28(水) 23:50:49
だから早くタプルリテラルを作れと(ry

859 :デフォルトの名無しさん:2009/01/29(木) 00:39:44
タプルリテラル作るって言ってたっけ?
テンプレートできるからいらないとか言われてなかったっけ

860 :デフォルトの名無しさん:2009/01/29(木) 01:22:08
タプル返せるようにしてけろ

861 :デフォルトの名無しさん:2009/01/29(木) 01:25:18
構造体でおk

862 :デフォルトの名無しさん:2009/01/29(木) 01:28:58
>>860
回避策
import std.typetuple, std.stdio;
struct tupleWrapper(TL...){
  TL tl;
}

void main(){
  TypeTuple!(string, int) tup;
  tup = foo().tupleof;
  writefln(tup[0]);
  writefln(tup[1]);
}

tupleWrapper!(string, int) foo(){
  return tupleWrapper!(string, int)("test", 12);
}

863 :デフォルトの名無しさん:2009/01/29(木) 02:34:49
うぉるたんMacを買ってDMDを移植してみるの巻
http://dobbscodetalk.com/index.php?option=com_myblog&show=Porting-D-to-the-Mac.html&Itemid=29

864 :デフォルトの名無しさん:2009/01/29(木) 03:28:24
>>863
クリスマスにマックミニ買っちゃった!なんて、なんかちょっとかわいいw

865 :デフォルトの名無しさん:2009/01/29(木) 03:39:35
しかもAmazonとか親近感沸くなぁw

866 :デフォルトの名無しさん:2009/01/29(木) 12:04:22
マック地下室監禁わろたw

867 :デフォルトの名無しさん:2009/01/29(木) 22:58:19
gdc が全然アップデートされない今、
本家が Mac をサポートしてくれれば言う事無しだ

868 :デフォルトの名無しさん:2009/01/31(土) 01:44:07
Tango 使ってみてるけど、使いにくい・・・。

なんか利点在るの?これ・・・

869 :デフォルトの名無しさん:2009/01/31(土) 03:16:20
どういう点が使いにくいと思うか書いてみて?

870 :デフォルトの名無しさん:2009/01/31(土) 09:02:34
連想配列を全てを削除するのって下のでいいのかな?
D1.038 で落ちることがよくある・・・。

例えば
long[string] hoge;
に対して

foreach (key, h; hoge)
{
hoge.remove(key);
}

hoge.remove(key) じゃなくて writefln(key) とかなら全然大丈夫。

871 :デフォルトの名無しさん:2009/01/31(土) 10:20:01
全部消すなら
hoge = null;
でおk

872 :デフォルトの名無しさん:2009/01/31(土) 10:20:55
foreach中にその対象に変更加えるとダメだったと思う

873 :870:2009/01/31(土) 10:23:54
>>871-872
なるほど。どうもありがとう!

874 :870:2009/01/31(土) 21:07:19
ちなみに削除して再登録していきたかったので、下のようにしたらうまくいった。

auto remove_keys = hoge.keys.dup;
foreach (key; remove_keys)
{
 hoge.remove(key);
}

875 :デフォルトの名無しさん:2009/02/01(日) 12:57:35
連想配列にeraseが欲しいよな
そうするとイテレータが必要になってくるのか

876 :デフォルトの名無しさん:2009/02/01(日) 14:24:46
---a.d
import b;
import c;

void main() {
 Hoge h;
}

---b.d
interface Hoge {}

---c.d
import b : Hoge; // : Hoge を無くせば直る
alias Hoge[] HogeArray;


---
a.d(5): Error: b.Hoge at b.d(1) conflicts with c.Hoge at c.d(1)

名前指定インポートつかえねえええ

877 :デフォルトの名無しさん:2009/02/01(日) 19:21:36
選択インポートだっけ?
滅多に使わないよなぁ、丸ごとインポートすれば事足りるし
public付けたりしたらより一層意味不明な事になりそうだな、試してみよう

878 :デフォルトの名無しさん:2009/02/01(日) 20:06:27
色々試したけどよくわかんね

ただシンボルとしては同じなんだなー
完全修飾して衝突さえ回避すればHogeArrayにb.Hoge連結できるし、
Hogeをクラスに変えたらb.Hoge h = new c.Hogeで怒られない

だがこうなるとどうして衝突で怒られるのかが不思議だ、やっぱりバグか?

879 :デフォルトの名無しさん:2009/02/02(月) 00:08:12
何気にシンボル関係は挙動不審
privateとかいろいろと

880 :デフォルトの名無しさん:2009/02/05(木) 01:29:57
この言語ははやらん。

理由は開発者の数が少なすぎる。もっとも、ボランティアの開発グループ
を結成して実用的なものに改良を加えていくとC++みたいに言語使用が破綻
するが。。。

JAVAが一応、成功した理由にはいろいろあるが、GUI、マルチスレッド
のサポートが大きいと思う。C++でもそういうのを整備してほしい。

しかし、MSがC++/CRIをANCI C++委員会?で却下されたのは仕方ない。
独特の癖があるから。


881 :デフォルトの名無しさん:2009/02/05(木) 01:43:01
どこから突っ込めばいいんだ

882 :デフォルトの名無しさん:2009/02/05(木) 02:05:26
まずはD更新欠乏症にかかって3日間沈黙したスレ住民に対して突っ込めばいいんじゃないかな

883 :デフォルトの名無しさん:2009/02/05(木) 03:14:03
C++の言語仕様が破綻したのは互換性の崩れを極度に怖がったから。
だが勇者ブライトはそんな過ちを繰り返すことはなかったッ!

884 :デフォルトの名無しさん:2009/02/05(木) 03:33:00
D/CLIまだかよ

885 :デフォルトの名無しさん:2009/02/05(木) 03:48:51
個人的には流行らないことは使わない理由にならないなぁ。
だっておもしろいんだもの、D。

886 :デフォルトの名無しさん:2009/02/05(木) 05:15:55
pureの最適化がさりげなくいい感じだ
再帰呼び出しを恐れず書ける

887 :デフォルトの名無しさん:2009/02/05(木) 12:31:05
自動メモ化されるの?

888 :デフォルトの名無しさん:2009/02/05(木) 19:15:37
http://twitter.com/repeatedly/status/1176843127

889 :デフォルトの名無しさん:2009/02/05(木) 19:59:36
いやいや・・・

890 :デフォルトの名無しさん:2009/02/06(金) 02:50:12
>>884 IronD?触ってみたいね

891 :デフォルトの名無しさん:2009/02/06(金) 03:38:37
>>887
少なくとも末尾最適化はされているっぽい

892 :デフォルトの名無しさん:2009/02/06(金) 10:34:20
Mono叩けないのかな
WindowsFormsとか使えれば流行る気がする

893 :デフォルトの名無しさん:2009/02/06(金) 10:42:01
C#でいいじゃん

894 :デフォルトの名無しさん:2009/02/06(金) 10:49:08
C#ユーザーとか取り込めばDユーザー増えるかな?

895 :デフォルトの名無しさん:2009/02/06(金) 10:53:59
.NET Frameworkのクラスライブラリを全部実装できたら流行るよ

896 :デフォルトの名無しさん:2009/02/06(金) 12:55:42
>>891
pureじゃなくても末尾最適化はできるんじゃないの

897 :デフォルトの名無しさん:2009/02/06(金) 13:39:59
Mono たたいた瞬間、
ランタイムの不要なバイナリをはくという利点が消えるな

Win7 の登場で、利点がべつにどうでもよくなりつつあるけどな。

898 :デフォルトの名無しさん:2009/02/06(金) 14:06:48
リフレクション経由で.NET叩くのは簡単なんだが、パフォーマンスが微妙だわ

899 :デフォルトの名無しさん:2009/02/06(金) 14:13:49
うぉるたん、もうちょっと営業センスあるといいんだけどねぇw

900 :デフォルトの名無しさん:2009/02/06(金) 14:20:02
ドットネットのライブラリ使えてネイティブ吐き出すとかはどうよ?
うけると思うぜ?
誰がつくってw

901 :デフォルトの名無しさん:2009/02/06(金) 14:44:50
>>896
単にコンパイラに読みやすいか否かなのかも知れんが、
10^10回くらい再帰する関数にpureつけるかつけないかでコンパイル時間が相当変わる

>>900
LLVMとかぶるんじゃないかなあ

902 :デフォルトの名無しさん:2009/02/06(金) 14:50:33
コンパイル時定数化が効ないようにすると

void main()
{
        Random r;
        long n = r.next*1000000000L;
        auto perf = new PerformanceCounter;
        perf.start;
        recursion(n);
        perf.stop;
        writeln(perf.milliseconds);
}

long recursion(long n) pure {
        if(n==0)
                return 1;
        else
                return recursion(n-1)+n;
}

// pureなし → Stack Overflow
// pureあり → 0 (milliseconds)

903 :デフォルトの名無しさん:2009/02/06(金) 15:06:49
返値保存してないから、(副作用無いのは保証されてるので)最適化でコードまるまる削除されてるだけとかではないの?

904 :デフォルトの名無しさん:2009/02/06(金) 15:08:04
pureは戻り値つかってないと削除されるよ

905 :デフォルトの名無しさん:2009/02/06(金) 15:10:55
>>901
んー、コンパイル時間が変わるってのはCTFEしようとしてるんじゃないか。
末尾再帰最適化に時間はかからないはずだが

906 :デフォルトの名無しさん:2009/02/06(金) 17:16:23
>>903-904
覗いて見たらコード丸々削除でしたorz

>>905
定数ぶっ込むとpure付きなら問題ないが、なしだとdmdが終わりません。
が、上記アレなんで……

907 :デフォルトの名無しさん:2009/02/06(金) 17:54:57
>>902のrecursionは末尾再帰してない気もするしな

908 :デフォルトの名無しさん:2009/02/07(土) 01:05:15
const private {
invariant protected {
private {
protected {
static public {
export {
static {
invariant {
const {
nothrow pure auto a="(;´Д`)";
}
}
}
}
}
}
}
}
}

自分でも何したかったのか分からん

909 :デフォルトの名無しさん:2009/02/07(土) 01:19:50
よく頭悪いって言われない?

910 :デフォルトの名無しさん:2009/02/07(土) 17:23:38
GCが動かなくて困ってる。
試しに下を動かすと"Error: Out Of Memory"を吐いて落ちる。

int main(char[][] args)
{
for (int i = 0; i < 32; i++) {
a();
}
return 0;
}
void a()
{
new char[96 * 1024 * 1024];
}

gdc 0.24 mingw なんだけど、何かGC動かすための条件とかある?
何か勘違いしてるのかな・・・

911 :デフォルトの名無しさん:2009/02/07(土) 18:45:03
明示的にGC動かすならGC.collect()とかdelete式
暗黙的に行われるメモリ回収はいつ行われるのか予測不可
その暗黙的にメモリ回収を行わせる条件の話をしてたならスマソ判らん

208 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)