LLVM tam olarak nedir?


Yanıtlar:


369

LLVM, ara ve / veya ikili makine kodu oluşturmak, optimize etmek ve üretmek için kullanılan bir kütüphanedir.

LLVM, "ön uç" (ayrıştırıcı ve lexer) ve "arka uç" (LLVM'nin temsilini gerçek makine koduna dönüştüren kod) sağladığınız bir derleyici çerçevesi olarak kullanılabilir.

LLVM ayrıca bir JIT derleyicisi olarak da hareket edebilir - derleme hızına yönelik hızlı kod optimizasyonları ile x86 / x86_64 ve PPC / PPC64 montaj üretimi desteğine sahiptir.

İlgileniyorsanız, LLVM'nin demo sayfalarında C veya C ++ kodundan oluşturulan makine koduyla oynayabilirsiniz , ancak demo sayfası şu anda 2013 yılından beri devre dışıdır.


39
Bununla oynamak istiyorsanız, şu şaşırtıcı makaleye bakın: gnuu.org/2009/09/18/writing-your-own-toy-compiler
LiraNuna

29
Yanıtta verilen bağlantı "LLVM demo sayfası şu anda devre dışı" diyor.
EngrStudent

5
ellcc.org/demo/index.cgi , ara kod da dahil olmak üzere çeşitli hedeflere C / C ++ derleme ile çeşitli hedeflere derlemenin bir başka yoludur
Tom Goodfellow

1
bunun ne anlama geldiğine dair gerçek bir örnek verebilir misiniz?
Migrate2Lazarus profilimi gör

Şimdi Derleyici Gezgini'ni kullanarak C / C ++ ile oluşturulan LLVM ile oynayabilirsiniz. godbolt.org
Galaxy

112

LLVM'nin iyi bir özeti şudur:

resim açıklamasını buraya girin

Ön uçta Perl ve diğer birçok üst düzey dil var. Arka uçta, doğrudan makinede çalışan yerel kodunuz vardır.

Merkezde ara kod temsili bulunur. Her üst düzey dil bu LLVM IR biçiminde temsil edilebilirse, bu IR'ye dayalı analiz araçları kolayca yeniden kullanılabilir - bu temel mantıktır.


39
resim bin kelimeye bedeldir ip
ipatch

3
Dolayısıyla LLVM'nin derleyici tasarımcıları için yararlı olduğu görülüyor. Bir programcı, oluşturulan kodu kaynak koddan bağımsız olarak analiz etmenin yanı sıra standart bir derleyici veya LLVM'ye dayalı bir derleyici ile derlemesine dikkat etmeli mi?
jinawee

4
LLVM ile IR'ye derleyebiliyorsanız, IR'yi analiz etmek için size birçok araç açılabilir. Ancak aracınız yalnızca yerel ikili dosyaları analiz edebiliyorsa (örneğin x86), LLVM tarafından oluşturulan ikili dosyalar mı yoksa gcc tarafından oluşturulan ikili dosyalar mı yoksa Intel derleyici tarafından oluşturulan mı olduğu fark etmez.
Peter Teoh

73

LLVM ("Düşük Seviyeli Sanal Makine" anlamına gelir, ancak artık kullanılmaz), C ++ ile yazılmış, derlenen zaman, bağlantı zamanı, çalışma zamanı ve "boşta kalma süresi" optimizasyonu için tasarlanmış bir derleyici altyapısıdır. gelişigüzel programlama dillerinde. Başlangıçta C / C ++ için uygulanan LLVM'nin dilden bağımsız tasarımı (ve başarısı), o zamandan beri Objective C, Fortran, Ada, Haskell, Java bayt kodu, Python, Ruby, ActionScript, GLSL dahil olmak üzere çok çeşitli ön uçlar üretti. , ve diğerleri.

Daha fazla açıklama için bunu okuyun
Ayrıca Unladen Swallow'a da göz atın


13
.. yani belgelerin ne demeye çalıştıkları; iken LLVM için kullanılan bir kısaltmadır Düşük Seviye Virtual Machine , proje basitçe adlı LLVM , değil tamamen dile kelimeleri.
Jochem Kuijpers

2
Daha önce kısaltmanın üzerinde vardı, ancak daha sonra kaldırıldı en.wikipedia.org/wiki/LLVM
VVB

2
Yorumları özetlemek. "Düşük Seviyeli Sanal Makine (LLVM)", "LLVM (projelerin ömründe" Düşük Seviyeli Sanal Makine "anlamına geliyordu) gibi bir şey olmalıdır"
ssokolow

52

Göre 'LLVM Çekirdek Kütüphanelerinin Başlarken' kitabında (c):

Aslında, LLVM adı aşağıdakilerden herhangi birini ifade edebilir:

  • LLVM projesi / altyapısı: Bu, birlikte tam bir derleyici oluşturan çeşitli projeler için bir şemsiye: ön uçlar, arka uçlar, optimize ediciler, montajcılar, bağlayıcılar, libc ++, derleyici-rt ve bir JIT motoru. "LLVM" kelimesi, örneğin şu cümlede bu anlama sahiptir: "LLVM birkaç projeden oluşur".

  • LLVM tabanlı bir derleyici: Bu, LLVM altyapısı ile kısmen veya tamamen oluşturulmuş bir derleyicidir. Örneğin, bir derleyici ön uç ve arka uç için LLVM kullanabilir, ancak son bağlantıyı gerçekleştirmek için GCC ve GNU sistem kitaplıklarını kullanabilir. LLVM şu cümle içinde bu anlama sahiptir, örneğin: "C programlarını bir MIPS platformuna derlemek için LLVM kullandım".

  • LLVM kütüphaneleri: Bu, LLVM altyapısının yeniden kullanılabilir kod kısmıdır. Örneğin, LLVM şu anlama gelir: "Projem, Tam Zamanında derleme çerçevesi aracılığıyla kod oluşturmak için LLVM kullanır".

  • LLVM çekirdeği: Ara dil düzeyinde ve arka uç algoritmalarında gerçekleşen optimizasyonlar, projenin başladığı LLVM çekirdeğini oluşturur. LLVM şu cümlede bu anlama sahiptir: "LLVM ve Clang iki farklı projedir".

  • LLVM IR: Bu LLVM derleyici ara gösterimidir. LLVM, "Kendi dilimi LLVM'ye çeviren bir ön uç oluşturdum" gibi cümlelerde kullanıldığında bu anlama sahiptir.


35

LLVM temel olarak derleyiciler ve / veya dil odaklı yazılımlar oluşturmak için kullanılan bir kütüphanedir. Temel gist muhtemelen en yaygın derleyici paketi olan gcc olmasına rağmen, yeniden kullanılabilir olması için inşa edilmemiştir. bileşenleri gcc'den almak ve kendi uygulamanızı oluşturmak için kullanmak zordur. LLVM, herkesin derleyiciler ve dil odaklı yazılımlar oluşturmak için kullanabileceği bir dizi "modüler ve yeniden kullanılabilir derleyici ve araç zinciri teknolojileri" oluşturarak bu sorunu giderir.


6
Öyleyse LLVM kütüphane ve Clang derleyici mi?
Abdul

11
Clang, LLVM'nin C / C ++ ön uç derleyicisidir. C kodunu, bir arka uç derleyici tarafından bazı Meclis diline çevrilen LLVM bit koduna dönüştürür.
Boris Mulder

6

LLVM Derleyici Altyapısı özellikle kod üzerinde optimizasyon ve dönüşüm yapmak için kullanışlıdır. Ayrıca, farklı kullanımlara hizmet eden bir dizi araçtan oluşur. llvm-prof, program etkin noktalarını tanımlamak için yürütme profili oluşturmanızı sağlayan bir profil oluşturma aracıdır. Opt, çeşitli optimizasyon geçişleri (örneğin ölü kod ortadan kaldırması) sunan bir optimizasyon aracıdır.

Önemli olan LLVM size kendi Pass'larınızı yazmanız için kütüphaneler sağlar. Örneğin, bir Programın belirli işlevlerine geçirilen bazı bağımsız değişkenlere aralık denetimi eklemeniz gerekirse, basit bir LLVM Geçidi yazmak yeterli olacaktır.

Kendi Pass'inizi yazma hakkında daha fazla bilgi için bu http://llvm.org/docs/WritingAnLLVMPass.html adresine bakın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.