Тёмный

Полина Гуртовая - Wasm 101 

TverIO
Подписаться 1,4 тыс.
Просмотров 795
50% 1

Полина Гуртовая на митапе Tver.io JavaScript Meetup 19 марта 2020.
Совсем не хардкорное введение в WebAssembly.
Напишем немного кода для стековой виртуальной машины, заглянем под капот v8.
И, чтобы нам точно было не скучно, добавим немного C++ и Rust.
Ссылка на материалы: github.com/Hel...

Опубликовано:

 

30 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 8   
@rustonelove
@rustonelove 4 года назад
36:00 - ну подумаешь какие-то 64 битные инты. Кому они нужны. Мы ведь на жабаскрипте написать можем, конечно. И совсем asm.js не потому по жопе пошёл, что не смоглось никак в жабаскрипт добавить нативные типы. Потому как код должен точно так же и исполняться и как жаваскрипт. Поэтому мы, конечно же, добавить 64 битный инт можем, но тогда семантика программ в разных средах изменится, что поломает asm.js. И вот из-за таких ограничений asm.js и сдох.
@rustonelove
@rustonelove 4 года назад
Какой же поток. Не знаю для кого пишу, но всё же.
@rustonelove
@rustonelove 4 года назад
37:00 - какая ещё, нахрен, асинхронность в васме? Никакой асинхронности не существует и никакой поддержки для неё не нужно.
@andykud63
@andykud63 2 года назад
Девушка верит в то, что говорит. Это нормально.
@rustonelove
@rustonelove 4 года назад
>Бинарный формат, виртуальная машина Это полная чушь. В реальном мире всё бинарное. И никакая виртуальная машина ничего не означает. Существует множество vm с разными свойствами и большинство из них вообще не обладают свойствами васма. Определение ничего не определяет. >можно запихнуть память Везде и всюду нужно засовывать память. Никакого отношения к "жаваскриптовому" массиву не имеет и никакой типизацией не обладает. Это так даже на уровне самого жаваскрипта, где "массивы" просто вьюшки для памяти(буферов). >есть параметры, есть только чиселки. Строго типизированы Поздравляю, как и в любом другом статическом языке. Потому как в железяке ничего, кроме чиселок, нет. >объекты первого рода Никаких родов в реальности не существует. >бинарное не очень хорошо читается. Вот показано бинарное Это не бинарное. Это hex-мусор. Это такое же текстовое представление бинарных данных, причём произвольных. Люди как раз таки очень хорошо читают бинарные данные. Ну которые знакомы с программированием. И именно потому, что бинари в виде hex-дристни никто не представляет. И опять же, о чудо, текстовое преставление - это так же представление бинарных данных. Как и то, что слева. >Эти скобочки Эти скобочки ничего не значат. Служат не только они - это просто самая примитивная форма. И это ничего не значит. Любая программа - это дерево. Конечно, языки чуть сложнее табуретки уже в дерево не влезают и дерево это крайне примитивная и ущербная структура для представления, но всё же. На то оно и ast. >был ast Поздравляю, как и всё остальное. Любой язык так же имеет ast-представление. >со временем превратилась Никуда она не превращалась. Это превращение услышанное где-то - это просто asm.js, который кодировал ~тоже самое, но внутри жаваскрипта. Опять это очередная раст-пропаганда убогая. Зачем брать методички с помойки? >wasm легко парсить Открою ещё большую тайну - его вообще парсить ненужно. >легко разобрать Это свойство любых правильных бинарных данных. Их легко разобрать. А использование текста - это просто следствие того, что в область формировалась изначально для домохозяек. >выигрываете с текстом, лёгкий Любой бинарный формат лёгкий. И выигрывать он может сколько угодно раз. И никакая "лёгкость" вообще ничего не значит. >оно миниатюрно Что угодно обладает этими же свойствами. >wasm исполняется в песочнице Т.е. мы дошли до основной фишки спустя 10 минут. При этом всё остальное - ничего не значит. Потому как общие свойства. Бинарных данных, байткода и т.п.
@rustonelove
@rustonelove 4 года назад
>модули из коробки - это веб Это какая-то чушь. Никакие модули, импорты/экспорты никакого отношения к вебу не имеют. >живёт в песочнице Действительно. Потому как веб - это запуск недоверенного кода. И это отличает веб/wasm от ~всего остального. Потому как обычные vm создаются для запуска доверенного кода. Именно поэтому рассуждения о том, что wasm - это байткод для vm - чушь. Много чего является байткодом и много каких есть vm, но они не обладают этим свойством. >работает быстро Работает он как говно, конечно, потому что эта примитивная стековая дристня. А стековая и примитивная она потому, что это самое примитивное. То, что проходят за партой. Для всего остального нужно какое-то понимание и человеческий капитал, которого нет. Да и зачем это для веба. По поводу быстро. Основные свойства - это возможности и предсказуемость, управляемость. Потому как производительность зависит исключительно от умения программиста, а язык лишь позволяет реализовать а) что он хочет. б) так как он хочет. wasm не особо что-то из этого даёт, но по крайне мере он убирает целый слой скриптухи. Было 10 глухих телефонов стало полтора. >emscripten >rust Просто так, просто пропаганда вливается в уши. Никакого отношения раст к емскриптену не имеет. >когда вы компилируете при помощи компилятора, например gcc. Вы получаете ir, а одно из них llvm Это просто чушь. Вы действительно получаете ir, только проблема тут в следующем. Есть мир С/С++, есть компилятор для них(тот же гцц). Далее возникла проблема - адепту других языков не могут написать компилятор. К тому же в рамках gcc необходима была поддержка других недоязычков. И вот во имя унификации и помощи убогим и отделили фронты. К С/С++ это никакого отношения не имеет. И llvm не является подобным представлением. llvm-ir является, но к гцц он никакого отношения не имеет. Это представление самого llvm. llvm жил и живёт для clang, но совместно с этим позволяет всяким убогим получить компилятор на халяву. Чем и пользуется бездарное дерьмо типа раста. В emscripten действительно входит asm.js бек для llvm, только к тему отношения это не имеет. emscripen вообще не про это и не имеет никакого отношения к вебу, а уж тем более к такому дерьму как раст. emscripen был создан для эмуляции С/С++-окружения в вебе. Т.е. он в вебе эмулирует его(веба) отсутствие. Тебя должен интересовать существующий в llvm wasm-бек/таргет. Который как раз таки никакое окружение в веб не тянет. И наличие которого раст-секта выдаёт за поддержу в расте wasm, которая никакого отношения к расту не имеет. >есть js Никакого js там нет. js там взялся от того, что он сам умеет генерировать биндинги. Ты не можешь собрать сишку в js, потому как js слишком немощен для этого. >binaryen берёт и оптимизирует Полная чушь. Это дерьмо не может что-то оптимизировать, потому как оптимизатор в llvm в сотни раз лучше и обладает куда более полным представлением о изначальном коде и имеет by-design больше возможностей для оптимизации. Эти binaryen-оптимизации в основном для для "ручного" васма, либо васма из под какого-либо генератора, коих сейчас много. >в emscripen используется. Нет, то что он там используется и есть какой-то колхоз-проход - это ничего не значит. Оптимизирует там wasm именно llvm на этапе до llvm. Именно для этого и существует ir, чтобы не оптимизировать отдельно wasm/asm, а делать основную работу над одним "языком", а не для каждого отдельно. >asm.js эффективное подмножество Нихрена. asm.js никакого отношения к жаваскрипту не имеет. Он кодируется внутри него. Далее уже реализация должна вытащить этого asm.js что-то на подобии wasm, скомпилировать и исполнять его. Вот wasm это тот же asm.js, только отвязанный от жаваскрипта. Ну и asm.js не только предсказуемей. "быстрее" - это прямое следствие из предсказуемости. > 300кб Это потому, что мануалы не читаются. emscripen не создан для твоего веба и для тебя. Он создан эмулировать окружение привычное в броузере. Все насрать сколько там будет килобайт. Но об этом я уже говорил выше. > оптимизацию, в бандл Никаких бандлов там нет, никакого отношения всё это не имеет к теме. Это сишные заморочки. > это обвязка, чтобы ваш wasm-файлик заработал Нет, это опять же - полная чушь. emscripen не занимается этим. > это и даёт Правильно, молодец. Только ты можешь ничего из этого в С/С++ не использовать. И emscripen создан прежде всего для эмуляции этого окружения и работы этих api. Запуском С/С++ в отвязки от окружения, что ты и хочешь, он не занимается. И задачи такой никогда не стояло. > rust компилируется Что за бездарная чушь? Никакой раст никуда не компилируется. Раст это огрызок фронта к llvm и "компилируется" он в llvm-ir. А уже этот llvm-ir компилируется, в том числе, и в раст. Всё это воровано у С/С++. > что дальше, что нужно Ничего из этого ненужно. Нужны исключения, нужен гц для возможности использовать ссылки на js-объекты из wasm. симды нахрен никому не нужны - просто примитивная херня с которой все носятся непонятно зачем. >если вы будете использовать emscripen опять чушь. Никакой emscripen использовать ненужно - llvm умеет в wasm, а llvm существует для clang и значит в clang, очевидно, есть это таргет. emscripen нужен для базового С/С++ окружения в броузере. Та мникому нахрен не нужен твой вебпак. И никакой недоязычок раст тебе ничего их этого не даст. Ты там будешь переписывать код под другое окружение.
@artishoo
@artishoo 2 года назад
Дерево у него ущербная структура)))
Далее
ТАРАКАН
00:38
Просмотров 1,2 млн
Андрей Роенко - WebAssembly без купюр
1:00:47