Type harvesting: a practical approach to obtaining typing information in dynamic programming languages