Optimizer · 執筆者は3,794件の回答を行い、929.9万回閲覧されています · 3年前
何を作るかによります。
IOが中心のWebのバックエンドでしたら特にRustのメリットはあまり感じません。GoでもTypescriptでもKotlinでもPythonでも好きなもので書いてください。PythonもFastAPI
というフレームワークを使えば非同期処理が簡単に行えるだけでなく、型注釈(Type Hint)の情報を上手く使ってデータのバリデーションやドキュメントの自動生成までできます。mypyというlinterと組み合わせればTypescriptと同じくらい型安全になります。機械学習はCPUの負荷が高い分野ですが、ここでもあまりRustのメリットはありません。Python + C++という組み合わせが現状では最強です。機械学習はほとんどのアルゴリズムのボトルネックが行列計算であり、NumPyのエコシステムによってCやFortranなどで書かれたBLAS/Lapack、あるいはGPUに上手くオフロードできています。そしてpybind11
というC++のライブラリを使用することで簡単にC++の関数をPythonから呼ぶことができます。実際にPyTorchなど多くの機械学習のOSSはこれを利用しています。(Cythonを利用しているものもありますが、最近はpybind11の方が採用例が多いです)私が主にRustを利用しているのは行列計算があまり関係ない組み合わせ最適化の領域です。特に目的関数や制約条件が線形でなく、ヒューリスティックなアルゴリズムを書く必要がある場合です。こういった問題の場合は前述のNumPyをはじめとしたPythonの資源を活用できなく、Pythonでforループを明示的に書いてアルゴリズムを実装してもパフォーマンスが出ません。したがってC++かRustが候補にあがります。以前はC++で書いていましたが、Rustはより洗練されていて、特にCargoを用いて簡単にプロジェクトのセットアップや依存ライブラリの管理ができ、ユニットテストも標準機能で備えているなど言語仕様と言うよりかはビルドシステムがC++よりもかなり親切な点がいいと思います。
ちなみに線形の組み合わせ最適化の場合はOR-Tools
などの既存のライブラリをPythonから使えばいいです。脚注
閲覧数:3,011回 ·
高評価を見る
· 1/2件の回答