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

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

D言語 Part21

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

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

■本家
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フロントエンド)
http://www.dsource.org/projects/ldc (LDC, バックエンドにLLVM)

■参考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)

937 :デフォルトの名無しさん:2009/06/17(水) 18:01:50
この手の面倒臭い話が解決しない限り
C/C++は生き残り続ける

938 :デフォルトの名無しさん:2009/06/17(水) 18:08:41
DだってC/C++の資産を全部再利用できるわけじゃないし。駆逐は無理じゃね。
そもそも完全に駆逐された言語ってのも少ない気がするけどなあ。
一般的にって話じゃなくて、このスレ住人で、とか自分の中で、って話なら同意。

939 :デフォルトの名無しさん:2009/06/17(水) 19:33:02
COBOLとか現役でたくさん使われてるらしいね。
一回業界で根付いたものは、システムとともに長生きするんだろうな。

940 :デフォルトの名無しさん:2009/06/17(水) 19:39:37
ALGOLはもう廃れたかな?

941 :デフォルトの名無しさん:2009/06/17(水) 19:44:31
今年でCOBOL生誕50周年だけど、
数年前ガートナーによれば、全世界で稼働してるソフトウェアは
ソースコードにして3100億行で、そのうちの2000億がCOBOLらしいよ。
そして新たに年間50億行書かれてるというから恐ろしい。

942 :デフォルトの名無しさん:2009/06/17(水) 19:58:47
COBOLもFORTLANもLISPも世界的には現役
楽に綺麗に書ける言語とはまた別

943 :デフォルトの名無しさん:2009/06/18(木) 19:31:08
D言語久しぶりに触ろうと思ったらいろいろありすぎてワラタ

D1.0 + Phobos
D1.0 + Tango
D2.0 + Phobos
D2.0 + Tango

どれ使うべき?あとIDEとGUI Libraryは何を使うべきかな?

944 :デフォルトの名無しさん:2009/06/18(木) 20:16:27
D2.0 + Tango これはまだないようなものでは

945 :デフォルトの名無しさん:2009/06/18(木) 20:19:04
IDEとGUIライブラリは特にこれといったものはないかも

946 :デフォルトの名無しさん:2009/06/18(木) 20:31:48
andreiはQTとDWTをおすすめしているね

947 :943:2009/06/18(木) 20:48:25
>944
http://dusers.dip.jp/modules/wiki/?Libraries%2FQtD
じゃ、これなに?w

ってかまだ標準がないのかw何年かかるんだろうなぁ…

とりあえずIDEはAnjutaかDescentかな、GUIはQt使いたいがリファレンスどう?

948 :デフォルトの名無しさん:2009/06/18(木) 21:19:07
目的によるから何とも言えないな。
とりあえずD2.0+Phobos(新機能目当て)かD1.0+Tango(保守性重視)だと思うけど
D2.0+Tangoは、trunkから引っ張ってくれば使えたバージョンもあった(が、今は無理臭い。)

949 :デフォルトの名無しさん:2009/06/18(木) 21:22:49
訂正。trunkじゃなかった。svnリポジトリのbranchで実験的なやつだった。

950 :デフォルトの名無しさん:2009/06/18(木) 21:38:32
>948
とりあえずクロスプラットフォームで動くネイティブGUIアプリをD言語で作りたい。「D言語で」ってのが重要、C++で作るのがもっとも適しているのは承知済み。

なんでD1.0使うべきなんだろうが、PhobosよりTangoの方がいいの?まだバージョン1.00になってないみたいだが…

951 :デフォルトの名無しさん:2009/06/18(木) 22:27:46
どうせD3.0でもまた標準ライブラリ一から作り直しだろ
その時にTangoも1.0になるんじゃないの

952 :デフォルトの名無しさん:2009/06/18(木) 23:38:51
class KeyType {
 // 連想配列絡みのメソッドは全てconst
 const override hash_t toHash() {return 1;}
 const override int opCmp(Object o) {return 0;}
 const override bool opEquals(Object o) {return 0;}
}

int[KeyType] table;
int[const(KeyType)] c_table;

void put(KeyType key) {
 c_table[key] = 1; // OK
 table[key] = 1; // OK
}
void c_put(in KeyType key) {
 c_table[key] = 1; // OK
// table[key] = 1; // NG
}

この一番下の奴は通るようにしたら何か不味いことでもあるのかな?
何となく通っても良さそうな気がするけど

