Как стать автором
Обновить

Комментарии 22

На моей машинке Rust-овская версия отрабатывает за 80-85ms. Неплохо, трехкратный рост только за счет использования Rust-a

Или можно просто написать быстрый js код

exports.search = function search(corpus, search) {
  var total = corpus.match(new RegExp("(\\W+|^)"+search+"(\\W+|$)","g"));
  return total.length;
}

такое решение работает в три раза быстрее чем код на Rust в вашем примере.
Привет КЭП.
Подозреваю, что код примера всё же специально сделан без использования регулярных выражений, т.к. это убило бы необходимость в нём.
Это понятно, что код примера сделан специально чтобы показать насколько модуль на Rust "быстрее" чем Javascript.
В реальной жизни, производительность кода зависит в первую очередь от используемых алгоритмов а не от языка. Если JS код тормозит, надо посмотреть нельзя ли ее улучшить, а не переписывать на "быстром" языке
Не понимаю зачем этот спор.
Если задел чем-то — эмм… ок, хорошо, учту, сорян.

Если пофилософствовать хочется: реальность у всех своя.
И даже далеко не факт, что то, как видит мир один индивидуум, полностью соотносится с тем, как видит мир другой.
Т.е., если мы возъмём просто даже зрение, то собственные руки кому-то могут казаться сепульками из сепулькария, а другому вполне себе руками. Но это не отменяет того, что они смогут подразумевать под руками одно и то же.

Т.о., если мы используем вполне себе конкретное понятие "регулярные выражения" в месте где конкретика отсутствует — "реальной жизни" — то о чём здесь вообще речь? Есть ли смысл отвязывать контекст от объекта и субъекта предмета разговора?
Примерно об этом я и хотел сказать, говоря об очевидности утверждения, что регулярки будут быстрей.
Ну так в данном случае вы тестируете очень оптимизированный сишный код. Некорректное сравнение в общем. Хотя версию на Rust тоже думаю можно оптимизировать, я так подозреваю, что split всё-таки выделяет кучу памяти и делает кучу ненужной работы. Если написать на конечном автомате, то можно обогнать и вариант с регулярками.
Аффтар, ЖЖОШ!
Спасибо огромное! Это Гениально!

Постоянно сталкиваюсь с необходмостью распараллеливания вычислений на Node.
Основной аспект, который мне необходим — многопоточная обработка очередей сообщений.
Пожалуйста, скажи, правильно ли я понимаю, что если я возьму Neon, то смогу, например, засунуть в него Worker'ы, разгребающие приходящие в очередь сообщения, и это потенциально будет многопоточно и потокобезопасно?
Сейчас я это реализую через require('child_process').[fork||spawn](), или через require('cluster').
Но очень хочется чего-нибудь более понятного для нубов, и более производительного.
Автор, если что — sorry за вопросы, я понимаю что это был перевод.
Просто у Вас так получилось проникнуться контекстом, что создалось ощущение полного погружения.
Спасибо! Но и автору можно отсыпать респекта — все контакты есть :)
Безусловно, уже сделано. :)
разгребающие приходящие в очередь сообщения, и это потенциально будет многопоточно и потокобезопасно?

Не автор но отвечу. Да, но — javascript блокируется на время исполнения rust-кода — это цена безопасности. так что увы и ах — но не везде это применимо. На очередь сообщений — точно, ибо обычно там важно время отклика. Тут, мне кажется без кластера не обойтись.
А обратные вызовы он разве не умеет?
эээ… не знаю. Я, признаться, еще не игрался — увидел, обрадовался и перевел. Пощупать отложил на выходные.
Спасибо, ясно, буду думать дальше как теперь ежа с ужом.
Вам бы, да в Go
Эо клево.
Надо попробовать, насколько геморройно это на Windows, потому что C++-расширения — это боль: поставь питон, да не той версии, пропиши системную переменную, поставь студию, пропиши еще парочку переменных, передай параметр в npm install.
Спасибо, очень интересно. На прошлой неделе на конференции Ulcamp Winter как раз мельком упоминали Neon и Rayon.
Я одного не понял — зачем в конструкции Node + Rust нужен Node?
что не так с нодой?
Тсс. Это такая военная хитрость. Сначала предлагаешь экстеншены на neon/rust-cpython и т.д. А потом, хлоп, и в node проекте 90% кода — rust.
На моей машинке Rust-овская версия отрабатывает за 80-85ms

Это чистая "Rust-овская версия" или уже с бриджем из ноды? Интерeсно какой оверхэд на вызов Rust методов?
вот здесь: https://blog.risingstack.com/how-to-use-rust-with-node-when-performance-matters/ рассматривают процесс более низкоуровнево и заодно отмечают что вообще то вызов дорогой:

There's a significant cost in FFI calls, so make them worth it. (Nathan Rajlich)

но насколько — не говорится. В общем мерять надо.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации