C言語を代わり!多くのPython開発者がRustチームに参加している | Webクローラ | ScrapeStorm
摘要:未来、Pythonをフロントエンド(プログラミングの効率向上)に採用し、Rustをバックエンド(パフォーマンス向上)として利用するライブラリが増えていくでしょう。 ScrapeStorm無料ダウンロード
未来、Pythonをフロントエンド(プログラミングの効率向上)に採用し、Rustをバックエンド(パフォーマンス向上)として利用するライブラリが増えていくでしょう。
python
Rustは、高性能なPythonパッケージの「バックエンド」としてCに代わりつつあります。その背景にはどのような理由があるのでしょうか?
まず初めに、動機について考えてみましょう。Pythonは書きやすいが、実行速度が遅いという課題があります。Pythonの速度は非常に遅く、純粋なPythonで高性能なライブラリを書くことは難しいため、特にデータ処理ライブラリを書くことができません。しかし、Pythonは機械学習やデータエンジニアリングの主要な言語です。したがって、データエンジニアや機械学習エンジニア向けにライブラリを書こうとすると、以下の問題に遭遇します。
PythonでAPIを書く必要がありますが、高性能なデータ処理作業はPythonだけではできません。
これはつまり、ライブラリを書くためには次のような選択肢があることを意味します:
C言語の学習と使い方を学ぶか、他の誰かがC言語を学び、ライブラリを書き、あなたはそのライブラリに依存して低レベルの操作を実行できるようになります。
C言語に精通している人は、「これには何か問題がありますか?多くのライブラリの作者は数値計算をNumPyやSciPyに外部委託するかもしれません。必要な場合にはC言語を学ぶこともできます。」と思うかもしれません。
ただし、状況はそれほど理想的ではありません。NumPy、SciPyなどのライブラリに一部のタスクを外部委託するのは便利ですが、すべての関数をベクトル化する必要があり、コードをforループで書くことができません。ある操作がグローバルインタープリターロック(GIL)によってブロックされることを心配する必要もあり、他にもさまざまな問題があります。やりたいことがすべてすでに存在するライブラリで簡単に見つけることができるわけではありません。
そこで、もう一つの方法があります。Cでライブラリをゼロから書き、その後にPythonバインディングを追加することはどうでしょうか?しかし、もしPythonのバックグラウンドがあるのであれば、C言語を使って低レベルのコードを書くことは非常に低レベルに感じられ、この言語を学ぶには労力がかかります。ヌルポインタのデリファレンス、バッファオーバーフロー、メモリリーク…これらはC言語を使用するときに遭遇する可能性のあるトラップであり、初めてPythonを学ぶプログラマーにとっては馴染みのないものです。
もしもC言語と同じくらいの速度とメモリ効率を持ち、手動メモリ管理やガベージコレクションが不要な言語があればどれほど素晴らしいでしょうか?もしもその言語が優れたPythonツールサポートと拡大し続ける開発者コミュニティを持っていれば、良いでしょう。
Rust
Rustは速度が速く、メモリ管理が効率的です。したがって、並行および並列プログラミングがより容易になります。Rustには優れたツールとフレンドリーなコンパイラがあり、広範で活発な開発者コミュニティが存在します。Rustはプログラムを高速化し、学習中により多くの友達を作ることができます。
最も重要なのは、Python開発者にとって、Rustの学習がCよりも簡単であるということです。
“第一のレベル”のエクスペリエンスが向上し、初心者は”安全”なコードを書きやすくなります。学習カーブがよりスムーズであり、時間とともにより高度な言語の機能を段階的にマスターすることができます。
したがって、過去数年間で、Pythonをフロントエンドとし、Rustをバックエンドとして選択する高性能ライブラリが増えています。例:
Lance: 高性能かつ低コストのベクトルデータベース。
創設者Chang SheとLei Xuは元々C++でコードライブラリを書いていましたが、CMakeを扱う必要がなくなり、Rustに切り替えることを決定しました。Changがこの決定を下した理由は次の通りです。
“C++からRustに切り替える決定は、より効率的に作業でき、性能を失うことなく、CMakeを扱う必要がなくなるためでした。基本的にはRustの学習をゼロから始め、学習中にLeiと私はC++コードの約4ヶ月分をRustで再書きました。新しい機能をRustで書いてリリースするたびに、私たちはより自信を持って、すべての他のコマンドを実行するたびにセグメンテーション違反が発生する心配をしなくて済みました。”
Rust はデータ処理に適しているだけでなく、高いパフォーマンス要件を持つ他の多くの Python パッケージのバックエンドとしても機能します。
Pydantic: 開発者向けのPython検証ライブラリ。
Pydanticチームは第2版をRustで書き直し、シンプルなモデルでも20倍のパフォーマンス向上を確認しました。性能向上以外にも、Rustには他にもいくつかの利点があります。Pydanticの創設者であるSamuel Colvinはいくつかの利点を挙げています。
“Rustのもう一つの点は、速度だけでなく、Rustで書かれたコードを使用およびメンテナンスすることが通常よりも簡単であることです。特に、Rustはすべての可能なエラーを捕捉および処理するように強制し、Python(およびTypeScript)の型システムはこれらのエラーを無視する傾向があるため、私は ‘foobar()’ を呼び出すと、どの状況でどの例外が発生する可能性があるかを全く知りません。基本的には、私は可能性のある失敗を見つけるために反復的に試行する必要があります。”
PythonとRustの組み合わせ
今後は、Pythonをフロントエンドとして利用し、Rustをバックエンドとして利用するライブラリが増えていくでしょう。全体として、現在のPython開発者は高性能なライブラリを構築するためにより良く、よりスムーズなアプローチを持っています。
元記事:
免責事項: 本文はユーザーが提供して、侵害がありましたら、ご連絡してすぐに削除します。ScrapeStormは、ユーザーが本ソフトウェアを使って行うすべての行為に対して、一切責任を負いません。