Set aside ½ cup milk. Heat the remaining milk, cream, sugar, and salt in large saucepan set over medium heat until simmering, stirring occasionally to help dissolve the sugar.
Meanwhile, place the cornstarch in a large bowl and whisk in the reserved milk until smooth. Whisk in the egg yolks until smooth.
When the milk mixture reaches a simmer, remove from the heat and slowly pour into the yolk mixture while whisking constantly to prevent the eggs from scrambling (aka tempering).
Transfer the liquid back to the saucepan and place over medium heat. Whisk constantly until the pudding thickens (see notes) and a thermometer registers 180 degrees F, about 60-90 seconds. Remove from the heat and whisk in the butter and vanilla until shiny and smooth. Strain the pudding through a fine-mesh strainer set over a clean bowl.
Press plastic wrap directly against the surface of the hot pudding to prevent a skin from forming. Refrigerate until chilled, 3-4 hours or overnight. Before serving, re-whisk pudding until smooth, then divide into serving bowls.
Leftovers can be stored in an airtight container in the refrigerator for 5-7 days. Re-whisk before serving.
