symmetric signed types

bearophile bearophileHUGS at lycos.com
Thu Jan 23 17:44:08 PST 2014


Walter Bright:

> 1. Go determines the type of (e1 op e2) as the type of the 
> first operand.
>
>   http://golang.org/ref/spec#Arithmetic_operators
>
> I consider this not only surprising (as we expect + to be 
> commutative) but can lead to unexpected truncation, as in (byte 
> = byte + int32).

I don't know much about Go, but I have read some Go programs, and 
that comment looks suspicious. So I have created a little Go 
program:


package main
import ("fmt")
func main() {
     var x byte = 10;
     var y int = 1000;
     z := x + y
     fmt.Println(z)
}


If you don't have a Go compiler you can try some code here:
http://play.golang.org/

The result:
http://play.golang.org/p/iP20v0r566

It gives:
prog.go:6: invalid operation: x + y (mismatched types byte and 
int)

So despite what the docs say, it seems the two types need to be 
the same for the sum to work?

While this program compiles:


package main
import ("fmt")
func main() {
     var x byte = 10;
     var y int = 1000;
     z1 := int(x) + y
     fmt.Println(z1)
     z2 := x + byte(y)
     fmt.Println(z2)
}


And prints:
1010
242

Bye,
bearophile


More information about the Digitalmars-d mailing list