9 ms·
Rust addresses all of these problems. It's memory safe through compile-time reference counting and borrow checking (not garbage collected), and it has exception
by kyllo 12y ago
Rust addresses all of these problems. It's memory safe through compile-time reference counting and borrow checking (not garbage collected), and it has exceptions and generics. It also has a more powerful type system with type inference.
Having tried out both Go and Rust I don't see any reason to prefer Go, at least once Rust has a 1.0 release, which is supposed to happen the next 2-3 months.
Both languages were designed to replace C++, but only Rust has the features to actually succeed at that, IMHO.
- higherpurpose 12y agoI think at this point Go is more of a replacement for Java than C++.
- kyllo 12y agoPerhaps, but the problem is, with no generics or exceptions, it might just be too low-level and not expressive enough to really be a suitable Java replacement.
- agmcleod 12y agoYeah i just see Go as an alternative for web technologies, where Rust is much more system level focused. I could be wrong, but that seems to be the direction I see with Rust.
- naasking 12y ago> Yeah i just see Go as an alternative for web technologies I don't see any web technology Go could replace. Not even dynamically typed langauges.
- vec 12y agoI'm starting to use Go as an arguably better Node. Very fast, easy (pseudo)concurrency, relatively nice HTTP capabilities in the stdlib. It wouldn't be my first choice for building a full library, but it works well as an internal component in a service oriented architecture or a background worker for a queuing system.
- sagichmal 12y agoGo is very uncontroversially a better Node. It also predates Node.
- spion 12y agoDepends on what you mean by "better". Better language? Not really, if you want types TypeScript is a much better option. With node+typescript+react you can get end-to-end typechecked code with no FFI involved - thats really, really cool. Better concurrency? Oh yeah, definitely. Better core libraries? Yes, by far. Better package ecosystem and management? Definitely not.
- sagichmal 12y ago> Better language? Not really, There is no conceivable universe in which the expression "JavaScript is a better language than Go" evaluates to true.
- kyllo 12y ago...except for in JavaScript itself: ~$ node > "JavaScript is a better language than Go" ? true : false true > "JavaScript" > "Go" true
- spion 12y agoUnless/until Go gets generics, I stand by my statement. A horrible type system that severely limits expressiveness is worse than no type system. Even TypeScript's type system is miles ahead compared to the one in Go.
- general_failure 12y agoI doubt it. The node ecosystem is second to none.
- deleted 12y ago[deleted]
- 12y ago
- cft 12y agoPrime candidate is any highly scalable TCP socket server. Currently, there's no better language for it
- pjmlp 12y agoErlang? That switch that is routing your phone calls?
- kasey_junk 12y agoAlmost certainly not TCP socket based nor built on commodity hardware.
- coldtea 12y agoIt hasn't rooted anybody's phone calls for a long time. Even Ericsson doesn't use Erlang based phone routing anymore...
- rdtsc 12y agoErlang is a better for it. WhatsApp runs their infrastructure on it. Can easily do millions of concurrent TCP connections on a single machine.
- tptacek 12y agoWe could not have handled the load at Microcorruption, emulating CPU state for thousands of concurrent users, using Ruby --- which remains the front-end language for the site. We could easily have done so in Java, but we'd be in Java's concurrency model, which is much more difficult to reason about.
- kyllo 12y agoSo, you did it in Go instead of Java, right? I think this is exactly what people mean when they say Go is more of a replacement for Java than it is a replacement for C++: In the sense that when Ruby and Python become too slow, people normally reach for Java, but now they have Go as an alternative option, with a better concurrency model than Java's.
- threeseed 12y agoThere are alternatives to Java's concurrency model whilst still staying on the JVM: http://docs.paralleluniverse.co/quasar/ http://docs.paralleluniverse.co/quasar/
- pjmlp 12y agoGiven how the JVM ecosystem looks like and what is planned for Java 9+ in terms of mechanical sympathy, I have my doubts.
- tptacek 12y agoPeople love to say this, but the observation falls apart quickly under scrutiny. People working in Java are doing so to retain access to the JVM and to the zillion libraries built on it. The JVM with its ecosystem is a colossal asset for Java; one of the greatest in all of commercial software development. (I say this as someone who does not enjoy Java). Meanwhile: Golang neatly fills in a sweet spot just "below" Python and Ruby, where finer-grained control of memory and more predictable performance characteristics are required, but bare-metal performance isn't. That sweet spot actually describes a huge fraction of all the use cases for C/C++ in Internet software. So this is a meme I'd like to see die. It somehow manages to simultaneously get Golang, Java, and C++ wrong all at the same time. The only way to make it worse would be to work in some kind of Lisp comparison, based on Golang's parsimony with parenthesis.
- threeseed 12y agoCouldn't agree more. Anyone who thinks Go will ever be a replacement for Java is frankly clueless about enterprise software development. Go has almost non-existant integration with enterprise systems e.g. SAP, Hadoop. It lacks operational management capabilities e.g. JMX. And seriously the range of libraries on the JVM covers pretty much everything e.g. banking/finance use cases. And concerningly there is not a single reasonably sized Go project to get an understanding of how it works with 20, 50, 100 or 500+ developers working on the same codebase.
- kasey_junk 12y agoI think when people claim that Go is a replacement for Java, what they really mean is "Go has similar performance characteristics as the JVM and also doesn't require manual memory management". Anyone who has ever worked in enterprise software can tell you, Go is (currently) exceptionally poorly suited for that style of development. I don't think that is an accident though. I think there is at least the implication that enterprise software development models and architectures are flawed at the core. Go seems to be designed from the start to prevent you from developing that way. I may be reading more into the Go culture than I should, and I certainly don't think that there is proof that enterprise software can't be successful, but Go clearly steers you into building small, self contained servers that do one thing well and can go without change for a long time.
- rakoo 12y ago> Both languages were designed to replace C++ AFAIU Go was designed to replace C++/Java/Python as _the_ language to use at Google, not as languages themselves. Which is why there is so much focus on simplicity, tooling, productivity (like compile speed and easy deployment). Criticizing Go for not having enough features is missing the whole point: Go was created in part because C++ has too many features. To my understanding, it was built for systems creators, not for programmers; it was built as a goto language who have to write program that is both efficient and simple to write and maintain. OTOH, I do see Rust as a C++ replacement, which makes it complementary to Go's focus (sadly it seems that D is lost in the middle, though...)
- doorhammer 12y agoThis is the feeling I get. I don't write much Go (I'm just now getting into it) but all of the major features I hear about seem to be directed at creating code and projects that are tractable at "Google Scale". Everything has been designed for massive teams, from fast compile times, or having a standard formatting scheme, to choosing syntactically insignificant whitespace (specifically the podcast mentioned finding instances where python snippets were embedded in another language somewhere which would shoot the whitespace to crap). The language being dead simple also seems to be to that end, with things like removing ternary operators or not having the pre-increment being smaller sacrifices, and no generics being a larger one. All in all it seems like the underlying philosophy of Go is focused on Google specific context and engineering goals, and it's a happy accident when they work out well for programmers in the general case, whereas something like C++ or Rust isn't catering to those specific parameters (though they're obviously capable of working in that role, perhaps just not in the "ideal" way that the Go language maintainers would prefer).
- threeseed 12y ago> Everything has been designed for massive teams Weird. Because I see the opposite. Go would be fantastic for microservices or targeted applications. But features like exceptions are critical when you have 100+ developers spread across the world working on the one codebase and you want to ensure consistent error handling behaviour across the application.
- steveklabnik 12y agoWhy do you say Rust has exceptions? We have fail!(), which does roughly the same thing as Go's panic(). So much so that we decided to rename it to panic!().
- kyllo 12y agoYou're right. I must have misunderstood something I read.
- steveklabnik 12y agoCool :)
- kyllo 12y agoAhh, I remember what it was. I saw a code snippet like this: let input = reader.read_line().ok().expect("Failed to read line"); And I thought "Cool, Rust has exceptions!" I'm probably too used to thinking in Python. Or maybe I'm just dyslexic and I read "expect()" as "except()". Either way, your comment prompted me to dig into it further and find out how Rust actually handles errors. So, thanks!
- steveklabnik 12y agoThanks for elaborating! I wrote that line in the docs, actually. I wonder if I should add an explicit note about exceptions not being a thing.