TStringList vs. TList <string>

¿Cuál es la diferencia en el uso de un estándar?

type 
  sl: TStringList 

en comparación con el uso de un TList genérico

type 
  sl: TList<string>

?

Por lo que puedo ver, ambos se comportan exactamente igual.

¿Es solo otra forma de hacer lo mismo?

¿Hay situaciones en las que una sería mejor que la otra?

¡Gracias!