Qiita 7 - キータぞ、来たぞ、キータだぞー (768レス)
上下前次1-新
抽出解除 レス栞
275(4): 2025/10/10(金)12:28 ID:ckTDD7bx(3/7) AAS
最適化のなしかありかで挙動の変わる言語があるらしいけどそういうのは最悪。
fn main() {
let mut sum: i8 = 0;
let mut num: i8;
num = 100;
sum += num;
num = -10;
省7
277: 2025/10/10(金)12:56 ID:BIOy5Wv+(1) AAS
>>275
debug modeとrelease modeの違い
標準状態ではdebug modeで動作
実行時コストをかけて様々な検出をしてくれる
release modeでは明示的な実行時コスト指定ex. checked_add()などがある時のみ
293: 2025/10/12(日)12:59 ID:EE9svh1n(1/2) AAS
> Rust?
> 関係ないだろ
>>275からの話の流れが理解できない人かな
294: 2025/10/12(日)19:07 ID:txsY3oX4(1/2) AAS
>>275
このRustプログラムが最適化あり(リリースビルド)/最適化なし(デバッグビルド)で挙動が変わる理由は、i8型の符号付き整数オーバーフローの扱い方が状況によって異なるためです
最適化なし(デバッグビルド)
sum += numで加算の結果がi8の範囲(-128~127)を超えてしまうと、panicになるため意図した出力が得られず、エラーが発生します
最適化あり(リリースビルド)
オーバーフローのチェックが省略されて二の補数によるラップアラウンド(桁あふれの結果として範囲内に収める計算)が行われます
307: 2025/10/13(月)22:59 ID:CEh/Jf9d(1) AAS
> 配列アクセスでの範囲チェックはメモリ安全性の一つであり必須事項
オーバーフローチェックをやんなくて良い理由なんてないし。
> コンパイラが範囲内であると判断できれば最適化で安全にチェックをなくすことが可能
それはオーバーフローチェックも同様。>>275のコードなんてコンパイル時にオーバーフローするか判定できるわけだし。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.029s