Durante lo sviluppo della versione 3.0 del linguaggio di programmazione Nim, si sta lavorando a un nuovo compilatore che utilizza il formato intermedio NIF (Nim Intermediate Format). Il nuovo compilatore affronterà diverse sfide tecniche, tra cui il miglioramento della compilazione incrementale e la semplificazione della gestione delle dipendenze tra i moduli. La data di rilascio di Nim 3.0 non è ancora stata definita.
Secondo la specifica NIF pubblicata nel repository del progetto, il nuovo formato consente di memorizzare il codice sotto forma di albero di sintassi astratta (AST), separando gli spazi dei nomi per le costruzioni integrate e i nomi utente. Ciò garantisce flessibilità nell'aggiunta di nuove parole chiave e semplifica l'integrazione con gli strumenti di sviluppo.
Il compilatore Nim 3.0 sarà suddiviso in diverse fasi:
- Nifler — trasformazione del codice sorgente Nim in NIF tenendo conto dei file di configurazione.
- Nimony — analisi semantica, inclusa la verifica dei tipi e la risoluzione dei macro.
- Hexer — ottimizzazione del codice, inclusa l'inlining degli iteratori e il supporto alla gestione della memoria (ARC/ORC).
- NIFC — generazione di codice per C/C++ tenendo conto delle peculiarità della piattaforma target.
Le principali migliorie includono:
- Una build incrementale che accelera la compilazione in caso di modifiche parziali del codice.
- Eliminazione della necessità di dichiarare in anticipo procedure e tipi.
- Supporto per dipendenze cicliche tra moduli.
- Verifica dei tipi per i generici in fase di compilazione.
- Correzione degli errori nelle fasi di compilazione, come chiamate errate dei distruttori.
Nella specifica viene anche sottolineato che NIF conserva informazioni sulle posizioni degli elementi del codice (numeri di riga e colonna), facilitando il debug e l'integrazione con l'IDE.
Il linguaggio Nim è progettato per risolvere problemi di programmazione di sistema, utilizza la tipizzazione statica ed è stato ispirato da linguaggi come Python, Ada e Modula. Il codice sorgente scritto in Nim viene compilato in rappresentazioni in C, C++, Objective-C o JavaScript. Successivamente, il codice C/C++ risultante viene compilato in un eseguibile utilizzando qualsiasi compilatore disponibile (clang, gcc, icc, Visual C++), consentendo di raggiungere prestazioni vicine a quelle del C, tralasciando i costi dell'esecuzione del garbage collector. Analogamente a Python, in Nim si utilizzano indentazioni come delimitatori di blocchi. Sono supportati strumenti di metaprogrammazione e opportunità per creare linguaggi specifici per ambito (DSL). Il codice del progetto è fornito con licenza MIT.
Fonte: opennet.ru
