-
Notifications
You must be signed in to change notification settings - Fork 4.2k
Closed
Description
Proposal issue: dotnet/csharplang#7905
Speclet: https://github.com/dotnet/csharplang/blob/main/proposals/csharp-14.0/first-class-span-types.md
Label: https://github.com/dotnet/roslyn/labels/New%20Feature%20-%20First-class%20Span%20Types
Feature branch: https://github.com/dotnet/roslyn/tree/features/FirstClassSpan
- conversions
- based on language version
- conversions:
- from
T[]toSpan<U> - from
T[]toReadOnlySpan<U> - from
Span<T>toReadOnlySpan<U> - from
ReadOnlySpan<T>toReadOnlySpan<U> - from
stringtoReadOnlySpan<U>
- from
- implicit conversions between the above where the conversion from
TtoUis:- no conversion
- identity conversion
- reference conversion
- non-reference conversion
- user-defined conversion
- explicit conversions between the above where the conversion from
TtoUis:- see implicit conversions
- implicit and explicit conversions from the reverse of the above are disallowed (see
FirstClassSpanTests.*_Opposite*) - span conversions are standard implicit conversions (see
FirstClassSpanTests.*_ThroughUserImplicit) - implicit conversions for extension method receiver
- not considered for extension receiver in method group
- limited co-variance from
ReadOnlySpan<T>toReadOnlySpan<U> - conversions to
params {ReadOnly}Span<T>(seeFirstClassSpanTests.*_Params*) - no span conversion with
ref,ref readonly,inmodifiers - no span conversion from multi-dimensional arrays
- method group parameter and return type conversions (disallowed) (see
FirstClassSpanTests.*_MethodGroup*)
- pattern matching ignores span conversions
- nullable analysis of element types
- ref safety of implicit and explicit conversions (see
FirstClassSpanTests.*_RefSafety) - null coalesce expressions (see
FirstClassSpanTests.*_Coalesce) - conversions in expression trees (see
FirstClassSpanTests.*_ExpressionTree*) -
Span<T>andReadOnlySpan<T>recognized by fully-qualified name- must be
ref struct - multiple definitions
- retargeted span types
- must be
- code generation:
- uses well-known runtime helpers
- missing well-known runtime helpers
- overload resolution: based on language version
- overload resolution: better conversion from expression (see
FirstClassSpanTests.OverloadResolution_*)- implicit span conversion and identity conversion
- implicit span conversion for both:
-
Span<T>andReadOnlySpan<U> -
ReadOnlySpan<T>andReadOnlySpan<U>
-
- implicit span conversion and array variance:
{ReadOnly}Span<T>andU[] - implicit span conversion and implicit reference conversion:
{ReadOnly}Span<T>andIEnumerable<U> - implicit span conversion and user-defined conversion
- extension method receiver (see
FirstClassSpanTests.OverloadResolution_*_ExtensionMethodReceiver*) -
params(seeFirstClassSpanTests.OverloadResolution_*_Params*)
- type inference: (see
FirstClassSpanTests.TypeInference_*)- lower-bound inference from
T[]arg to{ReadOnly}Span<U> - lower-bound inference from
Span<T>arg toReadOnlySpan<U> - exact inference from
T[]arg to{ReadOnly}Span<U> - exact inference from
Span<T>arg toReadOnlySpan<U>
- lower-bound inference from
- semantic model:
- implicit conversion
- explicit conversion
-
Conversion.IsSpan { get; }
- public API review: API:
Conversion.IsSpan#74738 - document breaking changes
- IDE:
- simplify cast
- build dotnet/runtime
- build Visual Studio
- update test plan
Reactions are currently unavailable