top | item 45670075

(no title)

mwsherman | 4 months ago

In Go, string effectively serves as a read-only slice, if we are talking about bytes.

ReadOnlySpan<T> in C# is great! In my opinion, Go essentially designed in “span” from the start.

discuss

order

jasonthorsness|4 months ago

Yeah I think the C# team was definitely influenced by Go with their addition of Spans..

Interesting approach regarding using strings as containers for raw bytes, but when you create one over a []byte I believe it makes a copy almost always (always?) so you can’t get a zero-cost read-only view of the data to pass to other functions.

mwsherman|4 months ago

That’s true, converting in either direction will typically allocate. Which it must, semantically.

One can use unsafe for a zero-copy conversion, but now you are breaking the semantics: a string becomes mutable, because its underlying bytes are mutable.

Or! One can often handle strings and bytes interchangeably with generics: https://github.com/clipperhouse/stringish

pjmlp|4 months ago

Like everything else in Go, spans predate it for a few decades.

pjmlp|4 months ago

System languages from 1980's already had the span concept.

One way that you will find it is that they used to be called open arrays in some of them.