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.

Reply via email to