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

专访资深程序员庄晓立:我为什么要选择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版)。

(责编/夏梦竹)

揭开“iOS in the Car”的神秘面纱 与Apple对峙:法律途径,并非是我想要 Halfbrick新作市场表现低迷:前作辉煌难续 专访豌豆荚:融资,会给技术团队带来哪些影响? 前端开发必备 40款优秀CSS代码编写工具推荐 新环境下的新体验是互联网硬件火热的根本原因 信息安全救星 ——变形代码产品ShapeShifter AWS启动大规模降价,引领行业降价潮流 Windows 8.1 Update 1最新版的截图再遭曝光 2013年软件领域因缺陷导致的五大事件 专访AMD技术高管 详解Kaveri技术性能及新开发特性 网络的东西南北:从SDN到网络虚拟化 Bug让Chrome浏览器成了窃听器 联想23亿美元收购IBM X86服务器硬件及服务 Mozilla联手富士康推出Firefox OS平板 基于Web提供服务 GitHub中国游记最终回——开源与车库的碰撞 学以致用,光棍极客通过大数据搞定女朋友 1月24日:Mac步入了而立之年,生日快乐! 微软2014财年Q2财报:Surface营收翻倍 趣文:假如编程语言在一起聚餐 AOL收购个性化服务公司Gravit,耗资9070万美元 谷歌三月将办Pwnium 4黑客大赛 奖金高达271.828万美元 研发周报:精简代码,为网站减负的十大建议 教育自由日:让教育资源更开放 Win8.1下解决IE11浏览器不兼容的方法 移动周报:找你妹版权战、访俄民手游、GitHub游记终回 一周消息树:1月23日全国顶级域名根服务器疑遭黑客攻击 影响巨大 下一代互联网搭建技术:高空气球,无人机,又或是卫星? 红帽认证总监:10个架构师里有4个在中国 数据中心优化的5个途径:软件定义、云计算等 收购诺基亚,微软能否再度崛起? 以下程序中,若输入12345,ABC,则输出的结果是什么 请问大师门,我引用数据库为什么不行呀? ----在线程里的SOCKET为什么关不掉 请问如何有破解excel2000文件密码的工具或方法吗?300分酬谢,急等.谢谢! 在SQL*PLUS下怎样查看一个字段的属性,如是否为主关键字。 帮小弟一把,我仅有的36分了,各位 在vc中如何将字符串转化成其对应的ascii码?用什么函数? 天啊!!怎么办啊,救命啊 内存分配的一个小问题 无聊,散分。只给前面十个。 用image控件可以互相转换ico,bmp,jpg三种格式的图片吗? 请问哪有NGWS下载? ?有没有啊 以下程序的输出值是 哪位朋友知晓如果Table与DbGrid绑定后,如何实现非第一索引的排序。 请问MSDN有中文版的吗?我们这的全是英文版的 我的 Win2000 出大问题了,急盼各位大虾赐教 请问那里有VB.NET软件下载呀 什么delphi命令可以打开网页呢? 到底有没有人知道如何可以在panel中动态的调用frame或者是form呢? 哪里有windowsXP下载? 送我能给的最大分,请教很小的问题,中高手进 聊天请进(thinkingdog) 大家来谈谈 IBM都有些什么认证???什么认证现在比较吃香???谢谢!!! 打印数窗问题求助! 如何使用UrlDownloadtoFile下载文件使用进度条? 如何用在两次用getTime()中得到两个不同的时间。 一个类似于牛角尖的问题(多余的CONST),不能忽视,请各位高手详细说明!!谢谢! 怎样读写注册表,每次都不成功,气死我也~! 各位救命啊,用 TClientDataSet.Load XML 的问题。。。。 娃呀呀,pb8怎么这么难安装?jaguar组建就用了5分钟,regester window又用了10分钟,重启动后,还没完,偶不敢装了,把碟退了出来,大家是不是也这样?//牛虻 请教高手一个ado的问题. 请问一个TWebBrowser的问题 请问:系统崩溃后,找不到BOOT,系统告诉:DOS基本分区为格式化?无法引导启动! 在VB.NET的tabcontrol上放置AxMSFlexGrid控件问题,急 java3D 现在大家是用Oracle 8还是 Oracle 9??? C++问题求助! 请教一个错误的原因. 各位大侠请问Jeffrey Richter的windows核心程序设计是不是就是andvanced windows程序设计的第四版 SCJP里的那些什么300-020,020是什么意思啊? 请问一个关于document.write()方法的问题。急啊! 初学者,欢迎灌水。 Delphi6的Bug?不兼容? 为什么我用GetProfileString()却总是得不到结果 sos 请教各位大侠一个问题 delphi6中的installShield 请介绍接收端CRC校验传输内容是否正确的方法,资料或代码。谢谢! 各位大侠请问Jeffrey Richter的windows核心程序设计是不是就是andvanced windows程序设计的第四版? 谁会做软件狗?有钱赚了!!! 为什么我用QuickRep作的报表只能显示一条记录,而且columnHeaderBand上内容也显示不出来 气温略高于0°C,有风的时候晒在室外的湿衣服会结冰吗 用二氧焊进行单面焊双面成型时,打底焊后,焊缝上出现裂纹,并非收弧时也出现,是何原因,如何避免? 上午12时在太阳光下的影子最长吗? 在寒冷的阴天,气温未达到0摄氏度,但晾在室外的湿衣服会结冰,什么原因?工程热力学 焊接符号 焊接双面焊符合怎么表示?单面焊又怎么表示呢 如何利用太阳光下的影子测量旗子的高度啊?怎么利用太阳光下的影子测旗杆的高度? 正常铁路轨道寿命多少年 请问:原电池中,若电解质溶液为0.5mol/L硫酸溶液,电极为铜片和铝片,则电流计指针为什么偏向铝?另外请问:稀HNO3与Fe反应放H2吗?若不放出H2,那该放出哪种气体? 请问这个焊接符号圆圈里的43是什么意思? 铁路轨道衡是什么作用 Al 和Cu组成原电池 若电解质溶液为稀硫酸,则电流表的指针偏向铝还是铜?究竟电流表的偏转方向是偏向正极还是负极? 机械制图中焊接符号的表示法 HIV在空气中能存活多长时间?请问HIV在空气中到底能存活多长时间?好像听人说也就几个小时,有点疑虑的是,既然离开人体后马上会死亡,那为什么输带有HIV血的血浆时会感染HIV(因为血浆中的血 原电池中的电流计指针偏转方向为什么在Cu-Zn原电池间接上灵敏电流计,指针偏向Cu?电流计指针偏转方向不是应该和电流方向一样吗 形成西伯利亚地区大面积沼泽地的原因有多种,除了河水泛滥外,还可能有什么原因? 艾滋病在空气中能存活多久并且伴随着春天的阳光和春天的温度 将表面去掉氧化膜的镁片与铝片用带电流表的导线连接,插入盛烧碱溶液的烧杯中,此时发现电流计指针偏转,判断此原电池的正负极,并写出电极反应式和总反应方程式.铝片做负极,镁作正极负 西西伯利亚平原的沼泽是怎么形成的 HIV 暴露在空气中的存活时间是多少? 电极材料:镁铝,电解质溶液:氢氧化钠溶液,电流表指针变转方向:偏向镁,铝做负极的原因是—— 影子的方向和太阳的位置的关系太阳的变化 来的 艾滋病病毒在空气中能存活多长时间,听说过因为修眉毛而得上艾滋病的,那么,他得在刀具上存在多长时间才能消失.这种感染艾滋病的机率有多大? 谁的影子最长? 阳光下任何( )的物体都有影子,影子都在( )的一面,在同一时刻,同一地点,直立的物体的影子方向都?阳光下任何( )的物体都有影子,影子都在( )的一面,在同一时刻,同一地点,直 熔化吸热 凝固放热日常生活中有那些利用熔化吸热,凝固放热的例子?什么情况下熔化吸热,凝固放热会给我们带来不利影响?怎样避免? 永动机是可以实现的,如果分子永远在运动.这是可以做永动机的实验依据的啊设计了好几个方案,见教!==假设一第三类永动机:利用一种永不枯竭的能源,实现永动^^如果分子可以永动,这说 在一天当中,物体在太阳光下的影子的方向是如何变化的 用汽油擦除衣服上的污渍时,汽油很快跑掉了,这是什么物态变化,过程中是吸热还是放热 科学会把怎样的运动当作永动机如果永动机每分钟转动12转,对物理学意义 有多大? 为什么上午太阳光下物体的影子方向应为北偏西 请问中国男性的阴茎的长度和直径标准? 写出下列物态变化的名称,并指出该物态变化是吸热还是放热1 夏天冰欺凌冒白气2 水结冰3 秋天的露水 用什么胶可以把塑料画现在漆墙上?就是白墙 甲乙两人在铁路轨道旁背向而行,速度都是每秒1米,一列火车匀速地向甲迎面驰来,列车在甲旁开过用了16秒,而在乙身旁开过用18秒,问这列火车多长? 太阳光照射旗杆从早晨到中午.下午之间的影子变化啥时候最长,最短,垂直?旗杆和影子垂直 焊接符号表示方法 下午的影子最长还是上午的影子最长 每小时太阳光照射的影子的角度是多少? 焊接符号怎么表示? 在早上、中午、下午哪个时间你的影子最长? 为什么在太阳光照射下,人在地面上的影子早晚长,中午短? 这个是表示什么焊接符号呀 铝与镁形成原电池电解质溶液为氢氧化钠,请把负极的反应式写出来? 为什么早上影子最长? 眼睛被太阳光照射到有影子被太阳强光反射到 铁路轨道加强设备有哪些? 我有急用 由镁、铝、氢氧化钠溶液组成的原电池,负极和正极反应式分别是? 布朗运动是液体颗粒运动还是固体颗粒运动?那 “布朗运动是悬浮在液体中的固体颗粒分子无规则运动的反映”哪错了? 空气中的细菌与什么有关细菌必须从外结摄取有机物获得营养.下表为不同地区的细菌分布数场所 空气中的细菌数(个/米3)畜舍 100万-200万宿舍 2000城市街道 5000市区公园 200海洋上空 1-2北极 那什么物态变化,要吸热放热的,应该怎么记?我老是记不住,求学习方法 悬浮在液体中的大颗粒固体会做布朗运动吗 中国的哪些省都与外国相连?分别与哪些国家相连? 单面焊双面成型!立焊单面焊双面成型是左右摆动在断弧还是只要在中间点一点不用摆动就断弧?不是开坡口的两块板,是类似立角焊的样子,两个板成V形组装,最好也说一下开坡口的,他们两种是 NAOH做电解液,连接好铝和镁组成原电池,正极和负极电子式分别是什么,为什么 中国为什么要与其他国家(外国)合作? Y电焊单面焊双面成型技能 镁和铝插入NAOH溶液中连接成原电池 铝表面有氧化膜为什么不必处理氧化铝和NAOH反应不是氧化还原啊 怎么构成原电池 镁—铝—氢氧化钠 ,构成的原电池中,为什么负极是铝? 平焊对接单面焊双面成型时,第一道焊焊枪角度是多少,第二道焊缝因离铁板平面多高? 在同一时刻两根木杆在太阳光下的影子如图所示,其中木杆ab=2米,它的影子bc=1.6米,木杆pq的影子又一部分落在了墙上,qm=1.2米,mn=0.8米,求木杆pq的长度
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn