İçeriğe atla

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ı

Bir 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

AOT 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

Android 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

  1. ^ "Arşivlenmiş kopya". 22 Mayıs 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Şubat 2018. 
  2. ^ "Arşivlenmiş kopya". 12 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Şubat 2018. 
  3. ^ "Arşivlenmiş kopya". 5 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Şubat 2018. 
  4. ^ "Arşivlenmiş kopya". 7 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Şubat 2018. 
  5. ^ "Arşivlenmiş kopya". 12 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Şubat 2018. 
  6. ^ "Arşivlenmiş kopya". 7 Aralık 2020 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Şubat 2018. 
  7. ^ "Arşivlenmiş kopya". 12 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Şubat 2018. 
  8. ^ "Arşivlenmiş kopya". 7 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Şubat 2018. 
  9. ^ "Arşivlenmiş kopya". 12 Şubat 2018 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Şubat 2018. 

Dış bağlantılar

Ayrıca bakınız

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">C (programlama dili)</span> programlama dili

C, yapısal bir programlama dilidir. Bell Laboratuvarları'nda, Ken Thompson ve Dennis Ritchie tarafından UNIX işletim sistemini geliştirebilmek amacıyla B dilinden türetilmiştir. Geliştirilme tarihi 1972 olmasına rağmen yaygınlaşması Brian Kernighan ve Dennis M. Ritchie tarafından yayımlanan "C Programlama Dili" kitabından sonra hızlanmıştır. Günümüzde neredeyse tüm işletim sistemlerinin yapımında %95'lere varan oranda kullanılmış, hâlen daha sistem, sürücü yazılımı, işletim sistemi modülleri ve hız gereken her yerde kullanılan oldukça yaygın ve sınırları belirsiz oldukça keskin bir dildir. Keskinliği, programcıya sonsuz özgürlüğün yanında çok büyük hatalar yapabilme olanağı sağlamasıdır. Programlamanın gelişim süreciyle beraber programlamanın karmaşıklaşması, gereksinimlerin artması ile uygulama programlarında nesne yönelimliliğin ortaya çıkmasından sonra C programcıları büyük ölçüde nesne yönelimliliği destekleyen C++ diline geçmişlerdir.

<span class="mw-page-title-main">Java</span> açık kaynak kodlu, nesneye yönelik, zeminden bağımsız, yüksek verimli, çok işlevli, yüksek seviye, adım adım işletilen bir programlama dili

Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmış açık kaynak kodlu, nesneye yönelik, platform bağımsız, yüksek verimli, çok işlevli, yüksek seviye, hem yorumlanan hem de derlenen bir dildir.

<span class="mw-page-title-main">Derleyici</span> kaynak kodunu bilgisayarın işleyebileceği koda dönüştüren program

Derleyici, kaynak kodu makine koduna dönüştüren yazılımdır. Bir programlama dilinin derleyicisi, o programlama dili kullanılarak yazılmış olan kodu hedef işlemci mimarisine göre uygun şekilde makine koduna derler ve genellikle çıktı olarak yürütülebilir dosyanın oluşturulmasını sağlar. Bu eyleme derleme denir. Bir başka ifadeyle derleyici, bir tür yazı işleyicidir; girdi olarak yazı alır ve çıktı olarak yazı verir.

ASP.NET, Microsoft tarafından geliştirilmiş olan bir açık kaynak Web uygulama gelişimi teknolojisidir. Dinamik Web sayfaları, Web uygulamaları ve XML tabanlı Web hizmetleri geliştirilmesine olanak sağlar. Aynı işletme tarafından geliştirilen .NET çatısı'nın yazılım iskeleti parçası ve artık işletmece desteklenmeyen ASP teknolojisinin devamını teşkil etmiştir.

Çapraz Derleyici üzerinde çalıştığı platformdan farklı olan platformlar için çalıştırılabilen kodlar üreten derleyicidir. Böyle bir araç, erişiminizde olmayan bir platform için kod derlenmesi gerektiğinde ya da böyle bir platform üzerinde kod derleme işleminin yapılmasının imkânsız olduğu durumlarda faydalı olabilir.

