vault backup: 2025-11-19 19:53:28

This commit is contained in:
Akulij 2025-11-19 19:53:28 +07:00
parent 0f4128df21
commit 2d47ab6d65

View File

@ -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<T, const N: usize>(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<T, const N: usize>(entities: &mut [T], indices: [usize; N]) -> [&mut T; N] {
@ -184,7 +184,7 @@ fn check_indicies_valid<const N: usize>(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<T, const N: usize>(entities: &mut [T], indices: [usize; N]) -> [&mut T; N] {