diff --git a/compiler/src/dotty/tools/dotc/core/Definitions.scala b/compiler/src/dotty/tools/dotc/core/Definitions.scala index 030f14a73f1c..79fa0e94e06a 100644 --- a/compiler/src/dotty/tools/dotc/core/Definitions.scala +++ b/compiler/src/dotty/tools/dotc/core/Definitions.scala @@ -2112,8 +2112,8 @@ class Definitions { */ @tu lazy val ccExperimental: Set[Symbol] = Set( CapsModule, CapsModule.moduleClass, PureClass, - Caps_Capability, // TODO: Remove when Capability is stabilized - Caps_Classifier, Caps_SharedCapability, Caps_Control, Caps_ExclusiveCapability, Caps_Mutable, Caps_Read, + /* Caps_Classifier, Caps_SharedCapability, Caps_Control, -- already stable */ + Caps_ExclusiveCapability, Caps_Mutable, Caps_Read, RequiresCapabilityAnnot, captureRoot, Caps_CapSet, Caps_ContainsTrait, Caps_ContainsModule, Caps_ContainsModule.moduleClass, ConsumeAnnot, UseAnnot, ReserveAnnot, diff --git a/library/src/scala/caps/package.scala b/library/src/scala/caps/package.scala index 66f29ef174b1..ff029fbbae9c 100644 --- a/library/src/scala/caps/package.scala +++ b/library/src/scala/caps/package.scala @@ -22,16 +22,18 @@ import annotation.{experimental, compileTimeOnly, retainsCap} * But even without capture checking, extending this trait can be useful for documenting the intended purpose * of a class. * - * Capability has exactly two subtraits: Shared and Exclusive. + * Capability has exactly two subtraits: [[SharedCapability Shared]] and [[ExclusiveCapability Exclusive]]. */ -@experimental sealed trait Capability extends Any /** A marker trait for classifier capabilities that can appear in `.only` * qualifiers. Capability classes directly extending `Classifier` are treated - * as classifier capbilities + * as classifier capbilities. + * + * [[Classifier]] has a formal meaning when + * [[scala.language.experimental.captureChecking Capture Checking]] + * is turned on. It should not be used outside of capture checking. */ -@experimental trait Classifier /** The universal capture reference. */ @@ -39,15 +41,24 @@ trait Classifier object cap extends Capability /** Marker trait for capabilities that can be safely shared in a concurrent context. + * + * [[SharedCapability]] has a formal meaning when + * [[scala.language.experimental.captureChecking Capture Checking]] + * is turned on. * During separation checking, shared capabilities are not taken into account. */ -@experimental trait SharedCapability extends Capability, Classifier @experimental type Shared = SharedCapability -/** Marker trait for exclusive capabilities that are separation-checked +/** Marker trait for capabilities that should only be used by one concurrent process + * at a given time. For example, write-access to a shared mutable buffer. + * + * [[ExclusiveCapability]] has a formal meaning when + * [[scala.language.experimental.captureChecking Capture Checking]] + * is turned on. + * During separation checking, exclusive usage of marked capabilities will be enforced. */ @experimental trait ExclusiveCapability extends Capability, Classifier @@ -55,10 +66,14 @@ trait ExclusiveCapability extends Capability, Classifier @experimental type Exclusive = ExclusiveCapability -/** Base trait for capabilities that capture some continuation or return point in - * the stack. Examples are exceptions, labels, Async, CanThrow. +/** Marker trait for capabilities that capture some continuation or return point in + * the stack. Examples are exceptions, [[scala.util.boundary.Label labels]], [[scala.CanThrow CanThrow]] + * or Async contexts. + * + * [[Control]] has a formal meaning when + * [[scala.language.experimental.captureChecking Capture Checking]] + * is turned on. */ -@experimental trait Control extends SharedCapability, Classifier /** Marker trait for classes with methods that require an exclusive reference. */ diff --git a/project/MiMaFilters.scala b/project/MiMaFilters.scala index 0d93e5ea2942..7e97b1a3b8c4 100644 --- a/project/MiMaFilters.scala +++ b/project/MiMaFilters.scala @@ -28,6 +28,10 @@ object MiMaFilters { ProblemFilters.exclude[MissingClassProblem]("scala.annotation.internal.onlyCapability"), ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language#experimental.separationChecking"), ProblemFilters.exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$experimental$separationChecking$"), + ProblemFilters.exclude[MissingClassProblem]("scala.caps.Capability"), + ProblemFilters.exclude[MissingClassProblem]("scala.caps.Classifier"), + ProblemFilters.exclude[MissingClassProblem]("scala.caps.SharedCapability"), + ProblemFilters.exclude[MissingClassProblem]("scala.caps.Control"), ), // Additions since last LTS diff --git a/tests/run-tasty-inspector/stdlibExperimentalDefinitions.scala b/tests/run-tasty-inspector/stdlibExperimentalDefinitions.scala index 4b356ffdada1..9effb37d5278 100644 --- a/tests/run-tasty-inspector/stdlibExperimentalDefinitions.scala +++ b/tests/run-tasty-inspector/stdlibExperimentalDefinitions.scala @@ -32,17 +32,13 @@ val experimentalDefinitionInLibrary = Set( "scala.annotation.retainsCap", "scala.Pure", "scala.caps.CapSet", - "scala.caps.Capability", - "scala.caps.Classifier", "scala.caps.Contains", "scala.caps.Contains$", "scala.caps.Contains$.containsImpl", "scala.caps.Exists", - "scala.caps.SharedCapability", "scala.caps.ExclusiveCapability", "scala.caps.Mutable", "scala.caps.Read", - "scala.caps.Control", "scala.caps.consume", "scala.caps.internal", "scala.caps.internal$",