Rust 1.30.1 发布
修补了一些bug
「录播视频」11-07晚上杭州秘猿Rust开发分享会
秘猿计划每个月的Dev Meetup第一场都会开设Rust专题
B站视频前面几分钟无声音,后面有了
Tide 中间件
#tide #middleware
Tide 初始版本已经开始动工,大约1000行代码实现了一个基本的框架雏形。目前还存在很多问题,不过「骨架」已经到位了,剩下的就是社区的努力一起为其填充「血肉」。
在这个初始版本里,加入了一个简单的中间件设计和计算值。
一、中间件
中间件的设计直接来自于actix-web :
pub trait Middleware<Data>: Send + Sync {
/// Asynchronously transform the incoming request, or abort further handling by immediately
/// returning a response.
// 对进入的请求做点啥
fn request(
&self,
data: &mut Data,
req: Request,
params: &RouteMatch<'_>,
) -> FutureObj<'static, Result<Request, Response>>;
/// Asynchronously transform the outgoing response.
// 对响应再做点啥
fn response(
&self,
data: &mut Data,
head: &Head,
resp: Response,
) -> FutureObj<'static, Response>;
}
当然,具体的trait方法和actix-web略有不同(tide里用request替代了actix-web的start),但基本的思想是一致的。 详细可参考actix-web中间件的文档.
在未来FutureObj将会换成Box,这样可以避免复杂的类型跟踪,虽然可能有性能开销,但预计成本会极低,这个已经在actix-web中得到了证明。
虽然受actix-web极大的启发,但目前没有加入finish方法,原因是目前基于hyper当前的API很难实现finish(在响应结束后调用该方法)。目前团队还在想办法。
中间件写好以后,可以通过以下方式方便加到应用中:
impl<Data> App<Data> {
pub fn middleware(&mut self, middleware: impl Middleware<Data> + 'static) -> &mut Self { ... }
}
之后还会支持更细粒度的中间件应用,比如,仅将其应用于特定的子路由。
二、计算值
计算值(Computed values) 就像一个算术公式一样去从现有的状态或其他值去计算出需要的值。虽然中间件很灵活,但对于某些情况来说,比较重。Tide的一个新的概念就是计算值。这些值是可以根据请求生成的值。例如,经常要根据URL的query部分生成组件,在endpoint或其他中间件中可能使用该组件。可以通过计算值来处理这种解析,而非实现中间件。
/// A value that can be computed on-demand from a request.
trait Compute: 'static + Sync + Send + Clone + Sized {
/// Compute the value directly from the given request.
// 直接从给定请求中计算值
fn compute_fresh(req: &mut Request) -> Self;
/// Compute the value, or return a copy if it has already been computed for this request.
fn compute(req: &mut Request) -> Self { ... }
}
简单的示例:
struct ParsedQuery { .. }
impl Compute for ParsedQuery { .. }
// Computed专用于endpoint来获取计算值
async fn my_endpoint(query: Computed<ParsedQuery>) { ... }
Rust实现可选参数
#optional_args
本文记录了作者使用Rust实现可选参数的一步步思路,也是对Rust设计API的思考。
P.S 这还是一个PingCAP隐藏的招聘贴呢。
「Job」来自丹麦的召唤:Rust全栈工程师
#job #remote
丹麦的一家正规公司:impero,目前正在招募Rust全栈工程师。可远程。
vulkano 0.11 发布
#Vulkan
vulkano是对Vulkan API的安全包装
「讨论」Rust解析浮点数很慢
作者在移植一个高性能C++库,用于在字符串和数字之间进行转换。发现Rust解析浮点数的性能很慢。
解析32位浮点数比解析64位整数慢约100倍,比解析32位整数慢约150倍。更为明显的是,解析64位浮点数比解析64位整数慢约450倍,比解析32位整数慢约650倍。
感兴趣可以看看讨论。
每日新闻订阅地址:
欢迎通过GitHub issues投稿。
评论区
写评论还没有评论