[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 08/05 11:17 / Filesize : 219 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

D言語 Part15



1 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 20:16:30 ]
プログラミング言語 D (D Programming Language) について語るスレッドです。
過去スレは >>2

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

■コンパイラ
ttp://www.digitalmars.com/d/dcompiler.html (DMD, 本家)
ttp://dgcc.sourceforge.net/ (GDC, gccフロントエンド)
ttp://gdcmac.sourceforge.net/ (GDCのmac用バイナリ)

■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://dsource.org/ (dsource)
ttp://www.sun-inet.or.jp/~yaneurao/dlang/
ttp://wisdom.sakura.ne.jp/programming/d/

202 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 12:14:31 ]
あ、string系のaliasがconst(char)[]からinvariant(char)[]に変わったのか。

……どーいう意味を持つのかイマイチ分からない。
というか、未だに「invariant型」の動作がよく分からん。

invariant(char[]) book = "I, Robot";
って宣言したbookに関して、

book ~= " by Isaac Asimov";
book.length = 1;
book = "2001 Space Odyssey";
こういう動作は別に禁止されないんだよね。invariant型って、どういう目的で使えばいいの?

203 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 12:32:07 ]
>>191
D2.006の新しいPhobosの機能をD1.xに移植した人がdigitalmars.D.announsに。
std2ってやつ。



204 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 13:24:39 ]
>>202
invariant(char[]) book = "I, Robot";

invariant(char)[] book = "I, Robot";
で、意味が変わるきがするが

205 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 14:02:50 ]
>>201
!isはisが導入されたときからあったと思う

206 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 14:11:49 ]
>>204
それは同じ意味になる
www.digitalmars.com/d/final-const-invariant.html
の Invariant Doesn't Apply To Declared Symbols のあたり。

207 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 14:19:58 ]
>>202
たとえば
 class Stream {
  int opApply( int delegate(ref const(char)[] line) dg );
 }
こういう宣言だったとしたら、
string s;
 foreach(line; din) if( line[0] == '#' ) s = line;
 writeln( "#で始まってた最後の行は", s );
このコードは期待した通りに動かないかもしれない。
Streamが内部でlineの中身を勝手に再利用してるかもしれないので。
constだと、"自分が"lineの中身を書き換えることはできなくなるけど、
他のところで書き換えが起こる可能性は否定できない。

これが
 class Stream {
  int opApply( int delegate(ref invariant(char)[] line) dg );
 }
こうだったら、opApplyの実装を見るまでもなく↑のコードは普通に動く。
invariantな配列の中身はもう"誰も"書き換えないので、Streamが後で
書き換えるようなことがない。

とかそういう使い方。

208 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 14:29:13 ]
おい。invariant周りでコンパイル通らなくなったぞ。
まーた全部書き換えかよ…

209 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 14:48:24 ]
なんでもかんでもidupつけないといけないのは気持ち悪いな

210 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 15:21:42 ]
aasumeUniqueでおk



211 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 15:49:37 ]
ttp://www.digitalmars.com/d/phobos/std_contracts.html

string letters()
{
char[] result = new char['z' - 'a' + 1];
foreach (i, ref e; result)
{
e = 'a' + i;
}
return assumeUnique(result);
}

これか なるほど

212 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 19:05:34 ]
>>208
動作確認してなかったので翻訳してなかったんだが、

string, wstring, dstringの定義をinvariant付きにしました。
関数の定義と実装を(標準ライブラリ関数の影響も含めて)山ほど変更する必要があります。
invariantなstringを使ってみた最初の感想としては、かなり有望です。


なにがどう有望なのか試してないのでなんともいえませんが。

213 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 19:37:54 ]
おいおい、phobos 張り切るのもいい加減にしろよ。tango の立場がなくなっちまうじゃないか。

214 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 20:01:30 ]
walたんがTangoに「○○追加してね」っていえばいい

215 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 20:41:34 ]
D2.x用のTangoは、どうなってる? もう出てる?

216 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 20:45:46 ]
>>215
まだじゃね?

217 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:20:07 ]
import std.stdio, std.contracts;
void main() {
foreach(string line; lines(enforce(fopen(__FILE__)))) {
write(line);
}
}

