Э
Arc<RwLock<Cell<T>>>, то твой impl — это UB.Size: a a a
Э
Arc<RwLock<Cell<T>>>, то твой impl — это UB.m
m
Arc<RwLock<Cell<T>>>, то твой impl — это UB.SegmentsCache с которым легко работатьAV
#[derive(Debug)]
struct SegmentsStore {}
#[derive(Clone, Debug)]
struct SegmentsCache {
store: std::sync::Arc<parking_lot::RwLock<SegmentsStore>>
}
unsafe impl Send for SegmentsCache {}
unsafe impl Sync for SegmentsCache {}
impl SegmentsCache {
fn new() -> Self {
Self { store: std::sync::Arc::new(parking_lot::RwLock::new(SegmentsStore {})) }
}
fn add(&self) { unimplemented!() }
fn remove(&self) { unimplemented!() }
}
parking_lot::RwLock в асинхронном коде лучше использовать tokio::sync::RwLock, потому что первый блочит таску. Так можно дедлок получить (я получал)m
parking_lot::RwLock в асинхронном коде лучше использовать tokio::sync::RwLock, потому что первый блочит таску. Так можно дедлок получить (я получал)m
E

b
E
Э
E
lib.rs, если либа.pub mod schema;
pub mod models;
Э
pub?E
pub?Э
E
Э
Z
nameof, что бы получить имя переменной как строковую константу при компиляции?E
Э
nameof, что бы получить имя переменной как строковую константу при компиляции?stringify!(x), но он тебе и выдаст что ты в него положишь (то есть "x").b