Комментарии 4
Вначале подумал что это решение моих проблем, но потом внимательней изучил и понял что - нет, мне не поможет.
Мне нужно вызывать ряд GPU-воркеров (GPU-ускоренные операции, индексатор с пре-тренировкой, embed-модели, llm-модели) из bun. Но поскольку bun до сих пор не работает с native-процессами, сейчас приходится поднимать отдельные node-воркеры и в них запускать нужные native. Но и там проблемы с зависанием всей native-памяти в процессе (поэтому воркеры “одноразовые” на каждую задачу).
Хотелось бы, конечно, избежать overhead и “зоопарка”, но перенос всего этого прямо в bun через ваше решение в моём случае невозможен. Наверное только bun:ffi подойдёт, да и то - как только он чуть уменьшит свою “экспериментальность”.
вы можете написать сишный модуль под ноду и делать, что хотите
Добрый вечер. Спасибо за отзыв.
Немного отступлю, изоляции процессов сейчас действительно нет. Изначально, как я говорил выше, проект задумывался под webview специфику: на macOS WKWebView обязан жить на главном потоке внутри NSApplication, а состыковкой такого цикла с js циклом занимается модуль bffi_event_loop с блокирующим run() и пошаговым pump(). Отсюда и однопроцессная архитектура: если нативный код падает, падает весь Bun.
Ваш комментарий подсказал, чего в bffi не хватает, чтобы закрыть вашу проблему. В планах добавить изоляцию процессов (натив работает в отдельном перезапускаемом процессе, его падение не трогает Bun, а VRAM гарантированно возвращается при рестарте :) ) и доработать менеджмент жизненного цикла хэндлов.
В целом, уже сейчас длинные вызовы можно не гонять через блокировку, async задачи уходят в нативный пул воркеров и возвращаются промисами, а генерация LLM стримится как async итератор.
Также, если несложно, подскажите, что у вас за стек? llama.cpp, ONNX или что то своё на CUDA? У большинства таких библиотек есть C API, поэтому в целом можно сделать обёртка на Rust. Оставьте сообщение в issues или discussions в репозитории gh: помогу набросать пример обёртки под вашу задачу, а если он окажется полезен и другим, добавим его в bffi-examples.
Надеюсь я правильно вас понял)
Да, мне так или иначе вызывать свой процесс (одноразовый), главное чтобы был минимальный overhead и это не было отдельное приложение (а то ещё надо проверять/запрашивать разрешения для запуска). У меня одновременно самописные GPU-кернелы (CUDA/METAL/VULAKN) и воркеры llama.cpp/trt/tvm/openvino (mlx/coreml на мак). На zig-версии уже всё собрано сразу, на открытую TS-версию только планы строю.

Почему я пишу Bun‑native альтернативу napi‑rs