Siirry sisältöön

LLVM

Wikipediasta
LLVM
Kehittäjä LLVM-projekti
Kehityshistoria
Ensijulkaisu 2003
Vakaa versio 23.1.2 ()[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]).

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 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]

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 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 on Fortran-kielen etupää (front-end), joka julkaistu versiossa 11.0.[13] Tuki on vielä kokeellinen.[13]

Rust on ohjelmointikieli, jonka referenssikääntäjän (rustc) kehittäminen alkoi alusta alkaen LLVM:n päällä.

Tuettuja käyttöjärjestelmiä ovat:

  • Linux
  • Windows
  • Mac OS
  • iOS

Tuettuja suoritinarkkitehtuureja ovat:[14]

  1. ↑ LLVM 23.1.2, (viitattu ). Tieto on haettu Wikidatasta.
  2. ↑ Download LLVM releases releases.llvm.org. Viitattu 9.7.2024.
  3. ↑ LLVM Language Reference Manual llvm.org. Viitattu 16.2.2017.
  4. ↑ LLVM Bitcode File Format llvm.org. (englanniksi)
  5. ↑ LLVM Overview llvm.org. Viitattu 5.3.2026. (englanniksi)
  6. ↑ http://lldb.llvm.org
  7. ↑ https://libcxx.llvm.org
  8. ↑ Michael Larabel: Sony Continues Tuning AMD Jaguar Support Within The LLVM Clang Compiler phoronix.com. 21.8.2019. Viitattu 3.9.2019. (englanniksi)
  9. ↑ Building the kernel with clang LWN.net. Viitattu 30.9.2017.
  10. ↑ LLVM Compiler Overview developer.apple.com. Viitattu 9.2.2017.
  11. ↑ Apple's other open secret: the LLVM Compiler appleinsider.com. Viitattu 9.2.2017.
  12. ↑ Clang Static Analyzer clang-analyzer.llvm.org. Viitattu 3.9.2019. (englanniksi)
  13. 1 2 Flang 11.0.0 Release Notes releases.llvm.org. Viitattu 13.10.2020. (englanniksi)
  14. ↑ LLVM Features llvm.org. Viitattu 8.3.2020. (englanniksi)

Aiheesta muualla

[muokkaa | muokkaa wikitekstiä]