Python 是一种流行但广受好评的解释性语言。它在性能方面取得了长足进步,最新版本显示我的系统显着加速。
在 M1 Pro 上运行,我尝试了一些跨 Python 3.8、3.11、Bun 和 C++17 (-O2) 的 N 体模拟代码。
对于此次测试,我运行了 1000 万步的 N 体模拟。(Python源代码)
$ time python3.8 sim.py 10000000 |
Python 3.8 耗时96.79 秒。
$ time python3.11 sim.py 10000000 |
Python 3.11 只用了31.98 秒!
快了 3 倍!
JavaScript
JavaScript 是语言性能的良好基准。就像 Python 一样,它是一种灵活的动态类型脚本语言,可以在终端中运行,并且拥有完善的 C-API。
在这个比较中,JavaScript 并不完全是失败者。它比 Python更受欢迎 且速度更快。
但到底快了多少?(JavaScript 源代码)
$ time bun sim.ts 10000000 |
Bun 运行模拟耗时0.768 秒,比 Python 3.11 快 41 倍。
对于任何熟悉 JavaScript 的人来说,这几乎是意料之中的。它是一种 JIT 编译语言,具有更多的投资和多个竞争性运行时。
C++17
C++ 是一种编译语言,这意味着它缺乏 Python 和 JavaScript 的一些便利性。除了严格的类型和通常难看的语法外,C++ 还需要提前编译。
使用 -O2 编译 C++ 代码需要0.183 秒。(C++源代码)
$ time g++ -O2 -std=c++17 sim.cc -o sim |
然后,运行二进制
$ time ./sim 10000000 |
C++ 运行仿真需要0.423 秒,比 JavaScript 快 1.8 倍。
对我来说,这个数字代表了像 Python 这样的语言可以达到的“峰值”性能。
JIT 编译语言理论上可以击败编译语言。据我所知,这在实践中并没有真正发生过。