Hat hónap fejlesztés után bemutatták az LLVM 9.0 projekt új verziójának elindítását, amely egy GCC-kompatibilis eszközkészlet (fordítók, optimalizálók és kódgenerátorok), amely a programokat RISC-szerű virtuális utasítások köztes bitkódjává állítja össze (alacsony szintű virtuális gép többszintű optimalizálási rendszerrel).
Úgy tervezték, hogy optimalizálja a fordítási időt, a kötés ideje, a végrehajtás ideje a felhasználó által megadandó programozási nyelvben. Eredetileg a C és a C ++ fordításához készült, Az LLVM nyelvi agnosztikai terve és a projekt sikere sokféle nyelvet születtek, beleértve az Objective-C, Fortran, Ada, Haskell, Java bytecode, Python, Ruby, ActionScript, GLSL, Clang, Rust, Gambas és másokat.
A létrehozott álkódot a JIT fordító segítségével konvertálhatjuk gépi utasításokká közvetlenül a program futtatásakor.
Az LLVM 9.0 fő újdonságai
Az LLVM 9.0 új szolgáltatásai között támogatást talál a kísérleti fejlesztői címke eltávolításához a RISC-V platformról, C ++ támogatás az OpenCL számára.
Egy másik újdonság, hogy kiemelkedik az a képesség, hogy a programot dinamikusan terhelt részekre bontjuk az LLD-ben és a Linux kernel kódjában használt »asm goto» konstrukció megvalósítása.
Ezen felül azt is kiemelik, hogy a Libc ++ a WASI támogatásával érkezett (WebAssembly System Interface) és az LLD bevezette a WebAssembly dinamikus összerendelésének kezdeti támogatását. Hozzáadta a GCC specifikus kifejezés »asm goto» megvalósítását, amely lehetővé teszi, hogy az összeállított soros blokkról C-kódú címkére váltson.
Erre a szolgáltatásra a Linux kernelének »CONFIG_JUMP_LABEL = y« módban történő létrehozásához van szükség a Clang használatával az x86_64 rendszereken. Figyelembe véve a korábbi verziókban hozzáadott változtatásokat, a Linux kern mostantól Clang-ban is elkészíthető az x86_64 architektúrához (korábban csak arm, aarch64, ppc32, ppc64le és mips architektúrák esetében támogatott.
Hozzáadták a KTF-utasítások támogatását (Branch Target Indicator) és PAC (Pointer Authentication Code) az AArch64 architektúrához. Jelentősen továbbfejlesztett támogatás a MIPS, RISC-V és PowerPC platformok számára.
Ezen túlmenően, Az Android és a ChromeOS projektek már átálltak a Clang használatára a kernel felépítéséhez és a Google a Clang-ot teszteli elsődleges build platformmagként futó Linux rendszereihez.
A jövőben, a rendszermag fordítási folyamata során lehetőség lesz más komponensek használatára is LLVM, beleértve az LLD-t, az llvm-objcopy, az llvm-ar, az llvm-nm és az llvm-objdump.
Kísérleti partíciófüggvény került hozzá az LLD linkerhez, amely lehetővé teszi a program több részre osztását, amelyek mindegyike külön ELF fájlba kerül. Ez a funkció lehetővé teszi a program fő részének futtatását, amely szükség szerint betölti a folyamat többi összetevőjét (például kiválaszthatja a beépített PDF-megjelenítőt külön fájlként, amelyet csak akkor tölthet le, ha a felhasználó megnyitja a PDF fájlt).
Másrészt a háttérbeli fejlesztések is kiemelkednek X86, AArch64, ARM, SystemZ, MIPS, AMDGPU és PowerPC architektúrákhoz.
Például a SVE2 és az MTE (Memory Tagging Extensions) utasítások támogatása hozzáadódott az AArch64 architektúrához, az Armv8.1-M architektúra és az MVE architektúra támogatása az ARM háttérrendszerhez.
Az AMDGPU esetében hozzáadták a GFX10 architektúra támogatását (Navi), az alapértelmezés engedélyezett egy funkció meghívására és az aktivált kombinált DPP (Data Primitives-Parallel) továbbítására.
Az LLDB hibakereső bevezette a nyomok színes kiemelését visszafelé; a DWARF4 debug_types és a DWARF5 debug_info blokkok támogatása;
Az llvm-objcopy és az llvm-strip segédprogramok támogatást nyújtottak a COFF formátumú futtatható fájlokhoz és objektumokhoz.
A RISC-V architektúra háttérállása stabilizálódott, amely már nincs pozicionálva kísérleti jelleggel, és alapértelmezés szerint fel van építve. Teljes támogatás a kódkészítéshez az RV32I és RV64I utasításkészlet-változatokhoz MAFDC kiterjesztésekkel.
forrás: http://releases.llvm.org/