953 :デフォルトの名無しさん:2009/06/19(金) 00:59:24
>>947
> じゃ、これなに?w
これなにって...ないってことじゃないか

954 :デフォルトの名無しさん:2009/06/19(金) 16:21:00
>>952
> void c_put(in KeyType key) {
>  c_table[key] = 1; // OK
> // table[key] = 1; // NG
> }

typeof(key) == const(KeyType)



955 :デフォルトの名無しさん:2009/06/19(金) 18:41:42
>>954の意図がさっぱりわからんのだが
>>952の趣旨に合ってる?

956 :デフォルトの名無しさん:2009/06/19(金) 19:15:53
putの方のc_table[key]が通るのが意外だけど、意味を考えれば別にいいのか。
c_putの方のtable[key]は、constが暗黙に非constにキャストされるような感じなのがダメなのかな。

957 :デフォルトの名無しさん:2009/06/19(金) 20:15:05
opIndexでindexに変化を起こす実装が作れる可能性もあるんでない?

958 :デフォルトの名無しさん:2009/06/19(金) 20:33:56
>>955-956
おまえらが何を悩んでるのかわからんが、Tがmutable型のとき
Tからconst(T)へは変換できるが、const(T)からTへの変換はできない。
それだけの話だろ。

いかなる場合でも、これに例外を設けると、それが抜け道となってconst-correctnessが崩壊する。


959 :デフォルトの名無しさん:2009/06/19(金) 20:40:51
>>954は要するに型が違うからコンパイル通らないことを指摘してるので趣旨に合ってる

まあそれは仕様として当然の事ではあるけど、
こういう場合は特例として暗黙にconst外ししてくれてもいいんじゃね?と思った
というのも、以下のようなクラスを作っててはたと困ったもので

class A {
 private int[KeyType] table;
 /// keyを保持しているか調べる
 /// keyがconst(KeyType)なのでコンパイル通らない
 bool hasKey(in KeyType key) {
  return key in table;
 }
 void methodA() {
  foreach (key, ref value; table) {
   // keyの非constなmethodBの呼出し結果をvalueに保管する処理
   value = key.methodB();
  }
 }
}

・hasKey()のinを取ると連鎖的に全ての箇所でconstが使えなくなる
・tableのkeyをconst(KeyType)にするとmethodA()の処理が行えない
・table.keysとは別にもう一つの非constな配列でも持てば解決できるけど何というか無駄な気がして気分悪い

でも
>いかなる場合でも、これに例外を設けると、それが抜け道となってconst-correctnessが崩壊する。
やっぱりこれだよなぁ…

960 :958:2009/06/19(金) 21:00:07
>>959
連想配列のopIndexAssignはキーが存在しない場合、キーと値のペアを格納するからダメだけど、
opIndexやopIn_rなら既存のキーと引数で与えられたキーを比較するだけだから、
const(KeyType)を受け付けるべきだと思うよ。

この場合、KeyTypeにbool opEquals(const(Object))のオーバーロードが必要になるが。


961 :デフォルトの名無しさん:2009/06/19(金) 21:07:51
いっそのこと、foreach(k, v; )と.keysを廃止してしまえば…

962 :952=959:2009/06/19(金) 21:09:20
この板ID出ないのね

>この場合、KeyTypeにbool opEquals(const(Object))のオーバーロードが必要になるが。
ああ、なるほど
しかしそれは今のObjectには存在しないから追加したとしたらopEquals(Object)をオーバーロードしてる全てのクラスに修正が必要になってきて

ごめんなさい
俺が悪かったです

963 :デフォルトの名無しさん:2009/06/19(金) 21:22:57
==の左辺がconstなら右辺もconstであるべきだとは思うけどねえ

964 :デフォルトの名無しさん:2009/06/19(金) 21:38:34
ん?そうなるとopEqualsとかをオーバーライドするときは出来るだけconstつけた方がいいのか
さもないとconstにした途端比較できなくなる

965 :デフォルトの名無しさん:2009/06/19(金) 21:43:09
class MyClass {

  int value;

  const override bool opEquals(Object o) {

    auto t = cast(const(MyClass)) o;

    return t && t.value == this.value;

  }

}

このぐらいやれば何の問題もあるまい

966 :デフォルトの名無しさん:2009/06/19(金) 21:55:49
そもそも、Object->const Objectは変換できるわけだから、

