小实验:通过简单测试比较几种语言的运行速度(二)

前情提要

上期实验中,我们对比了C、C++、Python、Java、JavaScript(Node.js)、Go这六种编程语言输出一百万个数字的速度,忘记整理的结果如下:

语言时间
C78.464000s
C++(printf输出)73.687000s
C++(cout流输出)205.81s
Python49.253283s
Python(Pyinstaller打包成的exe文件)31.375562s
Java41s
Node.js95.612s
Go44.419805s

上次的C/C++运行速度偏慢,但我们必须尊重实验数据。

我把DevC++的安装文件夹中的MinGW64设了一个环境变量,直接使用gcc和g++命令,会不会更快一些呢?答案是会的。

C (The Second Test)

gcc C-competition.c
a.exe

得到了这么个结果:
C
45.233s!

很好!这个速度正常了!至少没那么慢了!
上次那个编译果然有问题。
我说你输出的时间怎么这么长,你编译的时候夹带私货啊。

C++(The Second Test)

再来重新编译一下!

g++ Cpp-competition2.cpp -o Cpp2.exe
Cpp2

cpp
完啦,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

运行结果:
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文件,运行:
SBCL
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
Python2要比Python3慢很多。

总结

整理一下数据吧:

语言时间
Common Lisp (SBCL直接运行)75.201048s
Common Lisp (SBCL编译后)53.147779s
C45.233s
C++(cout)205.81s
Python295.055s
Python49.253283s
Python (Pyinstaller)31.375562s
Java41s
JavaScript Node.js95.612s
Go44.42s
仓颉304.56s

以上就是全部数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值