RSTP needs backwards compatibility with STP switches. Thus Discarding state merges Disabled, Blocking, Listening into one. Ideally if running a complete RSTP topology then discarding becomes practically unneeded due to the explanation below.
In STP BPDU will only be sent from root bridge > down, therefore non-root bridges would only forward on BPDUs that are received from the root-bridge via their root port. Therefore topology change will mean a longer convergence time as the TCN has to be propagated to the root bridge first then from the root bridge out to all remaining bridges in the switching domain.
For STP Hello(2 secs), max age timer (10 x hello time, by default 20s), then 15s each for Listening and Learning. If no timers are touched for STP and you haven't enabled any add-on features like backbonefast or uplinkfast then you can be looking at ~50s for convergence time.
In RSTP all switches can send BPDUs every hello time period not just the root bridge, the BPDUs carry up to date information. This enables faster convergence as the switch that determines the failure can advise the rest of the switching domain(bridge) of the TCN(Topology Change Notification) immediately. As the failure detection time becomes 3 x hello timer. Therefore if the hello timers are left at the default of 2 secs, detection of a failure can happen within ~6 secs.
RSTP also has two additional port states:
Alternate port : Technically in discarding state but is allocated as a alternate best path to the root-bridge. If the current root port fails the alternate port will take over.
Backup port : This port is allocated as a redundant designated port. If there is already a designated port forwarding for that segment then this port will remain backup until it is needed. Technically this port is in discard state until needed.
One more point RSTP marks edge ports as ports connected to end devices (No BPDUs expected on this port). This enables STP 'portfast' features to ensure the host port comes up as quickly as possible to avoid dropping DHCP packets etc.
These are the main differences - Hope this helps.