Revert "Support Rust returning -> Result<_, String>
(#296)"
#310
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This reverts commit c45a38c, which added a type assertion to mark
RustStr
asError
in the generated swift code. The motivation for that change was to allow rust functions that returnResult<_, String>
to throw an error when called from swift. The critical change was the following:However, that change was unsound, because swift's
Error
inherits fromSendable
, so the above code impliesRustStrRef: Sendable
. Furthermore, becauseRustStr
andRustStrRefMut
inherit fromRustStrRef
, that change marked all three asSendable
.Swift requires
Sendable
types to either be immutable or mutable in a thread-safe way.RustStr
does not fulfill those requirements, because it's a pointer to a mutable heap allocation. Swift 6 added a lint for this, which means that the above code refuses to compile. But even if we make it compile, adding@unchecked Sendable
to work around the lint, the types still don't fulfill the required semantics, so it's a thread safety issue. Therefore, the best thing is just to back out the change.Fixes #309. For a better approach to thread-safety and
Sendable
, see #150.