引言

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

额...与我设想的结果好像不太一样...那我们来排个序:

  1. Java
  2. JavaScript
  3. C
  4. Dart VM
  5. Dart-to-Native
  6. Dart-to-JavaScript
  7. C#
  8. 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 运行速度测评与比较的更多相关文章

  1. Sky(dart)语言介绍-android学习之旅(十)

    认识dart语言 google于2011年10月10日发布了"dart"语言的"早起预览版",google希望利用这款语言,帮助开发者克服javaScript的 ...

  2. 小程序多端框架全面测评:chameleon、Taro、uni-app、mpvue、WePY

    摘要: 微信小程序开发技巧. 作者:coldsnap 原文:小程序多端框架全面测评 Fundebug经授权转载,版权归原作者所有. 最近前端届多端框架频出,相信很多有代码多端运行需求的开发者都会产生一 ...

  3. Dart语法基础

    hello world // Define a function. printNumber(num aNumber) { print('The number is $aNumber.'); // Pr ...

  4. Dart基础学习02--变量及内置类型

    Dart基础学习02--变量及内置类型 Dart中的变量 首先看一个变量的定义和赋值 var name = 'Bob'; 在Dart中变量名都是引用,这里的name就是一个指向值为Bob的字符串的引用 ...

  5. Flutter学习笔记(2)--Dart语言简介

    Dart简介: Dart诞生于2011年10月10日,Dart是一种"结构化的web编程"语言,Dart虽然是谷歌开发的计算机编程语言,但后来被ECMA认定位标准,这门语言用于We ...

  6. Dart语法学习

    Dart语法学习 目录 参考资料 语言特性 关键字 变量与常量 数据类型 运算符 operators 控制流程语句 异常 Exceptions 函数 Function 类 Class 类-方法 类-抽 ...

  7. Dart语言概览

    ## Dart特性 Dart同时支持JIT(Just In Time,即时编译)和AOT(Ahead of Time,运行前编译)两种编译模式. **JIT** 在运行时即时编译,在开发周期中使用,可 ...

  8. Dart 语言简述

    Dart是一种“结构化的web编程”语言,Dart编程语言在所有现代浏览器和环境中提供高性能.Dart是谷歌开发的计算机编程语言,后来被ECMA认定为标准. Dart重要的概念: 1.所有的东西都是对 ...

  9. Dart的JIT 与 AOT

    JIT:Just In Time AOT:Ahead of Time 含义: 目前,程序主要有两种运行方式:静态编译与动态解释. 静态编译的程序在执行前全部被翻译为机器码,通常将这种类型称为AOT ( ...

随机推荐

  1. 关于ping命令的批处理问题

    需求描述:假设你的IP保存在名字为IP.txt的文本文档里,且每行一条ip.你想ping这些IP并得到结果 解决方案:用下面的批处理代码即可实现,将下面的代码保存为后缀为.bat的文件,比如test. ...

  2. Maven 仓库搜索服务和私服搭建

    Maven 仓库搜索服务 使用maven进行日常开发的时候,一个常见问题就是如何寻找需要的依赖,我们可能只知道需要使用类库的项目名称,但是添加maven依赖要求提供确切的maven坐标,这时就可以使用 ...

  3. SAP PM:参考维护工单创建测量凭证

    (1)使用FM:CO_BC_ORDER_POST获取工单资料(Aufnr, aufpo and materials etc): (2)使用FM:MEASUREM_DOCUM_RFC_SINGLE_00 ...

  4. LeetCode No.109,110,111

    No.109 SortedListToBST 有序链表转换二叉搜索树 题目 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的 ...

  5. 怎么保证RabbitMQ和kafuka集群的高可用性?

    rabbitMQ有三种模式:单机模式,普通集群模式,镜像集群模式 RabbitMQ的高可用性   RabbitMQ是比较有代表性的,因为是基于主从做高可用性的,我们就以他为例子讲解第一种MQ的高可用性 ...

  6. How Cocoa Beans Grow And Are Harvested Into Chocolate

    What is Cocoa Beans Do you like chocolate? Most people do. The smooth, brown candy is deliciously sw ...

  7. winfrom控件圆角

    刚好用到这个功能,看了好些例子.我就不明白,简单的一个事,一些文章里的代码写的那个长啊,还让人看么. 精简后,就其实一点,只要有paint事件的组件,都可画圆角,没有的外面套一个panel就行了. u ...

  8. Redhat6更改yum源 (转)

    最近虚拟机中安装了redhat6.3企业版,自带的yum用不起来,软件都找不到. 网上搜了一下说是没付钱...,需要改下yum源.操作步骤如下: 1.切换到yum源存放目录[root@rhel6 ~] ...

  9. ARM7探究

    1.流水线:三级流水线 预取.译码.执行.三级并行发生 2.什么是哈佛结构? 哈佛结构是一种存储器结构,是一种并行体系结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是 ...

  10. android全功能音乐播放器、基于MVP-Clean + Weex + RxJava2 + Retrofit + Dagger2 + MTRVA的综合应用、图片滤镜处理等源码

    Android仿微信朋友圈查看图片下拽返回. Android图片滤镜处理,相机滤镜处理效果源码 Android自定义View源码:一个水平的进度条 基于MVP-Clean + Weex + RxJav ...