Python 3.11 的速度大幅超越 3.8!

摘要:10 月 24 日,Python 官方發佈了最新的 3.11 版本,來看看它與 Python 3.8、JavaScript 和 C++17 之間的速度對比。

連結:https://jott.live/markdown/py3.11_vs_3.8

聲明:本文為 CSDN 翻譯,未經允許禁止轉載。

作者 | Bram Wasti

譯者 | 彎月

我在 M1 Pro 上嘗試用 Python 3.8、3.11、Bun(JavaScript 運行時)和 C++17 (-O2) 運行了一段 N 體模擬程式碼。

Python

Python

Python 是一種很流行且廣受好評的解釋性語言。最近,Python 在性能提升方面也有了很大進步,通過我的測試可以看出最新版本的速度有了明顯的提升。

在這個測試中,我運行了1000 萬步的 N 體模擬。(Python 源程式碼在這裡:https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/nbody-python3-1.html)

$ time python3.8 sim.py 10000000-0.169075164-0.169077842python3.8 sim.py 10000000 96.07s user 0.63s system 99% cpu 1:36.79 total

結果表明,Python 3.8 總共耗時 96.79 秒。

$ time python3.11 sim.py 10000000-0.169075164-0.169077842python3.11 sim.py 10000000 31.92s user 0.05s system 99% cpu 31.976 total

而 Python 3.11 只用了 31.98 秒,意味著 3 倍的速度提升!

JavaScript

JavaScript

JavaScript 是衡量程式語言性能的一個很好的基準。JavaScript 與 Python 一樣,是一種靈活的動態類型手稿語言,可以在終端中運行,而且擁有完善的 C API。

在此次測試中,JavaScript 的表現並不差,它的運行速度超過了 Python。

究竟有多快?(JavaScript 源程式碼在這裡:https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/nbody-node-6.html)

$ time bun sim.ts 10000000-0.169075164-0.169077842bun sim.ts 10000000 0.76s user 0.01s system 100% cpu 0.768 total

Bun 的模擬耗時為 0.768 秒,比 Python 3.11 快 41 倍。相信對於任何熟悉 JavaScript 的人來說,這個結果都在意料之中。JavaScript 是一種 JIT 編譯語言,擁有多個出色的運行時。

C++ 17

C++ 17

C++ 是一種編譯語言,這意味著它缺乏 Python 和 JavaScript 的一些便利性。除了嚴格的類型和晦澀難懂的語法之外,C++ 還需要提前編譯。

使用 -O2 編譯 C++ 程式碼需要 0.183 秒。(C++ 源程式碼在這裡:https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/nbody-gpp-9.html)

$ time g++ -O2 -std=c++17 sim.cc -o simg++ -O2 -std=c++17 sim.cc -o sim 0.11s user 0.03s system 76% cpu 0.183 total

接著,運行可執行檔案:

$ time ./sim 10000000-0.169075164-0.169077842./sim 10000000 0.42s user 0.00s system 99% cpu 0.423 total

C++ 的模擬耗時為 0.423 秒,比 JavaScript 快 1.8 倍。在我看來,這個數字代表了 Python 之類的語言可以達到的性能「峰值」。

從理論上來講,JIT 編譯語言可以擊敗編譯語言。然而據我所知,實踐中並沒有真正出現過這樣的情況。

Python 萬歲!

Python 萬歲!

Python 的性能確實在不斷提升,這對我們來說無疑是個天大的好訊息。Python 的語法非常簡潔,常常作為新手程式設計師的入門程式語言。

JIT 編譯 CPython 確實取得了付出了很大的努力,這裡我要著重表揚 Torch Dynamo(https://github.com/pytorch/torchdynamo)。儘管這個庫面向的是 PyTorch 程式碼,但這是一項通用的位元組碼重寫技術,值得深入了解。

相關文章

Python 與 JavaScript 做比較公平嗎?

Python 與 JavaScript 做比較公平嗎?

在討論應該使用 Python 還是 JavaScript 構建項目時,一般我們都不會說只使用一種程式語言來構建所有的元件。 在現代軟體開發中...

TypeScript 這十年

TypeScript 這十年

【CSDN 編者按】很多時候,僅從名稱上來看,不少人對 TypeScript 與 JavaScript 傻傻分不清楚,或許只知道 TypeS...

Python 雖已登峰,但尚未造極!

Python 雖已登峰,但尚未造極!

本文來自 CSDN 策劃的《2022 年技術年度盤點》欄目。本欄目將圍繞程式語言、開源、雲端運算、人工智慧、架構服務、資料庫、晶片、開發工具...