In a medium saucepan, heat the milk and heavy cream over medium heat until steaming, but not boiling.
In a separate bowl, whisk together the sugar, cornstarch, and salt.
Add the egg yolks to the dry mixture and whisk until smooth and pale.
Slowly pour about ½ cup of the warm milk into the egg mixture, whisking constantly to temper the eggs.
Pour the mixture back into the saucepan with the remaining milk.
Cook over medium heat, whisking constantly, until the pudding thickens and begins to bubble, about 5–7 minutes.
Remove from heat and stir in the butter and vanilla extract until smooth.
Pour into serving dishes and press plastic wrap directly onto the surface to prevent a skin from forming.
Refrigerate for at least 2 hours before serving.