My Rust adventure begins

Next: Getting started

I have come to the point with C++/WinRT where I am largely satisfied with how it works and leverages C++ to the best of its ability. There is always room for improvement and I will continue to evolve and optimize C++/WinRT as the C++ language itself advances. But as a technology, the Windows Runtime has always been about more than just one language and we have started working on a few different projects to add support for various languages. None of these efforts could however draw me away from C++… that is until Rust showed up on my radar.

Rust is an intriguing language for me. It closely resembles C++ in many ways, hitting all the right notes when it comes to compilation and runtime model, type system and deterministic finalization, that I could not help but get a little excited about this fresh new take on language design. I have spent almost every waking moment over the last few months (that I’m not hanging out with my family) exploring, studying, and experimenting with Rust. I looked for the usual signs of a language that is not really geared for a systems programmer like myself, but found none. To the contrary, I found that while it has its own unique and dramatic learning curve, it also has the potential to solve some of the most vexing issues with C++’s relationship to WinRT. Imagine C++/WinRT without any need for IDL, faster build times, and a simple and integrated build system.

And so it is that I have started building the WinRT language projection for Rust. I’m just getting started and have much to learn, but the plan is to build complete and deep support for WinRT in a way that is natural and familiar for the Rust developer. This is not going to look very much like C++/WinRT because idiomatic Rust does not look and feel like C++, but I plan to apply the same level of rigor in producing WinRT support for Rust that is both very efficient and a joy to use.

I’ll be sharing more about my adventures with Rust right here on but if you’d like to follow along more closely, take a look at the Rust winmd parser I wrote to get things started:

This is largely based on the C++ winmd parser library. While certainly not complete, it has just enough in place to allow me to now spend some time exploring and laying the groundwork for the WinRT support. The plan is to turn this Rust crate into a complete winmd parser for both reading and generating winmd files. A separate Rust crate will then provide the actual support for consuming and producing WinRT APIs.

But I’m getting ahead of myself. Do let me know what you think. I’d love to hear from you. And don’t forget to check back soon as I will probably start writing about the adventures of a C++ developer learning Rust. 🙂

8 thoughts on “My Rust adventure begins

  1. Serg

    Glad to hear you are trying Rust for Windows! We have had a lot of positive results from moving to Rust and having WinRT support in Rust will be appreciated.

  2. Krzysztof Lesiak

    Awesome! I’m really excited about where this is going 🙂

    Please do write about your experience learning Rust. I have been trying to do that on and off for a while, but I think to do it really well I’d need to invest a considerable amount of time, which I don’t really feel like doing outside of my day job (which is mostly C++).

  3. starfluke

    So awesome to find your work on inserting Rust support into Visual Studio!!!
    Daniel Game Daddy — Matthew 6:19 & 20 “….in Heaven, where neither moth nor RUST destroys….”

  4. Michael M

    If/when this works, it will be The platform for my future app! A dream come true! the ideal solution.

    High performance Rust app for Windows desktop for the ‘real’ work, and using the Rust code as a cross platform solution to compile to wasm for mobile and web apps…

    Your efforts, Kenny, will mark the start of an important new chapter.

    Thank you.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s