D言語 Part18at TECH
D言語 Part18 - 暇つぶし2ch470:デフォルトの名無しさん
08/06/19 02:12:49
すでに実例あり
URLリンク(video.google.com)

.hから.dにするときにマクロの展開だけが面倒

471:デフォルトの名無しさん
08/06/19 02:21:43
>>470
正真正銘プロの犯行に吹いたw

472:デフォルトの名無しさん
08/06/19 02:27:09
>>470
なんという勇者w
DirectXなんてほとんど使ったことないが、
面白そうだからちょっといじってみるか

473:デフォルトの名無しさん
08/06/19 02:32:51
>>468
まったく人がいなくて吹いた。
SDL+OpenGLのほうがポーティング揃ってるし、DirectX使うより楽だとおも。
たしかゲーム用にラップしたライブラリあったし。

あとフリーゲームの『去人たち』って、エロじゃないけどノベルゲで、D言語で作ってたはず。
ただシステム糞重くてうわーって感じだったけど。

474:デフォルトの名無しさん
08/06/19 09:45:23
>>465
呼び出す側で古代C言語みたいにvoid型でキャストしよう。

475:デフォルトの名無しさん
08/06/19 12:14:53
DのIDLコンパイラとか誰か作ってないのかなあ

476:デフォルトの名無しさん
08/06/19 14:15:34
>>469
DirectXはCOMオブジェクトだから、ポーティングの仕方がCライブラリとはちょっとだけ違う。

477:デフォルトの名無しさん
08/06/19 16:37:52
ここまで型を書かなくてよくなったら
もういっそのこと無名関数テンプレートが欲しくなったんだがw
auto dg = (T,U)(T t, U u){ return t+u; };
するとこうなって
auto dg = (auto t, auto u){ return t+u; };
最終的にはこうか?w
auto dg = (t, u){ return t+u; };
これなんてマクロ?

478:デフォルトの名無しさん
08/06/19 16:40:21
つーか、macroキーワードが使える日が早く来ればそれでいいんだよ…

479:デフォルトの名無しさん
08/06/19 16:50:40
無名関数テンプレートが欲しいのは分かるが、できるとしても
alias (T,U)(T t, U u){ return t+u; } dg;
が精一杯。

480:デフォルトの名無しさん
08/06/19 17:09:07
>>477
どうぞ。

auto dg = new class {
auto opCall(T, U)(T t, U u) {
return t + u;
}
};

481:デフォルトの名無しさん
08/06/20 17:27:30
writeln(typeid(typeof((int i){})));

2.015でデリゲート型の引数が表示されないんだけど、前からだっけ?

482:デフォルトの名無しさん
08/06/20 21:08:46
>>470
この会社に入りたい

483:デフォルトの名無しさん
08/06/20 22:04:03
>>481
前からじゃない?
↓1.0
URLリンク(codepad.org)

484:デフォルトの名無しさん
08/06/21 02:58:03
なんでBufferedFileはデストラクタでcloseしないんだ

とおもってソース見てみたら、そもそもデストラクタなかった。
どうなってんだよ。

485:デフォルトの名無しさん
08/06/21 03:26:35
> これはつまり、 デストラクタからはメンバオブジェクトを参照できないことを意味しています。
これがなければデストラクタも使い物になるというものの…

486:デフォルトの名無しさん
08/06/21 03:57:45
とりあえず必要だと思うのは、scopeメンバ変数だな。
コンストラクタで一回だけ初期化できて、オブジェクトがdeleteされるときに道ずれにdeleteするの。

487:デフォルトの名無しさん
08/06/21 04:04:44
Tango導入しようかなあ…
phobosは統一性なさすぎて辛い…

488:デフォルトの名無しさん
08/06/21 14:30:25
>>485
ファイルハンドルのような開放しなければならないメモリはガベコレの外にあるのだから、デストラクタに開放処理を書いても問題ないと思うけどね。

489:デフォルトの名無しさん
08/06/21 14:33:35
IDisposable的なhackが必要になるってことか。

490:デフォルトの名無しさん
08/06/21 15:29:12
>>485
これって、メンバオブジェクトをdeleteすることも認められないのかな?

491:デフォルトの名無しさん
08/06/21 18:20:16
あーもー英語使わなくてもphobosのtrunkにコミットできたい

492:デフォルトの名無しさん
08/06/21 19:39:11
staticメンバにリストを作って管理とか無理かな

493:デフォルトの名無しさん
08/06/21 21:29:05
>>486
そんなのイラネwwww
って思ったけど、必要だな・・・

494:デフォルトの名無しさん
08/06/21 21:45:08
>>488
たしか、デストラクタって呼ばれる保証はないんじゃなかったっけ?
だとしたら確実に行われなければならない処理をデストラクタに書くことはできないと思うのだけど。

495:デフォルトの名無しさん
08/06/21 23:10:12
デストラクタからcloseとかの後始末関数を呼べばいいよ。
scope変数に入れたときは、必ずスコープアウトするときにデストラクタ呼ばれるから。

496:デフォルトの名無しさん
08/06/21 23:15:25
C++で言うところの純粋仮想関数のように、
抽象クラス側のメンバ関数定義において
派生クラスで必ず上書きをする事を明示する修飾子ってありますか?

497:デフォルトの名無しさん
08/06/21 23:19:56
abstract

498:デフォルトの名無しさん
08/06/21 23:26:36
>>497
ありがとうございます!

499:デフォルトの名無しさん
08/06/21 23:27:51
abstract属性

500:デフォルトの名無しさん
08/06/22 03:41:51
  auto outfile = new FileConduit("output.txt", FileConduit.WriteCreate);
  auto file = new FileConduit("hogehoge.txt");
  auto buf = new BufferInput(file);
  while (buf.fill(buf) != IConduit.Eof) {
    auto str =  buf.slice(buf.readable);
    Cout.output.write(str);
    outfile.write(str);
  }
Tango なんだけど、Conduit から入力したものを複数の Conduit(?) に出力したいとき、
こういう風に一回バッファを介すしかないの?なんだか妙に生ぐさいやり方で気持ち悪いんだけど、
もっと良い方法ない?Conduit, Buffer, Input/OutputStream のあたりの仕組みが全く理解できない

501:デフォルトの名無しさん
08/06/22 05:45:30
OutputStreamを継承して、複数のOutputStreamに流し込むようなオブジェクトを作ればいいのでは?
URLリンク(codepad.org)

502:デフォルトの名無しさん
08/06/22 07:15:28
std.algorithmって今のところ配列にしか使えない?
自作のコンテナでも、イテレータ定義すれば使えるのかなと思ったんだが、そもそもイテレータの作り方がよくわからん。
opStarAssignとかないし。

503:デフォルトの名無しさん
08/06/22 11:34:52
>>502
それ、以前調べたけどまだ無理だと思う。
std.algorithm の中でイテレータに対して foreach range 文を使ってるんだけど
現状では foreach range 文をカスタマイズできないから、独自イテレータを定義できない。

504:500
08/06/22 13:27:30
>>501
おお、わざわざ㌧クス。その方向でいってみるよ、ありがとう。

505:500
08/06/22 17:02:06
あやしい InputFilter を作ることで、どうやらやりたいことが出来たみたいだ。
改めて>>501に㌧クス。
URLリンク(codepad.org)

506:デフォルトの名無しさん
08/06/22 19:23:09
ConduitとStreamってどう違うの?

507:デフォルトの名無しさん
08/06/22 22:13:10
IConduitはInputStreamかつOutputStreamなのだから、同じなんじゃないかと。
ただ、どうやらConduitがベースになってて、他の便利なストリームに突っ込んで使うのがいい感じらしい。
Conduitは「入出力先」、Streamは「使い方」みたいな使い分けなんじゃないかと思う。
あと、InputStreamとOutputStreamはほかのStreamとは若干違って、Conduitの役割をInputとOutputで分割したようなものだと思って使ってる。

508:デフォルトの名無しさん
08/06/22 23:15:20
>>503
なる。どうもありがとう。
……がっかりだーorz

509:デフォルトの名無しさん
08/06/23 09:16:36
はぁ?手軽に最高速がDの売りなんじゃないですかぁ?
バカなの?

ぶっちゃけC++のほうが100万倍マシ

510:デフォルトの名無しさん
08/06/23 09:22:31
ええ全く、ウォルタンに言ってやってくださいよー

511:デフォルトの名無しさん
08/06/23 09:25:52
>>509
元ネタはRubyだったのに何でC++に変えたの?

512:デフォルトの名無しさん
08/06/23 13:40:30
複数ファイルを一度にimportする方法ってありますか?

// ファイル a.d
module  a;

// ファイル b.d
module b;

とかあった場合に

// ファイル include.d
module include;
import a;
import b;

とかして
import include;
でaとbをimportみたいにしたいのですが。

513:デフォルトの名無しさん
08/06/23 14:02:24
public import a, b;
とかかな。
調べずに発言

514:デフォルトの名無しさん
08/06/23 14:43:31
文字配列の連想配列の配列の配列の長さを変えるにはどうしたらいいのでしょうか
int main(){
char[][char[]][] list;
list.length = 100;
return 0;
}
とすると途中で止まってしまいます。
どのようにしたら止まらせずにlistの長さを伸ばしたり縮めたりできるのでしょうか


515:514
08/06/23 14:46:04
すみません既出のバグなんですね…
>264試してみます

516:514
08/06/23 15:04:03
すみません、やっぱり分からないです
nullで埋めるというのも分かりません
list[0] = null; とやっても使えないですし

連想配列を含む配列は使わない方がいいのでしょうか

517:デフォルトの名無しさん
08/06/23 18:30:43
別にそれ自体として使わないほうがいいってことはないだろうが、
バグがあるんだから使わないほうがいいだろう。実際に使えないわけだし。

518:デフォルトの名無しさん
08/06/23 18:41:51
動いた
URLリンク(codepad.org)

519:デフォルトの名無しさん
08/06/23 18:44:49
連投失礼
しばらくしたら消えるみたいだし、一応貼っておく
--
int main(){
typedef char[][char[]] Map = null;
Map[] list;
list.length = 100;
writef(list.length);
return 0;
}

--
100

520:デフォルトの名無しさん
08/06/23 18:51:37
しばらくといっても結構長いみたいだね
>>20のもまだ消えてないみたいだし

521:デフォルトの名無しさん
08/06/23 19:12:28
>>20
template Res(int N, O)
{
res!(N) << O.toString();
in { assert(O >> N); }
invariant O = N;
enum O = N;
throw new O(">>" ~ N.toString());
}

mixin Res(1, 乙);


はっちゃえ

522:デフォルトの名無しさん
08/06/23 19:43:26
何のコードかと思ったら>>1乙とはw

523:デフォルトの名無しさん
08/06/23 21:02:01
foreach( i, v, vs) {
 if( v.noneed ) {
  vs.remove(i);
 }
}

これが、2.0.15でできなくなった・・・
しかたないか

