本周更新公告(ThisWeekInXX)
“This Week In Rust”每周推出一期,总结介绍上一周Rust发生的重要事件,如功能增加或变动,新的设计文档(RFC)得到批准,谁发表了重要文章,谁举行了聚会等等。从2013年6月Rust推出第一期“This Week In Rust”开始,三年来共发布130期(其中在1.0之后发布约50期)。可以当作新闻报纸摘要来读,用户花少量的时间就能了解Rust重要开发动态。
后来有些项目开始学习这种公告形式:
这种事情最难得的就是持之以恒。Rust出到第130期了,Servo出到第62期了,Redox出到第14期了,加油吧。(注:因本文创作时间跨度较大,以上数据可能稍有过时。)
别的项目没有(各种形式的)每周(或每月)更新公告,其中一个理由可以理解为:开发活跃度低,每周更新的内容少,不好意思写出来;或者被关注度低,写出来也没多少人看,所以干脆不写了;再或者开发透明度低,不能写出来给人看。(唉,人艰不拆,说出实话就要得罪人!)
支援兄弟语言项目
本着共建和谐开源大家庭原则,Rust社区充分发扬共产主义精神,积极参与其他社区活动,为各兄弟语言项目送温暖、献爱心,共享发展理念,致力于实现共同富裕。Rust在安全和性能方面优势非常突出,尤其适合为其他语言编写Native扩展库。下面提到的项目多是名家作品。
Lua
有过Lua本地模块开发经历(htmlua iedom)的我,第一次看到hlua就有眼前一亮的感觉,眼珠子都快掉下来了,惊叹居然可以这样写Lua的本地扩展模块,完全突破了Lua C API的死板接口:
hlua的作者是何方大神?这里先卖个关子。后面他还会出现。
Ruby
001 #! [feature(phase)] 002 #[! plugin(rust-hl-lua-modules)] 003 #[export_lua_module] 004 pub mod mylib { // <-- must be the name of the Lua module 005 static PI: f32 = 3.141592; 006 fn function1(a: int, b: int) -> int { 007 a+b 008 } 009 fn function2(a: int) -> int { 010 a+5 011 } 012 #[lua_module_init] 013 fn init() { 014 println! (“module initialized! ”) 015 } 016 }
借助helix项目,让Rust语言编写Ruby本地库变得很简单,消除了大量胶水代码。
Helix的作者是Rust核心开发者Yehuda Katz和Ruby on Rails核心开发者Godfrey Chan。这个阵容够强大吧?
001 declare_types! { 002 class Console { 003 def log(self, string: &str) { 004 println! (“LOG: {}”, string); 005 } 006 } 007 } 008 009 $ irb 010 >> require“console/native” 011 >> Console.new.log(“I' m in your rust”) 012 LOG: I' m in your Rust
Node.js
通过neon项目,用Rust语言编写Node.js本地扩展包,既简化了代码编写,又简化了编译过程。看看它的demo,让人印象深刻:静态编译+并发计算,性能远超JavaScript,强到没朋友。简单贴一段代码。
Neno的核心开发者Dave Herman,是Mozilla公司员工,ASM.js的作者,牛逼的不要不要的。
Golang
001 dfn search(call: Call) -> JsResult<JsInteger> { 002 let scope = call.scope; 003 let buffer: Handle<JsBuffer> = try! (try! (call.arguments. require(scope, 0)).check::<JsBuffer>()); 004 let string: Handle<JsString> = try! (try! (call.arguments. require(scope, 1)).check::<JsString>()); 005 let search = &string.data()[..]; 006 let total = vm::lock(buffer, —data— { 007 let corpus = data.as_str().unwrap(); 008 wc_parallel(&lines(corpus), search) 009 }); 010 Ok(JsInteger::new(scope, total)) 011 } 012 013 register_module! (m, { 014 m.export(“search”, search) 015 });
通过rure项目,Rust给Go语言送去性能更强的正则表达式库,让Go社区的同学们提前用上高大上的lazy DFA特性。
Rure的作者Andrew Gallant,是Rust开发组成员,Rust Regex和Docopt库的主要作者。
Python
rust-cpython 使得采用Rust语言编写Python扩展库和调用Python代码成为现实。
001 #! [crate_type =“dylib”] 002 #[macro_use] extern crate cpython; 003 use cpython::{Python, PyResult, PyObject}; 004 005 py_module_initializer! (example, initexample, PyInit_example, —py, m— { 006 try! (m.add(py,“__doc__”,“Module documentation string”)); 007 try! (m.add(py,“run”, py_fn! (py, run()))); 008 Ok(()) 009 }); 010 011 fn run(py: Python) -> PyResult<PyObject> { 012 println! (“Rust says: Hello Python! ”); 013 Ok(py.None()) 014 }
Erlang and Elixir
001 #! [feature(plugin)] 002 #! [plugin(rustler_codegen)] 003 004 #[macro_use] 005 extern crate rustler; 006 use rustler::{ NifEnv, NifTerm, NifResult, NifEncoder }; 007 008 rustler_export_nifs! ( 009 “Elixir.TestNifModule”, 010 [(“add”, 2, add)], 011 None 012 ); 013 014 fn add<' a>(env: &' a NifEnv, args: &Vec<NifTerm>) -> NifResult<NifTerm<' a>> { 015 let num1: i64 = try! (args[0].decode()); 016 let num2: i64 = try! (args[1].decode()); 017 Ok((num1+num2).encode(env)) 018 }
Rustler使得Rust可以轻松编写Erlang NIF(本地实现函数库)。
C and others
C同学也未被遗忘,Rust双手奉上Regex C API,并希望C同学向各编程语言转达来自Rust语言的问候。Servo也有提供C API。
Rust语言内置支持与C语言的互相调用(FFI)。其他语言以C为中介可间接地实现与Rust交互。对于Rust调用C库的情况,rust-bindgen很给力,可自动生成Rust端调用接口。新特性cdylib使得Rust编译出的DLL/SO文件尺寸更加小巧,更方便被其他语言嵌入、调用。Rust当然也支持引入和输出静态库lib文件。
Vulkan
Vulkan规范今年2月份刚发布,Rust迅速跟进,很快就有了安全而高效的vulkano第三方封装库。
vulkano的作者tomaka,同时也是大名鼎鼎的glium和前面提到的hlua的作者。
最受群众喜爱的编程语言
在国际知名网站StackOverlow主办的2016年开发者调查报告中,Rust荣获最受群众喜爱的编程语言大奖。群众的眼光是雪亮的。
Rust在国内的发展情况:
· QQ和微信群/讨论区Rust中文社区。
· 国内多位开发者合力完成的原创性Rust教材Rust Primer(诞生记)。
· 国内开发者Elton主导并持续开发的协程项目coio-rs。
· 2015年6月起,号称全球最大IT社区的CSDN网站先后多次专访国内活跃Rust开发者(庄晓立(Liigo) 钟宇腾(Elton/tonytoo)唐刚(daogangtang) 王川(Fantix) 冯耀明(loveisasea)),并推出Rust学习路线和Rust知识库,持续关注和推动Rust发展。
· 2016年3月,PingCAP首席架构师唐刘发表Rust语言入门、关键技术与实战经验(今日头条链接)。
· 2016年4月,本文作者庄晓立(Liigo)在 QCon北京2016—全球软件开发大会 上做专题演讲 《Rust编程语言的核心优势和核心竞争力》(演讲稿PDF)。这应该是Rust语言第一次正式出现在国内顶级软件大会现场。
· 上文提到的TiKV开源项目的开发商PingCAP是中国公司,总部在北京市海淀区。是目前唯一一家出现在Rust官网Friends of Rust页面的国内公司。
· pencil的作者是北京人,sapper的作者是四川人。
· 2016年5月,在北京和成都举办了庆祝Rust 1.0发布一周年的线下同性聚会活动。
后语
Rust语言还是成长中的孩子。它有已经成熟的一面,且持续保持稳定,经历过至少一年的时间考验,证明它初步拥有独当一面的能力。它还有欠缺的一面,许多地方有待完善和拓展,它正视自身存在的问题,从多方面努力争取拿出最好的解决方案。过去一年的主题可以总结为:巩固已经稳定成熟的领域,发展全新的领域或有欠缺的领域。Rust开发者们卓有成效的工作,使得Rust取得了可喜的进步,让我们对Rust的未来充满信心。Rust社区高度活跃的现状昭示着我们不是一个人在战斗。Dropbox等公司的加入使得队伍不断扩大。继续努力吧,务实的Rust编程语言,我们期待下一年取得更大的进展。