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

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

(责编/夏梦竹)

VB获得系统中的所有字体列表 VB获得系统中鼠标的键数 获取驱动器信息-VB资料 文章主题: 获取桌面图象 -VB资料 计算两个日期间的工作日-VB资料 监视外部程序的运行情况-VB资料 检测文件是否存在 -VB资料 检测系统驱动器-VB资料 检查电子邮件地址输入的有效性 -VB资料 检查硬盘空间 -VB资料 将数据转换为内存二进制形式字符串(模拟CV?和MK?$两组函数) -VB资料 禁用 Alt-Tab 或 Ctrl-Alt-Del -VB资料 禁止使用 Alt+F4 关闭窗口-VB资料 绝非玩笑:VB7将完全面向对象 拷贝磁盘 -VB资料 控制Ctrl+Del+Alt键-VB资料 快速编辑VB程序技巧 快速查找或替换文本中的字符-VB资料 快速建立目录 -VB资料 快速交换整数 -VB资料 快速注册/注销动态链接库或控件-VB资料 理解面向对象编程 -VB资料 VB利用GetCursorPos 读取滑鼠的座标 利用Visual Basic 关闭Windows9X或者Windows NT VB利用代码启动/关闭中文输入法 模拟一次鼠标事件 -VB资料 目前执行的是哪一国语言的 Windows -VB资料 VB判断剪贴板的所有可用格式 VB判断驱动器类型 VB判断是否已经建立 Dial Up 连接 VB判断一个年份是否为闰年 紧急求救,请高手来看看 .NET和JAVA到底哪个好? 谁来救我?ISequentialStream::write()为何不好使? 定义类型的困惑 大虾们,如何做一个图标选择框!!!(详情见内) ADO编程问题求解!!!!!!!!!!! ****************简单问题,高分求救??????????????????????? 请问怎样在TabStrip中的选项卡中增加图片?谢了 工程如何能建的工整一些? www.alldas.de为什么无法访问了? 关于动态控件的问题 ADO编程问题求解 怎么编程产生1MHz甚至更高频率的周期信号? 紧急求助—有关JMail4.1附件问题 挥泪大送分!!!!! 怎样才能让自己变胖? 做个仅有对话框的应用,但想把它放到托盘, 给ASP爱好者提个建议! 关于SQLserver2000“视图“的两个问题,请教高手! 好久没上网了,送分以庆祝再回csdn!!!!! 做浏览器,如何实现 “后退”,“前进”,这二个功能? 如何使C:盘,D盘的根目录不共享? 用resin时,是否需要jdk,如何配置?分必给! SDI中的某一个子视图里怎样对主窗口的状态栏进行更改?? ◇◆◇ 失恋代表什么? ◇◆◇ 我英语不懂,想考高程.行吗 ◇◆◇ 学生生涯快完了,大家来说说对学生生涯的感受,特别是什么最深刻的! ◇◆◇ 求救!如何把SQL命令从前端应用程序传给应用程序服务器 要去招商行笔试了,有参加过的兄弟给点建议。 ###############讨论一下->微软全力推出.NET技术和C#语言的出现,VC++还有多久的寿命??? 要去招商行笔试了,有参加过的兄弟给点建议 如何发一消息,帮别人问的 高手帮助!!! 要去招商行笔试,有参加过的兄弟给点建议。 要去招商行笔试,有参加过的兄弟给点建议 我配置的IIS,为什么只能读数据库,不能写入?为什么? 我要去招商行笔试了,有参加过的兄弟给点建议。 好久没发帖了……………… 请问LINUX/UNIX下那种扩展名的文件是可执行的?DOS的。EXE对应的格式是什么? C++入门看什么书好? c++一问题 20分呀!!!!!谁有BIG5到GB的好方法!(除了用码表文件) 请介绍一下FREENET中所谓“寻找最近主机”的算法。 isapiapp的问题?如何定义一个全局变量,使后一个运行的程序不会更改前一个程序的变量 请问response.buffer = true 有什么用? 简单问题: 请教VC中的视图切换问题(急) 50分征答:如何把*.dbf文件的数据导入SQLServer2000中? Win2000下调试ASP组件 寻找资深的网络培训工程师。 请教各位大虾,为何用Data report做的报表(比较宽),将打印机(Espon1600kII)的纸张设为A2纵向,结果打印预览正常,但打印是只打印3\4行就停止了,为什吗?急,拜托 设函数f(x)=ax2+bx+c(c>0),且f(1)=-a/2 求证:函数f(x)有两个零点 设x1,x2是函数f(x)的两个零点,求|x设函数f(x)=ax2+bx+c(c>0),且f(1)=-a/2 1.求证:函数f(x)有两个零点2.设x1,x2是函数f(x)的两个零点,求| 定义域为R的函数f(x)若关于x的方程f(x)2+bf(x)+c=0定义域为R的函数f(x)=lg|x-2|(x不等于2)1(x=2)若关于x的方程f(x)2+bf(x)+c=0有5个不同的实数解x1,x2 x3 x4 x5,则f(x1+x2+x3+x4+x5)= 已知A为实数,f(x)=a-2/(2^x+1).当f(x)是奇函数时,若方程f(x)反函数=log2(x+t)总有实数根,求 T的范围 求函数f(x)=e^x+2x+3的零点所在的区间以及零点的个数 定义域为R的偶函数f(x),当x>0时,f(x)=lnx-ax(a属于R),方程f(x)=0在R上恰有5个不同的实数解 (1)求x0时,f(x)=lnx-ax(a属于R),方程f(x)=0在R上恰有5个不同的实数解(1)求x 已知函数f(x)=〔log2^x x>0 3^x x0 3^x x 函数f(x)=xcosx^2在区间[0,4]上的零点个数为? 已知M是满足下面性质的函数f(x)的集合:在定义域内,方程f(x+1)=f(x)+f(1)有实数解(1)函数f(x)=1/x 是否属于集合M?说明理由(2)设函数f(x)=lg(t/x^2 +1),求t的取值范围 已知函数f(x)的定义域为R且对任意实数x1,x2.,总有f(x1+x2)+f(x1-x2)=2f(x1)f(x2)成立,求证:f(x)是偶函 已知函数f(x)=1/3ax^3+1/2bx^2+cx.(I)若f'(1)=-1/2a,3a>2c>2b,试问:导函数f'(x)在区间(0,2)内是否有零点,并说明理由.(II)在上面条件下,若导函数f'(x)的两个零点之间的距离不小于根号3,求b/a的取值范围 已知f(x)=10^/lgx/,若方程f(x)=b,(b是常数)有两个不同的实数根x1,x2,且x1 设函数f(x)的定义域为R,对任意实数x1,x2,总有f(x1+x2)=f(x1)+f(x2),当x>0时,f(x)>0且f(2)=31、判断f(x)的奇偶性和单调性;2、求f(x)在区间【-2,4】上的最大值和最小值;3、当θ∈【0,π/2】时, 已知定义在R上的函数f(x)=1/3ax^3+1/2bx^2+cx(a<b<c)在x=1时取得极值,且y=f(x)的图象有一点处的切线斜率为-a(1)求证:0≤b/a<1(2)若f(x)在区间(s,t)上为增函数,求证:-2 求方程sinx=lgx的实数根的个数. 函数f(x)的定义域是R,对于任意实数x1,x2,都有f(x1+x2)=f(x1)+f(x2)当x>0时,f(x)>0,且不等式f(cos2θ-3)+f(4m-2mcosθ)>0对所有θ恒成立,求实数m的取值范围 已知函数f(x)=1/3ax^3+1/2bx^2+cx(a>0).若函数f(x)有三个零点分别为x1,x2,x3,且x1+x2+x3=-3,x1x2=-9,求函数f(x)的单调区间;(2)若f'(1)=-1/2a,3a>2c>2b,证明:函数f(x)在区间(0,2)内一定有极值点;(3)在(2)的条件下,若函数 若f(x)是R上的偶函数,且方程f(x)=0有6个实数根,则这6个根的和是什么 方程x5次方+x-3=0在区间(1,2)上有几个实数点 已知函数f(x)=3ax²+2bx+c,a+b+c=0,且f(0)·f(1)>0.若x1、x2是方程f(x)=0的两个实根,求|x1-x2|的取值范围. 定义在R上的偶函数f(x)在[0,+∞)是增函数,则方程f(x)=f(2x-3)的所有实数根的和 函数f(x)=x5+x-3的实数解落在的区间是A[o,1] B[1,2] C[2,3] D[3,4](要具体解释哦) 已知函数f(x)=x3+bx2+cx+d的零点x1,x2,x3满足-2 已知方程x^2+2x+t=0的两实数根为X1,X2,若定义X1的绝对值+X2的绝对值=f(t).求函数f(t)的解析式t∈R 如果二次函数y=f(x)满足f(3+x)=f(3-x),且方程f(x)=0有两个实数根x1,x2,那么x1+x2等于?有关二次函数的问题 已知函数f(x)=│lgx│-(1/2)^x有两个零点x1,x2则有A.x1x21 D.0 已知y=f(x)是偶函数且其图像与x轴有4个交点,则方程f(x)=0的所有实数根之和是多少 若函数f(x)=sin(x+π/4),x∈[0,2π)关于x的方程f(x)=m有两个不相等的实数根x1,x2,则x1+x2= 已知函数f(x)=x^3+bx^2+cx+d,f(x)的三个零点x1,x2,x3分别为公差为3的等差数列{an}的前三项,f'(x)/3+3=0有唯一解(1)求数列{an}的通项公式(2)设数列{an}的前n项和为Sn,数列{Sn}的前n项和为Tn 设f(x)是定义在R上的偶函数,且当x≥0时,f(x)=x2-2x-3,讨论方程f(x)=2a-3(a∈R)的根 设函数f(x)=x^2+2/x(x不等于0),当a>1时,方程f(X) =f(a)的实数根个数为 设定义域为R的函数f(x)=lg/x-1/,(x不=1) 0 ,(x=1) 则使关于x的方程f^2(x)+bf(x)+c=0有5个不同实数解的条件是(A)b0 (B)b>0且c0且c=0 (D)b>=0且c=0 已知二次函数f(x)=aX2+bx+c的图象经过点(-1,0),且对一切实数x,不等式x≤f(x)≤(1+x2)/2恒成立.求f(x)的解析式注:x2是x的平方急 若x1,x2为方程x^2+(m-3)x+(m^2-9)的不等实数根.定义函数f(m)=log2010(x1^2+x2^2),定义域 设X1、X2、X3……Xn是整数,并满足:(1)-1≤Xi≤2 i=1、2、.n;(2)X1+X2+……+Xn=19 (3)X1的平方+X2的平方+……+Xn的平方=99求X1的立方+X2的立方+……Xn的最大值与最小值 设定义域为R的分段函数f(x)=|lg|x-1||,x≠1;0,x=1,若关于x的方程a[f(x)]2-f(x)+1=0有8个不同的实数解求a的取值范围 若函数f(x)=x^2,则对任意实数x1,x2,下列不等式总成立的是:A.f[(x1+x2)/2]小于等于[f(x1)+f(x2)]/2B.f[(x1+x2)/2]小于[f(x1)+f(x2)]/2C.f[(x1+x2)/2]大于等于[f(x1)+f(x2)]/2D.f[(x1+x2)]/2大于[f(x1)+f(x2)]/2 已知X1,X2,X3,...Xn中每一个数值只能取-2,0,1中的一个,且满足:X1+X2+X2+...+Xn=-17,X1²+X2²+X3²+...+Xn²=37求X1³+X2³+X3³+...+Xn³的值当X=1+√2002/2时,代数式(4X³-2005X-2001)^2009的 已知函数f(x)=lg(ax^2+2ax+1)的定义域为R.则实数a属于_? 设f(x)是定义在R上的增函数,且对于任意的x都有f(2-x)+f(x)=0恒成立.如果实数m,n满足不等式组设f(x)是定义在R上的增函数,且对于任意的x都有f(2-x)+f(x)=0恒成立.如果实数m,n满足不等式组f(m^2-6m+23)+f 有一列数X1 X2 X3 .XN XN+1 X1=3 如果对任意的N 有XN+1=2XN 试着 把 XN用N表示出来 定义域为R的函数f(x)={lg|x-2|,x不等于2; 1,x=2}若关于x的方程f(x)^2+bf(x)+c=0有五个不同实根x1x2x3x4x5求f(x1+x2+x3+x4+x5)=? 设函数f(x)=ax^2+bx+1(a≠0,b∈R),若f(-1)=0,且对任意实数x(x∈R)不等式f(x) ≥0恒成立,求a,b 若一组数据X1,X2,X3,X4,…,Xn的方差为0,则表示( )A.X拔=0B.X1=X2=…=Xn=0C.X1=X2=…=XnD.无法确定 设定义在R上的函数f(x)=根号下[x2-2lxl+1],则关于x的方程f2(x)+bf(x)+c=0有八个不同实数解的充要条件是 已知函数f(x)=x2-2x-5.(1)是否存在实数m,使不等式m+f(x)>0对于任意x属于R恒成立?说明理由.(2)若存在一不等式m-f(x)>0成立,求实数m的取值范围 有一列数:X1、X2、X3……XN……其中X1等于31 如果对任意的N,有XN+1=2XN.计算X2=( ),X3=( ),X4=( ),根据上面一小题的结果,请试着把XN用N表示出来:XN=( ),计算X6=( ) 函数f(x)=(2x次方-1)的绝对值,则关于x的方程f2(x)=bf(x)+ 有3个不同实数解的充要条件是函数f2(x),则关于x的方程 有3个不同实数解的充要条件是A.-1 0 B.1>b > 0且c < 0 C.-1b≥0且c=0 f(x)是R上的函数,对于任意实数a,b,都有f(ab)=af(b)+bf(a),且f(2)=1.(1)求f(1),f(1/2)的值(2)令bn=f[2^(-n)],即2的-n次方,求证:{2^n•bn}为等差数列(3)求{bn}的通项公式 设函数f(x)=ax2+bx+c(a>0),且f(1)=-a/2 设x1x2是函数f(x)的两个零点,求|X1-X2|的取值范围 已知函数y=3-(x-m)(x-n),且a,b是方程3-(x-m)(x-n)=0的两个根,则实数m,n,a,b的大小关系可能是A.m<a<b<nB.m<a<n<bC.a<m<b<nD.a<m<n<b 函数f(x)=|2^x-1|(x 设函数f(x)=ax2+bx+c(a>0),且f(1)=-a/2,求证函数有两个零点 已知函数f(x)=|x^2+2x|,若关于x的方程f^2(x)+bf(x)+c=0有七个不同的解,则b,c大小关系为?答案是b 已知函数f(x)=log2(a-2-x/x-a)是奇函数,若关于x的方程f-1(x)=m2^-X实数解求m的值f-1(x)即反函数 已知函数f(x)=ax2+bx-1(a,b∈R且a>0)有两个零点,其中一个零点在区间(1,2)内,则a-b的取值范围是A(-1,1) B(-1,+~)C(-2,1)D(-2,+~)答案为B。急需过程,谢谢。 已知f(x)=lx2+2xl若关于x的方程f2(x)+bf(x)+c=0有7个不同的实数解.则b.c的大小关系为Ab>c Bb>=c与b 设函数f(x)=log2^(2^x+1)的反函数为y=f^-1(x),若关于x的方程f^-1(x)=m+f(x)在【1,2】上有解,实数m的范围 设函数f(x)={2(x>0),x2+bx+c(x≤0),若f(-4)=f(0),f(-2)=-2,求函数g(x)=f(x)-x的零点的个数.设函数f(x)={2(x>0),x2+bx+c(x≤0),若f(-4)=f(0),f(-2)=-2,求函数g(x)=f(x)-x的零点的个数. 已知函数f(x)=1/3x^3+x^2+(2a-1)x+a^2-a+1,若f'(x)=0在(1,3】上有解,则实数a的范围 已知a为实数,f(x)=a-2/(2^x+1)(x为R) 当f(x)是奇函数时,若方程f(x)的反函数=log2(x+t)总有实数根,求实数t的取值范围.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn