LLVM
LLVM (alkuaan engl. Low Level Virtual Machine) on ohjelmointikielen kääntäjän kehittämiseen tarkoitettu infrastruktuuri. LLVM-järjestelmän avulla ohjelmakoodille voidaan suorittaa erilaisia optimointeja – käännöksen, linkityksen, ajon tai ohjelman joutenolon aikana. LLVM julkaistiin ennen versiota 8.0 BSD-lisenssin muunnoksella (University of Illinois/NCSA Open Source License). Uudemmat versiot käyttävät muokattua Apache 2.0 -lisenssiä.[2]
LLVM | |
---|---|
Kehittäjä | LLVM-projekti |
Kehityshistoria | |
Vakaa versio | 19.1.1 ()[1] |
Tiedot | |
Ohjelmistotyyppi | Ohjelmointikielen kääntäjä |
Alusta | alustariippumaton |
Lisenssi | BSD-lisenssi |
Aiheesta muualla | |
Verkkosivusto | |
Versiohallinta |
LLVM toteuttaa kääntäjien toiminnan keski- ja loppuosan, eli toimenpiteet jotka ovat lähes samoja kaikkien konekieleksi käännettävien ohjelmien osalta. LLVM:n päälle voidaan rakentaa käännösprosessin ”etupää”, eli ohjelmointikielen tulkinta. Kääntäjäohjelma kutsuu LLVM-kirjastoa, joka tuottaa IR-välikielen (engl. Intermediate Representation).[3] LLVM-infrastruktuuri optimoi välikielen. Loppuvaiheessa välikieli muunnetaan kohdejärjestelmän konekieleksi.
Lyhenne LLVM tarkoitti alun pitäen ”Low Level Virtual Machine”, mutta projektin kasvaessa nimestä luovuttiin ja lyhenne ei nykyisin tarkoita mitään. LLVM on ”kattoprojekti”, jota käytetään keskeisistä komponenteista: välikielestä (LLVM IF) ja sen käsittelystä, debuggerista (LLDB[4]) ja LLVM:n omasta C++-kirjastosta (libc++[5]).
Historia
muokkaaLLVM-projekti alkoi vuonna 2003 Illinois'n yliopistossa (Urbana–Champaign).
Nykyisin suurin LLVM:n kehittäjä on Apple; LLVM-järjestelmä onkin keskeinen komponentti uusimpien Mac OS X- ja iOS-järjestelmien kehitystyökaluissa. Myös Sony käyttää LLVM:ää PlayStation 4 -kehitysympäristössä.[6] Microsoft tarjoaa Clang-kääntäjän optiona Visual Studiossa.
Monet Linux-jakelut tukevat LLVM:ää, useimmiten rinnakkaisena vaihtoehtona GCC:lle. Useimmat Linux-jakelut eivät ole siirtyneet GCC:stä Clang-kääntäjään, koska Linux-ytimen kääntäminen vaatii käytännössä GCC:n. Google tukee Clang-kääntäjän kehittämistä Linux-ytimen käännökseen vaihtoehtona GCC:lle.[7] Vastaavasti esimerkiksi FreeBSD käyttää monilla alustoilla Clangia pääasiallisena kääntäjänään.
LLVM-pohjaiset kääntäjät
muokkaaLLVM oli aluksi suunniteltu GCC:n loppuvaiheiden korvaajaksi, joten monia GCC-pohjaisia kääntäjien etupäitä on muunnettu LLVM-pohjaisiksi. Monia kääntäjiä on kehitetty tukemaan suoraan LLVM-infrastruktuuria.
Clang
muokkaaClang on LLVM-projektin oma C/C++/Objective-C -kääntäjä etupää (front-end).
Clang on tuettu Applen Xcode kehitysympäristössä.[8][9]
Clang sisältää staattisen analyysin tuen.[10]
DragonEgg
muokkaaGCC:lle on kehitetty laajennos nimeltä DragonEgg, jonka avulla GCC voi tuottaa LLVM-välikieltä. GCC:tä käytetään vain käännösprosessin etupäänä.
Emscripten
muokkaaEmscripten tuottaa LLVM:n avulla JavaScript-koodia WebAssembly-alustalle (aikaisemmin WebAssemblyn edeltäjälle asm.js). WebAssembly on uusimpien selaimien tukema JavaScript-laajennos, jonka avulla JavaScript-ohjelmat voivat toimia lähes yhtä tehokkaasti kuin natiivit ohjelmistot, ja voivat käyttää HTML5:n tarjoamia selainominaisuuksia, kuten 2D/3D-grafiikkaa ja ääntä. Emscriptenin avulla C- tai C++ -ohjelmistoja voidaan kääntää suoraan selaimissa toimiviksi. Monia C/C++ -kirjastoja on sovitettu toimivaksi Emscriptenin kanssa.
Laajamittaisimmat Emscripteniin pohjautuvat projekti ovat Internet Archiven tukemat JSMESS- ja DOSBox -projektit, joiden avulla erilaisia vanhoja ohjelmistoja ja pelejä voidaan emuloida suoraan selaimissa.
Flang
muokkaaFlang on Fortran-kielen etupää (front-end), joka julkaistu versiossa 11.0.[11] Tuki on vielä kokeellinen.[11]
Rust
muokkaaRust on ohjelmointikieli, jonka referenssikääntäjän (rustc) kehittäminen alkoi alusta alkaen LLVM:n päällä.
Alustatuki
muokkaaTuettuja käyttöjärjestelmiä ovat:
- Linux
- Windows
- Mac OS
- iOS
Tuettuja suoritinarkkitehtuureja ovat:[12]
Lähteet
muokkaa- ↑ (en) Release LLVM 19.1.1 · llvm/llvm-project (viitattu ). Tieto on haettu Wikidatasta.
- ↑ Download LLVM releases releases.llvm.org. Viitattu 9.7.2024.
- ↑ LLVM Language Reference Manual llvm.org. Viitattu 16.2.2017.
- ↑ http://lldb.llvm.org
- ↑ https://libcxx.llvm.org
- ↑ Michael Larabel: Sony Continues Tuning AMD Jaguar Support Within The LLVM Clang Compiler phoronix.com. 21.8.2019. Viitattu 3.9.2019. (englanniksi)
- ↑ Building the kernel with clang LWN.net. Viitattu 30.9.2017.
- ↑ LLVM Compiler Overview developer.apple.com. Viitattu 9.2.2017.
- ↑ Apple's other open secret: the LLVM Compiler appleinsider.com. Viitattu 9.2.2017.
- ↑ Clang Static Analyzer clang-analyzer.llvm.org. Viitattu 3.9.2019. (englanniksi)
- ↑ a b Flang 11.0.0 Release Notes releases.llvm.org. Viitattu 13.10.2020. (englanniksi)
- ↑ LLVM Features llvm.org. Viitattu 8.3.2020. (englanniksi)
Aiheesta muualla
muokkaa- LLVM projektin viralliset sivut (englanniksi)
- Linux Foundationin projekti (englanniksi)