Review and changes from Jocelyn Fiat

minor improvement
s := a + b + c + d
will create many intermediate string objects such as
s := (a + (b + (c + d)))
here each pair of parenthesis is a new string object.

so it is better for memory usage (and GC usage) to do
create s.make_from_string (a)
s.append (b)
s.append (c)
s.append (d)

Obviously this is a minor optimization and does not make the code easier to read.
But in web development , memory is always a critical point, so better have minor optimization especially on feature that is often used.