Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

The number of strongly typed garbage collected compiled languages is surely shrinking. I can understand someone's disgust towards Java considering dwindling velocity in adding next-gen features and now sleeping in same bed as lawyer run Oracle. That pretty much had left C# in the arena until Go came on the scene. I was honestly hoping Go would give us head-to-head battle with C# but from initial looks Go pretty much feels like C# 1.0. No generics, no partial classes, no linq... C# 5.0 even has async and dynamic types. I like minimalism but these features are something we take for granted in languages that were created post-2000 era. So it all boils down to people choosing Go for singular reason: It's not from Microsoft! If licensing for C# wasn't a barrier and let's stretch our imagination by thinking C# was created by some other group in Google, would Go have a chance?


I'd take a second look at Go. It has a number of innovations over C# - and of course also a number of shortcomings. It's quite a different language, much more so than Java compared to C# (1.0 even).

A couple of things of the top of my head:

    * goroutines and efficient multithreading, both in terms of syntactical constructs and language implementation. Go doesn't have await/async because it fundamentally doesn't need them.
    * a type system that works without inheritance or subtypes but rather static duck typing, quite different from any other language
    * very memory efficient layout of data structures, internal pointers
    * small set of builtins with maps, slices, channels (that do have 'generic' types for their members) to reuse, rather than re-implement
    * comes with a well designed build and packaging system
    * comes with a very convincing standard library
It's worth taking a look. C# surely is a nice language, but it inherited many of the design flaws of Java, in particular with respect to the runtime and memory layout. Google does use Java internally a lot, Go gets uptake in spite of that competition.

Regardless of language merits, licensing C# can indeed be a problem, as can be the operational complexity of managing Windows running on hundreds, thousands, ten thousands etc of machines.


Did you ever actually use Go for a few minutes? Most of these bullet points are plain wrong.


Would you care to elaborate on this?


  * Their implementation sucks so much that most decently built
    concurrency implementation will beat Go-routines by a wide
    margin. Just have a look at all those people on the Go mailing
    list whining about the scheduler. Not even talking about the
    fact that building concurrency mechanisms into the language is
    plain stupid. We all saw how well that worked out in plenty of
    other languages before.
  * You know why pretty much no one uses structural typing?
    It's not because the “brilliant” designers of Go “invented” it,
    it's because most language designers realized that it is a poor
    idea before shipping the language. I think it is pretty telling
    that in languages which support both nominal and structural
    typing pretty much nobody is using structural typing.
  * I'm not seeing how a language which requires passing around
    void* pointers in every data-structure and casting at pretty
    much every corner can be considered memory efficient.
  * Hard-coding collection classes with special cased syntax into
    the language, so that everyone who needs to have something
    slightly different is completely fucked ... what is this? 1980?
  * Their packaging system is an unmitigated failure. Nuff' said.
  * Do they have a working Unicode implementation yet (I mean more
    than the “We use UTF8 for strings ... which is like 0.5% of
    what Unicode is about”)? What about (Big)Decimal? A working
    date/calendar abstraction which isn't a terrible joke?


> Their implementation sucks so much that most decently built concurrency implementation will beat Go-routines by a wide margin.

It's worth noting that they're aware of the schedulers problems, and Dmitry is working on a significant revamp. https://docs.google.com/document/d/1TTj4T2JO42uD5ID9e89oa0sL...


I'm interested in more details on the packaging system issues. (The biggest problem I see is lack of versioning, but there must be more.)


Take his criticism (not sure it even merits that title) with a grain of salt. Many people on HN and on the mailing list have sung the praises of Go's packaging system.


Yet another Go fanboy getting a bit defensive without having to add anything constructive?

If you actually checked your “claims” you would see that people are singing so many praises that the mailing list is continually filled with proposals to fix the worst parts of Go's packaging system.


Your post has no substance, other than to say some people on the mailing list don't like it. But other people on the mailing list do like it. So your post is meaningless and useless.

If you actually have problems with Go's packaging, and care about it enough to write as much as you have, why didn't you simply point out the flaws?


  > So your post is meaningless and useless.
Can I hand you some tissue so that you can get rid of your angry tears? That Go reality distortion field seems to be strong.

  > why didn't you simply point out the flaws?
Because there are already dozens of people who did that already?


> Because there are already dozens of people who did that already?

Do you really expect people to scour a newsgroup to find the meaning of your vague and unsubstantiated claims?

Someone could similarly say "Scala is an unmitigated failure of a language. If you want to know why, just track down its detractors on the Internet. There are dozens." Would you be impressed by that?


The C# and the Go cultures are very different. Culture is a big part of what makes programming languages different. Python and Ruby are basically the same language, but the culture of the users is very different and so the libraries and tool are quite different.

Go is from the unixy C culture, C# is from the Java/win32 culture and the libraries and tools reflect that.


Yep, Go would be hardly mentioned here if it wasn't being developed at Google.

Having said this, Go can be a nice replacement for many use cases one would use C for.


This isn't a fair statement. A better statement would be "Go would be hardly mentioned here if it weren't for all of the effort and documentation put into it." There is no doubt though that Go would not be moving along so quickly if it weren't for Google, but I think this is a case of 'correlation is not causation.' Dart comes from Google also, and while I see it from time to time here, nowhere like I do Go. Myself, I tend to trust and prefer Mozilla as a company more. That said, I find Rust not only unusable, but really too big of a language. I find Go the perfect mix of features I desire, and I cannot be the only one. So, I like Go as a community and as language and certainly not because Google is behind it.


Go seems to be gaining traction. Does it matter if that's because of where it came from? Maybe in a cultural, I-want-to-think-about-why-some-languages-get-adopted sense, sure, then it can matter. And I think it's worth having those discussions. But I get the impression that people think there's some absolute injustice in the idea that people are adopting a language, and it's partly because it's from Google. Consider:

"Yes, C would be hardly mentioned here if it wasn't being developed at Bell Labs."


> "Yes, C would be hardly mentioned here if it wasn't being developed at Bell Labs."

Fully agree, most likely if UNIX hadn't been adopted at important American universities, C wouldn't have spread as it did.


It matters if you try to count backwards from popularity to quality, by correcting for other factors.


The JVM is the best mainstream VM. We use it with Scala. Try it out.


Java as a platform is absolutely not dwindling in velocity. All that is happening is people are looking into alternative JVM languages like Scala, Clojure and Groovy. This trend has been happening for a while and is as much to do with Servlets/Spring as it is with Java the language. It has absolutely nothing to do with Oracle which has been a fantastic steward for the platform.

I don't think you actually have much understanding of enterprise environments otherwise you would know how ridiculous the idea that Go or C# is going to take over from Java anytime soon.


Sometimes less is more. Not implementing every fancy feature under the sun might be a bonus and keeps the language clean.

I know I never managed to like generics in Java. Don't know C#, though.


Java generics are an example on how not to do it, but it does not mean all generic implementations are like Java's.


Hope you write some further explanation for your statement, because so far it looks like part of this c++ vs. java flame.


- Type erasure. Going the .NET way would be a better approach on my opinion;

- Lack of type definitions. If it was possible to declare types in Java, the generic declarations wouldn't need to be so monstrous;

- The common co-variance/contra-variance issues with the generic types;

- Lack of support for builtins;

- No way to specialize generic algorithms for specific types


Languages like SML and OCaml are pretty clean, pretty simple and have an awesome parametric polymorphism system.


I'll put them on my "to be checked out" list.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: