Skip to the content.

Проект NewLang

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

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

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


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


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

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

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

Вся документация на одной странице

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

#!../output/nlc --eval

hello(str) := { 
    # Импорт и вызов стандартной функции printf
    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

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

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

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

Сборка


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

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

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