Movatterモバイル変換


[0]ホーム

URL:


Saltu al enhavo
Vikipedio
Serĉi

LLVM

El Vikipedio, la libera enciklopedio
Portala ikono
Vi povas plibonigi la jenon:
  • Aldonu mankanta(j)n fontindiko(j)n al la artikolo.
  • Bonvolu plibonigi la lingvan stilon de la artikolo.

Se vi korektis unu el la menciitaj mankoj, bonvolu forigi la koncernan parametron de la ŝablono {{Pluraj problemoj}}. Detaloj estas en ladokumentado.

LLVM
Lastastabila versio20.1.0
ProgramlingvoC++, C, asembla lingvo
PermesiloPermesilo de Apache, Versio 2.0
Retejollvm.org
vdr

La projektoLLVM de tradukila infrastrukturo  (antaŭemaLaLta  Virtuala Maŝino) estas "kolekto de modula kaj reuzeblatradukiloj kaj ĉenilajteknologioj" uzita por evoluigitradukilajfacadaj interfacoj kajinternaj interfacoj.[1]

LLVM estas skribita perC++ kaj estas desegnita por traduk-tempa, lig-tempa, rul-tempa kaj vak-tempa optimigo de programaroj skribitaj per arbitrajprogramlingvoj. Originale efektivigita por C kaj C++, la lingvo-sendependa desegno de LLVM poste starigis larĝan varion defacadaj interfacoj: lingvoj kun tradukiloj kiuj uzas LLVM inkludas ActionScript,Ada, C#, Ofta Lisp, Crystal, D,Delphi,Fortran, OpenGL Ombranta Lingvon, Halide,Haskell, Java bytecode, Julia,Lua,Objektiva-C,Pony,Python, R,Ruby,Rust, CUDA,Scala kaj Swift[2][3][4][5][6].

La LLVMa projekto komencis dum 2000 ĉe laUniversitato de Ilinojso ĉe Urbana–Champaign, sub la direkto de Vikram Adve kaj Chris Lattner. LLVM estis originale evoluigita kiel esplora infrastrukturo prienketi dinamikajn kompilajn teknikojn por statika kaj dinamikaprogramlingvoj. LLVM estis liberigita sub la malfermita kodlicencoj de Universitato de Ilinojsa kaj NCSA, ĉiopermesa libera programara licenco.[7] Dum 2005, Apple Inc. dungitis Lattner kaj formis teamon por labori pri la LLVMa sistemo por diversaj uzoj ene de la evoluadaj sistemoj deApple[8]. LLVM estas integrita parto de plej lastaj evoluadaj iloj de Apple porOS X kaj iOS[9]. Ekde 2013 Sony uzis Clang, la ĉefanfacada interfaco de LLVM en la  programara disvolvada ilara de ĝiaPS4 Videoludilo[10].

La nomo LLVM estis originale siglo elmaLalta niveLa Virtuala Maŝino, sed tio devenis kreske malpli taŭga dumLLVM fariĝis "kadra projekto", kiu inkludis varion de aliaj tradukiloj kaj malalta-nivelaj ilaj teknologioj, do la projekto forlasis laakronimo[11]. Nun, LLVM estas marko kiu aplikas al la LLVMa kadra projekto, la LLVMa meza prezento, la LLVMaerarserĉilo, la LLVM C++ Norma Biblioteko (kun plena subteno de C++11 kaj C++14), ktp[12]. LLVM estas administrita de la LLVMa Fondaĵo. Ĝia prezidanto estas tradukila inĝeniero Tanya Lattner.[13]

La Asocio por Komputanta Maŝinaron donacis al Adve, Lattner kaj Evan Cheng la 2012an ACMan Programaran Sisteman Premion por LLVM[14].

Superrigardo kaj priskribo

[redakti |redakti fonton]

LLVM povas provizi la mezajn tavolojn de plena tradukila sistemo, kiu prenas mezan prezentan kodon el tradukilo kaj emisas optimigitan mezprezenton. Ĉi tiu nova mezprezento tiam povas esti transformita kaj ligita al maŝino-dependaasembla lingva kodo por iu cela platformo. LLVM povas akcepti la mezprezento de laGNU Compiler Collection (GCC) ilĉeno, eblige uzi ĝin kun larĝa aro de okazantaj tradukiloj, kiuj estas skribita por tiu projekto.

LLVM ankaŭ povas produkti reasignebla maŝina kodo dum traduk-tempo aŭ lig-tempo aŭ eĉ duuma maŝinkodo dum rul-tempo.

