Size: a a a

WebAssembly — русскоговорящее сообщество

2021 February 24

e

egoarka in WebAssembly — русскоговорящее сообщество
ну кода который бы хотел на голанге реализовать по подобию раста
источник

AT

Alexander Tchitchigi... in WebAssembly — русскоговорящее сообщество
egoarka
если времени не жалко, то раст
иначе го
* если времени не жалко, то го, иначе раст
источник

f

folex in WebAssembly — русскоговорящее сообщество
egoarka
ну кода который бы хотел на голанге реализовать по подобию раста
Ну например из такой вот функции

#[fce]
pub fn greeting(name: String) -> String { .. }

генерируется вот такой код
pub unsafe fn __fce_generated_wrapper_func_greeting(arg_0: u32, arg_1: u32) {
   let converted_arg_0 = String::from_raw_parts(arg_0 as _, arg_1 as _, arg_1 as _);
   let result = greeting(converted_arg_0);
   fluence::internal::set_result_ptr(result.as_ptr() as _);
   fluence::internal::set_result_size(result.len() as _);
   std::mem::forget(result);
}


Берет и создает строку из указателя и размера, вызывает функцию greeting, и записывает результат в глобальную переменную. Затем деаллоцирует промежуточный результат.


Это я сделал cargo --expand --target wasm32-wasi вот тут https://github.com/fluencelabs/fce/tree/master/examples/greeting

Интерфейс типы там вот такие при этом
https://gist.github.com/folex/7997cb7b3eadc151616da40c8a34bec2
источник

A

Anon in WebAssembly — русскоговорящее сообщество
Alexander Tchitchigin
* если времени не жалко, то го, иначе раст
Мне много в Kubernetes/Agones лезть придется, по этому тут не так всё тривиально.
источник

AT

Alexander Tchitchigi... in WebAssembly — русскоговорящее сообщество
Anon
Мне много в Kubernetes/Agones лезть придется, по этому тут не так всё тривиально.
Сигнал поменять работу? 😂
источник

f

folex in WebAssembly — русскоговорящее сообщество
оффтопите :)
источник

e

egoarka in WebAssembly — русскоговорящее сообщество
folex
Ну например из такой вот функции

#[fce]
pub fn greeting(name: String) -> String { .. }

генерируется вот такой код
pub unsafe fn __fce_generated_wrapper_func_greeting(arg_0: u32, arg_1: u32) {
   let converted_arg_0 = String::from_raw_parts(arg_0 as _, arg_1 as _, arg_1 as _);
   let result = greeting(converted_arg_0);
   fluence::internal::set_result_ptr(result.as_ptr() as _);
   fluence::internal::set_result_size(result.len() as _);
   std::mem::forget(result);
}


Берет и создает строку из указателя и размера, вызывает функцию greeting, и записывает результат в глобальную переменную. Затем деаллоцирует промежуточный результат.


Это я сделал cargo --expand --target wasm32-wasi вот тут https://github.com/fluencelabs/fce/tree/master/examples/greeting

Интерфейс типы там вот такие при этом
https://gist.github.com/folex/7997cb7b3eadc151616da40c8a34bec2
ну надо искать какой то кодген для голанга, не подскажу
источник

f

folex in WebAssembly — русскоговорящее сообщество
egoarka
ну надо искать какой то кодген для голанга, не подскажу
ну нам и руками бы подошло сначала
источник

AT

Alexander Tchitchigi... in WebAssembly — русскоговорящее сообщество
folex
Ну например из такой вот функции

#[fce]
pub fn greeting(name: String) -> String { .. }

генерируется вот такой код
pub unsafe fn __fce_generated_wrapper_func_greeting(arg_0: u32, arg_1: u32) {
   let converted_arg_0 = String::from_raw_parts(arg_0 as _, arg_1 as _, arg_1 as _);
   let result = greeting(converted_arg_0);
   fluence::internal::set_result_ptr(result.as_ptr() as _);
   fluence::internal::set_result_size(result.len() as _);
   std::mem::forget(result);
}


Берет и создает строку из указателя и размера, вызывает функцию greeting, и записывает результат в глобальную переменную. Затем деаллоцирует промежуточный результат.


Это я сделал cargo --expand --target wasm32-wasi вот тут https://github.com/fluencelabs/fce/tree/master/examples/greeting

Интерфейс типы там вот такие при этом
https://gist.github.com/folex/7997cb7b3eadc151616da40c8a34bec2
Это всё-таки конкретно WASI тема, а не Interface Types.
WASI-биндинги или что-то на Go уже искали?
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
Alexander Tchitchigin
Это всё-таки конкретно WASI тема, а не Interface Types.
WASI-биндинги или что-то на Go уже искали?
причём тут wasi вообще?
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
в общем, вопрос скорее про то, можно ли на го как-то кодогенерацию делать любую
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
но ответ как будто нет
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
кстати, а wasi действительно в tinygo не поддерживаются?
источник

DM

Dmitry M in WebAssembly — русскоговорящее сообщество
Mikhail Voronov
кстати, а wasi действительно в tinygo не поддерживаются?
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
ух, а его ещё без js же не скомпилишь?
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
в смысле, в просто один wasm файл
источник

A

Anon in WebAssembly — русскоговорящее сообщество
Alexander Tchitchigin
Сигнал поменять работу? 😂
Я сам это выбрал - теперь чувствую себя как тот чел с завода запихавший руку в станок.
Но кста если глянуть на тот же бомжхантер, то ~1200 вакансий Golang против ~120 у Rust. Рынок труда жесток и беспощаден.

Так или иначе оба языка прекрасно компилятся в Wasm, и если учесть что TinyGo прожевывает LLVM, то по перформансу в Wasm по идее отставание будет небольшое. Другой вопрос это GC который интегрировать собираются в Wasm, Алон Закай говорил что в Rust применение этой штуковины будет не самым эффективным инструментом.
источник

DM

Dmitry M in WebAssembly — русскоговорящее сообщество
скомпилишь, но не всё будет работать. Там только fd_write для вывода stdout есть
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
Dmitry M
скомпилишь, но не всё будет работать. Там только fd_write для вывода stdout есть
хм, а там же emscripten компилится это?
источник

AT

Alexander Tchitchigi... in WebAssembly — русскоговорящее сообщество
Mikhail Voronov
но ответ как будто нет
источник