+// Before going on, take a moment to ponder the flexibility of Rust's take on abstraction:
+// We just defined our own, custom trait (interface), and then implemented that trait
+// *for an existing type*. With the hierarchical approach of, e.g., C++ or Java,
+// that's not possible: We cannot make an existing type suddenly also inherit from our abstract base class.
+//
+// In case you are worried about performance, note that Rust performs *monomorphisation*
+// of generic functions: When you call `vec_min` with `T` being `i32`, Rust essentially goes
+// ahead and creates a copy of the function for this particular type, filling in all the blanks.
+// In this case, the call to `T::min` will become a call to our implementation *statically*. There is
+// no dynamic dispatch, like there would be for Java interface methods or C++ `virtual` methods.
+// This behavior is similar to C++ templates. The optimizer (Rust is using LLVM) then has all the
+// information it could want to, e.g., inline function calls.