-You think a fusion of OO and functional programming is the way of the future
-Runtime tooling and advanced instrumentation support matter to you
-You like having first-class IDE support
-You want to work for the likes of Twitter/Foursquare/LinkedIn/Amazon
-Having tons of mature Java libraries available matters to you.
-You don't mind investing time to learn the language
Pick Go if: -Memory footprint matter to you (and you don't want to pick C)
-Startup time matters to you (and you don't want to pick C)
-You don't want to spend much time learning the language
-You like C-style error handling and aren't expecting something as expressive as a python or a ruby.
-You don't mind limited IDE support
-You want every post of yours to be voted up on HN regardless of contentPick Scala if:
-You find value in strong static assurances.
-You find value in generics.
-You want to learn functional programming, not 'functional' programming (and you should).
-You value succinctness.
Pick Go if: -Compile times matter (of course it does).
-You find value in easier deployments (at the cost of potentially more deployments).
-You don't want to learn D ;)Pick Scala if: all other things
Is there any clear evidence of better memory management in Go comparing to JVM?
But ask yourself this: do you work in a team or alone? One of the first sentences is:
"While highly effective, Scala is also a large language, and our experiences have taught us to practice great care in its application."
And thats the biggest issue - Scala is a bit like the JVMs C++, you need capable programmers in order to not fuck it up, because it contains every paradigm ever invented.
Go on the other hand is much simpler, and I like it for that - there is great value in simplicity.
Also, when speaking of simplicity, I like languages with conceptual elegance. Scheme is simple too and that's a rather interesting example. You see, Scheme is homoiconic and has macros and continuations, a combination so powerful that you can easily build on top and efficiently use any pattern or paradigm under the sun. Also, being a Lisp, most builtins can be reimplemented in Scheme.
Now that's simple. What you're describing is actually easyness which is a very different notion. The main difference is that easiness is relative and depends on someone's own biases or limitations. The problem of course is that easy can overnight turn into hard.
Ever tried doing FP in Go? Ever thought about implementing your own data-structures? Try it.
I have written both Scala and C++ at my day jobs and I would say that Scala certainly does generally remind me of C++ and specifically in its proliferation of language features. I also know of several others with similar experience and opinion on this matter.
Also, I completely agree with the rest of your original post (the parts RE: Scheme, Go, & simplicity).
Sometimes the result is Scala source files that almost appear to be written in different languages, or lots of little libraries each with their own wacky DSLs that require a major investment of time to comprehend just to accomplish something that should be trivial.
These sorts of abuses you really don't see in Clojure even though it's just as possible in that language. Of course this is all based just on my experience, YMMV.
But even Clojure is syntactically heavy compared to Racket or CL. But with good reason.
A powerful and expressive language takes effort, possibly even years, to become expert in. I'm not sure that making trivial things trivial is part of the plan. There are more appropriate languages for that.
Most of the cruft in Scala is due to its support of O-O and its attempt to modernize it. Similarly, C++ is a superset of C rather than a complete break from it (and often, in the field, you find people using it as if it were 'C with classes').
Also, the O-O side of Scheme is certainly more powerful than F#'s O-O side; however, overall F# is at least as powerful of a language (and yet it's also much cleaner/internally consistent).
[Also, it takes only one counter-example to disprove 'all those who say that Scala resembles C++ have never worked with either' (which was my original intent here)].
My team has just the opposite experience. Scala offers a lot of structure and discipline that you can take advantage of without being an expert, and it is a short time to ramp up to idiomatic usage relative to other languages. In fact, this is one of its benefits. By following some fairly simple guidelines, you can avoid making a mess. This has not been my observation with imperative programmers picking up a new imperative language.
Because of the easy-to-achieve discipline, Scala is ideal for teams in my opinion.
I think Scala.js is going to be huge. Just alone for that I would choose Scala over Go.
But I certainly do not believe that Scala.js has a reasonable chance of having an impact alike GWT or such; maybe it can get close to (ruby) Opal or consorts, though. The main selling point of Scala still is Akka, and, at least in the web-dev world, the Play framework, I guess.
I am not using Akka, I am not using Play, I only use Scala because it is currently the language I can express my thoughts in the most elegant way, together with its industrial strength ecco system AND BECAUSE IT COMPILES TO JAVASCRIPT, TOO!!!
GWT never convinced me, Java is less productive than Javascript, so what is the point (except for legacy Java programmers ...).
Scalatra - Scala's Sinatra
Blue Eyes - appears defunct but good example of pure asynchronous framework
Lift - strong built-in security, Netty integration wip.
Probably a couple more I'm forgetting.
Scala is to Ruby what Go is to Python.
Python:C++::Go:Scala