1. A process for operating a computing device to compile a source program in a source language, the source language being a dynamic language, and the source program comprising a plurality of predefined types of the source language and a plurality of user-defined types, the source program comprising a plurality of methods, each of the plurality of methods accepting input variables and producing output values of a predefined type or a user-defined type, the process comprising: with at least one processor: for each of a plurality of portions of the source program: determining whether the portion comprises a method involving implicit type inference; when the portion comprises a method involving type inference: determining whether the method has a user defined element; when the portion comprises a method having a user-defined element: accessing a user-defined mapping; and performing the type inference based on the mapping.