Techniques and tools for implementing a source code annotation language
are described. In one aspect, keywords are added to a function interface
to define a contract for the function independent of function call
context. In another aspect, annotations are inserted at global variables,
formal parameters, return values, or user-defined types. The annotations
include, for example, properties and qualifiers. A property can indicate,
for example, a characteristic of a buffer. In another aspect, an
annotation indicates that a value has usability properties sufficient to
allow a function to rely on the value, where the usability properties
depend on value type.