185 похожих чатов

Не уверен что это подходящий чату вопрос, но какой лучше

wasm runtime встраивать в плюсовый код для экспорта функций из wasm (udf/plugin like функциональность)?

Из вариантов которые я посмотрел
v8 — очень здоровый, передача аргументов через gc, и в целом скорее интеграция через js (нет i64 типов по сути)
wasm3 — только интерпретатор что как то печально
wamr — вроде то что нужно, но не уверен в его надежности
wasmtime, wasmer — выглядят довольно похоже и вроде популярны, из минусов это раст и не очень понятно насколько комфортно это будет интегрировать в плюсовый проект (ну через c-api). Еще у wasmer несколько бекендов

21 ответов

38 просмотров

Скорее всего вы не сильно хорошо смотрели на V8 и увидели только какой-то высокоуровневый API вперемешку с JS, в то время когда там есть целая иерархия апишек/интерфейсов разного уровня (вплоть до того что можно вручную создать инстанс класса который парсит wasm а потом инстанс класса турбофан-движка с нужными оптимизациями и после прогона получить буффер с нативым кодом которого дальше можно запустить) Вот например смотрели на это - https://stackoverflow.com/questions/53925972/call-webassembly-from-embedded-v8-without-js ?

Arelav- Автор вопроса

// module_instance_exports.add(77, 88) args_type add_args{Int32::New(isolate, 77), Int32::New(isolate, 88)}; Local<Int32> adder_res = module_instance_exports ->Get(context, String::NewFromUtf8(isolate, "add")) .ToLocalChecked().As<Function>() ->Call(context, context->Global(), 2, add_args) .ToLocalChecked().As<Int32>(); Это по сути js api

Arelav- Автор вопроса
Богдан
Скорее всего вы не сильно хорошо смотрели на V8 и ...

То есть исполнение будет безусловно wasm, но работать с этим как с wasm по сути как будто нельзя. Только через js

Arelav
// module_instance_exports.add(77, 88) args_ty...

есть еще некий fast api - https://github.com/nodejs/node/blob/main/deps/v8/include/v8-fast-api-calls.h

Arelav- Автор вопроса
Богдан
есть еще некий fast api - https://github.com/nodej...

Мне показалось что это во первых что-то недоделанное, во вторых скорее в обратную сторону вызов из js нативного кода. Но я могу ошибаться. В целом по определенным причинам я рад сейчас бы использовать v8 если бы было можно сделать что-то похожее на то что могут другие рантаймы в плане встраивания, но пока сложилось впечатление что нельзя

https://00f.net/2023/01/04/webassembly-benchmark-2023/ Не только бенчмарк, но и список всех основных реализаций Wasm на текущий момент.

Arelav- Автор вопроса
Alexander Chichigin
https://00f.net/2023/01/04/webassembly-benchmark-2...

Да я смотрел. А потом видел такое https://cobweb.cs.uga.edu/~wenwen/papers/iiswc2022.pdf И как то оно все biased. Например, у автора по ссылке, нет кода бенчмарков публично, только данные :( wamr понравился тем что бинарь маленький получился. По поводу wasmer я читал это утверждение, но в чем именно заключаются отличия от других рантаймов с точки зрения встраивания я не нашел инфы.

Arelav
Да я смотрел. А потом видел такое https://cobweb.c...

Я бы код бенчмарков вот тут поискал: https://github.com/jedisct1/libsodium/tree/master/test/default 😉

Arelav
Да я смотрел. А потом видел такое https://cobweb.c...

Also https://github.com/wasmerio/wasmer/tree/master/lib/c-api JFYI

Arelav
Мне показалось что это во первых что-то недоделанн...

Я когда-то раньше изучал исходный код V8 и у меня есть уверенность что c v8 можно получить все что что хочешь (например напрямую без жс скомпилировать wasm в нативный код и напрямую взаемодействовать с ним с нулевым с-calling-conv оверхедом и без всякого жс) просто это потребует большего погружения в исходный код (изучение хедеров внутренних классов, юнит-тестов, дебаг/трейсинг для понимания как оно все взаимодействует и т.д) Я уже кстати думал про это и у меня есть даже план заняться этим когда будет время - а именно есть идея сделать форк v8 и выпилить все что связано c жс (то есть оставить только wasm-парсер и turbofan c x64/arm бэкендами) и таким образом сделать минимальный wasm-aot компилятор и получить некого конкурента другим aot-компиляторам (wasmtime/wasmer/etc)

Arelav- Автор вопроса
Alexander Chichigin
Also https://github.com/wasmerio/wasmer/tree/maste...

Ну оно у всех перечисленных есть кроме v8 по сути

Arelav- Автор вопроса
Богдан
Я когда-то раньше изучал исходный код V8 и у меня ...

Может быть, но тут вопрос в том что это нужно для рабочих нужд и желания заниматься поддержкой патчей да и в целом погружением внутрь v8 не хочется

Arelav
Ну оно у всех перечисленных есть кроме v8 по сути

У Wasmtime я не видел, но я и не смотрел давно... Раз у всех есть — я тогда не очень понимаю сути Вашего вопроса?

Arelav- Автор вопроса
Arelav
Ну вопрос просто что выбрать

Я уже предложил выбрать Wasmer. 🤷‍♀️

Arelav- Автор вопроса
Arelav
Ну вопрос просто что выбрать

Наверняка у каждого будут свои нюансы, но хочется как то на менее неприятные попасть

Нет. 😁

Alexander Chichigin
Нет. 😁

А отрицательный?

Konstantin Romanov
А отрицательный?

Тоже нет. Никакого не было. 😊

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта