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


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

D言語 Part16



1 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 23:00:35 ]
プログラミング言語 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://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の入門講座)

335 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 21:57:56 ]
ヲルたんからのクリスマスプレゼントwktk

336 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 22:36:16 ]
実際もうじき約一か月たつし、先月と先々月の更新の日付から見たら夢見てもいいかも?
とりあえず全裸待機。

337 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 22:37:06 ]
風邪ひくぞ

338 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 22:44:08 ]
いい子にして早く寝ないとな…

をるたんのとこでは今何時かしらないけど

339 名前:デフォルトの名無しさん [2007/12/25(火) 22:36:46 ]
>>110でも出てるけど
Assertion failure: 't->deco' on line 608 in file 'mtype.c'
はいつなおるんだあああ

340 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 07:10:52 ]
全裸待機。 この前のカンファで目玉はなんだっけ
あまり意味なさそうな static foreachしか覚えてないw

341 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 11:36:34 ]
const属性を考慮してphobosが書き換えられているようだ

342 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 11:57:38 ]
>>340
macro
ADL
拡張メソッド
static引数(関数テンプレートの糖衣構文)
メンバの委任
コンパイル時に全てのcaseが網羅されているか検証するfinal switch

あたりだったか。

343 名前:331 mailto:sage [2007/12/26(水) 21:03:27 ]
Tango0.99.4のtango.util.Convertの792行目あたりがあやしいかったのは、rev3066で直ったみたいだ。

しっかし、Tangoもどこまでやったら1.0出す気なんだろ。
まぁ確かにもっとインターフェース良くなるところは多いと思うけど。



344 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 23:55:05 ]
2.0で追加されたphobosのライブラリを
1.0でも使えるようにするプロジェクト std2 が dsource にできてるね

345 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 00:14:25 ]
それよりアップデートはまだなのか

346 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:34:53 ]
extern(C++)便利だなこりゃ

347 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 21:19:39 ]
>>346
あれってC++のソースのコンパイルをmsvcではなくdmcでしなきゃいけないんだよね?
そう思ってstlportのセットアップが面倒で試してないんだが面白そう

348 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 21:27:47 ]
C++のobjもOMFとCOFFって分け方でいいの?
DMDはOMDってことになるのかな?

349 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 22:29:41 ]
>>347
いやいや、VisualStudioで作成したやつだよ。
〜.libをlink.exeにくわさないとだめだけど

350 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 22:43:51 ]
正確には dmc も msvc も同じ修飾名を使っているので問題がない。
Linux ではどうなってるかしらん。

351 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 00:18:13 ]
extern(C++)といえば、interface宣言を使ってC++のオブジェクトをDからアクセスできるようになったけど、これの場合はCOMと同様にC++マングルは関係なくなるのかな?

352 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 00:40:44 ]
いえす。C++マングリング規則にD側が合わせることになる。

353 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 00:41:45 ]
COMインターフェイスってどういう条件で普通のインターフェイスからCOMインターフェイスになるの?
IUnknownを継承するだけでいいの?



354 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 00:58:33 ]
>>352

DのinterfaceがC++のオブジェクトモデルと互換性があるということで、実際のシンボル名関係なしにVTbl手繰ってメソッド呼べるのかなぁと思ってたんだが、この場合でもあの_ZN3なんとかみたいなシンボル名からメソッドを呼び出しているの?

>>353
MS用語でいう"カスタムインターフェイス"ならIUnknown継承だけでCOMインターフェイスだったと思う。
実際にCOMコンポーネントとして使えるようにするにはいろいろ登録したり、QueryInterfaceの動作要件とかあったはず。

355 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 07:58:40 ]
>>353
extern(Windows)なinterfaceだったと思う。

356 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 11:02:18 ]
>>353
IUnknownって名前のインターフェイスを継承するだけでいいみたい。

interface IUnknown { }
interface ITest: IUnknown { }

void main(){
ITest o;
delete o; //Error: cannot delete instance of COM interface ITest
}

357 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 07:09:33 ]
COMインターフェースが何に使えるかおすえて

358 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 08:44:34 ]
DLL を通してクラスを提供可能。

