LLVM 13.0 derleyici paketinin yayınlanması

Altı aylık geliştirme sürecinin ardından, programları RISC benzeri sanal talimatların ara bit kodu (düşük seviyeli bir sanal makine) halinde derleyen GCC uyumlu bir araç seti (derleyiciler, optimize ediciler ve kod oluşturucular) olan LLVM 13.0 projesinin piyasaya sürülmesi sunuldu. çok seviyeli optimizasyon sistemi). Oluşturulan sözde kod, bir JIT derleyicisi kullanılarak doğrudan programın yürütülmesi sırasında makine talimatlarına dönüştürülebilir.

Clang 13.0'daki iyileştirmeler:

  • Garantili kuyruk çağrıları için destek uygulandı (bir işlevin en sonunda bir alt yordamın çağrılması, alt yordamın kendisini çağırması durumunda bir kuyruk özyinelemesinin oluşturulması). Garantili kuyruk çağrıları desteği, C++'daki "[[clang::musttail]]" özelliği ve C'deki "return" ifadesinde kullanılan "__attribute__((musttail))" özelliği tarafından sağlanır. Bu özellik, yığın tüketiminden tasarruf etmek için kodu düz bir yinelemeye dağıtarak optimizasyonlar uygulamanıza olanak tanır.
  • "using" bildirimleri ve clang uzantıları, "[[]]" biçimini kullanarak C++ 11 tarzı nitelikleri tanımlamak için destek sağlar.
  • Kullanıcı kodunda ayrılmış tanımlayıcıları belirttiğinizde bir uyarı görüntülemek için "-Wreserved-identifier" bayrağı eklendi.
  • Bir parametrenin veya değişkenin ayarlanması ancak kullanılmaması durumunda bir uyarı görüntülemek için "-Wunused-but-set-parameter" ve "-Wunused-but-set-variable" bayrakları eklendi.
  • Çıkarma işlemlerinde boş işaretçi kullanılması nedeniyle kodun tanımsız davranışa neden olması durumunda uyarı vermek üzere "-Wnull-pointer-subtraction" bayrağı eklendi.
  • Her kod dosyası için, işlenmekte olan dosyada tanımlanan her işlev için yığın çerçevelerinin boyutu hakkında bilgi içeren ek bir ".su" dosyası oluşturmak amacıyla "-fstack-usage" bayrağı eklendi.
  • Statik analizöre yeni bir çıktı türü eklendi - “sarif-html”, bu da raporların aynı anda HTML ve Sarif formatlarında oluşturulmasına olanak tanıyor. Yeni allocClassWithName kontrolü eklendi. “-analyzer-display-progress” seçeneğini belirlerken her fonksiyonun analiz süresi görüntülenir. Akıllı işaretçi analizörü (alpha.cplusplus.SmartPtr) neredeyse hazır.
  • OpenCL desteğiyle ilgili yetenekler genişletildi. Yeni cl_khr_integer_dot_product, cl_khr_extished_bit_ops, __cl_clang_bitfields ve __cl_clang_non_portable_kernel_param_types uzantıları için destek eklendi. OpenCL 3.0 spesifikasyonunun uygulanmasına devam edilmiştir. C için, başka bir sürüm açıkça seçilmediği sürece varsayılan olarak OpenCL 1.2 spesifikasyonu kullanılır. C++ için “.clcpp” uzantılı dosyalar için destek eklendi.
  • OpenMP 5.1 spesifikasyonunda tanımlanan döngü dönüştürme direktifleri (“#pragma omp unrol” ve “#pragma omp döşemesi”) desteği uygulanmıştır.
  • Clang-format yardımcı programına seçenekler eklendi: Yorumlardan önceki boşluk sayısını tanımlamak için SpacesInLineCommentPrefix, girişlerin, lambda ifadelerinin ve ön işlemci direktiflerinin hizalamasını kontrol etmek için IndentAccessModifiers, LambdaBodyIndentation ve PPINdentWidth. Başlık dosyalarının numaralandırılmasını (SortIncludes) sıralama olanakları genişletildi. JSON dosyalarını biçimlendirmek için destek eklendi.
  • Yeni çeklerin büyük bir kısmı çıngırak-düzenli olarak eklendi.

LLVM 13.0'daki önemli yenilikler:

  • İstisna işleme aşamasında Dönüş Yönelimli Programlama (ROP) teknikleri kullanılarak oluşturulan açıklardan yararlanma işlemlerinin yürütülmesine karşı koruma sağlamak amacıyla CET (Windows Kontrol Akışı Uygulama Teknolojisi) teknolojisini kullanmak için "-ehcontguard" seçeneği eklendi.
  • Debuginfo-test projesi, projeler arası testler olarak yeniden adlandırıldı ve hata ayıklama bilgileriyle sınırlı olmamak üzere, farklı projelerdeki bileşenleri test etmek için tasarlandı.
  • Montaj sistemi, biri yardımcı programlarla, diğeri ise geliştiriciler için kütüphanelerle olmak üzere çeşitli dağıtımlar oluşturmak için destek sağlar.
  • AArch64 mimarisinin arka ucunda, montajcıda Armv9-A RME (Bölge Yönetim Uzantısı) ve SME (Ölçeklenebilir Matris Uzantısı) uzantılarına yönelik destek uygulanır.
  • Hexagon mimarisinin arka ucuna ISA V68/HVX desteği eklendi.
  • X86 arka ucu, AMD Zen 3 işlemcileri için geliştirilmiş desteğe sahiptir.
  • AMDGPU arka ucuna GFX1013 RDNA2 APU desteği eklendi.
  • Libc++, “kavramlar” kütüphanesinin tamamlanması da dahil olmak üzere C++20 ve C++2b standartlarının yeni özelliklerini uygulamaya devam ediyor. MinGW tabanlı Windows platformu için std::filesystem desteği eklendi. Başlık dosyaları ayrıldı , Ve . Tam olarak uygulanmayan işlevlere sahip başlık dosyalarını devre dışı bırakmak için LIBCXX_ENABLE_INCOMPLETE_FEATURES derleme seçeneği eklendi.
  • Big-endian Aarch64 işlemci desteğinin uygulandığı LLD bağlayıcının yetenekleri genişletildi ve Mach-O arka ucu, normal programların bağlanmasına izin verecek bir duruma getirildi. Glibc'yi LLD kullanarak bağlamak için gereken iyileştirmeler dahil edildi.
  • llvm-mca (Makine Kodu Analizcisi) yardımcı programı, ARM Cortex-A55 gibi talimatları sırayla (sıralı süperskalar boru hattı) yürüten işlemciler için destek ekledi.
  • AArch64 platformu için LLDB hata ayıklayıcı, İşaretçi Kimlik Doğrulaması, MTE (MemTag, Bellek Etiketleme Uzantısı) ve SVE kayıtları için tam destek sağlar. Etiketleri her bellek ayırma işlemine bağlamanıza ve belleğe erişirken işaretçinin doğru etiketle ilişkilendirilmesi gereken kontrolünü düzenlemenize olanak tanıyan komutlar eklendi.
  • LLDB hata ayıklayıcısı ve Fortran dilinin ön ucu - Flang, proje tarafından oluşturulan ikili derlemelere eklendi.

Kaynak: opennet.ru

Yorum ekle