SlideShare uma empresa Scribd logo
1 de 56
Baixar para ler offline
Sergey Rubanov
JavaScript samurai at EXANTE ltd.
Web Assembly
Кратчайшая история web-приложений
• Ajax: A New Approach to Web Applications (18 февраля 2005)
• JIT-компиляция
• v8, Nitro (2008)
• TraceMonkey (2009)
• Chakra (2011)
3
JavaScript как compile target
JavaScript is Assembly Language for the Web (июль 2011)
• Sematic Markup is Dead! Clean vs. Machine-coded HTML
• Part 2 - Madness or just Insanity?
4
Главная проблема
JavaScript —это
сам JavaScript
И вот это
null == 0; // false
null > 0; // false
null >= 0; // true
Math.min() < Math.max(); // false
6
Дальнейшее
развитие
ECMAScript
ограничено
Reserved words
8
Future reserved words
9
Принцип don't
break the Web
asm.js
статически-типизированное подмножество JavaScript
• представлен 21 марта 2013 (поддержка в FireFox 22)
• на Google I/O 2013 было объявлено об улучшенной поддержке asm.js
в Chrome 28 beta
• 7 мая 2015 объявлена поддерживается браузером Microsoft Edge
11
asm.js pipeline
Не предназначен для написания программ человеком, получается с
помощью компиляторов исходного кода в исходный код, таких как
Emscripten
12
код на c
int add1(int i) {
return i + 1;
}
13
код на asm.js
function add1(i) {
i = i|0;
return (i + 1)|0;
}
14
особенности asm.js
• нет сборщика мусора
• нет потоков
• нет разделяемой памяти
• так как это подмножество JS, то
• долгий и ресурсоемкий парсинг
• большой размер конечного кода
• на нем сложно написать web-приложение вручную
15
PNaCl
архитектурно-независимое решение для исполнения нативного кода в
песочнице
• представлен 12 ноября 2013
• основан на NaCl
• компилирует C и C++ код в промежуточное представление
подмножества LLVM с помощью AOT-компилятора
• исполняется в песочнице браузера
16
Особенности PNaCl
изолирован в собственной виртуальной машине и не имеет прямого
доступа к DOM, JS
17
Что насчет JVM?
А может быть...
LLVM?
А что если...
Flash VM?
Web Assembly
a new binary syntax for low-level safe code, initially co-expressive with
asm.js, but in the long run able to diverge from JS’s semantics, in order to
best serve as common object-level format for multiple source-level
programming languages.
Brendan Eich
Он представил Web Assembly в своем блоге 17 июня 2015
“
High-Level Goals
• Определить портативный, эффективный по объему и времени загрузки
бинарный формат как compile-target, который в свою очередь может
быть компилирован для исполнения на околонативной скорости на
разных платформах, включая мобильные платформы и IoT.
27
High-Level Goals
• Описать и имплементировать
• MVP для стандартной функциональности, аналогичной asm.js
• эффективный polyfill для MVP, который позволяет транслировать
wasm в js для запуска в браузерах
• PostMVP, который добавляет несколько значимых фич
• Дополнительные фичи на основе обратной связи и опыта
использования, включая поддержку других языков
28
High-Level Goals
• Интеграция в существующую web-платформу:
• безверсионная разработка, обратная совместимость
• выполняется той же самантической вселенной, что и JavaScript
• предоставлять синхронные вызовы в и из JavaScript
• политика безопасности и правил ограничения домена
• доступ к функциональности браузера через Web API
• определить человеко-понятный текстовый формат, который можно
конвертировать в бинарный формат и обратно
29
High-Level Goals
• WebAssembly должен поддерживать интеграцию не только в браузеры
30
High-Level Goals
• Создать привлекательную платформу
• новый LLVM-бэкенд и сопутствующий порт Clang
• поощрять другие компиляторы и инструменты для использования
WebAssembly как цели компиляции
• предоставить ползезный инструментарий разработки и отладки
31
MVP
• модули
32
Модули WebAssembly
• набор импортов и экспортов
• секция, определяющая линейную память
• секция с кодом
• после MVP— секция debug-информация
• Возможно другие секции в будущем
33
Инстанс модуля содержит
• код из модуля, из которого он был загружен
• линейную память
• полностью разрешенные импорты
• host-specific state (например, reflect экспортов в JS)
• код нескольких модулей, динамически связанных в один инстанс
(когда будет доступно динамическое связывание)
• другие семантически-видимые секции в будущем
34
Линейная память
• memory_size
• load
• store
• grow_memory
35
MVP
• модули
• AST
36
Порядок вычисления AST
Все узлы, отличающиеся от конструкций управления, вычисляются в
том порядке, в котором они представлены в AST.
(i32.add
(set_local $x (i32.const 1))
(set_local $x (i32.const 2)))
37
Ловушки
Если экземпляр прервал работу, то информация об этом
прокидывается во внешнее окружение. В JavaScript окружении,
например, таком как браузер, ловушка вызывает исключение и может
быть увидена в DevTools.
38
Типы
WebAssembly имеет следующие типы значений:
• 32: 32-bit integer
• i64: 64-bit integer
• f32: 32-bit floating point
• f64: 64-bit floating point
39
Управляющие конструкции
• block
• loop
• if, if_else
• br, br_if
• tableswitch, case
• return
40
MVP
• модули
• AST
• Бинарный формат
41
Бинарный Формат
Предназначен быстрого старта, а именно уменьшение размера
модулей и быстрого декодирования
Этапы сжатия:
• сырой формат - стандартизированный бинарный формат
• специальное сжатие бинарного формата (не специфицировано,
зависит от окружения)
• общая компрессия (gzip, LZMA, LZHAM, Brotli)
42
MVP
• модули
• AST
• Бинарный формат
• Текстовый формат
43
Текстовый формат
• View Source для модуля WebAssembly, что позволит вписаться в web
(где каждый исходник может быть просмотрен) естественным образом.
• Отображение инструментах разработки браузера когда source maps
недоступны (обязательное требование MVP).
• Написание кода WebAssembly напрямую для педогогических целей,
экспериментов, отладки, оптимизации и тестирования спецификации.
44
Отладка текстового формата
Текстовый формат эквивалентен и изоморфен бинарному.
В бинарном представлении все имена функций и переменных
сжимаются до индексов, поэтому в текстовом режиме могут не
отображаться. Для решения этой проблемы можно добавить
опциональную глобальную секцию debug symbol.
45
MVP
• модули
• AST
• Бинарный формат
• Текстовый формат
• Среды исполнения
46
MVP
• модули
• AST
• Бинарный формат
• Текстовый формат
• Среды исполнения
• Polyfill
47
Polyfill
• эффективное преобразовывание бинарного формата в JavaScript
• конвертирование asm.js кода в WebAssembly
48
PostMVP
• потоки
• SIMD
• zero-cost exception handling
• доступ к модулям JS
• Сборщик мусора
• Поддержка DOM, Web API
49
Дальнейшие планы
• динамическое связывание
• полное управление памятью (mmap, Shared Memory)
• низкоуровневый доступ к структурам сборщика мусора
• JIT компиляция
50
Feature detection
Подход из JavaScript не работает
if (foo)
foo();
else
alternativeToFoo();
51
Feature detection
Подход, который работает
1. Компиляция нескольких версий модуля, каждый подразумевает
разную поддержку фич и использует has_feature тесты, чтобы
определить какую версию нужно загрузить.

