Sobre o projeto

Nolang é uma nova linguagem projetada para programação de sistemas, com o objetivo central de oferecer segurança de memória sem necessidade de coleta de lixo (GC). ## Recursos da Linguagem **Segurança de memória**: Nolang não depende de GC, garantindo segurança por meio de gerenciamento automático de memória. Variáveis são destruídas automaticamente ao final do escopo da função, e a liberação manual é proibida para evitar referências pendentes. Containers como arrays e slices utilizam semântica de cópia por valor, isolando o ciclo de vida em relação à variável original. **Modelo unificado de passagem por referência**: Todos os parâmetros de função são passados por referência por padrão. Modificações feitas aos parâmetros dentro da função afetam diretamente os dados originais do chamador, mas o parâmetro em si não pode ser destruído. **Sobrescrita de variáveis no escopo**: Quando o mesmo nome de variável é reutilizado dentro do mesmo escopo de função, o Nolang o trata como uma reatribuição de sobrescrita, em vez da criação de uma nova variável. Se os tipos forem diferentes, a sintaxe não permite, eliminando o sombreamento de variáveis. **A linguagem nunca trava**: Elimina caminhos de travamento implícitos, sem ambiguidades ocultas. **Alocação e liberação em lote na heap**: Suporta alocação antecipada em lote e liberação em lote ao sair do escopo, sem custos ocultos de alocação. ## Cadeia de Ferramentas Fornece uma linha de comando completa (comando `no`), suportando as seguintes operações: - `no init` / `no new`: Inicialização de workspace e criação de novos pacotes de projeto - `no fmt`: Formatação de código - `no build` / `no run` / `no test`: Construção, execução e testes - `no add` / `no remove` / `no update` / `no sync` / `no list`: Gerenciamento de dependências - `no install` / `no uninstall`: Gerenciamento de instalação de binários - `no pub`: Publicação no registro de pacotes - Suporte a compilação cruzada (especificando o target) e diferentes backends de compilador (como Zig) Convenções de entrada: `main.no` é a entrada do programa, `lib.no` é a entrada da biblioteca, e todos os arquivos `.no` no diretório `tests/` são arquivos de teste. ## Suporte a Editores - Plugin para VSCode (inclui servidor LSP) - Pode ser construído a partir do código-fonte via `make lsp` ## Construção a partir do Código-Fonte Use o comando `make`: `make no` constrói a CLI, `make lsp` constrói o servidor de linguagem, `make package` empacota a extensão VSCode, `make playground` constrói o Playground online em WebAssembly. ## Projetos Relacionados - notools: Conjunto de ferramentas de linha de comando Unix implementadas em Nolang (cat, ls, grep, wc, etc.), demonstrando a aplicação prática da linguagem no domínio de programação de sistemas. O projeto adota a licença Apache-2.0. Documentação oficial: https://lizongying.github.io/nolang/