On Thursday, October 20, 2016 at 10:34:41 PM UTC+8, T L wrote:
>
>
>
> 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
>

filed an issue: 
https://github.com/golang/go/issues/17526#issuecomment-255142005
and closed by the lighting issue closer. :)
 

>
>  
>
>>
>> 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