PythonのコードをWebAssemblyにコンパイルする「py2wasm」、Wasmerが発表
今回は「PythonのコードをWebAssemblyにコンパイルする「py2wasm」、Wasmerが発表」についてご紹介します。
関連ワード (公開、対応、非常等) についても参考にしながら、ぜひ本記事について議論していってくださいね。
本記事は、Publickey様で掲載されている内容を参考にしておりますので、より詳しく内容を知りたい方は、ページ下の元記事リンクより参照ください。
WebAssemblyランタイムの開発と提供を行っているWasmer社は、PythonのコードをWebAssemblyバイナリにコンパイルする「Py2wasm」を発表しました。
Announcing py2wasm – A #Python to #WebAssembly compiler that speeds up by 3x your Python apps!https://t.co/0v4YLZC7lY
— Wasmer (@wasmerio) April 18, 2024
WebAssembly版CPythonよりも3倍高速に
PytonをWebAssemblyで実行する方法として、Pythonランタイムの標準実装となっているCPythonをWebAssemblyにコンパイルしたWebAssembly版CPythonを用いてPythonコードを実行することが可能です。
しかしWebAssembly版CPythonの実行速度をネイティブバイナリのCPythonと比較すると非常に遅いとされています。
一方、今回Wasmerが発表したpy2wasmでは、PythonコードそのものをWebAssemblyバイナリ化することなどによりインタプリタのオーバーヘッドを省略できるため、WebAssembly版CPython上でPythonコードを実行するよりも約3倍高速だと説明されています。
PythonコードをCPythonのAPIコールにトランスパイル
PythonコードをWebAssemblyバイナリにコンパイルするpy2wasmコンパイラは、Nuitkaをベースに開発されたと説明されています。
NuitkaはPythonコードをCPythonのAPIコールに変換するトランスパイラです。トランスパイル後のコードをCコンパイラを用いてコンパイルすることで、ネイティブバイナリを生成可能です。
py2wasmはこのNuitkaをベースにWASI(WebAssembly Sysmtem Interface)対応のWebAssemblyバイナリを生成するようにカスタマイズされたものです。
Wasmer社では近い将来、py2wasmをWasmerのパッケージとして公開する予定とのことです。
また、同社自身も今後さらにpy2wasmの高速化を実現し、Python Djangoで構築された同社のバックエンドをWebAssemblyベースのWasmer Edgeへ移行したいとの考えを明らかにしています。