On Thursday, October 20, 2016 at 9:58:46 PM UTC+8, T L wrote: > > > > On Thursday, October 20, 2016 at 7:31:25 PM UTC+8, Val wrote: >> >> I like Alan's "useful definition" of a semantically reference type, which >> involves shared mutable state. >> >> About the string type, I also like the implementation detail that >> >> var string t = s >> >> is O(1) in memory and running time, i.e. it happens internally to "copy >> the reference, not the bytes" : see https://play.golang.org/p/p-PD_yOnw6 >> It usually doesn't make much of a difference because most strings are >> short, and also they are not the best data structure to manipulate data >> (unlike []byte). But I take this implementation detail into account when I >> want to optimize code, especially to reduce the need for memory allocation. >> > > So, comparing two long same stings at the first time may spend much time? >
It looks golang 1.7.1 doesn't release one copy of underlying data after comparings: https://play.golang.org/p/Lu9FZ9iqn6 https://play.golang.org/p/-wE2oUGce1 > > It looks strings are much like interfaces here: > https://play.golang.org/p/fEzxkzLfS2 > > >> >> On Wednesday, October 19, 2016 at 6:44:26 PM UTC+2, adon...@google.com >> wrote: >>> >>> >>> Jan is write that the term does not appear in the spec, but I think it's >>> possible to come up with a useful definition of a reference type that >>> applies to all ALGOL-like languages: a reference type is one whose values >>> indirectly refer to mutable state. So, pointers are obviously references, >>> as are slices, maps, and channels. But a string is not a reference >>> because, although internally it contains a pointer, you cannot mutate the >>> array of bytes to which it refers. Functions may be references, because a >>> closure may refer to lexically enclosing variables. Structs and arrays are >>> references if their elements contain references. An interface value is a >>> reference if its payload contains a references. >>> >>> The essence of a reference is that copying one creates a new alias for >>> its underlying state, and changes made via one alias are visible to all >>> others. This definition is not absolute: a pointer to an immutable data >>> structure, for example, can be considered to have "value" (non-reference) >>> semantics since although it points to a variable, that variable can never >>> be changed. >>> >>> >>> -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.