1. A programming language type system comprising: in a memory, a set of numeric types including integer types, fixed-point types and floating-point types; a set of type propagation rules to automatically determine result types of any combination of integer types, fixed-point types and floating-point types; and constant annotations to explicitly specify a type of a literal constant.