2 puan yazan GN⁺ 2023-12-19 | 1 yorum | WhatsApp'ta paylaş

GCC tabanlı Rust derleyicisinin geliştirme durumu

  • GCC tabanlı Rust derleyicisi projesi gccrs, 2014'te başladı ve GNU Compiler Collection (GCC) içinde bir Rust derleyicisi gerçekleştirmeyi hedefliyor.
  • gccrs'nin hedefi, GCC 13 sürümüne dahil edilmekti; ancak bu gerçekleşmedi ve şu anda hedef, GCC 14'e (2024 ortasında yayımlanması bekleniyor) dahil olmak.
  • gccrs, Rust 1.49 sürümünü hedefliyor; bu, const generics'in tanıtılmasından önceki son sürüm.
  • gccrs projesinin önemli ilkelerinden biri, Rust'ın bir "superset"ini oluşturmamak ve rustc çıktısını birebir çoğaltmak.
  • Rust standart kütüphanesi, birden çok "crate"ten oluşuyor ve gccrs, bunlar arasında core ve alloc crate'lerinin derlenmesini desteklemeye odaklanıyor.
  • gccrs şu anda çeşitli eksik özellikler nedeniyle bu crate'leri derleyemiyor; borrow checker eksikliği ve GCC tarafından desteklenmeyen LLVM intrinsics'lerin yokluğu başlıca sorunlar.

GCC ekosisteminin avantajlarından yararlanma

  • gccrs geliştirilmesinin başlıca nedenlerinden biri, GCC'nin güvenlik eklentilerinden yararlanmayı mümkün kılması.
  • gccrs, hâlihazırda Sega Dreamcast homebrew topluluğu tarafından kullanılıyor ve GCC eklentileriyle unsafe Rust kodunda statik analiz yapılabiliyor.
  • gccrs çalışmaları sayesinde Rust belirtimine ek katkılar sağlanabildi ve proje, Rust'ın resmî spesifikasyonunun yazımına katılmayı amaçlıyor.

Geliştirilmekte olan özellikler

  • gccrs'de hâlâ birçok temel özellik eksik; bunlar arasında async/await, GCC'de bulunmayan LLVM intrinsics'ler ve format_args!() makrosu yer alıyor.
  • Polonius projesi, rustc'nin mevcut borrow checker'ındaki eksikleri gidermek için, referans ömürlerini farklı bir algoritmayla hesaplayan bir borrow checker uyguluyor.
  • format_args!() makrosu üzerindeki çalışmalar başladı; bu, diğer dize biçimlendirme makrolarına aktarılacak argümanları oluşturmak için gerekli.

rustc_codegen_gcc

  • rustc_codegen_gcc, gccrs'den daha olgun ve kapsamı daha dar olan başka bir GCC tabanlı Rust projesi.
  • rustc_codegen_gcc, libgccjit kütüphanesini kullanarak rustc'nin LLVM backend API'sine bağlanıyor ve derlemeyi rustc ile GCC'nin daha geç aşamalarında gerçekleştiriyor.
  • Ekim 2023 itibarıyla rustc_codegen_gcc, ek yama olmadan Rust for Linux'u derleyebiliyor.

Rust for Linux

  • Rust for Linux projesi, çekirdek için Rust kodunun rustc veya rustc_codegen_gcc ile nasıl derleneceğine dair belgeler sunuyor.
  • gccrs, Rust for Linux desteğini hedefliyor, ancak şu anda desteklenen rustc sürümüyle arasındaki büyük fark nedeniyle bunun gerçekleşmesi hâlâ uzak görünüyor.

GN⁺'nin görüşü

  • gccrs projesi, Rust dili için GCC tabanlı bir derleyici gerçekleştirmeyi hedefliyor; bu da Rust ekosistemine çeşitlilik katarken GCC'nin güvenlik eklentileri gibi mevcut araçlardan yararlanma potansiyeli taşıyor.
  • gccrs henüz Rust standart kütüphanesinin çekirdek bölümlerini derleyemese de, Sega Dreamcast homebrew topluluğunda şimdiden gerçek kullanım örnekleri bulması dikkat çekici.
  • Bu yazı, Rust dilindeki farklı derleyici uygulamaları ve bunların ekosistemi genişletme potansiyeline dair ilgi çekici bir bakış sunuyor.

1 yorum

 
GN⁺ 2023-12-19
Hacker News görüşleri
  • İlk yorumun özeti:

    • Yazıda gccrs'nin geliştirilme motivasyonuna dair iddianın zayıf olduğu düşünülüyor.
    • gccrs, GCC'nin güvenlik eklentilerinden yararlanmak için geliştiriliyor.
    • Linux çekirdeğine Rust desteği ekleyen Rust for Linux girişimi de başka bir neden.
    • Linux çekirdeğini yalnızca GNU araç zinciriyle derlemek isteyen çok sayıda çekirdek geliştiricisi olduğundan bu önemli bir motivasyon.
    • GCC'nin arka uç olarak neden kullanıldığı açıklansa da neden yinelenen bir ön uca ihtiyaç duyulduğu yeterince açıklanmıyor.
    • C++'ın hatalarından ders çıkarılmalı; farklı ön uçlar platformlar arası geliştirmeyi zorlaştırıyor.
    • gccrs'nin bir GNU Rust haline gelmemesine dikkat ediliyor ve rustc çıktısını birebir kopyalamaya çalışıyor.
  • İkinci yorumun özeti:

    • Rust'ın bir dil standardına ihtiyacı var.
    • Birçok kurum ve sektör, standart olmadan Rust'ı benimsemeyecektir.
    • C, C++, C#, JavaScript (ECMAScript) gibi diğer dillerin hepsinin bir standardı var.
  • Üçüncü yorumun özeti:

    • GCC-RS'e yönelik olumsuz tepkilere şaşırılıyor.
    • Bir dilin birden fazla uygulaması yoksa, o dil eksiktir.
  • Dördüncü yorumun özeti:

    • gccrs, LLVM'nin desteklemediği mimariler için Rust desteğini mümkün kılacak.
  • Beşinci yorumun özeti:

    • gccrs'nin rustcnin hatalarını ve tuhaflıklarını bile kopyalamaya çalışmasının bir hata olduğu düşünülüyor.
    • Rust'ın resmi bir spesifikasyonu yok; yalnızca tek bir referans uygulamasıyla belgelenmesi uzun vadeli bir zayıflık.
    • Mevcut kodun tüm uygulamalarda çalışmasını istemek makul, ancak bu yanlış kararları ve hataları kalıcı hale getirme sorunu yaratıyor.
    • Microsoft, eski programların çalışmaya devam etmesi için büyük çaba harcıyor.
    • Rust, dil gelişiminin erken aşamalarında bu yükü üstlenmemeli.
    • Dilin evrilebilmesi için QA ve QC'yi kabul etmesi gerekir.
    • Güçlü standarda sahip diller bu anlayışı benimser.
  • Altıncı yorumun özeti:

    • lwn.net bağlantısını paylaşarak abonelik yenilemeyi hatırlattığı için teşekkür ediliyor.
  • Yedinci yorumun özeti:

    • Linux zaten clang kullanılarak derlenebiliyor.
    • GNU "saflığı" uğruna bu tür yinelenen çabayı geliştirmek ve sürdürmek pek değerli görünmüyor.