SUGEEEE

218 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:22:39 ]
そんな感動するようなことじゃないが、これまでなかったのが不思議だな。

219 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:31:01 ]
そういう短いけれども案外実用的なコードがたくさん欲しいところ

220 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:31:17 ]
>>187
解決しました。
すいません、もともとあったメモリ関係のバグが、たまたま出てきた形でした。



221 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:45:35 ]
D言語、1系が安定しない永遠のβだった頃から注目してるけど、
1系が成熟しないままさっさと2系に移ったところを見ると
実用的になるのは3系が登場してからかなと思ってしまう。

222 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:51:38 ]
Dは永遠にをるたんの実験言語。
実用的になるなんてあり得ないよ。

223 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:59:20 ]
>>209-211
さっぱりわからんのだが・・・
idup付ける代わりにassumeUniqueで済むってことだけじゃないよな?
余計にタイプ数増えるんだが
本当はassumeUniqueは何のためのものなの?

224 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 22:05:37 ]
>>223
idupはデータのコピーが行われるが、
assumeUniqueはコピーが行われない。

225 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 22:40:23 ]
>>224
うーん
そうですか
もうちょっと暗黙のコピーが発生するのを許容して
明示的な指定が減るようになったらいいね

226 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 22:50:17 ]
テストしてなさすぎワロス
いろいろ試してみたがdmd2.006はstd.formatが壊れてるな

//>writef
//testtest1010
//%s=%dvalue200
import std.stdio;
void main(){
 writef("test", "test", 10, 10, "\n%s=%d", "value", 200, "\n");
}

227 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:01:33 ]
>>226
>Breaking change: std.stdio.writef can now only accept a format as its first argument.

228 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:21:22 ]
>>227
あ 最後に書いてあるのそういうことか thx

229 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:34:02 ]
stringにconstつけてみたりinvariantになったりするのはWalterたんからの「ソース見直せリファクタリング汁!!」というご命令に違いない!

230 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:57:41 ]
Andrei Alexandrescuありがとう、そしてがんばれー
とエールを送っておこう



231 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 01:09:50 ]
>>230
Andrei Alexandrescu先生のTMPが見られるのは今やD言語だけ!(でもない)

232 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 01:40:11 ]
gdcってdmdで言うv2.0以降はあるの?

233 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 01:46:50 ]
svnで対応してるよ。

234 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 19:31:42 ]
>>206
ありがと しらんかった

235 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 00:01:06 ]
coroutineが、phobosでほしいなぁ

236 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 00:14:29 ]
そこは言語仕様に組み込むべきだろう。

237 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 06:13:14 ]
dmd2.004 以降でこういうちょっと怪しいのをコンパイルしようとすると途中で固まる。
void main(){ f([[]]); }
void f(int[][] a){}

f(cast(int[][])[[]]); ならおk

-v 付きでコンパイルすると semantic3 までは表示されるけど code が表示されずに止まってる。
何これ?

238 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 06:40:44 ]
D言語で作られたアプリケーションって何があるよ

239 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 11:33:27 ]
Dで作ったOS
それがDOS

240 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 11:37:56 ]
ttp://www.digitalmars.com/d/phobos/std_string.html

int ifind(in const const char[] s, in const const char[] sub);

なんなんだ、const だらけかよ。
inつかっても constをこれだけ使うっていうのがなんとも・・・



241 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 12:44:04 ]
in const constってどういう意味ですかwwww
inって
invariant const scopeだったよねwwwconst三つですかwwwww

242 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 13:09:17 ]
typo
ソース見れ

243 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 13:36:42 ]
D言語でstaticライブラリをつくる方法はどうやるのでしょうか。
コンパイル激早なんで、やる必要があまりないのかもしれませんが・・・

244 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 13:50:03 ]
budなら
bud -lib main.d

何も使わないでやるなら
dmd -c main.d
lib -c -l main.lib main.obj

245 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 13:50:18 ]
>>240
なんかintつけるとDDocが変なものを生成する。

246 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 14:18:48 ]
static引数まだー?

247 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 16:20:50 ]
>>246
なにそれ

