Info World: Microsoft, Rust konusundaki kararlılığını artırıyor.

Microsoft, Rust programlama dilini şirket içinde "Tier-1" (birinci sınıf/öncelikli) statüsüne yükseltti ve dili Windows geliştirme süreçleri için Microsoft Visual C++ araç zincirine entegre etmeye başladı.

Görsel: Fauzan Fitria / Shutterstock


Microsoft'un platformları nasıl geliştirdiğini ve teknolojileri harici kullanıcılara nasıl sunduğunu yıllarca gözlemledikten sonra şu bir gerçek ki; Microsoft için şirket içinde önem taşıyan her şey, kısa süre içinde Windows veya Azure üzerinde geliştirme yapan herkes için de önemli hale geliyor.


[IMG=884]https://miro.medium.com/v2/resize:fit:1200/0*uzlH6ggRyaCesURI.jpeg[/IMG]

Şirket içi araçlardan harici kullanıma yönelik araçlara geçiş süreci, genellikle Visual Studio ve Visual Studio Code'a eklenen yeni özellikler şeklinde gerçekleşir. Bu yetenekler çoğu zaman Microsoft bünyesinde yıllardır kullanılmakta olup, sizin de kendi yazılımlarınızda hemen kullanabileceğiniz bir olgunluğa erişmiş durumdadır. Bunu daha önce C# ve TypeScript'in geliştirilme süreçlerinde de defalarca görmüştük.




Microsoft'un Tier-1 programlama dilleri


C# ve TypeScript, tıpkı kendilerinden önceki C++ gibi, Microsoft'un şirket içinde "Tier-1" (birinci sınıf) olarak adlandırdığı dillerdir. Bu statü; düzenleyicilerden (editörler) derleyicilere kadar uzanan eksiksiz bir araç zinciriyle desteklenmeye, yerel SDK'lar ve optimize edilmiş kütüphaneler aracılığıyla Windows ve Azure ile entegrasyona ve Microsoft'un yazılım geliştirme yaşam döngüsü gerekliliklerine uyumluluğa dayanır. Milyarlarca kullanıcıya yönelik yazılım sunarken, bu unsurlar isteğe bağlı ekstralar değil, vazgeçilmez gerekliliklerdir.

[IMG=351]https://miro.medium.com/v2/resize:fit:1004/1*q94HrZdlYOqIEQRw8FQccA.png[/IMG]

Şimdiyse bu Tier-1 kulübünün yeni bir üyesi var: Rust dili. Bu durum şaşırtıcı olmamalı; zira Azure CTO'su Mark Russinovich, kurumunun Rust'a olan bağlılığından ve Rust'ın bellek güvenliği özelliklerinin Microsoft'un güvenlik stratejisindeki kilit rolünden sıkça bahsetmiştir. Ayrıca Microsoft, Rust Vakfı'nın kurucu üyelerinden biri olmuş; Rust'ın Windows araçlarına ve Microsoft'un derleme platformunun bir parçası olarak çalışan Rust derleyicilerine önemli yatırımlar yapmıştır. Artık Rust, Microsoft bünyesinde birinci sınıf geliştirme araçlarına ve iş akışlarına sahiptir.


Rust Vakfı web sitesinde yakın zamanda yayınlanan bir yazı, Microsoft'un Rust'ı mevcut Microsoft Visual C++ (MSVC) platformuyla entegre etmek için nasıl çalıştığını ayrıntılarıyla açıklıyor. Bu yaklaşım, blog yazısında "sorunsuz birlikte çalışabilirlik" olarak tanımlanan durumu mümkün kılacak ve Visual C++ özellikleri kullanıma sunuldukça Rust'ın da bu özelliklerden yararlanmasını sağlayacaktır. Visual C++'ın Rust ile birlikte kullanılması, Rust'ın sürücülerden çekirdeğin (kernel) kendisine kadar düşük seviyeli Windows hizmetleri oluşturmak için kullanılabilmesini sağlayacaktır.



Bunu, temel UNIX komutlarının Rust ile yeniden yazılmış bir uygulaması olan Coreutils'in Windows sürümünde zaten görmüştük. Coreutils, belirli UNIX komutlarını Windows terminali içinde kullanmanıza olanak tanıyarak Windows ile WSL (Windows Subsystem for Linux) üzerinde barındırılan Linux dağıtımları arasında geçiş yapmayı kolaylaştırır. Rust'ın "Tier-1" (birinci sınıf destek) eşiğini aşmasıyla birlikte, bellek sızıntılarını önlerken düşük seviyeli işlevlere erişim sağlayan, Rust tabanlı daha fazla Windows geliştirici aracının ortaya çıkmasını bekleyebiliriz.
İşin sırrı: yeni bir Rust kod oluşturucu

