Again, I'll try to provide an (over)simplified introduction.
The ADSR bug is, more or less, sounds failing to trigger properly because the ADSR envelope of the previous sound on the same channel didn't clear yet. Sometimes it will drop a note, sometimes it will make it sound different. This is more noticeable if you're triggering notes rapidly and also depends a lot on the ADSR values of the sounds involved.
It's worth noting that if you are patient / experienced enough with ADSR values you can avoid the bug even without using hard restart.
For example some ppl say that setting the A to 1 instead of 0 helps, or setting S to less than F, etc. I just tend to play around.
It still makes the drum sounds punchier.
There are two components to setting up HR, one is resetting the gate bit, and the other is an ADSR envelope to be set up before the sounds actual envelope, we call this one ADHR.
Also note that there needs to pass some time (2 frames I think) after the HR line before you trigger the actual sound, thus the wait in the DL column in those examples I posted.
This delay makes the hardrestarted sounds trigger slightly later than the non-HR ones, so if that is audible in your tune you have to compensate.
As 4mat noted, Goattracker (and some other trackers) will do this for you but then as a tradeoff all HR sounds have to use the same hard restart.
With defMON being so flexible you have many options on how to compensate for this delay.
First you can trigger HRed sounds a line in advance (notice how dM has a line before line 0) or you can set up the sound the line before and then trigger the note later (goto80 does this), or you could build a little delay into all the non-HR sounds as well, or you could make all your HRs as separate commands and then trigger those the line before (I use this one when I can).
Again this is only significant if you can hear the unwanted delay.
Or if you need a really rapid fire machinegun beat you can keep the gate open and use other tricks to mute/control the perceived volume (like setting the waveform to 0 or using really thin pulse widths). This is more like a kill-switch method so you lose almost all the dynamics, sort of like overcompressing to death, but it sidesteps the use of ADSR completely and thus the ADSR bug as well.
To round it off, here's some notes I compiled a while ago from CSDb, looking into SID tunes with siddump, and looking into how different trackers handle it.
dl = delay (in frames)
w = waveform
g = gate bit
ADHR = hard restart envelope
ADSR = envelope for your sound
HARD RESTART
------------
METHODS
old school
dl w g adsr
----------------
1 - 0 0000
0 W 1 ADSR + NOTE
new school
dl w g adsr
----------------
1 - 0 ADHR
0 - 9 ADSR
0 W 1 ---- + NOTE
hybrid
dl w g adsr
----------------
1 - 0 0000
0 - 1 ADSR
0 W - ----
heatbeat
dl w g adsr
----------------
0 - 9 ADSR
0 W 1 ---- + NOTE
...
1 - 0 ----
0 - 9 ----
0 W 1 ---- + NOTE
EXAMPLE ADHRs VALUES
0000 hardest
0F00 most common
0F18 Drax
0F20 GRG
0FF0 Randall/Jammer
F000 Linus
FF00 Jeff
OTHER NOTES
Sustain of F is especially buggy (try E then? :)
soft restart usually works best with big (>= 8) release values