gavr_sas
3 окт, 25 окт упс Вообщем в прошлом посте разобрал шо васм из себя представляет в плане рантайма, теперь сам язык. Ну так то это байткод, но как и у машинного кода есть ассемблер для удобного чтения человеками, так и у васм байткода есть WAT(?) — WebAssembly…
Запуск
Пора бы как то это вызвать, для простоты вызывать будем пока что из js, для этого функции нужно дать имя, заодно обозначив как экспортируемую
В js ничего интересного фетчим Wasm как обычный файл, загоняем в
Это возможно из-за того что Wasm структурный, то есть в нем нет всяких джампов\эксепшонов(пока) изза которых код может прыгать в неизвестных направлениях, поэтому мы можем спокойно компилировать его строчка за строчкой даже если еще не получили весь файл, однопроходной интерпретацией также славилась луа.
Пора бы как то это вызвать, для простоты вызывать будем пока что из js, для этого функции нужно дать имя, заодно обозначив как экспортируемую
(func (export "select_simple") (result i32)И вот ее уже можно вызывать из js
(i32.add
(i32.const 1)
(i32.const 2))
)
await WebAssembly.instantiateStreaming(fetch(url)).then((result) => {
const { select_simple } = result.instance.exports;
let sas = result.instance.exports.select_simple()
console.log(sas);
});
И вот мы получили заветные 3 в консоле.В js ничего интересного фетчим Wasm как обычный файл, загоняем в
instanceStreaming, что означает стрим компиляцию прямо пока получаем файл, это при скорости интернета в 20 Мбит экономит 2Х времени по сравнению с тем, если бы мы сначала получили весь файл, а потом его скомпилировали. Это возможно из-за того что Wasm структурный, то есть в нем нет всяких джампов\эксепшонов(пока) изза которых код может прыгать в неизвестных направлениях, поэтому мы можем спокойно компилировать его строчка за строчкой даже если еще не получили весь файл, однопроходной интерпретацией также славилась луа.
gavr_sas
Запуск Пора бы как то это вызвать, для простоты вызывать будем пока что из js, для этого функции нужно дать имя, заодно обозначив как экспортируемую (func (export "select_simple") (result i32) (i32.add (i32.const 1) (i32.const 2)) )…
# Аргументы
Во первых это длиннющее
Во первых это длиннющее
(export "add") в объявлении функции выглядит так себе, его можно вынести в отдельное (export "add" (func $add)) оставив в самой функции только имя $add
(moduleСкладывать константы не интересно, пора добавить аргументы, делается это также как с возвращаемым значением, только вместо result будет param, и аргументам можно давать имена через $
(export "add" (func $add))
(func $add (result i32)
...
)
)
(func $add (param $a i32) (param $b i32) (result i32)Отлично, осталось заменить наши константы на получение этих параметров:
...
)
(func $add (param $a i32) (param $b i32) (result i32)В js теперь:
(i32.add
(local.get $a)
(local.get $b))
)
console.log(add(1, 2));
Получаем заветные 3
#wasmЗабавно, но компутер вижон GPT 4, которое вроде не должно быть подвержено иллюзиям которые следуют из устройства нашего мозга, все таки им подвержен
Самый простой dumb pixel peeping software не купится на Munker-White иллюзию с цветами, но GPT 4 почему то ведет себя как человек
Еще одна с глазами, оба серые
Самый простой dumb pixel peeping software не купится на Munker-White иллюзию с цветами, но GPT 4 почему то ведет себя как человек
Еще одна с глазами, оба серые
This media is not supported in your browser
VIEW IN TELEGRAM
механический заменитель пчел #machine
👍1
Forwarded from opennet.ru
iLeakage - метод эксплуатации уязвимости в CPU Apple через браузеры на базе движка WebKit https://opennet.ru/60000/
www.opennet.ru
iLeakage - метод эксплуатации уязвимости в CPU Apple через браузеры на базе движка WebKit
Исследователи из Технологический института Джорджии, Мичиганского университета и Рурского университета разработали технику атаки iLeakage, позволяющую эксплуатировать уязвимость в ARM-процессорах Apple серий "A" и "M" через открытие в браузере специально…
Yay, первый биндинг к внешней экосистеме готов.
Украл семантику из внезапно Crystal
Почти везде это взаимодействие сделано через прагмы аля
Этим мне понравилось решение Crystal, где один бинд как в бы в блоке кода
Украл семантику из внезапно Crystal
Почти везде это взаимодействие сделано через прагмы аля
proc printf(formatstr: cstring) {.header: "<stdio.h>", importc: "printf".}
Но мне хочется решение чтоб не надо было ставить прагму над каждым, в ниме это решается через push, но чтото я не видел чтобы его использовали вместе с importc. Этим мне понравилось решение Crystal, где один бинд как в бы в блоке кода
lib CОстается проблема с геттерами сеттерами, в смолтолке нет разницы по синтаксису между доступом к полу и вызовом метода
fun cos(value : Float64) : Float64
end
file.isDirectory и file.isDirectory() оба будут file isDirectory, поэтому теперь нужно изобрести способ помечать их, тут то наверное сделаю прагмы, вместе с push как в ниме.
gavr_sas
Yay, первый биндинг к внешней экосистеме готов. Украл семантику из внезапно Crystal Почти везде это взаимодействие сделано через прагмы аля proc printf(formatstr: cstring) {.header: "<stdio.h>", importc: "printf".} Но мне хочется решение чтоб не надо было…
Ну вот, придумал как выкрутиться без прагм и тем более push pop прагм,
Просто еще один необязательный параметр для Bind, помойму идеально, и решена проблема что одно свойство накладывается на много стейтментов, и никакого нового концепта не вносит
Просто еще один необязательный параметр для Bind, помойму идеально, и решена проблема что одно свойство накладывается на много стейтментов, и никакого нового концепта не вносит
Хороший пример того, насколько отстойным является поиск в Google в 2023 году. Поиск по дословной строке не работает без дополнительных поисковых запросов, даже если они явно есть в их индексе.