dotnet/roslyn

Collection expressions can perform covariant conversion of ReadOnlySpan in emit

開放

#71,106 建立於 2023年12月5日

 (6 則留言) (1 個反應) (1 位負責人)C# (4,257 個分叉)batch import
Area-CompilersCode Gen QualityFeature - Collection Expressionshelp wanted

倉庫指標

星標
 (20,414 顆星)
PR 合併指標
 (PR 指標待抓取)

描述

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.

貢獻者指南