应 QCon北京2016|全球软件开发大会 主编臧秀涛邀请,我(Liigo)于2016年4月23日在大会上做主题演讲《Rust编程语言的核心优势和核心竞争力》(PDF演讲稿)。由于是初次登台,现场表现不佳,个人不是很满意。故做本文对此次演讲进行总结和补充。
核心三要素:系统编程,零运行时,内存安全
我把Rust编程语言的核心优势和核心竞争力概括为三个要素:系统编程,零运行时,内存安全。在强调底层控制的系统编程领域,同时保持极小的运行时开销和极高的运行时效率,又保证了系统内存安全的现代编程语言,Rust几乎可以说是唯一的一个。这三个核心要素是过滤器,提高了竞争门槛,把许多对手拒之门外;同时也是一把双刃剑,把Rust自身限制为一个小众语言。(百姓网贺师俊老师现场提问说Rust啥时候能火起来,我说Rust顶多在系统编程领域小火一把,而系统编程在整个IT行业内也只是小众领域而已。Rust学习曲线陡峭,对程序员编程能力要求较高,不具备成为网红的潜力。我在现场的表述既啰嗦又不条理。)
对于系统编程,我总结道:系统编程是软件行业的基石,很多基础性的、平台性的大中型项目,或者隶属于系统编程,或者依赖于系统编程;系统编程强调底层控制、运行性能和系统安全;当前主流的系统编程语言C/C++在内存安全方面有重大欠缺。针对Rust和C/C++的竞争,我认为Rust的内存安全是竞争优势,C/C++的历史地位和积累是竞争优势,长远来看还是Rust潜力更大。
对于零运行时,我总结道:Rust语言的设计和实现十分重视运行时性能,尽力避免任何非必要的运行时开销,仅当与内存安全产生冲突时才有所妥协;Rust的运行性能跟C/C++在同一个数量级上。演讲中提到,“不为用不到的特性付出代价”是C++的设计原则同时也是Rust的设计原则。并针对无GC、无VM、无解释器,迭代器(Iterator),动静态分派(Static-,Dynamic-Dispatch),FFI,Thread,IO等操作做了运行时开销分析。特别地,强调了Rust语言不强制使用垃圾收集器(GC),没有明显的运行时开销。
对于内存安全,先说为什么内存安全很重要。然后逐一介绍Rust如何保障内存安全,其中涉及所有权(Ownership)、所有权转移(Move)、租借(Borrowing)、生命周期(Lifetime)等。
演讲之后的提问环节,除了上文提及的贺老师火不火的问题,还有个朋友问Rust跨平台的表现。我说,Rust标准库(libstd)是跨主流操作系统平台的(Unix/Linux/Windows/Mac),而Rust核心库(libcore)则跨更多平台,甚至可以工作在没有操作系统的裸金属(Bare metal)硬件环境中(此处可联想Rust“锈”之命名)。现场表现有些语无伦次。
另有朋友提问Rust和Go的区别。我回答说,Go是有GC的语言,而Rust没有GC,Rust属于系统编程而Go不是,故二者在各自核心应用领域没有竞争关系。提到GC我又顺便抛出“个人以为Go的GC有很大的问题”。然而因为没有进一步的阐述,导致这个结论很苍白无力,难以令人信服。我在现场试图用两天前百度陶春华《Golang 在 Baidu-FrontEnd 的应用》的演讲内容相印证,却一时想不起演讲者和标题(其实早已写在我的演讲稿里),只得作罢(欲言又止)。陶老师演讲中提到,在他们的应用场景中,从Go 1.3升级到1.5 1.6并不能缓解遇到的GC问题;或许是号称“解决了GC问题”的Go 1.5 1.6无视了该应用场景。不清楚这是不是个例,好像Dropbox也遇到类似的情况(也用Go 1.3)。我的另一篇博文有其他开发者反馈Go之GC问题。
在这个现场交流环节我犯了一个比较严重的技术性错误。我不应该提及“GC的问题”,而只需提及“GC较大的运行时开销”,这样能更好的衔接演讲内容,同时营造更好的沟通环境——而不是对立情绪。
演讲结束后,有中兴公司的同行私下找我咨询Rust成功应用案例,同时抱怨C语言的内存安全痛点。我顺势摆出Rust“两个半”大型成功案例:Rust编译器,Servo浏览器引擎,Cargo项目构建管理器;再加上Redox操作系统和Maidsafe安全网络。一时之间没想起来还有,Dropbox的Magic Pocket,Piston游戏引擎。
2016年6月23日更新:大会现场照片
2016年6月26日更新:明星讲师礼品,山地车
很荣幸获得主办方评选的明星讲师荣誉,感谢InfoQ/极客邦。