248 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 16:53:40 ]
関数名に?入れて述語ry

そういやなんで?とか!とかは識別子にならないの?

249 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 17:01:03 ]
scopeクラスが単にnew ScopeClass();でエラー出さないでしかもスコープ抜けてもデストラクタが呼ばれないですけどこれはバグ?

250 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 17:03:49 ]
やっべDMD古いからかな。新しいので試してみます。一応古いのは1.020です



251 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 17:24:27 ]
>>249
scope周りはバグだらけ。もうどうしようもない

252 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 17:40:25 ]
把握しました

253 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 17:50:04 ]
本当にconstとかinveriantとか必要なのか?
C++から移ってきたときはほしいなと思ったこともあったけど、現状のconstとinveriantを見てるとうざったさ以上の便利さを感じない…
もっと上手い方法なかったのかな…


254 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 18:03:42 ]
デリゲート便利だなw
Scheme触って帰ってきたら使わずには居られないwwww

255 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 19:50:18 ]
>>253
constまわりは、まだまだこれからって感じだと思う。
現時点では文字列をimmutableにするためにしか使われてないし。
評価を下すのはまだ早いと思う。
現状のconstまわりの仕様には問題あると思うが。

文字列(配列)のスライスはコピー作らないから、文字列をimmutableにする意味はあると思うし、現時点では、
「inveriantは文字列をimmutableにするためのもの」
って割り切って、それ以外の機能は使わないようにすれば何とかやっていけそうだと俺は感じてる。


256 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 23:12:18 ]
>>244
ありがとうございます
作れました!

257 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 02:46:33 ]
勇気出してD2を入れることにしたぞー!

258 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 07:56:12 ]
macroって結局なんなの?

259 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 13:09:30 ]
>>258
カンファレンスのをるたんのスライド見れば分かるよ。

260 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 14:45:02 ]
それでも俺は1系列を使い続ける



261 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 16:50:22 ]
>260
1系列は俺に任せてお前達は先に行け!

まで読んだ

262 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 17:38:26 ]
>>261
文字数増えてるという不思議。

263 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 18:20:58 ]
>>262
つまり行間じゃなくて字間を読んだということか

264 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 20:27:45 ]
D2.0のstring周りの改変は
暗黙のコピーがいやでしょうがない
どこでどう動いてるか把握したい
文字列で、知らぬ間にメモリをちょっとでも使われるのも嫌でたまらん
ってことかな。

スクリプトライクな手軽なコーディングを
できるだけ殺さないように、がんばってんだよね


265 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 22:14:00 ]
みんな phobos と tango のどっち使ってる?
phobos は単純明快だが機能面でちょっと不足な上にバグ多いし、
tango は機能面はある程度充実してるけどドキュメントが整備されてない上に使いにくかったりするし、
なんかこう、どっちも中途半端なんだよなぁ。


266 名前:デフォルトの名無しさん [2007/10/20(土) 22:28:27 ]
>>248
全角?も駄目なんだな。これで我慢しとけ。

bool もしかしてnullですか(Object nullかどうか調べるオブジェクト)
{
 return nullかどうか調べるオブジェクト is null;
}


267 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 00:09:01 ]
もしかしてnullですか?

268 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 00:10:25 ]
もしかしてnullですか¿

269 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 00:11:09 ]
nullですよ¡

270 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 03:22:06 ]
>>264
藻前は組み込みに向いている
Dが組み込みに対応するその日まで
Dで生き延びろ



271 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 03:25:55 ]
>>264の発言は>>264自身のことじゃなくてDの文字列仕様の意図でしょ?

272 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 07:58:34 ]
>>265
両者の良いところが全部一つに集まると、
素晴らしき真のDが誕生してどんな願いも叶えてくれると伝説にはあります

273 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 09:51:27 ]
>>270
げ、するどい 正直びっくりした。
組み込み屋です。 Dが早く使えないかねらってます。


274 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 12:02:31 ]
ちょっと和んだ

275 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 13:55:30 ]
>>273
そう考えると2.006 invariant stringは有望だなあ。
Walterたんが「リアルタイム処理ではmalloc/freeよりGCの実行制御のほうが有利なこともある」
ってるが、そういうのは確かにあるので分かる気はする。
実際free listと組み合わせるとなかなか高速に動作してくれるし。
ada並の用途になるとDも本望だろう。

