TrustLang

Высокоуровневый язык общего назначения для доверенной (trusted) разработки с безопасным управлением памятью, обнаруженим ошибок на этапе компиляции и  полная совместимость со всей экосистемой C/C++, включая непосредственную вставку фрагментов кода на C++.

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

TrustLang — это язык-«надстройка» над C++, который позволяет пользоваться всем его богатыми возможностями, но без его сложного синтаксиса, неопределённого поведения и прочих подводных камней. Проще и быстрее, чем Python, привычнее и безопаснее, чем Rust.*

Безопасная память без сборщика мусора

Управление памятью в стиле C++ с помощью  RAII, сильных и слабых ссылок. Анализ ошибок, гонок данных и циклических зависимостей на этапе компиляции. Модель памяти* →

Переполнение стека — как исключение

Обработка переполнения стека программы как обычного программное исключения, вместо аварийное завершение с segfault. Защита стека →

Автоматичсеквя защита от dangling ссылок

Статический аналих висящих ссылок (аналог владения и заимствования в Rust), но для C++ без UB и segfault в рантайме. Контроль владения* →

Система типов

Статическая и динамическая типизация. Тип можно указать явно или оставить автоматический вывод из контекста. Возможность использование типов и шаблонов C++. Система типов →

Интеграция с C/C++

Вставки фрагнметов C++-кода и непосредственные вызовы C++ функций без FFI-обвязок. Интеграция с C++ →

Формальная верификация

Контрактное программирование (пред/пост-условия, утверждения). Экспорт кода и контрактов в SMT-решатель (Z3). Верификация* →


*) - Текущая версия, это демонстрация концепции, проверка различных подходов в реализации архитекутры и прототипирование синтаксиса

Как это выглядит

Пример простой программы на TrustLang с числами неограниченной точности, автоматическим выводом типов.

Запуск программы как bash скрипта с автоматической компиляцией С++ кода при первом запуске и  последующим выполнением бинарного файла. Автоматическиая перекомпиляция при измении исходника.


    #!../_build/trust --run -Wsigil=ignore -Wembed=ignore

    $fact := 1\1;   # Autotyping
    $mult:Int32 := 1; # Fixed type

    while( mult <= 40 ) {
        fact *= mult;   # факториал 40, точность не теряется
        {% $mult++ %};  # Инкремент как фрагмент C++ кода
    };

    @print('{}', fact);

Вывод:

    815915283247897734345611269596115894272000000000

Еще примеры и итоговый сгененрированный C++ код в песочнице.