LLVM
| LLVM | |
|---|---|
| Kehittäjä | LLVM-projekti |
| Kehityshistoria | |
| Ensijulkaisu | 2003 |
| Vakaa versio | 22.1.0 ()[1] |
| Tiedot | |
| Ohjelmistotyyppi | Ohjelmointikielen kääntäjä |
| Alusta | alustariippumaton |
| Lisenssi | BSD-lisenssi |
| Aiheesta muualla | |
| Verkkosivusto | |
| Versiohallinta | |
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 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] Välikielen käyttämää muotoa kutsutaan bittikoodiksi, jossa on tageja ja sisäkkäisiä rakenteita.[4] 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.[5] LLVM on ”kattoprojekti”, jota käytetään keskeisistä komponenteista: välikielestä (LLVM IR) ja sen käsittelystä, debuggerista (LLDB[6]) ja LLVM:n omasta C++-kirjastosta (libc++[7]).
Historia
[muokkaa | muokkaa wikitekstiä]LLVM-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ä.[8] 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.[9] Vastaavasti esimerkiksi FreeBSD käyttää monilla alustoilla Clangia pääasiallisena kääntäjänään.
LLVM-pohjaiset kääntäjät
[muokkaa | muokkaa wikitekstiä]LLVM 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
[muokkaa | muokkaa wikitekstiä]Clang on LLVM-projektin oma C/C++/Objective-C -kääntäjä etupää (front-end).
Clang on tuettu Applen Xcode kehitysympäristössä.[10][11]
Clang sisältää staattisen analyysin tuen.[12]
DragonEgg
[muokkaa | muokkaa wikitekstiä]GCC: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
[muokkaa | muokkaa wikitekstiä]Emscripten 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
[muokkaa | muokkaa wikitekstiä]Flang on Fortran-kielen etupää (front-end), joka julkaistu versiossa 11.0.[13] Tuki on vielä kokeellinen.[13]
Rust
[muokkaa | muokkaa wikitekstiä]Rust on ohjelmointikieli, jonka referenssikääntäjän (rustc) kehittäminen alkoi alusta alkaen LLVM:n päällä.
Alustatuki
[muokkaa | muokkaa wikitekstiä]Tuettuja käyttöjärjestelmiä ovat:
- Linux
- Windows
- Mac OS
- iOS
Tuettuja suoritinarkkitehtuureja ovat:[14]
Lähteet
[muokkaa | muokkaa wikitekstiä]- ↑ LLVM 22.1.0, (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.
- ↑ LLVM Bitcode File Format llvm.org. (englanniksi)
- ↑ LLVM Overview llvm.org. Viitattu 5.3.2026. (englanniksi)
- ↑ 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 | muokkaa wikitekstiä]- LLVM projektin viralliset sivut (englanniksi)
- Linux Foundationin projekti (englanniksi)