クシャル・ダス氏は、水平方向のスケーリングでは解決できないパフォーマンスの問題に直面しているPythonユーザーにとって、新しいプログラミング言語を学ぶことなく問題を解決できるプロジェクトを紹介しました。Spicycrabは、クシャル氏が辛い食べ物を好むことから名付けられた、PythonからRustへのトランスパイラです。デモンストレーションでは、簡単なPythonスクリプトをRustのソースコードに、そして実行可能なバイナリにコンパイルする様子が示されました。

`crabpy transpile greet.py -o greet`

この簡単なデモでは、Rustのソースコードが`greet/src/main.rs`に生成され、`cargo run`で実行できます。

これはどのようなユーザーのためのものか?

ツールを紹介した後、クシャル氏は、Spicycrabのようなツールからどのようなメリットが得られるかを説明しました。

クシャル氏がDjangoで作業していた頃、ウェブサービスがチームに割り当てられた単一の仮想マシンでスケーリングできなくなることがよくありました。当時、2008年頃には、パフォーマンスが重要な部分(「ホットパス」)に対してC拡張を記述するしか選択肢がありませんでした。しかし、このアプローチはPythonではなくCを記述する必要があり、Cの記述に伴うクラッシュやセキュリティの問題に対処する必要がありました。

現在、Rustが登場したことで、セキュリティやクラッシュといった課題の一部は解決されていますが、Rustの構文は「彼の思考を混乱させる」(ただし、PyO3が役立っています)。クシャル氏は、Rustのパフォーマンスを活用したいと考えている人が、Rustを学ぶことなくそれを実現できるようにしたかったのです。

クシャル氏によると、彼が知る多くの小規模な組織では、リソースが限られている状況で、Pythonのようなプログラミング言語から、ウェブバックエンドのためにGoのような言語に移行する傾向があるそうです。クシャル氏は、Pythonを手放すことなく、簡単にパフォーマンスを向上できるツールを提供したいと考えました。「いつかPythonが非常に高速になることを願っていますが、それまでの間、私たちができることは何でしょうか?」

次に、クシャル氏は、型注釈を含む、actix-webを使用した非同期ウェブサービスをデモンストレーションしました。この仕組みは、actix-webのパターンを使用して記述されたPythonコードを、Rustの慣用的なコードにトランスパイルすることで実現されます。actix-webのAPIは、事前に生成されたスタブのパッケージとしてPythonで使用できるようになっています。

クシャルは、Cargoを使ってactix-webをインストールしました。180個の依存関係がダウンロードされ、コンパイルされる際に、彼は少し笑いました。これは、「Rust for CPython」プロジェクトからの、サードパーティ製の依存関係に関する懸念を想起させました。インストールとトランスパイルが完了した後、以下のWebサーバーがSpicycrabを使用して構築されました。

from spicycrab_actix_web import App, HttpServer, HttpResponse, get
async def hello () -> HttpResponse:
return HttpResponse.Ok().body( "Hello World!" )
async def main () -> None :
HttpServer.new(App.new().route( "/" , get().to(hello))).bind( "127.0.0.1:8080" ).run()

トランスパイラを実行し、再度コンパイルした後、生成されたバイナリはHTTP経由で「Hello World!」という応答を提供しました。

議論

ケン・ジンは、なぜこのアプローチがmypyc、Cython、またはSPyよりも選択されるのかを尋ねました。クシャルは、「SPyはPythonのサブセットしかサポートしていない」と答えましたが、同時に「mypycは優れており、多くの場合はmypycを直接使用できる」と認めました。クシャルの主な動機は、複数の問題を同時に解決することであり、そのうちの問題の一つは、Pythonユーザーが「構文を恐れずに」Rustを使用できるようにすることでした。

グレゴリー・P・スミスは、「Pythonにとって非常に重要な」考えを提供しました。グレッグは、最先端の大型言語モデルが、パフォーマンスのためにPythonからRustなど、あるプログラミング言語から別のプログラミング言語へのコードの書き換えが、より一般的になるだろうと想像しました。クシャルは、この問題は「一度だけ」解決されるものの、コードの長期的なメンテナンス方法については答えられていないこと、そしてそのコストは多くの企業にとって高すぎるだろうと指摘しました。例えば、BunをZigからRustに書き換えるのに165,000米ドルかかったという事例があります。