Rust 的 Vec::drain 方法:巧妙利用 Drop 特性保障安全

2024-12-16

本文深入探讨了 Rust 的 Vec::drain 方法及其 Drop 实现,以此为例展示了所有权机制如何防止细微的内存错误。Vec::drain 通过保持对原始向量的可变引用,并仅读取和更新原始存储来优化性能。关键在于 Drain 结构体的 Drop 实现,它使用 DropGuard 来确保即使迭代器提前丢弃,也能安全地将未处理的元素移回原始向量,从而保障内存安全。这篇文章详细解释了 Drain 和 DropGuard 的实现细节,并讨论了零大小类型和指针来源等特殊情况的处理。

阅读更多
开发 Vec::drain Drop

像程序员一样思考:软件工程中的弹性、限制和道德风险

2024-11-05

本文探讨了如何构建“好的”软件,不仅指功能完善,还要考虑软件是否适合目标,是否真正满足用户需求。作者从软件的双重属性(制品和系统)出发,讨论了如何构建好的软件制品(领域驱动设计、类型系统、形式化方法、测试)和好的软件系统(“let it crash”、弹性、可观测性)。文章强调了程序员的隐性知识(mētis)在软件开发中的重要性,并指出软件开发本质上是对现实世界的简化和抽象,这种简化必然是失真的。作者批判了“高度现代主义”思想在软件开发中的体现,即试图将现实世界强行纳入软件的框架,而忽略了现实世界的复杂性和多样性。最后,作者呼吁程序员保持谦逊,认识到软件的局限性,并努力构建更灵活、更能适应用户需求的软件。

阅读更多
未分类