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