Derleyici: Derleyici, bir programlama dilinde yazılmış kaynak kodunu (orijinal dil) başka bir programlama diline (hedef dile) dönüştüren bir programdır. Derleme, kaynak koddan (genellikle yüksek seviyeli bir dil) nesne koduna (genellikle düşük seviyeli bir dil veya makine dili) çevirme sürecidir ve bu kod doğrudan bir bilgisayar veya sanal makine tarafından yürütülebilir.
.NET platformunda, modeli yürütmenin farklı aşamalarında iki farklı derleyici vardır: biri Roslyn derleyicisi olarak adlandırılır, C# ve VB kodlarını montajlar halinde derler; Diğeri ise RyuJIT derleyicisi olarak adlandırılır ve bu derleyici, montajdaki IL (ara dil) kodunu makine koduna derler.
Bu makale Roslyn derleyicisiyle başlıyor. Nasıl çalıştığını anlamamız gerekmiyor, ama nasıl çalıştığını anlamak, ne için kullanılabileceğini bilmek için.
Başlangıçta, C# dilinin derleyicisi C++ dilinde yazıldı, daha sonra Microsoft, C# dilinde yazılmış yeni bir derleyici tanıttı: Roslyn, bu bir önyükleme derleyicisidir.
Önyükleme derleyicisi, belirli bir programlama dilinin derleyicisinin kendi dilinde yazılmış olması anlamına gelir. Bootstrap derleyicisinin her versiyonu, kendisinden önceki bir versiyonla derlenir, ancak ilk versiyonu, Roslyn'in C++ dilinde derlenen bir derleyici tarafından derlenmiş başka bir dilde yazılmış bir derleyici tarafından derlenmesi gerekir. Birçok programlama dili olgunlaşır ve C# ve Go gibi kendi derleyicilerini kullanarak kendi derleyicilerini yazar.
.NET platformunda, Roslyn derleyicisi C# ve VB kodlarını derlemekten sorumludur.
Mevcut geleneksel derleyicilerin çoğu, kaynak kodunu çalıştırılabilir dosyalara veya kütüphane dosyalarına dönüştüren "kara kutu" kalıplarıdır ve arada ne olduğunu bilmemizin bir yolu yok. Roslyn'in aksine, Roslyn API'ler aracılığıyla kod derleme sürecinin her aşamasına erişmenizi sağlar.
Çalışma mekanizması boru hattı tabanlıdır; dört aşamadan oluşur; her biri bağımsız bir modüldür ve her modül karşılık gelen bir API sağlar. Entegre geliştirme ortamları (IDE'ler), bu API'leri kullanarak kod vurgulama, akıllı ipuçları, yeniden yapılandırma araçları, performans analiz araçları ve daha fazlası gibi geliştirme verimliliğini artırmak için pratik araçlar sağlayabilir. Ayrıca, Roslyn ile geliştiriciler derleyiciyi kendi programlarında bir hizmet olarak kullanabilirler.
Roslyn tarafından sağlanan API'lerden yararlanarak kod örneklerini dinamik olarak üretin
İlk olarak, yeni bir ClassLibraryGenerator kütüphanesi oluşturun ve netstandard2.0 hedef çerçeve adını (TFM) hedefleyen bir .NET standart kütüphane projesi oluşturun. NuGet paketleri Microsoft.CodeAnalysis.Analyzers ve Microsoft.CodeAnalysis.CSharp eklenince, csproj aşağıdaki şekilde yapılandırılır:
Kendi kaynak üreticinizi aşağıdaki gibi belirten yeni bir C# dosyası oluşturun TestSourceGenerator.cs:
Bağlam nesnesinden derlenmiş giriş noktasına veya Ana yönteme erişebiliriz. MainMethod örneği, bir metod veya benzer yöntemin sembolünü temsil eden bir IMethodSymbol'dur (yapıcılar, yıkıcılar, operatörler veya nitelik/olay erişimcileri dahil). Microsoft.CodeAnalysis.Compilation.GetEntryPoint yöntemi, programın giriş noktasının IMethodSymbol'unu döndürür. Diğer yöntemler ise projenizdeki herhangi bir metod sembolünü bulmanızı sağlar. Bu nesnede, isim alanını (varsa) ve içinde bulunduğu türü çıkarabiliriz. Bu örnekteki kaynak, oluşturulacak kaynak kodunu şablonlayan bir interpolasyonlu bir dizidir; bu aralıklar içerdiği isim alanı ve tür bilgisini doldurur. İstem adıyla bağlama kaynak ekleyin. Bu örnek için, oluşturucu, konsol uygulamasında kısmi metodun uygulanmasını içeren yeni bir derleme kaynak dosyası oluşturur. Herhangi bir favori kaynağı eklemek için bir kaynak oluşturucu yazılabilir.
Aşağıdaki kodla yeni bir ConsoleApp4 konsol uygulaması oluşturun (üst düzey ifadeler olmadan):
Aynı zamanda, ClassLibraryGenerator proje referansını aşağıdaki gibi ekleyin:
Konsol uygulamasını aşağıdaki çıkışla başlatmayı deneyin:
Visual Studio'da, "Dependencies" - > "Analyzer" - > "ClassLibraryGenerator" - > "ClassLibraryGenerator.TestSourceGenerator" projesine tıklayın, oluşturulan kodu görmek için "Program.g.cs" dosyasına çift tıklayın, aşağıdaki gibi:
Istemi:Oluşturucunun kodunu değiştirmek, Visual Studio'nun yeniden başlatılması ve bunu görmek için gerekebilir。
Roslyn GitHub adresi:Bağlantı girişi görünür.
Referans:
Bağlantı girişi görünür.
Bağlantı girişi görünür.
Bağlantı girişi görünür. |