Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Реализация небезопасного трейта

// 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 происходит из древнегреческого и означает «неделимый» или «цельный», а не современный английский смысл «крошечная частица».