一个开发者的 Rust 学习困惑:类型系统真的有那么难吗?

文摘   科技   2024-11-06 16:25   四川  

引言

最近,一位有着超过 20 年编程经验的开发者分享了他学习 Rust 一周后的心得体会。虽然 Rust 被誉为"最受欢迎的编程语言",但其陡峭的学习曲线确实让很多开发者望而却步。今天就让我们一起来看看他的经历,以及对 Rust 类型系统的思考。

出乎意料的挑战

令人意外的是,这位开发者表示,Rust 最为人诟病的借用检查器(borrow checker)并不是最大的障碍。相反,真正让他感到困扰的是 Rust 的类型系统。

类型系统的复杂性

以下是一个来自 Actix Web 框架的中间件示例,展示了 Rust 类型系统的复杂性:

// 中间件实现示例
use std::future::{ready, Ready};
use actix_web::{
    dev::{forward_ready, Service, ServiceRequest, ServiceResponse, Transform},
    Error,
};
use futures_util::future::LocalBoxFuture;

pub struct SayHi;

// Transform trait 的实现
// S: 下一个服务的类型
// B: 响应体的类型
impl<S, B> Transform<S, ServiceRequest> for SayHi
where
    S: Service<ServiceRequest, Response = ServiceResponse<B>, Error = Error>,
    S::Future: 'static,
    B: 'static,
{
    type Response = ServiceResponse<B>;
    type Error = Error;
    type InitError = ();
    type Transform = SayHiMiddleware<S>;
    type Future = Ready<Result<Self::Transform, Self::InitError>>;

    fn new_transform(&self, service: S) -> Self::Future {
        ready(Ok(SayHiMiddleware { service }))
    }
}

主要问题

  1. 类型推导的层层嵌套:多重类型推导使得代码难以理解和调试
  2. 泛型约束的复杂性:trait bounds、生命周期参数等概念的组合增加了认知负担
  3. async 系统的整合:异步编程模型与类型系统的结合进一步增加了复杂度

解决建议

  1. 循序渐进:不要一开始就尝试复杂的框架,先从简单的命令行工具开始
  2. 关注核心概念:深入理解 Rust 的基础类型系统,再逐步扩展到高级特性
  3. 选择合适的应用场景:评估项目是否真的需要 Rust 的性能和安全保证

总结

Rust 的类型系统确实具有挑战性,但这种复杂性也带来了强大的表达能力和安全保证。对于新手来说,建议从简单的项目开始,逐步掌握语言特性。同时也要客观评估项目需求,在开发效率和语言特性之间找到平衡点。

参考文章

  1. Why I'm very close to giving up on Rust after just a week:https://lukepuplett.medium.com/why-im-very-close-to-giving-up-on-rust-after-just-a-week-e923333199d2
  2. Actix Web 官方文档:https://actix.rs/docs/

书籍推荐

各位 Rust 爱好者,今天为大家介绍一本《Programming Rust: Fast, Safe Systems Development》(第二版) 是由 Jim Blandy、Jason Orendorff 和 Leonora Tindall 合著的 Rust 编程指南。本书深入探讨了 Rust 语言在系统编程中的应用,着重介绍如何利用 Rust 的独特特性来平衡性能和安全性。书中涵盖了 Rust 的基础数据类型、所有权和借用概念、特征和泛型、并发编程、闭包、迭代器以及异步编程等核心内容。这本更新版基于 Rust 2021 版本,为系统程序员提供了全面而实用的 Rust 编程指导。


  1.  Rust:横扫 C/C++/Go 的性能之王?

  2.  从 Rust 开发者视角看 C++:优缺点大揭秘

  3.  Rust vs Zig:新兴系统编程语言之争

数据科学研习社
带你走进数据科学的世界🚀
 最新文章