文档章节

Golang, Swift, Nodejs 和 Rust 性能对比

点空
 点空
发布于 2016/02/01 13:08
字数 592
阅读 586
收藏 3


原文在:http://771dian.com/cb/topic/4yi18ADKg 


先说结论:

  • 一般程序:rust最快,比golang快一丁点;比nodejs快2倍;比swift快3倍。。。


  • 深度递归:形式完全逆转,swift最快,比rust快一倍;比golang快2.3倍;比nodejs快3倍

  • 综合来看,rust算最快,但它的生态系统很弱,不用考虑。我们给firefox做过扩展,深刻体会其团队思路之坑爹,绝对不会跟随他们的产品。


普通:

递归:

来源: https://grigio.org/go-vs-node-vs-rust-vs-swift/ 


语法便利性


对于跨平台语言,除了性能,语法的便利也很重要,会严重影响开发效率。除了rust外,下面几乎是共识:

  • nodejs(es6或es7语法)最方便;swift接近,但略微差一些;和前两者比,golang语法则不算方便。

  • nodejs 无需强类型,原生支持json,支持类和原生并发。实在太轻松。想要强类型,有typescript可选。不想要,可以不用。

  • golang和swift,都不够方便

  • 比如,处理json,都需要依赖库把json解析为强类型结构。golang是自带库,swift是第三方库(国人作品)。使用库之后,golang和swift就差不多了。

  • golang不支持类和泛型,结构体模拟类不够简洁。swift支持类。

  • swift语法接近 typescript 版本的Javascript,转移很便利

  • golang语法自成一派,不过上手也比较简单就是了。


综合结论


一般而言,如果不为了追求极致性能,用nodejs就很好,因为除了性能,开发效率也很非常非常重要。nodejs开发明显轻松。


nodejs不能多核的问题,可运行多实例,一个实例用一核这样就实现:开发效率+运行效率最大化。


不想这么做,就选择golang,毕竟深度递归并不常用。但如果大量操作json,还是用nodejs最轻松。


swift虽然开源跨平台了,但从性能、语法便利上看,除特殊情况外,不足以代替golang+nodejs。


rust虽然性能指标不错,但从我们做firefox扩展的体验来看,团队思路离大众需求,其实非常遥远,特别坑爹。我们是绝对不会跟随这个团队的任何产品的,也不推荐大家跳进去。


© 著作权归作者所有

共有 人打赏支持
点空
粉丝 3
博文 7
码字总数 4463
作品 0
私信 提问
golang vs dlang vs nodejs vs php 性能对比较量

这是我本机开的一个单核1G内存的Hyper-V虚拟机,首先我们使用的语言和框架版本给大家看一下: root@kerisy:/home/zoujiaqing# go versiongo version go1.5.1 linux/amd64root@kerisy:/home/...

冰力
2015/11/13
0
1
开源 IP 地址定位库 ip2region 1.7 发布,新增 rust 支持

ip2region 是准确率 99.9% 的 IP 地址定位库,0.0x毫秒级查询,数据库文件大小只有 3.3M,提供了 Java、PHP、C、Python、Node.js、Golang、C#、Rust的查询绑定和 Binary、B树、内存三种查询算...

狮子的魂
07/31
3.6K
12
swoole-1.7.7 发布,Http 服务器性能大幅提升

swoole-1.7.7 发布,内置Http服务器性能是Node.js的12倍 PHP的异步并发扩展swoole发布了 1.7.7 版本,此版本主要有: 增加对cygwin环境的支持 增加单次定时器的after接口 onClose事件调整为在...

matyhtf
2014/10/28
9K
65
从PHP 到Golang 的笔记 ( 转 )

———文章来源 YamiOdymel/PHP-to-Golang 为什么从PHP 转到Golang? PHP和模块之间的关系令人感到烦躁,假设你要读取档案,你需要有一个的模块,为此,你还需要将其编译然后将编译后的模块摆...

沐青之枫
05/31
0
0
使用 Rust + WebAssembly 编写 crc32

使用 Rust + WebAssembly 编写 crc32 const POLY = 0xedb88320;const TABLE = makeTable(POLY);const TABLE8 = (function () {const tab = Array(8);for (let i = 0; i < 8; i++) { }tab[0] ......

神机算子
10/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
今天
14
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
今天
9
0
my.ini

1

architect刘源源
今天
10
0
docker dns

There is a opensource application that solves this issue, it's called DNS Proxy Server It's a DNS server that solves containers hostnames, if could not found a hostname that mat......

kut
今天
11
0
寻找数学的广度——《这才是数学》读书笔记2700字

寻找数学的广度——《这才是数学》读书笔记2700字: 文|程哲。数学学习方式之广:国内外数学教育方面的专家,进行了很多种不同的数学学习方式尝试,如数学绘本、数学游戏、数学实验、数学步道...

原创小博客
今天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部