AOT derlemesi
AOT derlemesi (Ahead-of-time compilation) C veya C++ gibi daha üst düzey bir programlama dili, Java bytecode veya .NET Framework Ortak Ara Dil (Common Intermediate Language, CIL) kodu gibi bir ara temsilciliğin yerli (sisteme bağlı) bir makine diline derleme eylemidir.[1] Sonuçta ortaya çıkan ikili dosya yerel olarak çalıştırılabilir.[2]
AOT, standart bir yerli derleyici gibi makine tarafından optimize edilmiş kodlar üretir. AOT, mevcut bir sanal makinenin (virtual machine, VM) bayt kodunu makine koduna çevirir.[3]
Çalışma zamanı yükünün azaltılması
değiştirBir ara temsil olarak derlenebilir bir yönetilen kodun çalışma zamanı olan bazı programlama dilleri, (JIT) derleme kullanır. Kısaca, ara kod yürütülürken, bir uygulamanın performansını yavaşlatan ara kod, yerel bir çalışma için makine koduna derlenir. Önceden hazırlanan derleme, yürütme aşamasından ziyade yürütmeden önce bu adımı atma ihtiyacını ortadan kaldırır.[4]
Dinamik olarak yazılan diller için yerli makine koduna veya diğer statik VM bayt koduna öncül derleme yalnızca sınırlı sayıda mümkündür. Örneğin, Yüksek Performanslı Erlang Projesi (HiPE) AOT derleyicisi, Erlang dili için gelişmiş statik tipte yeniden yapılandırma teknikleri ve tip spekülasyonları nedeniyle yapılabilir.[5]
Çoğu durumda, tamamen AOT tarafından derlenmiş programlar ve kütüphanelerle, bir çalıştırma ortamının yararlı bir bölümünü düşürmek, böylelikle disk alanı, bellek, pil ömrü ve başlatma sürelerini (JIT ısınma aşaması yok) azaltmak vb. işlemler mümkündür. Bu, gömülü veya mobil cihazlarda yararlı olabilir.
Performans
değiştirAOT derleyicileri, çoğu durumda JITing'in çok pahalı olduğu düşünülen karmaşık ve gelişmiş kod optimizasyonlarını gerçekleştirebilirler. Bunun aksine, AOT genellikle JIT'de, çalışma zamanı profilli yönlendirmeleri, sahte sabit yayılımı veya dolaylı sanal işlevi yerleştirme gibi bazı optimizasyonları gerçekleştiremez.[6]
Ayrıca, JIT derleyicileri spekülatif olarak kod üzerinde varsayımlar yaparak sıcak kod optimize edebilir. Daha sonra spekülatif bir varsayım kanıtlarsa, üretilen kodun deoptize edilmesi mümkündür. Bu işlem, kodun uyarlanabilir optimizasyonla yeniden optimize edilene kadar çalışan yazılımın performansını yavaşlatır. Bir AOT derleyicisi böyle varsayımlar yapamaz ve derleme zamanında olabildiğince çok bilgiyi çıkarması gerekir.[7] Daha az uzmanlaşmış bir koda başvurmaya ihtiyacı vardır, çünkü bir yöntemle hangi türlerin geçeceğini bilmiyor. Bu gibi sorunlar, profil yönlendirmeli optimizasyonlar ile hafifletilebilir. Ancak bu durumda bile, oluşturulan kod, JIT derleyicisinin yaptığı gibi değişen çalışma zamanı profiline dinamik olarak adapte edilemez.
Örnek
değiştirAndroid mobil işletim sistemi, JIT derleyicisi kullanan bir sanal makine olan Dalvik ile 2008'de teslim edildi.[8] 2013'te yerini AOT derlemesi kullanan yeni bir sanal makine olan Android Runtime yerini aldı, ancak 2017'de Runtime bir JIT derleyicisi aldı.[9]
Kaynakça
değiştir- ^ "Arşivlenmiş kopya". 22 Mayıs 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Şubat 2018.
- ^ "Arşivlenmiş kopya". 12 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Şubat 2018.
- ^ "Arşivlenmiş kopya". 5 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Şubat 2018.
- ^ "Arşivlenmiş kopya". 7 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Şubat 2018.
- ^ "Arşivlenmiş kopya". 12 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Şubat 2018.
- ^ "Arşivlenmiş kopya". 7 Aralık 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Şubat 2018.
- ^ "Arşivlenmiş kopya". 12 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Şubat 2018.
- ^ "Arşivlenmiş kopya". 7 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Şubat 2018.
- ^ "Arşivlenmiş kopya". 12 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Şubat 2018.
Dış bağlantılar
değiştir- AOT IBM 5 Şubat 2018 tarihinde Wayback Machine sitesinde arşivlendi.
Ayrıca bakınız
değiştir- asm.js (JavaScript)
- Bartok (CIL)
- Excelsior JET (Java)
- GNU Compiler for Java
- IL2CPU (CIL)
- NGen (CIL)
- RubyMotion (Ruby)
- SharpOS AOT (CIL)