10 Antipatterns

 

This chapter covers

  • Discussing programming antipatterns
  • Reviewing common antipatterns in Rust
  • Recognizing when to use and when to avoid contentious patterns

Antipatterns are programming practices that are considered harmful in specific contexts or all circumstances. Antipatterns are often the result of a misunderstanding of languages or a lack of experience with a particular technology stack. In this chapter, we’ll discuss some common antipatterns in Rust and how to avoid them.

First, we must discuss what constitutes an antipattern and then explore Rust’s most common examples. We’ll also discuss when to use—and when to avoid—specific patterns and when to make exceptions.

The rules presented in this chapter aren’t hard-and-fast rules; exceptions always exist. But it’s important to understand the reasoning behind these rules and know when to break them. As Rust evolves, these rules may change, so staying up to date with the latest best practices is essential for writing Rust effectively.

10.1 What is an antipattern?

10.2 Using unsafe

10.2.1 What does unsafe do?

10.2.2 Where can you use unsafe?

10.2.3 When should you use unsafe?

10.2.4 Should you worry about unsafe?

10.3 Using unwrap()

10.4 Not using Vec

10.5 Too many clones

10.6 Using Deref to emulate polymorphism

10.7 Global data and singletons

10.8 Too many smart pointers

10.9 Where to go from here

Summary