Об этом проекте

Nolang — это новый язык, предназначенный для системного программирования; его ключевая цель дизайна — безопасность памяти без сборки мусора (GC). ## Особенности языка **Безопасность памяти**: Nolang не полагается на GC и обеспечивает безопасность за счёт автоматического управления памятью. Переменные автоматически уничтожаются при выходе из области видимости функции; ручное освобождение запрещено во избежание висячих ссылок. Контейнеры, такие как массивы и срезы, используют семантику копирования значений и изолированы от времени жизни исходной переменной. **Унифицированная модель передачи по ссылке**: все параметры функций по умолчанию передаются по ссылке; изменения параметра внутри функции напрямую влияют на исходные данные вызывающей стороны, но сам параметр нельзя уничтожить. **Перекрытие переменных в области видимости**: при повторном использовании одного и того же имени переменной в одной области видимости функции Nolang рассматривает это как перекрывающее присваивание, а не создание новой переменной. При разных типах это не допускается на уровне синтаксиса, что исключает затенение переменных. **Языковой уровень никогда не падает**: устранены неявные пути аварийного завершения, нет скрытых неоднозначностей. **Предварительное пакетное выделение памяти в куче и пакетное освобождение**: поддерживается досрочное пакетное выделение; при выходе из области видимости выполняется пакетный free, без скрытых затрат на выделение. ## Инструментарий Предоставляется полный набор инструментов командной строки (команда `no`), поддерживающий следующие операции: - `no init` / `no new`: инициализация рабочей области и создание нового пакета проекта - `no fmt`: форматирование кода - `no build` / `no run` / `no test`: сборка, запуск и тестирование - `no add` / `no remove` / `no update` / `no sync` / `no list`: управление зависимостями - `no install` / `no uninstall`: управление установкой бинарных файлов - `no pub`: публикация в реестр пакетов - Поддержка кросс-компиляции (с указанием target) и различных бэкенд-компиляторов (например, Zig) Соглашение о точках входа: `main.no` — точка входа программы, `lib.no` — точка входа библиотеки, все файлы `.no` в каталоге `tests/` — тестовые файлы. ## Поддержка редакторов - Расширение для VSCode (включая LSP server) - Можно собрать из исходного кода с помощью `make lsp` ## Сборка из исходного кода Используйте команды `make`: `make no` собирает CLI, `make lsp` собирает языковой сервер, `make package` упаковывает расширение VSCode, `make playground` собирает онлайн Playground на WebAssembly. ## Связанные проекты - notools: набор Unix-инструментов командной строки (cat, ls, grep, wc и т. д.), реализованный на Nolang; демонстрирует практическое применение языка в области системного программирования. Проект распространяется под лицензией Apache-2.0, официальная документация: https://lizongying.github.io/nolang/