取代 C 語言!眾多 Python 開發者正加入 Rust 陣營
未來將會有越來越多的庫采用 Python 作為前端(提高編程效率)和 Rust 作為后端(提升性能)的開發模式。
Rust 正在取代 C 語言成為高性能 Python 包的"后端"
首先,讓我們思考這種轉變的動機。Python 編寫簡單,但執行速度慢是其主要問題。特別是在編寫數據處理庫時,由于 Python 性能較低,很難用純 Python 開發高性能庫。然而,Python 是機器學習和數據工程的主要語言。因此,當開發面向數據工程師或機器學習工程師的庫時,我們會遇到以下問題:
雖然我們需要用 Python 編寫 API,但高性能的數據處理任務無法僅依靠 Python 完成。這意味著在編寫庫時,你有以下選擇:
- 要么自己學習并使用 C 語言
- 要么依賴他人編寫的 C 語言庫來執行底層操作
熟悉 C 語言的開發者可能會問:"這有什么問題嗎?許多庫作者可以將數值計算任務交給 NumPy 或 SciPy 處理。"
但實際情況并非如此理想。雖然將某些任務外包給 NumPy、SciPy 等庫很方便,但這要求所有函數都必須向量化,且不能使用 for 循環編寫代碼。此外,還需要考慮全局解釋器鎖(GIL)對某些操作的阻塞,以及其他各種問題。并非所有需求都能在現有庫中找到解決方案。
為什么選擇 Rust?
Rust 具有與 C 語言相當的速度和內存效率,但無需手動內存管理或垃圾回收。它擁有出色的工具支持、友好的編譯器和不斷發展的開發者社區。使用 Rust 不僅能提升程序性能,還能在學習過程中結識更多同道中人。
最重要的是,對 Python 開發者而言,Rust 比 C 語言更容易學習:
- 改善了"入門級"體驗,使初學者更容易編寫"安全"的代碼
- 學習曲線更平緩,允許開發者隨時間逐步掌握更高級的語言特性
實際應用案例
1. Lance:高性能、低成本的向量數據庫
創始人 Chang She 和 Lei Xu 最初使用 C++ 編寫代碼庫,但當他們不再需要處理 CMake 時,決定轉向 Rust。Chang 表示:"從 C++ 轉向 Rust 的決定源于我可以更高效地工作,在不損失性能的同時,也不必處理 CMake。我們用了大約 4 個月的時間用 Rust 重寫了之前的 C++ 代碼,每次用 Rust 編寫和發布新功能時,我們都更加確信不會遇到段錯誤。"
2. Pydantic:面向開發者的 Python 驗證庫
Pydantic 團隊用 Rust 重寫了第二個版本,即使是簡單模型也實現了 20 倍的性能提升。除了性能改進外,Rust 還帶來了其他優勢。Pydantic 創始人 Samuel Colvin 指出:"Rust 編寫的代碼通常更易于使用和維護。特別是 Rust 能捕獲和處理所有可能的錯誤,而 Python(和 TypeScript)的類型系統往往會忽略這些錯誤。"
未來展望
展望未來,越來越多的庫將采用 Python 作為前端、Rust 作為后端的開發模式。總的來說,當今的 Python 開發者在構建高性能庫時,擁有了更好、更流暢的開發方式。