in reply to Re: Does Go steal from Perl? :-)
in thread Does Go steal from Perl? :-)

There are some dangerous misconceptions in this analysis.

Go is a strongly and explicitly typed language. There is no such thing as an undefined value and there is certainly no such thing as a numeric context. Instead, every variable has a well-defined, fixed type, specified (or inferred) when the variable is declared, and every type has a well-defined zero value, that is, any variable not explicitly assigned to will be initialized to the zero value of its type.

Let's look at the first line then:

In turn, the counts[input.Text()]++ line can be analyzed as follows:

It is likely that the authors of go recognized the code in question as a common idiom and wrote the language standard with it in mind, but the details explained above make it clear that the underlying concepts are rather different from those of Perl.

Replies are listed 'Best First'.
Re^3: Does Go steal from Perl? :-)
by RonW (Parson) on Aug 06, 2018 at 22:14 UTC
    There is no such thing as an undefined value and there is certainly no such thing as a numeric context

    Actually, even strongly typed languages have a numeric context - and other contexts. In strongly typed languages like Go, the context is used (at compile time) to enforce that a variable or value of a specific type is used.

    Also, being strongly typed does not automatically exclude the concept of "undefined value". "undefined" is a sentinel that is reserved and predefined by the language. Many "purists" mistakenly equate undefined with uninitialized. While uninitialized implies undefined, the reverse need not be true. Like "NaN" (not a number) is useful, having undefined as a reserved, predefined representation of a sentinel can also be useful. Otherwise, you have to decide on a value to use as a sentinel, then hope that value never appears in your data.*

    Unfortunately, the way Perl uses undefined contributes to the confusion between uninitialized and undefined. It would have been better for Perl to have a flag for uninitialized as well as undefined. At least Perl has a test for undefined. Off hand, I don't recall any other languages that provide a test for undefined.

    ---

    * While NaN could be used as a sentinel, it's mathematical definition is an unrepresentable value, which is different from an undefined value.