524:デフォルトの名無しさん
08/06/23 21:11:30
foreach( i, v; vs) {
じゃなくて?

525:デフォルトの名無しさん
08/06/23 21:21:00
あ、それそれ ごめん

526:デフォルトの名無しさん
08/06/23 23:08:02
>>518
ありがとうございますm(_ _)m
不思議だ…
何でtypedefかませると動くんだろう

もう構造体かクラスかで囲ってそれを配列化しようかとか思ったけど
凄い人はやっぱりいるもんだなぁ

既出だろうけどモジュールと同じ名前のディレクトリがあるとldで躓いてコンパイル失敗するね
>519を動かそうと思ってn.dってファイル作ってdmd nさせたら
nってディレクトリがあるもんだから失敗した\(^o^)/

527:デフォルトの名無しさん
08/06/24 00:17:50
URLリンク(dsource.org)
このやたらハイテンションな中国人によると、Entice Designer で日本語が入力できない問題は、
同梱の Scintilla のバージョンが古いせいらしい。このポストのとおり、SciTE のバイナリを
落としてきて、SciLexer.dll -> enticelex.dll にリネームして上書きすれば日本語が通ったよ。
Entice、補完はいまいちだけど Descent より軽いので、漏れはコードエディタとして重宝してる。

528:デフォルトの名無しさん
08/06/24 00:30:56
連想配列のlengthは読み取り専用だから>>261は動かなくて当然だけど、
>>514は連想配列か普通の配列かの判断が甘いから起こるのかな。
typedefすれば確実に普通の配列だとわかるからlengthに値をセットできる、と。

529:デフォルトの名無しさん
08/06/24 00:47:32
>>528
その理屈はおかしい、
>>261のaは連想配列ではなくて動的配列だし、
typedefすることによって型の曖昧さが減るということもありえない。

530:デフォルトの名無しさん
08/06/24 07:09:37
実行環境がLinuxだからとかではなくて?

531:518
08/06/24 08:01:25
一応説明すると、
配列のところ読んだら連想配列も動的配列も長さ0で初期化されるとあったから
ふとtypedefするときに初期値を新しく指定できるっていうのを思い出して試しただけだったり
(最初は適当な配列で初期化しようとしたけど、連想配列リテラルがよく分からないからnullにしたら動いた)
試しにtypedefの
= null
を削るとcodepadでもTimeoutする

何で初期値指定すると動くのかとかはよく分からんが

532:デフォルトの名無しさん
08/06/24 15:15:58
>513
できました!ありがとうございます。

533:デフォルトの名無しさん
08/06/24 17:30:23
>>531
本来、nullと長さ零の配列は同じ扱いのはずなんだけどねえ

534:デフォルトの名無しさん
08/06/24 21:55:41
全く同じわけではないらしい

void main()
{
int[] a = null;
int[] b = [1,2,3];
b.length = 0;
assert(a == b); // success
assert(a is b); // fail
}

535:デフォルトの名無しさん
08/06/24 22:30:46
>>533
最初の頃はそういってたけど、いつの間にか仕様が変わったらしい。

536:デフォルトの名無しさん
08/06/25 11:08:17
下記のように場合に、インナークラスから自身が持つフィールドと同名の
親階層のフィールドにアクセスしたい場合の方法ってありますか?
superは継承の場合だし、CTest.Value_はコンパイルエラーに。

class CTest
{
 int Value_;
 CInner Inner_;
 class CInner
 {
  int Value_;
  void Function(){
   // 自身のValue_を表示
   writefln("%d",Value_);
   // 親階層のValue_を表示する場合は??
   writefln("%d",???);
  }
 }
 this(){
  Value_ = 1;
  Inner_ = new CInner();
  Inner_.Value_ = 2;
 }
 void Function(){
  Inner_.Function();
 }
}

537:デフォルトの名無しさん
08/06/25 11:28:43
>>536
URLリンク(www.kmonos.net)

538:デフォルトの名無しさん
08/06/25 11:50:47
>>537
ありがとうございます。
this.outer.Value_ でいけました。


539:デフォルトの名無しさん
08/06/25 13:42:23
そういえば outer ってキーワードなのな

540:デフォルトの名無しさん
08/06/25 20:34:50
conceptまだー?

541:デフォルトの名無しさん
08/06/26 01:31:03
URLリンク(image.blog.livedoor.jp)

542:デフォルトの名無しさん
08/06/26 01:38:53
何やらブラクラ危険と専ブラが教えてくれるのだが

543:デフォルトの名無しさん
08/06/26 08:44:44
>>542
心霊写真と見せかけてしばらく見てると白粉野郎がアップになるやつ。

544:デフォルトの名無しさん
08/06/26 16:03:15
しばらくってほど時間が経過しないのがなんだかな
じーーっくりと見させてからやった方がダメージ大きいのに

545:デフォルトの名無しさん
08/06/26 16:27:51
専ブラによってはアニgifのサムネイルが最後の1枚になってたりして効果ない
びびったけど

546:デフォルトの名無しさん
08/06/28 02:31:24
>>541
びびった。だがD関係ねーや。

あるいはこれがまだ見ぬヲルタンの素顔なのか?

547:デフォルトの名無しさん
08/06/28 02:58:59
ウォルたんにヒゲはあるのだろうか

548:デフォルトの名無しさん
08/06/28 04:10:10
テンプレートって計算完備?

549:デフォルトの名無しさん
08/06/28 06:08:29
折りたたむだけ

550:デフォルトの名無しさん
08/06/28 17:30:05
hoge hige hage

551:デフォルトの名無しさん
08/06/28 17:40:23
朝起きたら枕元に美少女死神が立ってて鎌で殺してくんねえかなあ…はぁ…

552:デフォルトの名無しさん
08/06/28 17:45:54
Constraintsって何か意味あるんですか?
static ifで同じことができる気がするんですが

553:デフォルトの名無しさん
08/06/28 17:48:19
>>552
分けてかけることに意味があるんじゃない?
よくわからんけど。

554:デフォルトの名無しさん
08/06/28 21:03:45
>>553
うーん、わざわざ構文拡張してまでやることなのかな…
まあよく考えたら将来的な理由かもしれないし、
あんまりこだわらないことにします

555:デフォルトの名無しさん
08/06/28 21:36:32
スクリプト言語ひとつ覚えたんで、次は念願のコンパイル型言語を―と思って
Dを狙ってるんですが、このスレ見る限りやめたほうがいいような気がしてきました。
この言語将来性あるんでしょうか? こんなに利用者にコケにされてる言語はじめてみた。

556:デフォルトの名無しさん
08/06/28 21:41:27
このスレは信者だらけだから、少なくともコケにはされてないだろ。

557:デフォルトの名無しさん
08/06/28 21:43:11
……コケにされてるか? むしろこのスレでは愛されてると思うんだがな。

まあそれはさておき、バイナリ吐く言語使いたいなら素直ににC/C++やった方がいいと思うんだ

558:デフォルトの名無しさん
08/06/28 21:49:54
>555
初のコンパイラ方式をDにするのはやめたほうがいいのではないかと。
CかJavaかC#が良いと思う
Dは、ある程度以上の実力者が戯れるのには最適な言語だと思う

559:デフォルトの名無しさん
08/06/28 22:00:03
いろいろできたのう

// 特殊化
template factorial(int n) {
enum factorial = n * factorial!(n - 1);
}
template factorial(int n : 1) {
enum factorial = 1;
}

// constraints
template factorial(int n) if(n != 1) {
enum factorial = n * factorial!(n - 1);
}
template factorial(int n) if(n == 1) {
enum factorial = 1;
}

// static if
template factorial(int n) {
static if(n != 1) enum factorial = n * factorial!(n - 1);
else enum factorial = 1;
}

// CTFE
int factorial(int n) {
if(n != 1) return n * factorial(n - 1);
else return 1;
}

560:デフォルトの名無しさん
08/06/28 22:04:41
Java出身者にはテンプレートが魔法に見えるから困る
これだけでチューリング完全とかw

561:デフォルトの名無しさん
08/06/28 22:11:52
なんというか、There's more than one way to do itって感じになってきたな…

562:デフォルトの名無しさん
08/06/29 00:37:59
もともとそういう志向はなきにしもだったからな
でもテンプレート周りとかconst周りはmore than one wayだけでもないぜ。
コンパイル時に決定可能かどうかという重大な違いがある

563:555
08/06/29 00:48:50
色々ありがとうございます。
言語仕様や標準ライブラリにいろいろけちつけるのは愛の鞭だったんですね。
初のコンパイラ型言語ってわけでもないので(Cを一通り。MinGWのWindows SDKにあちこち不備があるのが鬱陶しくなってやめた)
忠告を聞かずにDの世界に飛び込んでみます。

564:デフォルトの名無しさん
08/06/29 00:55:09
>不備があるのが鬱陶しくなってやめた
ここがひっかかるw
Dはそんなのの塊のような気がす

565:デフォルトの名無しさん
08/06/29 01:02:32
ゲーム作るのでなければwxDを使えばいくらか幸せになるかと

566:デフォルトの名無しさん
08/06/29 01:24:57
>>564
> >不備があるのが鬱陶しくなってやめた
> ここがひっかかるw

まああの頃とは一味違うつもりなんで……不備は自分でどうにかできる、といいな。
>>565
GUIツールキットってメモリ喰いであまりいいイメージないんですよね。
せっかくWindows API結構覚えてるんで生で頑張ります。

と、ここまで書いてちょっと調べてみたらwxWidgetsって普通のGUIツールキットとはちょっと違うんですね。これは素敵かも。

567:デフォルトの名無しさん
08/06/29 11:58:28
メモリの配置を覚えるためにもやっぱC/C++あたりを使うのがいいだろうな
CはやることやったらすぐC→C++でもいいと思うし

568:デフォルトの名無しさん
08/06/29 12:46:39
C++は時間の無駄だと思ってるからやっぱりDで

569:デフォルトの名無しさん
08/06/29 12:55:40
Dこそ時間の無駄で終わらなければよいが…って思ってる
いつか仕事で使える日が来ることを期待してるが

570:デフォルトの名無しさん
08/06/29 13:11:16
仕事で使わせてくれる会社に入ればいい

571:デフォルトの名無しさん
08/06/29 13:26:44
Hoge hoge = new Hoge();
SetWindowsLong(win, GWL_USER_DATA, &hoge);

ってかんじでウィンドウにインスタンスをひも付けさせたら
しばらくは使えるんだけど、そのうちインスタンスが
まともにとれなくなるのはやっぱりGCのせい?


572:デフォルトの名無しさん
08/06/29 13:53:34
>>571
yes.
どこかに参照を残しておかないとなくなる。

573:デフォルトの名無しさん
08/06/29 14:36:45
カーネルオブジェクトの中にある参照をGCが見つけられるわけがない

574:デフォルトの名無しさん
08/06/29 15:06:22
DのGCって、再配置型?

575:デフォルトの名無しさん
08/06/29 20:16:29
>>571
そもそもDのクラスは参照型なので、やるとしても
Hoge hoge = new Hoge();
SetWindowsLong(win, GWL_USER_DATA, cast(void*)hoge);
こうじゃないか?
&hogeだとhogeの寿命が来た時点でダメになる気がする。

576:デフォルトの名無しさん
08/06/29 21:58:12
>>575
GreenPadのソースみながらウィンドウプロシジャ周り(0x042444c7の)をDでやろうとした時に引っかかったw
冷静になって考えれば簡単なミスなんだが。結構考え込んだ気がする。

577:デフォルトの名無しさん
08/06/29 22:25:48
GWL_USER_DATAでぐぐったらこのスレが出た。
9時間弱しか経ってないのにgoogleすごいな

578:デフォルトの名無しさん
08/06/29 22:31:21
最近のゴッゴル先生とか凄いよな…
足りない情報を探そうと思ったら~というのを探してますっていう昨日の自分の書き込みがヒットしたり…

579:デフォルトの名無しさん
08/06/29 23:56:57
2chで質問して反応がないので、後日検索すると
自分の質問が検索結果のTOPにでる悲しさ

580:デフォルトの名無しさん
08/06/30 04:32:39
最近のゴッコル先生は2chのクローリング頻度をやたら上げてるからな
2chで質問してから2時間くらいで自分の質問が引っかかったことがある
しかし自分のブログは一切かからない

581:デフォルトの名無しさん
08/06/30 06:23:57
更新頻度でクロール頻度も変えてたりするのかね

582:デフォルトの名無しさん
08/06/30 08:54:49
switch~case で break 書かなきゃ下に降りちゃうの?
こんなとこまでCを真似なくていいのに

583:デフォルトの名無しさん
08/06/30 09:08:02
caseで複数条件に対して一つの処理にしたいときにできないと困るじゃない

584:デフォルトの名無しさん
08/06/30 09:40:12
>>541見て心臓が痛くなったんだけど訴えたら勝てるかな

585:デフォルトの名無しさん
08/06/30 09:54:58
すぐ下でびっくり系のブラクラって説明されてるのにクリックするなよ

586:デフォルトの名無しさん
08/06/30 10:17:15
2ちゃんねる鉄の掟.

出されたご飯は残さず食べる。
転んでも泣かない。
おいら(ひろゆき)のギャグには大爆笑する。

587:デフォルトの名無しさん
08/06/30 12:46:30
>>583
switch(n) {
case 1: ...
case 2,3: ...
case 4,5,6: ...
}
でいい

588:デフォルトの名無しさん
08/06/30 12:50:23
そんなことよりもほかの言語との整合性が取れなくなって余計なヒューマンエラーが発生することのほうが問題。
って我らがうぉるたーたんのお達しだ。諦めておけ。

589:デフォルトの名無しさん
08/06/30 12:52:13
まぁ、違う仕様にするならキーワードを case じゃなくて when にするとか
しないと混乱するしな。

590:デフォルトの名無しさん
08/06/30 13:54:04
個人的にはswitch_breakみたいな名前でも欲しい
でも、無くてもそんなに困らないし、
そんなことよりライブラリをどうにか…

591:デフォルトの名無しさん
08/06/30 20:41:27
case 0..10とかできないのかな。VBみたいだけど。

592:デフォルトの名無しさん
08/06/30 23:14:06
いよいよ ... がほしくなる

593:デフォルトの名無しさん
08/06/30 23:23:22
vbといったらcase is

594:デフォルトの名無しさん
08/07/01 01:54:49
MPDさんのウィンドウは閉じないww

595:デフォルトの名無しさん
08/07/01 01:55:25
誤爆すまぬ

596:デフォルトの名無しさん
08/07/01 03:47:38
>584 はbreak; って書かれても fall thru しちゃういけない子

597:デフォルトの名無しさん
08/07/01 05:58:54
switch (url) {
case ブラクラ:
if (res!=584) throw new bad_res;
}

こうですか?わかりま(ry

598:デフォルトの名無しさん
08/07/01 06:10:32
res = 584;goto case ブラクラ;

599:デフォルトの名無しさん
08/07/02 10:50:14
nullオブジェクトにアクセスしたときにAccess Violationになりますが、
このときにうまくスタックトレースを取る方法がありますでしょうか。
flectionedを使うと例外の場合のスタックトレースは取れたのですが……



600:デフォルトの名無しさん
08/07/02 16:43:35
そこはddbgじゃねーかな

601:デフォルトの名無しさん
08/07/02 17:13:59
関数内で定義したローカル変数のポインタを返しても大丈夫ですか?

int* Func(){
  int Num = 10;
  return &Num;
}

みたいにした場合にスコープを抜けてもアドレスは有効なのでしょうか。


602:デフォルトの名無しさん
08/07/02 17:22:57
今年のD言語カンファレンスは、スピーカが集まらなかったので中止に
URLリンク(lists.puremagic.com)

il|li orz il|li


603:601
08/07/02 17:45:01
自己解決。
良いわけないですね。コンパイルエラーになりました。

604:デフォルトの名無しさん
08/07/02 17:49:37
>>602
あらぁ…w

605:デフォルトの名無しさん
08/07/02 20:06:05
東京でやってくれるなら喋りに行くのに。

606:デフォルトの名無しさん
08/07/02 20:37:56
ネタがないっす

607:デフォルトの名無しさん
08/07/02 20:40:31
英語ミリ

608:デフォルトの名無しさん
08/07/02 21:52:24
>>602
え?どうせ行くつもりなかったけどいつ募集してたの?

609:デフォルトの名無しさん
08/07/02 21:57:19
>>608
普通にずっとNGで募集してたと思うが。

610:デフォルトの名無しさん
08/07/03 21:56:38
更新まだー?

611:デフォルトの名無しさん
08/07/04 01:03:37
おまいらNGって何で読んでる?

612:デフォルトの名無しさん
08/07/04 02:46:14
俺はfirefox

613:デフォルトの名無しさん
08/07/04 06:42:09
thunderbirdで読んでる

614:デフォルトの名無しさん
08/07/04 16:28:12
D2.0とphobosでeliminateなどで使用する叙述関数に
任意の引数を渡したいのですが、可能でしょうか?

void main(){
    const int Value = 3;
    int[] Nums = [1,2,3,4,5];
    Nums = eliminate!("a < Value")(Nums);
}

とか

void main(){
    const int Value = 10;
    int[] Nums = [1,2,3,4,5];
    static bool Func(int Src, int Value){
        return Src < Value;
    }
    Nums = eliminate!(Func(Value))(Nums);
}

のような事をやりたいのですが。

615:デフォルトの名無しさん
08/07/04 16:58:48
D2.0のstd.streamって使えないんですかね
FileのreadLineをstringに渡そうと思ったら
Error: cannot implicitly convert expression (input.readLine()) of ty
pe char[] to invariant(char)[]
とかエラーがでるから困る

標準ストリームはdin,doutでいいんだけど
CFileを使うのは気が引ける。fopenとかいまさら使いたくないし

616:デフォルトの名無しさん
08/07/04 17:08:14
時間ないから簡単に
前者はmixinで文字列生成
後者は
static bool Func(int Value)(int Src){return Src < Value;}
eliminate!(Func!(10))(Nums)
とか?
試してないから間違ってたらごめん

617:デフォルトの名無しさん
08/07/04 17:10:44
ええい
mutable typeからinvariant typeへは明示的な変換が必要だからidup
string s = stream_.readLine().idup;

618:615
08/07/04 17:45:28
>>617
っていうか標準ライブラリなんだからinvariant仕様に直しとけと言いたい
Fileをカプセル化した自前クラスで美味しくいただけそうです

619:デフォルトの名無しさん
08/07/04 21:35:03
std.stringは全部をconst(char)[]にしてもらいたい
更新まだかなぁ・・・

620:デフォルトの名無しさん
08/07/04 23:50:07
>>614
とりあえず成功する例
かっこ悪いのでbindとか関数リテラルがどのくらい効くのか教えていただけると助かります

const int Value = 3;
static bool func(int a) { return (a < Value); }

void main(){
        int[] Nums = [1,2,3,4,5];
        Nums = eliminate!(func)(Nums);
        writefln(Nums);
}

621:デフォルトの名無しさん
08/07/04 23:55:51
>>616
後者は動きました。
>614のコードにはめると
eliminate!(Func!(Value))(Nums)
で動きますね

622:デフォルトの名無しさん
08/07/05 01:33:35
Valueを用意する必要がないのでは?
あえて定数に名前を付けたいのなら enum Value = 3; をおすすめ

623:デフォルトの名無しさん
08/07/05 01:34:07
あと std.bind はずっとぶっこわれ中

624:デフォルトの名無しさん
08/07/05 11:41:28
lazyな引数を関数外部に持っていく方法あったら教えてくれ~


625:デフォルトの名無しさん
08/07/05 13:46:31
void delegate() dg;
void func(lazy void a) {
dg={return a;};
}

これでいけると思うんだがコンパイラが死ぬな。

void func(void delegate()[] a...);
でも使っとくといいと思う。

626:614
08/07/06 01:30:55
すいません、説明不足でした。
というか提示した例が悪かったです。
比較したいValueは動的な値です。

const int Value = 3;

int Value = 3;
に置き換えた場合で考えて頂けますでしょうか。

C++でboost::lambdaを使った場合の

int Value = 3;
remove_if(Nums.begin(), Nums.end(), _1 < Value);

のようなことがやりたいのです。


627:デフォルトの名無しさん
08/07/06 01:47:05
謎さんとこのstd.expressionとか。

628:デフォルトの名無しさん
08/07/06 01:49:21
phobosのstd.algorithmはコンパイル時に決定してる関数しか受け付けないから不便だな。
とっとと、static引数導入してオーバーロードで関数ポインタとかも取れるように整理してほしいわ

629:デフォルトの名無しさん
08/07/06 03:06:20
自分で書くしかなくね?
import std.stdio;
T[] removeIf(alias cond, T)(T[] arr) {
T[] ret;
foreach (i; arr)
if (cond(i))
ret ~= i;
return ret;
}
void main() {
auto less3 = (int i){return i < 3;};
static bool greator3(int i){return i > 3;};
int[] arr = [1,2,3,4,5];
writefln(removeIf!((int i){return i<4;})(arr));
writefln(removeIf!(less3)(arr));
writefln(removeIf!(greator3)(arr));
}

630:デフォルトの名無しさん
08/07/06 03:12:21
closureあるから
int j = 3;
auto less = (int i){return i<j;};
これできるよ

631:デフォルトの名無しさん
08/07/06 03:26:59
名前が付いてないとダメだってのは使い勝手が悪いな

632:デフォルトの名無しさん
08/07/06 08:29:38
俺もそう思ってたが実は無名関数でもいけてる件

633:デフォルトの名無しさん
08/07/06 13:14:43
>>632
コードplz

634:デフォルトの名無しさん
08/07/06 16:05:28
>>629のこれのことなのだが
writefln(removeIf!((int i){return i<4;})(arr));
もしかしてphobosの話だろうか

635:デフォルトの名無しさん
08/07/06 17:20:20
こないだのアップデートからリテラルのaliasも取れるようになったんだっけか。

636:デフォルトの名無しさん
08/07/06 19:50:48
ああそれでか

637:デフォルトの名無しさん
08/07/06 21:17:26
連想配列の clear ってどうやるですか?

638:デフォルトの名無しさん
08/07/06 21:33:51
新しいのと取り替えればいいんじゃない?

639:デフォルトの名無しさん
08/07/06 22:03:14
これでよくなかったっけ
int[int] a = [1:1];
writefln(a);
a = null;
writefln(a);

640:デフォルトの名無しさん
08/07/06 22:23:11
それは空のと取り替えただけでクリアしたと言えるかは疑問だな。
もとのaの参照をどこかで持ってれば、そっちはクリアされないわけだし。

641:デフォルトの名無しさん
08/07/06 22:38:19
foreach (key; aa.keys)
  aa.remove(key);
じゃダメ?

642:デフォルトの名無しさん
08/07/07 02:05:06
2.016まだかよー

643:デフォルトの名無しさん
08/07/07 13:24:28
>629
やりたかったのはまさにこれです。
ばっちりです。ありがとうございました。

644:デフォルトの名無しさん
08/07/07 13:47:40
D言語の配列は参照型だとあるのですが、引数で渡す場合は確かにrefを
つけなくても参照で渡されているのですが、返値で返した場合って.dup
されたものが返されてしまうのでしょうか?

class CTest{
    int[] Nums;
    this(){
        Nums ~= 1;
        Nums ~= 2;
        Nums ~= 3;
    }
    int[] GetNums(){return Nums;}
}

void main(){
    CTest Test = new CTest;
    int[] Nums = Test.GetNums();
    Nums ~= 4;
}

でTest.Numsに4を追加したいのですが。

配列に限らずD言語で参照返しする場合ってどうやるのでしょうか。


645:デフォルトの名無しさん
08/07/07 14:22:17
もうすぐTango 0.99.7リリース来そうですね。
URLリンク(twitter.com)


646:デフォルトの名無しさん
08/07/07 14:58:32
>>644
Nums ~= 4; の直前と直後の配列のポインタを見てみるとわかるけど、インスタンスが変わっちゃってる。
# ということは、 ~= の演算子は配列のインスタンスに対する捜査ではなくて、配列のインスタンスを保存している変数に対する操作っていうこと…かな?
classの場合は普通に返せる。配列だけは操作するときにインスタンスが同じものになるかどうか注意しなきゃいけない。
# 配列の要素を増やす時は違うインスタンスになる場合があって、配列の要素を減らす場合にはインスタンスは変わらない。
tangoのArrayBagみたいなクラスでラップすると幸せになれるかもしれない。

647:デフォルトの名無しさん
08/07/07 15:09:35
Core2DuoE6600の環境なんだけどstd.cpuid.amd64がtrue
笑っちゃった。俺の環境がおかしいのか?

648:デフォルトの名無しさん
08/07/07 16:06:54
>646
試してみましたが自分の環境では ~= の前後ではアドレスは変わらなかったです。
そして引数で渡したときはアドレスが変わらず、返値で返した場合はアドレスが
変わっていました。

class CTest{
    int[] Nums;
    this(){
        Nums ~= 1;
        Nums ~= 2;
        Nums ~= 3;
    }
    int[]* GetpNums(){return &Nums;}
}

void main(){
    CTest Test = new CTest;
    int[]* pNums = Test.GetNums();
    *pNums ~= 4;
}

と配列のポインタを返すようにしたらできました。
ただ、これだとGCがちゃんと返した配列のポインタを追ってくれるのかが不安だったり。
うーん、いまいち配列の扱いがわからない。

やはりクラスでラップするのが安全なのかなぁ。

649:デフォルトの名無しさん
08/07/07 16:13:58
たぶん勘違いしてる、というか俺の伝え方が悪かった。すまん。
配列のポインタは Nums.ptr これで得られる。
URLリンク(codepad.org)
↑を参考にするとわかると思う。
# ちなみに、容量をリザーブしておくとインスタンスが変わらない。
# コメントアウトをはずすと同じポインタになる。

650:デフォルトの名無しさん
08/07/07 16:26:26
>>648
codepadの環境では、前後でアドレスは変わった。
URLリンク(codepad.org)
> Test.Nums: [401C3FB0]
> main.Nums(before): [401C3FB0]
> main.Nums(after): [401C2F80]

一応、仕様では「配列の連結は、 片方が長さ 0 の配列であっても必ずコピーを伴います」
だそうなので、Nums ~= 4; でローカルのNumsアドレスが新しい配列のものになるのが正常だと思う。
(つまり、参照先の配列インスタンス自体を連結演算によって変更するのは無理ってこと)

一個のメンバ変数を対象として変更する場合はメンバ変数への参照(ポインタ)を返してやればいいけど、
それだとTest.Numsの指す配列が他の変数によって参照されてたりするとやっかいな問題になると思う。

651:デフォルトの名無しさん
08/07/07 16:50:42
>>647
AMD64とEM64Tってほぼ互換じゃなかったっけ

652:デフォルトの名無しさん
08/07/07 16:53:20
>>649
> # ちなみに、容量をリザーブしておくとインスタンスが変わらない。
> # コメントアウトをはずすと同じポインタになる。
ホントだ。

Nums ~= 4; を Nums = Nums~4; とすると、アドレスが変わるようになる。
URLリンク(codepad.org)

アドレスが変わらない場合も、Test.Numsの長さが自動的に延びるわけじゃなくて、
スライスみたいなことになってるみたいだ。(Test.Numsには4は追加されない)
URLリンク(codepad.org)

こういう仕様なのかバグなのか。実装を考えればこの挙動は自然だけど……

653:デフォルトの名無しさん
08/07/07 17:19:30
>>651
俺の無知か。スマソ

654:デフォルトの名無しさん
08/07/07 17:58:19
lengthを増やすとアドレスが変わってしまいますね。
そしてリザーブしてもアドレスは変わらないが、追加されたメンバが
更新されないと……

URLリンク(codepad.org)
みたいに引数にリファレンスで渡した場合は追加されるので、それと
同じ事が返値でもできればいいのですが。
C++のように返値のリファレンス指定でできないんですねぇ。

655:デフォルトの名無しさん
08/07/07 18:29:01
std.xml、マニュアルにあるサンプルプログラムちゃんと動く?
どうしてもうまく動かない・・・
2.0.15です

656:デフォルトの名無しさん
08/07/07 18:50:59
前に誰かがstd.xmlが動かなくなったって言ってたような・・・
trunk版でも無理なのだろうか

657:デフォルトの名無しさん
08/07/07 19:23:54
>>654
>C++のように返値のリファレンス指定
俺もこれほしいかも
というか、参照とかポインタとかはC++のほうがわかりやすくて好きだ…

658:デフォルトの名無しさん
08/07/08 00:43:38
(関数ポインタを除く)

659:デフォルトの名無しさん
08/07/08 00:57:05
>>645
linux環境だと、Theadクラス使うと落ちまくってとても使えたものじゃないのだが、
いつになったら直るのだろうか・・・

660:デフォルトの名無しさん
08/07/08 13:22:48
>>645
ん、まさか tnago に DBI でもマージするつもりなのか…
アレの SQLite バインディングは動かないコードのまま trunk に放置されてるからなぁ…

661:デフォルトの名無しさん
08/07/09 00:02:39
>>645
じゃあ、0.99.7に移行する前に破壊的変更の予習。
URLリンク(www.dsource.org)
今回多いなw

662:デフォルトの名無しさん
08/07/09 01:17:41
>>661
>tango.io: The use of FilePath and PathView in FileConduit is deprecated in favour of char[] paths
>tango.text.xml.XmlPrinter: Deprecated in favor of DocPrinter
>tango.group: Deprecation period expired, so will be removed.
ここら辺はかなり厳しそうだな。

663:デフォルトの名無しさん
08/07/09 02:17:16
phobosのtrunkが大量に更新されてる件

664:デフォルトの名無しさん
08/07/09 02:24:07
あ、やべぇ、なんかTangoのD2.0のマージ来た…!?
URLリンク(www.dsource.org)

665:デフォルトの名無しさん
08/07/09 03:23:46
暴走するのはPhobosだけにしてくれよ…

666:デフォルトの名無しさん
08/07/09 03:34:05
これはDコミュニティの文化だよ

667:デフォルトの名無しさん
08/07/09 04:46:53
>>664 キタ━(゚∀゚)━!!

668:デフォルトの名無しさん
08/07/09 11:04:08
PhobosとTangoがなかよくなりますように・・・

669:デフォルトの名無しさん
08/07/09 18:53:28
2.016もきた

- re-implemented internal.monitor in D. Rationalized internal.object
- Bugzilla 288: changed return type of opEquals from int to bool. ***This necessitates doing a grep for opEquals and changing all the return values.***
- Added .__vptr and .__monitor properties for class objects for use in the internal runtime library.
- Made rdmd's source available through svn, see URLリンク(dsource.org)
- Simplified std.algorithm by fusing together higher-order functions taking an alias and their counterparts taking a string
-Added module std.array containing array operations: insert, erase, and replace
-Changed the enforce's implementation to generate smaller code per call
-Changed std.functional.binaryFun to work with strings and function aliases alike
-In std.getopt, added optChar, assignChar, and endOfOptions, per popular demand :o|
-In std.math, replaced a bunch of consts with enums
-In std.numeric, added Don Clugston as author and operated minor documentation fixes
-Improved std.stdio.chunks to take an iteration tally in addition to the chunk

また、すごい変更がw



670:デフォルトの名無しさん
08/07/09 19:16:19
大して大きくないような。.__vptrと.__monitorは今まで無かったのが(ry
それより修正して欲しかったバグの修正ktkr

671:デフォルトの名無しさん
08/07/09 20:07:24
よくわからん・・・誰か要点を・・・

672:デフォルトの名無しさん
08/07/09 22:05:19
>>671
opEqualsの戻り値型が変わったことぐらいだろ。

673:デフォルトの名無しさん
08/07/10 12:38:58
stringzとかいう型出来ないかな

文字列が入ると最後に'\0'を埋めてくれて
writeflnなどD用の時は'\0'を無視、
C用の時は'\0'を使えるという感じに
もしくはC用の関数内では最後に'\0'が付加されるというような

toStringzで事足りるんだけどな

674:デフォルトの名無しさん
08/07/10 16:34:06
>>673
リンケージによって文字列の内部構造が変化するのは便利かもだけど怖い

675:デフォルトの名無しさん
08/07/10 20:38:11
opEqualsとうとうboolになったのか。
パフォーマンスが云々うぉるたんが抵抗してたのは解決したんかな。

しかしTangoはどうあってもモジュール名のUpperCamelを止める気はないのだろうか。

676:デフォルトの名無しさん
08/07/10 21:39:03
>>675
いまさら変えられても混乱するしこのままでいいかなって最近思ってきた。

677:デフォルトの名無しさん
08/07/10 21:49:20
opAssign定義した構造体の連想配列に新しく要素を格納しようとすると落ちるのは何でなんだぜ?

678:デフォルトの名無しさん
08/07/10 23:18:34
独り言だけど、Win32 とのやり取りが面倒なので、
普通にマルチバイト文字が使えるようにして欲しい。

const char *track_name[] = [mbs"日本語",mbs"日本語"];

みたいな。

679:デフォルトの名無しさん
08/07/11 00:05:18
今更A関数なんて使わないっしょ。W関数で十分っしょ。とか言われてたなあ。

680:デフォルトの名無しさん
08/07/11 03:19:48
>>678
それはコンパイル時に文字コードが決まるの?それとも実行時?

681:デフォルトの名無しさん
08/07/11 03:23:24
CTFE-ableな変換関数をですね…

const achar* track_name[] = [astring("日本語"), astring("日本語")];

682:デフォルトの名無しさん
08/07/11 08:59:23
もうShift-JISはやめようぜ

683:デフォルトの名無しさん
08/07/11 11:30:13
今更A関数なんて使わないっしょ。W関数で十分っしょ。

684:デフォルトの名無しさん
08/07/11 12:46:38
URLリンク(dic.nicovideo.jp)
誰だよ

685:デフォルトの名無しさん
08/07/11 13:41:25
いまどきデフォルトエンコードがUFT-8じゃないOSが糞ということ

686:デフォルトの名無しさん
08/07/11 13:45:36
>>684
>5のマヌケな足の開き方が素敵

687:デフォルトの名無しさん
08/07/11 13:48:48
主要なソフトがsjisにも対応していればいいだけの話で
過去との互換性を気にするならば
最低限のテキストエディタのメモ帳ぐらいが対応すればいい話

win用で人気のあるテキストエディタはutf8とか対応してるしな

688:デフォルトの名無しさん
08/07/11 14:49:14
はやくstdoutにフィルターをかぶせられるようにしてほしい。

689:デフォルトの名無しさん
08/07/11 20:18:32
クラスに単純な値コピーをさせる方法ってありましたっけ

690:デフォルトの名無しさん
08/07/11 20:59:24
>>688
ああそういうことができるんだね
でもできないんだね

>>689
あったっけ?なかったような

691:デフォルトの名無しさん
08/07/11 22:59:57
中文やらハングルやらが扱えないようにおれは A のAPIでやってるぜ。

692:デフォルトの名無しさん
08/07/12 01:28:36
だいぶ前に出てて挫折してた
「dsource.orgのWin32Api Bindingsをdmd2.0でコンパイルすると出るエラー」

が、いつの間にかなくなってるッ!!

>>340(いつからなおってたんだー!?)
やっと2.0系に復帰できるワァ

693:デフォルトの名無しさん
08/07/12 01:41:01
>>692
半年前には大丈夫っだった気がするが、
使ってるAPIの差かもしれん

694:デフォルトの名無しさん
08/07/12 06:31:50
>>692
DMD2.016でまたむりぽ

695:デフォルトの名無しさん
08/07/12 07:25:41
>>692
半年前には直ってたものを壊れた瞬間に知るとかw

696:デフォルトの名無しさん
08/07/12 07:28:55
型なのに型として認識してくれなくてやってた苦肉のtypeof(型)ができなくなってるね
元々の問題が修正されたのならいいのだけど

697:デフォルトの名無しさん
08/07/12 10:44:36
DMD 2.017 リリース

698:デフォルトの名無しさん
08/07/12 11:16:58
>>697
まじだ
バグフィックスだけだね

699:デフォルトの名無しさん
08/07/12 15:04:08
Webから画像ダウンロードできたりしますか

700:デフォルトの名無しさん
08/07/12 15:27:12
できる。

701:デフォルトの名無しさん
08/07/12 21:05:40
>>678
だからUTF-8でない文字列をchar*に入れるなとあれほど…

702:デフォルトの名無しさん
08/07/12 21:12:50
mbsはubyte*にするべきだったりするの?

703:デフォルトの名無しさん
08/07/12 21:14:19
>>702
もちろん

704:デフォルトの名無しさん
08/07/12 22:16:11
charはutf-8って規格で決まってるからな-。
それ以外が入ってるのは気持ち悪いというか、間違っているという話。


705:デフォルトの名無しさん
08/07/12 23:09:10
>>678 >>701-704
こういう案はどうなの?
URLリンク(rayerd.ddo.jp)

706:デフォルトの名無しさん
08/07/13 00:35:33
もうstd.encodingがあるしやるならその上に作るべきでは

707:デフォルトの名無しさん
08/07/13 00:37:29
>>705
wstring toUTF16(in mbchar[] s, in uint codePage=0)
{
mbstring sz = (s ~ cast(mbchar)'\0').idup;
wstring result;
result.length = MultiByteToWideChar(codePage, 0, cast(char*)(sz), sz.length, null, 0);
MultiByteToWideChar(codePage, 0, cast(char*)sz, sz.length, cast(wchar*)result, result.length);
return result;
}

invariantであるresultに書き込もうとしてるのはおかしいな。
キャストしてしまってるから本来検出されるはずなのエラーがでなくなってる。

MultiByteToWideChar(codePage, 0, sz.ptr, sz.length, result.ptr, result.length);
でコンパイル通るように直したほうがいい。

708:デフォルトの名無しさん
08/07/13 01:23:06
Dで外部アプリの実行とかってどうやればできますか。

709:デフォルトの名無しさん
08/07/13 01:27:03
>>707
>>708
import std.process;
std.process.system("dir");

710:デフォルトの名無しさん
08/07/13 01:31:20
>>706
正直申し上げますと、あれインターフェイスが糞すぎる

711:デフォルトの名無しさん
08/07/13 01:34:08
>>709
あ・・・ありがとう。
CreateProcess使ってできてやったーとか思ったらそんな簡単に・・・

712:デフォルトの名無しさん
08/07/13 01:35:03
std::basic_stringの仕組みを丸ごと移植したらどうかと思うのだが

713:デフォルトの名無しさん
08/07/13 01:44:57
>>707
> MultiByteToWideChar(codePage, 0, sz.ptr, sz.length, result.ptr, result.length);
> でコンパイル通るように直したほうがいい。
え・・・そんなんできんの・・・

714:デフォルトの名無しさん
08/07/13 02:02:06
OpenGLのポーティング、D2.0でもデフォのまま使えるようになったのね
さっき最新取ってきて直そうと思ったら、既に修正済・・・感動した

715:デフォルトの名無しさん
08/07/13 02:07:24
Linux系でD言語やろうと思ったらここ見ればいいってHPないですかね。

716:デフォルトの名無しさん
08/07/13 02:07:29
>>713
???

717:デフォルトの名無しさん
08/07/13 02:11:21
>>716
MultiByteToWideChar(codePage, 0, sz.ptr, sz.length, result.ptr, result.length);
キャストなしのこれをコンパイルエラー出さずに書くやり方があるのかなと

718:デフォルトの名無しさん
08/07/13 02:50:24
もうperlみたいにしてしまえ

719:デフォルトの名無しさん
08/07/13 04:22:25
tangoのProcessってサンプル使ってもうごかないんすけど。

720:デフォルトの名無しさん
08/07/13 04:25:54
よくあること

721:デフォルトの名無しさん
08/07/13 04:41:14
Executeしないと動かなくなってた><

722:デフォルトの名無しさん
08/07/13 05:20:48
HttpClientのGetResponseが爆発してて自分の手に負えません。

だれか画像ゲットのやりかた教えてください。

723:デフォルトの名無しさん
08/07/13 08:40:25
1年ぶりに着たけどやっぱ仕事では使えなさそう。
俺と同じ。知ってた。

724:デフォルトの名無しさん
08/07/13 09:09:18
>>720
本当に良くあるから困る
stdioのwriteflnの時は俺がラリった
ioを自分で作成して出力せにゃいかんのかと思ったり

725:722
08/07/13 09:29:22
Descentが教えてくれる関数一覧を信じすぎました。
事故解決。

726:デフォルトの名無しさん
08/07/13 18:23:13
だから安定版ならD1.0があると(ry

727:デフォルトの名無しさん
08/07/13 18:36:52
D1.0系列って本当に安定してるの?

728:デフォルトの名無しさん
08/07/13 18:37:31
仕様は安定してるよ。

729:デフォルトの名無しさん
08/07/13 18:55:23
>>726-728
わらた

このままバージョンが変わらないでいてくれたら
D-1とかD-2とかいう扱いでコードの配布が安定できて嬉しいな

730:デフォルトの名無しさん
08/07/13 19:00:23
D2.0が安定化するころにはD3.0が登場してて阿鼻叫喚になってると予想してみる

731:デフォルトの名無しさん
08/07/13 19:02:17
メジャーバージョンアップ=仕様の確定=完全な互換性の断ち切り

732:デフォルトの名無しさん
08/07/13 19:06:18
phobos vs tango
d1.0 vs d2.0
で組み合わせが四通りあるから困る
d1.0+phobosで開発してきたが、tangoのFiber使いたい俺としては
せめてphobosとtangoが共存してくれれば...

733:デフォルトの名無しさん
08/07/13 19:12:06
URLリンク(codepad.org)
FizzBuzz書いてみたいがtoStringってコンパイル時に動かないんだな

734:デフォルトの名無しさん
08/07/13 20:00:40
>>733
っ std.metastrings

735:デフォルトの名無しさん
08/07/13 20:07:07
DだとFizzBuzzを最小何文字で作れるんかな
ちなみに俺は140文字だった

736:デフォルトの名無しさん
08/07/13 20:18:48
>>735
URLリンク(www.shinh.org)
に83バイトという記録がある。
いったいどんなコードなのやら。

737:デフォルトの名無しさん
08/07/13 20:24:29
>>730 それは>>731から本望 QED
>>732 tangoがphobos準拠じゃないのが悪いんだよ
なんで自作ライブラリごときが標準ライブラリと共存できないんだってことだよw

738:デフォルトの名無しさん
08/07/13 20:33:21
tangobosは?

739:デフォルトの名無しさん
08/07/13 20:40:02
>>737
tangoはGCや配列キャストなどの言語の基幹部分も独自に持っていて、
phobosを置き換えるのが目的で作られてるから、共存できなくて当然。

740:デフォルトの名無しさん
08/07/13 21:39:01
>>736
切り詰めて87文字
しかも数字が表示できない、中括弧使うと文字増えるしなぁー
import std.stdio;void main(){int i;while(i++<100)writef(i%3?"":"Fizz",i%3?"":"Buzz");}

741:デフォルトの名無しさん
08/07/13 21:44:04
>>740
printf使えばもっと短くできるんじゃない?

742:デフォルトの名無しさん
08/07/13 21:55:04
>>739
じゃあphobosが言語の基幹とライブラリの機能分担に失敗してる?

743:デフォルトの名無しさん
08/07/13 22:21:54
>>741
これで99文字
void main(){for(int i;i++<100;)printf("%.*s%d",(i%3?"":"Fizz")~(i%5?"":"Buzz"),!(i%3&&i%5)?0:(i));}
こっちが別案(100文字ジャスト)
void main(){int i;char[]s;while(i++<100)printf("%.*s%d",s=(i%3?"":"Fizz")~(i%5?"":"Buzz"),s?0:(i));}

どっちもゴミが入るし83文字なんて…

744:デフォルトの名無しさん
08/07/13 23:16:42
>>732
D言語研究室にファイバあった。
前に試したけど、ファイバの部分だけならコンパイル通るようにするのはそれほど難しくない。

745:デフォルトの名無しさん
08/07/14 01:40:53
d で windows アプリケーションを作るときに XP のビジュアルスタイルを当てる方法をおしえてください

746:デフォルトの名無しさん
08/07/14 02:13:17
マニフェスト作ればいいんじゃないの。
詳しくしらんが。

747:デフォルトの名無しさん
08/07/14 02:26:09
%03dとかやれる関数ってないっすか。

748:デフォルトの名無しさん
08/07/14 02:35:44
std.string.format

749:デフォルトの名無しさん
08/07/14 03:12:25
std.c.stdio.sprintfでおk

750:デフォルトの名無しさん
08/07/14 03:53:45
tangobos で tango と phobos を同時に使うと、無駄に富豪的な気分がするぜ

751:デフォルトの名無しさん
08/07/14 08:10:02
tangoではないんでしょうか。

char[] format(char[] format, ...)
{
Sprint!(char) sp = new Sprint!(char);
return sp.format(format, _arguments, _argptr);
}
とかやっても%がそのまま出力されちゃうんですが。

752:デフォルトの名無しさん
08/07/14 08:34:12
>>751
tangoのフォーマットはC#と同じなのでそのようにやると良い。

753:デフォルトの名無しさん
08/07/14 10:31:52
>>750
同時につかえるやつなんだ!しらんかった
両ライブラリの最新に対応してるのかなぁ
てかObjectクラスが違うはずなのに大丈夫なのかな

754:デフォルトの名無しさん
08/07/14 13:25:00
tangoの方のオブジェクトが使われるはず。

問題が出たとしても、そういうことの解決をやるのがtangobosっていう擦り合わせのプロジェクトですよ。

755:デフォルトの名無しさん
08/07/14 13:43:00
やっぱ、tangobosって方向性として間違ってるよなw

756:デフォルトの名無しさん
08/07/14 14:09:00
>>745
main.exeが実行ファイルだとしたら、以下の内容をmain.exe.manifestとして保存して実行ファイルと同じフォルダに入れておけば、どんな言語で作ってもXPビジュアルスタイルになる。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
name="main"
processorArchitecture="x86"
version="1.0.0.0"
type="win32"/>
<description>main</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>


757:デフォルトの名無しさん
08/07/14 15:07:12
>>752
そうだったんですか。
ありがとうございました。

758:デフォルトの名無しさん
08/07/14 21:04:15
こんなところ見つけた。
URLリンク(www5.atwiki.jp)


759:デフォルトの名無しさん
08/07/14 23:56:39
>>758
かなり気合入ってるな

760:デフォルトの名無しさん
08/07/15 05:11:03
ディレクトリ系の例外拾うと、システムの日本語が入ってるせいか文字化けするんですが、
誰か治し方しりませんか。

761:デフォルトの名無しさん
08/07/15 07:04:24
連投ですいません。
auto http = new HttpClient( HttpClient.Get, "URLリンク(localhost)" );
http.open();
HogeClass _this = this;
DataOutput stream = new DataOutput(new FileOutput( this.current.toString()~"hoge.jpg" ));
if( http.isResponseOK )
{
int len = http.getResponseHeaders.getInt( HttpHeader.ContentLength, int.max );

http.read( (void[] data)
{
stream.write(data); //○
_this.addPicture(data);//X
_this.last = data;//X
}, len );

}
stream.flush();
stream.close();
http.close();

Dlした画像のデータをvoid[][]dataで保存しておきたいのですが、
無名関数を出たとたんにDLしたデータが壊れてしまってるようです。

何が駄目なんでしょうか?

762:デフォルトの名無しさん
08/07/15 07:24:41
dataをdupしたら解決しそうな気がする

763:デフォルトの名無しさん
08/07/15 07:36:56
だめですた・・・・・

764:デフォルトの名無しさん
08/07/15 07:46:32
voidはどうすればキャストとかできるんでしょうか。
中身をのぞいてみようと思ったんですが、何にもキャストができません。
あと、
無名関数内の引数dataのlengthは1716でlenは4323でした。

765:デフォルトの名無しさん
08/07/15 10:28:28
Voidはキャスト可能でした><

766:デフォルトの名無しさん
08/07/15 11:03:14
>>760
再現コード

767:デフォルトの名無しさん
08/07/15 13:02:20
>>764
無名関数が複数回呼ばれることを理解してない、ということかな?
無名関数内の引数dataは実際のデータが小分けになっている。
複数回呼ばれたときのdataを全部連結すると、お望みのデータになるよ。

768:デフォルトの名無しさん
08/07/16 01:25:29
>>767
おおおおう。
できました。


ありがとうございました。

769:デフォルトの名無しさん
08/07/16 05:35:23
FizzBuzz書いてみた
URLリンク(codepad.org)

codepadはmetastrings使えないんだな
tangobos使ってるみたいだがバージョンが古いんだろうか

770:デフォルトの名無しさん
08/07/16 11:58:19
>769
std.string.toString() 使えば、toStr 要らなくね?

771:デフォルトの名無しさん
08/07/16 13:12:32
おこられたURLリンク(codepad.org)

772:デフォルトの名無しさん
08/07/17 15:20:06
配列の末端から取り出すのって皆さんどうやってますか?

773:デフォルトの名無しさん
08/07/17 15:45:37
リバースして、ふぉーいーちにかけるか、ふぉーで配列の要素数-1から逆順でとる。
それ以外ってあるかなぁ。

774:デフォルトの名無しさん
08/07/17 15:52:21
foreach_reverseがあるのに,なんでわざわざreverseするのん?

775:デフォルトの名無しさん
08/07/17 22:21:55
/home/d/dsss/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../libDG-tango-io.a(tango.io.Conduit.o): In function `_D5tango2io7Conduit7Conduit5errorMFAaZv':
Conduit.d:(.text+0x134): undefined reference to `_D5tango4core9Exception11IOException7__ClassZ'
Conduit.d:(.text+0x151): undefined reference to `_D5tango4core9Exception11IOException5_ctorMFAaZC5tango4core9Exception11IOException'
/home/d/dsss/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../libDG-tango-io.a(tango.io.Buffer.o): In function `_D5tango2io6Buffer6Buffer5errorMFAaZv':
Buffer.d:(.text+0x1580): undefined reference to `_D5tango4core9Exception11IOException7__ClassZ'
Buffer.d:(.text+0x159d): undefined reference to `_D5tango4core9Exception11IOException5_ctorMFAaZC5tango4core9Exception11IOException'
collect2: ld はステータス 1 で終了しました
Command /home/d/dsss/bin/rebuild returned with code 65280, aborting.
Error: Command failed, aborting.

これはいったい何をぐぐったらわかるんでしょうか。

776:デフォルトの名無しさん
08/07/18 00:48:33
>>775
ldの引数で、-lDG-tango-ioの右側に-lDG-tango-coreが書いてない、ということだな、そのエラーメッセージは。
ldはライブラリの依存関係に沿って引数を書かないとリンクエラーになる。

777:デフォルトの名無しさん
08/07/18 09:24:16
>>773
うそだろ
v[$-1]じゃねーの!?

778:デフォルトの名無しさん
08/07/18 10:09:25
>>777
おまえは何を言っているんだ。

779:デフォルトの名無しさん
08/07/18 10:43:50
>>778
777じゃないが俺が代弁しよう。きっとこういいたかったに違いない。
while (v.length)
{
func(v[$-1]);
v.length = v.length-1;
}

780:デフォルトの名無しさん
08/07/18 11:24:50
>>779
お前凄いな。

781:777
08/07/18 13:13:09
>>778
ごめん、末端から「順に」取り出すのね。
勘違いしてました

>>779
エスパーすぐる!
フォローまでしていただいて・・・

782:773
08/07/18 16:54:03
foreach_reverseって実装されてたのか。
ROMってるだけだと疎くなっちゃうね。正直すまんかった。

783:デフォルトの名無しさん
08/07/18 18:38:34
かなり昔からある気がするが…

784:デフォルトの名無しさん
08/07/18 20:09:01
>>776
使ってるのはdsssなんですが、直すにはどの辺り調べるといいんでしょうか

785:776
08/07/19 00:21:44
>>784
dsssは使ってないから、正確なところはわからない。
もし、読み込んでいるdsss.confにbuildflags=-llDG-tango-core -llDG-tango-io ... のような記述があるなら、書いてあるライブラリの順番が問題なので、それを依存関係に沿って(左のライブラリが右のに依存するように)並び替えればよいのだけど……。


786:デフォルトの名無しさん
08/07/19 22:25:32
Cと比べてどっちが速いの?

787:デフォルトの名無しさん
08/07/19 22:40:32
>>786
・両方ネイティブコード吐くし、どっちがあらゆる面で速いとは言えない。
・メモリ周りはGCある言語のほうが現実的に速くなるよ、と公式では主張されている
・コンパイル速度はDのほうが遙かに速い
・VC++なんかの商用コンパイラのほうが最適化は賢い(んじゃね?
・最適化部は同じだろうし、dmdならdmcと、gdcならgccと同じようなパフォーマンスになる(んじゃね?

下二つは適当。

788:デフォルトの名無しさん
08/07/19 22:51:01
マイクロベンチマークでは、GCC相手でけっこう良い勝負をする
(ICCとかVC++になるとどうだろうか)
ただ最近のバージョンになると速度がやや落ちたみたい
URLリンク(shootout.alioth.debian.org)
URLリンク(shootout.alioth.debian.org)

Dは本質的にかなり速度が出そうな言語ではある
コンパイラ屋が再設計したC++みたいなもんだから

789:デフォルトの名無しさん
08/07/19 23:24:50
>>786
向き不向きがあるけど、開発速度はDのほうが圧倒的に早い…
という比較があった気がした。
ある課題をいろんな言語で解くコンテストがあって、それでDがGCと契約のおかげでいい成績出したって内容だった気がする

790:デフォルトの名無しさん
08/07/20 02:07:08
実行速度はライブラリの差が大きいだろうな
複雑な数値計算とかなると、もう

791:デフォルトの名無しさん
08/07/20 16:41:09
>>789
C++でどうしても生産性があげれなかったヘタレな俺
現状どうみても D>>C++ です。 本当にありがとうございます。

792:デフォルトの名無しさん
08/07/21 11:41:00
IDE欲しくてDescentに挑戦したけど、どうにもコンパイルできなかった。
143あたりの手順も試してみたけどダメだった。結局makeに逆戻りしちゃった。
なんか導入しやすいIDEないかな?2.0系使えるやつ

793:デフォルトの名無しさん
08/07/21 14:32:18
Poseidon

794:デフォルトの名無しさん
08/07/21 19:35:25
gdc(mingw)0.24でgc_initを呼ぶと即座に落ちる。
_minitもundefinedと言われるし・・・

Win32 のサンプルが動かないとか心が折れそう。

795:デフォルトの名無しさん
08/07/21 23:59:48
>>794
WinMainを使わずにmainを使えばいい。
インスタンスハンドルが欲しければGetModuleHandleで得られるし。

796:794
08/07/22 00:15:22
>>795
本当はDLLを作りたいんだけど、DllMainのgc_initでこけてたので、
前段階としてWinMainで実験してみて、うまくいってないという話。
DLL以外ならmainでいいんだけどね。
紛らわしくてスマソ。

797:デフォルトの名無しさん
08/07/22 13:08:40
うぉるたんインタヴュー
URLリンク(www.techworld.com.au)


798:デフォルトの名無しさん
08/07/22 14:26:04
> Ignore all the people who tell you it can't be done.
> Telling you it can't be done means you're on the right track.

らしいですよ。

799:794
08/07/22 20:06:30
自己解決。
スレ汚し失礼しました。

800:デフォルトの名無しさん
08/07/22 21:18:13
自己解決したらちゃんと解決方法も書きなさい

801:794
08/07/22 21:21:15
URLリンク(www.digitalmars.com)

DigitalMarsで検索してたら普通にあった。

802:デフォルトの名無しさん
08/07/23 18:22:54
URLリンク(www.vimeo.com)
URLリンク(www.n-brain.net)
これ使ったことある人いるかな

803:デフォルトの名無しさん
08/07/23 18:26:45
うお、まだ配布されてなかった
すまn

804:デフォルトの名無しさん
08/07/23 19:58:27
>>797
そういえばウォルタンの顔を見たことがなかったという衝撃

805:デフォルトの名無しさん
08/07/23 21:59:17
髭がないのがD言語普及の妨げになってるんだよな。

806:デフォルトの名無しさん
08/07/23 22:06:10
懐かしいな
URLリンク(slashdot.jp)

807:デフォルトの名無しさん
08/07/23 22:13:17
やはりここはウォルたんにも髭を・・・・・

808:デフォルトの名無しさん
08/07/23 22:14:59
>>806
ハゲである必要はないんか?

809:デフォルトの名無しさん
08/07/23 22:16:45
ハゲると言語仕様が複雑に・・

810:デフォルトの名無しさん
08/07/23 22:19:03
ウォルたんの頭髪大ピンチ!

811:デフォルトの名無しさん
08/07/24 06:13:13
髭を剃ることを暗に明に強制されるような環境で、
好きに言語を設計するような仕事はできないという点では明察なんだよな。
その意味でウォルたんは好きに言語を設計してると思うから問題ない

812:デフォルトの名無しさん
08/07/24 06:36:53
いくらなんでもこじつけだろと思ったが三行目で吹いた。
確かに好きに設計してるなwwww

813:デフォルトの名無しさん
08/07/24 09:34:07
をるたん・ぶらいと

814:デフォルトの名無しさん
08/07/24 10:55:23
うぉるたんって60才ぐらい?

815:デフォルトの名無しさん
08/07/24 12:46:45
永遠の17歳

816:デフォルトの名無しさん
08/07/24 15:21:05
>814
URLリンク(www.walterbright.com) によると
「1979年にカリフォルニア工科大を卒業した」そうだから、
50代前半じゃね?


817:デフォルトの名無しさん
08/07/24 15:21:06
caltechを1979に卒業と書いてあるので、
だいたい50~55くらいの範囲だな

818:デフォルトの名無しさん
08/07/24 18:31:20
仲いいなお前らwww

819:デフォルトの名無しさん
08/07/24 18:35:16
この一連の流れを/.本家へ投稿してみたいところだな

820:デフォルトの名無しさん
08/07/24 22:48:31
>>819 やめろww

821:デフォルトの名無しさん
08/07/25 00:00:46
バージョンアップがこなさすぎる…
最後にリリースされたのいつだよ…

822:デフォルトの名無しさん
08/07/25 00:24:30
一連の流れから分かったこと
・D言語に足りないのは髭

823:デフォルトの名無しさん
08/07/25 01:17:17
じゃあ今度からD言語ではhogeの代わりにhigeを使えばいい、というわけか。

module walter.hige;
int hige(){ return 0; }

824:デフォルトの名無しさん
08/07/25 01:22:24
じゃあDのマスコットキャラに髭つけようぜ

825:デフォルトの名無しさん
08/07/25 01:36:39
かっけーじゃん

826:デフォルトの名無しさん
08/07/25 01:38:17
髭の長さ=Dのバージョン

827:デフォルトの名無しさん
08/07/25 02:59:06
Visual studio並のIDE欲しい・・・

828:デフォルトの名無しさん
08/07/25 03:46:48
IDEがあればD言語かつる
っていうか今や普及にIDEは必須だぜ・・・

829:デフォルトの名無しさん
08/07/25 04:06:17
うぉるタンはベンツ乗り?
URLリンク(www.walterbright.com)
うぉるタンのひーお爺ちゃんは日本に来たよ
URLリンク(www.walterbright.com)
URLリンク(www.norwichfreeacademy.com)
URLリンク(www.norwichfreeacademy.com)

830:デフォルトの名無しさん
08/07/25 09:45:47
struct type
{
  typeof(this) opAssign(type other)
  {
    return this;
  }
}

int main()
{
  type[string] map;
  type hoge;
  map["name"] = hoge;//Error :ArrayBoundsError

  return 0;
}

何でエラーになるの?教えてエロい人!

831:デフォルトの名無しさん
08/07/25 12:03:32
=演算子が関数呼び出しにハイジャックされてるからじゃねーの?

832:デフォルトの名無しさん
08/07/25 12:34:35
>>821 この間2.017がでたところじゃないか

833:デフォルトの名無しさん
08/07/25 12:42:40
VSのプラグインみたいなのでどこまでできるの?
前にインテリセンスをがんばってた人がいたけれど.

834:デフォルトの名無しさん
08/07/25 13:30:31
IDEなんて不要。何の役にも立たない。
そんなのにリソース割かれてコンパイラの完成遅れられたら困る。

835:デフォルトの名無しさん
08/07/25 13:38:59
完成・・・だと・・・ッ!?

836:デフォルトの名無しさん
08/07/25 13:54:21
>>830
 map["name"] = hoge;

 map["name"].opAssign(hoge);
と解釈される。

map["name"]でエラー

837:デフォルトの名無しさん
08/07/25 16:20:50
>>835 そもそも完成なんて概念は存在しないというのは言ってはいけないのかもしれんが言っちゃった

838:デフォルトの名無しさん
08/07/25 17:31:44
>>834
別にウォルたんに作れとは言わんw

839:デフォルトの名無しさん
08/07/25 18:49:49
>>835
>>797より
>Do you still consider D to be a language "under development"?
>  A language that is not under development is a language that is not being used.
>  D is under development, and will stay that way as long as people use it.
>  C++, Java, Python, PERL, etc., are also widely used and are still under development.
「IDE? もうあるじゃん」的な発言からも分かるように、なんとなく、
うぉるタンにはDをみんなに広めてやろうっていう野心が足りないんだな。

840:デフォルトの名無しさん
08/07/25 18:54:57
生粋の技術屋なんだな

841:デフォルトの名無しさん
08/07/25 19:15:06
うぉるたんには髭の生えた参謀役が必要なんだな

842:デフォルトの名無しさん
08/07/25 22:14:45
Tango 0.99.7 Dominik released

843:デフォルトの名無しさん
08/07/26 00:18:53
Dらしいboost::tupleを作ったはいいけど、コード補完のメンバ一覧が出たとたんIDEが落ちるw

844:デフォルトの名無しさん
08/07/26 00:27:03
このスレよりもD言語について盛んに議論されてる場所ってある?
少なくともうぉるたんについてはこのスレが一番だと思うが。

845:デフォルトの名無しさん
08/07/26 02:08:44
日本にはないと思う

846:デフォルトの名無しさん
08/07/26 02:25:29
D1.028 phobos の std.cover の setDestDir(char[]) 関数なんだけど、

void setDestDir(char[] pathname)
{
 srcpath = pathname;
}

になってるんだけど、

 dstpath = pathname;

だとおもうんだ。
みんなの環境はどう?

847:デフォルトの名無しさん
08/07/26 03:09:49
>846
2.017のPhobosでも同様になってる。
よく見つけた。Bugzillaへ行っとけ!

848:デフォルトの名無しさん
08/07/26 12:36:58
>847
アカウント無いし、作りたくないから頼んだ。

dstpath を修正しても何の効果もないからなんとかしろーってのもいっといてplz

849:デフォルトの名無しさん
08/07/26 13:08:04
めんどくさ
std.coverなんて使ってないしどうでもいい

850:デフォルトの名無しさん
08/07/26 20:00:08
ながれにWWWW

851:デフォルトの名無しさん
08/07/26 22:46:01
最近、D言語を勉強しようかなーと悩んでるんだが
D言語ラブな人にD言語の魅力を語ってほしい

ちなみに今までは、基本的にスクリプト言語(Ruby)でいろいろやってました
C言語は大学の演習のみ、C++やC#は未経験

852:デフォルトの名無しさん
08/07/26 23:57:33
>>851
Rubyで間に合ってたならそっち使ってた方がいいと思う
D言語の凄まじさはC++をある程度やってないとわかりにくいんじゃないかな?

API叩きたいとかでも色々ポーティングしなきゃならない状況だからね~


853:デフォルトの名無しさん
08/07/27 00:03:40
ruby使ったこと無いから具体的に比べてはワカンネ(実際のところスクリプトメインに使ってて不満がないならrubyと比べてのメリットは少ないんじゃね? という気はする)
一般的な部分では、スタンドアロンの実行ファイルとか、ネイティブ吐く故の速度とかか。必要ないなら必要ないかなあ。

でも個人的に最大の魅力は更新待ちのwktk感。
既存のコード通らなくなる変更躊躇わないからなうぉるたん。標準ライブラリが壊れたりするんだぜ?
(ちなみに当方ややM)(でもこのスレに仲間は多いと思ってる)

854:デフォルトの名無しさん
08/07/27 00:31:44
Ruby使いこなせてるなら、Rubyで十分。
スクリプト言語以外をそんなに触ってないなら、静的型付けとかの不自由さを感じるかも。

Dの良いところはスクリプト言語でもないのに、いろんな機能を使えるところ。他の言語に比べて多機能だと思う。


855:デフォルトの名無しさん
08/07/27 00:38:15
>>851
俺の場合、WindowsとLinuxの両方で使うというのがあったから、Dという選択になった。

Windows環境だけというのなら、C#の方がライブラリその他安定していて、いいと思う。
散々言われていた起動の遅さも、いつの間にか気にならないくらい速くなってるし。

ただ、LinuxのmonoはD以上に地雷が多すぎなんで、マルチプラットホームならDかなと。
C++はコンパイル速度が速ければ使うんだが、Dの速さに慣れちゃうとその遅さに耐えきれなくなってしまう。

まあ、上記はC並に速く実行する言語が使いたいという前提あっての話だから、多少遅くてもいいというのであれば、Javaでもいいのかもしれない。

Dの欠点は標準ライブラリが信用できないこと。
標準ライブラリを自力で何とかできないとDを扱うのは難しい。


856:デフォルトの名無しさん
08/07/27 00:41:46
>>853
> でも個人的に最大の魅力は更新待ちのwktk感。

ナカーマ

857:デフォルトの名無しさん
08/07/27 00:47:04
通らなくなったコードを逐一直してまったくもううぉるたんたらおちゃめなんだからぁ的なアレ

858:デフォルトの名無しさん
08/07/27 00:53:39
仕事仲間には絶対したくないけどねっ

859:デフォルトの名無しさん
08/07/27 01:12:52
参照型をサポートする
タプルを関数から返せるようにする
opCastをまともにする

うぉるたん頼むからこのへん実装してくれ><

860:デフォルトの名無しさん
08/07/27 01:57:43
>>859 参照型ってなんぞ

861:デフォルトの名無しさん
08/07/27 02:00:40
int& a;

みたいなやつじゃね

862:デフォルトの名無しさん
08/07/27 02:17:44
<俺:妄想>

int a;
ref(int) b = a; // 型コンストラクタ

ref(int) func(ref int p) { // 参照渡し・参照戻し
return p;
}

auto c = func(a); // is(typeof(c) == ref(int))

</俺:妄想>

863:デフォルトの名無しさん
08/07/27 02:18:38
htodをもう少しどうにかしてほしいな。
手直し箇所が多すぎて、気軽にCのライブラリを使いたいと思えない。

864:デフォルトの名無しさん
08/07/27 04:31:45
Tangoユーザの方0.99.7はどうよ?

865:デフォルトの名無しさん
08/07/27 04:36:28
>>848-849
URLリンク(f17.aaa.livedoor.jp)
とりあえず張っておくからw

866:デフォルトの名無しさん
08/07/27 05:14:19
>865
まかせた

867:デフォルトの名無しさん
08/07/27 06:19:14
>>864
とりあえずなんかMemory.diでエラーが出る。
ちょっとソースのぞいてみたらなんか明らかにおかしいところがあった

130: enum BlkAttr; : uint
131: {

868:デフォルトの名無しさん
08/07/27 08:29:18
まったくDの開発陣は・・・テスト自動化しろよな
せっかく言語がunittestとかDbCとか用意してるのに全然活用してないじゃん
うぉるたんがたまにテスト通さないのは破壊的な変更しまくるからだろうけど

869:851
08/07/27 12:55:38
いろいろな意見ありがとうございます
とりあえず、更新を待ってwktkする言語だというのは伝わってきた
面白そうなので少し触ってみようと思います

870:デフォルトの名無しさん
08/07/27 15:43:10
もし、うぉるたんが死んだり、引退したりしたら、Dも終わるのか?
うぉるたんの跡を継ごうっていう人は出てくるのだろうか。

871:デフォルトの名無しさん
08/07/27 15:46:19
きっとD++がでるよ。

872:デフォルトの名無しさん
08/07/27 16:18:50
>>868
激しく同意。単体テスト用意しれと思うなぁ。
復帰テストはしているようだけど膨大だからかなりの時間かかってそうだし。

873:デフォルトの名無しさん
08/07/27 16:23:25
単体テスト以前にコンパイルしてないんじゃ…

874:デフォルトの名無しさん
08/07/27 19:26:32
>>862
それは
static int a;や
int* a;と似たような宣言で
ref int b; がスマートな気がする

その場合は
a == c って事でいいのかな

ポインタを使わないようにした代わりにこれがあればポインタの代用がかなり効きそうだな
GC周りに矛盾が生じないなら入れてほしいな

875:デフォルトの名無しさん
08/07/27 19:45:10
>>874
 int* a;
はどっちかっていうと、
 const int a; // constは変数を修飾
よりは
 const(int) a; // constは型を修飾
に近いんじゃない?

それで、refは変数の情報な気がするから、ref(T)はいらないと思う。

876:デフォルトの名無しさん
08/07/27 19:58:19
dmd2.017 + dsource.org->Win32api Bindings
で、ウィンドウプロシジャの中から例外を投げて、
main関数に書いたcatchで拾おうとすると失敗するんだけど、こういうもんだっけ?

877:デフォルトの名無しさん
08/07/27 20:03:18
>>876
そういうもん。

コードの流れは、
メッセージループ -> | user32 | -> ウィンドウプロシージャ
なんで、例外は戻ってこれない。

878:876
08/07/27 20:17:30
>>877
即レス感謝。
前いけてた気がしたのは漏れの気のせいでした。
べんきょんなったす。

879:デフォルトの名無しさん
08/07/27 20:55:11
えぇぇ、メッセージループの外のcatchで例外とれてるんだけどこれは何?

880:デフォルトの名無しさん
08/07/27 20:56:21
writeflnとかで自動的にtoString()が呼び出されると、メンバのアドレスが変っちゃうんだけどなぜ?
明示的に呼び出せば、そんなことにはならなかった
アラインメントの問題?GCの問題?

881:デフォルトの名無しさん
08/07/27 21:01:53
>>880
コード付きで頼む

882:880
08/07/27 21:34:07
値渡しされてるだけだったorz 正直すまんかった

>>881
ちなみに双方向リンクリスト、つまりSTLのlistみたいなやつ

883:デフォルトの名無しさん
08/07/27 22:46:18
Dの頭のままC#でdelegate使おうとしたら
いちいち宣言しなきゃいけないって面倒だなとおもた

884:デフォルトの名無しさん
08/07/27 22:49:31
>>883
ラムダ式でおk

885:デフォルトの名無しさん
08/07/27 23:03:16
C#3.0からFunc<,>とか使えるんじゃなかったっけ。

886:デフォルトの名無しさん
08/07/28 00:33:49
GTK On Dって名前にすれば GOD ってライブラリ名にできるのにそういう風にしないのは
やはり向こうは日本と神の感覚が違うから気軽に使えないのかな

887:デフォルトの名無しさん
08/07/28 00:57:59
こういう場合onっていう言い方は正しいのか?
あんまり聞かない気がする。

888:デフォルトの名無しさん
08/07/28 01:01:34
じゃ featuring だ

889:デフォルトの名無しさん
08/07/28 01:04:05
overとか

890:デフォルトの名無しさん
08/07/28 01:08:01
ならopponだ
… oppon ~は「…を~と組み合わせて」という意味になる今作った単語

891:デフォルトの名無しさん
08/07/28 01:14:40
oppai
なんでもできる証拠なの~

892:デフォルトの名無しさん
08/07/28 01:28:19
GTK of D

893:デフォルトの名無しさん
08/07/28 02:01:32
Tango の 0.99.7 でバックスラッシュを含んだパスが蹴られるようになったけど、さすがに面倒だぜ。
import tango.io.Console;
import tango.io.FileSystem;
import Path = tango.io.Path;
void main(char[][] args) {
  auto dir = Path.parse(FileSystem.toAbsolute(Path.standard(args[0]))).path;
  Cout(dir).newline;
}
自分の実行ファイルのディレクトリのフルパスが欲しいとき、もうちょと短く書けないかな。

894:デフォルトの名無しさん
08/07/28 05:11:20
URLリンク(www.digitalmars.com)
dwtのはずなのにアナウンス
中身はちゃんと別みたいだけど

895:デフォルトの名無しさん
08/07/28 16:00:33
std.openrjって、どうしてあるの?誰が使ってるの?
というか、動かないんだけど

896:デフォルトの名無しさん
08/07/28 16:15:14
もうなくなるor/andなくなったんじゃなかったのか

897:デフォルトの名無しさん
08/07/28 17:49:37
>893
記述が長ったらしい代わりにバイナリが小さくなるのがTangoの芸風でしょ。
ちなみにPhobosなら import path; して dirname(rel2abs(args[0])) だ。


898:デフォルトの名無しさん
08/07/28 23:53:45
1.0 と 2.0 の違いって何?

C# の 1.0 と 2.0 ぐらいちがったりするの?

899:デフォルトの名無しさん
08/07/29 00:03:46
dmd1 致命的なバグが無い限り更新されない
dmd2 前進的で素晴らしい変更によってソースを書き直す必要が出来る

このスレを読む限りMは2を使った方がいいらしいぞ

900:デフォルトの名無しさん
08/07/29 00:10:10
最近はライブラリも2に対応してるし、1を使う理由ってあんまない気がするなあ。
安定性求めるなら他の言語を当たったほうがいいだろうし。

901:デフォルトの名無しさん
08/07/29 00:20:34
DMDScriptが使いたいだけで1使ってます

902:デフォルトの名無しさん
08/07/29 00:26:29
変更点そのものは、
URLリンク(www.kmonos.net)
に出てる。

903:デフォルトの名無しさん
08/07/29 02:02:27
>>900
喧嘩売られてるような気がするのは俺の気のせいだろうな
移行しない理由が聞きたいんだよな

904:デフォルトの名無しさん
08/07/29 02:04:10
何が言いたいのかさっぱり理解できない

905:デフォルトの名無しさん
08/07/29 02:12:21
gdc(mingw)をうまくビルドできるならば
2.0に乗り換えてみたいところだがね。
エラーが回避できなくてあきらめた。

906:デフォルトの名無しさん
08/07/29 07:38:52
>>903
どう考えても気のせいです

907:デフォルトの名無しさん
08/07/29 07:39:36
>>902
popenだけはdmd1にも入れてほしい

908:デフォルトの名無しさん
08/07/29 09:38:02
ところでお前ら typeof(*this)って使ってるかな?
クラス名とどっちがいい?

909:デフォルトの名無しさん
08/07/29 11:51:29
ジェネリックコードじゃなければクラス名の方がいい
時期尚早な過最適化は悪 by Effective C++ ?

910:デフォルトの名無しさん
08/07/29 11:57:08
TangoやDWTが1にしか対応してないから2使えない、って人もいるんじゃね。

>909
"premature optimization is the root of all evil." なら、出典はKnuth様 (1974年)。


911:デフォルトの名無しさん
08/07/29 12:46:20
先進的な変更で言語がよくなってそれと同時に自分のコードがかっこよくなる
この喜びが毎月のように得られるのはDくらい
それが私がDを使う理由・・・信じて

912:デフォルトの名無しさん
08/07/29 14:28:09
static foreachまだなのかなあ。
そんな複雑な変更でもない気がするんだけど、
うぉるたんは他にやりたいことあるんだろうか。

913:デフォルトの名無しさん
08/07/29 16:13:48
DMDってテンプレート再帰でタプル作るとホントすごいメモリ喰うな…

914:デフォルトの名無しさん
08/07/30 00:59:01
D言語はアセンブリの夢を見るか

915:デフォルトの名無しさん
08/07/30 22:25:38
gc切って、delegateぶん回したらすんごいメモリをくう・・・
あたりまえかもしれんが、scopeとかで回避できんから
すんごい困った


916:デフォルトの名無しさん
08/07/31 00:26:38
URLリンク(www.dsource.org)

これのDemoすごいなあ

917:デフォルトの名無しさん
08/07/31 00:42:39
あ、これ俺も遊んだwww
結構楽しいんだよなこれ

918:デフォルトの名無しさん
08/07/31 01:49:17
PC初期に近いの面白さだよね。

919:デフォルトの名無しさん
08/07/31 02:24:57
俺の1時間を奪う憎い奴だ

920:デフォルトの名無しさん
08/07/31 08:26:23
template Hoge(){
if(true){}
}
void f(){
mixin Hoge!()
}
なんでif使えないの~泣

921:デフォルトの名無しさん
08/07/31 08:34:29
>>920
つ static if

922:デフォルトの名無しさん
08/07/31 11:35:46
template mixin は宣言しか書けないのね

923:デフォルトの名無しさん
08/07/31 12:43:23
Lisper
C++er


Der
なんちゃって、えへへ

924:デフォルトの名無しさん
08/07/31 13:02:18
>923
PythonistaにならってDistaはどう?
すくなくとも発音はしやすいよw


925:デフォルトの名無しさん
08/07/31 13:41:25
typeof(*this) opDot()
{
    return *this;
}


926:デフォルトの名無しさん
08/07/31 14:36:01
痔主多?
やDなぁそんなの

927:デフォルトの名無しさん
08/07/31 15:33:24
D Langer

928:デフォルトの名無しさん
08/07/31 16:08:02
グローバル変数をスレッド間で共有できないのをディフォルトにしよう、
という案を検討してるらしい。
URLリンク(bartoszmilewski.wordpress.com)

これだと現行のコーディングとはスタイルが随分かわっちゃうけど、
マルチスレッドの安全性を考えたら良い案だと思う。


929:デフォルトの名無しさん
08/07/31 17:00:35
>>924
Dildo
発音しやすいよ

930:デフォルトの名無しさん
08/07/31 17:12:17
1Der

2Der

931:デフォルトの名無しさん
08/07/31 17:17:02
3ダー!!

932:デフォルトの名無しさん
08/07/31 17:32:21
猪木?

933:デフォルトの名無しさん
08/07/31 18:00:29
>>928
むしろグローバル変数いらなくね?
あと例えばプロパティはsynchronized付きになるとか(俺には善し悪しがよくわからんけど)
これからのマルチコアの世界に向けて最適化していった方がいいのかも

934:デフォルトの名無しさん
08/07/31 18:17:45
locklessがもてはやされる時代に標準でsynchronized付きとか狂気の沙汰としか。

935:デフォルトの名無しさん
08/07/31 18:33:27
そういうもんか
マルチスレッドプログラミングの安全性ももっとコンパイル時に保証できないのかな

936:デフォルトの名無しさん
08/07/31 22:24:48
各スレッドが触る変数を確定できるかどうかが勝負という感じかなあ。
pureなら触る変数はプロシージャからのスタックの積み方で決まるから、
そのへんはもう少し楽になる気がする

937:デフォルトの名無しさん
08/08/01 00:14:52
Martianじゃないか?いろんな意味で。

938:デフォルトの名無しさん
08/08/01 00:24:55
static typeof(this) opCall(T...)(T args)
{
    return new typeof(this)(args);
}
newすら書くのが面倒。そんなあなたに

939:デフォルトの名無しさん
08/08/01 00:26:02
pure判定が通るなら原則として大丈夫だと思う。副作用がないということだし。
もうすこし緩めるとスレッドローカル変数しか触らなければ安全だと思うが、これは未実装。

940:924=928
08/08/01 01:51:55
>937
ああ、そっちの方が全然いいですね。

ところでGtkDのRC1が8月1日リリース予定なわけだがwktk


941:デフォルトの名無しさん
08/08/01 15:00:45
こうか
template Constructor{
>>938
}
class A{
mixin Constructor;
}
void main(){ A x = A(); }
そういえばstructとclassをコンパチブルにできるのかなー

942:デフォルトの名無しさん
08/08/01 18:37:17
構造体のコンストラクタってまだないの?

943:デフォルトの名無しさん
08/08/01 19:04:45
>>942
ずっと無いと思うよ?
「構造体はPODであるべき」って頑なになってるから。

static opCallで代用するしかないんじゃね

944:デフォルトの名無しさん
08/08/01 19:20:33
バグかなバグかな?

--- main.d ---
import func;
void main(){ line(); }

--- fund.d ---
void line(uint lineNum = __LINE__){ }


$ dmd main.d func.d
__LINE__
Internal error: e2ir.c 612

945:デフォルトの名無しさん
08/08/01 19:22:41
いけね、ファイルを分けなくても再現した。

void line(uint lineNum = __LINE__){}
void main(){ line(); }

946:デフォルトの名無しさん
08/08/01 22:10:27
2007年のカンファレンスで構造体にコンストラクタつけるとかなんとか言ってなかったか?
俺の記憶違いかな?

947:デフォルトの名無しさん
08/08/01 23:16:19
リテラルあるしなあ……。

948:デフォルトの名無しさん
08/08/02 01:59:50
gdcのsvnで手に入る一番新しいやつ。

std/c/windows/com.d

interface IUnknown
{
HRESULT QueryInterface(IID* riid, void** pvObject);
ULONG AddRef();
ULONG Release();
}

ではなくて、

interface IUnknown
{
static HRESULT QueryInterface(IID* riid, void** pvObject);
static ULONG AddRef();
static ULONG Release();
}

が正しいような気がする。
後者じゃないとビルドできないし。

949:デフォルトの名無しさん
08/08/02 14:25:36
>>948
んなばかなあ

950:デフォルトの名無しさん
08/08/02 14:35:23
>>948
何で前者でエラーになるのか知らないけど、staticは無いと断言できる。

951:デフォルトの名無しさん
08/08/02 14:44:56
大体staticで何をカウントしてるんだ

952:デフォルトの名無しさん
08/08/02 23:13:01
comが何なのか良く知らないので、
エラー回避のためにstaticにしたんだが、
やっぱりおかしいのか。

libphobos/std/c/windows/com.d:240: error: '*LTHUNK0' aliased to undefined symbol '_D3std1c7windows3com9ComObject14QueryInterfaceMWPS3std1c7windows3com4GUIDPPvZi'
libphobos/std/c/windows/com.d:240: error: '*LTHUNK1' aliased to undefined symbol '_D3std1c7windows3com9ComObject6AddRefMWZk'
libphobos/std/c/windows/com.d:240: error: '*LTHUNK2' aliased to undefined symbol '_D3std1c7windows3com9ComObject7ReleaseMWZk'

みたいなエラーがでるんだが、
LTHUNK0なんてソースのどこにも出てこないし謎。

試しにいろいろいじって、たまたまstaticにしたらうまくいったという話。

まあ、comプログラミングなんかしないから、
別に通ればなんでもいいのだが。

953:デフォルトの名無しさん
08/08/03 13:39:36
さっきちょっと思いついたんだけど変数の変更を一時的に禁止する様な機能ある?

const(hoge, fuga)
{
// hoge, fugaは変更禁止
}
// 変更OK


954:デフォルトの名無しさん
08/08/03 13:54:21
void main() {
int hage = 42;

(const typeof(hage) hage = hage) {
writeln(hage); // 42
hage++; // error
}();
}

dirtyすぎる…

955:デフォルトの名無しさん
08/08/03 14:06:48
最近ここで晒されるソースを見ても何がなんだかです。

956:デフォルトの名無しさん
08/08/03 14:17:12
>>953
pureとか予約語になってるんだし,要望したら入れてくれるんじゃね?

957:953
08/08/03 14:41:00
>>954
バグ回避目的なのに手段が真逆に向かっている様なw

958:デフォルトの名無しさん
08/08/03 15:09:29
なんか、バグが云々って言ってたので、
よくわかりませんが、つたない英語で投稿してみました。

URLリンク(www.digitalmars.com)

適当なので、怒られてたり、意思が通じてなかったりしたら
すいませーんっと。


959:デフォルトの名無しさん
08/08/03 15:14:46
ああ、bugzillaに投稿とかのほうがよかったんだろうなぁとか
思ったけど、いいや。やる気ないので、スマヌです。



次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch