anchor.diff:          _ => Err("--dependency must be in the format org:name:rev")
       }
   }
  -----+----
  +
  +=== Borrow checker improvements
  +
  +The borrow checker is, in a way, the beating heart of Rust; it’s the part of the compiler that lets us achieve memory safety without garbage collection, by catching use-after-free bugs and the like. But occasionally, the borrower checker also “catches” non-bugs, like the call to `dp.len()` on line 3 of our original code:
  +
  +[code,rust]
  +----
  +fn parse_dependency(dep: &str) -> Result<Dependency, String> {
  +    let dp = dep.split(':').collect::<Vec<&str>>(); // wince
  +    return match dp.len() {
  +        3 => Ok(Dependency { org: dp[0], name: dp[1], rev: dp[2] }),
  +        _ => Err("--dependency must be in the format org:name:rev".to_string())
  +    };
  +}
  +
  +----
  +
  +Code like this is perfectly fine, but the borrow checker struggles with it today because the `dp` variable is borrowed for the entire body of the match, preventing it from being "mutated" by the attempts to access its elements. The good folks developing Rust plan to link:http://blog.rust-lang.org/2015/08/14/Next-year.html[address this shortcoming soon] by refactoring the borrow checker to view code in terms of finer-grained (“non-lexical”) regions – a step made possible by the move to work on a link:https://github.com/rust-lang/rfcs/pull/1211[middle-level IR].
positive.code: = Rust Strings, Explained
  :hp-tags: rust
  
  == Introduction to &str and String
  
  Rust has two main types of strings: `&str` and `String`.
  
  [code,rust]
  ----
  
negative.code: TcpStream::connect(addr); // no problem
  TcpStream::connect(&*addr_string); // no automatic coercion to traits of &str
  ----
  
  
  == Should I use a String, a &str, or one of the traits of &str?
  