[IMG=870]https://miro.medium.com/v2/resize:fit:1133/1*9azwQBB88BWCIF-ovcbG_g.jpeg[/IMG]


Rust ile üretime hazır (production-grade) Windows yazılımları geliştirmenin anahtarlarından biri, Rust derleyicisi olan *rustc* için yeni bir kod oluşturma aracıdır. *rustc*, varsayılan LLVM'in ötesinde farklı kod oluşturma arka uçlarını (back-end) kullanacak şekilde tasarlanmıştır. Hâlihazırda GCC ve Cranelift ile çalışan varyantlar mevcuttur. Cranelift ile henüz karşılaşmadıysanız belirtelim; bu, *wasmtime* çerçevesinin bir parçası olarak kullanılan, Bytecode Alliance'a ait bir kod oluşturucudur. Yeni bir kod oluşturucu eklemek; Rust derleyicisinin API'lerine bağlanan, derleyicinin ürettiği ara kodu (bytecode) alan, yerel (native) kod üreten ve bunu seçtiğiniz derleme hattına (build pipeline) aktaran bir araç geliştirmeyi gerektirir.


Microsoft'un *rustc_codegen_utc* aracının işlevi tam olarak budur. Bu araç, mevcut MSVC yığınıyla (stack) çalışacak şekilde tasarlanmıştır; böylece kodunuzda herhangi bir değişiklik yapılmasına gerek kalmadan (uyumluluk yerleşik olarak sağlanır), Rust'ın Windows geliştirme platformunun olgun, kapsamlı şekilde test edilmiş ve kendini kanıtlamış bir bölümüne erişmesi sağlanır. Bu araç, kodu ve kütüphaneleri harmanlayan karmaşık projelerle çalışmak üzere Microsoft'un derleme sistemi tarafından yönetilen bir araç seti olan Visual C++ derleyicisinin arka ucuna doğrudan bağlanır.



Microsoft bu arka uca, "Universal Tuple Compiler" (Evrensel Tuple Derleyicisi) ifadesinin kısaltması olan UTC adını vermiştir. Ancak bu ismi herhangi bir yerde görmezsiniz; kodun asıl karşılığı *C2.DLL* adlı bir DLL dosyasıdır. Kod oluşturulup *.OBJ* dosyaları halinde sunulur; bu dosyalar daha sonra MSVC bağlayıcısına (linker) aktarılabilir ve ikili (binary) çalıştırılabilir bir dosya olarak teslim edilebilir. Bu sayede Rust araçları, Microsoft'un hem derleyicilerine hem de derleme araçlarına yıllar içinde kattığı birikimden yararlanabiliyor. Microsoft'un aynı çalışmaları yeniden yapmasına gerek kalmıyor; böylece mevcut güvenlik ve dayanıklılık özellikleri Rust derleyici zincirine de taşınmış oluyor. Ayrıca ortaya çıkan kod, aynı arka uçtan (back-end) geçmiş C ve C++ kodlarıyla uyumluluk gösteriyor.



Tek bir derleyici arka ucu (back-end) yönetmek, Rust desteği sağlamayı da daha az maliyetli hale getirecektir; zira bu sayede, birbirleriyle ve Windows SDK ile çekirdek (kernel) geliştirme süreçleriyle uyumsuz kalma ihtimali yüksek olan iki ayrı derleyici ekibi çalıştırma zorunluluğu ortadan kalkar. Rust'ın maliyet yükünün azaltılması geçiş sürecini hızlandıracağı gibi, Rust ve C++ bileşenlerini bir arada barındıran uygulamaların muhtemelen uzun bir süre devam edecek olan hibrit sunum modelini de destekleyecektir.



Bu yaklaşım ayrıca, Microsoft'un Rust geliştirme çalışmalarını GCC ve LLVM derleyicilerini kullanan platformlarla aynı seviyeye getirmektedir; söz konusu platformlar, Linux ve macOS uygulama geliştirmeye yönelik yatırımlardan yararlanarak Rust ile GCC ve Clang arka uçlarını halihazırda kullanabilmektedir. Böylece, hedeflediğiniz platform hangisi olursa olsun, Rust ile geliştirilen kodlar aynı birlikte çalışabilirlik yeteneklerine sahip olacaktır.





