半个月使用rust语言的体验
从第一次下载rust语言的编译器到今天刚好第14天。 简单说一下对这个语言的感觉吧。
一、性能
把以前用java写的一个中文地址切分的算法,用rust重新实现了一下(https://github.com/naturemickey/addressCut_use_rust)。运行的速度上,rust的release版本要比java快上一倍左右。
java版本的代码量是800多行,而rust版本的代码量是600多行。
这个体验还是很不错的,毕竟才刚刚开始学习rust语言,很多代码自己都觉得写得丑陋无比(能实现出来就不容易了,还没有能力想怎么能写得好看呢),对rust语言的机制与库都不熟悉(一边看文档一边写),基本上就是:能用就行,先不管性能。
再过一段时间,对rust更熟悉了,再把代码改得好看一些,说不写性能也会更好一点。
rust的编译结果在内存结构上是与C语言兼容的,这也是它性能不错的原因之一。
二、语法
rust语言在语法上有一个新东西:RAII——就是通过所有权、借用、生命期机制来做到精确的内存控制(不需要程序员写代码来释放内存,也没有GC)。
我也是老程序员了,每年都会学习一些新的语言(我忘记的语言比很多程序员见过的语言还多),而这些语言中要么是有GC的,要么是需要手工管理内存的。而能够通过语法设计来让编译器精确控制内存的语言这还是头一次见到。
不过这个语法也是最折腾人的地方,曾有一行代码整整搞了两天才编译成功。大学毕业之后还从没有哪一个语言像rust语言这样让我在初学的过程中就这样痛苦(大学的时候第一个用C语言实现的HelloWorld搞了一个星期),从这点来看rust对新手程序员并不友好,但闯过了这一关之后就好多了。
这个机制的好处也是明显的:
1.性能:没有GC就代表没有FGC,可以用来做实时的系统(如果是JVM用到几十G内存的情况下,一次FGC就不是几秒钟那么简单了)。
2.严谨:这种语法上的控制是非常严谨的,它会逼迫我们在写代码的过程中对逻辑进行思考,一但有问题会导致编译不通过。这样写出来的代码会比其它语言写出来的代码bug更少。
除了RAII之外,其它的东西都在其它语言中有出现,并不是什么新玩应,比如:宏(lisp)、模式匹配(Erlang、Scala)、并发模型(和go相似,尤其channel,但它的Arc又和Erlang非常像,只是Erlang一定会复制数据发送给其它进程,而rust只是内部多了一个引用计数)……。
三、配套设施
1.有一个模块管理工具cargo,这东西也挺方便的,有点像java里的maven和gradle。
2.IDE:目前rust语言还没有IDE支持,我写代码用的是VS Code,然后手敲命令来编译的。毕竟这个语言的1.0版本是今年(2015年)5月,以后肯定会有好用的开发工具出现。
(ps. 在这14天的经历中也有一个小发现:VSCode在这两个星期竟然有两次小版本的升级,看来微软还挺积极的)
四、总之
这是一个挺不错的语言:其严谨的语法与精确内存控制对程序的质量都有很大的帮助——如果熟悉了它,相对于C++来说,rust更容易写出可靠的软件,而且性能可能更好。
不过对于新手程序员来说,rust的严谨性就显得不太友好了。
周游[http://www.cnblogs.com/naturemickey]版权所有,未经许可请勿转载
半个月使用rust语言的体验的更多相关文章
- 5分钟APIG实战: 使用Rust语言快速构建API能力开放
序言:Rust语言简介 参与过C/C++大型项目的同学可能都经历过因为Null Pointer.Memory Leak等问题“被” 加班了不知道多少个晚上.别沮丧,你不是一个人,Mozilla Fir ...
- 【福利】十一起,小冰科技所有UWP产品免费半个月
从十月一日起(UTC协调世界时),至十月十五,小冰科技所有UWP产品免费半个月!!!!!! 注意是UTC哦,中国区,比UTC早8个小时,要等到十月一号早晨八点开始... 现在小冰科技旗下一共发布了 5 ...
- Rust语言
Rust语言 https://doc.rust-lang.org/stable/book/ http://www.phperz.com/article/15/0717/141560.html Rust ...
- 【转】对 Rust 语言的分析
对 Rust 语言的分析 Rust 是一门最近比较热的语言,有很多人问过我对 Rust 的看法.由于我本人是一个语言专家,实现过几乎所有的语言特性,所以我不认为任何一种语言是新的.任何“新语言”对我来 ...
- Atitit.rust语言特性 attilax 总结
Atitit.rust语言特性 attilax 总结 1. 创建这个新语言的目的是为了解决一个顽疾:软件的演进速度大大低于硬件的演进,软件在语言级别上无法真正利用多核计算带来的性能提升.1 2. 不会 ...
- Rust语言——无虚拟机、无垃圾收集器、无运行时、无空指针/野指针/内存越界/缓冲区溢出/段错误、无数据竞争
2006年,编程语言工程师Graydon Hoare利用业余时间启动了Rust语言项目.该项目充分借鉴了C/C++/Java/Python等语言的经验,试图在保持良好性能的同时,克服以往编程语言所存在 ...
- 我持续推动Rust语言支持Windows XP系统
前言 Rust好像长期以来不支持Windows XP系统.有不少用户发帖提议官方支持XP,基本上都被Rust官方开发人员明白的拒绝了.他们的对话大致上是以这种形式開始和结束的(当中乙方代表官方及其拥趸 ...
- Rust语言:安全地并发
http://www.csdn.net/article/2014-02-26/2818556-Rust http://www.zhihu.com/question/20032903 Rust是近两年M ...
- Rust语言之HelloWorld Web版
Rust语言之HelloWorld Web版 下面这篇文章值得仔细研读: http://arthurtw.github.io/2014/12/21/rust-anti-sloppy-programmi ...
随机推荐
- 人民币金额转化汉字的java写法
最近看到一个把一个浮点数转化为汉字人民币的小题,感觉很有意思就去用java实现了一下,没想到没有想得那么简单,在网上搜了一下也不近人意,经过几次修改后,现在实现了,现在分享一下. 一.当输入一个浮点数 ...
- Hadoop创建/删除文件夹出错
log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFact ...
- 三星 S4 手机误删除相片(相册)后的恢复问题,仅记录处理过程,其它Android手机同样适用
无意中删除了三星S4手机中相机的相册.过程是这样的,用手机拍了几张照片,觉得最后那张拍得不好,想删除,于是进入相册,看到有那张照片的图标,选择,删除,悲剧发生了! 这里得说三星的不好:在相册中,相册文 ...
- 腾讯云服务器 - 安装redis3.2.9以及集群
redis大家都知道,服务器上必不可少的,那么在生产环境下安装的步骤和虚拟机里也是差不多的 官网上最新稳定版是3.2.9,而4.0的更新比较大,但是比几个还是beta版嘛 下载并且上传压缩包至云服务器 ...
- Java 8 – 日期和时间实用技巧
当你开始使用Java操作日期和时间的时候,会有一些棘手.你也许会通过System.currentTimeMillis() 来返回1970年1月1日到今天的毫秒数.或者使用Date类来操作日期:当遇到加 ...
- python源码安装
# mkdir /apps/Python- 解压源码包,进入源码包 [root@LB_81 Python-]# ls aclocal.m4 configure.ac install-sh Makefi ...
- HTML5学习笔记(十八):闭包
高阶函数 JavaScript的函数其实都指向某个变量.既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,也可以返回一个函数,这种函数就称之为高阶函数. 函数作为参 ...
- HTML5学习笔记(六):CSS基本样式
背景 需要注意:背景的所有属性都不会向下进行继承. 背景色 我们可以设定一个纯色为背景色. p {background-color: red;} a {background-color: #ff000 ...
- 菜鸟学Java(五)——JSP内置对象之request
书接上回,上次跟大家概括的说了说JSP的九种常用内置对象.接下来就该聊聊它们各自的特点了,今天先说说request吧. 下面是request的一些常用方法: isUserInRole(String r ...
- js判断是否安装flash player及当前版本 和 检查flash版本是否需要升级
一.js检查flash版本升级 for (var i = 0, len = navigator.plugins.length; i < len; i++) { var plugin = navi ...