const bool opEquals(const Object)

だけがあればいいんじゃないの?

967 :デフォルトの名無しさん:2009/06/19(金) 21:56:55
const func();ってfunc();をオーバーライドできるの?

968 :デフォルトの名無しさん:2009/06/19(金) 22:14:12
出来るみたい
逆はちゃんとエラーになったからたぶんきっと仕様

969 :デフォルトの名無しさん:2009/06/20(土) 02:01:28
元コードがphobosで書いてあって、そこからphobosとtangoの両方に対応したいんだけど、
なんか参考になるページとかない?

970 :デフォルトの名無しさん:2009/06/20(土) 02:12:09
悪いことは言わないからそんなことやめとけ
どうしてもというなら一からTangoで作り直せ

971 :デフォルトの名無しさん:2009/06/20(土) 02:41:22
>>969
まず、標準ライブラリをラップするライブラリから作ることになるよw
まじでやめといた方がいい。

972 :969:2009/06/20(土) 03:09:59
はぁ、やっぱそうなるかなぁ。使いたいと思ったらtangoのみ対応ってライブラリばっかりだし。
標準入出力からして全然違うとかもう勘弁して欲しいわ・・・

973 :デフォルトの名無しさん:2009/06/20(土) 04:29:48
>>969
tangobosってのがあった気がする。
今も使えるかは知らない。

974 :デフォルトの名無しさん:2009/06/20(土) 04:32:11
druntimeなってから、そういうのいらないんじゃないの

975 :デフォルトの名無しさん:2009/06/20(土) 06:11:23
tangobosは使えるけど…今更D1.0のPhobosに何の価値があるというのか。
druntimeがあるのはD2だけだな。
D2でTangoが使えるようになった時にはPhobosと共存できるに違いないと信じる。

976 :デフォルトの名無しさん:2009/06/20(土) 06:27:13
DFLは両方に対応しているから参考にはなるはず

977 :969:2009/06/20(土) 11:44:20
れすありがとう。
>>973
試してみます。

>>976
参考になりました。
tangoとphobosへの依存は最小限というか可能な限り使わないって
方針かな・・・代わりにWin32に依存してるのかもしれないけど。
しかし、それでも結構細々とした対応が必要なのとすでに
D3用のversionが用意されてるのが泣けた。

978 :デフォルトの名無しさん:2009/06/20(土) 19:10:37
Tangoは悪としか思えない
いくらPhobosが使えないからといって、言語のベースをカオスにした罪は大きい

979 :デフォルトの名無しさん:2009/06/20(土) 20:19:06
TangoはPobosをプロトタイプとした、スマートでシステマチックなライブラリにしたいのだろうね。
それで泥臭いPhobosを使わなくて済むようにしたかったんだろう…
Boostみたく普通のライブラリにすれば神ライブラリと呼ばれたろうに…

980 :デフォルトの名無しさん:2009/06/20(土) 20:44:02
Tangoは「Phobos糞過ぎるだろ。これが標準ライブラリだなんて許せるか。俺にcommit権くれたら、もっといいもの作ってみせる!!!!11」っていう動機の元に作られたわけで…

981 :デフォルトの名無しさん:2009/06/20(土) 20:46:13
それにしてはライセンス微妙だし、命名規則も酷いもんだ。

982 :デフォルトの名無しさん:2009/06/20(土) 21:08:33
tango.io.Stdout.Stdout("うんたら").newline;
とか書くたびに絶望的な気分になる

983 :デフォルトの名無しさん:2009/06/20(土) 21:08:52
Phobosを使うライブラリ を完全に無視するTango・・・

984 :デフォルトの名無しさん:2009/06/20(土) 21:55:54
わからんのはライブラリの作者がtangoを採用するところ。ldcもtango必須だし。
tango自体はどうでもいいが、ライブラリがtango依存なせいでtangoを入れざるを得ない。

985 :デフォルトの名無しさん:2009/06/20(土) 22:13:49
>>982
tangoって使ったことないけどそんな気持ち悪いんかw
それは確かに絶望的な気分になるのも頷ける・・・

986 :デフォルトの名無しさん:2009/06/20(土) 23:28:10
D1だとさすがにTangoの方がいいだろうけど
D2だとPhobosはRangeが中心になってきてるし
今後はネットワークモジュールが入る可能性もあるので
Tangoを使うメリットが減りそうな感じ

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

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

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)