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

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

Концепция

Концепция и правила синтаксиса языка программирования TrustLang

Фундаментальные понятия

Синтаксис TrustLang имеет несколько общих для всего языка правил:

  • Язык построен на грамматических правилах, а не на ключевых словах. Лексер и парсер получаются однопроходными, простыми и быстрыми, а привычная запись с ключевыми словами (@if, @while, @func, …) реализуется поверх базового синтаксиса через макросы.
  • Термины исходного текста сначала распознаются лексером и обрабатываются макропроцессором, и только затем попадают в парсер. Это позволяет с помощью макросов модифицировать даже базовые синтаксические конструкции.
  • Инструкции (операторы) разделяются точкой с запятой ;.
  • Блоки кода записываются в фигурных скобках { ... }.
  • Любая конструкция (в том числе блок кода) является выражением и возвращает значение, поэтому её можно вкладывать в другие выражения.

Синтаксис TrustLang можно условно разделить на несколько слоёв, каждый из которых отвечает за свою область:

  1. Алгоритмический слой — минимально необходимая основа, описывающая сам алгоритм: литералы, именованные объекты, операторы и управляющие конструкции (Операторы). Этот слой оптимизирован для машинного разбора и не содержит «синтаксического сахара».
  2. Оформительский слой — не влияющие на алгоритм средства оформления и упрощения записи: макросы, вспомогательные проверки.
  3. Атрибуты — отдельный слой записи свойств элементов, которые не меняют алгоритм, но влияют на детали его реализации (оптимизации, интеграция с C/C++).
  4. Верификация — слой контрактов, который не пересекается с остальными и не влияет ни на алгоритм, ни на его реализацию, а служит для доказательства корректности алгоритма.

Блоки кода

Последовательность идущих подряд инструкций группируется в блок кода { ... }, который выполняется как единое целое и завершается точкой с запятой ;. Блок кода возвращает значение своей последней инструкции; тип этого значения можно ограничить явно: { ... }:Type.

Блоки кода используются для ограничения области видимости переменных (см. Иерархия кода) и могут быть именованными — тогда они выступают локальными метками передачи потока управления (см. Возврат, прерывания и ошибки). Тело функции тоже является блоком кода в пространстве имён её определения. Перехват и прерывание потока внутри блока описаны в разделе Обработка ошибок.

Блок кода с нативным синтаксисом {% ... %} содержит исходный текст на языке реализации (C++), который подставляется в выходной текст напрямую (см. Нативные типы).