Calling Rust code from Python

Поделиться
HTML-код
  • Опубликовано: 10 сен 2024
  • Today we are learning how to call Rust code from Python!
    code: github.com/let...
    #rust #programming #tutorial

Комментарии • 110

  • @letsgetrusty
    @letsgetrusty  2 года назад +4

    📝Get your *FREE Rust cheat sheet* :
    www.letsgetrusty.com/cheatsheet

  • @pdblouin
    @pdblouin 2 года назад +66

    I followed a web guide to use Rust code from within a Python Dash web app. It blows my mind how many different ways there are to do things in programming. Makes it very difficult to learn.

    • @ZZDryno
      @ZZDryno 2 года назад +1

      Can you share link?

    • @johanngambolputty5351
      @johanngambolputty5351 2 года назад +10

      Well it's modular, you learn the bits you need now - now and the bit you need tomorrow - tomorrow... you don't necessarily need to do it all at once

    • @mysterry2000
      @mysterry2000 Год назад +2

      Imo it makes it easier to learn since you have an abundance of choices and can choose which one resonates with you the most

    • @DmitryRomanov
      @DmitryRomanov Год назад

      Just breathe and focus on getting the product (and the next obvious step) done. You will figure it out. Discuss it with somebody from time to time. You will find mentor, and it will work out.
      Do not forget to focus on the goal of your code, and push for getting the result - the code doing the stuff you want - done.
      Keep the log, write stuff you learn along the way in a form which will help you to reproduce again it if you get lost.
      And good luck to you in your journey!

    • @CJCJCJCJ
      @CJCJCJCJ Год назад +1

      Difficult? Or just more time consuming. Learning assembly is difficult. Having multiple ways of doing one thing is just called having options.

  • @utsavbasu2501
    @utsavbasu2501 2 года назад +50

    I am slowly moving over to Rust from C++ since I have come to despise the package management in it. Cargo provides easy-to-use package management, which I love dearly. Now I can focus more on the actual logic than worrying about how to link up my whole code. However, sometimes I wish to access Rust's robustness and 'easy-to-use'-ness through C/C++. So, please, it'll be beneficial if you make a video on how to call Rust from C/C++ and vice versa.
    PS: I really love your videos. If possible, I would love to get in touch with you to discuss Rust's future prospects and how to improve myself in this language.

    • @stevenhe3462
      @stevenhe3462 2 года назад +4

      I guess Mozilla has some of the best instructions in their Firefox contribution guides.

  • @jabuci
    @jabuci 2 года назад +8

    Important detail: `maturin develop` creates a slow, unoptimized build. Use `maturin develop --release` for fast execution.

  • @MrMediator24
    @MrMediator24 2 года назад +20

    Wow, timing is perfect, just finishing my diploma where I use PyTorch in Rust

    • @hariangr
      @hariangr 2 года назад +1

      didn't know you can use pytorch on rust, thx u

    • @MrMediator24
      @MrMediator24 2 года назад +3

      @@hariangr there's crate tch-rs. Works just like libtorch (since it just bindings for it)

  • @TRLYx
    @TRLYx 2 года назад +9

    Love the channel, Bogdan! I kind of just stopped learning Rust until I came across your channel and you’ve reinvigorated my interest. I appreciate your work, my dude!!

  • @JoshPeak
    @JoshPeak 2 года назад +9

    This is such an amazingly concise quick start. Did not realise Maturin existed to bridge the tooling between languages so well. Thank you! 🙏🏻

  • @jakobdunnebeil9063
    @jakobdunnebeil9063 2 года назад +11

    More guides on how to integrate Rust into other languages like Dart/Flutter would be great!

    • @WouterStudioHD
      @WouterStudioHD 2 года назад +3

      Take a look at flutter_rust_bridge. It’s pretty doable.

    • @jakobdunnebeil9063
      @jakobdunnebeil9063 2 года назад +1

      @@WouterStudioHD Thank you mate

  • @mkvalor
    @mkvalor 2 года назад +14

    Really great content. As I recall, other similar cross language integrations often lose a good bit of performance when jumping between the hidden glue code that allows them to be used together (such as Java with C++). Best practice is to make course-grained functions in the lower-level language (such as rust in this case). This way you do not waste too much time going back and forth across languages before calling the more important function which will do the bulk of the work.

  • @mutley11
    @mutley11 2 года назад +3

    Wow, I'm constantly diappointed you don't have a merch store or such, because I'm always binge-watching your wonderful content. I would love to see Rust integrated with Lua, as Lua is a wonderful language designed to be embedded into lower-level software environment like C/C++.

  • @Ryan-xq3kl
    @Ryan-xq3kl 2 года назад +1

    Your content has helped me learn rust tremendously well

  • @jesusmtz29
    @jesusmtz29 2 года назад +1

    That looks seamless and reasonable. Great demo

  • @EngineerNick
    @EngineerNick 2 года назад +2

    This was awesome thankyou :) I'd love more videos integrating with python please! PyO3's type mechanisms for guarding the GIL are unbelievably difficult to understand for more complex tasks... it uses `std::marker::PhantomData` which melted my brain a bit... I gave up trying to understand it.

  • @gendrik754
    @gendrik754 2 года назад +2

    I've already done so from Java and Kotlin. It was even faster than calling normal c or c++ via JNI.

  • @Ned478
    @Ned478 2 года назад +1

    wow, I was looking at tutorials for this a few days ago and couldnt find a great one. Thanks bogdan !

  • @ThanhHoQuangCSE
    @ThanhHoQuangCSE 2 года назад +2

    Great content, some how we need another version too: "Calling Python from Rust"

  • @ndil-adjimsoungadoy1245
    @ndil-adjimsoungadoy1245 2 года назад +1

    I love the channel and its definitely helping me fall in love with the language! Could you do a similar video to call rust from Node?

  • @dazealex
    @dazealex 2 года назад +1

    Really good content. Short and concise!

  • @sig0001
    @sig0001 9 месяцев назад

    concise and to the point

  • @teagancollyer
    @teagancollyer 2 года назад +2

    Is there any difference between using `pyo3` and `rust-cython` when doing `maturn init`? From what I've understood of pyo3 its using rust-cython anyway. Is one of them more efficient or something.

  • @jongeduard
    @jongeduard 7 месяцев назад

    The fact that Rust can build a C compatible shared library, which is what Rust calls a cdylib, is really important. This feature combined with FFI exports enables support not just for C and C++, but for a whole series of other programming languages too.
    And although I am still quite new to the Rust itself, this realization has already triggered me to explore several things.
    In this way I know that for Java there is really good JNI crate, and which is also really straightforward to use due to the abstractions in this crate. And if you have ever used JNI in C with the regular header files, and know how much of a serious pain that is to use, then it's actually really great what the authors of the crate have done.
    But since I am mostly a C# dotnet developer while not being scared to make make hands dirty on low level stuff, I also know how to use libraries with PInvoke, while taking care to use the Cdecl calling convention, mapping correct data type sizes and things like that.

  • @benshapiro9731
    @benshapiro9731 Год назад

    My brother, u need some sleep. I understand the grind, but remember to get some rest as well!! Great video, going to use some ideas from this video in the project which I’m hoping to leverage into a job, so thank you for this

  • @danielsan901998
    @danielsan901998 2 года назад +1

    an example of using Python from Rust would also be interesting.

  • @_diversable_
    @_diversable_ Год назад +1

    For a similar domain (data science & ML) but different language, check out Rust, Julia, and the Jlrs crate ! Two new languages, when used together, are insanely easy to prototype & develop with ❤

  • @paulzupan3732
    @paulzupan3732 2 года назад

    This is quite possibly the coolest thing I’ve ever seen

  • @ashutoshgarg9126
    @ashutoshgarg9126 2 года назад +5

    Please do Javascript and rust

    • @DJenriqez
      @DJenriqez 2 года назад

      and tauri,.... :D

  • @giannialbertoagudeloarbela9523
    @giannialbertoagudeloarbela9523 2 года назад +2

    Great video!! Could you please talk about performance or any case that makes it necessary? Thanks!!!

  • @guanguolin9249
    @guanguolin9249 2 года назад

    I recently tried to use cgo to call rust in the go language, and it worked

  • @lord12790
    @lord12790 2 года назад +4

    How about nodejs and rust?

  • @JOHNSMITH-ve3rq
    @JOHNSMITH-ve3rq Год назад

    This but a real life example where we can drop in rust for some kind of expensive function in prod and get some massive juicy speed up

  • @konstantinta2803
    @konstantinta2803 2 года назад +4

    C# and Rust integration

    • @thebutlah
      @thebutlah 2 года назад

      Good luck - You have to use pinvoke and write C bindings, which kinda sucks

    • @konstantinta2803
      @konstantinta2803 2 года назад

      @@thebutlah yes, I'm aware of the way using Rust from C#. What about using C# from Rust?

  • @wihlarkop
    @wihlarkop 2 года назад +2

    thank you for making this video

  • @murugarajuperumalla5508
    @murugarajuperumalla5508 2 года назад +2

    Waiting for this

  • @KamyarMohajerani
    @KamyarMohajerani 2 года назад +1

    @ 6:31: shouldn’t it be `.or_insert(0)` instead of 1, as it’s incremented at the first occurrence as well?

    • @KamyarMohajerani
      @KamyarMohajerani 2 года назад +2

      Never mind I hadn’t watched the whole video lol
      Thanks for the great work BTW!
      Your videos are really good.

    • @Redditard
      @Redditard Год назад +1

      @@KamyarMohajerani it happens

  • @KostiantynSalnykov
    @KostiantynSalnykov 7 месяцев назад

    Nice video 👍
    Could you do some examples with WebAssembly development?

  • @kuma9239
    @kuma9239 Год назад

    That is some beautiful tooling. I'm never using c extensions again!

  • @aaskxaz4536
    @aaskxaz4536 2 года назад

    As a beginner, just trying to watch some Rust: kind of hard to follow when you type and whole screen (because it is zoomed) blinks with completion hints (when you start to write a function and entire docstring pops up).

  • @xavhow
    @xavhow Год назад

    noob here.
    just wondering which approach is better?
    1. python calling rust via pyo binding
    2. python calling rust via wasm(wasi)

  • @jonathanbroadbent1587
    @jonathanbroadbent1587 Год назад

    I have two programs (one in rust and one in python) that I want to package together for a single functionality. Is it generally better to call python from Rust or Rust from python?

  • @uwuzote
    @uwuzote 2 года назад +3

    Wow, that's such awesome ability to use Rust in Python, great! It also would be cool to dive into gamedev in Rust.
    (sorry for bad english)

  • @SB-qm5wg
    @SB-qm5wg Год назад

    How are you getting all that popup info, auto-complete, and syntax checking in VS code?

  • @cerulity32k
    @cerulity32k Год назад

    me, using (or trying to use) CUDA, Rust, and Python all for the same project:

  • @JarradAB1
    @JarradAB1 8 месяцев назад

    Awesome!!!!

  • @jasonlantz3808
    @jasonlantz3808 2 года назад +1

    sweet.... javascript next...

  • @jesusmtz29
    @jesusmtz29 2 года назад

    I can't help see when you call `maturin develop` there's a mention of CPython. What is actually happening? Is maturin converting rust code to C code or is it running truly as rust code?

    • @Alche_mist
      @Alche_mist Год назад +1

      I'm not sure if it's what you want to know, but CPython is the standard interpreter for Python (which itself is written in C). So I'd expect maturin to just hook into CPython (the interpreter) with some commands like "if you notice functions exposed from the Rust package being called, call them in the compiled Rust crate here".

  • @yashinshekh802
    @yashinshekh802 Год назад

    now rust and python will take over the world 😅 great video.

  • @CuriousSpy
    @CuriousSpy 2 года назад

    i want to create nodejs package for my work project in rust. Could you please show your vision on how to do it?

  • @PouriyaJamshidi
    @PouriyaJamshidi 2 года назад +1

    Does calling code like this improve the performance or we're still limited by GIL? For instance, can we benefit from Rust's concurrency and all the other good stuff similar to what Numpy and PyTorch are doing or Python's interpreter gets in the way?

    • @pokemanic101
      @pokemanic101 2 года назад

      Since we are calling outside of Python, I don't see why you wouldn't be able to release the GIL

    • @PouriyaJamshidi
      @PouriyaJamshidi 2 года назад

      @@pokemanic101 I think we’re still depending on Python’s interpreter. But I might be wrong.

  • @GlobalYoung7
    @GlobalYoung7 2 года назад +1

    thank you

  • @reellezahl
    @reellezahl 6 дней назад

    This is a decent hello-world presentation! Could you please not be zoomed right in but? I know you have to make it so that people can read, but this level of zoom (which other YTers use too) is too much and frustrating, esp. when you want to "see the big picture" (and esp. when intellisense pops up and blocks half of what is happening).

  • @scritch9549
    @scritch9549 Год назад

    This is pretty cool. Does that mean I can control python only APIs by calling python scripts though Rust?

  • @recsysml
    @recsysml Год назад

    Bogdan, what shell do you use? I love the auto complete in it!

    • @recsysml
      @recsysml Год назад

      Also what is the VSCode extension that helps show these types in Rust. Like in minute 7:41 Bogdan writes 0 and it shows "default: 0"

  • @vasylpavuk391
    @vasylpavuk391 Год назад

    awsome

  • @after_alec
    @after_alec 2 года назад

    Do Elixir NIFs next!

  • @sigstackfault
    @sigstackfault 11 месяцев назад

    could you do LUA?

  • @white5493
    @white5493 2 года назад

    it doesn't work without pyenv :(

  • @praenubilus1980
    @praenubilus1980 2 года назад

    I want to see the way rust is comile to wasm and them being interoperated by other language. that will apply to more scenarios

  • @samuelfischer3764
    @samuelfischer3764 Год назад

    please do c from rust

  • @alextrotta796
    @alextrotta796 2 года назад

    I'd like to see you checkout CXX, for interop between Rust and C++.

  • @CT-cx8yi
    @CT-cx8yi 2 года назад

    Rust and RISC-V Assembly
    Rust and C
    Rust and Nim
    Rust and Haskell

  • @empyrean-music
    @empyrean-music 2 года назад

    I vote for Javascript as next

  • @JulianBolivarGaleno74
    @JulianBolivarGaleno74 2 года назад

    Realy excelent video, but how about call C++ libraries on Rust, because are a lot of ML implementations but they are on C++.

  • @stevenhe3462
    @stevenhe3462 2 года назад

    Writing Python modules in Rust is dead easy.
    Searched on Ruby modules and it is much more complicated.

  • @coolbrotherf127
    @coolbrotherf127 2 года назад

    You probably sound like you're talking in another language to anyone who isn't super familiar with these technical terms.

  • @roussafiomar5741
    @roussafiomar5741 2 года назад

    please can you make tuto about do yeet

  •  Год назад

    Replace your Python code with Rust.

  • @nebularzz
    @nebularzz 6 месяцев назад

    why does the facecam kinda look ai generated

  • @prashantm9856
    @prashantm9856 6 месяцев назад

    Use neovim instead vs code
    If you are a cool dev❤❤❤

  • @hackermann99
    @hackermann99 2 года назад

    I'd like to see Rust code integration in C#

  • @nothingisreal6345
    @nothingisreal6345 Год назад

    To bad you have to specifically wrap the Rust code. That limits the possible use. It would be better if Python could simply use Rust object code.

  • @QmVuamFtaW4
    @QmVuamFtaW4 2 года назад

    why.

    • @tedp9146
      @tedp9146 2 года назад +18

      This is basically how every big Python library works. Python is slow and therefore libraries like numpy have to be written in another language but still have to be provided to Python. It’s basically C/C++ code hidden behind a Python interface. This is the same just with Rust.

    • @l4fourier75
      @l4fourier75 2 года назад

      @@tedp9146 But Rust is for its high level really fast

    • @Alche_mist
      @Alche_mist Год назад

      @@l4fourier75 Which is why this makes sense - you want something fast (i.e. Rust, C, C++ or in some cases even Fortran) to do the backend work while you call those fast functions from Python, where it is easy to write (but slow to execute in pure Python - luckily, the fast and easier to optimize language does the hard work on the execution) and thus exploit their power.

  • @coldsir5406
    @coldsir5406 2 года назад

    No, please no, I had started to learn rust just because I didn't want to learn python

    • @l4fourier75
      @l4fourier75 2 года назад

      Oh.. is Rust your first programming lang?

    • @coldsir5406
      @coldsir5406 2 года назад

      @@l4fourier75 the second one, I've started with JavaScript when I was 14 yo

    • @l4fourier75
      @l4fourier75 2 года назад

      @@coldsir5406 Cool, i´ve been programming python for four years and think of Python as a simple, easy-to-use language, why are u so afraid? Of course, you don´t want to do anything with Python but for simple backend jobs its the best coice

    • @coldsir5406
      @coldsir5406 2 года назад

      @@l4fourier75 Yes, definitely python is really easy to learn and use but all of us have that mania of trying very hard things and languages and experimenting with it, personally I want to invest my time in something harder to learn but in long run to have performance, that's why I chose Rust. Tbh I chose between python and rust :D. My next language will be go or python.

    • @l4fourier75
      @l4fourier75 2 года назад

      @@coldsir5406 That depends on your purposes, e. g. try to design an explorer with CLI in python so that you are able to do any stuff requiring the explorer can be done by your terminal in a easy way, including a module and project template - that is not easy even if u use Python. But i know what you mean, good luck for u, i would recommend you "The Morpheus Tutorials", who really makes the best python tutorials, but he speaks german.

  • @kamurashev
    @kamurashev Год назад

    Why spoil something so great as rust with something so ugly as python.

  • @gustavojoaquin_arch
    @gustavojoaquin_arch Год назад

    Zzzzzz
    Python is dead

  • @azgan123
    @azgan123 2 года назад

    if you're going to interop rust with anything why not interop with language thats not an interpreted pile of junk? XD

    • @shipudentavo
      @shipudentavo 2 года назад +5

      Because python is one of the most used for things like DataScience and ML.

    • @azgan123
      @azgan123 2 года назад

      @@shipudentavo Its time high time python becomes the least used thing for everything.

    • @gendrik754
      @gendrik754 2 года назад

      what about rust interop in some good ol' aot native binaries for graalvm? could increase overall cloud performance

    • @kevinmcfarlane2752
      @kevinmcfarlane2752 2 года назад +1

      @@azgan123 That's an ignorant comment. Python has become popular for fields such a ML and Data Science because of the exploratory and iterative nature of those fields. Programming languages are tools. You use appropriate tools for the domain you wish you want to tackle.

    • @julians.2597
      @julians.2597 Год назад

      because very unfortunately for data science we're stuck with python for at least the next 5 years, 😪, so I'll do what every responsible programmer this far has done and write as much of the code in a better language and just the glue code in python.