À propos du projet

Nolang est un nouveau langage conçu pour la programmation système, dont les objectifs principaux sont la sécurité mémoire sans recourir au garbage collection (GC). ## Caractéristiques du langage **Sécurité mémoire** : Nolang ne repose pas sur un GC et garantit la sécurité via une gestion automatique de la mémoire. Les variables sont automatiquement détruites à la fin de leur portée, et la libération manuelle est interdite afin d'éviter les références pendantes. Les conteneurs tels que les tableaux et les slices utilisent une sémantique de copie par valeur, les isolant de la durée de vie de la variable d'origine. **Modèle unifié de passage par référence** : Tous les paramètres de fonction sont par défaut passés par référence. Toute modification apportée aux paramètres dans la fonction agit directement sur les données originales de l'appelant, mais il est interdit de détruire le paramètre lui-même. **Masquage des variables par portée** : Lorsqu'une variable portant le même nom est réutilisée dans une même portée de fonction, Nolang le traite comme une substitution de réattribution plutôt que comme la création d'une nouvelle variable. Les types différents sont refusés au niveau syntaxique, éliminant ainsi tout masquage accidentel de variables. **Jamais de crash au niveau du langage** : Les chemins de crash implicites sont éliminés, sans ambiguïté cachée. **Allocation preemptive en vrac par la pile et libération groupée** : Il prend en charge l'allocation anticipée en vrac ; à la sortie de la portée, une mise à libre groupée est effectuée, sans coût d'allocation caché. ## Chaîne d'outils Un outil en ligne de commande complet (`no`) est fourni, supportant les opérations suivantes : - `no init` / `no new` : initialisation d'un espace de travail et création d'un package de projet - `no fmt` : formatage du code - `no build` / `no run` / `no test` : construction, exécution et tests - `no add` / `no remove` / `no update` / `no sync` / `no list` : gestion des dépendances - `no install` / `no uninstall` : gestion de l'installation des binaires - `no pub` : publication vers le registre de paquets - Support du cross-compilation (cible spécifiée) et de différents backend (comme Zig) Convention d'entrée : `main.no` est l'entrée du programme, `lib.no` est l'entrée de la bibliothèque, tous les fichiers `.no` sous le répertoire `tests/` sont des fichiers de test. ## Support éditeur - Extension VSCode (avec serveur LSP) - Peut être construit à partir des sources avec `make lsp` ## Construction à partir des sources Utilisez la commande `make` : `make no` pour construire l'CLI, `make lsp` pour le serveur de langage, `make package` pour emballer l'extension VSCode, `make playground` pour construire le playground WebAssembly en ligne. ## Projets liés - notools : Ensemble d'outils en ligne de commande Unix (cat, ls, grep, wc, etc.) implémentés en Nolang, illustrant des applications pratiques du langage dans le domaine de la programmation système. Le projet est sous licence Apache-2.0. Documentation officielle : https://lizongying.github.io/nolang/