This lets us rely less on raw pointers, thus better tracking the lifetime of the rule node values while dropping strong references etc.