トップページ⇒tech
962コメント242KB

D言語 Part24

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん2010/01/26(火) 00:06:57
プログラミング言語 D (D Programming Language) について語るスレッドです。

■前スレ
http://pc12.2ch.net/test/read.cgi/tech/1253443684/

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

■コンパイラ
http://www.digitalmars.com/d/dcompiler.html (DMD, 本家)
http://dgcc.sourceforge.net/ (GDC, gccフロントエンド)
http://www.dsource.org/projects/ldc (LDC, バックエンドにLLVM)

■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://f17.aaa.livedoor.jp/~labamba/?D%B8%C0%B8%ECBOF (D言語BOF)
ttp://dsource.org/ (dsource)
ttp://tinyurl.com/candcpp2d2 (C/C++に疲れた人のD言語2.0)
ttp://www.kmonos.net/alang/wnd/ (わかったつもりになるD言語)
ttp://shinh.skr.jp/d/ (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか)
ttp://shoo.s20.xrea.com/shoo/programing (D言語とTangoの入門講座)
ttp://www.nicovideo.jp/mylist/4453698 (D言語で作られた芝ゲー niconico動画)
ttp://www.asahi-net.or.jp/~cs8k-cyu/ (ABA Games)
ttp://dusers.dip.jp (D言語友の会)
ttp://www.wish.sakura.ne.jp/desuno/game/Drawing (PrincessDrawing! D言語で作られた横スクロールSTG)

>>2へ続く
0809デフォルトの名無しさん2010/07/14(水) 00:59:03
import std.functional;
int func(int x) { return x*2; }
alias compose!(func,func) twice;
void main()
{
assert( twice(1)==4 );
}

こんな感じだろうか?>>808
0810デフォルトの名無しさん2010/07/14(水) 01:34:30
>>809
ありがとうございます.しかし、>>808の関数も、

int func(int x) { return x*2; }
void main() {
 assert(twice(&func)(1) == 4);
}

は、うまく動きますが、
 auto f = twice(&twice!(int));
とすると、>>808のようにエラーがでてしまいます.
0811デフォルトの名無しさん2010/07/14(水) 01:45:01
uint length = 2;
[0, 1, 2, 3][0..length];// Error: ScopeDsymbol using 'length' inside [ ] is deprecated, use '$' instead
なら変数のほうを見てくれよ・・・
0812デフォルトの名無しさん2010/07/14(水) 03:19:36
>>810
>>809 の compose は template なのでそういうのは無理でしょうね。
>>810 のように書くとしたら、

T delegate(T) twice(T)(T delegate(T) f){
return (T x){ return f(f(x)); };
}
void main(){
int func(int x) { return x*2; }

auto tf = twice(&func);
auto ttf = twice( twice(&func) );
assert( tf(1) == 4 );
assert( ttf(1) == 16 );
}
こんなのはいかがでしょうか?
func がデリゲートじゃないといけないのがヤルセないですが、これはそのうち改善されるらしいです。
ちなみに 809 で使った std.functional.compose でも、
alias compose!(func,func,func,func) ttf;
で関数4回適用できます。
08138062010/07/14(水) 09:16:17
>>812
ありがとうございます.
auto f = twice(&twice!(int));
のエラーですが、 &twice!(int) の型が function なので、

import std.functional;
auto tt = twice(toDelegate(&twice!(int)));

