func (obj *SomeType(Q, Z)) Foo(type K, V comparable)(key K, val V) (*OtherType(Q, V), error) {
...
}
... Lots of Infuriating & Silly Parentheses? func (obj *SomeType(Q, Z)) Foo(type K, V comparable)(key K, val V) (*OtherType(Q, V), error) {
...
}
... Lots of Infuriating & Silly Parentheses?Also note that generic methods are not allowed in the current design, only generic functions.
The new draft design ( https://go.googlesource.com/proposal/+/refs/heads/master/des... ) discusses both of these points. I recommend everyone who is interested in this topic read the design spec, ideally before commenting.
"Resolving that requires effectively unbounded lookahead. In general we strive to keep the Go parser simple."
It's totally fair to question the tradeoff - should having a simple parser outweigh the potential ergonomic benefit of <>? I don't know. The forum for this is probably the golang-nuts group.
I think "simpler" would have been a stronger argument. While using <> would make the parser more complex, I have a hard time seeing that making a meaningful performance difference in a compilation context. Maybe if you're parsing a lot of Go without actually compiling it, but that doesn't seem like a use case to optimize for.
Basically, unlimited look-ahead.
This reduces the amount of state that the parser has to carry around and makes the error messages for syntax errors easier to generate.
Languages that use <>'s for generics have to look at a larger amount of the code when parsing to work out what to do.
https://go.googlesource.com/proposal/+/refs/heads/master/des...
Hmmm ... not sure how I feel about that. Ok so my original example becomes this:
func (obj *SomeType) Foo(type K, V, Q comparable)(key K, val V) (*OtherType(Q, V), error) {
...
}
Which is only slightly better [without the generic type].Don't get me wrong, I'm a big fan of Go, but I'm kind of on the fence about generic types. I've made do with casting interfaces and type-casts for many years and I'm OK with it (honestly, glad to not be a C++ or Java programmer anymore).
No, you still don't understand. Methods can't have additional type parameters, only functions. This part is not allowed in your "example":
(type K, V, Q comparable)> Generic types can have methods. The receiver type of a method must declare the same number of type parameters as are declared in the receiver type's definition. They are declared without the type keyword or any constraint.
So my original example should have been:
func (obj *SomeType(K, V)) Foo(key K, val V) (*OtherType(K, V), error) {
...
}
(hopefully this is now correct!).I’m not accusing you of advocating Go’s adopting a different syntax for generics solely to be contrarian - but using angle-brackets for type-parameters and template-parameters is a proven technique with few downsides - and certainly not any that downsides that would be fixed by using any other syntax I’m aware-of.
(I had to write a lot of Go code in Notepad for a while in 2017 - never again)
Python is the worst, where dicts and sets both use {} and tuples and "grouping" both use (), each causing real problems.
Some of many possibilities:
⦅⦆«» ⟦⟧ ⟨⟩ ⟪⟫ ⟮⟯ ⟬⟭ ⌈⌉ ⌊⌋ ⦇⦈ ⦉⦊ ||
Yes, you need a way to type it on non specialized keyboards.
An easy way is is to type it as (( or [[ etc, and let the IDE convert it.
Especially in the context of Go that hasn't even managed to use anything other than parentheses in its func definition syntax. No language has saturated the bracket options that come with the standard US keyboard so much that it's worth bringing in characters that you need additional tooling to type.
If (), <>, {}, and [] aren't enough for a language, something has gone very wrong.
In Perl / / was used to bracket regrexs in C and many C languages /* */ is used to bracket comments.
I can already see a lot of edge cases
Most notably font support
I like ligatures and ide/editor support for them, but I'm not sure I like this
You read code 1000x more often than you write it, so a little extra effort for even a small readability benefit is worth it.
Most fonts have quite full Unicode support since many years.
I'm often disappointed in how reluctant programmers are to use modern technology. The public thinks we're on the cutting edge of advanced technology. If they only knew :)
Honestly, it's just common sense.
And even after typing in Spanish for five years, it's still objectively more annoying to write está (6 keypresses) vs esta (4 keypresses). And I'm always having to go back and correct the key sequence because I've written ´a instead of á.
Also, just today I saw someone use "⇸" (crossed out arrow) on HN and it was so tiny with HN's font that I had to zoom in to see what it was which only inhibited their message.
You have to consider this sort of overhead when making decisions about the glyphs you are going to impose upon everyone when designing a language.
I've seen pages and pages of bike-shedding over whether to use kebab-case over snake_case for a DSL because it's one less keypress to type a hyphen vs underscore.
I can appreciate your preference for those characters. It's nice how they can encode meaning in a single glyph where you would otherwise need multiple glyphs (like "!="). One solution that you can find people doing today are IDE plugins that simply rerender something like "->" as "→".
Seems like the best of all worlds. You get to work with higher level characters while the plaintext format remains in the most accessible common denominator.
This year mark my 30th year as a professional developer, but my first "program" was copied fro a magazine
10 PRINT CHR$(205.5+RND(1)); : GOTO 10
It generated random maze like structures in screen using two PETSCII symbolsI think everybody know this one liner here
So it's not symbols I don't like, it's the lack of ergonomics
My hands started hurting when I had to type a lot to write simple symbols like } that's why I switched to US layout and things have gone a lot better for my nuckles
What really surprises and disappoints me is how many people appoint themselves as engineers or computer scientists, but take for granted that their ideas are good and the rebuttals are "resistance to change" without even reading the most basic studies on the topic or testing their theories on the field.
Implement your idea, measure the results and then we'll discuss of why they didn't take off.
Because they won't, believe me.
There is a reason why I use font with the zero striked, otherwise capital O would look too similar.
What do you think of ‹‹ vs « ?
Do they really look different enough to be useful?
Cutting edge doesn't mean "stupid"
The rest of your post is a fair point, although I think you underestimate the value of plain ASCII that can be typed on a unassisted keyboard.
Or there's a bug in the IDE and all of a sudden you literally cannot type anymore?
(I'm not sure I'm convinced that using such symbols in a programming language is a good idea, of course, just that our current input tech is barely trying.)
Also, APL happened.
https://www.reddit.com/r/programming/comments/a9tb2/secret_h...
[* *]
[= =]
[/ /]
(* *)
(= =)
(/ /)
Just kidding, requiring specialized tooling to type isn't quite acceptable..