[Eric Lippert's blog][elp] for the challenges in C#, which also has this
feature.
-A nice replacement is the [lazy constructor macro][lcm] by [Marvin
-Löbel][kim].
+A nice replacement is [lazy_static][lazy_static].
[fqa]: http://yosefk.com/c++fqa/ctors.html#fqa-10.12
[elp]: http://ericlippert.com/2013/02/06/static-constructors-part-one/
-[lcm]: https://gist.github.com/Kimundi/8782487
-[kim]: https://github.com/Kimundi
+[lazy_static]: https://crates.io/crates/lazy_static
## The language does not require a runtime
non-exhaustive match would be to panic the thread if nothing is matched, though
it could fall through if the type of the `match` expression is `()`. This sort
of hidden cost and special casing is against the language's philosophy. It's
-easy to ignore certain cases by using the `_` wildcard:
+easy to ignore all unspecified cases by using the `_` wildcard:
```rust,ignore
match val.do_something() {
## `->` for function return type
This is to make the language easier to parse for humans, especially in the face
-of higher-order functions. `fn foo<T>(f: fn(int): int, fn(T): U): U` is not
+of higher-order functions. `fn foo<T>(f: fn(i32): i32, fn(T): U): U` is not
particularly easy to read.
## Why is `let` used to introduce variables?