This is a very interesting topic. It depends what you are doing and what your goal is.
For something relatively small, using 'strptr1' for strings is fine.
For something more complicated that requires sharing of strings, one may want to use
ref-counted strings.
In ATS2, I added a type strobjref:
https://github.com/githwxi/ATS-Postiats/blob/master/libats/SATS/strobjref.satswhich is for reference-counted strings.
At the beginning of a project, I often do not know for sure what kind of strings I want.
So I often introduce an abstract type
absviewtype mystring (l:addr)
First I implement mystring based on strptr. Later, I may change the implementation,
making it based on strobjref or something else.
In practice, if string sharing is allowed. then memory leaks are often very difficult to prevent.
For instance, there are many leaks in graphviz (according to bug reports). ATS is very good
for stopping this kind of problems.