Comments 17
Хочется бенчмарков. Понятно, что должно быть быстрее, но ведь вызов через FFI тоже не бесплатный.
0
Я думал над этим, но на Rust использован многопоточный вариант для самой тяжелой операции — вычисление хеша. Написать аналог под Node.js конечно можно, но там только на поднятие дочернего процесса уходит 30ms и 10 mb памяти.
0
Просто мотивация в таком случае размывается. Вот сидит человек и думает — купить мне еще серверов под ноду или переписать боттлнек на расте — как ему решить, что выгоднее экономически?
0
Я бы не советовал использовать usize в сигнатуре FFI-метода. В C нет непосредственного аналога usize. Лучше в этом случае взять lib::size_t, или вообще фиксированный тип.
+1
По работе тоже нужно было ускорить критическую часть, тоже решил сделать это на Rust, заодно его и подучить. Но была одна маленькая деталь — функция в Rust должна была возвращать в Node.js объект, а не примитивный тип, и с этим я не справился. Велосипед в лице передачи строки и последующего JSON.parse, кроме потери любого выигрыша в производительности, не подошел т.к. возвращаемая строка была слишком длинной и все падало в момент получения нодой. Где-то прочитал, что в FFI можно передать указатель на объект, и в ноде его уже считать из памяти, но так и не разобрался с этим решением. Может у кого-нибудь была похожая задача?
0
Важное замечание — не паникуйте при написании динамической библиотеки с использованием FFI!
let text1_ = String::from_utf8(buf1.to_vec()).unwrap();Ну да =)
Посмотрел в
std::ffi
, на CStr::from_ptr
. Печально, что оно работает только с strlen, без возможности использовать strnlen. Т. е. словить segfault довольно легко. Понятно, что это unsafe, и словить segfault в нём вполне реально.+1
Sign up to leave a comment.
Начинаем использовать Rust