Реализация небезопасного трейта
// Copyright 2026 Google LLC
// SPDX-License-Identifier: Apache-2.0
pub struct LogicalClock {
inner: std::sync::Arc<std::sync::atomic::AtomicUsize>,
}
// ...
impl Send for LogicalClock {}
impl Sync for LogicalClock {}
«Прежде чем смотреть на код, стоит убедиться, что все знают, что такое трейт. Может ли кто-нибудь объяснить трейты остальным участникам курса?»
- «Трейты часто описывают как способ создать общее поведение. Если думать о трейтах как об общем поведении, внимание сосредотачивается на синтаксисе методов и их сигнатурах».
- «Есть и более глубокий способ думать о трейтах: как о наборах требований. Такой взгляд подчёркивает общую семантику реализующих типов».
«Может ли кто-нибудь объяснить, что такое трейты Send и Sync?»
- Если никто не может
- «Send и Sync относятся к конкурентности. Деталей много, но в общих чертах: типы
Sendможно передавать между потоками по значению, а типыSyncдолжны разделяться по ссылке». - Чтобы безопасно разделять данные между потоками, нужно соблюдать множество правил. Компилятор не может проверить эти правила, поэтому автор кода должен взять на себя ответственность за их соблюдение.
Arcреализует Send и Sync, поэтому и для нашегоclockбезопасно реализовать их тоже.- Может быть полезно заметить, что слово atomic происходит из древнегреческого и означает «неделимый» или «цельный», а не современный английский смысл «крошечная частица».
- «Send и Sync относятся к конкурентности. Деталей много, но в общих чертах: типы