6 ms·
None with the same performance characteristics, ease of use, and ecosystem size. I'm reasonably competent with Rust, but sometimes I don't want to bash my head
by zinclozenge 5y ago
None with the same performance characteristics, ease of use, and ecosystem size. I'm reasonably competent with Rust, but sometimes I don't want to bash my head against the borrow checker or litter my code with copy/clone. Go hits a nice sweet spot, my main quibbles are that there's no native iterators/comprehensions or sum types with compiler checked exhaustive matching. With generics we can get libraries that allow for more functional style programming, and golangci-lint has a linter for exhaustiveness.
- kaba0 5y agoScala is pretty close to Go in terms of popularity and I would argue that it has a much bigger ecosystem due to the JVM. It is also pretty much a typed python in terms of ease of use, and the JVM has stellar performance — other than small running scripts, for many kind of workloads Java’s state of the art GC will have better throughput than Go’s.
- Thaxll 5y agoScala is on its way to die actually, I worked couple of years with lot of services in Scala, they were all replaced by regular Java or C# over the years, Scala missed the train and it's more and more difficult to find people that want to work with that language. It's a stagnant language that will not get more popular, it peaked.
- kaba0 5y agoIt just got a huge revamp with Scala 3, please do check it out if you hadn’t yet - it fixes some pain points while has many many exciting features, eg. can be null-safe with a single compiler flag (basically type T will not be able to represent a null, a java method that does return T will have a signature of T | Null). In great hands it can be insanely productive and well-maintainable, but of course I know that giving it to developers that look at the project more as a learning/experimenting thing can cause quite some damage due to the language’s strength.
- yawaramin 5y agoI understand not keeping up with it but 'it's on its way to die' is just spreading FUD. It's more popular than ever. Disney+, Lego, Canada Post, basically every large bank–plenty of people are using it and adoption is increasing.
- eweise 5y agoThey just released Scala 3 this this year so hardly stagnant. The community seems to promoting more pragmatic functional approaches recently which I think is going to make Scala much more popular in the future.
- bjt 5y ago> It's a stagnant language that will not get more popular, it peaked. I can't speak to whether it's "stagnant", but at least as a percentage of questions on Stack Overflow, the claim that "it peaked" checks out. The peak for Scala was late 2016. Go surpassed it in 2020. https://insights.stackoverflow.com/trends?tags=scala%2Cgo https://insights.stackoverflow.com/trends?tags=scala%2Cgo
- geodel 5y agoYou are right. Going by Google trends Scala is not only less popular then Go it is further going down when compared to Go [1] 1. https://trends.google.com/trends/explore?date=today%205-y&geo=US&q=%2Fm%2F091hdj,%2Fm%2F09gbxjr https://trends.google.com/trends/explore?date=today%205-y&ge...
- mhio 5y agoWhat metric do you use for popularity? I'm more involved in the systems side so I'm definitely over exposed to Go projects. I would have considered Scala to be at least an order of magnitude less "popular" than Go. Kafka is the only open source project in Scala I can recall running into but there's probably a whole enterprise world I don't see.
- yashap 5y agoFor open source projects, it’s very popular in the “big data” world. Kafka, as you mentioned, but also Spark, Flink, Summingbird, Scalding, etc. And yeah, it’s a pretty popular backend language at some large companies. Twitter, LinkedIn, Netflix, the Guardian, Starbucks, AirBnB, Coursera, AT&T, etc. all make significant use of Scala. Go is certainly bigger, but Scala has plenty of adoption too.
- kitd 5y agoKafka is currently undergoing a rewrite into java.
- geodel 5y agoIndeed. To add further it is also facing competition from Apache Pulsar and NATS. Not to forget Redpanda a Kafka rewrite in C++.
- agallego 5y agoa small note on redpanda. Is not a `rewrite`. It is an entire new storage engine, different consensus protocol, different on-disk format, different internal RPC, no external dependencies, ...., in fact when i started it it was using flatbuffers as the API. What we did later to make money is add a kafka-API translation layer, but in terms of code size, is a very small part. The way i'd recommend thinking about it is a new storage engine that is compatible w/ kafka clients. https://github.com/redpanda-data/redpanda/tree/dev/src/v/kafka https://github.com/redpanda-data/redpanda/tree/dev/src/v/kaf... - this is basically all the kafka-related code, the rest is net-new design.
- cardanome 5y agoOcaml. Insanely fast compiler. Great type system. Functional programming at its best but still relatively pragmatic and easy to mix in some imperative code if need be. It is a bit more complicated than Go and the ecosystem is maybe a bit more patchy but other than you will have a good time.
- int_19h 5y agoOcaml is not particularly fast, for a compiled language. Is Go really slower?
- chakkepolja 5y ago(not GP) >> fast compiler But yeah everything is fast at runtime as well when you coming from JS and python.
- feffe 5y agoThe compiler is fast in that is compiles code quickly, just as Go and the execution speed of produced programs are similar to Go (depending on what abstractions you use). It seems there are a bunch of languages in the fast but not quite as fast as C/C++ category: Java, C#, Go, OCaml, SBCL (Lisp), Haskell
- geodel 5y ago> and the ecosystem is maybe a bit more patchy.. Well that makes all the difference, if one is writing programs in professional capacity.
- zinclozenge 5y agoBelieve me, i'd love to use ocaml but the ecosystem isn't just "a bit more patchy" compared to go, unfortunately.
- SureshG 5y ago> None with the same performance characteristics, Most JVM languages (Kotlin/Scala/Clojure) including Java :) In fact kotlin/java has better peak performance than Go. Main advantage for go is the reduced memory footprint.
- Thaxll 5y ago> In fact kotlin/java has better peak performance than Go. Not really no.
- dgb23 5y agoSophisticated garbage collection and JIT have a very high ceiling. The CLR and the JVM are incredible technologies.
- ed25519FUUU 5y agoThe thing I hate about the JVM is that I'm always trying to tune it. So many options and nobs to turn. With Go I just run execute the program, no tuning necessary.
- jjtheblunt 5y ago> In fact kotlin/java has better peak performance than Go. Says what benchmark?
- kitd 5y agoThere are many benchmarks showing Java faster than Go. The trick is picking one that people agree is representative. It shouldn't be surprising though. "Peak performance" doesn't include start-up time, and ignores memory. If you discount both those, there's no reason that JITted native code wouldn't be faster than a runtime that includes goroutine scheduling.
- jjtheblunt 5y agounless goroutines aren't in use, which means the generated code probably matches what llvm and C would generate.
- yawaramin 5y agoRust isn't a functional programming language. You could try OCaml, it's kind of a halfway point between Go and Haskell.
- int_19h 5y agoRust has first-class functions. Not only that, but it also has immutability by default, and ADTs with pattern matching. If OCaml is functional, why wouldn't Rust be?
- chombier 5y agoBecause of lifetime of captured variables in closures, mostly. You can't really pass around functions freely like you would in Haskell/ML unless you start Box-ing/Rc-ing everything. But then it's not really idiomatic Rust anymore, IIUC.
- lmm 5y agoRust doesn't really have first-class functions - you can't take an arbitrary snippet of code and turn it into a function value, because sometimes it will no longer pass the borrow checker.
- yawaramin 5y agoWell, one big one is lack of tail call elimination. If you can't write even a simple tail-recursive algorithm in the language, it's not a functional programming language.
- zozbot234 5y agoA bit offtopic here, but it's a bit weird to see this argument that using .clone() in Rust is "littering" the code. The feature is there for a reason, and using it will still give you vastly more efficient code than in most other languages; quite possibly including Go.
- zinclozenge 5y agoSure it very possibly might outperform Go, and almost undoubtedly outperform python and ruby, but it might also make refactoring for further performance down the road very difficult. When I reach for Rust, it's because I want maximum performance right off the bat. Otherwise I'd just use go, or even java/c#.