前情提要
在上期实验中,我们对比了C、C++、Python、Java、JavaScript(Node.js)、Go这六种编程语言输出一百万个数字的速度,忘记整理的结果如下:
语言 | 时间 |
---|---|
C | 78.464000s |
C++(printf输出) | 73.687000s |
C++(cout流输出) | 205.81s |
Python | 49.253283s |
Python(Pyinstaller打包成的exe文件) | 31.375562s |
Java | 41s |
Node.js | 95.612s |
Go | 44.419805s |
上次的C/C++运行速度偏慢,但我们必须尊重实验数据。
我把DevC++的安装文件夹中的MinGW64设了一个环境变量,直接使用gcc和g++命令,会不会更快一些呢?答案是会的。
C (The Second Test)
gcc C-competition.c
a.exe
得到了这么个结果:
45.233s!
很好!这个速度正常了!至少没那么慢了!
上次那个编译果然有问题。
我说你输出的时间怎么这么长,你编译的时候夹带私货啊。
C++(The Second Test)
再来重新编译一下!
g++ Cpp-competition2.cpp -o Cpp2.exe
Cpp2
完啦,cout还是这么慢!!!
正式开始新一轮测试
前情提要结束了,下面开始新一轮的测试。
运行环境:同上次。
我们有一些新的语言!
LISP
Common Lisp (Running in SBCL)
之所以不在LispBox中运行,不是因为没有装,是因为为了比赛公平,所有程序必须在cmd中运行。
为什么呢?
举个例子:比如Python在IDLE中运行会比python Python-competition.py
要慢很多。因为IDLE也是程序,会并行运行。
因此,我将会在SteelBankCommonLisp运行以下的Common Lisp脚本。
老样子,输出一百万次,在其中加入判断时间的代码。
; CommonLisp-competition.lisp
(defvar start (get-internal-real-time))
(loop for i from 0 to 999999
do (print i)
)
(defvar end (get-internal-real-time))
(defvar spent (- end start))
(print spent)
运行一下吧:
sbcl --script CommonLisp-competition.lisp
运行结果:
75.201048s!
比我想象的略慢。
如果编译成可执行文件执行呢?
将上述代码修改成:
(defun main ()
(defvar start (get-internal-real-time))
(loop for i from 0 to 999999
do (print i)
)
(defvar end (get-internal-real-time))
(defvar spent (- end start))
(print spent)
(sb-ext:quit)
)
(sb-ext:save-lisp-and-die "cl.exe" :toplevel #'main :executable t)
生成cl.exe文件,运行:
53.147779s!
这样的运行会快一点。
华为仓颉语言
江湖传言仓颉的性能很高!
这不就得测试一下!
因为实在找不到统计时间的模块,将不在代码中加入统计时间的代码。
main() {
for(i in 0..1000000){
println(i)
}
}
直接在Windows上编译!
cjc CangJie-competition.cj
为统计时间,写了一个小的cmd命令,记录时间。
rem runcj.cmd
@echo off
call main.exe
echo %time%
正式开始运行。
runcj
我是从22:22:00时开始运行的。
整整5分钟!
可能在cmd脚本中速度偏慢?
再试一下,这次直接运行main.exe程序,但是还是很慢!
Python2
详细版本:Python 2.7.15
#Py2-competition.py
import time
start=time.time()
for i in xrange(1000000):
print i
end=time.time()
spent=end-start
print spent
可以看出,即使这样的一个小程序,代码也有略微差别。可见Python2和Python3确实不兼容。
Python2要比Python3慢很多。
总结
整理一下数据吧:
语言 | 时间 |
---|---|
Common Lisp (SBCL直接运行) | 75.201048s |
Common Lisp (SBCL编译后) | 53.147779s |
C | 45.233s |
C++(cout) | 205.81s |
Python2 | 95.055s |
Python | 49.253283s |
Python (Pyinstaller) | 31.375562s |
Java | 41s |
JavaScript Node.js | 95.612s |
Go | 44.42s |
仓颉 | 304.56s |
以上就是全部数据。