Attributes: Giving the Programmer Control Over Static Type Checking