What I'm more interested in is the comparison between the cases of Go and Dart, which both are languages developed by Google.
Why Go is so much more successful (in the system programming domain) than Dart (in the web/mobile/desktop domains)? Many of the listed good choices (e.g. being developer-focused) can be (had been?) applied to Dart as well.
I'm planning to write a blog post with my experience with those two (I'm using Go full-time for 8+ years and Dart for Flutter for more than 3 years). Those two languages are on the opposite extremes for me (minimalistic vs packed-with-almost-every-feature-known). I use Dart because Flutter is amazing, and Flutter and Dart teams are closely cooperate to my knowledge. I still struggle from time to time to navigate over 100500+ ways to initialize things, or rewriting seemingly innocent map/filter/foreach loops into "normal" readable `for (var i := ...` loops, and generally trying to apply lessons of readability from Go to Dart code as well.
Also, I did a thought experiment a couple of years ago on how Flutter would look like if it was built on top of Go [1] (it doesn't capture all the surface of Flutter, but that was my level of involvement with Flutter by that time).
Anyway, thanks for reminding about idea of writing blog post on those two.
First Chrome was placing it as JavaScript replacement, which made its adoption a failure from other browser vendors, similar to what happened with PNaCL.
After the project's dimissal, it got rescued by AdWords team that had just migrated away from GWT into Dart, and surely wasn't willing to drop it on the floor.
Then Flutter kind of gave it a new purpose, and by then most of the original designers had left as they were against the new direction of strong typing, and I guess how everything was managed to start with.
They have found a place in Fuschia, yet the Android team is also quite keen in making ART run on top of Fuchsia, and it is no surprise the Jetpack Compose is Flutter in Kotlin.
Because Google announced that they will add Dart VM to Chrome, and web community's reaction was "Hell no, we've just got rid of VBScript from the Web Platform, and we don't want vendor-specific languages".
Google changed course to using Dart-to-JS cross-compilation instead, but their initial implementation added 700KB+ of boilerplate at a time when people debated whether 100KB jQuery is too big.
I think the issue was, what was dart useful for that JavaScript or typescript didn't already solve? You had a new language that needed a separate VM to execute that offered basically nothing that typescript/JavaScript didn't already offer. There was no compelling reason for it to exist apart from "just because" - I think that had typescript taken off a few years earlier then they'd probably not have bothered with dart.
Go brought something new that answered an issue developers were facing: easy concurrency in a high performance garbage-collected language that compiled to a single binary with no dependencies. C/c++ did not offer that, nor did java, nor did python. Go filled the gap in the market.
Not to turn this into a language debate, but I think it's worth pointing out that Dart is a completely new language that has a more succinct syntax and more sensible semantics than JavaScript. TypeScript is different in that it intentionally is just JavaScript with type annotations. That makes TypeScript easy to adopt but it also means it inherits a lot of JavaScript's flaws.
For example, in TypeScript you still have nonsense like "this.method = this.method.bind(this)" while in Dart, method tear-offs just work. In Dart it's trivial to implement classes with value semantics that can be used as keys in a Map or Set, which is basically impossible in JavaScript. And so on.
I think most people would agree that Dart is just a much better language than JavaScript or even TypeScript. So the succcess of TypeScript is best understood as building on JavaScript's existing popularity.
> I think that had typescript taken off a few years earlier then they'd probably not have bothered with dart.
I always suspected that Google's investment in Dart was related to the Oracle lawsuit over the use of the Java API in Android. Remember that Dart is also the language behind Google's cross-platform app framework Flutter, which was developed while the Oracle case was still in court.
I suspect that Google wanted to ensure that for Flutter they used a language and API that Google unambiguously owned the rights to, to avoid another debacle.
(Then a better question might be: why didn't they just use Go for Flutter? The technical answer could be that Go is more of a systems language like C/C++ and less suitable for UI code. In truth it might just be a common case of Google starting multiple indepent projects that accomplish vaguely the same goals.)
Go focused on trying to solve for particular pain points within a certain class of applications. Those who had those pains were quick to jump on it to solve their problems.
Dart tried to build a better mousetrap. While you might say it succeeded, it wasn't enough to get people away from their older and less fancy, but working, mousetraps.
Why Go is so much more successful (in the system programming domain) than Dart (in the web/mobile/desktop domains)? Many of the listed good choices (e.g. being developer-focused) can be (had been?) applied to Dart as well.