dwyl / technology-stack

πŸš€ Detailed description + diagram of the Open Source Technology Stack we use for dwyl projects.
284 stars 26 forks source link

Rust? πŸ€“ #103

Open nelsonic opened 1 year ago

nelsonic commented 1 year ago

Context

Rust has been at the TOP of the "most loved" programming languages list for the last few years: πŸ” https://survey.stackoverflow.co/2022/#technology-most-loved-dreaded-and-wanted

stackoverflow-most-loved-programming-languages

This year Elixir was finally allowed on the survey again and no surprise, it's #2! πŸ’§ 😍 In previous years it was excluded from the survey so obviously it didn't appear in the results ... πŸ€¦β€β™‚οΈ

What?

Rust is a multi-paradigm, general-purpose programming language. Rust emphasizes performance, type safety, and concurrency.

The aspects that appeal to me about Rust are:

  1. Types + compile-time type-checking. This is mega helpful in a larger team building more complex software/systems. πŸ‘Œ
  2. Memory safety; not crashing mid process! (looking at you JavaScript - and all compile-to-JS languages!) 🦺
  3. Performance: execution speed is similar to C so if we need to perform lots of ops fast ... πŸš€
  4. "Recruit-ability" don't know if that's a word, but you get the idea: finding team members who are passionate about solving problems and writing high-performance code. i.e. the best engineers. Ref: paulgraham.com/pypar πŸ’‘

These pros are all great, but the learning curve for Rust is considerably steeper than for Elixir. πŸ“ˆ

We have all dabbled with Rust informally, but haven't had a need for it in a project yet. πŸ§‘β€πŸ’» Recently I've enjoyed watching "Code to the Moon" videos on Rust:

Rust Demystified πŸͺ„ Simplifying The Toughest Parts: https://youtu.be/TJTDTyNdJdY image

Rust's Alien Data Types πŸ‘½ Box, Rc, Arc: image

They have been an acute reminder of how much more complex Rust code is when compared to Elixir.

I feel that we already have a superb Tech Stack with PETAL + Flutter until we need Rust for performance or safety reasons. All the practical reasons why Elixir is a great choice for the product/services we are building are still relevant. And the learning curve for new contributors is virtually flat for Elixir whereas having a Rust-wall to contribution on our core App might put a lot of people off ... the counter-argument is obviously that using Rust would be evidence of our focus on performance i.e. "Never waste anyone's time"

How?

There is a great Free / Open Source Book: https://doc.rust-lang.org/book and we have a repo waiting to be populated: https://github.com/dwyl/learn-rust

There is evidence that Rust works on iOS and Android so we could explore those options but AFAIK it's all very experimental ... πŸ§‘β€πŸ”¬ But where Rust would shine would be in handling a specific aspect of compute for us such as transforming large data structures. We don't currently have the need for it. Which is why I haven't invested the time to get good at it. I want to resist the temptation to invent a "reason" to use Rust until we have a legit need. But if anyone else reading this wants to proactively learn Rust and populate the dwyl/learn-rust repo ... It would be awesome if it could match the dwyl/learn-elixir in terms of getting setup, basic syntax and examples. I wouldn't be opposed to adopting Rust for a specific performance/safety-focussed element in the stack. For that we could either run it as a Erlang NIF function e.g: https://github.com/rusterlium/rustler or an independent "microservice" e.g. on AWS Lambda or Fly.io πŸ’­

Todo

If you want to work on this.

nelsonic commented 1 year ago

Why Rust is actually good for your car: https://medium.com/volvo-cars-engineering/why-volvo-thinks-you-should-have-rust-in-your-car-4320bd639e09

Volvo using Rust in their infotainment. Via: https://news.ycombinator.com/item?id=32960768

nelsonic commented 1 year ago

Flutter Rust Bridge: https://github.com/fzyzcjy/flutter_rust_bridge image

nelsonic commented 1 year ago

Web Scraping with Rust: https://github.com/kadekillary/scraping-with-rust πŸ‘€ Looks like there are already quite a few useful libraries in this space! πŸŽ‰ https://github.com/causal-agent/scraper appears to be maintained. πŸ‘Œ

nelsonic commented 1 year ago

Using Rust with Elixir for code reuse and performance: https://blog.doctave.com/2021/08/19/using-rust-with-elixir-for-code-reuse-and-performance.html image

nelsonic commented 1 year ago

Still no built-in/Native Websocket in Rocket? https://github.com/SergioBenitez/Rocket/issues/90 πŸ€·β€β™‚οΈ

nelsonic commented 1 year ago

https://dev.to/bkolobara/writing-rust-the-elixir-way-2lm8