"[thing1][thing2][thing3]" and text() both compile to use only 1 string tree operation regardless of the number of args.
list2text abuses this to write 128 items of the list in 1 go, and it also handles the separator in the proper way, so no reason to not use it.
this also cuts 1 string tree operation out of every associative list write as well as 1 out of the writing of every item in that list.
So now the string tree O notation should be O(n log2(M)) rather then O(N^M) (ish)