rilascio , un'implementazione open-source del linguaggio di programmazione funzionale , che supporta la possibilità di integrare codice in applicazioni scritte in altri linguaggi di programmazione. Guile può essere usato come linguaggio per sviluppare estensioni per applicazioni, definire configurazioni o sviluppare componenti per collegare vari primitivi forniti dall'applicazione. Guile è il linguaggio ufficiale per lo sviluppo di estensioni per il sistema operativo GNU.
Alla base di Guile c'è una macchina virtuale efficiente che esegue un insieme portatile di istruzioni, generate da un compilatore ottimizzante specifico. La macchina virtuale di Guile si integra facilmente con il codice delle applicazioni scritte in C e C++. Oltre al linguaggio Scheme, per il quale è implementato il supporto delle specifiche , e , all'interno del progetto Guile sono stati sviluppati compilatori anche per altri linguaggi, come ECMAScript, Emacs Lisp e Lua (in fase di sviluppo). Il pacchetto include una libreria di moduli che implementano funzioni di servizio standard, come la gestione del protocollo HTTP, il parsing XML e l'uso dei metodi di programmazione orientata agli oggetti.
Una delle principali novità di GNU Guile 3.0 è l'introduzione di un compilatore JIT, oltre agli precedenti interprete e compilatore in bytecode, eseguiti in una speciale macchina virtuale legata all'applicazione sotto forma di libreria. Il JIT consente di generare codice macchina al volo e accelera significativamente l'esecuzione delle applicazioni Guile (i test mostrano un'accelerazione fino a 4 volte). Il compilatore JIT supporta architetture x86-64, i686, ARMv7 e AArch64.
Alcuni degli altri miglioramenti:
- Supporto per la nuova specifica del linguaggio Scheme e i moduli di libreria definiti in essa;
- Nella macchina virtuale Guile è implementato il supporto per un bytecode di livello inferiore, che consente di applicare ottimizzazioni avanzate;
- Supporto per la combinazione di definizioni interne di define e espressioni (ad esempio, «(define _ (begin (foo) #f))»);
- È stata proposta un'implementazione unificata del tipo di dato strutturato («records»);
- Ripensati i primitivi di gestione delle eccezioni (throw e catch);
- Definiti i binding per la sintassi avanzata «else», «=>», «…» e «_»;
- Nelle procedure http-request, http-get e altre correlate al client web è stata aggiunta la possibilità di caricare contenuti tramite un canale di comunicazione crittografato utilizzando TLS con verifica corretta dei certificati.
Fonte: opennet.ru
