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

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

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

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

21 ответов

35 просмотров

Скорее всего вы не сильно хорошо смотрели на 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
А отрицательный?

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

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта