İlkay İlknur

just a developer...

.NET Native

2015 yılında .NET Framework vNext ile beraber adını daha sık duymaya başlayacağımız projelerden biri de .NET Native projesi. .NET Native projesi ile amaçlanan C# ile geliştirdiğimiz .NET Framework uygulamalarına C++ ile yazılmış uygulama performansı ve kaynak kullanımı avantajlarını getirmek. Bunu yaparken de developerların elinden sahip oldukları güzellikleri, avantajları almamak.

En Başa Dönersek...

.NET Framework'ü target eden uygulamalar derlendiğinde arka planda IL(Intermediate Language) kodu oluşturulur. Çalışma esnasında da bu oluşturulan IL kodu JIT(Just-In-Time) Compiler'ı tarafında native koda çevrilir. .NET Native projesi de en basit anlamda yazdığınız kodun derlenirken IL'e değilde doğrudan native koda çevrilmesini sağlıyor.

Avantajlar Neler ?

.NET Native'in getirdiği en büyük 3 avantaj uygulamaların daha hızlı açılması, daha hızlı çalışması ve daha optimize memory kullanması. Şimdiye kadar yapılan ölçümlere göre de .NET Native ile beraber Windows Store uygulamaları %60 oranında daha hızlı açılmakta ve %25 oranında da daha az memory kullanmakta.

.NET Native'in getirdiği bir diğer büyük avantaj da .NET Native ile derlenen uygulamanın çalışacağı makinada .NET Framework'ün kurulu olma zorunluluğunun olmaması. Çünkü derleme sırasında .NET Native uygulama içerisinde .NET Framework'te kullandığınız kısımları alıp uygulamanızın native kodu içerisine ekliyor ve böylece .NET Framework bağımlılığından da kurtuluyorsunuz.

C++ tarafinda sahip olduğumuz yukarıdaki avantajlara gördüğünüz gibi .NET Native ile C# tarafinda da sahip olabiliyoruz. Üstelik exception handling, memory management ve garbage collection gibi C++'da bizim düşünmemiz gereken noktalardan da yine soyutlanmış olarak  C# ve .NET Framework'ün getirdiği avantajları da kullanmaya devam edebiliyoruz.

Nasıl Deneriz ?

.NET Native, Visual Studio 14 CTP 3 ile Visual Studio 14 içerisine eklendi. Ancak .NET Native compilerı default olarak aktif değil. Bizim manuel olarak .NET Native compilerını aktifleştirmemiz gerekiyor. Bunun için ilk olarak Windows Store projemizin olduğu solution'ın properties'inden "Active Config"'i Any CPU'dan çıkarıp belirli bir mimariye(x86, x64 veya ARM) çekmemiz gerekiyor.

Active Config Değiştirme

Sonrasında ise Windows Store projesine sağ tıklayıp "Enable for .NET Native"  seçeneğine tıklıyoruz. Bu işlemle birlikte projemiz içerisine default.rd.xml dosyası ekleniyor. Bu dosya içerisinde .NET Native'in kullandığı runtime directive'ler bulunuyor. Ayrıca yine bu aşamada projemiz .NET Native compilerı tarafından analiz edilerek projenin .NET Native compilerı kullanmaya uygun olup olmadığı denetleniyor ve bir rapor çıkarılıyor.

Enable .NET Native Compiler

Son adımda ise artık projenin .NET Native app olarak derlenebilmesi için Windows Store projesine sağ tıklayarak projenin properties'ine gidiyoruz ve Build sekmesini açıyoruz. Build özellikleri içerisindeki "Compile with .NET Native tool chain" seçeneğini seçtikten sonra artık uygulamamız .NET Native compilerı tarafından derlenebilir duruma geliyor.

Enable :Net Native tool chain

Sorular sorular...

Bu yazıyı okuduktan sonra eminim ki aklınıza bazı sorular takılacaktır. Aşağıda aklınıza takılabilecek soruları tahmin edip cevaplamaya çalıştım :)

Soru : .NET Native sadece C# mı destekleyecek ?

.NET Native şuan sadece C#'ı destekliyor. Ancak ilerleyen zamanlarda RTM olmadan VB'de desteklenecektir.

Soru : .NET Native ile sadece Windows Store uygulamalarını mı derleyebiliyoruz ? WPF gibi desktop uygulamalarını derlemek mümkün mü ?

.NET Native'in temel çıkış noktası Windows Store uygulamaları. Universal App'ler de .NET Native tarafından desteklenmekte. Kişisel düşüncem .NET Native'in sadece Windows Store ve Windows Phone uygulamalarını destekleyerek ilk versiyona çıkacağı. Her ne kadar desktop ve server uygulamaları için de çok sayıda talep alsalar da ilk aşamada bu talebi karşılamayacaklarını düşünüyorum.

Soru : .NET Native ile derlenen uygulamalarda reflection kullanabiliyor muyuz ? 

.NET Native uygulamalarında reflection kullanmak mümkün. Ancak reflection için gereken metadataların büyük bir kısmı proje derlenirken compiler tarafından daha optimize bir kod yaratmak amacıyla siliniyor. Bu yüzden metadatasını kullanacağınız tipler için ek olarak default.rd.xml dosyasında tanımlama yapmak gerekiyor. Reflection konusu .NET Native tarafında ilginç bir konu. Bunun için ayrı bir makale yazmayı planlıyorum. :)



Yorum Gönder


Yorumlar

  • profile

    İlkay İlknur

    • 8
    • 6
    • 2015

    @Kemal evet Windows Forms'da .NET Native kullanmak mümkün değil.

  • profile

    Kemal --

    • 19
    • 5
    • 2015

    Merhaba, Türkçe içerikli bu konu için teşekkür ederim. anladığım kadarıyla .NET Native ile Windows Form Application üzerinde uygulama geliştiremeyeceğiz doğru mudur?