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

แชร์
ฝัง
  • เผยแพร่เมื่อ 22 ก.ย. 2024
  • Полина Гуртовая на митапе Tver.io JavaScript Meetup 19 марта 2020.
    Совсем не хардкорное введение в WebAssembly.
    Напишем немного кода для стековой виртуальной машины, заглянем под капот v8.
    И, чтобы нам точно было не скучно, добавим немного C++ и Rust.
    Ссылка на материалы: github.com/Hel...

ความคิดเห็น • 8

  • @rustonelove
    @rustonelove 4 ปีที่แล้ว +3

    Какой же поток. Не знаю для кого пишу, но всё же.

  • @rustonelove
    @rustonelove 4 ปีที่แล้ว +3

    36:00 - ну подумаешь какие-то 64 битные инты. Кому они нужны. Мы ведь на жабаскрипте написать можем, конечно. И совсем asm.js не потому по жопе пошёл, что не смоглось никак в жабаскрипт добавить нативные типы. Потому как код должен точно так же и исполняться и как жаваскрипт. Поэтому мы, конечно же, добавить 64 битный инт можем, но тогда семантика программ в разных средах изменится, что поломает asm.js. И вот из-за таких ограничений asm.js и сдох.

  • @rustonelove
    @rustonelove 4 ปีที่แล้ว +2

    37:00 - какая ещё, нахрен, асинхронность в васме? Никакой асинхронности не существует и никакой поддержки для неё не нужно.

    • @andykud63
      @andykud63 2 ปีที่แล้ว

      Девушка верит в то, что говорит. Это нормально.

  • @rustonelove
    @rustonelove 4 ปีที่แล้ว +2

    >Бинарный формат, виртуальная машина
    Это полная чушь. В реальном мире всё бинарное. И никакая виртуальная машина ничего не означает. Существует множество 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 ปีที่แล้ว +1

      Дерево у него ущербная структура)))