[過去ログ]
Rust part24 (1002レス)
Rust part24 http://mevius.5ch.net/test/read.cgi/tech/1716759686/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
19: デフォルトの名無しさん [sage] 2024/05/29(水) 22:46:32.28 ID:b7HyT2Iv unsafeはRust外のFFI/API境界でのやむを得ない出現か unsafeを使うことで効率的かつ安全なパターンになる時のいすれかだが 後者のパターンは特定のプログラムから切り離してsafeなインターフェースを提供する汎用ライブラリに閉じ込めるのが好ましく 標準ライブラリはそのようにして出来ている http://mevius.5ch.net/test/read.cgi/tech/1716759686/19
40: デフォルトの名無しさん [sage] 2024/06/03(月) 15:47:20.28 ID:8wxJn/St >>38 >本質的に unsafe 良いキーワード出た、深掘りしてくれ これとか github.com/tokio-rs/io-uring io_uringが本質的にunsafeだとでも思ってるのかな? http://mevius.5ch.net/test/read.cgi/tech/1716759686/40
58: デフォルトの名無しさん [sage] 2024/06/05(水) 19:11:15.28 ID:ubKPmxXH >>49 dynはアドレスとvtableの対なので使える use std::fmt::Display; let i = 12345; let r = &i; let d: &dyn Display = &i; // assert!(eq(r, d)); // 型が不一致でコンパイルエラー assert!(addr_eq(r, d)); // アドレスが一致 文字列strはアドレスと長さの対なのでこのように比較できる use std::ptr::{addr_eq, eq}; let s1 = "abcdef"; let s2 = &s1[..3]; let s3 = &s1[3..]; assert!(!eq(s1, s2)); // 長さが異なるので不一致 assert!(addr_eq(s1, s2)); // アドレスが一致 assert!(!addr_eq(s1, s3)); // アドレスが不一致 文字列をバイト列に読み替えたときにも使える let b1 = s1.as_bytes(); // assert!(eq(s1, b1)); // 型が不一致でコンパイルエラー assert!(addr_eq(s1, b1)); // アドレスが一致 http://mevius.5ch.net/test/read.cgi/tech/1716759686/58
77: デフォルトの名無しさん [sage] 2024/06/08(土) 13:06:19.28 ID:nAguSD5l パニックさせるということはNoneかどうかをチェックしているということ そしてパニック用のコードもそこに含まれるということ そのため高速化がシビアなケースではunwrap_unchecked()が使われている unsafeなので確実な監視対象となる点でむしろ好ましいケースもありうる とはいえ特殊な場合を除き非推奨です http://mevius.5ch.net/test/read.cgi/tech/1716759686/77
185: デフォルトの名無しさん [] 2024/06/16(日) 04:50:45.28 ID:/uiI2ckT >>183 C/C++/Rustすべて関数が呼び出し元に戻るときにスタックフレームは自動解放されます もしその破棄されたスタックフレーム上を指すポインタ(参照)がどこかに残っていた場合、 C/C++ではそのポインタ使用でそこをアクセスしてしまい気づかないバグや穴となるでしょう Rustではコンパイル時点でライフタイムエラーとなるため問題が起きないです http://mevius.5ch.net/test/read.cgi/tech/1716759686/185
247: デフォルトの名無しさん [sage] 2024/06/18(火) 19:09:22.28 ID:gzLiS43Q gccが頑張ってるくらい? http://mevius.5ch.net/test/read.cgi/tech/1716759686/247
297: デフォルトの名無しさん [sage] 2024/06/21(金) 09:59:00.28 ID:M8EEKVG+ rust playground はチョットマシなだけで 五十歩百歩目くそ鼻くそ http://mevius.5ch.net/test/read.cgi/tech/1716759686/297
505: デフォルトの名無しさん [sage] 2024/06/30(日) 15:34:51.28 ID:iQS10/oI >>497 エラー返しができていない ファイル一括読み込みでなくバッファリングすべき 本当の関数型だとセミコロンを使うのは邪道 http://mevius.5ch.net/test/read.cgi/tech/1716759686/505
650: デフォルトの名無しさん [sage] 2024/07/08(月) 10:06:04.28 ID:eiH/KN8v ワイの思う継承はenum_dispatch crate でやれるから困ったことないなぁ お前らの心の中の継承は知らんがw http://mevius.5ch.net/test/read.cgi/tech/1716759686/650
753: デフォルトの名無しさん [sage] 2024/07/11(木) 16:57:46.28 ID:acwFdQNv PartialOrdとPartialEqの一貫性とかLSPっぽいけど Substitution(置換)とはちょっと違うんだよな 無理矢理Sに当てるならSurrogation(代用)あたりか これをLSPに含めるかは定義重視vs意味重視で意見が分かれそう http://mevius.5ch.net/test/read.cgi/tech/1716759686/753
871: デフォルトの名無しさん [sage] 2024/07/15(月) 11:20:28.28 ID:qZQFNGwo ライブラリは.rlibまたは.rmetaで、これもELFやCOFFとは別物 ふむ http://mevius.5ch.net/test/read.cgi/tech/1716759686/871
947: デフォルトの名無しさん [sage] 2024/07/24(水) 00:15:33.28 ID:sAqPevwn dynを使えば型が何種類でもいけてトレイト境界も使えて楽だろうけどdynは重い Fizz Buzzのように2種類の型で済むならEitherを使う 色んなトレイトを透過的に対応してくれている use either::Either::{self, Left, Right}; type FizzBuzz = Either<usize, &'static str>; fn fizz_buzz_iter() -> impl Iterator<Item = FizzBuzz> { (1..).map(|int| match (int % 3, int % 5) { (0, 0) => Right("FizzBuzz"), (0, _) => Right("Fizz"), (_, 0) => Right("Buzz"), (_, _) => Left(int), }) } http://mevius.5ch.net/test/read.cgi/tech/1716759686/947
987: デフォルトの名無しさん [sage] 2024/07/30(火) 19:02:27.28 ID:dzXOiSL/ >>985 移動じゃなくてムーブね ここまでのレスで使われてる述語を踏襲すればいいよ http://mevius.5ch.net/test/read.cgi/tech/1716759686/987
988: デフォルトの名無しさん [sage] 2024/07/30(火) 20:13:33.28 ID:VUdF4pDl >>985 最適化のかかり具合でバグが消えたり現れたりする嫌なパターンだな http://mevius.5ch.net/test/read.cgi/tech/1716759686/988
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.722s*