说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

专访资深程序员庄晓立:我为什么要选择Rust?

HTML文档下载 WORD文档下载 PDF文档下载
Rust声称解决传统C语言和C++语言几十年来饱受责难的内存安全问题,同时还保持极高的运行效率、极深的底层控制、极广的应用范围。日前,CSDN采访了Rust1.0版本代码贡献者庄晓立,请他分享Rust语言特性以及学习经验。

Rust是由Mozilla开发的注重安全、性能和并发性的编程语言。这门语言自推出以来就得到了国内外程序员的大力推崇。Rus声称解决了传统C语言和C++语言几十年来饱受责难的内存安全问题,同时还保持了极高的运行效率、极深的底层控制、极广的应用范围。但在国内有关Rust的学习文档并不多见,不久前,笔者联系上了Rust1.0版本代码贡献者庄晓立(精彩博文:为什么我说Rust是靠谱的编程语言),请他分享Rust语言特性以及学习经验。


庄晓立

CSDN:你是从什么时候开始接触Rust语言的?是什么地方吸引了你?

庄晓立:我大概从2013年后半年开始深入接触Rust语言。它居然声称解决了传统C语言和C++语言几十年来饱受责难的内存安全问题,同时还保持了极高的运行效率、极深的底层控制、极广的应用范围。

其ownership机制令人眼前一亮,无虚拟机(VM)、无垃圾收集器(GC)、无运行时(Runtime)、无空指针/野指针/内存越界/缓冲区溢出/段错误、无数据竞争(Data Race)……所有这些,都深深地吸引了我——这个十多年以来深受C语言折磨的痛并快乐着的程序员。

CSDN:在你看来,Rust是怎样的一门语言?它适合开发什么类型的项目?为何你会说Rust不惧怕任何竞争对手,它既能取代C语言地位;又可挑战C++市场,还可向JavaPython分一杯羹?与这些语言相比,Rust有哪些优越的特性?

庄晓立:Rust是一门系统编程语言,特别适合开发对CPU和内存占用十分敏感的系统软件,例如虚拟机(VM)、容器(Container)、数据库/游戏/网络服务器、浏览器引擎、模拟器等,而这些向来主要都是C/C++的传统领地。

此外,Rust在系统底层开发领域,如裸金属(bare metal)、操作系统(OS)、内核(kernel)、内核模块(mod)等,也有强劲的实力,足以挑战此领域的传统老大C语言。Rust丰富的语言特性、先进的设计理念、便捷的项目管理,令它在上层应用开发中也能大展拳脚,至少在运行性能上比带VM和GC的语言要更胜一筹。无GC实现内存安全机制、无数据竞争的并发机制、无运行时开销的抽象机制,是Rust独特的优越特性。

其他语言很难同时实现这些目标,例如传统C/C++无法保证内存安全,Java/Python等无法消除运行时开销。但Rust毕竟还是很年轻的项目,它释放影响力需要时间,被世人广泛接受需要时间;它的潜力能否爆发出来,需要时间去检验。我们只需耐心等待。

CSDNRust在国内有没有具体的实际使用案例?

庄晓立:因为Rust1.0正式版刚刚发布不足一月,在国内影响力还不大,我们不能苛求它在国内有实际应用案例。但是在国外,一两年前就已经有OpenDNS和Skylight把Rust应用在生产环境。还有浏览器引擎Servo、Rust编译器和标准库、项目管理器Cargo等“两个半大型应用案例”。这些足够说明Rust语言的成熟和实用。

CSDN:你参与了Rust1.0版本代码贡献,目前该版本正式版已经发布,对此你感觉如何?这门语言是否已经达到比较成熟的阶段?

庄晓立:我积极参与了Rust语言开源项目,多次贡献源代码,曾连续三次出现在Rust官方博客公布的Rust 1.0 alpha、Rust 1.0 beta和Rust 1.0正式版的贡献者名单中。在Rust 1.0正式版出台的过程中及此前的很长一段时间,开发者付出了极大的努力,确保Rust 1.0正式版在Semver 2.0规范下,务必保持向后兼容性,除非遇到重大Bug不得不修复。

我认为,在1.0正式发布之后,Rust就已经进入了比较成熟的阶段。而且,Rust还在快速迭代发展过程中,1.0发布6周后将发布1.1,再6周后将发布1.2,必然会一步一个台阶,越来越成熟稳定。

CSDN:除了功能优先级以外,在你看来,Rust正在朝什么方向发展?未来的Rust可以期待什么样的特性?

庄晓立:Rust一定会沿着“确保内存安全、无运行开销、高效实用”的既定方向持续发展。在短期内值得期待的语言特性有:动态Drop、偏特化、继承、改进borrow checker、改进宏和语法扩展。短期内值得期待的其他特性有:增强文件系统API、提供内存申请释放API、更好地支持Windows和ARM、更快的编译速度、更方便的二进制分发机制(MUSL)、更实用的工具等等。

