[表示 : 全て 最新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の入門講座)

313 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 22:38:20 ]
逆逆。むやみにインライン展開されて逆に遅くなってるだけ。

314 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 23:37:29 ]
-inlineつけたらどこまでインライン展開されるの?
main以下全部ってわけじゃないよね

315 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 23:37:29 ]
いやいや、例えば配列の境界チェックありで要素を取り出そうってので以下のような
コードでテストしたらテンプレート化したほうは確実に遅いんだよね。-inline つけてもつけなくても。
size_t at(T)(T[] a, size_t i){
  if( i < a.length ) return a[i];
  else throw new ArrayBoundsException(null, 0);
}
void main()
{
  char[] a = new char[64 * 1024 * 1024];
  auto begin = timeGetTime();
  for(size_t i = 0; i < a.length; i++)
  {
    if( i < a.length ) a[i] = a[i];
    else throw new ArrayBoundsException(null, 0);
  }
  Stdout.format("{}", timeGetTime() - begin).newline;

  begin = timeGetTime();
  for(size_t i = 0; i < a.length; i++)
  {
    a[i] = a.at(i);
  }
  auto end = timeGetTime();
  Stdout.format("{}", timeGetTime() - begin).newline;
}


316 名前:315 mailto:sage [2007/12/19(水) 23:40:33 ]
で、上のコード実行すると最初のテンプレート化してないほうが 75ms ぐらいで、
下のテンプレート化したほうが 350ms ぐらいだった。-inline つけてもつけなくても一緒。
-inline つけたやつを逆汗したら当然展開されていなかった。



317 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 23:50:00 ]
どうでも良い事でスマソ。
逆アセって事は、直接アセンブラを吐けないコンパイラなの?

318 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 00:47:37 ]
??
もっと平易な表現でお願い。

319 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 06:44:43 ]
マイクロソフトって単位?

320 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 10:02:05 ]
>>317
gdcは吐けるdmdは吐かない

321 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 22:01:20 ]
dsss + Tango でリソースファイルをリンクするのにはどうするの?
dmd-win-tangoとかdsss.confとか見たけどよくわからんかった…(´・ω・`)



322 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 22:48:22 ]
>>320
thanx

323 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 23:09:21 ]
dmdの場合はオブジェクトファイルをdmのobj2asmにかければ大丈夫じゃね?

324 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 13:48:13 ]
更新まだかなぁ・・・

325 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 00:40:57 ]
>>324
じゃあこれで。
Tango 0.99.4 Frank has been released.

326 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 18:32:51 ]
D言語ってJavaのJFrameみたいに簡単にウインドウ出せるの?

327 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 19:14:41 ]
AWTのD-portingのDWTを使ってみるとか。

328 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:04:45 ]
DFLならこう
// www.dprogramming.com/dfl.php
import dfl.all;
int main()
{
 Form myForm;
 Label myLabel;
 
 myForm = new Form;
 myForm.text = "DFL Example";
 
 myLabel = new Label;
 myLabel.font = new Font("Verdana", 14f);
 myLabel.text = "Hello, DFL World!";
 myLabel.location = Point(15, 15);
 myLabel.autoSize = true;
 myLabel.parent = myForm;
 
 Application.run(myForm);
 
 return 0;
}

329 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:43:29 ]
tango の最新版、日付・時刻関連が少しすっきりしたけど、まだ手の入る余地がありまくってるな。


330 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 03:17:45 ]
>>327
DWTはSWTよ
あと開発止まってるぽい

331 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 04:52:40 ]
とりあえずTango0.99.4のtango.util.Convertの792行目あたりがあやしい。
returnで返さないっぽい



332 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 14:06:20 ]
DFLは付属のdfl.exe使わされるのが嫌で使ってないなあ
dmd.exeだけでできたい!

333 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 14:08:07 ]
dmdでも長ったらしいオプションつけるか、応答ファイル書くかしておけばいけるでしょ。

334 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 22:14:13 ]
寧ろDFLのモジュールとlib以外の使い道知らんかった

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
答え方まで似てるってのが笑える。






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

前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