Об этом проекте
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/
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.