1. A computer program product, tangibly embodied in an information carrier, comprising instructions operable to: compile a procedural source code program to generate a compiled program having instructions to create a runtime data type having a compound structure of referenced data types and having instructions to use the runtime data type; execute the instructions to create a runtime data type having a compound structure by creating a runtime data type definition from the compound structure of referenced data types by resolving the referenced data types bottom up into data types known at runtime; create a data object having the runtime data type; and perform type checking on uses of the data object at runtime according to the runtime data type.