Comments 11
Во первых функции не С++, а С, а во вторых куда делись С++ исключения?
Rust дает надежность и безопасность. Unsafe сначала выключите. А то по факту выходит тот же C но в обертке Rust. Проще не парится и писать на С++
Вы забили уточнить "Rust дает некоторую надежность и безопасность", так как некоторые аспекты безопасности он все же решить не в силах.
Лично мне раст куда удобнее, чем плюсы (синтаксис, как минимум), а раз уж речь не про бизнес задачи, то вопрос удобности/приятности стоит довольно высоко. Так что я бы сказал, что проще не парится и писать на расте (имхо).
Возможно, сказывается привычка, но факт остаётся фактом.
А расскажите мне, как Вы будете обходится без unsafe на границе C и Rust?
Не пробовали uniffi? В частности, для плюсов есть uniffi-bindgen-cpp.
uniffi крутая тема для Kotlin/Swift, но для плюсов не всё так гладко. Например они все объекты биндингов оборачивают в Arc, поэтому владение объектом всегда разделяемое, и в куче, при том, что это необязательно для плюсов, cxx (да и autocxx), например, справляется без работы с кучей и позволяет мутировать растовские объекты.
Вы не пробовали crate https://docs.rs/cxx/latest/cxx/? Он почти zero cost (в большинстве случаев он вообще не добавляет никакого оверхеда), решает множество проблем, в том числе и большинство проблем с safe/unsafe.
Целью статьи являлось не описание использования сторонних крейтов, а попытка описания того, как это работает под капотом, разбор работы механизма ffi.
Какой-то очень примитивный пример с коллбеком. Как использовать лямбду в качестве коллбека (с состоянием, естественно)?
Rust + C++ через FFI: как подружить два мира и не сойти с ума