C# 7.2 Readonly Structs - Yazılım Mimarileri ve Tasarım Desenleri Üzerine

C# 7.2 Readonly Structs

Merhaba,

Yazılım dendiğinde çoğu meslektaşımın aklına “on binlerce veriyi doğru işleyebilmek ve bu işlenmiş verileri organize bir şekilde yönetebilmek” gelmektedir. Lakin ben deniz bu soruya karşılık bu cevabın her ne kadar doğruluğuna katılsamda ufak bir nüans ile tüm bu süreci performans odaklı değerlendirmekte ve “on binlerce veriyi doğru işleyebilmek ve bu işlenmiş verileri organize bir şekilde olabildiğince en yüksek performanslı yönetebilmek” şeklinde yorumlamaktayım.

Bir yazılımın performansı yüksek oranda ilgili yazılımın üretiminden sorumlu mühendis/uzman/programcının inşa ettiği kod yapısına, yaklaşımına ve bilgisine bağlıdır. Tabi bu oran her ne kadar yüksek olsada %100 olamayacağından dolayı küçük bir payıda kullanılan programlama dili ve mimarisi üstlenmekte ve o dilin özelliklerine bağlı olarak değişkenlik göstermektedir.

Kullanıcı taraflı olan performans süreçleri üzerine onlarca makale yazılabilir ve yazılmıştır. Amma velakin kullanılan dilin performans açısından zayıf olan noktalarına müdahale maksatlı temas edebilmek o dilin imkanları dahilinde mevcutsa mümkündür. Yok eğer dil buna müsade etmiyorsa eldekiyle yetinilecek ve olabilecek en iyi performans elde edilmeye çalışılacağından dolayı dilin yapısı odaklı performans değerlendirmelerini kapsayan içerikler pek fazla bulunmamaktadır.

Bizler ise bu içeriğimizde, pek fazla bulunmayan bu kaynaklardan birine el atacağız ve bir yandan .NET mimarisinin kendi çatısı altındaki dillere ne kadar düşünceli yaklaştığını göreceğiz. C# dilinde mikro düzeyde bir performansı hesaba katarak geliştirilmiş olan readonly structs özelliğini değerlendirecek ve programlama dilini ilgilendiren küçük bir performanslık durumun nasıl .NET tarafından dikkate alınıp önlendiğini inceleyeceğiz.

Readonly Structs Nedir?

C# 7.2 sürümü öncesi readonly tanımlanan bir struct değişkeninden çağrılan herhangi bir metot neticesinde derleyici ilgili metodun ilgili structı değiştirip değiştirmeyeceği durumunu bilmemesinden kaynaklı arkaplanda structı bir başka değişkene atamakta ve o değişken üzerinden ilgili metodu tetiklemekteydi.

Haliyle programlama dilini ilgilendiren bu durum gereksiz bir performans kaybına yol açmaktaydı.

C# 7.2 ile birlikte .NET bu durumu düzeltti ve readonly olarak tanımlanan struct değişkenleri için compiler tarafından arkaplanda olan bu lüzumsuz zahmete son verdi.

readonly struct MyStruct
{
    public int X { get; }
    public int Y { get; }
 
    public MyStruct(int x, int y)
    {
        X = x;
        Y = y;
    }       
}

Bu yapısal güncellemenin pratikte getirisi olan bir değişiklik ise readonly olarak tanımlanan struct içerisindeki alanlara sade ve sadece constructer üzerinden değer atanabilmesi, başka bir yerden buna izin verilmemesidir.

Şahsen ben .NET mimarisine ve C# diline, mikro düzeyde olsa bile performans lehine yapmış olduğu tüm yeniliklerden dolayı saygı duymakta ve bununla birlikte geleceğin saygın programlama dili olacağına kanaat getirmekteyim.

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar dilerim…

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Copy Protected by Chetan's WP-Copyprotect.