Hacker News new | ask | show | jobs
The impossible case of pitching rust in a web dev shop (flakm.github.io)
21 points by WilliamHurst 1367 days ago
4 comments

Rust in a web dev shop would be a huge premature optimzation smell for me.

Most public web apps are expected to be up pretty much all of the time, which today, means cloud hosting and horizontally scalable architecture. In such a setup, I don't see how squeezing every last drop of performance is worth it. When I can just change a number and get more instances, choosing the language with higher cognitive load is going reduce any cost savings due to lower resource usage.

Doing something as mundane as writing text to a socket just doesn't need to perform all that well. Developer effort costs more than the CPU/memory.

Performance isn't Rust's only feature. I would say it isn't even its most important one.

I've written websites with Rust simply because it's a sane modern language with few "gotchas" and a type system and borrowing system that allows you to eliminate huge classes of bugs (not just memory errors!)

That said I think the Rust web ecosystem is not super mature (especially client side) and most web frameworks use `async` which is one of the sketchiest parts of Rust IMO. So I don't think it would be entirely unreasonable to use something else. Especially Typescript, for the SSR/isomorphic apps.

How does this compare to let's say Java, which has both type-safety and a mature web ecosystem?
Java's type safety is far far weaker than Rust's and it doesn't have the borrowing system, so you don't get the "if it compiles it works" experience you do in Rust and (so I'm told) Haskell.

It does have a very mature server side web ecosystem so it's a perfectly reasonable option. I've written Java web servers before and it was fine.

I wouldn't use it for client side though (a la GWT). Debugging nightmare.

Fair enough.

I guess what's implicit in my attitude is that I think Rust introduces cognitive load that other (especially garbage-collected) languages do. There has to be enough of a win gotten to offset that. I used performance as the most likely reason I could think of.

I keep looking for something really special for writing web applications using rust. Is there something on the horizon? It seems like rust on the server side is an easy decision but I'm unclear if there is a way rust could replace nodejs as the isomorphic application language on both server and browser.

Clojure and ClojureScript was such an interesting way to bring lisp into the browser and seemed really revolutionary. And without really limitations on what you could build. Where is the rust version of that?

Thanks, this was very informative.

I found some other alternatives, like Perseus. Do you have thoughts on it?

https://framesurge.sh/perseus/en-US/comparisons

I am interested more in it because it mentions a lack of VirtualDOM, like SolidJS (so I assume it is more like Svelte than React).

The bummer is that the main reasons I would want my company to adopt Rust are 1) the toolchain and 2) the type system (we're on Python, which has the worst story imaginable for both of these). But most of the pain in learning and using Rust comes from its performance characteristics, which we mostly don't need

Such is life

In that case I think Go is a better language for your shop.

It does not have the performance of rust, but on the other hand it is almost as easy to learn as python.

It has the tooling story figured out, but its type system leaves a lot to be desired
A lot? I mean, it's not rust but it's not that bad.
Rust gives me pause because it seems like yet another golden hammer language with bad developer ergonomics
It's definitely an upgrade over Python. I remember learning Go and saw "type Foo struct { ... }" and was sure this meant the language had algebraic data types and pattern matching and all that fun stuff. It didn't. It was fine.
Agree to disagree
I would say "the irrelevant case.."

Where Rust excels is in safety when using concurrency. Most web apps and APIs have a single thread used per request. I've also used async/futures that work fine without ownership modelling.

As for performance switching from Ruby/Python to Java/C#/Go will pay off not so much to then go to Rust unless it's a particularly high throughput or latency zensitive app in which case you'd already know it matters.