Lingue: English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Русский | العربية
Il compilatore C23 AI-friendly per la ricerca sulla sicurezza, costruito su LLVM
Linker integrato · Pipeline dyncode · Runtime integrati (string · mimalloc · xorstr · strhash)
Documentazione · Guida dyncode · Runtime integrati · API Plugin · Roadmap
Nota: GitHub mostra sempre
README.md(inglese) come home del repository (nessuna rilevazione automatica della lingua). Usa i link lingua sopra; nella documentazione e la guida dyncode mantieni la stessa lingua tramite barra lingua e breadcrumb.
NeverC compila C standard in binari ospitati, eseguibili freestanding e dyncode indipendente dalla posizione — tutto da un'unica toolchain. Supporta x86_64 e AArch64 (solo little-endian). Le versioni future aggiungeranno EVM (smart contract Ethereum) e Solana eBPF (programmi on-chain) come target di compilazione.
C è già il linguaggio di sistema più semplice. NeverC lo rende ancora più semplice:
- Puro C23, nient'altro — Nessun template, nessun RAII, nessun overloading di operatori, nessun flusso di controllo nascosto. Ciò che leggi è ciò che viene eseguito.
stringintegrato — Tipo stringa a semantica di valore con+,==,.starts_with()e rilascio automatico — senza C++.- Nessuna eccezione — La gestione degli errori resta esplicita. Nessuno stack unwinding, nessuna sorpresa sulle prestazioni.
- Singolo binario — Compilatore + linker + runtime in un unico eseguibile. Zero dipendenze esterne.
- Compatibile con LLM — Grammatica minimale e semantica deterministica: il codice NeverC generato dall'IA compila correttamente più spesso delle alternative C++.
- Vera cross-compilazione — Compilare Windows PE, Linux ELF, macOS Mach-O, Android ELF e dyncode da macOS o Linux — nessuna VM, nessun dual boot, nessuna ricerca di SDK. Gli SDK di piattaforma sono integrati nel compilatore.
- Estensibile senza frizioni — Un singolo header C, 130 fasi di compilazione con nome, e hai un plugin del compilatore capace di intervenire in qualsiasi fase — dall'ottimizzazione IR all'output binario finale — senza conoscere LLVM.
- Ricerca sulla sicurezza integrata — Compilazione dyncode, cifratura stringhe a tempo di compilazione e generazione PE multipiattaforma sono nativamente integrati nel compilatore — non aggiunte posticce con script esterni.
- Compilatore dyncode — pipeline IR/MIR multistadio, estrazione multipiattaforma, risoluzione import/syscall, modalità kernel, audit byte vietati, architettura a plugin
- Linker integrato — COFF, ELF e Mach-O in un solo binario; nessun
ldolink.exeesterno - Stripping di rilascio —
--strip/-sintegrato rimuove simboli non necessari a runtime e debug sorgente dalle immagini ELF, Mach-O e PE/COFF finali, con rinomina strutturale dei simboli.koconsapevole del kernel (non è hash né encryption) - Cross-compilazione — Windows PE, Linux ELF, macOS Mach-O e Android ELF da qualsiasi host con SDK di piattaforma integrati
- Runtime integrati — runtime LLVM bitcode integrati nel compilatore:
string(stringa a semantica di valore, gestione automatica della memoria),mimalloc(sostituzione trasparente allocatore ad alte prestazioni, attiva per impostazione predefinita fuori dai target kernel e freestanding),xorstr(crittografia per istanza, sigillatura tardiva obbligatoria ed espansione nativa per call site) estrhash(hash di stringhe a tempo di compilazione con lo stesso algoritmo a runtime) - API Plugin — ABI C pura per plugin fuori dall'albero; SDK a singolo header, zero dipendenze LLVM/CRT, che copre le fasi di driver, preprocessore, AST, IR, MIR, MC, oggetto, collegamento, LTO e dyncode
- Estensione
.nc— usa.ncper abilitare automaticamente tutte le funzionalità NeverC (string, tipi interi stile Rust) senza flag aggiuntivi - Build LLVM snella — solo backend x86_64 / AArch64; percorsi C++/ObjC/OpenMP rimossi
#include <stdio.h>
typedef struct { string user; string pass; } creds;
int main(void) {
string msg = "Hello " + "NeverC!";
printf("%s\n", msg.c_str());
// Compile-time encryption — `strings ./bin` cannot find these literals
creds login = {.user = "admin".encrypt(), .pass = "s3cret".encrypt()};
string paths[] = {"/api/v1".encrypt(), "/api/v2".encrypt()};
// Zero-allocation decrypt-and-compare (plaintext never fully in memory)
if (login.user == "admin".encrypt() && login.pass == "s3cret".encrypt()) {
for (int i = 0; i < 2; i++)
if (msg.starts_with(paths[i]))
printf("route matched: %s\n", paths[i].c_str());
}
return 0;
}Nota: Il tipo
stringintegrato richiede-fbuiltin-stringper i file.c. Viene abilitato automaticamente per i file.nce in modalità-fdyncode.
# macOS arm64 / x86_64
neverc -fdyncode -target arm64-apple-macos hello.c -o hello.bin
neverc -fdyncode -target x86_64-apple-macos hello.c -o hello.bin
# iOS arm64
neverc -fdyncode -target arm64-apple-ios hello.c -o hello.bin
# Linux x86_64 / arm64
neverc -fdyncode -target x86_64-linux-gnu hello.c -o hello.bin
neverc -fdyncode -target aarch64-linux-gnu hello.c -o hello.bin
# Android arm64 / x86_64
neverc -fdyncode -target aarch64-linux-android hello.c -o hello.bin
neverc -fdyncode -target x86_64-linux-android hello.c -o hello.bin
# Windows x86_64 / arm64
neverc -fdyncode -target x86_64-pc-windows-msvc hello.c -o hello.bin
neverc -fdyncode -target aarch64-pc-windows-msvc hello.c -o hello.binVedi l'indice della documentazione per design dettagliato, matrice piattaforme, riferimento CLI ed esempi. Esempi completi compilabili: examples.
Su Linux x64/arm64 e macOS arm64, installate l’ultima release con un solo comando:
curl -fsSL https://raw.githubusercontent.com/NeverSight/NeverC/HEAD/install.sh | shL’installer scarica l’archivio release per la vostra piattaforma, lo verifica con SHA256SUMS, installa in ~/.neverc e antepone ~/.neverc/bin al PATH della shell.
Su Windows x64/arm64, eseguite questo comando in PowerShell 5.1 o successivo:
irm https://raw.githubusercontent.com/NeverSight/NeverC/HEAD/install.ps1 | iexL’installer Windows rileva l’architettura nativa, verifica l’archivio release con SHA256SUMS e installa in $HOME\.neverc senza privilegi di amministratore. Aggiunge $HOME\.neverc\bin al PATH della sessione corrente e dell’utente, rendendo neverc disponibile subito e nei nuovi terminali.
Per fissare una versione specifica:
curl -fsSL https://raw.githubusercontent.com/NeverSight/NeverC/v3389.1.2/install.sh | NEVERC_VERSION=v3389.1.2 shWindows PowerShell:
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/NeverSight/NeverC/HEAD/install.ps1))) -Version v3389.1.2Verificare l’installazione:
neverc --version
neverc hello.c -o hello -fbuiltin-stringCompila in un eseguibile temporaneo, lo esegue sull'host locale e lo elimina — simile a go run. Per conservare il binario usa neverc ... -o out.
neverc run -O2 -fbuiltin-string hello.c
neverc run -O2 main.c helper.nc -- --verbose two words
neverc run hello.c -O1 -- program-arg| Argomento | Comportamento |
|---|---|
| Divisione predefinita | Flag compilatore prima del primo .c/.nc; sorgenti consecutive compilate insieme; il resto va a main |
-- esplicito |
Prima di -- al compilatore, dopo al programma (flag di link dopo le sorgenti) |
| Directory di lavoro | Esegue nella directory corrente — percorsi relativi come un binario normale |
| Ambiente e I/O | Eredita l'ambiente; stdin/stdout/stderr collegati al processo temporaneo |
| Codice di uscita | Restituisce il codice del programma; se la compilazione fallisce, quello del compilatore senza avviare il programma |
| Artefatto | Salvato in neverc-run-* e rimosso dopo l'esecuzione |
I flag di cross-compilazione possono compilare, ma il binario temporaneo viene sempre eseguito sull'host. Regole, esempi e limiti: neverc run →.
Il binario macOS arm64 è firmato con Apple Developer ID e notarizzato.
Variabili d’ambiente opzionali:
| Variabile | Scopo |
|---|---|
NEVERC_INSTALL_DIR |
Prefisso di installazione (predefinito: ~/.neverc) |
NEVERC_VERSION |
Tag release, es. v3389.1.2 (predefinito: latest) |
NEVERC_NO_MODIFY_PATH=1 |
Non modificare il profilo shell; su Windows, non modificare il PATH della sessione né quello dell’utente |
I sysroot per cross-compilazione (Windows SDK, sysroot Linux, ecc.) si installano on demand dopo che il compilatore è nel PATH:
neverc runtime install all
neverc runtime install windows-x64
neverc runtime listUn’installazione release può aggiornare il compilatore e i runtime di cross-compilazione già installati come un’unica unità versionata:
neverc update # release completa più recente
neverc update v3389.1.2 # versione esatta, incluso il downgradeneverc upgrade è un alias. NeverC risolve un solo tag release concreto e reinstalla soltanto
i runtime già presenti, fissandoli tutti alla versione di destinazione del compilatore. Prima di
modificare i file attivi, tutti gli archivi necessari vengono scaricati, verificati con SHA256,
estratti e validati. Un errore di preparazione o verifica lascia invariata l’installazione corrente,
mentre un errore di commit avvia il rollback automatico. Se una release del runtime è difettosa,
neverc update <versione precedente> riporta indietro insieme compilatore e runtime installati.
Riferimento completo: neverc runtime → · neverc update → · neverc build / make →.
Requisiti, comandi di compilazione, cross-compilazione verso Windows, configurazione PATH e passaggio tra release installata e build in-tree — consultate Sviluppo locale.
NeverC è solo C per design (C23). Frontend C++, Objective-C, CUDA e linguaggi simili sono fuori scope; le pull request che li aggiungono verranno chiuse.
Per modifiche ampie a linguaggio, ABI o runtime, aprire prima una issue e discutere lo scope prima di inviare una pull request.
Il branch di sviluppo predefinito è dev. Clonare il repository, eseguire checkout di dev prima di iniziare e aprire pull request verso dev.
git clone https://github.com/NeverSight/NeverC.git
cd NeverC
git checkout devI componenti LLVM mantengono la licenza Apache-2.0 WITH LLVM-exception.
Quando copi o adatti codice, anche con l’assistenza di IA/LLM o per un riutilizzo relativo a LLVM, rispetta la licenza applicabile e conserva gli avvisi di copyright, licenza e attribuzione richiesti. Separatamente, chiediamo a chi usa NeverC come riferimento di citare il progetto e la fonte originale; questa richiesta del progetto non è una condizione di licenza aggiuntiva.
Consulta gli avvisi, la guida all’attribuzione e la citazione leggibile dalle macchine.