276 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 14:37:40 ]
>>272
それを後の人は「闇鍋」と呼んだ。

277 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 14:57:01 ]
D1〜D7まで揃えるとDragonが(ry

278 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 15:34:37 ]
組み込み屋ってなにするひと?

279 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 15:45:17 ]
>>278
ttp://ja.wikipedia.org/wiki/組み込みシステム

280 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 15:57:58 ]
>>279
サンクス



281 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 17:11:50 ]
組み込みに関してはかなり素人で見当違いなことかもしれないんだが…
たとえばH8のマイコンがGCCのコンパイラでコンパイルできるみたいだけど、
GDCとH8を使ってD言語による組み込み向けのプログラムを作ることはできないのかな?

282 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 18:59:26 ]
GDC

283 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 19:00:39 ]
ごめん、途中で送ってしまった

GDCでクロスコンパイラはつくれるかもしれないが、
ターゲットが32ビットCPUでないとだめかもしれない。


284 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 19:01:25 ]
tango 0.99.2を使ってるんだが、IConduitやらOutputStreamやら入出力周りの関係と用途がさっぱりわからん。
ソースによらず汎用的にストリームを扱いたいときはどのインタフェースをサポートすればいい?

285 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 20:22:16 ]
>>281
去年 gdc を H8 にポートしてみた事がある。
phobos の GC がうまく動作しないところで絶賛放置中。
2日の作業じゃここらが限界だった。


286 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 22:06:18 ]
GCつかわなければいけるんじゃなかろうかと一瞬考えたけど、そんなDに意味はあるのかどうか真剣に考えてしまった。

287 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 22:16:38 ]
ベターC++と高速コンパイルだぜ!

288 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 22:41:03 ]
GDCだと遅い罠

289 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 00:17:21 ]
じゃあ意味ないんじゃね?

290 名前:デフォルトの名無しさん [2007/10/22(月) 00:56:13 ]
>>284
flectioned から抜き出してみた。tango と phobos の差異を吸収するような
書き方が一番なんでないかい?

static if(is(typeof((new object.Object()).toUtf8()) == char[])){
 const bool inTango = true;
 const bool inPhobos = false;
}else{
 const bool inTango = false;
 static if(is(typeof((new object.Object()).toString()))){
  const bool inPhobos = true;
 }else{
  const bool inPhobos = false;
 }
}

static if(inTango){
 import tango.stdc.stdio;
} else static if(inPhobos) {
 import std.c.stdio;
}

int main()
{
 printf("Hello world");
 return 0;
}




291 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 00:58:57 ]
またあげちまったよ・・・すまん

292 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 01:23:43 ]
ttp://dsource.org/projects/tangobos/browser/trunk
Tangobos is a compatibility layer to allow most Phobos software to be compiled unmodified on Tango.
It is effectively a port of Phobos to Tango: it is only modified to the degree required to make it compile.
これってTango/Phobos共存させるのが目的なんだよな?

293 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 02:30:10 ]
テラタンゴボスwww

294 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 10:56:20 ]
なんというド直球ネーミングw

295 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 11:06:07 ]
D言語製のブラウザってある?

296 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 12:24:25 ]
>>292
Tangoboswww
見間違いかと思ったわw

297 名前:デフォルトの名無しさん [2007/10/22(月) 12:57:13 ]
>>292
Tangoの上に乗っかるPhobos互換レイヤか

298 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 13:07:18 ]
どっちかに統一したほうが良いように思うのは俺だけ?w

299 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 13:09:36 ]
Tangoboswwwwwwwwwwwww

300 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 13:31:59 ]
>>298
統一してほしいね〜

そもそも、TangoはPhobosと共存できないように
作る必要があったのだろうか?



301 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 14:03:17 ]
誰かがグレイトなライブラリを作ればいい。
どうせ D はまだ実用されてるとは言いがたい状況なんだし、
新規のライブラリがポンと出てきた所で問題は無い。

302 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 14:08:58 ]
それをここで作るんですよ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<219KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef