各种编程语言生成纯色bmp图片的效率
之前使用了各种语言生成纯色bmp图片,这里汇总并对比下纯色bmp图片文件生成的效率。
主要指标是完成bmp文件生成的耗时时长。
为了公平客观的对比,通过linux的date指令获取时间,在执行bmp文件生成前后各获取一次时间,再用第二次的时间减去第一次的时间,得到的时间差,即bmp文件生成的耗时时长。
linux获取时间的指令:
date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-23;
各种编程语言效率对比结果
序号 | 语言 | 耗时 | 备注 |
---|---|---|---|
1 | c | 4.663s | |
2 | go | 6.66s | |
3 | java | 20.457s | |
4 | lua | 6.05s | |
5 | perl | 41.37s | |
6 | python | 7.079s | |
7 | ruby | 18.55s | |
8 | r | 61.636s |
性能比较
c > lua > go > python > ruby > java > perl > r
可见c语言的性能还是最高的。但每一种语言都有其特点和魅力,同样的一个写bmp文件的功能,各种语言都可以实现。当然各种语言的侧重点不一样,也许本次测试中效率最低的r语言,有更优的实现方案,但目前的数据也是实测的。
具体数据见附1-附8。
各种编程语言特点对比
如上程序语言,其对比特点如下:
序号 | 语言 | 发明日期 | 发明地 | 特点 |
---|---|---|---|---|
1 | c | 1972年 | 美国贝尔电话实验室丹尼斯·里奇 | 面向过程的计算机编程语言 |
2 | go | 2009年11月 | 美国google | 静态强类型、编译型、并发型 |
3 | java | 1995年5月 | 美国sun Microsystems 公司 | 高级程序设计语言 |
4 | lua | 1993年 | 巴西里约热内卢天主教大学 | 脚本语言 |
5 | perl | 1986年 | 美国Larry wall | 解释型的脚本语言 |
6 | python | 1991年 | 荷兰Guido van Rossum | 解释型、面向对象、动态数据类型的高级程序设计语言 |
7 | ruby | 20世纪90年代 | 日本人松本行弘 | 一种简单快捷的面向对象(面向对象程序设计)脚本语言 |
8 | r | 1980年 | 美国AT&T贝尔实验室 | 数据探索、统计分析和作图的解释型语言 |
如上表格中的数据来源于网络,具体信息如下:
C语言是一门面向过程的计算机编程语言,与C++、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速、工作量小、可读性好、易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编语言代码生成的目标程序效率低10%-20%。因此,C语言可以编写系统软件。C 语言是一种通用的、面向过程式的计算机程序设计语言。1972 年,为了移植与开发 UNIX 操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了 C 语言。C 语言是一种广泛使用的计算机语言,它与 Java 编程语言一样普及,二者在现代软件程序员之间都得到广泛使用。
Lua是一个小巧的脚本语言。它是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo三人所组成的研究小组于1993年开发的。 其设计目的是为了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。
Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python 由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。像 Perl 语言一样, Python 源代码同样遵循 GPL(GNU General Public License) 协议。
Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp 语言。由 Ruby 语言本身还发展出了JRuby(Java平台)、IronRuby(.NET平台)等其他平台的 Ruby 语言替代品。Ruby的作者于1993年2月24日开始编写Ruby,直至1995年12月才正式公开发布于fj(新闻组)。因为Perl发音与6月诞生石pearl(珍珠)相同,因此Ruby以7月诞生石ruby(红宝石)命名。
Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言。Java 可运行于多个平台,如 Windows, Mac OS 及其他多种 UNIX 版本的系统。本教程通过简单的实例将让大家更好的了解 Java 编程语言。移动操作系统 Android 大部分的代码采用 Java 编程语言编程。
Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。
罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pike)及肯·汤普逊(Ken Thompson)于2007年9月开始设计Go,稍后Ian Lance Taylor、Russ Cox加入项目。Go是基于Inferno操作系统所开发的。Go于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后来追加了Windows系统下的实现。在2016年,Go被软件评价公司TIOBE 选为“TIOBE 2016 年最佳语言”。 目前,Go每半年发布一个二级版本(即从a.x升级到a.y)。
Perl语言是一种解释型的脚本语言。Perl语言由Larry wall于1986年开发成功。当初的目的主要是在Unix环境下,用于处理面向系统任务而设计的脚本编程语言。Perl对文件和字符有很强的处理、变换能力,它特别适用于有关系统管理、数据库和网络互联以及WWW程序设计等任务,这样使得Perl称为系统维护管理者和CGI编制者的首选工具语言。
R是统计领域广泛使用的诞生于1980年左右的S语言的一个分支。可以认为R是S语言的一种实现。而S语言是由AT&T贝尔实验室开发的一种用来进行数据探索、统计分析和作图的解释型语言。
关于编程语言的思考
目前世界上的语言主要有英语、汉语、法语、西班牙语、葡萄牙语、俄罗斯语、阿拉伯语、德语、日语等等。
目前世界上的编程语言主要有c、java、python、go、r等等。
语言上我们国家还有汉语,但是编程语言上似乎没有更好的语言,都是使用别的国家设计的编程语言。
似乎大部分的语言都是其他国家中产生的,我们国家产生的编程语言几乎没有。
其实我们的程序员的人员还是比较多的。但似乎大部分公司或程序员都是埋头苦干解决问题,很少有实验室、公司或程序员有设计一种编程语言的想法,都是直接用别人已经设计好的编程语言。
古代农民进行耕种的时候,前面负责拉犁的老黄牛只知道低头走路,走快了、走慢了、走歪了后面的老农就会呵斥它鞭打它。
现在的程序员在进行开发的时候,负责一线开发代码的程序员主要负责功能实现,功能完成的好坏、快慢、对错都会有产品经理、项目经理和测试人员进行判断和识别,并要求整改和修复。很少有人能跳出这个框框,或者说格局,形成一种更高层次的思想。几乎所有企业的思路也是唯钱的,快速的完成一个一个的产品,快速的更新一个一个的版本。而几乎所有的实验室的思路是,接收并完成一个个的项目,发表一个个的文章。
我们广大的程序员,大家不要仅限于低头写代码改bug,还要抬头看看这个世界。
最后,希望,有能力的程序员、公司或实验室,开发一种我们自己的编程语言。最好比c语言效率更高,更能广泛流行。
附1、c语言生成纯色bmp文件的耗时时长
执行命令:
date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-23;./testbmp.bin test.bmp 3 1920 1080 0 0 255;date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-23;
耗时时长为26.520-21.857=4.663s
附2、go语言生成纯色bmp文件的耗时时长
执行命令:
date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-23;./testbmp test-go.bmp 3 1920 1080 0 0 255;date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-23;
耗时时长为09.100 - 02.440=6.66s。
附3、java语言生成纯色bmp文件的耗时时长
执行命令:
date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-23;java testbmp;date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-23;
耗时时长为29.594-09.137=20.457s。
附4、lua语言生成纯色bmp文件的耗时时长
执行命令:
date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-23;lua testbmp.lua;date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-23;
耗时时长为18.043-11.993=6.05s。
附5、perl语言生成纯色bmp文件的耗时时长
执行命令:
date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-23;perl testbmp.pl;date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-23;
耗时时长为84.582-43.212=41.37s。
附6、python语言生成纯色bmp文件的耗时时长
执行命令:
date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-23;python testbmp.py;date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-23;
耗时时长为07.500-00.421=7.079s。
附7、ruby语言生成纯色bmp文件的耗时时长
执行命令:
date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-23;ruby testbmp.rb;date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-23;
耗时时长为45.972-27.422=18.55s。
附8、r语言生成纯色bmp文件的耗时时长
执行命令:
date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-23;Rscript testbmp.r;date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-23;
耗时时长为72.439-10.803=61.636s。
本次测试的环境是在虚拟机上安装的ubuntu系统。
参考网页
https://blog.csdn.net/YJREGD/article/details/106494057
https://blog.csdn.net/weixin_37988176/article/details/109377109