С чего начать изучение WebAssembly
Несколько месяцев назад я поставил перед собой задачу изучить WebAssembly на сколько это возможно. Это был трудный путь и я думаю, что справился. Это была одна из самых сложных технологий веба, которые я встречал. И одна из самых интересных. Возможности и задачи, которые стоят перед WebAssembly, поражают. На мой взгляд, это именно тот Web, которого мы все ждали.
WebAssembly сравнительно молодая технология, рабочая группа только год назад поняла что она хочет от WebAssembly и договорилась о первом прототипе. В марте этого года в хроме и огнелисе появилась первая рабочая версия— MVP — и настало время экспериментов. Что такое WebAssembly? Это новый бинарный формат исполняемых файлов для веба. За счёт своей двоичной природы такие файлы обычно более компактны, чем текстовые JS файлы.
Так с чего же простому разработчику начать изучение WebAssembly? У меня есть для вас немного ссылок.
Думаю начать стоит издалека. В этом интервью Брендан Айк на правах создателя javascript рассказывает о появлении js, его проблемах и о предпосылках появления WebAssembly. Это интервью будет хорошей отправной точкой для путешествия в мир WebAssembly и создаст (я надеюсь) первое впечатление и понимание технологии.
MDN продолжает оставаться одной из самых лучших документаций. Коллекция статей про WebAssembly расскажет про внешнее JS API, а также объяснит зачем вообще нужен WebAssembly, покажет как собирать WebAssembly и расскажет про внутреннее устройство бинарных файлов.
Документация проекта находится на сайте webassembly.org, которая в свою очередь хостится на Github Pages. Она по прежнему остаётся главным источником информации про WebAssembly. Вам ещё не раз предстоит заглянуть сюда в поисках объяснений формата файлов, поиска языковых конструкций или JS API.
Это именно то место, куда вам нужно обращаться за форматом команд. В реальном мире вам не придётся писать на текстовом представлении WebAssembly, но если вы всё же решитесь, это одна из тех ссылок которая вам поможет детально разобраться что да как.
Огромный список различных ресурсов про WebAssembly. Здесь и статьи, и проекты, и выступления. Есть даже ссылки на выступления на русском языке. В общем, если вам нужна какая-то информация или проект, рекомендую заглянуть сюда. Скорее всего тут вы найдёте для себя всё что необходимо.
Если вам надоело сидеть и читать статьи, настоятельно рекомендую попрактиковаться. Именно с этого я и начал. Создайте у себя на гитхабе репозиторий webassembly-examples и заливайте туда все ваши проекты и примеры. Не забывайте комментировать, это пригодится (проверено на себе). Вот, кстати, список моих примеров reklatsmasters/webassembly-examples.
Далее я расскажу о нескольких тулзах, без которых вы не сможете разрабатывать на WebAssembly. Кроме прочтения документации, настоятельно рекомендую поставить все эти утилиты.
Официальный список утилит для работы WebAssembly от разработчиков стандарта. Основные утилиты, которые вам понадобятся, это wat2wasm и wasm2wat . Они транслируют бинарный формат в текстовое представление и обратно. Кроме того, в readme проекта находятся ссылки на онлайн демо — вы сможете компилировать WebAssembly прямо в браузере! Огромное количество информации по текстовому формату вы можете получить из папки с тестами этого проекта. Это, на мой взгляд, одна из самых лучших документаций. Лично я с глобальными переменными и работой с памятью смог разобраться только благодаря этим тестам.
Мини-компилятор WebAssembly от одного из разработчиков WebTorrent. Именно его проекты по WebAssembly помогли мне в изучении. Эта утилита работает в nodejs и требует wat2wasm из предыдущего шага. Она делает ровно то, что вам нужно — генерирует обвязку для WebAssembly. Всё что вам нужно, это подключить в nodejs сгенерированный js файл и начать экспериментировать. Вам не нужно беспокоиться об асинхронности, WebAssembly модуль подключится синхронно, что очень удобно. Мои примеры по WebAssembly как раз требуют эту утилиту, я с неё начинал и вам рекомендую.
Ещё один официальный набор утилит для сборки WebAssembly. Содержит утилиты для сборки asm.js в WebAssembly и обратно. Также содержит утилиты для оптимизации, используется, в основном, внутри emscripten и устанавливается им же.
Пожалуй, одна из самых известных частей инфраструктуры WebAssembly. Начинал как компилятор C/C++ в asm.js, сейчас же поддерживает компиляцию в WebAssembly. Огромный проект, который обязателен к изучению и использованию. Если вы захотите собирать С/С++ программы в WebAssembly, рекомендую это делать именно с помощью emscripten. Не забудьте подписаться, чтоб не пропустить статьи про сборку и оптимизацию проектов на emscripten.
Именно благодаря LLVM мы можем собирать любой язык в WebAssembly. Например, когда FreePascal закончит портирование своего компилятора на LLVM, станет возможным собирать ваши школьные программы на паскале в WebAssembly и запускать в вебе. LLVM — это универсальная инфраструктура для построения компиляторов. Вам не нужно уметь делать свои компиляторы. Просто прочитайте что это такое, а также изучите все утилиты, которые идут в поставке, они пригодятся для будущего дебага ваших приложений. Загляните в папку emscripten, он уже всё установил за вас.
Думаю, на первое время хватит. Главное, что нужно при изучении это практика. Не бойтесь ошибаться и не прекращайте искать ответы.