Making pure object-oriented languages practical