とすれば、うまくいきました.
0814デフォルトの名無しさん2010/07/14(水) 19:36:48
delegateとfunctionの互換性制限いつ緩和されるんや…
0815デフォルトの名無しさん2010/07/14(水) 20:32:37
その辺はデリケードだから・・・
0816デフォルトの名無しさん2010/07/14(水) 21:28:00
えっ
0817デフォルトの名無しさん2010/07/14(水) 22:13:42
何?
0818デフォルトの名無しさん2010/07/14(水) 22:44:28
聞こえない
0819デフォルトの名無しさん2010/07/14(水) 23:08:56
>>815
語尾ははっきりと言いましょう
08208092010/07/15(木) 00:48:52
あれっ!?俺、808の内容読んでなかったのか???
半分以上寝てたからなんか話がずれてますね。ごめんなさい。
でも解決してよかった。
0821デフォルトの名無しさん2010/07/15(木) 14:21:58
あほーん!(;^_^
0822デフォルトの名無しさん2010/07/16(金) 19:51:24
いつの間にかqtdのバイナリパッケージができてる

これでネイティブ描画でDLLを同梱する必要が無くてライセンスがBSDなら完璧なんだけどな
0823デフォルトの名無しさん2010/07/16(金) 21:51:50
注文多い
0824デフォルトの名無しさん2010/07/17(土) 00:14:29
仕様が完全に決まって、
IDEとしてVisual Dが出て、
「やさしいD」、「Dの絵本」なんて本がでたら勝利コース
0825デフォルトの名無しさん2010/07/17(土) 01:43:09
SAL9000でもわかるD言語
0826デフォルトの名無しさん2010/07/17(土) 13:56:31
>仕様が完全に決まって、
D is better D..
0827デフォルトの名無しさん2010/07/17(土) 14:11:00
write once, rewrite every time.
0828デフォルトの名無しさん2010/07/17(土) 15:14:34
>>824
絶  対  に 出ねーから安心しな

D#なら出るかもしれんなw
0829デフォルトの名無しさん2010/07/17(土) 17:20:27
Visual Dとか本が出る以前に
>仕様が完全に決まって、
この段階でももう無理
0830デフォルトの名無しさん2010/07/17(土) 17:33:13
>決まって、
ここが無理
0831デフォルトの名無しさん2010/07/17(土) 20:30:06
>>824
仕様が固まる前にVisual Dが出てしまっているからそのプロセスは既に無理
0832デフォルトの名無しさん2010/07/17(土) 21:12:50
『やさしいD』
Andrei Alexandrescu 著
0833デフォルトの名無しさん2010/07/17(土) 23:44:44
やさしい予感がひとつもしねえよ。
0834デフォルトの名無しさん2010/07/17(土) 23:49:41
言語の本なのにコンパイラの内側まで説明してくれるすばらしい本です
0835デフォルトの名無しさん2010/07/17(土) 23:53:40
>>834
Andreiはコンパイラには精通してないから,その辺はWalterとかDonが書きそう
0836デフォルトの名無しさん2010/07/19(月) 15:07:07
D(笑)
0837デフォルトの名無しさん2010/07/19(月) 15:49:23
笑(D)
0838デフォルトの名無しさん2010/07/19(月) 16:36:50
XD <lol
0839デフォルトの名無しさん2010/07/19(月) 16:37:13
(:D)| ̄|_
0840デフォルトの名無しさん2010/07/19(月) 18:56:53
動的配列で、
p = &a[0];
で、アドレスを取得しようとすると、
参照が指してるアドレスじゃなくて、参照自体のアドレスが返ってくるのな。
0841デフォルトの名無しさん2010/07/19(月) 19:24:59
>>840
再現しなかった@dmd 2.047

int[] a = [1,2,3,4,5];
dout.writefln("&a = %s", &a);
foreach (i; 0..a.length)
dout.writefln("&a[%d] = %s", i, &a[i]);

&a = 12FE04
&a[0] = 924CE0
&a[1] = 924CE4
&a[2] = 924CE8
&a[3] = 924CEC
&a[4] = 924CF0
0842デフォルトの名無しさん2010/07/19(月) 20:26:10
>>841
ごめん、>>840は推測で書いちまった。
俺がちゃんと検証すればいいんだけどね...

本当は、
S[] a;
S*[] d;
//中略。
b[0] = &a[0];
と、やった上で、いろいろ処理をやったら、
b[0]の値は変わってないのに、
b[0] != &a[0];
になってるバグに遭遇して、なんでだろう?と、思って。



0843デフォルトの名無しさん2010/07/19(月) 20:29:47
あ、バージョンは1.063ね。
0844デフォルトの名無しさん2010/07/20(火) 04:41:12
>>842
aの長さを変えたりとかしてreallocationが起きたんじゃない?
0845デフォルトの名無しさん2010/07/20(火) 06:36:45
長さ変えなくてもコピーGCが再配置するんじゃね?
0846デフォルトの名無しさん2010/07/20(火) 07:10:48
>>845
現状コピーGCじゃないという悲しい現実…
0847デフォルトの名無しさん2010/07/20(火) 07:46:40
未だに保守的GCなのかい?
08488422010/07/20(火) 11:02:10
朝になって考えたら、そもそも自分の勘違いが、こういう状況にしたのかもしれない。

そもそも俺は、動的配列をこんな構造だと勝手に思ってた。
a ⇒配列の先頭アドレスを指す。
a[x] ⇒配列の実データを指す。

でも実際は、a[x]が実データなのだろうか?
どっちにしても、いきなりデータの整合性が取れなくなるのは、気分悪い・・・
0849デフォルトの名無しさん2010/07/20(火) 19:37:09
配列は

struct {
size_t length;
int* ptr;
}

という構造だとどこかで見たな
0850デフォルトの名無しさん2010/07/20(火) 19:37:25
>>848
動的配列は配列の先頭要素のアドレスと、長さからなる構造体って考えると理解しやすいかも

a = [1,2,3];
b = a; (ここで、先頭要素のアドレスと長さがコピーされる)

b.length = 5;
とかやるとaの要素が置かれている領域とは別の領域が確保され、bはそっちのアドレスを指すことになる。
結果としてaとbは全く別の配列を指すことになる。

あと、長さ0の動的配列 == nullだから
a = [];
b = a;
とした場合、aとbは完全に独立な配列で、片方の変更はもう片方に伝播しない。


動的配列は参照型って言語仕様には書かれてるけど、これを素直に解釈すると混乱のもとだと思う。
0851デフォルトの名無しさん2010/07/20(火) 19:45:11
配列の先頭アドレスは a.ptr じゃない?
a[x]は実データなはずだけど。
それと、コピーGCが再配置したとしても、b[0]のアドレスも書き換えるのではなかろうか。
一番有り得そうなのは >>844 の意見じゃないかなぁ
in-placeな関数とかプロパティとか使ったりするとそうなるかもしれない
0852デフォルトの名無しさん2010/07/21(水) 20:19:13
これは何割信じていいの?L言語とか初聞きなんだが…
ja.uncyclopedia.info/wiki/D%E8%A8%80%E8%AA%9E
0853デフォルトの名無しさん2010/07/21(水) 20:40:09
L言語知らないのか?
Lと名付けられた言語は複数あって、論理設計用のものからTCL/TKで作られたToy言語まで
どれも有名だよ?
0854デフォルトの名無しさん2010/07/21(水) 21:19:28
「ごきげんよう」
「ごきげんよう」
0855デフォルトの名無しさん2010/07/22(木) 00:05:42
ルビーのLですね、分かります。
0856デフォルトの名無しさん2010/07/22(木) 00:38:58
セキュリティモデルとかを研究するために設計されたE言語とか、
ほとんど誰も知らないような言語を並べていくと
AからZまで全部あるはず
0857デフォルトの名無しさん2010/07/22(木) 06:42:46
ttp://www.kmonos.net/alang/abc/
0858デフォルトの名無しさん2010/07/22(木) 07:22:08
検索しづらい名前にするのは言語の伝統か?
天下のGoogleですらGOなんて名前を付けちゃうし
0859デフォルトの名無しさん2010/07/22(木) 13:23:15
文字数が多くてかつ普通名詞じゃない(造語とか開発者の名前とか入ってる)と検索しやすいけど得てしてダサくなるな。
エディタの名前とか見てると特にそう思う。
0860デフォルトの名無しさん2010/07/22(木) 14:00:59
みんなちゃんとDigital Mars Dって呼んであげないから・・・
0861デフォルトの名無しさん2010/07/22(木) 20:02:25
gdcとldcの立場について
0862デフォルトの名無しさん2010/07/22(木) 20:04:57
>>857
A言語のHello, Worldは実に振るってるな
0863デフォルトの名無しさん2010/07/23(金) 01:30:24
DのHelloworldってどんなの?
0864デフォルトの名無しさん2010/07/23(金) 07:00:35
つttp://ja.uncyclopedia.info/wiki/D%E8%A8%80%E8%AA%9E#.E3.83.97.E3.83.AD.E3.82.B0.E3.83.A9.E3.83.A0.E3.82.BD.E3.83.BC.E3.82.B9.E3.81.AE.E4.BE.8B
0865デフォルトの名無しさん2010/07/23(金) 19:54:43
pragma(msg, "Hello, world!");
こうだろ。
0866デフォルトの名無しさん2010/07/23(金) 20:05:30
ttp://ideone.com/DsFHk
これを応用すればhello worldの一つや二つ
0867デフォルトの名無しさん2010/07/25(日) 15:05:35
いつの間にかDFLがRC1になってた
0868デフォルトの名無しさん2010/07/25(日) 17:33:47
いつ64bit版出るか知ってる人はヒントだけでも教えてください
0869デフォルトの名無しさん2010/07/25(日) 19:48:36
ヒント:D言語
0870デフォルトの名無しさん2010/07/25(日) 20:30:11
時代の最先端を走るエレガントなD言語がどうかしましtか?
0871デフォルトの名無しさん2010/07/25(日) 21:57:36
64bit版など無意味なので出す気はないとうぉるたん自身が言っていたような?
0872デフォルトの名無しさん2010/07/25(日) 22:57:46
このところdmdのcommitログに64の文字が乱舞してる
0873デフォルトの名無しさん2010/07/25(日) 23:33:47
64bit Ubuntuではもう動いてるみたいな話がある
http://twitter.com/D_Programming/status/18467677902
0874デフォルトの名無しさん2010/07/26(月) 06:57:19
>>873
Walterも「64bit対応はそれほど難しくない」っぽいことをMLで話してたし順調っぽいね
0875デフォルトの名無しさん2010/07/26(月) 12:40:17
64bit版DMDとか諦めてたけど、現実のものになるんだな。
0876デフォルトの名無しさん2010/07/26(月) 15:01:18
64bitでもintは32bitなんだっけ?
32bitアプリをそのままコンパイルしただけじゃメモリ空間が広くなるだけ?
0877デフォルトの名無しさん2010/07/26(月) 19:23:00
size_tがulongになるとかそんな感じ
0878デフォルトの名無しさん2010/07/26(月) 22:17:54
64bit対応に関しては、C/C++の規格が酷すぎるだけだからなぁ。
D言語は最初から64bit対応が考慮されてるだけだし、あとは実装するだけ。
dmdがんばれー
0879デフォルトの名無しさん2010/07/26(月) 22:33:45
centの実装まだー
0880デフォルトの名無しさん2010/07/26(月) 22:54:17
128bit整数に対応したCPUってあんの?
realでも80bitだったよね?
0881デフォルトの名無しさん2010/07/26(月) 23:05:38
realは64bit以上で不定じゃなかったか?
0882デフォルトの名無しさん2010/07/26(月) 23:06:24
キャリーフラグはあるんだから、繰り上がり演算すればOKじゃね?
0883デフォルトの名無しさん2010/07/27(火) 06:02:39
zipコンパイル時に実行できないのかー……。
0884デフォルトの名無しさん2010/07/29(木) 22:03:10
1.0か2.0どっち覚えたほうが良いの
0885デフォルトの名無しさん2010/07/29(木) 22:11:33
1.0系について今も深く語ってる記事とかあんまり無いし2.0でいいと思う
0886デフォルトの名無しさん2010/07/30(金) 18:43:17
町でプログラマーの寄り合いがありました。次から次へ恐いものを言い合いました。
みんな恐い物を話す中で一人だけ黙っているものがいました。
Walter「おい、松ちゃん。恐いものはないのかい。」
松  「恐い! 恐いもんなんか何もないよ。」
Walter「CもC++もJavaも恐くないんかい。」
松  「そんなものは恐くないよ。・・・・」

しかし突然話すのを止めてしまった。
Walter「どうしたんだい。」
松  「恐いものを思い出しちゃった。」
Walter「それはなんだい。ぜひ教えてくれよ。」
松  「あ、新しいプログラミング言語が恐い。」
Walter「新しいプログラミング言語、そりゃどういう言語だい。」
松  「C++をベースにした言語なんだ。JavaやRubyやPythonのいいとこどりした言語なんだ。ああ思い出しただけで気持ち悪くなる。」
顔色がみるみるうちに悪くなってきた。
松「ああ、座ってられない。隣の部屋に布団をしいてくれ。」
床に入ると、とうとう毛布で顔をおおってしまいました。
これを見て、Walterは笑って、いたずらをすることにしました。
0887デフォルトの名無しさん2010/07/30(金) 18:45:34
Walterが新しい言語"D"を作り、色々な機能をもたせました。GC、CTFE、連想配列、遅延評価、契約、unittest、複素数、テンプレートなどです。
それをネットで公開し、こっそり松ちゃんのPCにインストールし、気がつくのを待ちました。
Walter「ねえ。松ちゃん。起きなよ。もうお開きだよ。」
松  「わかったよ。起きるよ。でももう新しい言語のことは言わないでくれよ。」
Walter「わかったよ。もう話さないよ。」

大きな叫び声が聞こえた。
松「うわ、新しい言語だ。みょうな機能が一杯だ。」
となりの部屋のWalterは大満足。
松「おいWalter、どうしてこんなことをするんだよ。約束しただろう。D言語こわい。D言語恐い。」
大きな声をあげれば上げるほど、Walter大喜び。
松「うわ、連想配列だ。恐い、恐い。」
 「うわ、遅延評価だ。恐い、恐い。」
 「うわ、テンプレート恐い。べんり・・。こわい・・。」

様子のおかしいのに気がついて部屋の中を覗いてみました。
Walter「うれしそうだぜ。コンパイルしてるぜ。こりゃだまされた。ねえ、松ちゃん、一体何が恐いんだい。」
松「クロージャが恐い。」
0888デフォルトの名無しさん2010/07/30(金) 19:26:35
まつもとさんが愛用してくれるなら人気爆発間違いなしだな
0889デフォルトの名無しさん2010/07/30(金) 20:01:41
なんだかD言語を使ってDLL(Cで書いてあるプログラムから呼び出す)作ってみようと思ったんだが
1.0とか2.0とかよくわからん。

普段Perl使ってて、時々Cとかに手を出すんだが、正規表現とかって充実してる?
0890デフォルトの名無しさん2010/07/30(金) 20:24:59
言語組み込みではないがライブラリで同じくらい便利に使えるよ
と仕様には書いてある
0891デフォルトの名無しさん2010/07/30(金) 20:28:24
D2の標準ライブラリには当初からあるstd.regexpと最近作られたstd.regexというモジュールが混在してる
機能は前者の方が充実してるような感じ
俺がちょっと使うくらいなら便利なんだけどPerlでバリバリやってるような人から見るとどうなんだろ
0892デフォルトの名無しさん2010/07/30(金) 21:10:21
>>890
ふむ。新しく何かとってきて組み替る必要がない 旨が仕様に書いてある のはよさそう。
でも
>モジュールが混在してる
ってよく分からんwww開発途上なのか?
0893デフォルトの名無しさん2010/07/30(金) 21:26:49
DとPhobosライブラリ作ったよ
↓
Dがバージョン1になったよ
↓
まだまだ色々拡張したい、とりあえず安定版をバージョン1にして
バージョン2に色々拡張していくよ
↓
Phobos古くなってきたしTangoライブラリとして再設計するよ
↓
Phobos捨てがたいし、混ぜちゃえ☆
(tangobosの誕生)
↓
D言語のバージョン1とバージョン2、ライブラリのPhobosとTangoがごっちゃごちゃ ← 今ここ
0894デフォルトの名無しさん2010/07/30(金) 21:29:58
……なんだろうやっぱDは避けて素直にC++とか勉強する方がいい気もしてきたwww
0895デフォルトの名無しさん2010/07/30(金) 21:58:03
おっと、正規表現の話はD2のPhobos内だけでの混乱だから安心してくれ
GUIライブラリに到ってはもっと混乱してる上にプロジェクトの大半が崩壊してるが正規表現とは関係ないから安心(ry
0896デフォルトの名無しさん2010/07/30(金) 22:03:53
>>895
逆になんでD使ってんだよwww
0897デフォルトの名無しさん2010/07/30(金) 22:35:21
世の中にはSとMがおってだな…
0898デフォルトの名無しさん2010/07/30(金) 22:39:54
開発速度さえまともなら、ここまでにはならなかったはずなんだよ。
しかし、遅いならともかく早すぎて追いつけないって……
0899デフォルトの名無しさん2010/07/30(金) 22:47:25
SとMの間にNを置きました
だからNは少しだけ
中途半端なのです
0900デフォルトの名無しさん2010/07/30(金) 23:54:33
型とかも結構Cとかと互換性有るけど結局何が違うの?
0901デフォルトの名無しさん2010/07/31(土) 00:17:00
javaとかC#じみた文法ででネイティブバイナリを吐ける。
マクロとか無くてすっきりかっこいい。オブジェクト指向に書ける。

これでいいじゃんD言語。
0902デフォルトの名無しさん2010/07/31(土) 00:58:02
下手するとC++のより凶悪なテンプレートを備えてるというのが個人的には大きい
0903デフォルトの名無しさん2010/07/31(土) 02:21:24
DってGCあったっけ
0904デフォルトの名無しさん2010/07/31(土) 02:47:02
とりあえずまえPerlで無理矢理組んだファイル形式変換スクリプトを書き換えてる。
確かに文字列とかはCやC++よりちょっと扱いやすい印象かもしれない。
0905デフォルトの名無しさん2010/07/31(土) 02:51:12
そういえば
filename = sub(file,"\\","");
std.regexp.RegExpException: no character past '\'
これってなんで例外でるんだ?
0906デフォルトの名無しさん2010/07/31(土) 03:42:22
>>905
"\\\\"
r"\\"
`\\`
お好きなのどーぞ
0907デフォルトの名無しさん2010/07/31(土) 08:34:55
>>893 みたいな説明されたら危うく見えるな
Tangoは消える運命だしPhobosを強化してD2が今のコミュニティの方向
後Tangoが出たのってD2の前じゃないっけ?

>>903
並行GCがいつか来るよ!
0908デフォルトの名無しさん2010/07/31(土) 08:52:01
Tangoの問題は単なるライブラリじゃなくてGCとか言語のコアに近い部分も一緒に作り直そうとしたところだよな
ただのライブラリなら神だったのに
レス数が900を超えています。1000を超えると表示できなくなるよ。