Geri kalanlarımız için Microsoft Rust araçları

Ne yazık ki geri kalanlarımız için durum şu: Tamamı açık kaynaklı projeler olan diğer Rust derleyici kod üretim (codegen) araçlarının aksine, `rustc_codegen_utc` şu anda yalnızca şirket içinde kullanılabiliyor. Microsoft bunu "üretim ortamına hazır" (production-ready) olarak tanımlıyor ve araç, yüzü aşkın Microsoft Rust projesinde kullanılıyor; bu da Redmond merkezli şirketin Rust'ı benimseme ölçeğine dair ilginç bir gösterge. Şu anda gizli tutulan tek Rust aracı bu değil; zira Microsoft'un eksiksiz Rust araç zinciri, çekirdek `rustc` derleyicisinin ve standart kütüphanelerin kendi oluşturduğu sürümlerini de içeriyor.




Bu, `rustc_codegen_utc` aracının geri kalanımızın kullanımına hiç sunulmayacağı anlamına gelmiyor. Geçmiş deneyimler, bu aracın ve şüphesiz diğer Rust araçlarının Visual Studio veya Visual Studio Code'a gelecek büyük bir güncellemeyle birlikte sunulacağını gösteriyor. Ancak zamanlamayı kestirmek her zaman zordur. Microsoft içinde çalışan araçlar harici geliştiriciler için son derece uygun olsa bile, bunların dünyanın geri kalanına ulaşması için daha fazlasına ihtiyaç vardır; örneğin dil sunucuları (language servers), IntelliSense desteği ve Visual Studio hata ayıklama (debugger) platformuyla tam entegrasyon gibi. Ayrıca, Microsoft'un özel derleme araçlarına erişimimizin olmadığı şirket ofisleri dışında kod derlemenin getirdiği ek gereksinimler de söz konusudur.





Rust derleyici forumlarındaki tartışmalarda Microsoft, test ve arka uç (back-end) altyapısı çalışmalarını öncelikle daha geniş kapsamlı Rust projesine entegre edeceğini (upstream) belirtti. Bu durum, halka açık bir sürümün yayınlanmasının biraz zaman alabileceğine, ancak projenin açık kaynaklı hale getirilmesinin de açıkça Microsoft'un gündeminde olduğuna işaret ediyor. `rustc_codegen_utc` aracının kamuya sunulması önemli; zira üçüncü taraf aygıt sürücüleri geliştirmek için Rust'ın benimsenmesi, bilgisayarların, sunucuların ve bulut sanal makinelerinin (VM'ler) daha kararlı hale gelmesine ve güvenlik risklerinin azalmasına yardımcı olabilir.

[IMG=882]https://miro.medium.com/v2/resize:fit:1200/1*W8KBrJgmsIlYtn24AhHfSQ.jpeg[/IMG]





VS Code'da Rust ile çalışmaya başlayın

Şimdilik Microsoft, Visual Studio Code ile entegre çalışan Rust araçları ve Windows üzerinde Rust ile geliştirme yapmaya yönelik rehberlik hizmeti sunuyor. VS Code için Microsoft'un Rust dili uzantısı olan `rust-analyzer`ı kullanmak için, kodunuzu derleyip oluşturmak üzere MSVC C++ Derleme Araçlarına (Build Tools) ve Windows API'lerine doğrudan erişim sağlayan, Microsoft tarafından geliştirilmiş bir Windows "crate"ine (Rust paketi) ihtiyacınız olacaktır. Otomatik bir süreç, Windows API'lerinden meta verileri toplayarak bunların her zaman güncel kalmasını sağlar. Microsoft ayrıca, Windows API çağrılarının ve yapılarının Rust diline nasıl uyarlandığına dair belgeler de sunmaktadır.




Yeni bir dilde Windows geliştirme süreçlerine aşinalık kazanmak adına, mevcut Rust araçlarıyla işe koyulmakta fayda var. Böylece dilin işleyişini ve programlama tarzınızda yapmanız gereken değişiklikleri kavrayarak, Rust'ın bellek güvenliği özelliklerinden yararlanmaya başlayabilirsiniz. Ardından Microsoft, geliştirdiği yeni dahili araçları genel kullanıma sunduğunda; bu araçları kullanarak, şirketin kendi C++ koduyla birlikte çalışması gereken sürücüler veya kütüphaneler gibi düşük seviyeli kodlar geliştirebilirsiniz.





Görsel: Simon Bisson / Info World


Kaynak: Microsoft doubles down on Rust - Simon Bisson / Info World

.