2. Специальный уровень декодирования — использование has_feature
для определения неподдерживаемых фич и использование полифилла
или ловушек.
52
Инструментарий
• редакторы
• компиляторы и vm
• дебаггеры
53
Какие плюсы принесет WebAssembly
Внедрение WebAssembly даст возможность воплотить в жизнь
создание новых продуктов, работающих в браузере, в том числе:
• высокопроизводительных игр
• систем редактирования видео/звука/изображений
• P2P-систем
• САПР
• средств разработки и коммуникации (запуск локального веб-сервера в
браузере, эффективная упаковка веб-фреймворков)
54
Что почитать
• WebAssembly Design Documents
• WebAssembly organization on GitHub
• статья о WebAssembly в блоге Брендана Айка
• статья инженера Mozilla Люка Вагнера
• интервью Эрика Эллиота с Брендоном Айком
• https://bugs.webkit.org/show_bug.cgi?id=146064
• Статья Майка Холдмана из Microsoft
55
Contact me
github.com/chicoxyzzy
twitter.com/chicoxyzzy
ru.linkedin.com/in/chicoxyzzy
Slides
chicoxyzzy.github.io/talks/wasm/index.html
56

Mais conteúdo relacionado

Mais procurados

Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"Fwdays
 
Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"Fwdays
 
