Replace BytesLikeAttribute usage with IBufferProtocol in builtins #987
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.
There is no reduction in data copy with this change, just not using
[BytesLike]inBuiltin. The encoding detection and parsing machinery requires aContentProvider, with an underlyingStreamso to useMemoryStreamasStream, data in a regular .NET byte array is needed.However, it is possible to avoid data copying by replacing
MemoryStreamwith a different implementation of aStreamthat usesIPythonBufferas the backing store. As an exercise I implemented that approach too, which is now available at commit 446e741. In the end, however, I thought that such approach would be an overkill: it introduces two new classesPythonBufferStreamandBufferProtocolContentProviderjust for the sake of avoiding a data copy for some non-typical (I assume) usages ofeval,exec, andcompile(I assume the typical bytes-like argument would bebytesorSystem.Array[System.Byte]). So probably not worth the extra complexity. In any case, it is there, if the solution in this PR is not acceptable.