Rust算法俱乐部
#algo
台湾同胞搞的Rust学习算法的教程
cnx:用Rust实现的X11状态栏
#x11
rustsim 报告 #5
#rustsim
简要:
- alga 0.9 和 nalgebra 0.18开始支持复数
- 并且与
#[no-std]
保持兼容 - nalgebra开始在几何代数上添加对三角函数和卷积的支持等等。
Rust 2.0要开始筹备了,主要目标有:
- 为了更健康的crate生态,准备提供一个审查工具,帮助用户剔除掉一些依赖包
- 语言简化。 考虑删除过程宏功能,准备汲取Zig语言的编译器动态反射来替代当前的过程宏。另外,还要放弃ref和mut修饰符,用于简化用户的开发体验。
- 为了进一步增加安全性,将会添加: 依赖类型和有状态视图的支持。依赖类型有助于提升代码安全性,有状态视图有助于减少unsafe代码的使用。
- 编译器改进。考虑让rust编译器比gcc编译的更快。
欢迎你的反馈。
祝大家愚人节快乐。
使用Rust的条件编译来实现Mock功能
#mock
写单元测试的时候经常需要mock一些场景,比如访问外部服务。但是传统的mock服务是在测试代码中创建一些模拟的对象。Rust中的一些mock框架也是类似的做法,参加「mock框架比较」。但是最大的问题是无法mock出代码中使用的外部结构。Rust中没有继承的概念,所以无法mock出标准库或者外部包中使用的结构类型。有一种解决办法是用trait或泛型,但是这种方法可能会使代码更复杂。而另一种方法则是利用条件编译,这也是本文作者想要介绍的。
#[cfg(test)]
use fake_clock::FakeClock as Instant;
#[cfg(not(test))]
use std::time::Instant;
在测试的时候使用fake_clock的mokc对象,而非测试的情况则使用Instant。
但这样也有一些缺点:
- 所有测试用例共享一个mock,但是如果每个测试用例需要不同的mock行为,则需要想想其他策略
- 更加需要集成测试。
在使用该文作者编写的http mock库mockito就可以使用条件编译:
#[cfg(test)]
use mockito;
#[cfg(not(test))]
let url = "https://api.twitter.com";
#[cfg(test)]
let url = &mockito::server_url();
amiquip: 纯Rust实现的RabbitMQ客户端
#RabbitMQ
RFC 2672: Re-export Cow from prelude
#rfc
diesel作者发起的这个RFC感觉比较接地气。
从标准库中重新导出std::borrow::Cow
,以鼓励其可以得到更广泛的使用。
一个Elixir/Javascript程序员准备切换到Rust的思考
#elixir #js
他发帖主要是想寻求一个快速学习的方法,如果有同样需求的初学者,可以看看讨论区的回复。
yarte 0.2 现在支持actix-web 1.0.0-alpha
#yarte #actix
yarte号称最快的模板引擎,之前和Askama模板的作者有过Lisense相关的争议。
HugoToJSON: 用于生成Hugo文档的关键内容的json
#hugo
主要用来给Hugo静态站点提供搜索,目前该库请求review。
「愚人节之歌」 用Rust重写
有人在Reddit发布了一首歌的歌词:「用Rust重写」
但好像没什么人参与讨论。。。
介绍Seqlocks
#STM #seqlocks
seqlocks(顺序锁)对读写锁的一种优化。使用顺序锁,读执行单元绝不会被写执行单元阻塞,也就是说,读执行单元可以在写执行单元对被顺序锁保护的共享资源进行写操作时仍然可以继续读,而不必等待写执行单元完成操作,写操作也不需要等待所有读执行单元完成读操作才去进行写操作。用于受保护的资源很小,简单且经常访问,适用于写操作很少但必须很快的场景。Linux内核处理中断的函数使用了seqlock。
该文作者也是实验性软件事务内存库swym的作者,swym是对seqlock的一种实现,基于Transactional Locking II 论文。
Rust中的惯用monad
#monad
「长文预警」本文作者描述了一种在Rust中表达Monad的新方法,用于证明在Rust中实现Monad的可行性。作者说这是他见过的最简单的设计。
日报订阅地址:
评论区
写评论还没有评论