Nakon šest mjeseci razvoja predstavljeno predstavljanje nove verzije projekta LLVM 9.0, koji je GCC kompatibilan alat (kompajleri, optimizatori i generatori koda), koji kompajlira programe u srednji bitni kod virtualnih uputa nalik RISC-u (virtualni stroj na niskoj razini sa sustavom za optimizaciju na više razina).
Dizajniran je za optimizaciju vremena kompilacije, vrijeme vezanja, vrijeme izvršavanja u bilo kojem programskom jeziku koji korisnik želi definirati. Izvorno implementiran za kompajliranje C i C ++, Jezični agnostički dizajn LLVM-a i uspjeh projekta iznjedrili su široku paletu jezika, uključujući Objective-C, Fortran, Ada, Haskell, Java bytecode, Python, Ruby, ActionScript, GLSL, Clang, Rust, Gambas i druge.
Generirani pseudokod može se pretvoriti pomoću JIT kompajlera u strojne upute izravno u vrijeme izvršavanja programa.
Glavne nove značajke LLVM-a 9.0
Među novim značajkama LLVM 9.0 pronašao podršku za uklanjanje eksperimentalne razvojne oznake s RISC-V platforme, Podrška za C ++ za OpenCL.
Još jedna novost koja ističe se sposobnost podjele programa na dinamički učitane dijelove u LLD-u i implementacija konstrukcije »asm goto» koja se koristi u kodu Linux jezgre.
Uz to, također je istaknuto da je Libc ++ došao s podrškom za WASI (WebAssembly System Interface) i LLD uveo je početnu podršku za dinamičko povezivanje WebAssembly. Dodana je implementacija GCC specifičnog izraza »asm goto«, koji vam omogućuje prelazak s okupljenog ugrađenog bloka na oznaku u C kodu.
Ova je značajka neophodna za izgradnju Linux jezgre u načinu »CONFIG_JUMP_LABEL = y« koristeći Clang na x86_64 sustavima. Uzimajući u obzir promjene dodane u prethodnim verzijama, Linux kernel se sada može graditi u Clangu za arhitekturu x86_64 (ranije je bio podržan samo za arm, aarch64, ppc32, ppc64le i mips arhitekture.
Dodana je podrška za BTI upute (Branch Target Indicator) i PAC (Pointer Authentication Code) za AArch64 arhitekturu. Značajno poboljšana podrška za MIPS, RISC-V i PowerPC platforme.
Osim toga, Android i ChromeOS projekti već su prešli na korištenje Clang-a za izgradnju jezgre a Google testira Clang kao primarne jezgre platforme za izgradnju za svoje Linux sustave.
U budućnosti, tijekom procesa kompilacije jezgre bit će moguće koristiti druge komponente LLVM, uključujući LLD, llvm-objcopy, llvm-ar, llvm-nm i llvm-objdump.
Eksperimentalna funkcija particije dodana je u LLD povezivač, što omogućuje da se program podijeli na više dijelova, od kojih je svaki smješten u zasebnu ELF datoteku. Ova značajka omogućuje vam pokretanje glavnog dijela programa koji će po potrebi učitati preostale komponente u procesu (na primjer, ugrađeni preglednik PDF možete odabrati kao zasebnu datoteku koja će se preuzeti samo kada korisnik otvara datoteku PDF).
S druge strane, ističu se i brojna poboljšanja u pozadini. za arhitekture X86, AArch64, ARM, SystemZ, MIPS, AMDGPU i PowerPC.
Na primjer, dodana je podrška za upute SVE2 i MTE (Memory Tagging Extensions) za arhitekturu AArch64, podrška za arhitekturu Armv8.1-M i MVE dodana je u pozadinu ARM-a.
U slučaju AMDGPU, dodana je podrška za GFX10 arhitekturu (Navi), zadano je omogućeno pozivanje funkcije i prosljeđivanje aktiviranog kombiniranog DPP-a (Data Primitive-Parallel).
Ispravljač LLDB uveo je naglašavanje tragova u boji unatrag; dodana podrška za DWARF4 debug_types i DWARF5 debug_info blokove;
Uslužni programi llvm-objcopy i llvm-strip dodali su podršku za izvršne datoteke i objekte u formatu COFF.
Backend za RISC-V arhitekturu je stabiliziran, koji više nije pozicioniran kao eksperimentalni i prema zadanim postavkama je izgrađen. Puna podrška za generiranje koda za inačice skupa uputa RV32I i RV64I s MAFDC proširenjima.
izvor: http://releases.llvm.org/