In a fine-mesh strainer, rinse rice under cold water until the water runs clear. Once all surface starch is rinsed away, transfer to a wide, heavy-bottomed medium pot or Dutch oven.
In a small dry skillet, toast cinnamon, cardamom, and mace over high heat just until they turn fragrant, about 1 minute. Remove from heat and add to pot with the rice.
Add milk to the pot and stir with rice to combine. Place the pot over high heat and bring the milk to a slow simmer, uncovered, about 10 minutes. Use a wooden spoon or heatproof silicone spatula to scrape the bottom of the pot every couple of minutes to keep the milk from scorching.
Once milk comes to a bare simmer, reduce heat to low and cook, stirring occasionally, until the rice grains are completely tender and the milk has reduced by half, around 2 hours. As you stir, be sure to gently scrape any browned milk bits off the bottom of the pot; they will further flavor the pudding. Add sugar and salt to taste and remove from heat.
Remove and discard spices, then transfer the pudding to a lidded heatproof container and refrigerate at least 4 hours or overnight before serving. Garnish with finely chopped pistachios if desired.