359 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 13:30:23 ]
news://news.digitalmars.com:119/fl2jnu$1i6p$1@digitalmars.com
> Subject: During these holiday times...
> From: Walter Bright
> Date: 2007/12/28 19:38
>
> ...we should take a moment to reflect on the important things in life.
>
> uk.youtube.com/watch?v=s_QpBhdvK2Q

360 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 19:47:29 ]
えw

361 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 01:03:28 ]
>>349 ごめんできない
// cpp.cpp
#include <iostream>
#include "cpp.h"
void Cpp::func() {
 std::cout << "call Cpp::func()" << std::endl;
}
Cpp* newCpp() {
 return new Cpp;
}
void deleteCpp(Cpp* instance) {
 delete instance;
 instance = NULL;
}
これをmsvcでコンパイルして cpp.lib もしくは cpp.obj を作った


362 名前:361 mailto:sage [2007/12/30(日) 01:04:06 ]
// main.d
extern(C++) {
 interface Cpp {
  void func();
  }
  Cpp newCpp();
  void deleteCpp(Cpp instance);
}
void main() {
 Cpp cpp = newCpp();
 cpp.func();
 deleteCpp(cpp);
}

>dmd -c main.d
>link main.obj cpp.lib

OPTLINK (R) for Win32 Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved

d_to_cpp.lib
Error 43: Not a Valid Library File
--- errorlevel 1

何がまずいですか?

363 名前:361 mailto:sage [2007/12/30(日) 01:06:09 ]
間違えた
C++のソースはcpp.cppじゃなくてd_to_cpp.cpp



364 名前:349 mailto:sage [2007/12/30(日) 07:27:19 ]
ごめん、 libにくわすんじゃなくて
implib.exe だった

C:\dm\bin\implib.exe /s $(OutDir)\$(TargetName).d.lib $(TargetPath)
こういうことをやってます。

で出力された 〜.d.lib を lib.exe でリンクね

365 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 21:25:36 ]
皆さんよいお年を
をるたん来年もよろしく
2008.1.1の更新きたい

366 名前: 【小吉】 [2008/01/01(火) 03:26:27 ]
あけおめ

アップデート期待age

367 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 09:51:38 ]
あけおめ

をるたんところは、夕方ごろ年明けだよね。

368 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 11:10:14 ]
ああ、アメリカかあ。生アメリカだよなあそこ。いいなあ。。。

369 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 12:05:15 ]
D3.0が出ると聞いて

370 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 14:32:33 ]
D 0.2008 になると聞いてやってきました。

371 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 17:57:30 ]
今年こそは伝説のIDEが現れますように

372 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 19:55:39 ]
その前に伝説の言語仕様が現れないと

373 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 20:34:40 ]
2.009ktkr…なにこのがっかり変更数
裏で何か巨大なものを作ってると思って待つしかないか…



374 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:40:06 ]
これはがっかりすぎる…

375 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:44:13 ]
CTFE周りのバグフィックスはまあ嬉しい

376 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 00:31:55 ]
新バージョンへの期待大きすぎワラタ

> Redid const/invariant semantics again.

やり直し…? どう変わったのかよく分からないや。

377 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 00:57:17 ]
>>110が直ってないし・・・

378 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:01:54 ]
>>376
void f(const(int) x);
void f(int x);
のオーバーロードが出来るようになってるのは確認した。

invariant(int) i;
i = 4;
もできなくなってるから、トップレベルのconst/invarinatの扱いが変わったみたいね。

379 名前:378 mailto:sage [2008/01/02(水) 01:06:56 ]
invariant T var;
invariant(T) var;

ドキュメントによれば、この二つが完全に等しくなったみたいだね。
やっと気持ちの悪いねじれが解消された感じ。ようやくだけど。

380 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:16:41 ]
全く同じ関数が二つ以上あっても呼ばれなきゃエラーにならなくてワロタ。

381 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:20:05 ]
>>380
おおほんとだ。
リンカエラーにはなるけど、コンパイラはお咎めなしなんだな

382 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:31:48 ]
Manifest Constant

enum string s = "hoge";

