Wasmer's py2wasm компилирует Python в WebAssembly

Давайте сначала кое-что проясним. В официальном заявлении Wasmer говорится, что если перевести вашу программу на Webassembly с помощью py2wasm, то она будет работать "в 3 раза быстрее". Важно понимать, что это сравнение с CPython WASM (интерпретатор CPython внутри WebAssembly), а не с родным CPython. Таким образом, это улучшение по сравнению с текущим состоянием запуска Python-программ в WebAssembly.

С этим покончено, давайте перейдем к деталям.

Py2wasm - это фактически форк компилятора Nuitka, который компилирует Python в C, но адаптированный для эмуляции Webassembly. Однако форк существует изначально, поскольку Васмер задумывает py2wasm как тонкий слой поверх Nuitka. Чтобы доказать это, они пошли на то, чтобы открыть PR на Githubrepo Nuitka.

Использование Nuitka казалось самым простым вариантом ускорения работы с Python в контексте WebAssembly, в основном потому, что большая часть тяжелой работы по транспиляции кода Python в базовые вызовы интерпретатора CPython уже была проделана, так что с помощью всего лишь нескольких настроек разработчики могли заставить его работать для компиляции в WebAssembly. Другие варианты, которые Wasmer рассматривали до того, как решили использовать Nuitka, были следующими

  • Компиляция подмножества Python в Wasm, используя CPython, RPython и Codon.
  • Запуск JIT в WebAssembly с помощью PyPy.
  • Статический анализ для анализа/автоопределения типов программ заранее, чтобы код мог быть транспилирован в более производительные специализации. Кандидатами были mypy, mypy-c и Nuitka.

И победителем стала Nuitka, потому что Nuitka работает, как уже говорилось, путем транспиляции вызовов Python, которые делает программа, в C, используя внутренние вызовы CPython API. С некоторыми изменениями она может создавать исполняемые файлы WebAssembly. Это означает, что вы можете запускать Python-программы не только в браузере, но и в целях, где поддерживается WebAssembly WASI.

Что касается WASI, то это WebAssembly System Interface, модульный системный интерфейс для WebAssembly (Wasm), который позволяет разработчикам запускать Wasm-программы на любой платформе, включая браузер, облако и периферию. WASI разработан как безопасный, быстрый и портативный интерфейс, позволяющий разработчикам писать свои программы один раз и запускать их в любом месте. В случае с Wasmer речь идет о переносе бэкенда Python Django из Google Cloud в Wasmer Edge.

Вот как можно использовать p2wasm :

$ pip install py2wasm
$ py2wasm myprogram. py -o myprogram. wasm
$ wasmer run myprogram. wasm

но после установки среды выполнения Wamer, что в Linux можно сделать следующим образом:

curl https://get.wasmer. io -sSfL | sh

а в Windows с помощью Powershell - как:

https://win.wasmer. io -useb | iex

Еще одно необходимое условие - наличие компилятора Си. Если в Linux это стандартное требование, то в Windows Nuitka работает с MinGW-w64, MSVC (Visual Studio) и Clang (через Visual Studio).

Одна оговорка - py2wasm должен работать в среде Python 3.11 и пока не поддерживает Python 3.12.

Учитывая это, Wasmer работает над тем, чтобы сделать py2wasm доступным в виде пакета Wasmer, чтобы сделать его еще более простым в использовании.

Wasmer's py2wasm компилирует Python в WebAssembly
Понравилась новость? Тогда не забудь оставить свой комментарий.
А так же, добавь наш сайт в закладки (нажми Ctrl+D), не теряй нас.
16 мая 2024 г.
62
Теги: Python , WebAssembly , Wasmer , py2wasm

Комментарии

Оставить комментарий:
* отправляя форму, я даю согласие на обработку персональных данных

Читайте еще

Продолжаем добавлять языки программирования для Вас.
Впереди много интересного!

Только свежие новости программирования и технологий каждый день.