1 名前:デフォルトの名無しさん mailto:sage [2021/06/17(木) 00:24:12.56 ID:NvYoNP9C.net] 公式 https://www.rust-lang.org/ https://blog.rust-lang.org/ https://github.com/rust-lang/rust Web上の実行環境 https://play.rust-lang.org 日本語の情報 https://rust-jp.rs/ ※Rustを学びたい人はまず最初に公式のThe Bookを読むこと https://doc.rust-lang.org/book/ ※C++との比較は専用スレへ C++ vs Rust https://mevius.5ch.net/test/read.cgi/tech/1619219089/ 前スレ Rust part10 https://mevius.5ch.net/test/read.cgi/tech/1617367084/
413 名前:er(a: i32, b: i32) -> i32 { if a > b{ return a; } b } これなんだけど、「return a;」のところってなんで「a」だけじゃダメなの? [] [ここ壊れてます]
414 名前:デフォルトの名無しさん mailto:sage [2021/07/25(日) 19:46:35.31 ID:gzVcIMN0.net] elseがあればいいんじゃない?
415 名前:デフォルトの名無しさん mailto:sage [2021/07/25(日) 19:49:48.51 ID:Wj/gwJho.net] >>404 関数の最後じゃにゃいから
416 名前:デフォルトの名無しさん mailto:sage [2021/07/25(日) 21:25:46.69 ID:2QCCz/RS.net] オライリー買ってくる
417 名前:デフォルトの名無しさん [2021/07/25(日) 21:31:05.59 ID:HNTE1GP9.net] ありがとう 最後の式だ特別なのか
418 名前:デフォルトの名無しさん mailto:sage [2021/07/26(月) 20:33:20.42 ID:FeBtPwa3.net] 文と式を区別しましょう
419 名前:デフォルトの名無しさん mailto:sage [2021/07/26(月) 21:31:17.41 ID:H6CQkre6.net] ブロック式が値を持つなら式文も値を持たせればよかったと思うんだけど、それだと何か都合が悪いのかな。
420 名前:デフォルトの名無しさん mailto:sage [2021/07/26(月) 21:53:51.50 ID:6YP5cq8/.net] それは式文を構成する式と何が違うのか
421 名前:デフォルトの名無しさん mailto:sage [2021/07/26(月) 22:05:31.99 ID:H6CQkre6.net] 最後だけセミコロンを外すとかしなくて済む。
422 名前:デフォルトの名無しさん mailto:sage [2021/07/26(月) 22:09:46.01 ID:x+l/EPbt.net] セミコロンあるなしで意味が変わるのって、バグを産む原因になりそう
423 名前:デフォルトの名無しさん mailto:sage [2021/07/26(月) 22:26:28.18 ID:6YP5cq8/.net] その流れ前スレでも見た気がする
424 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 00:03:59.51 ID:rFi02BpK.net] どちらかというと;の有無で()を返すかどうか制御できる方がいい気がするけどな 式文も値を持つならわざわざ();って書かないといけない (まぁわざわざ書かせるのもRustらしい気もするが) >>413 間違えたら型エラーになるからバグにはならんと思うよ
425 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 03:17:46.37 ID:MlLztw4F.net] () を返す場合は関数省略だからreturn必須でよかったな
426 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 05:41:20.63 ID:QHeETuJ4.net] if-elseとかmatchとかでひたすら();書くのさすがにやばくない?
427 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 08:21:13.66 ID:fovpYeUo.net] どうしても () を返さなきゃならない場面ってそんなに多いんだっけ?
428 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 08:35:39.46 ID:XvzwJYSJ.net] コード例がないから全然わからん
429 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 08:54:31.16 ID:D32lY0Gw.net] Ok(())とか?
430 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 09:50:38.86 ID:UmdqpWnl.net] 最初アホみたいにReturn合った方が…とか思ってたけど慣れると全く要らん境地になるから不思議
431 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 10:35:08.16 ID:KNfqOmw/.net] >>418 少なくともletは値を返すわけにはいかないので()だね まぁCopyなら返せなくもないけど、Copyかどうかで挙動が変わるのはさすがに… ();を明示する、みたいにするとletだけ特別扱いになるし、結局今のルールでいいんじゃないかと
432 名前:デフォルトの名無しさん [2021/07/27(火) 11:00:19.20 ID:+VH8W8kj.net] elseのないif式で偽の時の値の話だと思ってた
433 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 11:03:48.76 ID:MlLztw4F.net] >>417 書き方が悪かった returnは値を返す時は必須だけどreturnがない場合は省略する。 関数の返り値と同じ法則で
434 名前:デフォルトの名無しさん [2021/07/27(火) 19:22:36.90 ID:AoeS3kCP.net] でも、関数の最後じゃなくてもさあ 文があったら、そこでリターンしてくれたらいいのにな まあ、ミスってても気づき辛くなるからダメなんかな?
435 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 19:47:32.00 ID:klQCV9Qk.net] 2文目以降は一切評価されないってことか 斬新だね
436 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 21:44:05.27 ID:fovpYeUo.net] >>422 特別扱いってのがよくわからないなぁ。 let x が () なら let x; も () でいいし (); を明示する必要もないと思うんだけど。
437 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 21:53:09.04 ID:fgL6LRsn.net] そもそもletは式じゃないし
438 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 22:40:27.72 ID:KUIeKdyD.net] XXXがstatementだとか、XXXはe
439 名前:xpressionだとか そういう議論が出る時点でダメ言語のオーラが 言語オタクには楽しいかもしれないけど [] [ここ壊れてます]
440 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 22:47:11.69 ID:fovpYeUo.net] だから式文じゃない文は () でいいんじゃね?特に特別扱いとは思わんが。
441 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 23:18:47.62 ID:rFi02BpK.net] 文は()という単純なルールを崩してまで式文から値を得たいモチベーションがよくわからん 単に;を取って式にすればいいだけなのに
442 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 23:20:35.98 ID:3rBo4v1y.net] Rust書いてて式と文を意識して区別しないといけないことなんて無いよ CやPythonならあるけど
443 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 23:30:43.54 ID:fgL6LRsn.net] 関数末尾だけセミコロン外すのが気に入らないなら、C/C++でやってたようにreturn x;とすればいい それで不都合を生むことはない
444 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 00:01:15.04 ID:SAGnL8kO.net] clippy先生に注意される
445 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 01:30:00.88 ID:ch5q2ifJ.net] 全てはclippy先生の仰せのままに
446 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 01:47:51.35 ID:QoybXfTv.net] #![allow(clippy::foo)] を書けばいいじゃん
447 名前:デフォルトの名無しさん [2021/07/28(水) 04:09:34.57 ID:96ImUxMy.net] なるほど >Rustのセミコロンは意味と構文からそれぞれ説明できる。 >意味論的には、以下の原則を覚えておけば十分である。 > >・セミコロンで終端された文は強制的に () 型となる。 >・ブロックの途中の文は () 型でなければならない。 >・ブロックの型はブロックの最後の文の型と等しい。(文がひとつもない場合は ())
448 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 07:29:31.85 ID:o1sqfUmC.net] >・ブロックの途中の文は () 型でなければならない。 これがあるから1行目の仕様なんだろうけど、これの理由ってなんなのかな。
449 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 08:03:12.35 ID:LX2CDHAF.net] 文に型なんてないよ
450 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 08:14:26.64 ID:9WJC0mlm.net] 文って値を返さないのかと思ってたけれど、 ()を返してるって事?
451 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 08:37:40.51 ID:LX2CDHAF.net] ブロックの型はブロックの最後の「式」の型と等しい。(「ブロックの最後に式がない」場合は()) ここの間違いが他のすべての説明によく分からない辻褄合わせを持ち込んでいるだけだと思う
452 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 09:58:43.22 ID:rdzsGCBs.net] >>437 >・ブロックの途中の文は () 型でなければならない。 そもそもブロックの途中の文を()以外にすることってできるの? { foo; bar } みたいなブロックを{ foo bar }とは書けないし
453 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 10:29:08.57 ID:LX2CDHAF.net] >>442 それは型の問題以前に文法の問題 型だけの問題だというなら、{ let foo = (); foo bar }と書けばコンパイルできるはずだが、 もちろんそんなことはない
454 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 11:58:08.16 ID:ch5q2ifJ.net] Facebook、次期ビルドシステムの開発でRust言語の採用を明らかに https://www.publickey1.jp/blog/21/facebookrust.html
455 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 11:59:44.89 ID:rdzsGCBs.net] >>443 文法の問題を解決しつつブロックの途中の文を()以外にする方法がわからんってことよ
456 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 12:46:01.08 ID:LX2CDHAF.net] >>445 何度でも言う 文に型はない
457 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 12:58:11.75 ID:LX2CDHAF.net] 「文を()にする/()以外にする」の正確な意味を言語化してほしい 「文が評価されて結果として()/()以外が得られる」という意味で言っているのなら、文は評価されて結果を返すものではない 評価されて結果を返すものは式と呼ばれる 文は式ではない
458 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 13:10:10.87 ID:rdzsGCBs.net] >>447 俺もそのへんはよくわからんが、 式文は「文が評価されて結果として()が得られる」って認識で使ってた これが誤りならまあすまん ここにこだわるつもりは全然なくて、 ようするに>>437 の「ブロックの途中の文は () 型でなければならない。」ってのがどういうこっちゃってこと この表現だと() 型じゃなくする方法があるように読めるからさ
459 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 13:12:38.58 ID:YxciSlP+.net] この一連の議論の評価値は ()
460 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 13:27:20.45 ID:LX2CDHAF.net] >>448 自分は>>441 で書いた通りその部分は辻褄合わせだと思ってるよ まあでも、自分もRust入門したころは似たようなことでこんがらがってたような気はする ブロックが式だなんて思ってなかったからかな
461 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 14:29:43.24 ID:x93GMB6T.net] >>449 コンパイルエラーだよ
462 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 14:52:26.31 ID:QoybXfTv.net] セミコロン省略できる式文(?)の型が()ではない場合は型エラーになるね https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=85e09ac464b7f9fb07b6aa1e2d08e8c9 セミコロンをつけたり、型を()にしたりするとエラーにならない https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=4e4152ae35e8fd2821060f44ed9a2fda https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=86429babc54c38b515dfe1f9de85f127
463 名前:デフォルトの名無しさん [2021/07/28(水) 17:33:51.84 ID:Ns6HtioT.net] 最も単純化してこれはコンパイル通るけど fn main() { if true { 1 } else { 0 }; () } しかし上記のifの尻のセミコロン無しだとコンパイルエラー【値が()ではない】となる セミコロン無しでも数字1と0を()へ変えればコンパイルが通る つまり >>437 >・ブロックの途中の文は () 型でなければならない。 ifをセミコロン無しで値が数字だと上記の条項を満たせないためエラー ifをセミコロン無しで値が()だと上記の条項を満たせる あるいは >・セミコロンで終端された文は強制的に () 型となる。 値が数字でもifをセミコロン終端させれば上記の条項を満たせる
464 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 17:46:15.09 ID:SAGnL8kO.net] で?って感じだけど とりあえずリファレンス見てくれば? https://doc.rust-lang.org/reference/expressions/block-expr.html
465 名前:デフォルトの名無しさん [2021/07/28(水) 18:03:06.43 ID:zh3fVAA3.net] >>454 そのリファレンスの説明だけだと 以下はコンパイル通るけど、関数内の3つの()のうち任意の1つでも数値に変えるとコンパイルエラーとなる説明はどの部分になる? fn main() { if true { () } else { () } () }
466 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 18:13:09.38 ID:gOp2Ufou.net] 今問題になってるのはこっちだね 最後の方に「;省略した式文は()でないといけない」となっている https://doc.rust-lang.org/reference/statements.html
467 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 18:38:39.95 ID:SAGnL8kO.net] >>455 Note: As a control flow expression, if a block expression is the outer expression of an expression statement, the expected type is () unless it is followed immediately by a semicolon. https://doc.rust-lang.org/reference/expressions/block-expr.html An expression that consists of only a block expression or control flow expression, if used in a context where a statement is permitted, can omit the trailing semicolon. This can cause an ambiguity between it being parsed as a standalone statement and as a part of another expression; in this case, it is parsed as a statement. The type of ExpressionWithBlock expressions when used as statements must be the unit type. When the trailing semicolon is omitted, the result must be type (). https://doc.rust-lang.org/reference/statements.html#expression-statements あとif式はifのブロックとelseのブロックで型が揃ってないとだめだよ
468 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 20:25:06.81 ID:o1sqfUmC.net] >>440 「値を返さない」と「()を返す」は同義だと思う。
469 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 20:32:49.95 ID:lhnCplqc.net] >>458 値を返さないことはnever typeとして別途定義されてるから()を返すこととは違うよ
470 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 21:30:00.41 ID:o1sqfUmC.net] never は値どころか制御も返さないから別物では? ()を返す(値は返さない)ことはできるけど、neverは返すことも不可能だと思う。
471 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 21:34:29.80 ID:iYnBfOfY.net] >>455 2つのエラー要因がある ifは式(rustでは式文と呼ぶのか)なので、
472 名前:then節とelse節が同じ型でないといけない mainはTerminationトレイトを実装していないといけないので最後の()は数値にできない [] [ここ壊れてます]
473 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 21:51:43.19 ID:iYnBfOfY.net] >>458 値を返さない、という言葉が今この場では曖昧に見える 本当にrustが値を返すものじゃない、と定義しているのは文法レベルで定義しているのはletや関数定義などの文 これは型チェック入る前にエラーになる 文法的に正しい、けど「値を返さない型」としか呼べないような式も存在して、それはrustだとnever type (!) と呼んでいる loop {} とかif true { return 10} else { return 0 }とか、こいつらは式だけど決して値にならない
474 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 23:11:13.67 ID:SAGnL8kO.net] >>458 違うって 何回も指摘されてるやん
475 名前:デフォルトの名無しさん [2021/07/28(水) 23:15:38.71 ID:fFOGvJ3Q.net] >>461 じゃあどうしてこれがコンパイルエラーとなるの? fn main() { if true { 1 } else { 0 } () }
476 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 23:25:02.98 ID:SAGnL8kO.net] The syntax for a block is {, then any inner attributes, then any number of statements, then an optional expression, called the final operand, and finally a }. The type of a block is the type of the final operand, or () if the final operand is omitted. https://doc.rust-lang.org/reference/expressions/block-expr.html let foo = { fn_call(); }; // final operandがないのでブロックの型は() let bar = { fn_call() }; // final operandがあるのブロックの型はfn_call()の型 式文が()を返すわけじゃない
477 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 23:28:39.35 ID:SAGnL8kO.net] >>464 fn main() { if true { 1 } else { 0 } // <- 式。文法的にfinal operand以外は文じゃないとダメ。if式の型が()の場合のみセミコロンを省略可。 () // <- final operand }
478 名前:デフォルトの名無しさん [2021/07/28(水) 23:34:19.58 ID:2+fvqic5.net] >>466 なぜ『if式の型が()の場合のみセミコロンを省略可。』という謎ルールがあるの??
479 名前:デフォルトの名無しさん mailto:sage [2021/07/29(木) 00:18:18.96 ID:J3IrN4Ey.net] >>467 使い勝手がいいから fn main() { if true { 1 } else { 0 } () } ↑この`if true { 1 } else { 0 }`に意味ないでしょ? 意味持たせるには`let foo = if true { 1 } else { 0 };`みたいに評価結果の値を何かしら使う形にする必要がある 意味がないけどセミコロンで式文にして「値を無視します」と表明すればエラーにはしない 表明がなければ「お前意味ないことやってるぞ」とエラーにしてくれる `if condition { println!(“1”) } else { println!(“0”) }`みたいに()に評価されるif式は 副作用を起こしたいケースなので評価結果の値を何かしら使う形じゃなくても意味がある この使い方の時にセミコロンを必須にすると他言語習得者にとってはめちゃくちゃ使い勝手が悪い 知ってれば役に立つことはあっても普段コードを書く時に意識する必要のないルール
480 名前:デフォルトの名無しさん [2021/07/29(木) 00:18:47.37 ID:+vgAr19b.net] >>467 他の言語での一般的な書き方も出来るようにだと思う
481 名前:デフォルトの名無しさん mailto:sage [2021/07/29(木) 00:23:32.99 ID:vLI97hvR.net] >>467 if式から値が返ってきた場合、次の行まで式が継続するのか;省略なのかが曖昧になるから ()ならそれに対してなにか操作はできないから、式が継続する可能性は消えて、;省略が確定する
482 名前:デフォルトの名無しさん mailto:sage [2021/07/29(木) 00:27:10.13 ID:J3IrN4Ey.net] >>468 >`let foo = if true { 1 } else { 0 };` 一応補足しておくと↑この場合のセミコロンは文法的にはlet statementのセミコロン
483 名前:デフォルトの名無しさん mailto:sage [2021/07/29(木) 08:55:08.12 ID:KzEq3JVg.net] >>470 構文解析フェーズで型を意識してるの?
484 名前:デフォルトの名無しさん [2021/07/29(木) 22:05:11.47 ID:0uhLIXqL.net] >>470 こういうことかな if true { () } else { () } - 2 【値-2】 if true { 1 } else { 0 } - 2 【エラー】 if true { 1 } else { 0 }; - 2 【値-2】 (if true { 1 } else { 0 }) - 2 【値-1】
485 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 02:02:42.06 ID:VAfd9CHU.net] rust version 1.54.0 リリース
486 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 11:59:34.52 ID:3yGih40v.net] https://twitter.com/mattn_jp/status/1420772207186255880 (deleted an unsolicited ad)
487 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 13:41:26.16 ID:bSJbrTlR.net] Cは、明確にポインタをつかって書くことで手作業で最適化できるが、 Rustのsafeモードは、見た目は参照もポインタも使わず実体コピーのような 書き方をする。例えば、 let a = Box::new(オブジェクト名:{・・・}); や、 let b = Box::new(オブジェクトを返す関数(・・・)); のように。 これはちゃんとコピーが生じないように最適化されているのだろうか? C++は、同様の書き方をする場合は、無駄をなくすために例えば、 vector::emplace_back() なるものがあり、最適化に任さずに明確にコピーを省略するマクロの様な 働きをするらしい。
488 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 14:17:32.88 ID:bSJbrTlR.net] >>476 あと、C++の場合、 CPerson person = CPerson(・・・); と書いた場合は、代入にならずに必ず、 CPerson person(・・・); と書いた場合と全く同様にコンストラクタが呼び出されることが決まっている。 Rustの場合、そういうことが全くドキュメント化されてない。 C++プログラマはそのことを理解しているから高速なコードが書けるが、 Rustは書いてないのでテキトーに書くしかない。 結果、あまり速くないコードになって、しかもどこが原因かも分からなく なりそう。
489 名前:はちみつ餃子 mailto:sage [2021/07/30(金) 14:26:14.81 ID:qMgk6unv.net] >>476 https://doc.rust-lang.org/beta/unstable-book/language-features/box-syntax.html
490 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 14:26:20.43 ID:uBYlPp6h.net] それよりdropがいつ走るかわからない方が怖いわ
491 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 15:17:37.81 ID:bSJbrTlR.net] Rustでは、CPersonのメンバ関数 new()の中で Heapにオブジェクトを作る時、 fn new(yyy) { return Box::new( CPerson { age: xxxx, name: xxxx } ); } みたいに書くしかないらしい。しかし、C++だと、コンストラクタの中で、 GetSystemModuleName(&name, zzz); のような書き方も出来る。 何が言いたいかと言えば、Rustだと代入形式でしか書けないので柔軟性に 欠けるということ。
492 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 15:19:00.34 ID:bSJbrTlR.net] >>478 リンク先間違ってない?
493 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 15:31:40.72 ID:87Gl51wF.net] bindings_after_at stableになったのうれしい
494 名前:デフォルトの名無しさん [2021/07/30(金) 16:14:14.47 ID:ghy/bFcm.net] >>480 メモリ安全性を保つのが困難になっていくからそれを避ける方法がベストだよ
495 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 16:42:36.73 ID:bSJbrTlR.net] >>483 なんともなあ。
496 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 16:53:36.97 ID:SwFfvD28.net] せっかくだしこっち使ってくれよ https://mevius.5ch.net/test/read.cgi/tech/1619219089/
497 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 16:58:32.68 ID:9xDw6FKV.net] >>476 コピーが生じないように最適化される。 つまり、スタック上の一時オブジェクトをヒープにコピーするのではなく、ヒープ上に直接オブジェクトを作成する。
498 名前:デフォルトの名無しさん [2021/07/30(金) 17:02:02.06 ID:lHY+syIy.net] >>480 具体的にこのように書きたいけどエラーになるというRustのコードを示してください。(他の言語のコードは不要) それによりようやく初めて、何を問題としているのか、何が問題なのか、がはっきりします。
499 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 17:29:20.46 ID:nNXXdoxJ.net] VeqDequeに二分探索実装されてるけどそもそもソートできなくない???
500 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 18:21:23.96 ID:N3W+nBLQ.net] >>488 make_contiguousかas_mut_slicesで中身の可変スライスを受け取って そのスライスのsortかsort_byを使えばソートできそう(試してない) make_contiguousが本線っぽいからリファレンス読んでくれ
501 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 18:33:31.64 ID:nNXXdoxJ.net] make_contiguousするならそのあとのas_mut_slicesに対して二分探索でよくない????
502 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 19:00:01.19 ID:N3W+nBLQ.net] その辺はもう「お好きにどうぞ」としか言えない
503 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 20:35:47.56 ID:Lxzkaxvv.net] contiguousじゃないがsortされてることが保証されてるケースで使いたいのかね
504 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 21:37:49.30 ID:7fXRNBDL.net] sort順を壊さない位置に要素を挿入するのにbinary_searchを使う
505 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 21:46:04.82 ID:Lxzkaxvv.net] https://github.com/vojtechkral/rfcs/blob/vecdeque-binary-search/text/0000-vecdeque-binary-search.md#motivation
506 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 23:01:01.92 ID:YV3ifLwI.net] >>486 オブジェクトを返す関数を Box::new()のパラメータの位置に書いてもそうなるの?
507 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 23:11:44.30 ID:ZatLdYYe.net] >>477 explicitでなければな
508 名前:デフォルトの名無しさん mailto:sage [2021/07/31(土) 16:04:12.94 ID:4L+o4Dn8.net] 配列の添え字はusize以外も許容してほしいなー
509 名前:デフォルトの名無しさん mailto:sage [2021/07/31(土) 16:11:02.83 ID:zwQwPVDS.net] std::ops::Index を実装すればええんちゃう?
510 名前:デフォルトの名無しさん mailto:sage [2021/07/31(土) 16:31:36.36 ID:4L+o4Dn8.net] >>498 おお、こんなのあるのか。知らなかった。
511 名前:デフォルトの名無しさん [2021/08/02(月) 06:51:52.57 ID:rcivjOzc.net] Tokio @tokio_rs Announcing Axum - An ergonomic and modular web framework that takes full advantage of the Tokio, Hyper, and Tower ecosystem. https://tokio.rs/blog/2021-07-announcing-axum
512 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 10:51:16.95 ID:/2ZmNaA8.net] Rocketが統一するんじゃなかったんかい
513 名前:デフォルトの名無しさん [2021/08/02(月) 11:07:27.91 ID:IM57Srba.net] axumはシンプルかつ洗練されており柔軟性もあって、よりRustっぽい それでいてtokio直轄だから今後の主流になりそう