CSDN:据我了解,你之前也比较推崇Go语言,为何想到放弃Go转向Rust

庄晓立:推崇Go语言还谈不上,不过我曾经尝试努力接受Go语言,2011底年开始我曾经花费将近半年时间深度关注Rust开发进程,提了很多具体的改进意见和建议,也曾经多次尝试贡献源代码。后来考虑到Go语言的设计理念跟我偏差太大,其社区也不太友好,慢慢地疏远了它。我曾经写过一篇博客《我为什么放弃Go语言》,谈到了很多具体的原因。

CSDN:国内,参与Rust代码贡献的开发者多吗?有核心的人员吗?有哪些社区在维护Rust

庄晓立:国内参与Rust代码贡献的开发者并不多,但也不少,官方的贡献者名单中也偶见几个貌似国人的名字。Rust的核心开发人员基本上都是Mozilla公司的员工,他们专职负责开发维护Rust语言和相关的项目,Rust社区也主要是他们参与组织和管理的。社区人员讨论主要集中在GitHub项目主页RFC/PR/Issue官方、Discuss论坛/IRC、Reddit、HN、StackOverflow等。

CSDN:对于开发者而言,应如何学习Rust?请分享下你的经验。

庄晓立:由于Rust刚刚发布不久,各方面学习资料有限,我可以分享的经验也不多。首先推荐学习Rust官方提供的文档:

  • Rust学习手册:https://doc.rust-lang.org/nightly/book/
  • Rust学习示例:http://rustbyexample.com/
  • Rust标准库文档:https://doc.rust-lang.org/stable/std/
  • Rust语言规范:https://doc.rust-lang.org/stable/reference.html

对于已经具有C++开发经验的开发者,可以看一下这个教程,是专门给C++程序员量身定制的Rust教材。这个虽然不是官方文档,但其作者是Rust开发组成员,文档质量是有保证的。除此之外,建议大家多关注一下Reddit网站的Rust专题,那里有全世界Rust程序员分享的许多有价值的资料(地址)。中文的资料更少,大家可以看看我参与筹建的Rust中文社区,与广大国内开发者共同交流进步:http://rust.cc

作者简介:庄晓立(网络ID是Liigo、CSDN博客),山东省梁山县人,80后,2002年毕业于山东理工大学。从事IT行业十余年,其中有接近十年时间专注于易语言(eyuyan.com)编程平台的研发,长期担任大连大有吴涛易语言软件开发有限公司研发部部长。后来曾短期参与嵌入式软件开发。目前在教育行业负责视频培训软件研发。

本文选自程序员电子版2015年6月B刊,该期更多文章请查看这里。2000年创刊至今所有文章目录请查看程序员封面秀。欢迎订阅程序员电子版(含iPad版、Android版、PDF版)。

(责编/夏梦竹)

