VoidVolker писал(а):
вопрос писал(а):
не понимаю, во всех языках получается, а тут нет?
А вот не надо подменять понятия - язык тут ни причем.
Вот пример: есть у нас строка в 10 мегабайт, и вот чтобы в начале строки вставить /#FF00FF, надо выделить новый буфер для нее размером 10мб+8байт, затем поместить туда /#FF00FF и еще дописать 10мб текста. Даже если строка уже в буфере, в любом случае двигать 10мб данных. Разве это будет быстро? А если нам надо сохранить строку без форматирования? Придется искать по всему буферу символы и группами их записывать в файл. Или произвести поиск текста /#FF00FF? Это усложнит алгоритм поиска. А если мы в реальном времени печатаем в начала текста - при каждом печатаемом символе надо будет двигать 10мб? Разве это будет быстро? Не думаю. Это же сколько работы надо сделать, только чтобы вывести сообщение? А тут 15 минут - и можно не напрягаясь выводить нужным цветом текст. Как любит говорить Хищник: "минимум работы - максимум эффекта". 8)
Зачем строка 10 мБ? Это не строка а база данных, и подход соответствующий.
Пример совсем непонятен. Форматирование на уровне исходника осуществляет программист - в исходнике, т.е. случай
"чтобы в начале строки вставить
/#FF00FF, " неадекватен, это как-раз означало бы, что форматирование осуществляется над неформатированной строкой програмными средствами

и только затем передаётся функции форматированного вывода? Форматирование в строку вставляет программист для наглядности, чтобы не подсчитывать символы и не писать "на таком-то символе от начал строки вставить тэг (курсив)", для чего может понадобиться вставлять в
исходник строки (а такой вид имеет только исходник строки) дополнительные маркеры форматирования ? ЕСли у нас есть строка, наждающаяся в форматировании, то это никак не предполагает, что её сначала нужно снабдить маркерами, а потом передать слову, которое эти маркеры понимает
МОжно (и нужно) сразу помещать
результат обработки этих маркеров в строку-результат (строка-результат - это то, что мы выводим) и не пользоваться самими маркерами