Перейти к содержанию

T3 — bounded StringBuilder

Первый срез builder — обычный модуль examples/text/builder.liza над существующим text.string.String. Новый builtin, отдельный владелец, ресурсный mutable borrow и автоматический рост вместимости не вводятся.

Операция Контракт
append(move output, data:View<u8>) Добавить самостоятельную корректную UTF-8 последовательность
append_u64(move output, value:u64) Десятичное представление всего диапазона u64
append_i64(move output, value:i64) Десятичное представление всего диапазона i64, включая минимум

Результат — существующий text.string.Appended: новый владелец и Result<Done,Error>. При Full старые байты и длина сохраняются; владелец возвращается и при ошибке. Никакого автоматического flush или частичного добавления в этих pure-функциях нет.

Для чисел используется локальный массив 21 байт. Цифры записываются с конца, затем готовый диапазон единственным append добавляется к String. Знак минимума i64 обрабатывается через u64(-(value+1))+1, без переполнения отрицания. Ноль записывается как 0, группировка разрядов и locale не используются. Стоимость ограничена числом десятичных цифр; уже существующий префикс не копируется. Аллокатор вызывающей стороны, инициализация исходного Buffer и его освобождение остаются отдельными явными операциями.

UTF-8-инвариант String не ослабляется ради потокового ввода. JSON format удерживает незавершённый Unicode scalar в отдельном четырёхбайтовом состоянии и передаёт builder только полные последовательности.

Проверка и дальнейшие шаги

Нативные проверки O0/O2 охватывают границы u64/i64, десятичные разряды, точную и недостаточную вместимость, сохранение непустого префикса и отсутствие аллокатора в builder. Windows запускает тот же набор в Compiler tests CI.

python3 -m unittest tests.test_text_builder tests.test_json_format -v

Это тестируемая библиотека, не формальное доказательство всех входов. Форматирование чисел с плавающей точкой, общий format-string API, кодирование произвольного текста в JSON-строки и grow/reserve остаются следующими задачами. Потоковый JSON tokenizer с декодированными значениями также не реализован: первый formatter сохраняет существующие lexemes.