Compile-time checking versus runtime checking