dotnet/roslyn

Collection expressions can perform covariant conversion of ReadOnlySpan in emit

Open

#71.106 aperta il 5 dic 2023

Vedi su GitHub
 (6 commenti) (1 reazione) (1 assegnatario)C# (4257 fork)batch import
Area-CompilersCode Gen QualityFeature - Collection Expressionshelp wanted

Metriche repository

Star
 (20.414 star)
Metriche merge PR
 (Merge medio 6g 17h) (256 PR mergiate in 30 g)

Descrizione

The runtime doesn't provide a safe facility for covariant conversion of ReadOnlySpan, but it is supported to perform such conversions. If the compiler performed such conversions, it would enable more optimizations in scenarios like the following:

Span<Derived> span1 = ..., span2 = ...;
ReadOnlySpan<Base> spanBase1 = [..span1]; // emit as conversion to ReadOnlySpan<Base> then 'ToArray()'
ReadOnlySpan<Base> spanBase2 = [..span1, ..span2]; // emit as conversion then 'CopyTo()' the backing collection of 'spanBase2'

To start with, we are only going to perform ToArray and CopyTo optimizations in the case where the spread operator and the target collection have the same element type.

Guida contributor