From 2d47ab6d6584b21aef9b655f93c92e838d3c593f Mon Sep 17 00:00:00 2001 From: Akulij Date: Wed, 19 Nov 2025 19:53:28 +0700 Subject: [PATCH] vault backup: 2025-11-19 19:53:28 --- 4.2/2.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/4.2/2.md b/4.2/2.md index e3f3db0..acf3046 100644 --- a/4.2/2.md +++ b/4.2/2.md @@ -1,21 +1,21 @@ - [ ] Умеет писать unsafe код и безопасные обёртки для него. -- [ ] Понимает причины UB и знает, как его не допустить. (откуда взялось, что значит и как может нанести вред работе программы) -- [ ] для автора - проверка ОРа квизами, включая примеры кода. +- [x] Понимает причины UB и знает, как его не допустить. (откуда взялось, что значит и как может нанести вред работе программы) ✅ 2025-11-19 +- [x] для автора - проверка ОРа квизами, включая примеры кода. ✅ 2025-11-19 - [ ] Умеет проектировать безопасный интерфейс для unsafe кода. -- [ ] Знает best practice для написания unsafe кода. -- [ ] Можно использовать примеры из third party крейтов. +- [x] Знает best practice для написания unsafe кода. ✅ 2025-11-19 +- [x] Можно использовать примеры из third party крейтов. ✅ 2025-11-19 - [x] Начать с проблемы, когда компилятор не может гарантировать безопасность по памяти (но без этого невозможно написать программу), возможно из ub ✅ 2025-11-19 - [x] Рассказать про причины ub ✅ 2025-11-19 - [x] Рассказать, чем является unsafe, ответственность на программисте, про ub (НЕ является избавлением от borrow checker) ✅ 2025-11-19 - [x] Рассказать про применение unsafe (взаимодействие с С, оптимизация (вспомнить небезопасную либу для бэкенда: rocket или actix), написание основы/базы языка) ✅ 2025-11-19 -- [ ] Определении функции unsafe если соблюдение инвариантов висит на пользователе (при написании такой функции смотреть - является ли сам интерфейс функции safe) -- [ ] примеры из third party +- [x] Определении функции unsafe если соблюдение инвариантов висит на пользователе (при написании такой функции смотреть - является ли сам интерфейс функции safe) ✅ 2025-11-19 +- [x] примеры из third party ✅ 2025-11-19 - [ ] Рассказать про бест практис при написании unsafe: - - [ ] Лучший unsafe - отсутствующий unsafe - - [ ] Уменьшение зоны unsafe (легче найти баг + проще просчитать ub) + - [x] Лучший unsafe - отсутствующий unsafe ✅ 2025-11-19 + - [x] Уменьшение зоны unsafe (легче найти баг + проще просчитать ub) ✅ 2025-11-19 - [x] Safety ✅ 2025-11-19 - - [ ] SAFETY + - [x] SAFETY ✅ 2025-11-19 - [x] assert_unsafe_precondition! ✅ 2025-11-19 - [ ] ... - [ ] Практика @@ -158,7 +158,7 @@ unsafe fn get_entities_at(entities: &mut [T], indices: [usize Для нашего примера это будет выглядеть так: ```rust /// Returns mutable references to many indices at once -/// Safety: +/// # Safety /// * indices do not overlap /// * indices are not out of bound of entities array unsafe fn get_entities_at(entities: &mut [T], indices: [usize; N]) -> [&mut T; N] { @@ -184,7 +184,7 @@ fn check_indicies_valid(indices: &[usize; N], len: usize) -> boo И добавим функцию ```rust /// Returns mutable references to many indices at once -/// Safety: +/// # Safety /// * indices do not overlap /// * indices are not out of bound of entities array unsafe fn get_entities_at(entities: &mut [T], indices: [usize; N]) -> [&mut T; N] {