[過去ログ] Rust part24 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
19: 2024/05/29(水)22:46:32.28 ID:b7HyT2Iv(1) AAS
unsafeはRust外のFFI/API境界でのやむを得ない出現か
unsafeを使うことで効率的かつ安全なパターンになる時のいすれかだが
後者のパターンは特定のプログラムから切り離してsafeなインターフェースを提供する汎用ライブラリに閉じ込めるのが好ましく
標準ライブラリはそのようにして出来ている
40: 2024/06/03(月)15:47:20.28 ID:8wxJn/St(1) AAS
>>38
>本質的に unsafe
良いキーワード出た、深掘りしてくれ

これとか
github.com/tokio-rs/io-uring

io_uringが本質的にunsafeだとでも思ってるのかな?
58: 2024/06/05(水)19:11:15.28 ID:ubKPmxXH(1) AAS
>>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)); // アドレスが一致
77: 2024/06/08(土)13:06:19.28 ID:nAguSD5l(1) AAS
パニックさせるということはNoneかどうかをチェックしているということ
そしてパニック用のコードもそこに含まれるということ
そのため高速化がシビアなケースではunwrap_unchecked()が使われている
unsafeなので確実な監視対象となる点でむしろ好ましいケースもありうる
とはいえ特殊な場合を除き非推奨です
185: 2024/06/16(日)04:50:45.28 ID:/uiI2ckT(1) AAS
>>183
C/C++/Rustすべて関数が呼び出し元に戻るときにスタックフレームは自動解放されます
もしその破棄されたスタックフレーム上を指すポインタ(参照)がどこかに残っていた場合、
C/C++ではそのポインタ使用でそこをアクセスしてしまい気づかないバグや穴となるでしょう
Rustではコンパイル時点でライフタイムエラーとなるため問題が起きないです
247: 2024/06/18(火)19:09:22.28 ID:gzLiS43Q(1) AAS
gccが頑張ってるくらい?
297: 2024/06/21(金)09:59:00.28 ID:M8EEKVG+(1/3) AAS
rust playground はチョットマシなだけで
五十歩百歩目くそ鼻くそ
505: 2024/06/30(日)15:34:51.28 ID:iQS10/oI(1) AAS
>>497
エラー返しができていない
ファイル一括読み込みでなくバッファリングすべき
本当の関数型だとセミコロンを使うのは邪道
650: 2024/07/08(月)10:06:04.28 ID:eiH/KN8v(1) AAS
ワイの思う継承はenum_dispatch crate でやれるから困ったことないなぁ
お前らの心の中の継承は知らんがw
753
(1): 2024/07/11(木)16:57:46.28 ID:acwFdQNv(1) AAS
PartialOrdとPartialEqの一貫性とかLSPっぽいけど
Substitution(置換)とはちょっと違うんだよな
無理矢理Sに当てるならSurrogation(代用)あたりか
これをLSPに含めるかは定義重視vs意味重視で意見が分かれそう
871: 2024/07/15(月)11:20:28.28 ID:qZQFNGwo(2/2) AAS
ライブラリは.rlibまたは.rmetaで、これもELFやCOFFとは別物
ふむ
947: 2024/07/24(水)00:15:33.28 ID:sAqPevwn(1) AAS
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),
 })
}
987
(1): 2024/07/30(火)19:02:27.28 ID:dzXOiSL/(1) AAS
>>985
移動じゃなくてムーブね
ここまでのレスで使われてる述語を踏襲すればいいよ
988
(1): 2024/07/30(火)20:13:33.28 ID:VUdF4pDl(1) AAS
>>985
最適化のかかり具合でバグが消えたり現れたりする嫌なパターンだな
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.054s