从2018年开始,我每天会花1个小时关注Rust社区动态,并且在Rust.CC论坛、tg channel、Steemit、GitHub、语雀订阅都开通了Rust日报,分享我每天的见闻,偶尔也夹杂了一些个人的观点。新的一年过去了,Rust每日新闻已经成为了Rust社区群大家每天必看的内容。每周也会精选几篇Rust社区中的动态,和大家分享。分享的内容就不按时间排序了。
2019-02-03
要求全栈Web工程师,懂Rust。主要工作应该是后端API设计。可远程
Discord游戏商店大量使用了Rust,它们现在开始招Rust工程师,来做一个顶级保密的新项目。没有看到支持远程。
岗位描述:
1,开发业界顶级跨平台(macOS/iOS/Android)渲染器。
2,编写Shader解析器。
3,优化Shader执行效率。
岗位要求:
1,熟悉Rust/C++语言,有一年以上Rust开发经验更好。
2,熟练掌握OpenGL ES /Metal/Vulkan其中两项或以上,最好熟悉SPIR-V规范。
3,拥有良好的工程意义,可编写高质量、简洁、易维护的代码。
内推邮箱,请备注简历+姓名 : zhoujianquan 「@」kuaishou.com。欢迎推荐,转发。
有人在GitHub上专门建立了一个帐号,建立了四个仓库:C/Cpp/Rust/Swift,用于收集世界各地用这四个语言的系统工程师招聘职位信息。
是一个新库,可以关注下,没准有需要呢?
当前,Roadmap已经提交PR,但未合并。可以先关注。
总的来说,目标就是从「可用」到「稳定」:
Cargo负责人nrc发文
将在下周柏林举行的Rust All Hands会议上讨论更换到哪个CI平台上面。文章里还罗列了Rust基础设施团队在Travis CI碰到的诸多问题,感兴趣可以看看。
文章从介绍Crossbeam开始,先后罗列了从Crossbeam库从2015走到2018期间经历的变化,并展望了接下来重点要完成的工作:
增加这两个并发数据结构的支持。另外还有一些优先级较低的零碎工作。
Niko介绍了他的新库:salsa。该库是将rustc中的增量式重新编译技术提出来变成一个通用的框架。Salsa现在已经被用在了一些项目中,比如rust-analyzer。但rustc本身并没有使用该库。Niko还录制了两个使用Salsa的视频教程。
在以下几个算法测试项目中,Rust都战胜了其他语言,排行上升到了第一
该作者制作了一个Ruby脚本,包括了多种语言的基准测试(C,C ++,Rust,Go,Java和C#,但可以添加更多),重新标准化了平均值。
得出的结论是:Rust在基准测试游戏中的表现优于C++ 3%,比C慢4%。
TiKV负责人siddontang写的一篇文章。TiKV团队之前自己实现了一个grpc库,但问题是该库。不是纯Rust实现,在生产环境中遇到了一些panic,所以想彻底拥抱Rust社区,使用纯Rust的库。但是又不想发明轮子。所以从grpc-rust和tower-grpc中选择了tower-grpc。
tower-grpc并不稳定,但是它的好处也是比较明显的。比如作者是非常活跃且知名的,基于tokio等。
另外:TiKV已经升级到了Rust 2018 Edition
重构后的项目叫Shortwave
这篇文章和Rust没关系,但是可以看看CPP的现状。
长文,但是作者总结了两个观点:
其实还有第三个选择:看看Rust。(作者并没有说)
该文作者阐述了对Apple为Swift语言申请专利的担忧。该专利覆盖了Swift语言的整体理念。比如:
该语言在某些领域提供C语言兼容性的功能,以提高用该语言编写的软件的固有安全性。新语言包括默认安全注意事项,例如边界和溢出检查。
大家如何看待?不知道会对Rust带来何种影响。
本文作者指出了当前WebAssembly设计的缺陷,表面是一个栈虚拟机,但实际上在编译层面是一个性能不算好的(liveless,对变量没有活跃期分析,而导致重复计算)寄存器式虚拟机,只是在最后才表现的像一个栈虚拟机。这个缺陷是来自于之前的设计规范是基于进一步简化asm.js而导致的历史原因。所以现在出现wasmtime这样的流式WebAssembly编译器来解决这种问题。
作者在后续还会写几篇关于WebAssembly问题的文章。
这是一个GitHub Action,支持对多种语言的软件的代码进行自动格式化。支持Rustfmt和Clippy。
我个人是一个代码组织的实践就是:组件化。这也是Rust所倡导的。在单个组件之内,进行模块化,分清层次结构。
讨论中,也有喜欢扁平化的结构,这样方便测试,直到找到足够的理由再分拆单个组件包。
大家有什么分享的?
我也同意,Rust的代码可读性很好,读代码比写代码更容易。并且还可以总结出一些高效阅读代码的技巧,这完全得益于Rust的高度一致性。
讨论中提到了Cpp、Python、JS等其他语言的可读性探讨。这种争论应该还算可以接受,感兴趣可以关注下。
无畏(fearless)并发难道已经过时了?现在是要流行无悔(regretless)并发了吗?
作者认为,无畏并发并不意味着「没有后悔」的时候。作者在本文中主要探讨了event-loop并发建模的诸多好处,并且如何利用Rust多线程来进行event-loop建模。
这个GitHub项目汇集了Rust各种web框架的相关资料,包括Rust实现的前端WASM框架、Websocket、Template等项目。
还包括了很多博客、项目demo等学习资源。相当全面了。
作者将通过三篇文章来讲解如何用Rust编写邮件发送的代码。
这是继上篇内存分页介绍之后,进一步介绍操作系统内核如何访问物理页的技术,通过这种技术可以实现虚拟地址到物理地址的转化,以及如何在页表内创建映射。
该文章介绍了如何使用Rust开发iOS应用,里面也有一份Rust on Android的文章链接。
作者总结了Rust闭包中的一些规则,可以看看。
作者在油管做了一系列的直播,这个视频是这些直播的合集,所以比较长,大约3小时多。
上次介绍过油管开直播视频讲如何移植火焰图工具那位作者的库
该文作者在研究生物信息学(bioinformatics)算法的过程中,发现将Rust的match改成表查找,算法的性能得到了很大的提升。参见
将下面的match代码:
fn match4(x: u8) -> u64 {
match x {
b'A' => 1,
b'B' => 2,
b'C' => 3,
b'D' => 4,
_ => 0,
}
}
修改为:
use lazy_static::lazy_static;
lazy_static! {
static ref LOOKUP4: [u64; 256] = {
let mut l = [0; 256];
l[b'A' as usize] = 1;
l[b'B' as usize] = 2;
l[b'C' as usize] = 3;
l[b'D' as usize] = 4;
l
};
}
fn lookup4(x: u8) -> u64 {
LOOKUP4[x as usize]
}
并且使用了lazy_static。
作者好奇,为什么编译器没有为match表达式生成最佳代码。于是他开始了一系列的测试和挖掘,从生成的汇编到LLVM都进行了一番考究。
通过cargo-deb,将你的web项目生成.deb文件,并配合systemd和配置文件,就可以把tide、actix-web或rocket等项目,变成像nginx那样的“Linux App”。就可以通过系统命令来启动你的服务。
sudo systemctl restart tide-server
本文探讨了如何在Node和Rust之间传递数组、结构体等数据,以及如何使用回调。对于学习FFI也是一个好的案例。
之前介绍过,基于Rust实现的2D回合制游戏zemeroth,现在支持wasm
基于Rust和Wasm实现。可以检测语言属于哪国语言。
该文作者介绍了OOProxy库,支持OpenID和OAuth2。
作者在实现一个模块化机械键盘的项目,在这个过程中,实现了一个可用于嵌入式的Future exector。为什么要自己实现?因为发现现在的嵌入式生态并不能满足他的需求。
是属于Piston项目中的跨平台UI Weight库
#[logfn(Err = "Error", fmt = "Failed Sending Packet: {:?}")]
fn send_hi(addr: SocketAddr) -> Result<(), io::Error> {
let mut stream = TcpStream::connect(addr)?;
stream.write(b"Hi!")?;
Ok( () )
}
可以自动生成log输出,跟踪函数调用,可用于调试代码。
且支持no_std
ProjectFluent是一个本地化(L18N)框架,fluent-rs是Rust实现。
包含了大数和散列操作。
现在支持no_std环境
Holtek CO₂ USB显示器的驱动程序
一个Rust的快照测试库,给第一次跑测试的结果生成一个快照,后面就可以用这个快照来保证代码不会被破坏。
想要的朋友,可以联系我。感兴趣可发我邮件,地址: 247o26628 at qq.com。注明你想要哪种周边,目前还清楚价格,只是收集意愿,达到一定数量才会开启订制。等年后,再宣布具体的款式和价格,图案都会订制成Rust相关,但质量会和它一样的。
一: 棒球帽
二: 书签