unsafe トレイトを実装する
// 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を実装しているため、このクロックも同様に安全です。_atomic_という語は、現代英語における『小さな粒子』という意味ではなく、古代ギリシャ語に由来する『不可分』や『全体』という意味を持つことを指摘すると役に立つかもしれません。
- 「