And as one overly anal person already pointed out - it is complement.

> On Nov 24, 2018, at 6:50 PM, robert engels <reng...@ix.netcom.com> wrote:
> 
> Although by the spec stating - sign extended - they are limiting Go to work 
> on 2’s compliment platforms… 
> 
>> On Nov 24, 2018, at 6:48 PM, robert engels <reng...@ix.netcom.com 
>> <mailto:reng...@ix.netcom.com>> wrote:
>> 
>> That is only the case if the platform uses 2’s compliment signed numbers - 
>> which is almost certainly the case, but doesn’t have to be...
>> 
>>> On Nov 24, 2018, at 6:42 PM, Dan Kortschak <dan.kortsc...@adelaide.edu.au 
>>> <mailto:dan.kortsc...@adelaide.edu.au>> wrote:
>>> 
>>> int and uint are the same size per the spec, so there is nothing to do
>>> (no sign extension and no subsequent truncation).
>>> 
>>> What happens in other languages is largely irrelevant here (golang-
>>> nuts).
>>> 
>>> On Sat, 2018-11-24 at 18:16 -0600, robert engels wrote:
>>>> This maybe true for Go, but not necessarily all languages. It might
>>>> be implemented as
>>>> 
>>>> result = original & 0x7FFFFFFF (for 32 bit int to uint)
>>>> 
>>>> it depends on how the language specifies the conversion will occur.
>>>> 
>>>> That being said, in Go the spec says:
>>>> For the conversion of non-constant numeric values, the following
>>>> rules apply:
>>>> 
>>>> When converting between integer types, if the value is a signed
>>>> integer, it is sign extended to implicit infinite precision;
>>>> otherwise it is zero extended. It is then truncated to fit in the
>>>> result type's size. For example, if v := uint16(0x10F0), then
>>>> uint32(int8(v)) == 0xFFFFFFF0. The conversion always yields a valid
>>>> value; there is no indication of overflow.
>>>> the compiler and platform might actually need to add the AND as
>>>> specified above, or other sign extension operations… on most
>>>> platforms, probably not since int and uint would be the same size.
>>>> The ambiguity with the above spec, is that a negative number will
>>>> become positive, or visa-verse - even though this is not technically
>>>> ‘overflow’, at least IMO.
>>>> 
>>>>> 
>>>>> On Nov 24, 2018, at 5:49 PM, 'Keith Randall' via golang-nuts <golan
>>>>> g-n...@googlegroups.com <mailto:g-n...@googlegroups.com>> wrote:
>>>>> 
>>>>> int<->uint conversions should never generate any machine code. They
>>>>> are free.
>>>>> 
>>>>> On Saturday, November 24, 2018 at 10:55:50 AM UTC-8, Andy Balholm
>>>>> wrote:
>>>>> There is nothing in the language spec that guarantees anything
>>>>> about performance. But if logic tells you that it should be a no-
>>>>> op, and examination of the generated code shows you that it is a
>>>>> no-op in the cases you tested, you can safely assume that it is not
>>>>> going to be an issue for your program’s performance.
>>>>> 
>>>>> Andy
>>>>> 
>>>>>> 
>>>>>> On Nov 24, 2018, at 8:45 AM, Ugorji Nwoke <ugo...@gmail.com 
>>>>>> <http://gmail.com/> <>>
>>>>>> wrote:
>>>>>> 
>>>>>> Thanks so much Silviu. I love this tool - I had seen it before,
>>>>>> but didn't realize it also supported go language. Thanks so much
>>>>>> for bringing it up - it should help me do more investigation on
>>>>>> my own faster.
>>>>>> 
>>>>>> I used it to compare the asm output, and I got the same thing as
>>>>>> when I did
>>>>>>    go build -gcflags "-S" num_conversion.go
>>>>>> 
>>>>>> i.e. it leads me to conclude, as I suspected, that conversion
>>>>>> from int to uint is free (no-op at runtime).
>>>>>> 
>>>>>> However, I get concerned that my proof may be insufficient, or
>>>>>> there may be other reason why the asm looks same, and that is why
>>>>>> I wanted a definitive answer from someone familiar with the
>>>>>> internals.
>>>>>> 
>>>>>> 
>>>>>> On Saturday, November 24, 2018 at 11:28:43 AM UTC-5, Silviu
>>>>>> Capota Mera wrote:
>>>>>> A very nice tool from Matt Godbolt (and team of volunteers): http
>>>>>> s://godbolt.org/z/4nt5cJ <s://godbolt.org/z/4nt5cJ> 
>>>>>> <https://godbolt.org/z/4nt5cJ <https://godbolt.org/z/4nt5cJ>>
>>>>>> 
>>>>>> You can switch compiler version (e.g. Go 1.4, 1.7, 1.9, 1.11,
>>>>>> tip, etc) and/or gccgo, take a look at variations, etc
>>>>>> 
>>>>>> On Saturday, 24 November 2018 11:07:51 UTC-5, Jan Mercl wrote:
>>>>>> On Sat, Nov 24, 2018 at 4:31 PM Ugorji Nwoke <ugo...@gmail.com 
>>>>>> <http://gmail.com/>
>>>>>> <>> wrote:
>>>>>> 
>>>>>>> 
>>>>>>> Jan, you and I have the same understanding i.e. float <-> int
>>>>>>> is obviously non-free, but I can't think of why int <-> uint
>>>>>>> will not be free. However, I want someone with knowledge of
>>>>>>> the
>>>>>>> compiler/runtime/codegeneration/SSA internals that can give me
>>>>>> a definitive answer.
>>>>>> 
>>>>>> Any correct compiler is an implementation of the language
>>>>>> specification. From the language specification it follows that
>>>>>> the compiler _may_ check that - for example - 42 != 314 or 278 ==
>>>>>> 278 while performing the 'uint' <-> 'int" conversion. It may also
>>>>>> try to factor M4170639287. The question is why to do so when
>>>>>> nothing of that is mandated by the language specification for a
>>>>>> correct implementation?
>>>>>> 
>>>>>> The next reasonable step is to assume Occam's razor is a thing.
>>>>>> 
>>>>>> --
>>>>>> -j
>>>>>> 
>>>>>> 
>>>>>> --
>>>>>> 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...@googlegroups.com 
>>>>>> <http://googlegroups.com/> <>.
>>>>>> For more options, visit https://groups.google.com/d/optout 
>>>>>> <https://groups.google.com/d/optout>
>>>>>> <https://groups.google.com/d/optout 
>>>>>> <https://groups.google.com/d/optout>>.
>>>>> 
>>>>> --
>>>>> 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 
>>>>> <mailto:golang-nuts+unsubscr...@googlegroups.com> <mailto:g
>>>>> olang-nuts+unsubscr...@googlegroups.com 
>>>>> <mailto:olang-nuts+unsubscr...@googlegroups.com>>.
>>>>> For more options, visit https://groups.google.com/d/optout 
>>>>> <https://groups.google.com/d/optout>
>>>>> <https://groups.google.com/d/optout <https://groups.google.com/d/optout>>.
>>> --
>>> CRICOS provider code 00123M
>>> 
>>> -- 
>>> 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 
>>> <mailto:golang-nuts+unsubscr...@googlegroups.com>.
>>> For more options, visit https://groups.google.com/d/optout 
>>> <https://groups.google.com/d/optout>.
>> 
>> 
>> -- 
>> 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 
>> <mailto:golang-nuts+unsubscr...@googlegroups.com>.
>> For more options, visit https://groups.google.com/d/optout 
>> <https://groups.google.com/d/optout>.
> 
> 
> -- 
> 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 
> <mailto:golang-nuts+unsubscr...@googlegroups.com>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

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