<span class="mw-page-title-main">Java sanal makinesi</span>

Java Sanal Makinesi (JSM), Java platformunun nesne modülü formatı olan class uzantılı sınıf dosyalarının belleğe yüklenip çalıştırılması için gereken hizmetleri sunan bir sistem programıdır ve temel görevinin sınıf dosyalarını yorumlamak olduğu söylenebilir. Ancak, JSM'ni salt bir yorumlayıcı olarak görmek büyük haksızlık olur. Zira, yorumlama ile birlikte JSM'nin şu görevleri de vardır.

Javac Oracle Corporation tarafından sağlanan Java Geliştirme Kiti'nda (JDK) bulunan Java derleyicisidir.

Java Geliştirme Kiti (JDK) Java geliştiricilerine yönelik bir Oracle Corporation ürünüdür. Java'nın kullanıma sunulmasından beri en geniş kullanım alanı bulan Java SDK'dır. 17 Ekim 2006'da, Sun GNU General Public License (GPL) altında sunulacağını duyurdu ki bu özgür yazılım olacağı anlamına geliyordu. Bunun gerçekleşmesi ise 8 Mayıs 2007'de oldu; Sun kaynak kodu OpenJDK'ya bağışladı.

CoffeeScript kaynaktan kaynağa derleme yapan ve JavaScript kodu üreten bir geliştirme aracıdır. Sözdizimi Python ve Ruby dillerine benzer, kod blokları girintiler ile ayrılır, JavaScript'in satır sonlarında noktalı virgül kullanma gibi yazım kurallarını da içermez, bu nedenle okunması kolaydır. Kullandığı bazı sözcükler ve yapılar sayesinde JavaScript ile uzun yazılabilecek ve okunaksız hale gelecek kodları neredeyse 3/1 oranında kısaltabilir ve kolay okunabilme imkânı sunar. Derleme işlemi çalışma zamanında değil geliştirme aşamasında yapıldığından tarayıcılarda performans kaybı söz konusu değildir.

Java bytecode, Java Programlama Dili'nde Java derleyicinin Java kodlarını makine dili yerine kendi alternatif biçime derlediği bytecode adı verilen binary dosyadır. Bu program Java Sanal Makinesi (JVM) adı verilen bir hayali bilgisayarın makine kodunu yaratır. Bu şekilde oluşturulmuş olan bytecode makine diline yorumlayıcı programlar vasıtasıyla çevrilir. Bytecode'unu kullanmanın bir avantajı JVM ile yorumlanan bu kodun herhangi bir derleme işlemine tabi tutulmadan bütün bilgisayarlarda çalışabilecek duruma gelmesidir. Dolayısıyla Java Programlama Dili internet uygulamaları için mantıklı bir kullanılma nedeni oluşturmaktadır.

<span class="mw-page-title-main">HHVM</span>

HipHop Sanal Makinası PHP ve Hack dillerindeki uygulamaları çalıştırabilen, anlık derleme destekli sanal makine uygulaması.

IL2CPU, C# programlama dili kullanılarak geliştirilmiş bir Ahead-Of-Time (AOT) derleyicisidir. Bu araç, .NET platformunda kullanılan Ortak Ara Dil kodunu makine koduna dönüştürmek için tasarlanmıştır. IL2CPU, özellikle Cosmos Projesi'nin bir parçası olarak öne çıkar ve bu proje tarafından geliştirilmiştir.

Dart, ilk kez Google tarafından geliştirilen ve daha sonraları ECMA tarafından standart (ECMA-408) haline getirilen açık kaynaklı ve genel-amaçlı bir programlama dilidir. Dart dili kullanılarak web, sunucu, mobil uygulamalar ve IoT cihazları geliştirilebilir.

<span class="mw-page-title-main">Android Nougat</span> Android işletim sisteminin yedinci ana sürümü