Web programming modern tendencies
Web programming modern tendenciesWeb programming modern tendencies
Web programming modern tendenciesDarkestMaster
 
Актуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработкеАктуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработкеDenis Izmaylov
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesDenis Izmaylov
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 
Что нового в ASP.NET 5
Что нового в ASP.NET 5Что нового в ASP.NET 5
Что нового в ASP.NET 5Microsoft
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkOleksandr Torosh
 
Знакомство с WebAssembly
Знакомство с WebAssemblyЗнакомство с WebAssembly
Знакомство с WebAssemblyNikita Zimin
 
Александр Афенов
Александр АфеновАлександр Афенов
Александр АфеновCodeFest
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без болиAnton Piskunov
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнSergey Xek
 
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4rit2011
 
Server-side Rendering with JavaScript Frameworks | Odessa Frontend Meetup #6
Server-side Rendering with JavaScript Frameworks | Odessa Frontend Meetup #6Server-side Rendering with JavaScript Frameworks | Odessa Frontend Meetup #6
Server-side Rendering with JavaScript Frameworks | Odessa Frontend Meetup #6OdessaFrontend
 
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальностьДенис Измайлов, JavaScript сегодня: React, Redux и новая реальность
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальностьScrumTrek
 
React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)
React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)
React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)Ontico
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25MoscowJS
 

Mais procurados (20)

Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
Евгений Остапчук "Tips&Tricks for ASP.NET MVC performance"
 
Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"Андрей Чебукин "Построение успешных API"
Андрей Чебукин "Построение успешных API"
 
Web programming modern tendencies
Web programming modern tendenciesWeb programming modern tendencies
Web programming modern tendencies
 
Актуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработкеАктуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработке
 
Migrate!
Migrate!Migrate!
Migrate!
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
Что нового в ASP.NET 5
Что нового в ASP.NET 5Что нового в ASP.NET 5
Что нового в ASP.NET 5
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP Framework
 
Знакомство с WebAssembly
Знакомство с WebAssemblyЗнакомство с WebAssembly
Знакомство с WebAssembly
 
Крыша 2.0
Крыша 2.0Крыша 2.0
Крыша 2.0
 
Александр Афенов
Александр АфеновАлександр Афенов
Александр Афенов
 
ASP.NET MVC 4
ASP.NET MVC 4ASP.NET MVC 4
ASP.NET MVC 4
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без боли
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
 
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
 
Server-side Rendering with JavaScript Frameworks | Odessa Frontend Meetup #6
Server-side Rendering with JavaScript Frameworks | Odessa Frontend Meetup #6Server-side Rendering with JavaScript Frameworks | Odessa Frontend Meetup #6
Server-side Rendering with JavaScript Frameworks | Odessa Frontend Meetup #6
 
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальностьДенис Измайлов, JavaScript сегодня: React, Redux и новая реальность
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
 
React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)
React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)
React новая эра фронтенд разработки / Роберт Харитонов (Liberty Global)
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
 

Semelhante a WebAssembly

Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Ontico
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только одинHappyDev
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковCodeFest
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"oelifantiev
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 
Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"Fwdays
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?buranLcme
 
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...Ontico
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17MoscowJS
 
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionJVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionNikita Lipsky
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
Jelastic для разработчиков ПО
Jelastic для разработчиков ПОJelastic для разработчиков ПО
Jelastic для разработчиков ПОDmitry Lazarenko
 
Web matrix
Web matrixWeb matrix
Web matrix.toster
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended versionIvan Krylov
 

Semelhante a WebAssembly (20)

Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиков
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?
 
Step 1
Step 1Step 1
Step 1
 
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
 
