Концепции

Описание концепций языка и реализованных технических решений
  • Гарантия безопасной разработки программного обеспечения на уровне синтаксиса. Если код скомпилировался корректно, значит, в нём отсутствуют целые классы ошибок, а следовательно - и связанные с ними уязвимости, что реализовано за счет:

    • безопасных вычислений и преобразования типов
    • безопасного управления памятью и ресурсами
    • безопасного многопоточного программирования
    • формального анализа доказательства корректности программы
  • Язык разработан как “надстройка” над языком C++ с сохранением всех его возможностей и характеристик, но лишенный недостатков в виде очень сложной лексики, ручного управления памятью и адресной арифметики. Компилятора реализован как трансплайтера в язык С++, что позволяет встраивать отдельные фрагменты С++ кода непосредственно в исходный код программы и компилировать итоговый файл с помощью обычного C++ компилятора.

  • Кроме компиляции в имполняемый бинарный файл, среда выполнения имеет JIT компилятор и REPL, за счет чего программы можно использовать как обычные скрипты на интерпретируемых языках программирования.

  • Синтаксис языка основан не на ключевых словах, а на синтаксическизх правилах, из-за чего лексер и парсер получаются очень простыми и быстрыми.

Основные и важные понятияпонятия: - Термины (Лексемы) (минмальная последовательность символов) - результат работы лексера. - Макросы (обработываются в лексере и могут можифицировать АСТ) - Термины (именованные объекты языка), создаются программистом - Атрибуты - свойства терминов во время компиляции. - Операторы - символьное обозначение операции, включая создание терминов. - выражения - последовательность терминов и выражений для выполнгения вычислений, определения или преобразования данных. - АСТ (дерево терминов) - результат анализа парсера - пследовательность терминов выражений - Область (пространство) имен - система организации кода в виде логических групп с целью избежания конфликтов имен и для отнесения идентификатора к глобальным объектам - Модули и пакеты - иерархическая системы физического расположения файлов программ в каталогах файловой системы

- Формальный анализ - статической проверки динамических выражений AoRTE (“Absence of Run-Time Errors”)- проверка определяемых пользователем утверждений в разных частях программы и вызовах функций.


возможность работы как в режиме интерпретатора, так и компилятора*
динамическая и статическая типизация с возможностью указания типов в явном виде
статическая типизация является условно-строгой (автоматическое приведение типов отсутствует, но допускается преобразование между некоторыми типами данных. Например, целое число может быть автоматически преобразовано в вещественное или рациональное, но не наоборот)
автоматическое управление памятью без сборщика мусора на основе сильных и слабых указателей
ООП* в виде явного наследования классов и «утиная типизация»
на уровне синтаксиса поддерживается несколько типов функций (обычные и чистые функции без побочных эффектов)
необязательные и именованные параметры функций
простая интеграция с уже существующими программными библиотеками (в том числе импорт нативных переменных, функций и классов* из С/С++.)
имеется REPL (read-eval-print loop — «цикл: чтение — вычисление — вывод»)

*) Данные возможности запланированы к реализации Зачем нужен TrustLang?

У всех современных языков программирования происходит постоянное развитие (усложнение) синтаксиса по мере выхода новых версий. Это является своего рода платой за появление новых возможностей языка и воспринимается пользователями как естественное явление.

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

Еще одним следствием этого процесса становится постоянное увеличение сложности разработки и поддержки уже созданных программных продуктов, когда старый программный код дорабатывается с применением уже новых стандартов и постоянным увеличением старого легаси кода.

TrustLang разработан как “надстройка” над языком C++ с сохранением всех его возможностей и характеристик, но лишенный его недостатков в виде очень сложной лексики, адресной арифметики, ручного управления памятью и ограниченностью встроенных типов данных.

Тензорные вычисления и рациональные числа неограниченной точности доступны «из коробки» и поддерживаются на уровне синтаксиса для удобной записи литералов. Тензорные вычисления сделаны на базе библиотеки libtorch, а рациональные числа неограниченной точности с помощью OpenSSL.