Android 7.0 - 7.1.2 "Nougat" Android sürümünün Google tarafından geliştirilen 14. versiyonudur. Yeni sürümün daha önceki kod adı Android N oldu. 9 Mart 2016 tarihinde önce mevcut Nexus cihazları için fabrika görüntüleri ile bir geliştirici önizlemesi olarak yeni "Android Beta Programı" ile piyasaya sürüldü. Versiyon API level 24'te oluşturulmuştur. Resmen ilk olarak Google Nexus cihazları için güncelleme almakla, 22 Ağustos 2016 tarihinde serbest bırakıldı. LG V20, Nuga ile piyasaya çıkan ilk akıllı telefon oldu.

<span class="mw-page-title-main">Android Runtime</span>

Android Runtime veya ART, Google tarafından geliştirilen, Android işletim sistemi tarafından kullanılan Bir uygulama çalıştırma ortamıdır. Android tarafından kullanılan işlem sanal makine, Dalvik-in yerini almıştır. ART yerli talimatlar içine uygulamanın bayt çevirisini (Bytecode) gerçekleştirir, daha sonra cihazın çalışma ortamını yürütür.

<span class="mw-page-title-main">Dalvik (yazılım)</span> Google tarafından yazılmış android için programlama dili

Dalvik yazılımı Google tarafından geliştirilmiş, Android için yazılmış uygulamaları yürüten ve şu an durdurulan sanal makine (VM) 'dir. Dalvik, Android 4.4 "KitKat" ve önceki Android sürümlerinin yazılım yığınının ayrılmaz bir parçasıdır; tipik olarak cep telefonları ve tablet bilgisayarlar gibi mobil cihazlarda ve daha yakınlarda Smart TV'ler ve giyilebilir bilgisayar gibi cihazlarda kullanılırdı. Dalvik, açık kaynaklı yazılım, Dan Bornstein tarafından yazılmıştır ve ismini Eyjafjörður, İzlanda da yerleşen Dalvik balıkçı köyünden almıştır. Android için programlar yaygın olarak Java ile yazılmış ve Java sanal makinesi için baytkodu derlemiştir. Daha sonra Dalvik bytecodeye çevrilmiş ve .dex ve .odex dosyalarında saklanır. Kompakt Dalvik yürütülebilir biçimi sistemleri için tasarlanmış, bellek ve işlemci hızı açısından sınırlandırılmıştır.

JIT ; bilgisayar kodunu çalıştırmanın bir yoludur. Yürütülmeden önce bir program yürütülürken çalışma zamanında derleyici içerir. Genellikle bu, kaynak kodu ve daha sonradan makine diline bytecode kod çevirisini içerir ve bu kod doğrudan doğruya çalıştırılır. Bir JIT derleyicisi uygulayan bir sistem genellikle yürütülen kodu sürekli olarak analiz eder, daha sonra derleme veya tekrar derlemeden elde edilen hızlanmanın bu kodun derlenmesinin yükünden daha ağır olacağı kod bölümlerini tanımlar.

TJIT, bir programın çalışma zamanında yürütülmesinin program optimizasyonunu yapmak için sanal makineler tarafından kullanılan bir tekniktir. Bu, sık yürütülen işlemlerin doğrusal bir sırasını kaydetmek, bunları yerel makine dili koduna derlemek ve yürütmek suretiyle yapılır. Bu yöntem bazında çalışan geleneksel just-in-time (JIT) derleyicilere karşıdır.

WebAssembly, yürütülebilir programlar için taşınabilir bir ikili kod biçimine karşılık gelen bir metin biçimidir. Bunun yanı sıra bu tür programlar ve bunların ana bilgisayar ortamı arasındaki etkileşimleri kolaylaştırmak için yazılım arabirimlerini de ifade eder.

<span class="mw-page-title-main">Phantom OS</span>

Phantom OS, çoğunlukla Rus programcılar tarafından yapılan bir işletim sistemidir. Kalıcı sanal bellek kavramına dayalıdır ve bir sanal makine, yönetilen kod ve bayt kodları kullanır. Unix benzeri sistemlerin klasik kavramlarına dayanmayan birkaç işletim sisteminden biridir. Öncelikli hedefi hem işletim sisteminde hem de uygulama yazılımında aynı anda basitlik ve etkinlik sağlamaktır. GNU Kısıtlı Genel Kamu Lisansı (LGPL) altında yayınlanan ücretsiz ve açık kaynaklı bir yazılımdır (FOSS).