Dropbox收购Snapjoy 意欲打造媒体中心 2012世界“末日”:有经过正确的分析吗?! 23.5亿美元!谷歌出售摩托罗拉机顶盒业务 两家巨头相继放弃移动广告,移动广告形势堪忧? 应用洗牌,还能免费多久?Google推出iPad版Quickoffice 2012末日APP推荐 求生自救必备! Windows8上网利器 不卡死的IE10浏览器 为何Java程序员学习Clojure有优势? 我们是如何阅读代码的? “热水冷却”技术将主导美国国防部数据中心改造 程序员想玩转大数据:需要知晓的12种工具 2012年谷歌应用商店增长迅速 但苹果最赚钱 Apple微软Google都在竞购一家创业公司 违反新条款?苹果强行下架AppShopper 2012移动开发教程盘点:最棒的国外游戏开发站 重思JavaScript的好与坏 细数那些 NeXT 留给 OS X 的遗产 一张图让你知道大数据的生态系统 Camera360开放SDK:拍照和滤镜一行代码搞定 一周消息树:计算机将拥有五感 人类面临威胁? 通晓数学的人就可以当程序员吗? 360发布企业版4.0 可自定义软件白名单 不要总是依赖机器 MongoDB扩展彰显分片功夫 Dell与HP的OpenStack的战略:渠道对抗SLA 路况电台王雷:未来车载系统会是Android的天下 移动周报:2012移动开发工具系列盘点 谷歌不愿错失机会 Android或不再成它人独享 黑客文化:Facebook公布2012年Hackathon大赛顶级“黑客作品” 中国移动音乐开放平台正式对外开放 GitLab 4.0发布 更好地支持PostgreSQL 傻瓜式移动应用开发平台:专访摩讯创始人赵健 为什么mysql的longblob类型数据上传超过1M就不行了? VB如何作中文输入软键盘,高分回报? win98自动启动问题 为什么mov eax, [400000h] 和mov eax 400000h汇编结果一样? 刚才的没解决 找工作, 上海。 请帮忙啊 关于在delphi中Dll的创建和调用,象登陆界面一类,dll中有窗体,求例子。 哪家网上书店信誉高,C++ builder书质量高? 关于rs.MovePrevious 100分问题:如何在sdi的view的(0,0,NULL,20)区域固定显示一定内容 VB中使用ADO连接远程数据库时的事务处理问题 在weblogic中,这个错误是怎么回事?(在线等待) 怎么用SOCKET传送一个自定义类型的数据 szbug大哥请进来拿分 幸福女人的小小要求(zt) 各位好,请问一个问题:存储过程的作用是什么,能不能举例说明一下,看了半天书,也没能明白,多谢了! 我想用循环来实现这样的语句,怎么写呢? 请问xml元素内容部分的html代码如何处理 怎样定义rect数组? 一道考试题目:考考你们自己的C++水平。 怎样用代码遍历DBGrid中的记录?急!在线等待! 为什么mov eax, [0x400000h]和mov eax 400000h汇编结果一样? 网络报表最好的解决方法是什么 高分求购web 打印控件?还有一个远程数据库,客户端打印问题帮忙解决一下 哪位高手能给一个简单的TOOLBAR控件应用的原代码?(非常需要) 哪些有钱途?哪些有前途? 讨论:MSE(软件工程)对中国目前的开发现状真的有帮助吗?来者有分 ACCESS查询语句中的DATEPART函数为什么不能执行??? php为什么安上后不能用 在VS.Net中如何使注释生成已编译的HTML帮助文件? 我想更改Win2000的开机画面,请高手指点 ADO连接数据库时的事务处理问提 对于动态生成的控件,如何确定它的名字? vb 中使用select 的问题 想把post的变量遍历,怎样实现 小问题 关于参数 如何通过一个计算机名来查出它在局域网中的IP !!!!!~~~ 急,哪里可以下载IeWebControl? 有没有方法通过分布式连接直接从sql server写数据到oracle数据库。 郁闷问题:有谁知道Textbox在运行时如果没有任何输入,它是否空值? 如何用vb做一个启动程序(在windows启动运行) 请问,怎样将一个已分好区的电子盘格式化成ext2格式??? 请教web services问题 高分求购H261解码算法 子类中怎么用基类中的一个属性? 请问有没有JB7的中文教程,高分相求!(400分) 怎样在下拉列表框中显示数据表?具体怎么做? 请教,各位是如何实现对SQL SERVER的记录加密的? Datagrid中的HyperLinkColumn如何传递两个变量值给下一页? 高手请进:怎样将一个值传递到datagrid模板列的一个textbox中?问了好久,没有人会吗? 理科第一名周晨又在镇海中学富阳女生喻鹏阳文科725分 每天睡足杭州各界人士畅谈最美现象杭州市区公办小学昨天报名 没有出现排杭帮菜中小贝最爱叫化鸡 吃完一份再来宁海市民看望英雄快递哥 顺丰速运奖励杭活禽交易解禁销售未旺 年底高档活鸡杭州城东将建宜居新城 杭海路等主干道7月1日起6对高铁经过温州 去上海只浙江:破除教师“终身制” 教师资格5省教育考试院专业人士:高分考生有可能回访6位浙江高考状元 2人就职国际大美国一城市遭强沙尘暴袭击 白日瞬间变温州农民房仅限同村交易 抵押可扩大到浙江金华:幼儿园收费要网上公布 接受国家发改委:下半年或扩大房产税试点范统计局局长:中国经济“升级版”正在提阿里人才招聘计划:应届生年薪60万 阿里人才招聘计划:应届生年薪60万 国家统计局局长:城乡居民收入比国家财48家网站进辟谣平台 提示网友勿通过打车软件大数据:中国游客春节出境游走同济副校长:上海少有超大封闭社区 无深度好文-超低排放是环保史上的重大技谷歌人工智能挑战人类:围棋赛细节公布壹|因为你软弱,所以你可欺你想了解的罗切斯特大学都在这里了!中海发展主力与散户再度背道而驰!散户美唱完中国唱俄罗斯,国际油价竟成为普这四项知识没搞懂,怎么能说了解砗磲?诚琛美国北棕榈滩水上俱乐部说明会于3“冻产”非“减产”国际油价难逃底部区2016中国好声音校园海选将开启 与补肾壮阳不用愁,学会这样做,做强悍男18岁小伙强奸女同事遭其男友教训 武周慧敏晒23年前古装照 与现今模样几台东一路段“万里肉粽”挡住沿途海景 秘鲁一输油管道破裂 亚马逊地区遭遇严你喝的是蜂蜜还是糖浆?鉴别蜂蜜好坏有奥运题材藏品 投资前景可观广晟有色主力资金跑步进场,直线拉夏子曦:2月23日现货原油/乌金欧盘
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