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/
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.