もはやenumの意味が消失してしまってる…

383 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:42:20 ]
だめだ…をるたたん止めないと…

class C { }
void main() {
const(C) c;
c = new const(C); // error!!!
}



384 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 02:15:44 ]
struct A {}

A a0;
const A a1;
a0= a1; //Error: cannot implicitly convert expression (a1) of type const(A) to A

をるたん・・・


385 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 02:40:31 ]
>>384
それは今まで出来たのがおかしい気がする。

386 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 02:49:24 ]
>>385
>>384じゃないけど、構造体の代入はビットコピーなんだからできないとおかしいだろう。

387 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 02:51:46 ]
>>386
例えば、Aがint*型のメンバを持ってたとしたら、
const(int)*からint*への暗黙の型変換が起きてしまうと思うのだけど。

388 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 03:00:16 ]
>>387
そういや、そうか。すんません。

389 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 08:53:49 ]
>>387
const(int*)にならないの??
おれがわかってないのか??


390 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 09:19:51 ]
>>384

Replace:

> const(C) c;
> c = new C(1); // error

with:

const(C) c = new C(1);

だってさ

ttp://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D.announce&artnum=10964

391 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 10:01:38 ]
>>390
ん? それ>>383のだよね。

392 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 12:27:38 ]
>>387
ポインタを含む場合だけエラーってのでいいと思うんだけどなあ。

393 名前:390 mailto:sage [2008/01/02(水) 12:31:13 ]
>>391
そそ、ごめん