LLVM subtenas lingv-sendependa instrukciaro kaj tipa sistemo[15]. Ĉiu instruo estas en statika ununura ensigna formo, signifanta ke ĉiu varianto (nomita tipan registron) estas ensignita unufoje kaj tiam malŝanĝotebla. Tio helpas simpligi la analizon de dependecoj inter variantoj. LLVM eblas kodon esti statike tradukita, kiel ĝi estas per la tradicia GCCa sistemo aŭ lasita por posta traduko el la mezreprento al la maŝina kodo per ĝustatempe tradukado, simile alĜavo. La tipa sistemo konsistas en bazaj tipoj kiel induktaj aŭglit-frakci-markaj nombroj kaj kvin derivitaj tipoj: referencoj,vicoj,vektoroj,strukturoj kaj funkcioj. Tipa konstruo laŭ konkreta lingvo estas prezentebla per kombinado tiujn bazajn tipojn per LLVM. Ekzemple, iu klaso laŭ C++ estas prezentebla per miksaĵo de strukturoj, funkcioj kaj vicoj de referencoj al funkcioj.

La LLVMa ĝustatempe tradukilo povas optimigi malnecesan statikajn branĉojn forige de programaro dum rultempo, kaj tiel estas utila por parta takso por kazoj kie programaro havas multajn elektojn, plejparte determinebla kiel malnecesa en specifa medio. Tiu trajto estas uzita en la OpenGL ĉenstablo de Mac OS X Leopardo (v10.5) por provizi subtenon por mankantaj aparataraj trajtoj[16].Grafikaĵa kodo ene de la OpenGL stako estis lasita en meza prezento kaj tiam tradukita kiam rulita laŭ la cela maŝino. En sistemoj kun potencegaj grafikaĵaj procezilaj unuoj (GPU), la rezultonta kodo estas tre maldika, pasanta la instruojn al la GPU kun minimumaj ŝanĝoj. En sistemoj kun potenecetaj GPUoj, LLVM tradukus neneprajn procedojn, kiuj rulas per la lokacentra procezilo unuo (CPU) kiu imitas instruciojn ke la GPU ne povas ruli interne. LLVM plibonigis rendimentoj per potenecetaj maŝinoj ekipita kun Intel GMA icaroj. Simila sistemo estis disvolvita por la Gallium3D-a LLVMa dukto kaj inkludita en laGNOME ŝelo por ebli ĝin ruli sen konvena 3Da aparata pelilo ŝargita.[17]

Por rul-tempa rendimento de la kompilitaj programoj, GCC antaŭe kromrendimentis LLVM ĉirkaŭ 10% laŭ mezumo[18][19]. Pli novaj rezultoj indikas ke LLVM nun atingis GCC nivelo por tiu karakterizaĵo, kaj nun tradukas duumaĵojn per proksimume egala rendimento[20].

Komponantoj

[redakti |redakti fonton]

LLVM devenis kadra projekto, kiu enhavas multoblajn komponantojn.

Facadaj interfacoj: programara lingvo subteno

[redakti |redakti fonton]

LLVM estis originale skribita por anstataŭi de la ekzistantakodogenerilo en la GCCa stako[21], kaj multaj el la GCCaj facadaj interfacoj estis modifita por funkcii kun ĝi. LLVM nuntempe subtenas tradukadon porAda,C,C++, D,Delphi,Fortran,Haskell,Objektiva-C kaj Swift laŭ diversaj facadaj interfacoj, iuj derivitaj de 4.0.1a kaj 4.2a versioj el laGNU Compiler Collection.

Vasta intereso pri LLVM kondukis al pluraj zorgoj pri evoluigi novajn facadajn interfacojn por vario da lingvoj. La plejatentato estas Clang, iu nova tradukilo kiu subtenas C, C++ kaj Objektive-C. Ĉefe subtenita de Apple, Clang estas celota por anstataŭigi la C/Objektive-C tradukilon en la GCCa sistemo kun sistemo kiu estas pli facile integrigita kunprogramadaj medioj (IDEs) kaj havas pli larĝan subtenon porplurfadenado. Subteno porOpenMP instrukcioj estis inkludita en Clang ekde 3.8a eldonado[22]. Disvolvado de Objektive-C per GCC estis stagnanta kaj la ŝanĝoj de Apple al la lingvo estis subtenita laŭ aparte prizorgita branĉo.[mankas fonto](Bonvolu kreiKategorio:Artikoloj kun senfontaj asertoj ekde october 2014!)

