diff options
Diffstat (limited to 'files/ru/webassembly/concepts/index.html')
-rw-r--r-- | files/ru/webassembly/concepts/index.html | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/files/ru/webassembly/concepts/index.html b/files/ru/webassembly/concepts/index.html index dde3fc40a4..2f1caad232 100644 --- a/files/ru/webassembly/concepts/index.html +++ b/files/ru/webassembly/concepts/index.html @@ -5,7 +5,7 @@ translation_of: WebAssembly/Concepts --- <div>{{WebAssemblySidebar}}</div> -<p class="summary">В этой статье объясняются концепции, лежащие в основе работы технологии WebAssembly, включая ее цели, проблемы, которые она решает, и то, как она работает в движке рендеринга веб-браузера.</p> +<p class="summary">В этой статье объясняются концепции, лежащие в основе работы технологии WebAssembly, включая её цели, проблемы, которые она решает, и то, как она работает в движке рендеринга веб-браузера.</p> <h2 id="Что_такое_WebAssembly">Что такое WebAssembly?</h2> @@ -17,11 +17,11 @@ translation_of: WebAssembly/Concepts <h2 id="Цели_WebAssembly">Цели WebAssembly</h2> -<p>Технология WebAssembly создается как открытый стандарт внутри <a href="https://www.w3.org/community/webassembly/">W3C WebAssembly Community Group</a> со следующими целями:</p> +<p>Технология WebAssembly создаётся как открытый стандарт внутри <a href="https://www.w3.org/community/webassembly/">W3C WebAssembly Community Group</a> со следующими целями:</p> <ul> <li>Быть быстрым, эффективным и переносимым - код WebAssembly может выполняться практически на естественной скорости на разных платформах, используя преимущества <a href="http://webassembly.org/docs/portability/#assumptions-for-efficient-execution">аппаратных возможностей</a>.</li> - <li>Быть читаемым и отлаживаемым - WebAssembly - это низкоуровневый ассемблерный язык, но он имеет читабельный текстовый формат (спецификация для которого еще дорабатывается), который позволяет писать, просматривать и отлаживать код вручную. </li> + <li>Быть читаемым и отлаживаемым - WebAssembly - это низкоуровневый ассемблерный язык, но он имеет читабельный текстовый формат (спецификация для которого ещё дорабатывается), который позволяет писать, просматривать и отлаживать код вручную. </li> <li>Поддерживать безопасность - код WebAssembly предназначен для запуска в безопасной, изолированной среде выполнения. Как и другой веб-код, он будет соблюдать политики безопасности браузера.</li> <li>Не разрушать текущий веб - технология WebAssembly разработана так, что она прекрасно сочетается с другими веб-технологиями и поддерживает обратную совместимость.</li> </ul> @@ -41,7 +41,7 @@ translation_of: WebAssembly/Concepts <p>Исторически ВМ могла загружать только JavaScript. Раньше нас это вполне устраивало, поскольку JavaScript достаточно мощный, чтобы решать большинство проблем, с которыми мы сталкивались в интернете. Однако мы столкнулись с проблемами производительности, когда попытались использовать JavaScript для более нагруженных сценариев использования, таких как 3D-игры, виртуальная и дополненная реальность, компьютерное зрение, редактирование изображений / видео и в ряде других применений, которые требуют повышенной производительности (см. <a href="http://webassembly.org/docs/use-cases/">варианты использования WebAssembly</a> где описано больше идей).</p> -<p>Кроме того, длительность загрузки, анализа и компиляции очень больших приложений JavaScript может быть непомерно высокой. Мобильные и другие ограниченные в ресурсах платформы могут еще более понизить производительность.</p> +<p>Кроме того, длительность загрузки, анализа и компиляции очень больших приложений JavaScript может быть непомерно высокой. Мобильные и другие ограниченные в ресурсах платформы могут ещё более понизить производительность.</p> <p>Язык WebAssembly отличается от языка JavaScript, но он не предназначен для его замены. Он предназначен для дополнения и работы вместе с JavaScript, что позволяет веб-разработчикам использовать преимущества обоих языков:</p> @@ -59,19 +59,19 @@ translation_of: WebAssembly/Concepts <p>Есть несколько ключевых понятий, необходимых для понимания того, как WebAssembly работает в браузере. Все эти понятия отражены 1:1 в <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly">WebAssembly JavaScript API</a>.</p> <ul> - <li><strong>Модуль</strong>: Представляет двоичный файл WebAssembly, который был скомпилирован браузером в исполняемый машинный код. Модуль не имеет состояния и, таким образом, как <a href="/en-US/docs/Web/API/Blob">Blob</a>, может быть явным образом разделен между windows и workers (через <code><a href="/en-US/docs/Web/API/MessagePort/postMessage">postMessage()</a></code>). В модуле есть объявление импорта и экспорта точно такое же, как и в модуле ES2015.</li> + <li><strong>Модуль</strong>: Представляет двоичный файл WebAssembly, который был скомпилирован браузером в исполняемый машинный код. Модуль не имеет состояния и, таким образом, как <a href="/en-US/docs/Web/API/Blob">Blob</a>, может быть явным образом разделён между windows и workers (через <code><a href="/en-US/docs/Web/API/MessagePort/postMessage">postMessage()</a></code>). В модуле есть объявление импорта и экспорта точно такое же, как и в модуле ES2015.</li> <li><strong>Память</strong>: Массив ArrayBuffer изменяемого размера, который содержит линейный массив байтов, считываемых и записываемых инструкциями низкоуровневого доступа к памяти в WebAssembly. </li> <li><strong>Таблица</strong>: Типизированный массив ссылок изменяемого размера (например, для функций), которые не могут быть размещены в памяти в виде байтов (по соображениям безопасности и переносимости).</li> - <li><strong>Экземпляр</strong>: Модуль в паре со своим состоянием, которое он использует во время выполнения, включая память, таблицу и набор импортируемых значений. Экземпляр модуля похож на модуль ES2015, который был загружен в определенную глобальную переменную с определенным набором импортов.</li> + <li><strong>Экземпляр</strong>: Модуль в паре со своим состоянием, которое он использует во время выполнения, включая память, таблицу и набор импортируемых значений. Экземпляр модуля похож на модуль ES2015, который был загружен в определённую глобальную переменную с определённым набором импортов.</li> </ul> -<p>JavaScript API предоставляет разработчикам возможность создавать модули, объекты памяти, таблицы и экземпляры модулей. Получив экземпляр модуля WebAssembly, код JavaScript может синхронно вызывать его экспорты, которые представляются как обычные функции JavaScript. Любые функции JavaScript также могут синхронно вызываться кодом WebAssembly путем передачи этих функций в качестве импорта в экземпляр модуля WebAssembly.</p> +<p>JavaScript API предоставляет разработчикам возможность создавать модули, объекты памяти, таблицы и экземпляры модулей. Получив экземпляр модуля WebAssembly, код JavaScript может синхронно вызывать его экспорты, которые представляются как обычные функции JavaScript. Любые функции JavaScript также могут синхронно вызываться кодом WebAssembly путём передачи этих функций в качестве импорта в экземпляр модуля WebAssembly.</p> <p>Поскольку JavaScript полностью контролирует загрузку, компиляцию и запуск кода WebAssembly, разработчики JavaScript могут рассматривать технологию WebAssembly как расширение JavaScript для эффективной генерации высокопроизводительных функций.</p> <p>В будущем модули WebAssembly будут загружаться так же, как и <a href="https://github.com/WebAssembly/design/issues/1087">модули ES2015</a> (с использованием <code><script type='module'></code>), что означает, что JavaScript сможет извлекать, компилировать и импортировать модуль WebAssembly так же легко, как модуль ES2015.</p> -<h2 id="Как_я_могу_использовать_WebAssembly_в_своем_приложении">Как я могу использовать WebAssembly в своем приложении?</h2> +<h2 id="Как_я_могу_использовать_WebAssembly_в_своём_приложении">Как я могу использовать WebAssembly в своём приложении?</h2> <p>Выше мы говорили о низкоуровневых примитивах, которые WebAssembly добавляет к веб-платформе: двоичный формат для кода и API для его загрузки и запуска. Теперь давайте поговорим о том, как мы можем использовать эти примитивы на практике.</p> @@ -87,7 +87,7 @@ translation_of: WebAssembly/Concepts <h3 id="Портирование_из_CC">Портирование из C/C++</h3> -<p>Из множества вариантов создания кода WASM есть два наиболее популярных - это онлайн-сборщик wasm или <a href="/en-US/docs/Mozilla/Projects/Emscripten">Emscripten</a>. Существует еще несколько вариантов сборки WASM, таких как:</p> +<p>Из множества вариантов создания кода WASM есть два наиболее популярных - это онлайн-сборщик wasm или <a href="/en-US/docs/Mozilla/Projects/Emscripten">Emscripten</a>. Существует ещё несколько вариантов сборки WASM, таких как:</p> <ul> <li><a href="https://wasdk.github.io/WasmFiddle/">WasmFiddle</a></li> @@ -104,9 +104,9 @@ translation_of: WebAssembly/Concepts <p>В двух словах, процесс работает следующим образом:</p> <ol> - <li>Сначала Emscripten передает код C/C++ в clang + LLVM - набор инструментов компилятора C/C++ с открытым исходным кодом, который поставляется, например, как часть XCode для OSX.</li> + <li>Сначала Emscripten передаёт код C/C++ в clang + LLVM - набор инструментов компилятора C/C++ с открытым исходным кодом, который поставляется, например, как часть XCode для OSX.</li> <li>Emscripten преобразует скомпилированный результат clang + LLVM в двоичный файл .wasm. </li> - <li>Сам по себе код WebAssembly в настоящее время не может напрямую обращаться к DOM; он может вызывать только JavaScript, передавая целочисленные и числа с плавающей точкой примитивные типы данных. Таким образом, чтобы получить доступ к любому Web-API, WebAssembly модуль должен обращаться к JavaScript, который затем вызывает Web-API. Поэтому Emscripten создает необходимый для этого связующий код HTML и JavaScript.</li> + <li>Сам по себе код WebAssembly в настоящее время не может напрямую обращаться к DOM; он может вызывать только JavaScript, передавая целочисленные и числа с плавающей точкой примитивные типы данных. Таким образом, чтобы получить доступ к любому Web-API, WebAssembly модуль должен обращаться к JavaScript, который затем вызывает Web-API. Поэтому Emscripten создаёт необходимый для этого связующий код HTML и JavaScript.</li> </ol> <div class="note"> |