Nakon šest meseci razvoja predstavljeno predstavljanje nove verzije LLVM 9.0 projekta, koji je GCC kompatibilan alat (kompajleri, optimizatori i generatori koda), koji kompajlira programe u međubitni kôd virtualnih uputa nalik RISC-u (virtualna mašina na niskom nivou sa sistemom za optimizaciju na više nivoa).
Dizajniran je za optimizaciju vremena kompilacije, vrijeme vezivanja, vrijeme izvršavanja u bilo kojem programskom jeziku koji korisnik želi definirati. Izvorno implementirano za kompajliranje C i C ++, Jezički agnostički dizajn LLVM-a i uspjeh projekta iznjedrili su širok spektar jezika, uključujući Objective-C, Fortran, Ada, Haskell, Java bytecode, Python, Ruby, ActionScript, GLSL, Clang, Rust, Gambas i druge.
Generirani pseudo-kod može se pretvoriti pomoću JIT kompajlera u mašinske upute izravno u vrijeme izvođenja programa.
Glavne nove karakteristike LLVM 9.0
Među novim značajkama LLVM 9.0 pronaći podršku za uklanjanje oznake eksperimentalnog razvoja s RISC-V platforme, Podrška za C ++ za OpenCL.
Još jedna novost koja izdvaja 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.
Pored toga, također je istaknuto da je Libc ++ stigao s podrškom za WASI (WebAssembly System Interface) i LLD uveli su početnu podršku za dinamičko povezivanje WebAssembly. Dodana je implementacija izraza specifičnog za GCC »asm goto«, koji vam omogućava da se prebacite sa sklopljenog ugrađenog bloka na C oznaku.
Ova je značajka potrebna za izgradnju Linux kernela u načinu »CONFIG_JUMP_LABEL = y« koristeći Clang na x86_64 sistemima. 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.
Takođe, Android i ChromeOS projekti već su prešli na upotrebu Clang-a za izgradnju jezgre i Google testira Clang kao primarne jezgre platforme za izgradnju za svoje Linux sisteme.
U budućnosti, tijekom procesa kompajliranja 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ćava 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 SVE2 i MTE (Memory Tagging Extensions) upute za arhitekturu AArch64, podrška za Armv8.1-M i MVE arhitekturu dodane su u ARM pozadinu.
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).
Program za uklanjanje pogrešaka LLDB uveo je isticanje tragova u boji unazad; 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 izgrađen je prema zadanim postavkama. Puna podrška za generiranje koda za varijante skupa uputa RV32I i RV64I s MAFDC ekstenzijama.
Izvor: http://releases.llvm.org/