7 ms·
Rust for Clojurists
- scribu 11y agoPreviously: https://news.ycombinator.com/item?id=9250020 https://news.ycombinator.com/item?id=9250020 I thought it wasn't possible to submit the exact same URL twice.
- dagw 11y agoThere's a timeout of after which point you can submit a URL again.
- edem 11y agoThey call themselves "clojurians" if I recall it right.
- pygy_ 11y agoThis is a good introduction to Rust, regardless of your Clojure background (I read a few articles about it when it was trending on HN, but never wrote a line of Clojure).
- JBiserkov 11y ago>Rust is statically typed. The upside is, you will curse it at compile-time instead of at runtime. The downside is, "exploratory programming" means exploring how to convince the compiler to let you try an idea.
- alfiedotwtf 11y agoFor me, yes you will curse a lot at compile time. But the upside is that stupid, preventable programming errors (which are responsible for a majority of security vulnerabilites) are stopped at compile time, not at segfault time.
- steveklabnik 11y agoWe've also found that people generally struggle at first, but at some point, you internalize the rules, and then they click, and you don't fight all that much anymore.
- jamwt 11y agoYes, the first few weeks of Rust, I wanted to strangle the borrow checker. Now, it seldom gets into the way b/c it's a seamless part of my thinking when I'm writing Rust. I rarely hear from it because I wrote/structured things the right way the first time. This has had a huge impact on pushing my productivity in Rust back up toward, while not Python-ish levels, at least golang-ish levels.
- lambdaelite 11y ago> Rust’s strengths are Clojure’s weaknesses, and vice-versa. Rust isn’t as expressive or interoperable, and its concurrency story isn’t as complete. That said, it’s much better for performance or safety critical needs, and it can be embedded inside other programs or on very limited hardware. I find this hard to believe. Is anyone actually using Rust for a safety-critical application?
- jamwt 11y agoDepends on what you mean by safety. "People may die" safety, no; but "data may be lost, existential risk to business" safety, yes. Dropbox is writing a block storage engine in it.
- lambdaelite 11y agoI go by what I thought was the accepted definition, which is a failure or error presenting a risk for temporary or permanent harm to people. Financial risk like data loss would fall under mission critical.
- discreteevent 11y agoA lot of certified safe systems are written in C++. I mean the ones that control the machine that could kill you. Response time is often a critical factor in safe systems. Also languages aren't as important as we would like then to be. Proof isn't used much for example because proofs are too difficult to review. Other techniques are more important like review, redundancy and testing. Safe systems tend to be more about boring old software engineering than computer science.
- lambdaelite 11y agoI agree, the choice of programming language is one of the less important parts of the SDLC. In the case of Rust for SC work, as the linked article alludes to, what doesn't make sense to me is that there is no industrial-grade tooling or support software. It seems like an ill-informed statement. As to proofs, I thought some level of formal proof was required at SIL4?
- mej10 11y agoI write Clojure every day and love it. I'm interested in learning Rust, but I'd like to learn it via a project that I couldn't do effectively in Clojure. Any ideas?
- grayrest 11y agoThere aren't that many things you can't do in Clojure, the main place Rust has an edge is in efficiency. I plan on doing an Avro implementation but other projects (mostly work-related) have a higher priority. In terms of larger projects, the Servo guys always seem to encourage people learning Rust to get involved. One of the projects I'm most interested in is Frank McSherry's timely/differental dataflow repos. I wanted a Rust implementation of Naiad when I first read the paper so I was quite pleased to see one of the authors do an implementation, even if it doesn't seem to be a full time pursuit. [1] https://github.com/frankmcsherry/timely-dataflow/ https://github.com/frankmcsherry/timely-dataflow/ Most first-rust-projects that are announced on reddit/discourse seem to be games (Piston), simple web apps, raytracers, or datastructures.
- nickbauman 11y agoI love Clojure but it's unsuitable for realtime problems because of GC. For example, a programmable audio synthesizer. Audio signal processing has to be realtime or else it can't sync with the music playing. Rust may not be suitable for that either, but it seems like it's much closer to being able to do that than Clojure will be anytime soon.
- grayrest 11y agoIt's not something I've explored or really care to pursue, but I've sat though at least a half dozen talks on audio synthesis in Clojure including one by Rich himself. They do signal generation in Clojure that feeds data into another system that does the real-time portion. I agree that Clojure isn't suited to hard real time systems and it's not hard to come up with drawbacks to the above approach but you just happened to pick an example that a lot of people in the Clojure community seem to care about.
- bkeroack 11y ago"You're in an industry reaping disproportionate benefit from loose money policies, leading to a trend-chasing culture of overpaid nerds making web apps." This is how software engineers undervalue themselves and damage their own profession. You will never see doctors or lawyers write a statement like that about themselves. The line about "loose money" is laughable to anyone who's ever actually tried to raise funding.
- nickbauman 11y agoAgree. But there is an element of truth to it. And that same element can be applied to doctors and lawyers. Probably especially lawyers. Doctors and lawyers don't fundraise for themselves, either. They don't need to.
- stcredzero 11y agoYou will never see doctors or lawyers write a statement like that about themselves. Really? I've often heard doctors and lawyers engage in a little self-aware self parody.
- reitzensteinm 11y agoJust because you found it hard doesn't disprove the statement. It could be harder still without said loose money.
- kyllo 11y agoIt's a joke ok? And have you never heard a lawyer joke before? A lot of lawyers laugh at them too. This part was funnier though: Many people try to compare Rust to Go, but this is flawed. Go is an ancient board game that emphasizes strategy. Rust is more appropriately compared to Chess, a board game focused on low-level tactics.
- moonchrome 11y agoI have this crazy idea that you could build Clojure on Rust the same way Clojure sits on top of JVM right now and it could provide you with some interesting benefits. First of all Rust doesn't implement a GC but it has very precise memory management semantics which means integrating in to a GC should be possible and safe. I believe Clojure immutable data structures would allow you to (theoretically) build a fast/simplified GC because immutable data has some very nice properties : * no cycles except trough reference types which are explicitly marked - this means you never need to scan old generation to collect the new generation * data is immutable which means copying can be done in parallel * mutable references are explicitly marked and isolated which means you could have a very minimal pause to update references And Rust could safely encode all those requirements in it's type system to make the interop safe. No need to sprinkle write barriers all over the place, localized and isolated mutable references (you can modify the update semantics and track them easily), minimal pause times, parallel collection, etc. I think there are other interesting things you could do, for example Clojure is pretty static for a dynamically typed language and protocols map nicely to traits I wonder if you could somehow remove the dynamic typing and just have compile time type inference figure out the types (requiring explicit types when the system can't infer the types) - this would allow you to send Clojure down to LLVM along with Rust. Or maybe you could have an interpreter for the truly dynamic stuff - but then you'd need to figure out how to export metadata. Also I'm sure that the only sane/safe way to do it would be to restrict the kinds of objects and that would require serious thinking too.
- stcredzero 11y agoI have this crazy idea that you could build Clojure on Rust the same way Clojure sits on top of JVM right now and it could provide you with some interesting benefits. If you read some of the design docs and articles, you'll find that Clojure is designed to be a "hosted" language from the ground up. It would be a challenge to implement some of Clojure's dynamic features. You could very well do a Clojure-like language which has a different approach to being functional. Clojure is very Lisp-y in that it's actually a dynamic runtime fronted by a language that makes it look functional.
- tsmarsh 11y agoI had similar thoughts but wanted to take it a step further and just have a GC less Clojure built on Rust. You would have to do things like nest functions inside of (ns), you couldn't have (def) but this is all before I've spent any real hammock time on it. If you get started it would be fun to follow / contribute to.