rust-interop

I've been a long-time user of Rust. While the most common features that are highlighted for Rust are its memory safety and ability to achieve great performance due to not having a runtime, I've personally always been more fascinated with it for other reasons.

I think one of the great features of Rust is that by providing the option to drop down to a C ABI interface + the ability to generate high-level wrappers via it's powerful macro system, you can have very strong interoperability with other programming languages, where calling a foreign function and using foreign data types doesn't feel any different from using native Rust.

On the one hand this can greatly increase the libraries available to Rust developers (e.g. "just" use this parser for an esoteric file format written in C++). On the flipside this also allows for embedding libraries written in Rust into other programming languages, amplifying the utility of writing libraries in Rust.

Having good bi-directional iteroperability with programming languages also helped me a lot in the past to do piece-by-piece refactors of codebases by starting out with a small core written in Rust embedded in a different host language that grows and grows until a final migration push is less risky and viable to do.

So in order to share that fascination I created a website that highlights Rust interoperability solutions, that is backed by content in a GitHub repository so that other people can also contribute to it.

Over the years since it's inception, I've seen other people on the internet link the website whenever integrating Rust with Language XYX comes up, so it seems to be a valuable resource for people! According to traffic stats, it's also one of the most popular pages under this domain.

Overall I'm quite pleased with the website and it's simplicity, where the small amount of time I had to put in to get it started and running turned into a nice small website that can be easily expanded with new content. Maybe someday when I'm feeling inspired the page will be expanded with guides for generic solutions that currently don't fit well into the concept (e.g. generic C bindgen; WASM-based interop).

Resources