Dart 运行速度测评与比较
引言
Dart 是一门优秀的跨平台语言,尽管生态方面略有欠缺,但无疑作为一门编程语言来说,Dart 是很优美,很健壮的,同时也引入了一些先进的编程范式,值得去学习。
测试内容
现在,我们就来测评一下Dart 语言的运行速率,测试平台为WSL(win子系统,Ubuntu18.04),有以下几个对比项:
| 编程语言 | 版本 |
|---|---|
| Dart VM | Dart VM 2.7.1 |
| Dart-to-JavaScript | dart2js 2.7.1 |
| Dart-to-Native | 同上 |
| Java | openjdk 11.0.6 |
| C# | .NET Core SDK 3.1.102 |
| C | gcc 7.5.0 |
| JavaScript | node 8.10.0 |
| Python | Python 3.6.9 |
测试用代码如下:
for (i = 0; i < 10000; i++)
for (j = 0; j < 10000; j++)
a[i][j] = i * j + 1;
最后统计此代码段运行时间,各个语言的具体代码见本文最后。
测试结果
| 编程语言 | 运行指令 | 运行时间/ms |
|---|---|---|
| Dart VM | dart t.dart | 375 |
| Dart-to-JavaScript | dart2js t.dart && node out.js | 638 |
| Dart-to-Native | dart2native t.dart && ./t.exe | 631 |
| Java | javac t.java && java t | 126 |
| C# | dotnet restore && dotnet run | 964 |
| C | gcc t.c && ./a.out | 313 |
| JavaScript | node t.js | 245 |
| Python | python3 t.py | 22403 |
额...与我设想的结果好像不太一样...那我们来排个序:
- Java
- JavaScript
- C
- Dart VM
- Dart-to-Native
- Dart-to-JavaScript
- C#
- Python
首先声明一下,就语言本身的优美程度来讲,我的确是有点不喜欢Python,但我也没想到它会这么慢...还不是一个数量级,开始还以为电脑卡住了,又试了几下大概都还是这么多。当然,Python的强项也不在此,而且如果使用numpy优化处理该代码段的话,速度一定不会这么不堪。
同时C#的.net core也被openjdk远远甩开了,果然,C#最好还是要用在windows上。本来我是要更喜欢C#的,哎但是这个速度...
最让我惊讶的是,本来感觉毫无疑问应该排第一的C语言竟然被两种解释性语言给甩开了。也...许,是WSL的问题?
总之,Dart的运行速率基本在正常范围内,并且运行也很方便,再就是跨平台性,flutter也将赋予dart更强大的生命力。
测试代码
Java
public class t {
public static long[][] a = new long[10000][];
public static void main(String[] args) {
long t0, t1;
for (int i = 0; i < 10000; i++)
a[i] = new long[10000];
t0 = System.currentTimeMillis();
for (int i = 0; i < 10000; i++)
for (int j = 0; j < 10000; j++)
a[i][j] = i * j + 1;
t1 = System.currentTimeMillis();
System.out.println("Running Time: " + (float) (t1 - t0) + "ms");
}
}
JavaScript
a = new Array(10000);
for (let i = 0; i < 10000; i++)
a[i] = new Array(10000);
console.time('Running Time');
for (let i = 0; i < 10000; i++)
for (let j = 0; j < 10000; j++)
a[i][j] = i * j + 1;
console.timeEnd('Running Time');
C
#include <stdio.h>
#include <time.h>
int a[10000][10000];
int main()
{
int i, j;
double t1, t2;
t1 = clock();
for (i = 0; i < 10000; i++)
for (j = 0; j < 10000; j++)
a[i][j] = i * j + 1;
t2 = clock();
printf("Running Time: %fms\n", 1000 * (double)(t2 - t1) / CLOCKS_PER_SEC);
return 0;
}
Dart
void main() {
var a = List(10000);
for (int i = 0; i < 10000; i++)
a[i] = List(10000);
var timer = Stopwatch();
timer.start();
for (int i = 0; i < 10000; i++)
for (int j = 0; j < 10000; j++)
a[i][j] = i * j + 1;
timer.stop();
print('Running Time: ' + timer.elapsedMilliseconds.toString() + 'ms');
}
C
using System;
namespace t
{
class Program
{
static int[,] a = new int[10000,10000];
static void Main(string[] args)
{
DateTime beforDT = System.DateTime.Now;
for (int i = 0; i < 10000; i++)
for (int j = 0; j < 10000; j++)
a[i,j] = i * j + 1;
DateTime afterDT = System.DateTime.Now;
TimeSpan ts = afterDT.Subtract(beforDT);
Console.WriteLine("Running Time: {0}ms", ts.TotalMilliseconds);
}
}
}
Python
from time import time
a = [[0 for i in range(10000)] for j in range(10000)]
t0 = time()
for i in range(1000):
for j in range(10000):
a[i][j] = i * j + 1
t1 = time()
print ('Running Time: ' + str(1000*(t1-t0)) + 'ms')
Dart 运行速度测评与比较的更多相关文章
- Sky(dart)语言介绍-android学习之旅(十)
认识dart语言 google于2011年10月10日发布了"dart"语言的"早起预览版",google希望利用这款语言,帮助开发者克服javaScript的 ...
- 小程序多端框架全面测评:chameleon、Taro、uni-app、mpvue、WePY
摘要: 微信小程序开发技巧. 作者:coldsnap 原文:小程序多端框架全面测评 Fundebug经授权转载,版权归原作者所有. 最近前端届多端框架频出,相信很多有代码多端运行需求的开发者都会产生一 ...
- Dart语法基础
hello world // Define a function. printNumber(num aNumber) { print('The number is $aNumber.'); // Pr ...
- Dart基础学习02--变量及内置类型
Dart基础学习02--变量及内置类型 Dart中的变量 首先看一个变量的定义和赋值 var name = 'Bob'; 在Dart中变量名都是引用,这里的name就是一个指向值为Bob的字符串的引用 ...
- Flutter学习笔记(2)--Dart语言简介
Dart简介: Dart诞生于2011年10月10日,Dart是一种"结构化的web编程"语言,Dart虽然是谷歌开发的计算机编程语言,但后来被ECMA认定位标准,这门语言用于We ...
- Dart语法学习
Dart语法学习 目录 参考资料 语言特性 关键字 变量与常量 数据类型 运算符 operators 控制流程语句 异常 Exceptions 函数 Function 类 Class 类-方法 类-抽 ...
- Dart语言概览
## Dart特性 Dart同时支持JIT(Just In Time,即时编译)和AOT(Ahead of Time,运行前编译)两种编译模式. **JIT** 在运行时即时编译,在开发周期中使用,可 ...
- Dart 语言简述
Dart是一种“结构化的web编程”语言,Dart编程语言在所有现代浏览器和环境中提供高性能.Dart是谷歌开发的计算机编程语言,后来被ECMA认定为标准. Dart重要的概念: 1.所有的东西都是对 ...
- Dart的JIT 与 AOT
JIT:Just In Time AOT:Ahead of Time 含义: 目前,程序主要有两种运行方式:静态编译与动态解释. 静态编译的程序在执行前全部被翻译为机器码,通常将这种类型称为AOT ( ...
随机推荐
- MySQL出现错误1030-Got error 28 from storage engine
磁盘空间不足引起的!1030-Got error 28 from storage engine df -h 清理空间
- CentOS下MySQL忘记root密码解决方法【亲测】
1.修改MySQL的登录设置: # vim /etc/my.cnf 在[mysqld]的段中加上一句:skip-grant-tables 例如: [mysqld] datadir=/var/lib/m ...
- Z变换解差分方程的思考
问题描述 今日碰到一道差分方程的题目,如下 [ y(n + 2) - cfrac{7}{10}y(n + 1) + cfrac{1}{10}y(n) = 7x(n+2) -2 x(n + 1) ] 已 ...
- RHEL安装rails后启动报错
[root@redhat7 demo]# rails server/usr/local/rvm/gems/ruby-2.4.1/gems/bundler-1.16.0.pre.2/lib/bundle ...
- Ribbon XML Editor 2019.01.23-Setup.zip(支持64位)
RibbonXMLEditor是一款用于书写和测试customUI XML代码的国产工具,具有XML验证.Office文档压入.回调函数查询等多种功能. 可作为定制Office自定义界面有关程序开发的 ...
- 初始化方法,init,构造器
1.继承于NSObject class student: NSObject { var name : String? var age : Int = var friend : Int = init(n ...
- 四剑客(sed)
一. sed sed简介: 用Linux环境中的编辑器程序来编辑文本文件.这些编辑器可以让你用简单命令或鼠标单击来轻松地处理文本文件中的文本.但有时候,你会发现需要自动处理文本文件,可你又不想动用全副 ...
- FastDFS安装部署
博主本人平和谦逊,热爱学习,读者阅读过程中发现错误的地方,请帮忙指出,感激不尽 服务器信息: Storage:192.168.247.20 Traker:192.168.247.21 一.搭建环境准备 ...
- linux下安装glibc-2.14,解决“`GLIBC_2.14' not found”问题
下载安装包:http://ftp.gnu.org/gnu/glibc/ 我下载的是glibc-2.14.1.tar.gz 解压:tar xzf glibc-2.14.1.tar.gz cd glibc ...
- 1040 有几个PAT (25 分)
题目:1040 有几个PAT (25 分) 思路: 是个规律题,只要找到规律就有思路,那代码基本就有了,就是怎么实现比较好和是否简洁的问题. 很明显:A是分水岭,A前面有多少个P和A后面有多少个T知道 ...