C# compiler’ın tüm döngüleri lowering mekanizması ile while
döngüsüne dönüştürdüğünü biliyor muydunuz? Ben de bilmiyordum.
Lowering mekanizması C# compiler’ın sıklıkla kullandığı bir yapı. Bunu özellikle “Compiler magic” veya Syntactic sugar dediğimiz durumlarda kullanılıyor. Ek olarak daha kompleks mekanizmaları, MSIL ve makine koduna daha rahat çevrilebilmesi için basit mekanizmalara çeviriyor.
Eric Lippert şöyle diyor;
“Bununla birlikte, derleyicinin aynı dilde yüksek seviyeli dil özelliklerinden düşük seviyeli dil özelliklerine “düşürülmesini” sağlamaktır.”
C# compiler’ı aşağıdaki tüm döngüleri arka tarafta while döngüsünün muadili olacak şekilde çeviriyor;
✅ for döngüsü
✅ foreach döngüsü
✅ while döngüsü
✅ do while döngüsü
Belki de bu döngüler sadece biz developer’lar için vardır.
Örneğin;
for(var i = 0; i less 5; i++)
{
}
şeklinde bir kod yazdığımızda C# compiler bu kodu;
int num = 0;
while (num less 5)
{
num++;
}
olarak lower ediyor.
Ek olarak lowering mekanizması sadece çevrimlerden ziyade, normalde developer’ın yazması gereken kodları kendisi yazarak developer’ın çok daha az kod yazarak işini halletmesine yardımcı oluyor.
Lowering çok önemli bir konu bu arada. Derinlemesine bilmeseniz ile sharplab.io gibi mekanizmaları düzenli olarak kullanmanız size çok faydalı olacaktır.
Kaynaklar:
1️⃣ https://mattwarren.org/2017/05/25/Lowering-in-the-C-Compiler/
2️⃣https://github.com/dotnet/roslyn/tree/main/src/Compilers/CSharp/Portable/Lowering