Roslyn CTP; Önce Baştan Başlayalım

   Roslyn CTP makale serisine tam gaz devam edip 4. makaleye de ulaşmışken CTP’nin sevinciyle sizlere Roslyn mimarisi hakkında kuş bakışı bir bilgi vermediğimi fark ettim. İsterseniz bu makale serisinde daha da ilerlemeden önce hep birlikte Roslyn nedir? bize ne ifade eder/etmeli? görelim, şöyle bir baştan başlayalım.

CaaS

   Eğer C#’ın geleceğinden bahsettiğim sunumlarımdan birisine katıldıysanız ya da yaz okulu öğrencilerimden birisiyseniz yukarıdaki slayt eminim ki size tanıdık gelecektir. Roslyn bize derleyiciyi bir hizmet olarak (Compiler-as-a-Service, CaaS) sunmakta diye anlatmaya başlarım bu slaytı; peki nedir CaaS? Bize olan katkısı, yararı nedir? ya da bir yararı var mı?

   Uzun zamandır derleyiciler biz .net geliştiricileri için birer kara kutuydu; hazırladığımız uygulamamıza ait kaynak kodlarımız bir kapısından girer diğer kapıdan .net assembly’leri olarak çıkardı; fakat biz aradaki süreç hakkında ne bir fikir sahibi olabilirdik, ne de müdahale edebilirdik. Günümüzde giderek akıllanarak notepad çağını tarihin tozlu yaprakları arasına gömen IDE’ler, akıllandıkça da daha fazla ve karmaşık isterlerle karşımıza çıkmaya başladı. Eklenen her bir yenilik ise artık daha iyi bir analiz ve meta veri ister duruma geldi. Böylesi bir durumda da artık IDE’ler de en az bir derleyici kadar kodu iyi analiz edebilir duruma geldi. Öte taraftan, mevcut C# ve Visual Basic derleyicilerinin C++ ile yazılmış olması gerçeği vardı. Bu dillerin de her geçen gün giderek daha karmaşık hale gelmesi bir süre sonrasında C++ derleyicisinin bu karmaşıklığı analiz etmesini güçleştirmeye başlar oldu. Son olarak da geliştirilen yazılımlarımız var tabi ki; günümüz iş yaşamında giderek daha dinamik hale gelmeye zorlanan uygulamalar biz yazılım geliştiricilerin daha fazla “takla” atmasına neden olmaktaydı. Tüm bu farklı isterler ayrı ayrı ele alınması nedeniyle ortada farkında olmadan aynı dilleri leksikal, sentaktik ve semantik yönden analiz eden farklı farklı kodlar ortaya çıktı. İşte Roslyn projesi tam da bu karmaşıklığın içinde doğdu. Birincil amacı tek elden ve managed şekilde C# ve Visual Basic dillerini leksikal, sentaktik ve semantik yönden analiz edecek bir kütüphane oluşturmak olan Roslyn projesi sayesinde artık dilleri bir derleyicinin bakış açısı ile inceleyebilir oluyoruz.

   Tabi ki böylesi büyük bir managed kütüphane oluşturulmuşken bunu scripting gibi uygulamalara esneklik kazandıracak farklı yönlerde kullanmak istenilmesi oldukça mantıklı. Dili bir derleyici gibi görüyor olmanın verdiği güçle daha iyi analiz ve refactor  yapabilir, kendi alanımıza özgü dilimizi (Domain Specific Language, DSL) geliştirebilir ya da kendi kendine öğrenen, hatalardan ders çıkarak uygulamalar geliştirebiliriz. Bunlar benim aklıma gelen olası kullanım alanlarından sadece bir kaçı; emin ki sizin de bu konuda oldukça güzel örnekleriniz vardır.

   Roslyn projesi incelemeye başlarken öncelikle modern derleyicilerin kaynak kodlarını assembly’lere dönüştürdüğü boru hattını (pipeline) göz önüne almalıyız;

Modern derleyicilerin sahip olduğu boru hattı

   Roslyn projesi managed bir derleyici oluştururken aynı zamanda bu derleyici boru hattın her bir safhasını da birer bileşen olarak bizlere sunmaktadır;

DerleyiciAPIsi

  • Söz dizim ağacı API’si yardımıyla derleyicinin ayrıştırma safhasında kaynak kodu işlenmesiyle ortaya çıkan söz dizim ağacı ulaşabilmemiz sağlanacaktır
  • Sembol API’si yardımıyla derleyicinin beyan safhasında ortaya çıkardığı  hiyerarşik sembol tablosuna ulaşabilmemiz sağlanacaktır
  • Bağlayıcı ve akış ağacı analiz API’leri yardımıyla derleyicinin kaynak kodu üzerinde semantik analiz sonuçlarına ulaşabilmemiz sağlanacaktır
  • Yayınlama API’si yardımıyla ise IL kodlarının ortaya çıkışına ulaşabilmemiz sağlanacaktır

   Sunulan bu API’leri beraber kullanarak ortaya kullanılabilir bir assembly çıkartabileceğimiz gibi parça parça kullanarak bir kaynak kodu farklı yönlerden analiz edebilmemiz de mümkün. Örnek olarak; Roslyn ile bize sunulan API’ler detaylı incelendiğinde Visual Studio içerisinde yer alan aşağıdaki dil hizmetlerinde farklı API’leri kullanıldığını görebilirsiniz.

DilHizmeti

   Her şeye rağmen, mevcut haliyle Microsoft “Roslyn”’in henüz daha emekleme safhasında olan bir proje olduğunu ve henüz sadece Topluluk Ön izleme Sürümüyle (Community Technical Preview, CTP) karşımıza geldiğini göz önüne almalıyız. Visual Studio vNext (2011) sonrası bir tarihte yayınlanacak olan proje henüz o kadar dinamik ki, CTP çıkalı ilk haftasını doldurmadan aldığı geri bildirimler doğrultusunda kaynak kodlarında önemli değişiklikler gerçekleştirildi bile. Bu aşamada Microsoft geliştirme ekibi MSDN forumları ve Connect sitesi üzerinden yapılan geri bildirimlerle mevcut kodu şekillendirmekte.

   Serinin ilerleyen makalelerinde elimizi daha fazla koda bulaştırarak Roslyn CTP ile karşımıza çıkan yeni ufukları inceleyeceğim.

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

Bir Cevap Yazın

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