1 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 01:09:54 ] プログラミング言語 D について語るスレッドです。 過去スレは >>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)
232 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 16:00:13 ] Web鯖みたいの作っててacceptしたSocketをスレッド作ってどんどん渡してってるんだけど GCが自動的に動いたときに Error: Thread error: cannot pause とかいってデッドロックしてしまう これはphobosかなんかのバグ?
233 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 17:41:38 ] GCが動く時には全てのスレッドを停止しなければならないとかは聞いたが、 どういう順番でどう停止させているのか、あたりに問題が潜んでる可能性はあるかも。 ただ、普通にデッドロックが発生する設計になっちゃってるせいじゃないか? という疑念がひしひしと。同期の設計を慎重に見直してみたら?
234 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 18:09:04 ] ttp://d.puremagic.com/issues/show_bug.cgi?id=645 これかな?
235 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 19:05:41 ] std.threadを見てみたが、これはいたるところ微妙すぎないか? というか書き直したほうがいいなこれ Walterタンがんばって><
236 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 01:44:30 ] >>235 ひどい奴だな、そこまでわかってるなら手伝ってやれよ。 つか別インプリメントして投稿ってのはナシなの?
237 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 01:57:01 ] std.threadをてきとうに応急処置してみたんだがどうだろうか? だれかえろいひと見てもらえると助かる grugru.mine.nu/file.cgi?v=guru_guru_2560.zip
238 名前:237 mailto:sage [2007/02/17(土) 02:07:30 ] あああ 間違った void wait(uint milliseconds) のほう変更し忘れた
239 名前:237 mailto:sage [2007/02/17(土) 02:41:23 ] grugru.mine.nu/file.cgi?v=guru_guru_2561.zip イベントのあたりがいろいろ間違ってたのをなおしました
240 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 21:30:04 ] なんちゅ〜かDっぽくなくて恐縮なんだが、 テンプレートクラスA(T)とクラスBがあったとして、 A!(B)のオブジェクトのclassinfoをたどって、 Tの(ここではB)のClassInfoなりTypeInfoって取得可能?
241 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 21:53:22 ] テンプレートクラスの引数はclassinfoだとメンバ変数nameが一応持ってはいるけど、文字列だしどうしようもない。
242 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 22:26:49 ] mixinはどうだろ
243 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 23:29:10 ] >>239 乙 しかし俺には評価できない罠 どういう問題が解決されているのかな
244 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 23:46:11 ] >>243 f17.aaa.livedoor.jp/~labamba/?BugTrack%2F26 たぶんこれが直ってるのと、スレッドハンドルがどんどんリークしていたのを修正しました
245 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 01:25:19 ] >>242 classinfo.nameはコンパイル時定数じゃないから…
246 名前:デフォルトの名無しさん [2007/02/18(日) 02:13:13 ] >>244 >>234 で絶賛放置中のBugであり>>232 の原因の疑いアリという代物じゃないっすか。 問題ないならcommitして欲しいくらいですねぇ。 私ゃ評価も翻訳もできない身ですけど・・。
247 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 02:58:27 ] >絶賛放置中 クソワロタ 身に覚えがあるし・・・
248 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 09:11:54 ] >>240 import std.stdio; class A(T){} class B{} template TypeOfA( T ) { static if( is(T U : A!(U)) ) alias U TypeOfA; else alias void TypeOfA; } int main() { alias A!(B) A_B; writefln( typeid( TypeOfA!(A_B) ) ); // modulename.B return 0; } こんなんじゃだめ?
249 名前:240 mailto:sage [2007/02/18(日) 10:35:53 ] >>248 A_Bの型からじゃなくて、A_Bのオブジェクトから取得可能か、知りたいんだよね。 Dっぽくなくて恐縮なんだが。 >>241 のゆうように無理っぽそうだが。(dクス)
250 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 01:35:01 ] SDLの話なんだが・・・ hoge.dとsdltest.dっていう名前のソースが二つあって、 以下のようにコンパイルすると、sdltest.dのほうだけ128が返るんだが・・・どうしてだろう? この128はdmdが返してるのか、SDLが返してるのか・・・それすらも分からないorz %dmd hoge.d SDL.lib #SDL.libはあらかじめPATHが通ってる %dmd sdltest.d SDL.lib ソースは以下の通り import std.stdio; import SDL int main(char[][] args) { if (SDL_Init(SDL_INIT_VIDEO)) throw new Error("Could'nt initialize video"); printf("hello,SDL!"); return 0; }
251 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 01:36:24 ] あっ、import SDLに;忘れてた・・・orz もう寝る。
252 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 01:37:51 ] あぁ・・・orz if (SDL_Init(SDL_INIT_VIDEO)) > if (SDL_Init(SDL_INIT_VIDEO) < 0) でした・・・ こんどこそ寝る。
253 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 01:50:54 ] あぁ・・・そうかDLLだ おし、原因分かったから寝る。
254 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 01:52:03 ] 寝ろwww
255 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 03:34:23 ] Nero Burning Rom
256 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 03:45:00 ] std.socketのブロッキングモードがすごく使いにくいんだけどなんとかならんもんかなー GCが動いたときにSIGUSERが発生してacceptとかreceiveがEINTRで抜けてくるから 期待してるブロッキングモードの利点があんまり無い(´・ω・)
257 名前:デフォルトの名無しさん [2007/02/19(月) 11:23:05 ] そいやDLLの話で思い出したが。 implibとか使ってDLLからインポートライブラリ作ろうとしても、 なんか現状、すんなりとできないよね? extern(Windows)つけた関数がDのマングリング受けてて、リンカでコケまくり。 呼び出し規約とマングリングの区別で俺の頭が混乱してくる始末。 extern(Windows)な関数て、"FunctionName@8"みたく マングリングされてくれなきゃいかんのでは……?
258 名前:257 mailto:sage [2007/02/19(月) 12:12:51 ] あれ? ごめん、なんか全然違った気がする。 extern(Windows)使うと"_FunctionName@8"みたいなマングリングがされて、 DLLの方は素直に"FunctionName"みたいなエクスポート名になってるのに困るなぁ、 ということだった。
259 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 13:21:44 ] .defを書け、というのがドキュメントに書いてあったような
260 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 15:35:14 ] def tech
261 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 21:43:13 ] >>259 あい。だからdefファイル作ったんだけども、やっぱりメンドイなぁ、て。 特に@以降の引数のサイズ表す数字が。 htodで.dファイル作って、 そこに含まれる関数定義を関数呼び出しコードに変換するスクリプトなんて書いて、 それをdmdに食わせてリンカにエラーメッセージ出力させて、 それをパースしてdefに変換するスクリプトなんて書いて……とか。 なんだかとても無駄なことをしてる気が。誰かいい方法知りません?
262 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 00:31:08 ] >>256 signalでも抜けちゃうから、結局なんかやらないといけないけどな
263 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 00:36:48 ] ってGCのときにSIGUSERが発生するので困ってたのか。 recvのwraper作ってEINTRを無視すれば良いんじゃないの?
264 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 02:57:13 ] >>263 receiveとかsendはラッパ作れば問題ないけど、acceptの返り値がSocketなのがマズー ラップクラスでオーバライドした関数を使ってくれない orz acceptで返ってきたSocketのソケットディスクリプタだけコピーして、 自分のクラスにセットしようと思ってもモジュール外だからSocketのprivateにアクセスできないし。 結局ほとんど全部自前で作るはめに(´・ω・`) phobosの方でなんとかしてもらえれば助かるんだけど。。
265 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 10:36:58 ] >>264 acceptingをオーバーライドすればacceptで自前のSocketクラスを返せたはず
266 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 12:59:45 ] >>265 キター できました。ありがとうございます 一生懸命 *((cast(int*)newSock)+2) = *((cast(int*)sock)+2); とかやってたのは内緒
267 名前:336 mailto:sage [2007/02/21(水) 13:52:55 ] What's New for D 1.007 Feb 20, 2007 ・Comparison operators are no longer associative; comparison, equality, identity and in operators all have the same precedence. ・out and inout parameters are now allowed for compile time function execution. ・The .dup property is now allowed for compile time function execution. ・Updated lib to insert COMDATs into symbol table. ・Class references can no longer be implicitly converted to void*.
268 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 15:08:40 ] What's New for D 1.007 Feb 20, 2007 ・ 比較演算子を結合できないようにしました。比較に関する演算子は全て同じ優先順位になります。 (a < b == c とか書けないようになった。 どうしてもやりたい場合は多分 (a < b) == c でイケるんじゃないかと。 c が bool だとありうるよね、一応) ・ out と inout 引数があっても、コンパイル時に関数を実行できるようになりました。 ・ .dup プロパティがコンパイル時に実行できるようになりました。 ・ COMDAT を lib のシンボルテーブルに含めました。 ・ クラスの参照を暗黙に void* へキャストできないようにしました。
269 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 15:25:56 ] 微妙な修正群・・・ やはりこれは真の1.000への修正だろうか。
270 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 15:28:59 ] >>269 かなり重要な修正じゃん。 それと今dmdが目指してるのは2.0。
271 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 21:31:32 ] 1.0はただの踏み台ですかw 安定志向という考えはD言語開発陣の辞書には無いということですかwwww
272 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 21:34:51 ] そんなもん。D言語はWalterタソの玩具。安定指向な言語使いたければJavaとかC#とかC++とか使ってなって話で。
273 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 22:40:45 ] なんと穏やかで小粒な修正……侘び寂びを感じるな。 実際の話、WalterもDの開発を通して新たに学ぶことがあるんだろうか。 Dで色々試して要るもの要らないものを見極めたら、 その集大成としてD--でも作ったほうがいいんじゃなかろーか、とか思う。
274 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 22:42:08 ] 1.005でぶっ飛んだ機能をつけたので、小粒な修正がしばらく続くかと。
275 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 23:34:14 ] 面白いおもちゃだよなあ。
276 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 06:40:21 ] Walterタンは仕事でC++のコンパイラを作っててフラストレーションがたまってるから 趣味でDを作ってるンよ
277 名前:デフォルトの名無しさん [2007/02/22(木) 07:27:11 ] D言語って言うくらいだからC言語やC++より高性能なわけ?
278 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 07:50:41 ] 高性能ですが別に速かったり表現できることがすごいというわけでは無いんです
279 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 08:06:03 ] 高性能ですが 高性能ですが 高性能ですが
280 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 08:10:09 ] C++厨がファビョったかな。
281 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 11:00:34 ] D言語(笑)
282 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 11:31:30 ] 言語の性能ってのも微妙な話な気がするが、 「高機能」となら言ってもいい・・よな? あと、綺麗なコードを書けるという意味では、 「表現できること」は比較にならんほど向上してると思う。
283 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 11:32:16 ] >>277 おまいに問いたい。Z言語は最高に高機能なんですか? ttp://ja.wikipedia.org/wiki/Z%E8%A8%80%E8%AA%9E
284 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 13:18:45 ] D 言語は素晴らしいけど、 仕様が固まらないと実用する気にならないのが難点。
285 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 13:20:56 ] 仕様が固まったD言語なんてD言語じゃない><
286 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 13:25:07 ] 仕様が固まったD言語はD言語じゃなくてD-だよ
287 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 13:57:55 ] 正直、Walterタンの中では ver 1.000 って ver 0.1.000 くらいの感覚だよね。
288 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 14:45:10 ] てゆーか正月にむりやりD1.0にしたからこんな「真のD1.0」とかなんとかいわれちゃうんだよね
289 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 15:30:32 ] 名前がDのせいで必要以上に期待されてるんだろな。
290 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 16:38:09 ] 名前がMarsのままならマイナー言語で終わるヤカン
291 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 17:06:32 ] Dが完成する時=WalterタンがE言語に手を出す時 じゃないかな。
292 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 17:09:31 ] Dが完成する時=Walterタンが飽きたとき
293 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 18:18:25 ] 他の誰かが受け継ぐ可能性も・・・
294 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 18:29:57 ] ☆ チン マチクタビレタ〜 マチクタビレタ〜 ☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽ ___\(\・∀・) < コルーチンまだ〜? \_/⊂ ⊂_ ) \_____________ / ̄ ̄ ̄ ̄ ̄ ̄ /| | ̄ ̄ ̄ ̄ ̄ ̄ ̄| | | 愛媛みかん |/
295 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 18:42:53 ] 多倍長整数とかもあると嬉しい。
296 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 19:40:27 ] 多倍長型組み込まれないかなぁ ライブラリでの提供より組み込み型の方がパッと見見やすい気がする そんなもんどうでも良いと言うなら今から作る
297 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 19:53:46 ] OutBufferがあってもInBufferがない。ついでにエンディアン関連も充実させてくれ。
298 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 20:12:34 ] OutBufferって完全にMemoryStreamと役割かぶってて微妙なんだよなー phobosを一度整理してこの手のライブラリ間の重複をなくして欲しい。
299 名前:デフォルトの名無しさん [2007/02/22(木) 20:40:27 ] このスレを見ている人はこんなスレも見ています。(ver 0.20) 【PS2】オトスタツOtostaz [家ゲー攻略] べアルファレスを語るスレ part14 [家ゲーRPG] 【肉食いたい】お金くださいPart27【米もない】 [借金生活] ★合法的に誰かが金を貸してくれるスレ その42★ [借金生活] 45歳以上の転職Part7 -25 OR 6 TO 4- [転職]
300 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 07:04:14 ] 内部utf-16処理にしようとして、はてunicodeリテラルがあったかと我に帰る
301 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 11:17:31 ] え、無かったっけ
302 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 13:45:26 ] ttp://video.google.com/videoplay?docid=-7073020265668105471 Walter Bright @ NWCPP: Advanced D Programming Language Features
303 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 14:25:07 ] 手前の男の食い物が気になって気になって
304 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 15:45:50 ] >>300 "ほげ"w どっちにしろwcharを扱えるphobosの関数が足りてなくてどうしようもない。
305 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 15:51:52 ] cast(wchar)hoge でもたしかUTF8からUTF16に変換してくれた気がする
306 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 18:57:34 ] >>304-305 thx. wchar[] apology = "プログラムは動作を停止しました"w ~"解決策を確認しています"w ~"ご迷惑をおかけしまして申し訳ありません"w; vip的になってしまった
307 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 19:15:12 ] >>306 まぁD言語だと文字列は文脈に応じて自動的にwchar[]とかdchar[]にもなるからこれでいんだけどな wchar[] apology = "プログラムは動作を停止しました" "解決策を確認しています" "ご迷惑をおかけしまして申し訳ありません";
308 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 19:18:15 ] >>307 ×文字列 ○文字列リテラル
309 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 20:23:26 ] >>308 お、すまんすまん。確かにその通り。 あんがと。
310 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 20:34:39 ] >>302 Northwest C++ Users Groupの2007年集会で行われた、 WalterによるD言語のプレゼン……でいいのか? トーク内容どころか右の要約(らしきもの)すらよく分からん(´・ω・`) DとC++のコードを比較しながら 「mixinとかtupleとかscope guardとか良いものだー」って感じ?
311 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 22:48:27 ] まぁ確かにmixinとかtupleとかscope guardは良いものだ
312 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 00:01:09 ] tuple リテラルがないのは、いい文法が思いつかないからか?
313 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 00:15:49 ] tupleってなにに使うのかよくわからない俺に誰か教えて欲しい。
314 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 01:00:20 ] >>313 可変個引数テンプレートでしか使ってない俺
315 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 02:04:17 ] nippleってなにに使うのかよくわからない俺に誰か教えて欲しい。
316 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 02:21:11 ] サラミはおつまみですよ。
317 名前:デフォルトの名無しさん [2007/02/24(土) 02:39:16 ] D言語のエディタってまさかwindbg.exeじゃないよね?
318 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 03:39:55 ] >>317 ネタは向こうでやってよ pc10.2ch.net/test/read.cgi/tech/1164376614/l50
319 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 05:24:43 ] エディタなんて付いてない
320 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 08:30:58 ] >>313 適当に複数の値を戻り値にしたい場合に使える。 例えば Ruby だと d, m = divmod(5, 2) def divmod(x, y) return x / y, x % y end みたいにできる。 構造体使うのは各値に名前がつくからバグ抑制にはいいんだが、 適当にちょっとしたプログラムを作る時には少々うざったい。
321 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 11:16:08 ] Dのtupleは関数から戻せないだろ
322 名前:313 mailto:sage [2007/02/24(土) 12:04:27 ] おう成る程と思って試してみたらできなかったからちょい迷ってた。 公式で「関数からタプルを返せるように」 する予定は一応あるみたいだけども。
323 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 12:25:44 ] %(int, int) divmod(int x, int y) { return %(x / y, x % y); } %(d, m) = divmod(x, y); 少しダサイか。 単項 % はないから導入可能な文法ではあるんだろうけど。 いくつか候補はあるけど、どうよ? /(int, int) divmod(int x, int y) { return /(x / y, x % y); } /(d, m) = divmod(x, y); %(int, int) divmod(int x, int y) { return %(x / y, x % y); } %(d, m) = divmod(x, y); ?(int, int) divmod(int x, int y) { return ?(x / y, x % y); } ?(d, m) = divmod(x, y); ^(int, int) divmod(int x, int y) { return ^(x / y, x % y); } ^(d, m) = divmod(x, y); |(int, int) divmod(int x, int y) { return |(x / y, x % y); } |(d, m) = divmod(x, y); :(int, int) divmod(int x, int y) { return :(x / y, x % y); } :(d, m) = divmod(x, y); .(int, int) divmod(int x, int y) { return .(x / y, x % y); } .(d, m) = divmod(x, y); =(int, int) divmod(int x, int y) { return =(x / y, x % y); } =(d, m) = divmod(x, y); <(int, int) divmod(int x, int y) { return <(x / y, x % y); } <(d, m) = divmod(x, y); >(int, int) divmod(int x, int y) { return >(x / y, x % y); } >(d, m) = divmod(x, y); <<(int, int) divmod(int x, int y) { return <<(x / y, x % y); } <<(d, m) = divmod(x, y); >>(int, int) divmod(int x, int y) { return >>(x / y, x % y); } >>(d, m) = divmod(x, y); >>>(int, int) divmod(int x, int y) { return >>>(x / y, x % y); } >>>(d, m) = divmod(x, y); <=(int, int) divmod(int x, int y) { return <=(x / y, x % y); } <=(d, m) = divmod(x, y); >=(int, int) divmod(int x, int y) { return >=(x / y, x % y); } >=(d, m) = divmod(x, y);
324 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 13:51:11 ] こういうのはあかんのんか? @(int, int) divmod(int x, int y) { return @(x / y, x % y); } @(d, m) = divmod(x, y); $(int, int) divmod(int x, int y) { return $(x / y, x % y); } $(d, m) = divmod(x, y); \(int, int) divmod(int x, int y) { return \(x / y, x % y); } \(d, m) = divmod(x, y);
325 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 14:00:43 ] これがいいんだけどラベル構文があるから無理だし。 int:int divmod(int x, int y) { return x / y : x % y; } d:m = divmod(x, y); ""wのように[int,int]tって方法もありそう。 #タプルの連結を~でできるようにならないかなぁ。
326 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 20:48:00 ] >>323 タプルリテラルがかけなくとも、単に型タプルを戻り値型のところに 書けるようになれば十分じゃない? Tuple!(int,int)てな感じで。 関数が(値タプルだけではなく)型タプルも返せるようになれば、 template tuple(T...){ Tuple!(T...) tuple(T...){ return Tuple!(T...); } } とかテンプレート関数を定義できるようになるだろうから、 テンプレート関数をコンパイル時実行させることを利用して tuple(int,int) func(){ return 3,6 } とか書けるようになるだろうし。 castとかと類似の文面になる方がよいと思う。
327 名前:323じゃないけど mailto:sage [2007/02/24(土) 21:34:53 ] >>326 型タプルを返せるようになったならこうでしょ。 TL tuple(TL...)(TL tl){ return tl; } 下もこう。 tuple(int,int) func(){ return tuple(3,6); } でも、やっぱタプルリテラルは必要。内部機能を使うのにimportをするのはダサい。
328 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 23:21:12 ] キーワード導入したくないんだろうな、やっぱ。 でも、ここは導入してもいい気がする。 あと、タプルの展開もできるようにして欲しい。 Ruby だと配列を展開して引数に渡せるけど、あれみたいなやつを。 double foo(double x, double y) { return x / y; } auto x = tuple(1.0, 2.0); writeln(foo(*x)); みたいな。 Ruby の関数の引数は確か実はタプルとして実装されてたと思うけど、 あれはコンマ演算子がタプル生成演算子になってるからできる芸当なんだよな。 D で C と同様の仕様のコンマ演算子って本当に必要なんだろうかね・・・と思ったけど、 三項演算子の中で複数の式を実行したい場合に必要と言えば必要か。 コンマ演算子は評価順が決まってるべきだけど、 引数は評価順が決まってない方が都合がいい場合もあるから、 両者を同一のモノで実装するのは速度との両立という観点からすればアレだし、 D では Ruby と同じにしない方が良さげだな。
329 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 23:32:04 ] >>328 既にできるじゃん。 double foo(double x, double y) { return x / y; } auto x = TypeTuple!(1.0, 2.0); writeln(foo(x));
330 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 00:00:28 ] しまった。確認してなかった。 そうか、できるのか・・・。
331 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 00:08:11 ] { scope hoge = new File("foo.bar", FileMode.OutNew); with(hoge){ writefln("Foo"); } } これを、 with(scope new File("foo.bar", FileMode.OutNew)){ writefln("Foo"); } こうかけるようになったらいいなって思った。
332 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 00:08:21 ] なんかD言語のタプルなんてどうでもよくて Rubyの話をしに来てるみたいだな