La Haskell-a tradukilo de Utrecht povas produkti kodon por LLVM. Kvankam la generilo estas en la fruaj fazoj de disvolvado, por multaj kazoj ĝi estis pli efika ol la C-a kod-generilo[23]. La Glasgow Haskell Compiler (GHC) havas funkciantan LLVM-a interna interfaco, kiu atingas 30% plirapidadon supre de la tradukita kodo ol la indiĝena kodo tradukita per GHC-a aŭ C-a kod-generado sekvita per tradukado, perdiĝanta nur unu el la multaj optimigaj teknikoj efektivigita laŭ la GHC[24].

Multaj aliaj komponantoj estas en diversaj fazoj de disvolvado, inklude, sed nelimigite, laRust tradukilo,Java okopkodo facade interfaco, Komunuma Meza Lingvo facada interfaco, la MacRuby efektivigo de Ruby 1.9, diversaj facadaj interfacoj por Norma ML kaj nova registra asignilo per grafea kolorado.[mankas fonto](Bonvolu kreiKategorio:Artikoloj kun senfontaj asertoj ekde june 2012!)

Norma biblioteka subteno

[redakti |redakti fonton]

LLVM subtenas ĝian propran norman bibliotekon, sed ankaŭ alternativajn C-an norman bibliotekon, musl kaj ekde 3.9a version, komencanta subteno por ARM.[mankas fonto](Bonvolu kreiKategorio:Artikoloj kun senfontaj asertoj ekde september 2016!)[25]

LLVM meza prezento

[redakti |redakti fonton]
LLVMa mezprezento estas uzita ekz., de Radeonsi kaj de LLVM-dukto. Ambaŭ estas parto deMesa 3D.

La kerno de LLVM estas la meza prezento, malalt-nivela programlingvo simila al asembla lingvo. Mezprezento estas forte tipita instrukciareto komputado kiu abstraktas detalojn de la celo. Ekzemple, la voksekvenco estas abstraktita percall(voku) kajret (returnu) instrukcioj kun eksplicitaj argumentoj. Ankaŭ, anstataŭ fiksa aro da registroj, mezprezento uzas senliman aron de tempaj laŭ la formo %0, %1, ktp. LLVM subtenas tri mezprezentajn izomorfajn formojn: hom-legebla asembla formo, C++ objekta formo, kiu taŭgas facadajn interfacojn, kaj densa duumkoda formo por seriigo. Simpla "Saluton, mondo!" programo en la asembla formo:

@.str=internalconstant[14xi8]c"hello, world\0A\00"declarei32@printf(i8*,...)definei32@main(i32%argc,i8**%argv)nounwind{entry:%tmp1=getelementptr[14xi8]*@.str,i320,i320%tmp2=calli32(i8*,...)*@printf(i8*%tmp1)nounwindreti320}

Interna interfaco: instrukciara kaj mikroarkitektura subteno

[redakti |redakti fonton]

Ekde 3.4a versio, LLVM subtenas multajn instrukciarojn, inklude ARM, Qualcomm Hexagon, MIPS, Nvidia Paralela Fadena Plenumo (nomitaNVPTX en LLVMa dokumentaro),PowerPC, AMD TeraScale, AMDaj Graphics Core Next, SPARC, z/Architecture (nomitaSystemZ en LLVMa dokumentaro), x86/x86-64 kaj XCore[26]. Kelkaj trajtoj ne estas haveblaj por kelkaj platformoj. Plejparte trajtoj estas disponebla por x86/x86-64, z/Architechture, ARM kaj PowerPC[27].

LLVMa Maŝinkodo

[redakti |redakti fonton]

La LLVMa maŝinkoda subprojecto estas la kadro de LLVM por traduki maŝinajn instrukciojn inter tekstaj formoj kaj maŝina kodo. Antaŭe, LLVM apogigis la sisteman asemblilon aŭ iun provizitan per ilĉeno, por traduki asemblan lingvon al maŝina kodo. Integra asemblapogo de LLVMa maŝinkodo subtenas plejpartojn de LLVMaj celoj, inklude x86, x86-64, ARM kaj ARM64. Por kelkaj celoj, inklude la diversajn MIPSajn instrukciaroj, la integra asemblapoga subteno estas uzebla sed ankoraŭ en la beta fazo.

Integra bindilo: lld

[redakti |redakti fonton]

Lalldsubprojecto estas provo disvolvi integritan senplatformodependanbindilon por LLVM.[28] Nuntempe, Clang kaj LLVM devas alvoki la sistemon aŭ celan bindilon por produkti plenumon . Tio preventas la uzadon de bindilaj trajtoj ke ne ĉiuj subtenitaj bindilaj versioj subtenas por iu platformo. lld celas forigi dependecon de ekstera liveranta bindilo[28].

