gavr_sas – Telegram
gavr_sas
219 subscribers
2.69K photos
185 videos
29 files
790 links
JB пропаганда
Download Telegram
gavr_sas
3 окт, 25 окт упс Вообщем в прошлом посте разобрал шо васм из себя представляет в плане рантайма, теперь сам язык. Ну так то это байткод, но как и у машинного кода есть ассемблер для удобного чтения человеками, так и у васм байткода есть WAT(?) — WebAssembly…
Запуск
Пора бы как то это вызвать, для простоты вызывать будем пока что из js, для этого функции нужно дать имя, заодно обозначив как экспортируемую
  (func (export "select_simple") (result i32)
(i32.add
(i32.const 1)
(i32.const 2))
)

И вот ее уже можно вызывать из js
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
(export "add" (func $add))
(func $add (result i32)
...
)
)

Складывать константы не интересно, пора добавить аргументы, делается это также как с возвращаемым значением, только вместо result будет param, и аргументам можно давать имена через $
(func $add (param $a i32) (param $b i32) (result i32)
...
)

Отлично, осталось заменить наши константы на получение этих параметров:
(func $add (param $a i32) (param $b i32) (result i32)
(i32.add
(local.get $a)
(local.get $b))
)
В js теперь: console.log(add(1, 2));
Получаем заветные 3
#wasm
xdd
Забавно, но компутер вижон GPT 4, которое вроде не должно быть подвержено иллюзиям которые следуют из устройства нашего мозга, все таки им подвержен

Самый простой dumb pixel peeping software не купится на Munker-White иллюзию с цветами, но GPT 4 почему то ведет себя как человек

Еще одна с глазами, оба серые
Всегда юзал реляционки, и это выглядит действительно как пиздец, json запросы? надеюсь там есть какой нибудь дсльчик, это больше похоже на AST какого то языка чем на язык запросов
кыт
🤯3😁1
This media is not supported in your browser
VIEW IN TELEGRAM
механический заменитель пчел #machine
👍1
Во первых 600000 гет, во вторых название какой то троллинг, iLeakage xd
Yay, первый биндинг к внешней экосистеме готов.
Украл семантику из внезапно 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 как в ниме.
На ютубе новый прикол, мне пока не попадался
Literally 1984
🤯1
gavr_sas
Yay, первый биндинг к внешней экосистеме готов. Украл семантику из внезапно Crystal Почти везде это взаимодействие сделано через прагмы аля proc printf(formatstr: cstring) {.header: "<stdio.h>", importc: "printf".} Но мне хочется решение чтоб не надо было…
Ну вот, придумал как выкрутиться без прагм и тем более push pop прагм,

Просто еще один необязательный параметр для Bind, помойму идеально, и решена проблема что одно свойство накладывается на много стейтментов, и никакого нового концепта не вносит
Подправил парсер, чтобы return без экспрешона был возможен, выглядит конечно странно, но ранний возврат из void функций нужен как никак
Хороший пример того, насколько отстойным является поиск в Google в 2023 году. Поиск по дословной строке не работает без дополнительных поисковых запросов, даже если они явно есть в их индексе.