LLVM Düşük Seviyesi ne şekilde?


12

LLVM (Düşük Seviyeli Sanal Makine) Hangi Seviyede Düşük Seviye? (Yazım sırasında, "LLVM" kısaltmasının bu genişlemesini web sitesinde değil , Wikipedia'da bulamadım .)

Bir derleyici altyapısı için tasarlandığı şeyde veya diğer araçlardan daha "düşük bir seviyede" çalıştığı için "Düşük Düzey" mi deniyor?

Bu "şekilde" (tür) bir de, LLVM daha düşük seviyeli JVM ve CLR veya sadece bir dizayn "düşük seviye" kullanımlar için?

Yanıtlar:


16

LLVM, JVM ve CLR gibi tipik VM'lerden daha düşük düzeydedir. Örneğin, bir çöp toplayıcı için kancaları olsa da, bir çöp toplayıcı kendisi sağlamaz.

Benzer şekilde, JVM'de yerleşik bir JIT derleyicisi vardır (gerçekten eski sürümler hariç). LLVM, LLVM IR için bazı JIT derleyicilerine sahiptir, ancak işleri birbirine bağlamak ve aslında kodu JIT yapmak hala geliştiriciye bağlıdır.

JVM çözülmemiş bir harici ile karşılaştığında, dışarı çıkar ve onu karşılamak için doğru sınıfı bulur ve .class dosyalarının doğrudan dosya sisteminde ve .jar dosyalarında nasıl aranacağını bilir 1 . LLVM'nin JIT derleyicileri, bunun gibi şeylerin nasıl ele alınacağına karar verebileceğiniz kancalara sahiptir. Beklediğiniz gibi, bazı insanlar o kadar, bazı varsayılan versiyonlarını yazdım edebilirsiniz JVM aynı sipariş üzerine kabaca şeyler can - ama aynı zamanda o görmezden gelip isterseniz farklı yapmak özgürsünüz.

Basitçe söylemek gerekirse, bir derleyici (veya bu siparişte bir şey) geliştiriyorsanız, hayatınızı kolaylaştıracak birçok araç vardır. Optimizasyon hakkında çok endişelenmek yerine, kaynak kodunuzdan LLVM IR'ye yönetebileceğiniz en basit çeviriyi kabaca yapabilir ve daha sonra optimizasyon, JIT, bağlantı, vb. Yönetmek için LLVM kitaplıklarını kullanabilirsiniz. bazı gerçekten kullanışlı işlevler, böylece tüm ayrıntılarla uğraşmak zorunda kalmazsınız, ancak yine de işlevler ve onları çağırmak için hala kod yazıyorsunuz. Bitmiş bir ürün değil, ürünleri nispeten hızlı ve kolay bir şekilde oluşturmak için kullanışlı araçlar.


1 Teknik olarak, bunların hepsi JVM'ye tam olarak dahil edilmemiştir. Genellikle JVM'nin bir parçası olarak primordial sınıf yükleyici olarak adlandırılanı belirtir ve daha sonra diğer şeyleri işleyen java.util.ClassLoader'da belirtilen kullanıcı sınıfı yükleyiciler vardır. Bazı sınıf yükleyicileri varsayılan olarak dahil edilmiştir ve yeterince kötü istiyorsanız, kendiniz tanımlayarak bunları tamamlayabilirsiniz.


12

Öyle düşük düzeyde mevcut veya gelecekteki sanal makineleri (JVM) bunların uygulanmasına çekirdeğinde olarak kullanabilirsiniz böylece tasarlanmıştır çünkü.

Bu şekilde görün: Java ve Python'un sanal makineleri çok taşınabilirdir, çünkü standart C'de yazılırlar ve kendi kitaplıklarına çok güvenirler. LLVM'nin amacı, herhangi bir sanal makineyi zaten LLVM'yi destekleyen bir platforma taşımak için bir altyapı sağlamaktır.

LLVM, statik ve JIT derlemesi için destek sunar ve içinde güvenilir işletim sistemi alanında çalışabilecek şekilde tasarlanmıştır. Bu, teorik olarak, LLVM'nin üstünde bir sanal makine çalıştırmanın çok daha az iş anlamına gelmesi ve çok daha hızlı ve verimli bir şey üretmesi gerektiği anlamına gelir. Teoride.

Daha sonra, düşük seviyeli LLVM'nin farklı işletim sistemi ve donanım mimarilerine taşınması daha kolay olmalıdır.

Dil uygulayıcıları, tek ve taşıması kolay bir alt düzey platforma yazabilirlerse büyük tasarruflar elde edilir. En iyi bilinen VM'ler, hizmet verdikleri dil ve işletim sistemi arasında yer alır ve kendi ara temsillerini ve JITC'yi uygulamak zorundadırlar.


5

LLVM adının "düşük düzey" kısmı, kullanılan sanal yönerge kümesinin düzeyini belirtir. LLVM'nin kullandığı ara dil (IR), mimari agnostik ve genel olmasına rağmen, makine kodu düzeyine yakındır.

Öte yandan, JVM ve CLR'nin bayt kodu, daha yüksek bir soyutlama katmanında olan talimatlara sahip olması nedeniyle oldukça yüksektir. Her ikisi de nesneye dayalı yığın tabanlı montaj dilleridir. Örneğin JVM, Java dilinin belirli nesne modeli hakkında bilgi sahibi olması gereken invokevirtual komutuna sahiptir.


3

Dile özgü VM'lerden ve JVM ve CLR gibi birleşik VM'lerden kesinlikle daha düşük düzeydedir. Tasarımı, GCC (GIMPLE) ve benzeri derleyicilerdeki düşük seviye ara gösterimine yakındır. Hiçbir varsayılan GC yoktur, belirli bir üst düzey tip sistemi uygulanmaz, hizalama kabul edilmez (açıkça belirtilmelidir), tamsayı ve kayan nokta veri türleri açıktır (ve platforma bağlıdır) ve en düşük seviye - a iyi işaretçi aritmetiği mevcuttur.

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.