一封写给Rust宏的情书
#macro
本文不是宏教程,作者写这篇文章的目的就是为了让还没有使用过Rust宏的人,早点尝试一下宏。(真香预警)
作者比较了Rust和其他语言(C/C++/Java)中的元编程,摘要:
- C宏和Cpp模板元编程。很容易引入难以发现的错误,并且会扰乱编译时间,在构建中引入不必要的复杂性。你是否见过错误使用模板而引发的编译器错误呢?
- Java注解。Java的注解功能很强大,可以在编译时使用,也可以在运行时执行,既可以用于代码生成,又可以拿来反射。Java中最受欢迎的Spring框架大量使用Java注解。但正因为如此,Java的注解功能导致你写的代码可能超越语言自身的语义,而更像是另外一种语言。而且通过注解实现的代码,调试起来也非常痛苦。
那么Rust的宏是不是完全避免了上面的问题呢?并不是百分百的避免,但是Rust已经努力避免了常见的问题,并且可以发挥出Rust语言自身的优势。作者介绍了声明宏和过程宏的一些优势,并且在文章底部列出了一些学习宏的资料。
使用Actix Web进行人脸检测
#actix-web #face_detection
这是上次日报里报道过「使用tensorflow与rust人脸检测」文章作者的续篇。在这篇内容里,作者介绍了如何将上一篇文章的成果通过HTTP API来提供。并且作者使用了actix-web = "1.0.0-alpha.4"
版本。在mtcnn库的actix-web分支里可以看到具体实现。
这两篇文章是实践性很强的文章,建议大家跟着玩玩。
nom-peg: 基于nom实现的PEG解析器生成器工具
#nom #peg #pest
和pest类似,但它是基于nom实现的。
「视频」深入WASM和WASI
#youtube
Rust实现的IRC机器人
#irc #bot
使用Rust开发跨平台组件的新策略
#FFI #cross_platform
Mozilla工程师最新分享,将Rust实现的核心业务逻辑封装到一个中间层,然后通过新的共享策略,达到Web、iOS、Android三端共享。实施这个策略遇到的一个问题就是如何安全地使用FFI,并且还能与Rust的所有权良好地配合。因此该团队写了一个ffi-support库来帮助达成此目的。
该库最初的实现方案是通过序列化为JSON字符串在FFI中传递。但是缺点是,JSON序列化和反序列化会很慢。最重要的问题是,Java中字符串编码是UTF-16-ish。在Kotlin中,必须反序列化每个数据结构,这个过程会可能会发生异常。最严重的问题是,没有返回JSON字符串,而是某个C指针,忘记更新Kotlin中或者ObjectiveC中的数据结构,导致严重的内存问题。
值得庆幸的是,团队发现了使用Protocol BufferV2替代JSON,可以解决上面的问题。在Rust中直接使用prost库,可以通过Rust的宏生成非常干净的结构。而且,PB比JSON的性能高。
「经验之谈」从Nightly到Stable Rust迁移之旅
#nightly_to_stable
本文是Seq团队写的。Seq是一个微服务诊断SaaS产品,它们的存储引擎是使用Rust实现的(应该未开源)。从Seq 5.1开始,迁移到了Stable Rust。整个迁移过程说是毫无痛苦。感兴趣的可以看看。
(开发Rust产品需要依赖的features列表越来越少了,这是好事)
From 日报小组 @Chaos
日报订阅地址: