gavr_sas – Telegram
gavr_sas
219 subscribers
2.68K photos
185 videos
29 files
789 links
JB пропаганда
Download Telegram
Визуализация по данным Нью Йоркского музея современного искусства, размер кружка — количество работ, после 65 еще живы и ложатся на ось абсцыссс
https://gnykka.io/moma-artists
gavr_sas
Почему только числа? В процессоре тоже только числа, все логично, привязавшись к какой-нибудь конкретной реализации типов вроде String получится менее универсально, может для скорости мы хотим аски таблицу, а у нас токо UTF-8(в JVM), так что хотите строки…
3 окт, 25 окт
упс
Вообщем в прошлом посте разобрал шо васм из себя представляет в плане рантайма, теперь сам язык.
Ну так то это байткод, но как и у машинного кода есть ассемблер для удобного чтения человеками, так и у васм байткода есть WAT(?) — WebAssembly text format

Сейчас каждый wasm бинарь содержит в себе модуль, который импортирует и экспортирует функции.
Рассмотрим на примере функции складывающей 2 числа, которую мы будем постепенно улучшать:
(module
(func (result i32)
i32.const 1
i32.const 2
i32.add
)
)

(result i32) - тип возвращаемого значения

Ретурна нет, все по модному, последнее значение есть возвращаемое, тут мы положили на стек через i32.const 2 числа, и вызвали add которая 2 числа со стека берет и кладет обратно результат.
Также можно заметить что все это похоже на лисп, и действительно WAT сделан на S-expressions, тк кк человекам сложно держать в голове стек, все функции можно также вызывать в виде S-expressions, конечно это просто синтаксический сахар:

(i32.add 
(i32.const 1)
(i32.const 2))

Количество аргументов строго фиксировано, поэтому чтобы сложить 3 числа придется сделать 2 сложения, в отличии от лиспов:
(i32.add 
(i32.const 1)
(i32.add
(i32.const 1)
(i32.const 2)))
#wasm
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 году. Поиск по дословной строке не работает без дополнительных поисковых запросов, даже если они явно есть в их индексе.