Pull to refresh

Comments 17

Хочется бенчмарков. Понятно, что должно быть быстрее, но ведь вызов через FFI тоже не бесплатный.
Я думал над этим, но на Rust использован многопоточный вариант для самой тяжелой операции — вычисление хеша. Написать аналог под Node.js конечно можно, но там только на поднятие дочернего процесса уходит 30ms и 10 mb памяти.
Просто мотивация в таком случае размывается. Вот сидит человек и думает — купить мне еще серверов под ноду или переписать боттлнек на расте — как ему решить, что выгоднее экономически?
при игре в долгую раст выигрывает в любом случае.
смотря что у вас есть лишнее: деньги или программисты
Если есть программисты, то деньги тоже как бы есть :)
Вот надо понять, сколько надо денег, а сколько программистов. Может, у меня 100500 лишних пыхеров, от которых толку все равно не будет.
Я бы не советовал использовать usize в сигнатуре FFI-метода. В C нет непосредственного аналога usize. Лучше в этом случае взять lib::size_t, или вообще фиксированный тип.
По работе тоже нужно было ускорить критическую часть, тоже решил сделать это на Rust, заодно его и подучить. Но была одна маленькая деталь — функция в Rust должна была возвращать в Node.js объект, а не примитивный тип, и с этим я не справился. Велосипед в лице передачи строки и последующего JSON.parse, кроме потери любого выигрыша в производительности, не подошел т.к. возвращаемая строка была слишком длинной и все падало в момент получения нодой. Где-то прочитал, что в FFI можно передать указатель на объект, и в ноде его уже считать из памяти, но так и не разобрался с этим решением. Может у кого-нибудь была похожая задача?
На днях видел. Внизу есть пример с Node.js.

Это вообще классный ресурс — там много примеров с разными типами данных и разными языками, рекомендую.
Спасибо огромное! Буду пробовать. А то у меня network analysis на графе в миллионы узлов — бедный Node.js считает несколько минут, пользователи наслаждаются логотипом загрузки…
Ну или в крайнем случае использовать какую-ту прослойку в виде Redis-а
Важное замечание — не паникуйте при написании динамической библиотеки с использованием FFI!
let text1_ = String::from_utf8(buf1.to_vec()).unwrap();
Ну да =)

Посмотрел в std::ffi, на CStr::from_ptr. Печально, что оно работает только с strlen, без возможности использовать strnlen. Т. е. словить segfault довольно легко. Понятно, что это unsafe, и словить segfault в нём вполне реально.
Sign up to leave a comment.

Articles