sentence: the language extensions define a type system that a programmer ( or interactive porting tool ) can use to annotate java code with type information , and a compiler can use to type-check that a dpj program has deterministic semantics , i.e. , produces the same visible output for a given input , in all executions .