< 返回版块

ChaosBot 发表于 2018-11-09 11:51

Tags:rustnews

Rust 1.30.1 发布

修补了一些bug

Read More


「录播视频」11-07晚上杭州秘猿Rust开发分享会

秘猿计划每个月的Dev Meetup第一场都会开设Rust专题

B站视频前面几分钟无声音,后面有了

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>) { ... }

tide

actix-web中间件

Read More


Rust实现可选参数

#optional_args

本文记录了作者使用Rust实现可选参数的一步步思路,也是对Rust设计API的思考。

P.S 这还是一个PingCAP隐藏的招聘贴呢。

Read More


「Job」来自丹麦的召唤:Rust全栈工程师

#job #remote

丹麦的一家正规公司:impero,目前正在招募Rust全栈工程师。可远程。

Read More

vulkano 0.11 发布

#Vulkan

vulkano是对Vulkan API的安全包装

vulkano

Read More

「讨论」Rust解析浮点数很慢

作者在移植一个高性能C++库,用于在字符串和数字之间进行转换。发现Rust解析浮点数的性能很慢。

解析32位浮点数比解析64位整数慢约100倍,比解析32位整数慢约150倍。更为明显的是,解析64位浮点数比解析64位整数慢约450倍,比解析32位整数慢约650倍。

感兴趣可以看看讨论。

Read More


每日新闻订阅地址:

欢迎通过GitHub issues投稿。

评论区

写评论

还没有评论

1 共 0 条评论, 1 页