LLVM

LLVM on kompilaatorite ja tööriistaahelate tehnoloogiate kogumik, millega on võimalik ehitada kompilaatori eesosa mistahes programmeerimiskeelele ja tagaosa mistahes käsustikuarhitektuurile. LLVM on ehitatud keelest sõltumatule vahekeelele (ingl intermediate representation või IR), mis on platvormist sõltumatu kõrgetasemeline assemblerkeel, mida saab optimeerida erinevate transformatsioonidega üle mitme läbikäimise. Nimi "LLVM" tähendas algselt madalatasemelist virtuaalmasinat (ingl Low Level Virtual Machine), kuid projekti arenedes ei olnud nimi enam asjakohane ning lühend ei ole enam ametlikult tähenduslik. LLVM on kirjutatud C++ keeles ja on disainitud kompilatsiooni-, linkimis-, käitus- ja ooteajaliseks optimeerimiseks. Algselt loodud C ja C++ koodi kompileerimise jaoks, on LLVM-i keelest sõltumatu disain lubanud tekkida eesosadel paljude teiste keelte jaoks (sealhulgas keeled, mis ei kasuta LLVM-i, aga võivad kompileerida programme LLVM-i IR koodi): ActionScript, Ada, C# .NETi jaoks, Common Lisp, PicoLisp, Crystal, CUDA, D, Delphi, Dylan, Forth, Fortran, FreeBASIC, Free Pascal, Halide, Haskell, Java baitkoodi, Julia, Kotlin, LabVIEW keel G, Lua, Objective-C, OpenCL, PostgreSQLi SQL ja PLpgSQL, Ruby, Rust, Scala, Swift, Xojo ja Zig. LLVM suudab pakkuda terve kompilaatorsüsteemi keskosa, võttes vahekeelekoodi (IR) kompilaatorist ja väljastades optimeeritud IR-i. Seda uut IR-i on võimalik konverteerida ja linkida masinast sõltuvasse assemblerkoodi mõne soovitud platvormi jaoks. LLVM suudab vastu võtta GCC kompilaatori vahekoodi, mis lubab LLVM-i kasutada läbi GCC paljude eesosade. GCC-ga on võimalik LLVM-i ehitada alatest GCC versioonist 7.5. LLVM suudab genereerida lükandkoodi (asukohast sõltumatut masinakoodi) kompilatsiooniajal või linkimisajal. LLVM suudab genereerida binaarset masinkoodi isegi käitusajal. LLVM toetab keelest sõltumatut käsustikku ja tüübisüsteemi. Väärtus iga muutuja taga (mida kutsutakse "tüübitud registriks") määratakse üks kord ja selle väärtust pole võimalik muuta. See teeb lihtsaks analüüsida sõltuvusi muutujate vahel. "lükand-". Eesti Keele Instituut. Vaadatud 8. detsember 2023. "LICENSE.TXT". llvm.org. Vaadatud 24. septembril 2019. "The LLVM Compiler Infrastructure Project". Vaadatud 11. märtsil 2016. "LLVM Language Reference Manual". Vaadatud 9. juunil 2019. Lattner, Chris (21. detsember 2011). "The name of LLVM". Vaadatud 2. märtsil 2016. 'LLVM' is officially no longer an acronym. The acronym it once expanded too was confusing, and inappropriate almost from day 1. :) As LLVM has grown to encompass other subprojects, it became even less useful and meaningless. "Announcing LLILC - A new LLVM-based Compiler for .NET". dotnetfoundation.org. Originaali arhiivikoopia seisuga 12. detsember 2021. Vaadatud 12. septembril 2020. "Mono LLVM". Vaadatud 10. märtsil 2013. Lattner, Chris (2011). "LLVM". Brown, Amy; Wilson, Greg (toim-d). The Architecture of Open Source Applications. "MovForth". GitHub. 28. november 2021. William Wong (23. mai 2017). "What's the Difference Between LabVIEW 2017 and LabVIEW NXG?". Electronic Design. "NI LabVIEW Compiler: Under the Hood". Larabel, Michael (11. aprill 2018). "Khronos Officially Announces Its LLVM/SPIR-V Translator". Phoronix.com. "32.1. What is JIT compilation?". PostgreSQL Documentation (inglise). 12. november 2020. Vaadatud 25. jaanuaril 2021. "Features". RubyMotion. Scratchwork Development LLC. Vaadatud 17. juunil 2017. RubyMotion transforms the Ruby source code of your project into ... machine code using a[n] ... ahead-of-time (AOT) compiler, based on LLVM. "Code Generation - Guide to Rustc Development". rust-lang.org. Vaadatud 4. jaanuaril 2023. Reedy, Geoff (24. september 2012). "Compiling Scala to LLVM". St. Louis, Missouri, United States. Vaadatud 19. veebruaril 2013. "Scala Native". Vaadatud 26. novembril 2023. "⚙ D156286 [docs] Bump minimum GCC version to 7.5". reviews.llvm.org. Vaadatud 28. juulil 2023. Ametlik veebileht