Разделы сайта находятся в разработке.

Материалы могут быть неполными или содержать ошибки. Содержимое сайта будет синхронизировано с реализацией при выходе следующей версии, тогда как текущая (0.6.0) предназначена для прототипирования синтаксиса и создания песочницы.

Символьные строки

TrustLang поддерживает два типа строк:

  • :StrChar — универсальные байтовые UTF-8 строки;
  • :StrWide — системные (широкосимвольные) строки.

Байтовые строки :StrChar

Единичный элемент байтовой строки — один байт (точнее :Int8, восьмибитное целое со знаком). Размер строки возвращается в байтах, а доступ по индексу обращается к байту последовательности. Так как данные интерпретируются как последовательность UTF-8 символов, при изменении отдельных байт нужно соблюдать осторожность.

Системные строки :StrWide

Единичный элемент системной строки — широкий символ wchar_t, а размер возвращается в широких символах. Размер wchar_t зависит от операционной системы: в Windows один символ :StrWide занимает 2 байта, в Linux — 4. Основное назначение системных строк — упрощение работы в текстовом терминале: один символ всегда соответствует одному знакоместу без конвертации кодовых точек UTF-8.

Несмотря на разный единичный элемент, внутреннее представление у обоих типов одинаковое: данные строк хранятся в виде байтовой UTF-8 последовательности.

Форматирование строк

К любой переменной можно обратиться как к функции (указав после имени круглые скобки), создав тем самым копию/клон объекта; для строк такой вызов используется как шаблон форматирования данных.

Форматирование возможно двумя способами:

  • Строка формата в стиле printf (тип :FmtChar/:FmtWide) в текущей версии не реализована — типа :FmtChar/:FmtWide нет (см. Статус). Для нативных функций с printf-строкой используется атрибут @[format("printf", pos, ...)] (проверка параметров на этапе компиляции, пример — hello).
  • Во всех остальных случаях (любая строка по умолчанию) формат соответствует библиотеке {fmt}/std::format: порядковый номер аргумента ({0}, {1}) или пустые {}. Проверка аргументов выполняется при клонировании строки (во время компиляции и выполнения). Именованные аргументы (name = …) не реализованы.
$template := "{0}: {1}";    # формат как в {fmt}
$result := $template('value', 123);