La startup Exaloop ha pubblicato il codice del progetto Codon, che sviluppa un compilatore per il linguaggio Python capace di generare codice macchina puro, non legato al runtime di Python. Il compilatore è sviluppato dagli autori di Seq, un linguaggio simile a Python, e si propone come un'evoluzione di questo. Il progetto include anche un proprio runtime per file eseguibili e una libreria di funzioni che sostituisce le chiamate di libreria in Python. I sorgenti del compilatore, del runtime e della libreria standard sono scritti in C++ (con contributi da LLVM) e Python, e sono distribuiti sotto licenza BSL (Business Source License).
La licenza BSL è stata proposta dai co-fondatori di MySQL come alternativa al modello Open Core. La sostanza della BSL è che il codice delle funzionalità estese è inizialmente disponibile per le modifiche, ma per un certo periodo può essere utilizzato gratuitamente solo a determinate condizioni, e per eludere tali condizioni è necessaria l'acquisizione di una licenza commerciale. Le condizioni di licenza aggiuntive del progetto Codon prevedono che il codice venga trasferito alla licenza Apache 2.0 dopo 3 anni (1 novembre 2025). Fino ad allora, la licenza consente la copia, distribuzione e modifica, a condizione di non utilizzare per scopi commerciali.
Le prestazioni dei file eseguibili generati sono presentate come vicine a quelle dei programmi scritti in C. Rispetto all'uso di CPython, il guadagno di prestazioni quando si compila con Codon è stimato tra 10 e 100 volte in esecuzioni a thread singolo. Inoltre, a differenza di Python, Codon implementa anche la possibilità di multithreading, il che consente di ottenere un ulteriore aumento delle prestazioni. Codon permette anche la compilazione a livello di singole funzioni per utilizzare la rappresentazione compilata in progetti Python esistenti.
Codon è costruito con un'architettura modulare che consente di espandere le funzionalità tramite plugin, con i quali è possibile aggiungere nuove librerie, implementare ottimizzazioni nel compilatore e persino fornire supporto per ulteriori sintassi. Ad esempio, ci sono diversi plugin in fase di sviluppo parallelo per utilizzo in bioinformatica e matematica finanziaria. Per la gestione della memoria viene utilizzato il garbage collector Boehm.
Il compilatore supporta gran parte della sintassi di Python, ma la compilazione in codice macchina impone alcune limitazioni che ostacolano l'uso di Codon come sostituto trasparente di CPython. Ad esempio, in Codon i numeri interi utilizzano un tipo di int a 64 bit, mentre in CPython le dimensioni degli interi non sono limitate. Per garantire la compatibilità con Codon, potrebbero essere necessarie modifiche al codice per grandi basi di codice. In generale, le incompatibilità sono causate dall'assenza di alcune implementazioni di moduli Python in Codon e dall'impossibilità di utilizzare alcune capacità dinamiche del linguaggio. Per ogni incompatibilità, il compilatore fornisce un messaggio diagnostico dettagliato con informazioni su come ispezionare il problema.

Fonte: opennet.ru
