> in the early days of TeX that was in fact a big headache and there are 
> still a lot of traces in 2e where we tried so save individual tokens 
> like using \@plus (one token) to "plus" (4). Same for registers, when 
> there were less than 255 available for general use.

Yes, I’ve seen those, along with the several numerical constants.

> However with the current limits it doesn't seem at all likely that you 
> could actually hit a boundary.

I looked at the log after running a test document that loaded many large
packages, and, even then, only a small portion of the available csnames
and registers were used. I probably should’ve tried that test first!

>> Would it be a worthwhile effort to conserve both csnames and registers
>> by reusing some variables across template implementations for the same
>> object type, or would it be better to stick to the convention of having
>> completely independent sets of variables for each implementation, and
>> wait to see if it becomes a concern later on?
> On the whole I would say no, because if you do that then you need add a 
> lot of extra code to ensure that nested objects do not accidentally 
> overwrite stuff before it has been  used successfully. This is is still 
> a possible headache if you nest the same type of objects, of course, but 
> then that is immediately clear to the programmer that the code must 
> account for that. If basically arbitrary code uses the same registers or 
> variables then the problem is much worse.

I very much agree with you. I wonder if it’d be a good idea to update
the wording in interface3 of the sections documenting public scratch
registers to indicate that dedicated variables should be preferred for
production code.

Though, I now find myself a bit confused about how TeX handles csnames.
I remember reading somewhere on tex.SX that there tend to be many hash
collisions, but given that TeXLive provides, by default, a hash table
of 615,000 entries, I think it’d be awfully difficult to have any
collisions at all, especially when the average document may use less
than 25,000 csnames.

I suspect that the table isn’t actually that big, but 615,000 is just
the maximum number of csnames allowed. I haven’t been able to confirm
or deny that yet, but I’ve probably been looking at the wrong parts of
the sources files.