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

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

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

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

21 ответов

10 просмотров

Скорее всего вы не сильно хорошо смотрели на 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- Автор вопроса
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- Автор вопроса
Arelav
Ну вопрос просто что выбрать

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

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

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

Нет. 😁

Alexander Chichigin
Нет. 😁

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

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

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

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

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

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
How to create an OS in C? what to study?
Linus
18
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
а как бы вылезти из ИО, что то типа IO -> Ether или в какую сторону смотреть ? что то туплю
Fedor
8
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Карта сайта