I've never been against the idea of using SET/RST.
As Tom Jenkins has pointed out, over and over, and justifibly so, using SET/RST can make it harder to troubleshoot code.
However, just as any carpenter needs to know his tools and how to use them properly, so too a programmer needs to know all of the tools that are available AND how to use them properly!
My experience with programming started with Basic, Fortran, C, etc. In those languages, the use of SET/RST is more common than not.
If properly managed... the use of SET/RST can greatly simplify code.
As in all programming, one must take into consideration all possibilities and plan carefully.
There is absolutely nothing wrong with requiring that rungs be in the form of a self-latching circuit. Nor is there anything wrong with allowing SET/RST.
However, simply restricting the use of SET/RST for the purpose of forcing the code to be in the form of self-latching circuits is somewhat self-deceptive.
Simply restricting the use of SET/RST does NOT necessarily improve the quality of the program. Bad code comes in all forms... SET/RST and self-latching.
If the code is properly designed then SET/RST can be used without worry.
And yes, properly using SET/RST can really reduce the complication and the size of a program by a great deal.
Regarding Darren's comment...
I have hundreds of cases where SET bits remain SET when the operator goes from AUTO to MANUAL, or if the process goes into a Fault state. This is intentional! Under these conditions, it is really handy to KNOW what the process was doing at the time. If necessary, I can go into the code and SEE what was happening.
BTW, I never use SET on any real outputs. I do use RST in many cases (to break a self-latching seal), but never SET.
The bits remain SET until the operator goes back to AUTO. Upon going to AUTO the first thing that happens is that all SET bits are RST. Then the program looks to see what the current sensor status is. The program then SETs those bits that need to be SET before running.
In many situations, the program does not know what the operator is doing to the line while the process is essentially off. So, when going to auto, after resetting all of the SET bits, the first thing the process does is to do a head-count to find out what the lay of the land looks like before resuming. If the lay doesn't look right, then the program indicates where it sees a potential problem. The operator goes back to manual, fixes the problem and then attempts to go to auto again.
This means that the operator will be doing himself a favor if he brings the system to a known good-state (in manual) before going back to auto.
It all boils down to proper planning.