394 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 16:11:30 ]
>>377
これなおらなきゃまともに窓作れないよ・゚・(つД`)・゚・

395 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 17:28:04 ]
>>392
そんな例外はかえって必要ないだろう。

396 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 22:25:48 ]
budで-Xphobosつけないとphobosのソースもコンパイルされるという事実に気づいた
自動で付いてるもんだと思ってたのに・・・ひどい!

397 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 03:37:47 ]
char[] hoge = new char[100];

char[] hoge;
hoge.length = 100;
ってなんか違うことってある?

398 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 03:54:26 ]
意味的には違わないはず。生成されるコードは知らないけど。

399 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 23:57:30 ]
構造体をcast(const)できないんだけど、どうすればいいんだ。

400 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 01:45:20 ]
>>399
コードplz あとそれどんなときに必要?

401 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 01:52:26 ]
struct S {int i;}

void main() {
auto a = [S(0), S(1)];
auto b = [cast(const)S(0), S(1)]; // Error: no property 'opCall' for type 'const(S)'
}

const(S)[] 型の配列リテラルが欲しいんだ。

402 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 02:12:20 ]
>>401
これじゃダメ?
import std.stdio;
struct S{int i;}
void main(){
 const x = [S(0), S(1)];
 writefln(typeid(typeof(x))); // (const(const(main.S)[2])
}
配列リテラル周りはいつもバグに悩まされるから使わない方が
トラブルに遭わずに済んでいいかと

403 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 02:25:51 ]
const(S) a = S(0);
const(S) b = cast(const(S))S(0);

確かに、暗黙に変換できるのに、明示的にキャストできないのは気持ち悪いな。



404 名前:402 mailto:sage [2008/01/04(金) 02:26:57 ]
どうもconst(S)とS(0)を同時に実現できないみたいなので下のzのようにするしかないんじゃない?
import std.stdio;
struct S{int i;}
void main(){
 const x = [S(0), S(1)];
 writefln(typeid(typeof(x))); // (const(const(main.S)[2])

 auto y = [S(0), S(1)];
 writefln(typeid(typeof(y))); // main.S[2]

 const s = S(0);
 auto z = [s, S(1)];
 writefln(typeid(typeof(z))); // const(main.S)[2]
}

405 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 02:33:45 ]
これでおk

auto a = [delegate const(S)(){return S(1);}(), S(2)];

406 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 06:02:12 ]
似たようなやり方を前にも見たような気がする

407 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 21:56:14 ]
phobosに16進文字列を整数に変換する関数ないの?

408 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 22:37:09 ]
と思ったけど、CTFEできないといけないから、いらないや

409 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 22:58:00 ]
もしかして引数なしの関数って、() なしで名前だけで呼び出せるのか

410 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 00:47:20 ]
yes. プロパティっぽく扱えるようになってる。

411 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 00:48:22 ]
>>408
それくらいの関数って作れなかったっけ?

412 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 01:23:48 ]
yes.
プロパティのための構文糖。

413 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 01:24:57 ]
リロし忘れてたごめんorz
答え方まで似てるってのが笑える。



414 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 01:31:14 ]
>>411
CTFEできないとダメだから自前でこしらえるしかない、って言いたかったのさ

415 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 01:36:56 ]
>>414
あーなるほど。さんくすこ

416 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 11:30:03 ]
>>410,412
なるほど、Ruby チックでいいね

417 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 20:19:50 ]
それってプロパティじゃない関数までgetterとして振舞うってことだよな。
LL好きにはいいんだろうけど、ちょっとやだな。
getter/setter相当がオーバーロードされているときと、
getterのみはローカルキーワードで対応ってならんのかな。

418 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 21:52:02 ]
引数がない関数にわざわざ()をつける必要がないってのは自然な感じがするんだけどなあ。

419 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 22:01:44 ]
まあ副作用が無ければ自然に思える。

420 名前:デフォルトの名無しさん [2008/01/07(月) 22:25:16 ]
その情報を取り出すことで何かが変化するのなら、それを使用するときに変化すると言うことが明確でなければならない。
つまり関数には後ろに「( )」が必要。


421 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 22:47:17 ]
>>417-419
Delphiも、引数なし関数は省略できたな。

>>420
上の行としたの行がつながらん。
()があれば、必ず副作用なるわけではないでしょう?

副作用があるかどうかは、メソッド名とドキュメントで明示すべき。

422 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 22:49:44 ]
命名をちゃんとしとけばそれほど違和感ないと思う。

process.kill
thread.start
window.close
stream.flush
something.toString

423 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 22:55:44 ]
基本的に、名詞はプロパティ、動詞はメソッドというのが一般的じゃないかな。



424 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 03:06:26 ]
そういや、Rubyも括弧いらないんだよな。

425 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 07:19:29 ]
Ruby で慣れてるから副作用があろうがなかろうが括弧無しで違和感ないわ

426 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 10:57:58 ]
>>417
個人的には変数がクラス外部からはconstに見えるアクセス制御がほしい。
class Foo {
int hoge_;
int hoge() { return hoge_; }
}
とか書くのも冗長、最適化されるか分からないのが嫌、みたいな。

っつかそういう制御っていまできましたっけ?

427 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 12:32:09 ]
>>426 constメンバ関数
class Bar {}
class Foo {
int hoge_;
const int hoge() { return hoge_; }
Bar bar_;
this() { bar_ = new Bar; }
const const(Bar) bar() { return bar_; }
}

428 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 16:37:46 ]
そういうことじゃなかろう。

429 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 21:44:09 ]
readonlyにするってこと?

430 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 22:46:40 ]
話ぶったきるが、連想配列では

char[][char[]] m;
m["foo"] ~= "bar";

と m["foo"] が lvalue になるんだけど、自分で作ったクラスが opIindex で配列を返すと
当然のことながら lvalue にならない。どうにか関数で配列の参照を返すことってできんだろうか?


431 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 23:08:07 ]
opIndexAssign?

~= みたいな複合演算子は使えないけど。

432 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 23:42:51 ]
それか、プロキシオブジェクトを返すか、だね。

433 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 01:07:09 ]
phobosにmap, filter, reduceとか配列操作関数が欲しいよう



434 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 01:15:26 ]
>>431
代入(=)じゃなくて連結(~=)したいんだ。
いちいちプロキシオブジェクト作るのは面倒だし、困ったものだ。

あと、配列とかにも演算があるんだから opCmp とか呼べりゃ良いのに・・・
ソート用に比較するときに == と < (または > ) の2回比較しなければいけないから困る。

細かいところで融通きかんよなぁ。

435 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 01:19:52 ]
>433
Lisp屋さんか?それともPython屋さんか?






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

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

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