Ярослав Романченко писал(а):
Для подобной функциональности лучше объект - "Построитель строки", обладающий внутренним буфером и увеличивающий его по мере необходимости.
Согласен с тем, что такой функционал может быть полезен, но если его не предлагается использовать для стрельбы из пушки по воробьям (динамику там, где достаточно статики, к примеру, только для коротких строк или строк с известной максимальной длиной).
Иван Денисов писал(а):
Oleg N. Cher писал(а):
Отпишитесь, пожалуйста, если удастся исправить это в какой-то сборке BlackBox.
Очень интересно, надо будет попробовать.
Я пробовал. Нет, это не работает. В BlackBox реализация этой операции устроена по-другому.
Теперь такой вопрос ко всем. Как считаете, должен ли компилятор в случае операции присваивания строки самой себе просто не генерировать никакого кода?
Для массивов в КП есть операция
a := a , которая просто копирует кусок памяти сам в себя. Для такой операции, пожалуй, можно код не генерировать.
Есть другая операция
a := a$ , на первый взгляд может показаться, что для неё тоже можно не генерировать код, но у неё есть побочный эффект: трап в том случае, если в массиве не будет символа 0X.
В любом случае, проблема именно такой оптимизации стоит не столь остро. Раз программист написал
a := a , то наверное он же что-то этим хотел сказать. Хотя как сказать. Но можно не писать такой код. В случае же конкатенции у нас нет выбора, и операция копирования строки саму в себя всё равно происходит.