Skip to the content.

Проект NewLang

NewLang - это язык программирования высокого уровня в котором можно сочетать как стандартные алгоритмические конструкции с декларативным стилем программирования, так и тензорные вычисления для задач машинного обучения.

Основной особенностью языка является простой, логичный и непротиворечивый синтаксис, который основан не на использовании зарезервированных ключевых слов, а на строгой системе грамматических правил с использованием знаков препинания (в том числе операторов языка).

Текущая версия 0.2 от 11.08.2022 (Новое в текущей версии и история выпусков)

Основные свойства и особенности языка:


*Данные возможности запланированы к реализации при создании компилятора


Синтаксис языка

Подробное описание системы типов

Операторы и управляющие конструкции

Пример скрипта Hello world! на NewLang

    #!../output/nlc --eval

    hello(str) := { 
      printf := :Pointer('printf(format:FmtChar, ...):Int32');
      printf('call: %s', $str);
      $str;
    };
    hello('Привет, мир!');

Вывод:

    call: Привет, мир!
    Привет, мир!

Зачем нужен NewLang?

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

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

У NewLang сложность языковых конструкций естественно ограничена за счет разделения синтаксиса языка на две части - это упрощает его изучение и использование.

Основной синтаксис — для написания программ в объектно-ориентированном (императивном) и декларативном стилях, который основан не на зарезервированных ключевых словах, а на строгих грамматических правилах. Расширенный синтаксис — когда основного синтаксиса становится недостаточно, или требуется использовать языковую конструкцию языка реализации.

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

У NewLang тензорные вычисления доступны «из коробки» (используется библиотека libtorch), а арифметические типы данных являются скалярами (тензорами нулевой размерности). На уровне синтаксиса поддерживаются рациональные числа неограниченной точности, которые реализованы с использованием больших чисел из библиотеки OpenSSL.

Пример вычисления факториала 40 на NewLang

    #!../output/nlc --eval

    @fact := 1\1;  # Рациональное число без органичений точности
    @mult := 40..1..-1?; # Получить итератор для множителей от 40 до 2
    [mult ?!] <-> {      # Цикл, пока не закончатся данные итератора
      fact *= mult !;  # Получить текущий множитель и перейти на следующий элемент итератора
    };
    fact # Вывести итоговый результат

Вывод:

815915283247897734345611269596115894272000000000\1

Загрузка бинарных сборок

Бинарная сборка и тесты (пока только под Ubuntu)
Для запуска бинарных сборок потребуются разделяемые библиотеки libLLVM-13 и libtorch (архив с библиотеками).

Сборка из исходников

Подготовка репозитория

Сборка


Сборка проекта выполняется обычной утилитой make, но сборочные файлы генерируются автоматически в давно устаревшей версии NetBeans 8.2, т.к. это единственная универсальная среда разработки с поддержкой Makefile «из коробки», тогда как в текущей версии Apache NetBeans полноценная поддержка разработки на С/С++ вообще отсутствует.

Уже начал постепеный переход на использование редактора VSCodium (аналога VSCode, в котором вычищена телеметрия от Microsoft) и генерацию скиптов сборки с помощью сmake, но этот процесс пока не завершен.

Обратная связь

Если у вас появятся предложения по развитию нового или улучшению уже существующего функционала NewLang, пишите.