Почему и что ты считаешь пустыми абстракциями? Например, сформировать текст руками, на ассемблере и скопировать в буфер -- это, очевидно, совсем уж без всяких, и пустых в т.ч. абстракций. Но насколько это хорошее решение? Предлагаемая мною абстракция, по крайней мере на мой взгляд, далеко не пустая. Если говорить про пункты 1 и 2 из списка -- это далеко не пустая абстракция, это -- отложенные вычисления. Когда строка формируется не в момент когда её генерируют, а в момент когда её попросят. Потому, что её могут вообще не попросить. Потому, что в сформированном виде она существенно больше места занимает. Потому, что сам факт генерации строки -- заметная потеря производительности, особенно на современных CPU (вызов каких-то "далёких" функций, какие-то циклы в них, перезапись кешей...) Именно про это же и пункт 3 -- лучше нагенерировать больше линейного кода, пусть его больше, но он по факту быстрей. Пункт 4 -- самоочевиден, какая уж тут пустая абстракция. Пункт 5 тоже имеет вполне очевидный функционал.
Абстракция не пустая до тех пор, пока она 1) не привносит очевидный новый функционал (всегда конечно можно сказать, мол ничего не нужно и будем дальше писать на ассемблере -- но тут уже не в абстракции дело), 2) не знаю как это назвать, но очевидно любой макрос или шаблон, который не может быть однозначно, без объёмных модификаций в каждом случае (т.е. читай "переписать руками заново"), заменён на код который он генерирует -- не пустая абстракция, а метапрограммирование.
[ZX]