Toplu iş derleyici nedir?


28

Derleyicimin dersinden şu alıntıyı yaptım (grafik renklendirme bağlamında):

Yavaş olduğundan, grafik renklendirme toplu derleyicilerde, doğrusal tarama JIT derleyicilerde kullanılmaya meyillidir.

İnternette net bir tanım bulamadım. Peki derleyiciyi toplu derleyici yapan nedir?


Bu soru burada konu dışı. softwareengineering.stackexchange.com sormak için daha iyi bir yer
Basile Starynkevitch

Yanıtlar:


42

Bir JIT (Just-In-Time) derleyicisi çalışma zamanında kodu, yani program çalışırken derler. Bu nedenle, derleme maliyeti, programın yürütme süresinin bir parçasıdır ve dolayısıyla en aza indirilmelidir.

Bunun tam tersi, temelde "batch derleyici" ile eşanlamlı olan önceden yapılmış (AOT) bir derleyicidir. Bu kaynak kodunu makine koduna dönüştürür ve ardından sadece makine kodu dağıtılır. Bu nedenle, derleyici, sonuçtaki programın yürütme süresini etkilemediğinden çok yavaş olabilir.

Günümüzde insanlar "derleyici" derken tipik olarak bir AOT derleyici anlamına geliyorlar. Nitekim, "AOT derleyici" terimi sadece insanlar nispeten JIT derlenmiş diller, özellikle JavaScript için AOT derleyiciler yapmaya başladığında nispeten popüler olmaya başladı. Bu dillerin çoğu, örneğin C #, bir VM için bir ara dili derler ve bu sayede JIT çalışma zamanında makine koduna derlenir. "AOT derleyici" terimi, kaynak kodun doğrudan makine koduna derleneceğinin çağrışımına sahiptir, bu nedenle çalışma zamanında hiçbir JIT derlemesi gerekmez.

"Toplu derleyici", bu noktada biraz eski bir terimdir. Toplu iş derleyicisinin, terimin popüler olduğu dönemdeki asıl karşıtlık, artan bir derleyiciydi . Artımlı derleme, sıklıkla bir REPL'iniz olduğu Lisp gibi dillerle ilişkilidir ve etkileşimli olarak belirli bir işlevi derlemek için dil uygulamasından talep edebilirsiniz. Derlemesi daha önce talep edilmemiş bir fonksiyon yürütülürse, tipik olarak yorumlanırdı. Bir parti derleyici, aksine, tüm fonksiyonları bir kerede yani bir seri halinde derledi.


1
Ve eski günlerde, etkileşimli olarak çalışamayan yarışmacıların, programınızı derlemek için bir parti kuyruğuna bir iş göndermeniz
gerekti

Ve bazı dil uygulamaları (GNU’nun awk, cpython ve benzeri) tüm girdisini, burada açıklanan özelliklerin bazılarını karıştıran, çalışma zamanında ilk adım olarak bir iç gösterime derler.
dmckee

1
@dmckee çoğu tüm dil uygulamalarını değilse de, aslında
user253751 11

Başka bir belirsizlik: Toplu derleyiciler olarak adlandırılan araçlar, MSDOS işletim sistemleri için mevcut, bu derlenmiş toplu iş dosyaları çalıştırılabilir dosyalara dönüştürülmüş ....
rackandboneman 12

Elbette her zaman bir iç temsil vardır. Ama bazen Gcc, Llvm veya Net'te olduğu gibi kendi başına bir dildir. Bunun nedeni ön uç / orta / arka uç mimarisi, ön ucu dili (C, C ++, Java, fortran ..) ortak bir alt seviye diline dönüştüren ve ardından optimizasyon algoritmalarıdır ve Sonunda ortak dilde bu optimize kod, arka uç tarafından bytecode veya assembler, çalıştırılabilir veya statik veya dinamik kitaplığa dönüştürülür.
reuns

11

Anlamı, verdiğin alıntıda ima edilir! Görevin gerçek zamanlı olarak gerçekleştirilmediği zaman kullanılan toplu iş işleme teriminden kaynaklanır , ancak yük (genellikle gerçek zamanlı etkinlikler için) daha az olduğunda işletim sistemi tarafından daha sonra yürütülmesi için zamanlanır.

Bir toplu iş derleyicisi, bir kullanıcı derleme sonucunu beklemiyorsa derlemeyi yapan bir derleyicidir. Arka planda yapılan daha modern terminolojiyi kullanarak söyleyeceğimiz bir şey.

Bu, işlemin daha iyi yapılması için fazladan zaman harcama lüksüne ihtiyaç duyulmaksızın, tam olarak "canlı" olarak yapılan bir JIT'in (Just-In-Time) ifadesidir.

Toplu derlemenin daha yavaş hızı bu şekilde gösterilebilir:

görüntü tanımını buraya girin

Kaynak: https://xkcd.com/303/

Veya bu bile:

görüntü tanımını buraya girin

Kaynak: http://dilbert.com/strip/2013-06-22

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.