Должен ли я передать строку обратно в Rust для освобождения?
Да.
Не будет ли сборщик мусора забрать это some_string
и освободить его?
Да, но это не утечка памяти, о которой стоит беспокоиться. Сборщик мусора освободит память, выделенную Ruby, которая содержит преобразованную строку Ruby.
Однако сборщик мусора не знает о распределении , которое сделал Rust. В частности, код Rust может , а не даже сделать выделение. В этом случае, если вызывающий код освободил строку, это привело бы к небезопасной памяти, поэтому библиотека FFI не может предположить, что это char *
было выделением.
Даже если бы он это сделал, он не знал бы, какой распределитель использовать для освобождения. Помните, что в умеренно сложном приложении часто используются несколько распределителей.
Отказ от ответственности: я автор Omnibus .