Sobre el proyecto

Nolang es un nuevo lenguaje diseñado para la programacion de sistemas, cuyo objetivo central de diseño es la seguridad en memoria sin necesidad de recolección de basura (GC). ## Características del lenguaje **Seguridad en memoria**: Nolang no depende de GC; garantiza la seguridad mediante gestión automática de memoria. Las variables se destruyen automáticamente al finalizar el ámbito de la función, y se prohíbe la liberación manual para evitar referencias colgantes. Contenedores como arrays y slices emplean semántica de copia por valor, aislándose de la vida útil de la variable original. **Modelo unificado de transferencia por referencia**: Todos los parámetros de función se pasan por referencia de forma predeterminada; las modificaciones realizadas dentro de la función afectan directamente a los datos originales del llamador, aunque no se permite destruir el propio parámetro. **Sobreescritura de variables por ámbito**: Al reutilizar un mismo identificador de variable dentro del mismo ámbito de función, Nolang lo considera una sobreescritura y reasignación, no la creación de una nueva variable. Los cambios de tipo quedan prohibidos en el nivel sintáctico, eliminando el oscurecimiento de variables. **El lenguaje nunca entra en pánico a nivel de idioma**: Se eliminan rutas implícitas de fallo y ambigüedades ocultas. **Asignación y liberación en lote en el heap**: Soporta asignación por lotes anticipada y liberación masiva al salir del ámbito, sin costes de asignación ocultos. ## Cadena de herramientas Se ofrece una completa herramienta de línea de comandos (comando `no`) que soporta las siguientes operaciones: - `no init` / `no new`: inicializar un espacio de trabajo y crear paquetes de proyecto - `no fmt`: formateo de código - `no build` / `no run` / `no test`: compilar, ejecutar y probar - `no add` / `no remove` / `no update` / `no sync` / `no list`: gestión de dependencias - `no install` / `no uninstall`: gestión de instalaciones de binarios - `no pub`: publicación en el registro de paquetes - Compatible con compilación cruzada (especificar destino) y distintos compiladores backend (como Zig) Convención de puntos de entrada: `main.no` como punto de entrada del programa, `lib.no` como entrada de bibliotecas, todos los archivos `.no` bajo el directorio `tests/` como archivos de prueba. ## Soporte del editor - Extensión para VSCode (incluye servidor LSP) - Se puede construir desde el código fuente con `make lsp` ## Compilación desde el código fuente Use el comando `make`: `make no` para construir el CLI, `make lsp` para construir el servidor del lenguaje, `make package` para empaquetar la extensión de VSCode, `make playground` para construir el Playground web con WebAssembly. ## Proyectos relacionados - notools: Colección de herramientas de línea de comandos Unix (cat, ls, grep, wc, etc.) implementadas en Nolang, que demuestra el uso práctico del lenguaje en el campo de la programación de sistemas. El proyecto utiliza la licencia Apache-2.0. Documentación oficial en: https://lizongying.github.io/nolang/