il rilascio , realizzazione libera di un linguaggio di programmazione funzionale , che supporta la possibilità di incorporare codice in applicazioni scritte in altri linguaggi di programmazione. Guile può essere utilizzato come linguaggio per sviluppare estensioni per applicazioni, definire configurazioni o sviluppare componenti per il collegamento di 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 set portabile di istruzioni, generato da un compilatore ottimizzante speciale. La macchina virtuale Guile si integra facilmente con il codice delle applicazioni scritte in C e C++. Oltre al linguaggio Scheme, per il quale è stato implementato il supporto per le specifiche , e , nell'ambito 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, l'analisi XML e l'uso dei metodi di programmazione orientata agli oggetti.
Una delle principali novità in GNU Guile 3.0 è stata l'introduzione di un compilatore JIT, oltre all'interprete e al compilatore in bytecode precedentemente offerti, eseguiti in una speciale macchina virtuale, collegata all'applicazione sotto forma di libreria. Il JIT consente di generare codice macchina al volo e accelera notevolmente l'esecuzione delle applicazioni Guile (i test mostrano un'accelerazione fino a 4 volte). Il compilatore JIT supporta l'esecuzione su architetture x86-64, i686, ARMv7 e AArch64.
Altri miglioramenti includono:
- Supporto per la nuova specifica del linguaggio Scheme e per i moduli di libreria definiti in essa;
- Nella macchina virtuale Guile è stato implementato il supporto per un bytecode a livello inferiore, che consente di applicare ottimizzazioni avanzate;
- Supporto per la combinazione delle definizioni definire interne e delle espressioni (ad esempio, «(define _ (begin (foo) #f))»);
- È stata proposta un'implementazione unificata per il tipo di dati strutturato («records»);
- Sono stati rielaborati i primitivi di gestione delle eccezioni (throw e catch);
- Sono stati definiti binding per la sintassi estesa «else», «=>», «…» e «_»;
- Nelle procedure http-request, http-get e altre collegate al web client è stata aggiunta la possibilità di caricare contenuti attraverso un canale di comunicazione crittografato utilizzando TLS con una corretta verifica dei certificati.
Fonte: opennet.ru
