WebAssembly(Wasm)ランタイムを開発するWasmerは、PythonプログラムをWebAssemblyに変換し、ベースラインインタープリタよりも3倍高速に実行できるようにする「py2wasm」を発表した。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
WebAssembly(Wasm)ランタイムを開発するWasmerは2024年4月19日(米国時間)、PythonプログラムをWebAssemblyに変換し、ベースラインインタープリタよりも3倍高速に実行できるようにするコンパイラ「py2wasm」を発表した。
py2wasmの使い方は以下の通り。
なお、py2wasmはPython 3.11環境で実行する必要がある。
Wasmerは、「pystone.py」ベンチマークを使用して、「Pythonをネイティブに実行した場合」「CPythonインタープリタをWebAssemblyで実行した場合」「Pythonコンパイラ『Nuitka』のフォークを用いたpy2wasmを使用した場合」のパフォーマンスを比較した結果を、以下のように報告している。
py2wasmを使用すると、ネイティブPythonの約70%の速度を達成でき、ベースラインインタープリタよりも2.5〜3倍高速に実行できる。
Wasmerは、WebAssemblyでPythonを高速化する方法として、以下の3つを比較検討した。その結果、PythonコンパイラであるNuitkaのフォークをpy2wasmに採用することを決めた。
この方法では、Cython、RPython(PyPy)、Codonがよく使用される。
この方法では、PyPyがよく使用される。
この方法では、Mypy、mypy-cがよく使用される。
Nuitkaは、プログラムが行うPythonの呼び出しをCにトランスパイルすることで動作する。Pythonコードを対応するCPython呼び出しにトランスパイルするので、ほとんどのPythonプログラムをサポートする。
また、コードの難読化も可能にする(生成されたプログラムは逆コンパイルできない)。
全ての選択肢を分析した結果、WebAssemblyでPythonを最速で動作させる方法は、Nuitkaを使用することだろうと、Wasmerは判断した。
Wasmerは、同社のサーバレスアプリケーションプラットフォーム「Wasmer Edge」で、Pythonバックエンドアプリケーションを極めて高いパフォーマンスで実行できるようにすることで、こうしたアプリケーションのホスティングの選択肢を、現在のクラウドプロバイダーよりはるかに安価に提供することを目指しており、py2wasmによって、この目標に一歩近づけると述べている。
また、Wasmerは将来的に、py2wasmをWasmerパッケージとして公開し、以下のコマンドを実行するだけで動作するようにする計画だ。
Copyright © ITmedia, Inc. All Rights Reserved.