1 名前:デフォルトの名無しさん [2008/04/14(月) 15:16:22 ] プログラミング言語 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フロントエンド) ■参考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/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の入門講座) ttp://www.nicovideo.jp/mylist/4453698 (D言語で作られた芝ゲー niconico動画) ttp://www.asahi-net.or.jp/~cs8k-cyu/ (ABA Games) ■ IDE ttp://dronten.googlepages.com/dscite (DSciTE) ttp://forums.codeblocks.org/index.php?board=20.0 (Code::Blocks) ttp://www.dprogramming.com/entice.php (Entice Designer) ttp://www.dsource.org/projects/descent (Descent) ttp://www.dsource.org/projects/poseidon (Poseidon)
261 名前:デフォルトの名無しさん [2008/05/17(土) 23:47:03 ] win32版dmd1.028で連想配列の動的配列のlengthを設定しようとすると 固まるんだけど、誰か分かりませんか? こんなの int main() { int[int][] a; a.length = 5; return 0; }
262 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 00:25:43 ] >>261 ほんとだ。これでも固まる(実行時)。 void main() { typedef int[int] intint; intint[] a = new intint[5]; }
263 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 00:47:15 ] シャアw
264 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 04:04:55 ] >>261 それはずっと前からバージョン関係なく止まる。 効率良くはないが、俺はループさせてnullで埋めたりしてた。
265 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 08:36:52 ] 伝説のIDEか ttp://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D.ide&artnum=176 Zeus自体は有料なんだけどね ttp://www.zeusedit.com/index.html
266 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 16:45:27 ] std.bindいじってたらdmd落ちた・・・ どこが原因かわかんね
267 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 17:30:22 ] 2.014 std.xmlがうまくうごかなくなった・・ onStartTag内で、attrがからっぽ
268 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 03:50:56 ] 質問なんですが、一度設定したらそれ以降不変なメンバの初期化をコンストラクタに 与えられた値を使って行いたいです。D言語だとinvariantなメンバの初期化はどうやって 行うのでしょうか。
269 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 04:56:06 ] 以下のようにコンストラクタ内で初期化すればいいんじゃないの? class Foo { invariant int bar_; this(int bar) { bar_ = bar; } void bar(int baz) { //bar_ = baz; コメント外すとError: can only initialize const member bar_ inside constructor } }
270 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 08:19:55 ] DはC++と違ってメンバ初期化子ないもんね
271 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 08:25:55 ] 参照型のクラスにはいらないし 値型の構造体にはコンストラクタが定義できない 無駄なインスタンスが作られないからメンバ初期化子はいらないわけか
272 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 08:56:39 ] 誰かstd.encodingについて3行でまとめてくれ
273 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 09:12:33 ] 切り捨てなきゃ無理
274 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 14:09:25 ] 文字列エンコーディングに関する標準が出来た感じ? encodingのドキュメントぱっと見たけど、シグニチャがGeneric過ぎて使い方がすぐイメージできんw あとEncodingSchemeASCIIとかのクラス名はASCIIEncodingSchemeのほうが良くないか。 語順がなんか気持ち悪い。 ともあれ、これにEncodingStreamと、ICUEncodingSchemeとかを加えてやれば、 Javaや.NET並のエンコーディング処理能力が得られるのかな。
275 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 17:28:28 ] >Javaや.NET並のエンコーディング処理能力が得られるのかな。 それはいいな
276 名前:デフォルトの名無しさん [2008/05/20(火) 03:00:00 ] int hoge(); void hoge(int v); で、hoge っていうプロパティになるらしいけど、 hoge++; って出来ないのは何とかならないですか? DMD 1.028 です。
277 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 03:14:21 ] なんともなりまへん。
278 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 06:16:40 ] ニュースグループで、ウォルたんにお願いしてみるしか。 気が向いたら、やってくれるかも。
279 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 07:34:51 ] +=もだめだっけ。結構前から「いつかやる予定」ってどっかに書いてなかった?
280 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 16:09:15 ] 「いつかやる予定」=「めどいからやらない」
281 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 17:00:58 ] 時の流れが、少ないコードで何も崩さずそれを追加できるよう状況を整理するのを待ってるわけか。 いや、「いつの間にか必要無くなってる」というのを待ってるのかもw
282 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 17:52:35 ] コンパイラのソースが公開されてるんだから 自分たちでやるっつーのは?
283 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 18:03:47 ] 言語として互換性を損なうと、それこそ意味がない。
284 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 19:13:40 ] >>280 今やらねばいつできる -> 今やらねばいつかできる 俺がやらねば誰がやる -> 俺がやらねば誰かやる
285 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 19:27:13 ] という
286 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 09:46:31 ] win32.windowsとかdflとか2.0対応のライブラリが 増えてきていい感じに使えるようになってきたね
287 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 13:59:29 ] あとはTango? 統合されないのかなぁ・・・ ひろいとはいえないDの世界で基本ライブラリが 2つ開発されているのはなんとももったいない
288 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 14:47:57 ] walたんがそのうち統合されるんじゃねwww みたいなこと言ってなかったっけか
289 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 16:25:44 ] BOFの時の質問にそんなんがあったな。 やっぱり「そのうち統合されるんじゃない?」みたいな感じだった気が。 今のところ統合する気はないってことだよね。
290 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:00:18 ] タンゴボスは駄目なのかい
291 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 23:05:11 ] 名前からしてダメダメオーラが
292 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 23:06:38 ] ウォルたんのギャグセンスは微妙w
293 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 12:32:39 ] しかし0.1ショックは面白かった
294 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:03:12 ] Tangoも…
295 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:45:02 ] import std.variant; import std.stdio; import std.string; alias Variant var; int[var] dic; dic[var("aaaa")]= 10; writeln( dic[var("aaaa")] ); あれ〜これってだめなのかな writelnで即落ちします・・・
296 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:47:22 ] VariantのopEqualsの実装がどうなってるのか確認したほうがよさげ。
297 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:43:03 ] 機能から複数のファイルに分けられたユーティリティ関数を 同じ名前空間みたいな感じでアクセス( Util.hoge() って感じに)したくて、 今はそれぞれのファイルにおいて関数をテンプレートで書いて、 ひとつのファイルでそれらをミックスインしてるんだけど、他に良い方法 ないですか?
298 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:48:34 ] ファイルを結合する
299 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:17:12 ] >>295 writeln(dic[var("aaaa")])は,本当に割り当てたキーを参照してる? dic[var("aaaa")] = 10; dic[var("aaaa")] = 20; writefln(dic); //-> [aaaa:10,aaaa:20]
300 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:18:48 ] > 298 あー、なるほど・・・。ありがとうございます! import("hoge.d"); ですよね。やってみます。 ピンと来たんだけど調べるのに時間かかってしまった・・・。
301 名前:297 mailto:sage [2008/05/24(土) 02:02:50 ] 正確には mixin(import("hoge.d")); でコンパイルオプション -Jhoge ってな感じですね。 うまくいきました。感謝です。 趣味でゲーム作るならやっぱりD言語ですねぇ
302 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 07:25:47 ] >>299 わ、本当だ! ありがとうございます。 if( var("aaaa") in dic ) { writeln( "has" ); //表示されない }
303 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 09:24:28 ] listviewにアイコン載せれるようになったらおいらはいつでも戻ってくる
304 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 11:33:38 ] >>302 Dのリテラル文字列ってinternされないって事なのかな?
305 名前:デフォルトの名無しさん [2008/05/25(日) 12:37:31 ] ttp://wiki.dprogramming.com/Dfl/Snapshots March 3, 2008 dfl-20080303.exe installer * Implemented ImageList. * Added images to ListView. ttp://www.dprogramming.com/listviewimages.gif
306 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 13:00:14 ] >>305 は>>303 へ
307 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 15:00:09 ] >>304 toHashは同じ値になるから,結局はopCmpやopEqualsの実装によるのではなかろうか
308 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 16:32:51 ] >>307 var("aaa") == var("aaa") ってなりますね。 opCmpかな〜
309 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:48:25 ] Dで大規模アプリの開発に取り掛かったんだけど言語の選択ミスしてる?
310 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 19:54:02 ] 大規模アプリってなんぞ
311 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 20:24:55 ] >309 ムチャシヤガッテとは言っておく。
312 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 20:33:41 ] >>309 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::。::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::。::::::...... ... --─- :::::::::::::::::::: ..::::: . ..:::::::: :::::::::::::::::...... ....:::::::゜::::::::::.. (___ )(___ ) ::::。::::::::::::::::: ゜.:::::::::::: :. .:::::。:::........ . .::::::::::::::::: _ i/ = =ヽi :::::::::::::。::::::::::: . . . ..:::: :::: :::::::::.....:☆彡:::: //[|| 」 ||] ::::::::::゜:::::::::: ...:: ::::: :::::::::::::::::: . . . ..: :::: / ヘ | | ____,ヽ | | :::::::::::.... .... .. .:::::::::::::: ::::::...゜ . .::::::::: /ヽ ノ ヽ__/ ....... . .::::::::::::........ ..:::: :.... .... .. . く / 三三三∠⌒>:.... .... .. .:.... .... .. :.... .... ..:.... .... ..... .... .. .:.... .... .. ..... .... .. ..... ............. .. . ........ ...... :.... . ∧∧ ∧∧ ∧∧ ∧∧ .... .... .. .:.... .... ..... .... .. . ... ..:( )ゝ ( )ゝ( )ゝ( )ゝ無茶しやがって… .......... .... i⌒ / i⌒ / i⌒ / i⌒ / .. ..... ................... .. . ... .. 三 | 三 | 三 | 三 | ... ............. ........... . ..... ... ∪ ∪ ∪ ∪ ∪ ∪ ∪ ∪ ............. ............. .. ........ ... 三三 三三 三三 三三 三三 三三 三三 三三
313 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 21:08:24 ] >>309 それはあくまで「趣味の範囲」での大規模ですね、わかります
314 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 22:10:17 ] >>313 GUIです。
315 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 22:22:10 ] GUI使ってれば大規模?
316 名前:デフォルトの名無しさん [2008/05/26(月) 23:20:17 ] ひょっとすると、GUIフレームワークを開発中なのでは?
317 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:54:12 ] >>316 ・・・それはないだろう >>314 普通のGUIアプリならDでもいいけど Dの利点は優れた構造化能力と何よりフロンティアであることです 実務を楽にこなしたいならC#の方がいいよ
318 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 10:37:03 ] >>309 答えるのが難しい質問だね。 言語仕様自体は、コード解釈で微妙な誤解が起きたりしないよう 注意が払われてるなど、大規模開発を意識したものになってる。 しかし現状では、処理系やライブラリの熟成度に不安がある。
319 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 12:08:48 ] ------ test.d ------ class T1 { public int getint() { return 1; } } ------ main.d ------ static import test; class T2 : test.T1 { public override int getint() { return test.T1.getint(); // 駄目 //return typeof(super).getint(); // こう書きたいけどこれも駄目 } } int main() { auto t = new T2; return t.getint(); } dmd.2.014で上のように書くとスタックオーバーフローになるのですが dmd.2.014と私のどちらがおかしいのでしょうか? 私がおかしい場合、どのように書くのが正解なのでしょうか?
320 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 15:11:58 ] public override int getint() { return super.getint; } これじゃ駄目な理由は何?
321 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:06:32 ] >>320 いえ、それで結構です。super.で呼べるのですね。 それを知らなくて return super(); とかいろいろやってました。 ありがとうございました。
322 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:39:58 ] TinyXMLはObjectのメンバを再定義してる部分が多くて 全部hiddenなんとかのエラーが出てしまう alias Object.print print; public void print() {} て全部やらないのいけないよね? めんどいけどしょうがないのかな
323 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 20:51:13 ] D言語とC++0xって闘ったらどっちが強いんですか!?
324 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 20:57:58 ] 純粋な疑問なんだけどプログラム言語の世界で「○○言語最強」とか言ってる連中って何がしたいの? 「強さ」の基準からしてまったくわからんのだけど。
325 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 21:05:12 ] 作者と信者がガチの喧嘩をしたらどっちが勝つかという問題だろう。 Dは少数派だから厳しいだろうな。
326 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 21:13:40 ] D教祖の筋肉とチーマObjective-C信者の飛び道具がマジノ攻防戦?
327 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 22:24:34 ] でもDは大砲も跳ね返すんだぜ? www.kmonos.net/alang/d/2.0/dbc.html
328 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 22:51:58 ] すげぇwwwwwwwwwwwwwwwwwww D言語使わせてくれwwwwwwwwwwwwwwwwww
329 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 23:02:19 ] D事態が弾を内包しているという罠・・・
330 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 00:16:40 ] その弾丸と親和性が高いのではねかえせるのですね。わかります。
331 名前:デフォルトの名無しさん [2008/05/28(水) 00:39:32 ] DでBasicっぽいゲームエンジン作ろうかと思ってるのだがやめておいたほうがいいだろうか・・・
332 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 00:45:54 ] D言語で最新のDirectX SDKを叩ける方法の方が…
333 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 02:15:29 ] >>331 いや、やってみてから挫折しろよ
334 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 05:49:30 ] >>332 最新に完全対応かどうかはわからないけど DSourceにあるBindingsで叩ける 最新SDKとリンクさせてるけど、いまのところ問題ない。
335 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 06:27:21 ] >>324 何がしたいっていうか、そういう遊びだろう。 勝敗の決まらない、操作そのものを楽しみ続ける格闘ゲームみたいなものだから、 基準がまったく定まらず、お互いにまったく噛み合わないこと自体も 彼らの求める相互排他とか衝突を生み出すいいきっかけなんだよ。
336 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 07:27:03 ] >>327 なんでD言語のキャラクターはこんなにムカつくんだwww
337 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 08:51:39 ] >>334 まじ?Bindingsってなんか依存関係でコンパイラがエラーはくんじゃなかった?
338 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 11:11:11 ] ロゴがある言語って少ないんだからあのロゴキャラ消してもいいような…
339 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 11:20:34 ] 日本以外はサマータイムやってるから理論はいかがなものかと。 ウザカワキャラってことで売り出していこうぜ,
340 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 11:41:16 ] >>337 そんなのとっくに直ってる
341 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 13:57:47 ] GDI+ の D言語へのポートってないんですか? 自分でシコシコ作るしかないのかな…
342 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 14:33:41 ] 大規模やらDirectX10やら、やたら勇者がおおいな
343 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 15:44:21 ] そう言えば日本のサマータイム導入はどうなるんだろう。 他の導入済み都市と比べて夏と冬の日照時間にほとんど差がないから意味がないような。 また政治家の手続き遊びによる金稼ぎが。
344 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 20:29:27 ] 毎年、切り替えの日に仕事遅刻するのが目に見えてるからやめてほしい。
345 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 15:41:17 ] なんの話だよ
346 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 15:58:53 ] サマータイムの話では。
347 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 21:01:28 ] DigitalMars のサイトが……
348 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 21:29:54 ] と思ったら蘇ってた
349 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 21:49:18 ] 一瞬だけ変なところ飛んだんだが、何事だったんだろうな
350 名前:デフォルトの名無しさん [2008/05/30(金) 01:11:16 ] glutを使いたいのですが、リンク時に Error 42: Symbol Undefined _glutInit というエラーが出てしまいます 調べてみたところ、おそらくglut32.libが原因のようで、 glut32.libは DIDE with D のものを使うといいとの事ですが、 DIDE with Dのサイトがもう見れなくなっていて困っています。 DIDE with D以外だとどこのglut32.libを使えば動くんでしょうか? ちなみにimplib -a glut32.lib glut32.dl で作ったものと yaneSDKに入っているもの、DedicateDのglut32.libを試しても同じエラーが出てしまいました。 それともなにか他の原因があるのでしょうか? 原因がわかりそうな方お願いします。
351 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 01:15:26 ] >>350 .zipで上げてくれたら誰かやってくれるかもしれんよ
352 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 02:15:14 ] SDL + opengl opengluなら普通に使えるけどglutは試してないなぁ。
353 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 02:33:11 ] >>350 DLLがあるなら、implib /s glut32.lib glut32.dllでいいと思うのだが
354 名前:353 mailto:sage [2008/05/30(金) 03:51:53 ] よく調べたら、extern(Windows)な関数のライブラリだった。 ↑は使えない。 まずwww.xmission.com/~nate/glut.html からvc++用のバイナリを落としてくる。 それから、glut32.libをcoffimplib.exeでOMFライブラリに変換して、 それを使えば大丈夫なはず。
355 名前:353 mailto:sage [2008/05/30(金) 04:06:26 ] あと、glutInitの宣言にextern(Windows)がついてないと思われるので、付けるように。 というか、むしろこっちが原因かも。 libファイルがどうこうじゃなくて。 yaneSDKに入っているものでも大丈夫だったし。
356 名前:353 mailto:sage [2008/05/30(金) 04:23:03 ] >あと、glutInitの宣言にextern(Windows)がついてないと思われるので、付けるように。 extern(C)をextern(Windows)に変えろって意味ね。
357 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 04:37:31 ] 世話焼き萌え。
358 名前:350 mailto:sage [2008/05/30(金) 11:55:05 ] >>355 extern(Windows)をつけたらできました。 レスくれた方ありがとうございます。 勉強になりました
359 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 12:50:34 ] GLでがりがりやってる方もいるんだねぇ・・・
360 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:29:20 ] さて、IDEはまだかね?
361 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:44:58 ] っ Descent