Java: вчера, сегодня, завтра
Java: вчера, сегодня, завтраJava: вчера, сегодня, завтра
Java: вчера, сегодня, завтра
 
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionJVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
Jelastic для разработчиков ПО
Jelastic для разработчиков ПОJelastic для разработчиков ПО
Jelastic для разработчиков ПО
 
Web matrix
Web matrixWeb matrix
Web matrix
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended version
 

WebAssembly

  • 3. Кратчайшая история web-приложений • Ajax: A New Approach to Web Applications (18 февраля 2005) • JIT-компиляция • v8, Nitro (2008) • TraceMonkey (2009) • Chakra (2011) 3
  • 4. JavaScript как compile target JavaScript is Assembly Language for the Web (июль 2011) • Sematic Markup is Dead! Clean vs. Machine-coded HTML • Part 2 - Madness or just Insanity? 4
  • 6. И вот это null == 0; // false null > 0; // false null >= 0; // true Math.min() < Math.max(); // false 6
  • 11. asm.js статически-типизированное подмножество JavaScript • представлен 21 марта 2013 (поддержка в FireFox 22) • на Google I/O 2013 было объявлено об улучшенной поддержке asm.js в Chrome 28 beta • 7 мая 2015 объявлена поддерживается браузером Microsoft Edge 11
  • 12. asm.js pipeline Не предназначен для написания программ человеком, получается с помощью компиляторов исходного кода в исходный код, таких как Emscripten 12
  • 13. код на c int add1(int i) { return i + 1; } 13
  • 14. код на asm.js function add1(i) { i = i|0; return (i + 1)|0; } 14
  • 15. особенности asm.js • нет сборщика мусора • нет потоков • нет разделяемой памяти • так как это подмножество JS, то • долгий и ресурсоемкий парсинг • большой размер конечного кода • на нем сложно написать web-приложение вручную 15
  • 16. PNaCl архитектурно-независимое решение для исполнения нативного кода в песочнице • представлен 12 ноября 2013 • основан на NaCl • компилирует C и C++ код в промежуточное представление подмножества LLVM с помощью AOT-компилятора • исполняется в песочнице браузера 16
  • 17. Особенности PNaCl изолирован в собственной виртуальной машине и не имеет прямого доступа к DOM, JS 17
  • 19.
  • 21.
  • 23.
  • 25.
  • 26. a new binary syntax for low-level safe code, initially co-expressive with asm.js, but in the long run able to diverge from JS’s semantics, in order to best serve as common object-level format for multiple source-level programming languages. Brendan Eich Он представил Web Assembly в своем блоге 17 июня 2015 “
  • 27. High-Level Goals • Определить портативный, эффективный по объему и времени загрузки бинарный формат как compile-target, который в свою очередь может быть компилирован для исполнения на околонативной скорости на разных платформах, включая мобильные платформы и IoT. 27
  • 28. High-Level Goals • Описать и имплементировать • MVP для стандартной функциональности, аналогичной asm.js • эффективный polyfill для MVP, который позволяет транслировать wasm в js для запуска в браузерах • PostMVP, который добавляет несколько значимых фич • Дополнительные фичи на основе обратной связи и опыта использования, включая поддержку других языков 28
  • 29. High-Level Goals • Интеграция в существующую web-платформу: • безверсионная разработка, обратная совместимость • выполняется той же самантической вселенной, что и JavaScript • предоставлять синхронные вызовы в и из JavaScript • политика безопасности и правил ограничения домена • доступ к функциональности браузера через Web API • определить человеко-понятный текстовый формат, который можно конвертировать в бинарный формат и обратно 29
  • 30. High-Level Goals • WebAssembly должен поддерживать интеграцию не только в браузеры 30
  • 31. High-Level Goals • Создать привлекательную платформу • новый LLVM-бэкенд и сопутствующий порт Clang • поощрять другие компиляторы и инструменты для использования WebAssembly как цели компиляции • предоставить ползезный инструментарий разработки и отладки 31
  • 33. Модули WebAssembly • набор импортов и экспортов • секция, определяющая линейную память • секция с кодом • после MVP— секция debug-информация • Возможно другие секции в будущем 33
  • 34. Инстанс модуля содержит • код из модуля, из которого он был загружен • линейную память • полностью разрешенные импорты • host-specific state (например, reflect экспортов в JS) • код нескольких модулей, динамически связанных в один инстанс (когда будет доступно динамическое связывание) • другие семантически-видимые секции в будущем 34
  • 35. Линейная память • memory_size • load • store • grow_memory 35
  • 37. Порядок вычисления AST Все узлы, отличающиеся от конструкций управления, вычисляются в том порядке, в котором они представлены в AST. (i32.add (set_local $x (i32.const 1)) (set_local $x (i32.const 2))) 37
  • 38. Ловушки Если экземпляр прервал работу, то информация об этом прокидывается во внешнее окружение. В JavaScript окружении, например, таком как браузер, ловушка вызывает исключение и может быть увидена в DevTools. 38
  • 39. Типы WebAssembly имеет следующие типы значений: • 32: 32-bit integer • i64: 64-bit integer • f32: 32-bit floating point • f64: 64-bit floating point 39
  • 40. Управляющие конструкции • block • loop • if, if_else • br, br_if • tableswitch, case • return 40
  • 41. MVP • модули • AST • Бинарный формат 41
  • 42. Бинарный Формат Предназначен быстрого старта, а именно уменьшение размера модулей и быстрого декодирования Этапы сжатия: • сырой формат - стандартизированный бинарный формат • специальное сжатие бинарного формата (не специфицировано, зависит от окружения) • общая компрессия (gzip, LZMA, LZHAM, Brotli) 42
  • 43. MVP • модули • AST • Бинарный формат • Текстовый формат 43
  • 44. Текстовый формат • View Source для модуля WebAssembly, что позволит вписаться в web (где каждый исходник может быть просмотрен) естественным образом. • Отображение инструментах разработки браузера когда source maps недоступны (обязательное требование MVP). • Написание кода WebAssembly напрямую для педогогических целей, экспериментов, отладки, оптимизации и тестирования спецификации. 44
  • 45. Отладка текстового формата Текстовый формат эквивалентен и изоморфен бинарному. В бинарном представлении все имена функций и переменных сжимаются до индексов, поэтому в текстовом режиме могут не отображаться. Для решения этой проблемы можно добавить опциональную глобальную секцию debug symbol. 45
  • 46. MVP • модули • AST • Бинарный формат • Текстовый формат • Среды исполнения 46
  • 47. MVP • модули • AST • Бинарный формат • Текстовый формат • Среды исполнения • Polyfill 47
  • 48. Polyfill • эффективное преобразовывание бинарного формата в JavaScript • конвертирование asm.js кода в WebAssembly 48
  • 49. PostMVP • потоки • SIMD • zero-cost exception handling • доступ к модулям JS • Сборщик мусора • Поддержка DOM, Web API 49
  • 50. Дальнейшие планы • динамическое связывание • полное управление памятью (mmap, Shared Memory) • низкоуровневый доступ к структурам сборщика мусора • JIT компиляция 50
  • 51. Feature detection Подход из JavaScript не работает if (foo) foo(); else alternativeToFoo(); 51
  • 52. Feature detection Подход, который работает 1. Компиляция нескольких версий модуля, каждый подразумевает разную поддержку фич и использует has_feature тесты, чтобы определить какую версию нужно загрузить.
 2. Специальный уровень декодирования — использование has_feature для определения неподдерживаемых фич и использование полифилла или ловушек. 52
  • 54. Какие плюсы принесет WebAssembly Внедрение WebAssembly даст возможность воплотить в жизнь создание новых продуктов, работающих в браузере, в том числе: • высокопроизводительных игр • систем редактирования видео/звука/изображений • P2P-систем • САПР • средств разработки и коммуникации (запуск локального веб-сервера в браузере, эффективная упаковка веб-фреймворков) 54
  • 55. Что почитать • WebAssembly Design Documents • WebAssembly organization on GitHub • статья о WebAssembly в блоге Брендана Айка • статья инженера Mozilla Люка Вагнера • интервью Эрика Эллиота с Брендоном Айком • https://bugs.webkit.org/show_bug.cgi?id=146064 • Статья Майка Холдмана из Microsoft 55