у меня что-то не получилось заставить её инлайнить функции Раста в C++.
Подчеркну, что в большинстве своём функция в C++ это просто трамплин в Rust, там инструкций до call от силы пару манипуляций. В будущем планирую на чистом Расте написать, но пока остановился на этом.
А вот функции в Расте достаточно большие. В обоих случаях речь идёт о FFI.
C++ билдится clang 8 с аргументами -flto=thin -O3 и во время линка с растом и во время компиляции translation unit-ов, Rust билдится с flto="thin" и с включённым linker plugin lto в RUSTFLAGS.
Я даже вижу как в вызовах rustc передаётся аргумент linker plugin lto.
Так вот, билжу я так же с включенными дебаг символами с обоих сторон.
Да и линковка всего этого дела длится значительно долго чем раньше. Clang линкует объектные файлы плюсов и статическую либу раста, собирая все это в shared library.
Когда я смотрю дизассемблером, внутри плюсовых функций call в растовые и никакого инлайнинга, хоть и растовые вызываются только там и с помощью version script-а почти все скрыто.
Как делать чтобы инлайнился раст?
а зачем он thin? делай жырный
Обсуждают сегодня