wydanie , wolnego wdrożenia funkcjonalnego języka programowania , wspierającego możliwość osadzania kodu w aplikacjach napisanych w innych językach programowania. Guile może być używany jako język do tworzenia rozszerzeń aplikacji, definiowania konfiguracji lub opracowywania komponentów do komunikacji różnych prymitywów dostarczanych przez aplikację. Guile jest oficjalnym językiem do rozwijania rozszerzeń dla systemu operacyjnego GNU.
Podstawą Guile jest efektywna maszyna wirtualna, która wykonuje przenośny zestaw instrukcji generowany przez specjalny kompilator optymalizujący. Maszyna wirtualna Guile łatwo integruje się z kodem aplikacji w językach C i C++. Oprócz języka Scheme, dla którego wdrożono wsparcie specyfikacji , i , w ramach projektu Guile opracowano kompilatory również dla innych języków, takich jak ECMAScript, Emacs Lisp i Lua (w trakcie opracowywania). W skład pakietu wchodzi biblioteka modułów, w której zrealizowane są typowe funkcje serwisowe, takie jak obsługa protokołu HTTP, parsowanie XML oraz korzystanie z metod programowania obiektowego.
Kluczową nowością w GNU Guile 3.0 jest pojawienie się kompilatora JIT, obok wcześniej oferowanego interpretera i kompilatora do kodu bajtowego, wykonywanego w specjalnej maszynie wirtualnej, powiązanej z aplikacją w formie biblioteki. JIT umożliwia generowanie kodu maszynowego w czasie rzeczywistym i znacznie przyspiesza wykonanie aplikacji Guile (testy pokazują przyspieszenie do 4 razy). Kompilator JIT wspiera działanie na architekturach x86-64, i686, ARMv7 i AArch64.
Niektóre z innych ulepszeń:
- Wsparcie nowej specyfikacji języka Scheme i określonych w niej modułów bibliotecznych;
- W maszynie wirtualnej Guile wdrożono obsługę niższego poziomu kodu bajtowego, co pozwala na zastosowanie rozszerzonych optymalizacji;
- Wsparcie dla łączenia wewnętrznych definicji define i wyrażeń (przykładowo, „(define _ (begin (foo) #f))”);
- Proponowana jest zunifikowana realizacja strukturalnego rodzaju danych („records”);
- Zreformowano prymitywy obsługi wyjątków (throw i catch);
- Określono wiązania dla rozszerzonej składni „else”, „=>”, „…” i „_”;
- W procedurach http-request, http-get i innych związanych z klientem webowym dodano możliwość przesyłania treści przez zaszyfrowany kanał komunikacyjny z wykorzystaniem TLS z poprawną weryfikacją certyfikatów.
Źródło: opennet.ru
