Live data from Hacker News

Why I'm not very excited about Go

lazypython.blogspot.com

11–20 of 37 posts

Re: Why I'm not very excited about Go

#11
post #9

I honestly don't get what the point of Go is. Why not D? Why not Modula3? There is nothing at all compelling in the feature set. Just look at the crap they put in for the built-in concurrency primitives: http://golang.org/doc/go_mem.html So we're back to CSP. Welcome to the 1960s.

1960s?

C. A. R. Hoare, ``Communicating Sequential Processes,'' Communications of the ACM 21(8) (August 1978), 666-677.

Re: Why I'm not very excited about Go

#12

The first major mistake was using a C derived syntax Personally, I'm not that interested in the particulars of indentation/block delimiting. I'm much more interested in what one can do with blocks. This has much more bearing on the power of a programming language. If this is the 1st issue discussed, it's a poor portent for the rest of the article. The next mistake is having a separate declaration and assignment opera…

"It's my understanding that one can use "goroutines" to implement your own rather powerful control structures. I'm not sure one really needs exceptions if you have goroutines, channels, and multiple return values. On the other hand, there are very compelling reasons for not having exceptions, given goroutines and channels."

The "goroutines" are just threads. They're not useful for building control structures. Unless you have continuations/a reified control stack or program in a monadic style (which would essentially be CPS in this case), you cannot "fake" exceptions.

Re: Why I'm not very excited about Go

#13
post #11
post #9

I honestly don't get what the point of Go is. Why not D? Why not Modula3? There is nothing at all compelling in the feature set. Just look at the crap they put in for the built-in concurrency primitives: http://golang.org/doc/go_mem.html So we're back to CSP. Welcome to the 1960s.

1960s? C. A. R. Hoare, ``Communicating Sequential Processes,'' Communications of the ACM 21(8) (August 1978), 666-677.

Oops. I always assumed Hoare published in the 60s after I found out the factoid that CSP is (one of?) the most cited papers in CS.

Re: Why I'm not very excited about Go

#14
post #4

The first major mistake was using a C derived syntax Personally, I'm not that interested in the particulars of indentation/block delimiting. I'm much more interested in what one can do with blocks. This has much more bearing on the power of a programming language. If this is the 1st issue discussed, it's a poor portent for the rest of the article. The next mistake is having a separate declaration and assignment opera…

"I'm not sure one really needs exceptions if you have goroutines, channels, and multiple return values. On the other hand, there are very compelling reasons for not having exceptions, given goroutines and channels." I continually find exception handling to be a huge source of frustration; especially Java's checked exceptions. If I explicitly test for something in my method before calling another method, should I stil…

"there are very compelling reasons for not having exceptions, given goroutines and channels"

This confuses me I would have thought the opposite would be true. The goroutine/channel concept seems Erlang like to me. Erlang uses exceptions, if a process crashes an exception is thrown to its parent which can then act appropriately. How does Go handle this, i.e. if a goroutine crashes who gets informed and how?

Re: Why I'm not very excited about Go

#15
post #3

He seems to be criticizing Go for not being Python. My understanding is that Go is designed with an obsessive need for speed and concurrency in mind. It's a little silly to compare it to Python without accounting for that.

programming languages influence how you think about programming to such a degree that it's difficult to reason objectively about them.

it's rare for me to watch long videos, because they are information-poor for the time investment, but i watched rob pike talk for an hour about go this evening. a lot of it is really interesting, but a lot of things about the syntax made me think: ow, that's going to be painful for me if it becomes successful.

rob's talk: http://www.youtube.com/watch?v=rKnDgT73v8s

Re: Why I'm not very excited about Go

#16
Sometimes, criticizing a programming language sounds like saying Japanese sucks because it's not German.

I feel (never have written a line of code with it) Go is not particularly expressive - when you read someone else's code it's not obvious what is being done. What you see is how cleverly it's being done. The language has to hit the sweet spot between these two extremes - making the how obvious by hiding the what and showing the what by hiding the how. Python is in this sweet spot. Go doesn't seem so.

Perhaps this is a problem with Go programmers that will be ironed out eventually.

And as for concurrency having its own syntax, I am not sure. I would love (in Python) to have a concurrent list comprehension that spreads the work between as many processors as there are available. OTOH, it could be implemented as a method of generator expressions with semantics like "with this generator, do 10 values in advance".

Hmmm...

Too bad we are in a feature moratorium...

Re: Why I'm not very excited about Go

#17
post #3

He seems to be criticizing Go for not being Python. My understanding is that Go is designed with an obsessive need for speed and concurrency in mind. It's a little silly to compare it to Python without accounting for that.

designed with ... speed and concurrency in mind

I won't argue with the speed part, but I feel the concurrency support is a bit weak. Go routines, locks and channels don't seem enough to me for a language that was designed with concurrency in mind.

Hell, if thats all it takes, I would argue that Python 2.6, with its multiprocessing module, is designed for concurrency. Now, I do think that these features are an improvement over C and C++, but they seem to fall a bit short of more modern languages.

Re: Why I'm not very excited about Go

#18
post #9

I honestly don't get what the point of Go is. Why not D? Why not Modula3? There is nothing at all compelling in the feature set. Just look at the crap they put in for the built-in concurrency primitives: http://golang.org/doc/go_mem.html So we're back to CSP. Welcome to the 1960s.

My thoughts exactly, as I stated here: http://news.ycombinator.com/item?id=937765

Re: Why I'm not very excited about Go

#19
post #5

Constructs like concurrency should not be granted their own syntax, especially when they can be cleanly implemented using the other constructs of a language, look at the C library libtask as an example. See the paper by Hans Boehm from PLDI 2005, "Threads Cannot Be Implemented as a Library": http://www.hpl.hp.com/techreports/2004/HPL-2004-209.pdf The abstract explains the argument: In many environments, multi-threade…

I'm not a big fan of Java, but one of its good points is that threads are part of the language and their behaviour is predicatable across implementations.

Re: Why I'm not very excited about Go

#20
post #12

The first major mistake was using a C derived syntax Personally, I'm not that interested in the particulars of indentation/block delimiting. I'm much more interested in what one can do with blocks. This has much more bearing on the power of a programming language. If this is the 1st issue discussed, it's a poor portent for the rest of the article. The next mistake is having a separate declaration and assignment opera…

"It's my understanding that one can use "goroutines" to implement your own rather powerful control structures. I'm not sure one really needs exceptions if you have goroutines, channels, and multiple return values. On the other hand, there are very compelling reasons for not having exceptions, given goroutines and channels." The "goroutines" are just threads. They're not useful for building control structures. Unless…

I'm not talking about "faking" exceptions. I'm talking about just not using them. Instead of "catching" exceptions down (up? In my debugger, it's down) the stack, you can just detect errors and send something down a channel. If you can conveniently send the current function's pointer, or better yet, the current context, you can do much of what you'd use exceptions for.
Post reply on HN