This conversation seems to continue to be me and everyone else talking past each other so this is going to be my last word on the subject until I have time to write up the “making it easier for everyone to be flexible about their dependencies” RFC that I mentioned earlier. I’m only going to respond to some meta-level issues right now:
That is not what I’m asking for; in fact, I’m convinced that if we fully adopted and embraced the changes I have in mind, in the long run it would make the language less stagnant. But I’d prefer to suspend that conversation until when I have a pre-RFC to point at.
I’m just going to observe that I’m starting from very different premises than you are, here: I think it’s bad that there’s only one (up-to-date) implementation of Rust, and I think it’s bad when people write code, intended for other people to use, that insists on very specific versions of any of its dependencies (including the language). I think those things are worse than the additional maintenance or legibility burdens you’re so worried about. I think they cause more problems for more people.
I also think we can have the best of both worlds. I think we can design better metaprogramming tools than #ifdef, and I think there might well be less resistance to tracking the latest stable compiler if those tools existed. But, again, let's save that for the pre-RFC thread.
Yes, it’s irrational, or more precisely pre-rational. Reason does not come into play. Kahneman’s System 1 says “we’ve had tedious, unpleasant experiences with software updates in the past, we anticipate the same process being tedious and unpleasant for Rust language updates.” And the thing about System 1 is, it doesn’t listen to reason. You cannot talk people out of System 1 anticipations with reason alone, nor with personal experiences.
The short version of what does work is, first make the person who you think is being “irrational” about something feel fully in control, not under time pressure, not in danger of losing anything important if they take a risk; then let them encounter the situation that they’re avoiding on their terms and have a more positive experience with it.
Thus my core recommendation of making much heavier use of #[feature] so that people know, in advance, that updating the Rust compiler won’t change the language it accepts until they start flipping clearly marked switches.
Relatedly:
Your reaction sounds to me like you haven’t ever actually had to calm down a child who’s panicking about imaginary monsters? Yes, in the long run the goal is to teach the child that there are no monsters, but in the moment, System 1 won’t be persuaded.
The neat thing about putting a tool in the child’s hands that they can use to make the monster go away is, the child feels reassured of their safety in the moment, and over the course of the next several days the child is likely to notice that they have never needed to use the tool, which makes them more receptive to the idea that maybe there aren’t any monsters to worry about.
I suspect you don’t realize you’re doing this, but the way you phrased your disagreement here is extremely rude. I said “I think the language would be better if we did X” and you replied “I don’t think we should make the language worse by doing X”. That turns “the language would be worse if X” into a presupposition: you are asserting that it is settled that the language would be worse if X, and anyone who claims otherwise, i.e. me, is arguing in bad faith.
I am not arguing in bad faith. I honestly believe that the language would be better, for everyone, including you, with a slower release cadence (and with a bunch of additional features and altered community norms etc etc). You don’t have to agree with me, but grant me the damn courtesy of believing that I believe this!
I say it is. I say that’s how much time it actually takes me on my projects. You say it takes you less time, OK, but now we’re dueling anecdotes again. How about we get some funding to do some actual time and motion studies here?