Этот пост основан на презентации, с которой автор выступил на конференции EuroRust 2022 в Берлине. Доступны слайды и видеозапись.
Автор, работающий в компании Slint, участвует в создании UI-инструментария, написанного на Rust. Этот UI-инструментарий может использоваться и с другими языками и экосистемами, кроме той, для которой был написан, поэтому в Slint предусмотрены API для C++ и даже для Javascript. Естественно, эти API должны восприниматься как совершенно нативные для разработчиков, имеющих дело с этими языками. Именно поэтому ребром стоит вопрос о том, как создать нативно воспринимаемые API к коду Rust для пользователей, привыкших работать с C++.
В Slint предусмотрена возможность пользоваться имеющимся кодом на C++ для дальнейшей его интеграции в другие экосистемы для разных операционных систем. Это касается таких тем, как оформление виджетов, обеспечение доступности и пр. Вот почему не менее важно открывать из мира Rust удобный доступ к коду, уже написанному на C++.
В этом посте хотелось бы исследовать оба направления интеграции между Rust и C++ и представить некоторые инструменты, используемые в Slint.