Hacker News new | ask | show | jobs
by kevinfat 1571 days ago
So another way of saying this is consider the space of languages where

* control over memory use and layout (in contrast java is a pig over memory usage)

* some kind of easy way to use multicore (goroutines with channels or something else)

* speed, good cpu utilization

* garbage collected for ease of use

How many mainstream languages actually fit these criteria when Go came out? None? And how many fit these criteria now?

2 comments

Go was definitely ahead of the curve on a few things.

I'd argue C# was there (or very very close). C# has had value types (and fine-grained memory layout) since the beginning, reified generics since .NET 2.0, and also (lesser-known fact) raw pointer support (inside `unsafe {}` blocks much like Rust's approach). This was all motivated by interoperability with native code (mostly Win32 or other C-like ABIs & COM).

In 2009, the concurrency paradigm in .NET was more like promises and not quite as slick as goroutines. async/await wasn't born until 2012.

It wasn't on your list, but I'll toss in another point that works in favor of your original claim. ;) The main C# project also wasn't TRULY multi-platform until 2014.

To be fair Java has made some strides in memory usage. GraalVM reduces it a lot and with Valhalla (and to some degree Loom) it should be more competitive on that front (and others) with other languages.
I'd like to add the recent addition of ZGC as a massive benefit the JVM. Pause times always measured in microseconds regardless of heap size. No other GC:ed language has that capability as far as I know.