我为什么选择Rust

不堪回首的往事

七八年前,我自认还是一名合格的C/C++开发者。后来涉及大数据处理方向,被Python的魅力所吸引,大部分开发都使用Python进行,偶尔使用C写个链接库解决Python的性能瓶颈。
半年前,阴差阳错的接下了一个C/C++嵌入式开发的项目,开启了这段痛苦的经历。工期紧任务重,来不及充分的熟悉业务,就必须提交成果。C/C++对开发者的要求高,嵌入式设备的内存又少的可怜,写代码需要非常谨慎,七八年前的开发经验早已荒废,不足以支撑这个项目,种种原因交织在一起,注定了这个项目要走向失败。
要重拾C/C++,难度不小,这不是语法的原因,而是思想的原因。C/C++要求程序心中必须紧绷一根弦,时刻关注内存等使用情况。习惯了其他的语言,即便心里明白这一点,但做起来却着实不易。
是时候考虑换一种语言,规避C/C++的顽疾。

选择的方向

之前在工作的闲暇里,也考虑过这个问题,当时简单了解了一下Go和Rust。这二位都有一个NB的老爹,最近几年里发展的很快,双双进入开发语言排行前20的序列。

Go

优点

Go语言的优点有很多,对于我而言,最看重下面这几条:

  1. 简单易学
  2. 简单高效的并发
  3. 丰富的标准库
  4. 开发者效率高
  5. 编译时间短

缺点

Go语言的缺点也不少,但下面这几条,是我无法接受的:

  1. Go语言性格倔强,狂妄自大:Go是名符其实的官二代,很霸道,虽然有很大的社区,但Go从来不听社区的声音,坚持自己的观点,连花括号的书写方式都要进行限制,像特朗普一样蛮不讲理。
  2. Go 语言通过函数和预期的调用代码简单地返回错误,没有好的错误处理策略。

基于以上两点,我决定不使用Go语言。

Rust

优点

Rust的很多优点也被圈内人士津津乐道,我最看重如下几点:

  1. 与众不同的内存管理:与其他语言基于垃圾回收的内存管理不同,Rust采用所有权、引用借用、生命周期的内存管理方式,这是世界上独一无二的管理方式,它可以0开销的解决内存管理的各种问题。
  2. 强大的编译器:Rust的编译器设计理念与Go完全不同,Go为了编译速度快,不惜牺牲很多错误的检查,而Rust的编译器可以发现代码中几乎所有的问题并给出非常人性化的提示。强大的编译器与内存管理方式结合,号称只要编译通过,程序就不会因为内存问题崩溃。
  3. 与C/C++的obj完全兼容:Rust只有编译器,没有链接器,Rust的编译器可以将Rust代码编译为与C/C++完全兼容的obj文件,然后使用C/C++的链接器进行链接。这使得Rust与C/C++完美结合,已有的项目可以一个模块一个模块的替换C/C++的代码。
  4. 完整易用的工具链:Rust的工具链提供了从创建项目、包管理、编译、调试和方方面面,甚至连代码提示都有工具支持,这使IDE的实现变得极为容易,用vscode、sublime等工具稍加配置即可成为强大的开发工具。

缺点

世界上没有完美的语言,Rust也存在许多缺点:

  1. 陡峭的学习曲线:与Go相比,Rust学习难度高,尤其是其内存管理的方式,理解有些困难,但与C/C++相比,这不算什么。
  2. 生态还未完全建立:现在的Rust生态还不是很丰富,有些领域还没有很好的库支撑,好在它能与C/C++很好的结合,多多少少可以弥补库的不足。

结论

通过以上比较,我更喜欢用Rust来代替C/C++,做一些较为底层的开发工作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值