Hi everyone. The language workgroup has decided to accept SE-0392: Custom Actor Executors after the second round of review, which ran from April 7...17, 2023. During the second review:
- Participants raised questions about how this feature's potential role in inhibiting actor reentrancy, for code where allowing reentrance is not desired. The language workgroup agrees with the proposal authors that, while that is an important future direction, it is not this proposal's problem to solve.
- There was some discussion about the naming of the
preconditionIsolated
,assertIsolated
, andassumeIsolated
APIs. Althoughprecondition
is not a verb, the language workgroup believes the naming association withprecondition()
andassert()
is important to underline that they have analogous behavior in whether they check or not in debug or release builds.assumeIsolated
doesn't have as clear of a precedent, but there wasn't a clearly better alternative, and the proposed name seems acceptable as is. - There was some concern about
UnownedJob
s unsafety, and questions as to whether its variation ofrunSynchronously
and other APIs should haveunsafe
in the name to make the potential for undefined behavior more apparent. AlthoughUnownedJob
unfortunately doesn't haveUnsafe
in the type name (and it can't be added because of existing ABI constraints), the language workgroup believes the type itself should be seen as inherently unsafe, and like other fundamentally unsafe types such asUnmanaged
, it doesn't need to have that unsafety reiterated on every method name. Also, although SE-0392 doesn't formally deprecateUnownedJob
yet, theExecutorJob
type will be more prominent, which is safe and uses noncopyability to enforce safety, and developers will be encouraged to use it overUnownedJob
as much as possible. When the expressivity of noncopyable types reaches the point that most uses ofUnownedJob
can be avoided, then we would like to see it formally deprecated.
Thank you to everyone who participated in both rounds of review!