An Introduction to Coding In Rust for Pythonistas
Vložit
- čas přidán 22. 07. 2024
- In this video, I'll explore coding with Rust for the first time, diving into its cool features and drawing comparisons with Python.
👷 Join the FREE Code Diagnosis Workshop to help you review code more effectively using my 3-Factor Diagnosis Framework: www.arjancodes.com/diagnosis
😺 Git repository: git.arjan.codes/2023/rust
💻 ArjanCodes Blog: www.arjancodes.com/blog
✍🏻 Take a quiz on this topic: www.learntail.com/quiz/kmxktf
Try Learntail for FREE ➡️ www.learntail.com/
🎓 Courses:
The Software Designer Mindset: www.arjancodes.com/mindset
The Software Architect Mindset: Pre-register now! www.arjancodes.com/architect
Next Level Python: Become a Python Expert: www.arjancodes.com/next-level...
The 30-Day Design Challenge: www.arjancodes.com/30ddc
🛒 GEAR & RECOMMENDED BOOKS: kit.co/arjancodes.
👍 If you enjoyed this content, give this video a like. If you want to watch more of my upcoming videos, consider subscribing to my channel!
Social channels:
💬 Discord: discord.arjan.codes
🐦Twitter: / arjancodes
🌍LinkedIn: / arjancodes
🕵Facebook: / arjancodes
📱Instagram: / arjancodes
♪ Tiktok: / arjancodes
👀 Code reviewers:
- Yoriz
- Ryan Laursen
- Dale Hagglund
🎥 Video edited by Mark Bacskai: / bacskaimark
✍🏻 Code Examples & Scripting: Alyce Osbourne
🔖 Chapters:
0:00 Intro
1:12 Hello world
3:32 Macros
4:27 Overview of key differences
8:25 Python classes vs Rust struct
15:59 Differences between an ABC and a trait
18:29 Macros in Rust
19:26 Final thoughts
#arjancodes #softwaredesign #python
DISCLAIMER - The links in this description might be affiliate links. If you purchase a product or service through one of those links, I may receive a small commission. There is no additional charge to you. Thanks for supporting my channel so I can continue to provide you with free content each week!
👷 Join the FREE Code Diagnosis Workshop to help you review code more effectively using my 3-Factor Diagnosis Framework: www.arjancodes.com/diagnosis
Not sure if you're going to get to it but I wanted to comment as I saw this. Cargo (built into rust) is more useful for building and running. Instead of `rustc user.rs` and `./user` you can just `cargo run` and it runs the main binary of your package.
It’s nice to see the compiler specially for beginners, magic can be confusing
Well even the book doesn’t concern itself with 'rustc', so IMHO it's safe to say that use cargo to build and run - even for newcomers
Not only compiling, but testing and documentation are easy with cargo.
@@ozanmuyeseveryone should use cargo
It would be cool to see how we can create rust bindings to python and use rust functions in our python programs. Really get that "best of both worlds" started!
You actually can! See the Py03 project for details.
@@caseykorver5729 I didn't say you couldn't, I'm asking for some tutorial content on _how_ to do this.
Thank you for the reference. PyO3 (that's an `O` not a `0`) seems like a nice resource for this :)
Yes more Rust please. But also continue with Python. The two together are a dream team.
More rust content please! I'm rewriting nearly all my python code in Rust. There is a extensive amount of CS concepts that I have to learn along the way. But in the process of being a better rust developer, I'm becoming a better developer overall!
Rust makes you understand the stack and the heap, and pass by value v pass by reference, traits confused the hell out of me at first though! : )
You should jump into C before Rust IMO
@@snippletrap 100% agree, despite being a big Rust fan.
More of this! I loved your python Videos. They helped me so much to build a strong foundation. Since then I have taken a more „rusty“ path and would really love for you to make more videos in that area
With PyO3 and Maturin, you can seamlessly expose your rust code as python modules. Very useful when you have an existing python codebase, so you can rewrite the slow modules without modifying how they are used.
tempted to rewrite my code to delegate all for loops to Rust module :D
@@ytfeelslikenorthkoreamake sure you have proper benchmarks in place. Rust is faster, but the foreign function interface (FFI) isn't free. Depending on your problem and data size, you might spend more time converting back and forth from Rust to Python that you're better off with pure Python. As with everything related to performance, always measure.
Ive been looking into Rust, but a lot of stuff for "speed" have been written in C++. I dont quite understand yet, why I should learn Rust over C++ ?
@mNikke It is usually a lot more safe, there is a lot less chance of getting issues like segmentation faults, memory leaks, etc.
@@mNikke C++ is much better for this. It's a more flexible language and the safety stuff typically won't buy you anything because the kinds of code you'll be writing will be by its nature restricted in scope. It's also much easier to write for performance, which is typically why you'd want to do this in the first place (think gpu, simd, etc), and the ecosystem is much, much richer.
I really wished you would have mentioned rust up for installing and managing your rust versions and also cargo. The tooling around rust is a major reason why I and so many others are drawn to the ecosystem! Great to see this though! Keep it up
Very timely for me. Just switched my learning effort from Python to Rust. Borrowing and lifetimes are doing my head in so any content focused on those gnarly aspects would be much appreciated.
Those are the two hardest concepts for fledgling Rustaceans. Build a project with Rust, and it will be second nature by the end.
@@mr.bulldops7692 Thanks for the encouragement. I'm in the middle of a project right now and it's gradually clicking, but it's always good to get plenty of perspectives to make sure you're not missing something. I've been swearing at integers today, finding arithmetic between usize and isize unnecessarily annoying :). Got there at 4:59pm, thank goodness.
What part specifically is doing your head in?
@@TheStickofWar it would take too long to describe, but lifetimes are not intuitive to me. I use the Rust reddit, I've got The Book (plus the O'Reilly one) and I'm getting there. But there's definitely a steeper learning curve for this than Python (or Elixir, the language I've made a living from most recently).
@@robbybobbyhobbies I think one key thing that is important when developing in Rust is having a clear data model. I found that I never really had to think about that in Python while moving over to Rust required that I always think about ownership when planning how I approach a problem. It becomes more intuitive with time.
Arjan, this content is extremely valuable and rare. There are millions of programmers who mainly or only know python (say they came from data/sciences etc.) You’ve taught them python and now you can introduce languages from a “pythonista’s” PoV.
Which unlocks a whole new ecosystem for your viewers. Usually these language guides aren’t written for python users so it is double valuable.
please make a series on how to do things in Rust for Python programmers, covering things like logging, error handling, async await, context managers etc...
there are a lot of youtubers that are specialized in Rust, but very a few specifically target Python programmers who are interested in rust, and there are many, and since your channel kinda does, it will be a perfect opportunity to capture new audience and\or bring back people who already "mastered" Python
logging is not native to rust, you have to get dependencies via cargo preferably, the "log" crate is very common as an abstraction facade however it doesnt provide any logging, you have to get a logging framework for that, which there are many links in the log crate's docs to find
error handling is a complicated subject, but do know you dont have to always match everytime there is plenty methods on Result and Option types and there is a ? operator
async is very difficult in rust and most use the tokio crate to help
context managers doesnt exist as thet are redundant due to the ownership system, a "context manager" would just implement the Drop trait, if it absolutely needs to
@@thomaseb97 async isn't any more difficult in rust than it is in js or C langs
Very nice timing! I started reading up on Rust during the Christmas break and I kind of like it. Used to do some coding in C, so quite familiar with some of the differences to Python. Would be awesome if you would cover more rust, especially bridging Python and Rust.
Great video, Arjan and happy to see you deep dive into the Rust ecosystem! Your way of explanation is amazing! I have been following you almost since inception of your channel and it has been great way to learn stuff from an experienced software engineer like you. Recently started learning Rust and was thinking: "Hey only if there is a channel like Arjan's that can teach Rust the same as he does Python...". I think the community here would love to see way more Rust related videos (and why not a whole course on your website) in 2024 dissected and explained in your way. Thank you for all you do man, appreciate it!
I would love to see examples how to use Rust along with Python on some computation expensive operations...
So glad you’re covering rust now too! Your teaching, examples, videography are always so good
we are waiting for "Go for pythonistas " now.
Would LOVE to see more Rust content on this channel in the future... it's my favorite language!
@ArjanCodes Please do more RUST videos! Thanks!
Right time!!! Wow, I am a python developer, use Python every single day but now learning Rust!! Thank you!!!
I'm happy this video came out at a good time for you!
I like that you are covering rust. Please continue to work on this with your expertise
This was a great intro to rust. Appreciated the comparison against Python.
Really like how compiling shows 'dead code' as this is a feature missing in (native) Python.
Looking forward to many more rust videos!
Any chance you can demonstrate executing rust from python?
I’m a JS/TS dev but I love this channel and this video was certainly no exception! Can you do one more where you go through borrowing and so on as well?
Finally a video that's not Python! And very good too, thanks! :)
I would definitely watch your Haskell video, if you did any.
For future Rust videos, I would recommend using some more tooling (rust-analyzer in VSCode so you don't need to compile to see compiler errors; cargo for running the application so you don't need to compile manually). And it would be worth mentioning how much more streamlined the tooling around Rust is, compared to the Python ecosystem.
Some more topics that would be great to cover are algebraic data types (with real, useful Enums), and the borrow checker (which might give Python programmers a headache or two). Hope to see more of that kind of content!
Greeat video.
Would be great if you could make a video of implementing a Rust binding for Python. This would show a practical example of creating highly performant python module.
Also would be great to see a video on rules of thumb when you would chose rust over python (and in which instances rust would not bring many benefits e.g. i/o being bottlenecks)
I coded in nothing but Rust for a few months -- gave it a solid try. While I think it's cool, Rust is a large, complex language and trying to solve problems in it I found untenable. As such, I don't find the language good to *play* in (problem solve, iterate, etc.). However, if the problem is already solved and performance needs to be improved, writing a version in Rust could be a valid way to get that performance boost needed (that or C++, either is fine).
Rust is very structured so you have to know what exactly you want when you start off.
You can definitely play around in rust but doing so quickly without planning ahead will just leave you frustrated and refactoring alot, but that's an issue with most lower level langs.
Great content! Would love to see more how rust and python can integrate with each other!
Nice one Arjan, this video explained more of Rust than most of the 1hr tutorials Ive watched on youtube so far. I think a lot of experienced Pythonistas are now looking to Rust for an entry into «somewhat low level programming».
I'm happy you enjoyed the video!
Great timing with this video! I am currently looking into learning Rust as my second language!
I'm glad to hear that this video was helpful then!
I would surely love you doing more in future
I loved the video!!! I've been learning Rust for 2023's Advent of Code (as an excuse to learn the language) and loved the first steps in the language.
It was really easy, for me, to understand now Rust's traits, being compared to Protocol/ABC classes in Python. You've chosen a good analogy there, thanks!
I'm glad you're enjoying the content!
Please please do more Rust videos 🙏🏼
Like the way you explain stuffs. Some concepts are still cryptic but the way you put those makes me dig deeper by my self.
parts of pydantic are written in rust i think, so this is an excellent segue to rust
The core of pydantic was rewritten in rust, now it’s pydantic v2
Wow Ia want more videos about rust and I like the comparisons made with python (I haven't seen a channel doing this kind of comparisons).
Before the version 1.0 Rust implemented classes but switched to another model: Algebraic data types. Rust can still do some mainstream OOP but can't implement inheritance (since composition is prefered in more cases).
Python FP is more of an afterthought so it's not as elegant as Rust but his OOP is more convenient for inheritance
I have limited experience in python but feel comfortable with it. I did read up on rust myself a bit and am exited to learn/try it. So I am very interested in the synergies and potential symphonies one might be able to compose with these two.
i love rust. we use it at work for some of our backend services with axum. glad to see it getting more coverage.
Now this is what I expect from Arjan ❤❤❤ quality as always, unique and thoughtful. Thanks as always
Thank you for the kind comment!
@@ArjanCodes No, no! Thank you! Longtime watcher and student of yours ❤️
ML researcher here so most of the time I'm working on python. Having previous experience with C++/C# I had never got to like dynamic typing, but now that HuggingFace has built the Candle framework for Rust, I would really enjoy giving it a try. Pls do more rust :)
Thanks for the great content Arjan !
`cargo run` for compiling and running in one step. if you use cargo that is.
So, SO great that you are taking a look at Rust! Many thanks 😊.
I'm happy you enjoyed the video!
Great intro for Rust - thank you! Also the first tutorial I've seen that compares Rust to Python, so interesting... If you are of a mind to do more on Rust, my vote goes with embedded devices and integration with AWS.
I am using Python for nearly a decade now and try to wrap my head around Rust at the moment. So it's perfect to see someone explaining Rust with the Python perspective in mind. Love it!
Btw: I subscribed to you when you had 1k subsribers and was one of the first 50 users on discord. Insane growing in that short amount of time 😂 Good job - well deserved!
I'm glad the videos have been helpful! Thank you for your continued support :)
The rust compiler is amazing and helps you avoid errors so nicely.
The JetBrains Rust IDE has a great feature to run the program with Command R which makes it very fast to test the program.
The timing of this is insane. Just started to get my toes wet with Rust and Tauri a few days ago!
I'm glad to hear! Hope the video was useful :)
That was a nice overview - I'd encourage you to do more head to head comparisons in this style. You certainly did not appear to be out of your comfort zone here.
Please do post more videos on rust! Enjoyed watching this one
Definitely demonstrate how to combine Python and Rust (especially using Cargo). I helped a friend migrate his PhD simulation out of Python and into Rust, and using PyO3 meant he could migrate it one function at a time, rather than a complete rewrite from scratch.
In general, I think Rust is the future of complex programming. You have complete control and oversight over what happens in Rust, at the cost of some complexity. Python, JS, etc. shine when the problems can be solved by composing complex functions in a simple way.
You should definitely make Rust of Pythonistas a regular topic.
Great! More please!
I'd love to see more Rust as well been trying to improve in it and learn its functional style!
Agree that this is a super nice avenue to explore. I use Python everyday and have learned lots from your videos. Starting to get interested in Rust though and having it explained from a Python point of view is very helpful!
Awesome. Love it. Exactly what I was looking for and that's from you
Glad you enjoyed the content, Matthias!
I use Rust and not Python so I can't really say what language features should've been mentioned for an audience of Python devs, but the one thing I'll mention is that I'd recommend managing your Rust version with rustup (rather than via a package manager) and using Cargo to build your code instead of compiling directly. One of the great things about Rust is Cargo, though I understand why it might not be mentioned in a video more focused on language features.
I thought it was ok initially but then if he does a follow-up he should do as you suggest before progressing further.😊
Hu. I have the same lamp - made me notice that I like this camera framing. Production value is definitely increasing !
Brilliantly clean and concise intro to a deep language.
Glad you enjoyed the content, Trey!
Managed to dodge DotNet and Java, C++, C# or Golang, now Rust and probably Zig if I procrastinate more will miss these too!
I already had to switch from C to C++, and that brief phase of C#, we don't speak of. Then, I had to spend a week learning Python, and it was worth it because I could always use C helper files. This seems like deja vu to an old guy like me. I mostly code in bare-bone hardware, so I'll just stick to C and assembly.
started learning rust with AoC this year. Interesting timing for me haha. I'd be down with more Rust basics.
I am interested in Rust content. I will be building a web application in Rust for a university project soon, so additional learning content is great
Interesting you also tried Rust - also thought for quite a while to finally really get into it. My issue currently is that I don´t really know what to build that is also somewhat interesting. I´ve seen that Pydantic uses Rust for it´s core package. Would love to see a little project on Rust for Python Programmers, maybe even something that uses both Rust and Python
A good way to learn is to take something you’ve written in Python and then rewrite it in Rust. You will learn something along the way. That’s what I did with a C# program.
What kind of keyboard / switches do you have? Sounds so satisfying!!
The key feature of rust is the "borrow" concept. Other than that it is mostly like languages that came before it - like C or modula, or ocaml.
I'm still not convinced one way or the other after my initial look at rust years ago.
Can't wait to see your treatment.
Hi Arjan, absolutely loved your introduction in Rust for Pythonistas video. Really enjoying the Python-Rust perspective. More of this would be fab. Keep it coming!
I'm happy to hear you enjoyed the content, Alin!
2023 was wild ...first you were skeptical about ai, now you are going for Rust ❤
Really nice video. Would be great to hear your thoughts on Rust vs GO. In my team we have been using Python for a while, and recently started using Golang for applications that need to be high performant. I found GO to be easier to get started with, also for new team members. Love your content, keep up the amazing work!
Awesome video, would love to see you cover more Rust!
Two quick notes:
1. Within the impl block you can use `Self` to refer to the type. Thus `fn new(name: &str) -> Self { Self { name ... } }`. Might save some keystrokes and reduces the amount of diffs when renaming a type.
2. `User::new` accepts a `&str` and always converts this into an owned `String`. From the perspective of memory allocation it's recommended to in this case change the `&str` to `String`. That way the caller can decide whether or not to pass an already owned string or create a copy. If the caller has no need for the `String` after calling `User::new`, then you save a copy operation. Be sure to look at the documentation for the `Cow` type for another (less commonly used but sometimes useful) option which is useful in certain cases.
Thank you very much, I wanted you to explain either GoLang or Rust. However I am learning GoLang now, but I will start Rust too.
I've got some dream projects that I'd like to make, and Rust is my first choice of language for now. Still, I'm going to need some additional scripting. You mentioned Rust bindings in Python--well, I'm considering Python bindings in Rust! Anyway, I'm a long time viewer of your channel and would love to see more on Rust and how it relates to Python!
Yes! Please make more videos on Rust.
Really appriciate. Thank you for starting contents on Rust. Hope that I can see more videos on Rust in future.
Glad you enjoyed this type of content!
You guessed what I wanted, which is get into Rust, but with the perspective from a Python background
Great minds think alike! Hope the video helped.
Great video idea. As someone who's only really done Python so far, the more complex languages can be rather intimidating. I've delved into C a little and I'm actually finding this rust example a lot harder to understand than simple pointers and references. Can see why it's known to be so hard.
The great thing about Rust is the compiler helps you.
Hell you can write python in it and the compiler will tell you things to change to make it rust, such as the difference between how you make functions.
Hi Arjan. If you would go further in Python to achieve speed you would in C…but who does that. But with Rust it changes all. Polars/Ruff and lot of other frameworks are being done in Rust. If you do Rust videos in the context of Python enhancement I am totally down for it. Happy new year.
Very astute observation, my friend. And so very timely. Some of the new AI frameworks that I am starting to use are built in Rust. I really enjoyed this video. Looking forward to more Rust content from you in 2024. Keep up the excellent work. Stay well.
Thank you for the kind comment, Wade!
Really great inteoduction.
I loved this video, the comparison is great and helped me, thanks! The first time I heard about marcos in Rust was a disgusting idea, as a c++ dev macros are limited to some specific situations and avoided when possible. I need to take Rust with new mindset.
Great video on Rust!
I enjoyed every moment of it! Currently I'm learning Rust and yeah I can see why all the hype around it.
A bit too much boilerplate though for my liking...though not as bad as Java.
Can you please do a similar video on Zig? I actually prefer Zig than Rust coz it's closer to C syntax (~ simpler, less boilerplates).
I'm really loving these kind of videos ❤
Keep it coming bro. Create Indepth Rust tutorial for python developer.
Thank you amazing introduction ❤
You’re welcome, happy you liked it!
Surprised not to see the parallel between protocols and traits rather than ABCs. The analogy seems much closer to protocols even if protocols too support inheritance as opposed to traits.
Anyone know what shell autocomplete he is using?
I would love to see something like this for Golang as well.
Would be interested to see your review of Nim as an alternative for complementing Python.
Thank you for the video. I believe in the Rust's bright future. I had an excellent Rust experience in production. It's nothing crazy, just excellent CPU utilisation. Rust could be much more valuable to a developer than most think. I would be glad to see your thoughts and point of view on how to cook it.
Create a dedicated playlist on it.We support you 🎉🎉🎉🎉, like as always ❤❤❤❤❤
I'm not going to go deep with Rust in the near future, but I really enjoyed that video. :) Thumbs up!
Glad to hear you enjoyed the video!
would be nice to have a video integrating NIM with python with some networking examples
Great thanks for an intro
Thank you for the rust tutorial! Can you cover wasm with rust?
As someone that feels comfortable with Python but wants to take on a low-level language like Rust, I was looking for this exact video
I'm happy the video has been useful for you!
I hope this becomes a series of RUST videos🤞
Video on binding rust and pay would be cool
Hey great video, I want to know your opinion on mojo which is going to be the general purpose default language for AI development. Also the two language problem talked by Chris lattner, python users can’t contribute to most python libraries because they are not written in python. Using rust instead of c to write libraries for python doesn’t change anything because you still need to learn a new language and python programmers are generally not habitual of good memory management because we have a garbage collector. If you just want a language faster than python for web development and distributed applications than go lang is better choice because it is much for beginner friendly and better cloud integration. Docker and kubernetes are written in go. If you want fast AI mojo seems a good option for python devs. Rust does make sense only for system programming. By using rust for python modules, we are just increasing the two language problem
Like many others in here, I too am in favor for more Rust (or Ross as CZcams automatic closed caption likes to call it) videos for Pythonistas.
also, rustpyton is very cool. Not exactly for your typical pythonista but still worth a mention. It puts into perspective how powerful it is even though it feels high level.
Amazing content. Just what I need.
Glad the video was helpful!
A comparison of the differences also with GO, Zig and C++ woudl be amazing! just to get a feel for the use cases and thought process that they are based on!
OMG! Here we go!
I guess since you started doing this, a comparison to Go or Swift would be nice. Or maybe Julia, since that is more similar to Python than the others?
Great video! Instead of Rust, I'd rather pick Nim language, much more approachable to python developers, gives similar benefits like speed like rust, but simpler to pick up. Otherwise, because of Rust we have excellent python-centric packages like Ruff and Pylyzer :)