Revizia historio[29]

[redakti |redakti fonton]
Revizia historio
VersioElkarceriga dato
3.9.02a septembro 2016
3.8.111a julio 2016
3.8.08a marto 2016
3.7.15a januaro 2016
3.7.01a septembro 2015
3.6.216a julio 2015
3.6.126a majo 2015
3.6.027a februaro 2015
3.5.22a aprilo 2015
3.5.120a januaro 2015
3.5.03a septembro 2014
3.4.219a junio 2014
3.4.17a majo 2014
3.4.02a januaro 2014
3.317a junio 2013
3.220a decembro 2012
3.122a majo 2012
3.01a decembro 2011
2.96a aprilo 2011
2.85a oktobro 2010
2.727a aprilo 2010
2.623a oktobro 2009
2.52a marto 2009
2.49a novembro 2008
2.39a junio 2008
2.211a februaro 2008
2.126a septembro 2007
2.023a majo 2007
1.919a novembro 2006
1.89a aŭgusto 2006
1.720a aprilo 2006
1.68a novembro 2005
1.518a majo 2005
1.49a decembro 2004
1.313a aŭgusto 2004
1.219a marto 2004
1.117a decembro 2003
1.024a oktobro 2003

Vidu ankaŭ

[redakti |redakti fonton]
  • C--
  • Amsterdamo Compiler Ilara (ACK)
  • LLDB (Erarserĉilo)
  • GNUa lightning
  • GNU Compiler Collection (GCC)
  • Pure (programlingvo)
  • OpenCL
  • Emscripten
  • TenDRA Disdonada Formo
  • Arkitekturo Neŭtrala Disdonada Formo (ANDF)
  • Komparo de aplikaj virtualaj maŝinoj
  • SPIR-V

Referencoj

[redakti |redakti fonton]
  1. The LLVM Compiler Infrastructure.
  2. .
  3. .
  4. LLVM, Chris Lattner, inThe architecture of Open Source Applications, edited by Amy Brown, Greg Wilson, 2011
  5. Projects built with LLVM.
  6. Compiling Scala to LLVM”.  
  7. "License",LLVM: Frequently Asked Questions, llvm.org, retrieved27 January 2012 
  8. .
  9. .
  10. .
  11. Lattner, Chris. [LLVMdev The name of LLVM] (angle) (elektronika). lists.llvm.org (21). Arkivita ella originalo je 2023-06-13. Alirita 2024-01-25 .
  12. “libc++” C++ Standard Library.
  13. The LLVM Foundation (3 April 2014).
  14. ACM Awards. Arkivita ella originalo je 2012-04-02. Alirita 2016-12-22 .
  15. LLVM Language Reference Manual.
  16. Lattner, Chris. [LLVMdev A cool use of LLVM at Apple: the OpenGL stack] (angle) (dissendolisto). lists.llvm.org (15). Arkivita ella originalo je 20230613. Alirita 2023-09-06 .
  17. Michael Larabel,"GNOME Shell Works Without GPU Driver Support",phoronix, 6 November 2011
  18. The used machine is 3.4Ghz Intel Core i7-2600 with 8GB memory under Fedora Core14.
  19. The used machine is 3.4Ghz Intel Core i7-2600 with 8GB memory under Fedora Core14.
  20. LLVM/Clang 3.2 Compiler Competing With GCC (27 December 2012).
  21. Ŝablono:Cite conference
  22. Clang 3.8 Release Notes.
  23. Compiling Haskell To LLVM. Arkivita ella originalo je 2013-05-31.
  24. The Glasgow Haskell Compiler and LLVM.
  25. http://llvm.org/releases/3.9.0/docs/ReleaseNotes.html
  26. Stellard, Tom. [LLVMdev RFC: R600, a new backend for AMD GPUs] (angle) (elektronoka). lists.llvm.org (26). Arkivita ella originalo je 2023-01-22. Alirita 2024-01-25 .
  27. Target-specific Implementation Notes: Target Feature Matrix // The LLVM Target-Independent Code Generator, LLVM site.
  28. 28,028,1 LLD - The LLVM Linker.
  29. http://llvm.org/releases/

Eksteraj ligiloj

[redakti |redakti fonton]
Elŝutita el "https://eo.wikipedia.org/w/index.php?title=LLVM&oldid=8868742"
Kategorioj:
Kaŝitaj kategorioj:

[8]ページ先頭

©2009-2025 Movatter.jp