The first goal is addressed by allowing the programmer to annotate variable declarations, method arguments, and method results with explicit type declarations. Type inference may be useful as a programming environment tool for introducing explicit type declarations into untyped programs. The Cecil type system also is intended to help detect programming errors at program definition time rather than later at run-time. The type system is designed to verify that there is no possibility of any of the above errors in programs, guaranteeing type safety but possibly reporting errors that are not actually a problem for any particular execution of the program. To make work on incomplete or inconsistent programs easier, type errors are considered warnings, and the programmer always is able to run a program that contains type errors.
Dynamic type checking at run-time is the final arbiter of type safety.
Cecil's type system is not designed to improve run-time efficiency. Cecil's type system strives for specification only of those properties of objects that affect program correctness, i.e., the interfaces to objects, and not of how those properties are implemented. Finally, Cecil's type system is descriptive rather than prescriptive . The semantics of a Cecil program are determined completely by the dynamically-typed core of the program. Type declarations serve only as documentation and partial redundancy checks, and they do not influence the execution behavior of programs.