- Git projesi, bundan sonra Rust’u çekirdeğe dahil edeceğini ve Git 3.0’dan itibaren Rust’un derleme için zorunlu bir gereksinim olacağını resmen duyurdu
- Bu yama serisi, geçmişte C99 özelliklerinin benimsenmesinde olduğu gibi deneysel bir adım (test balloon) niteliğinde ilerliyor; amaç Rust benimseme altyapısını kademeli olarak hazırlamak
- İlk adım olarak, neredeyse hiç bağımlılığı olmayan varint.c modülü Rust’a dönüştürülerek C-Rust birlikte çalışabilirliği ve derleme araçları doğrulanıyor
- Şu anda yalnızca Meson derlemesi destekleniyor; ileride Makefile desteği ile CI’da Rust derleme doğrulaması ve
cargo format tabanlı biçim tutarlılığı denetimi eklenmesi planlanıyor
- Bu, Git topluluğuna ve dağıtımcılara yeni Rust toolchain gereksinimlerine uyum sağlamak için zaman verirken, uzun vadede kod güvenliğini ve genişletilebilirliği artıracak önemli bir değişim
Rust benimsenmesinin arka planı
- Git, kararlılık ve sürdürülebilir bakım için dil düzeyinde evrimi değerlendiriyordu
- Rust’un benimsenmesi, bellek güvenliğinin güçlendirilmesi, modern toolchain’lerden yararlanılması ve performans optimizasyonu olasılığının kazanılması anlamına geliyor
- Ayrıca modern bir dil benimseyerek daha sağlam bir kod tabanı oluşturulmak isteniyor
- Git 3.0 sürümüyle birlikte Rust’un zorunlu hale geleceği önceden duyurularak ekosistemin hazırlanması için zaman kazanılması amaçlanıyor
- Rust kodunun uygulama kapsamı aşamalı olarak genişletilecek ve nihayetinde bazı çekirdek işlevlerin de Rust ile yeniden uygulanması planlanıyor
Deneysel yama serisi
- Rust’un ilk uygulandığı modül olarak varint.c seçildi
- Oldukça basit ve bağımlılığı yok
- C ↔ Rust interop doğrulaması mümkün
- Git’in genel işlevselliğini etkilemeden deney yapılabiliyor
- Tüm testler varint.rs sürümünde başarıyla geçti
Derleme sistemi değişiklikleri
- Şu anda Rust desteği yalnızca Meson derleme sistemine eklendi
- Gelecekte Makefile’a da Rust desteği eklenmesi planlanıyor
- CI ile ilgili çalışmaların da hazırlanması gerekiyor
- Rust derlemesinin ve çalışmasının doğrulanması
cargo format ile kod stili tutarlılığının sağlanması
- Diğer araçlar ve bakım otomasyonları
Gelecek planları
- Bu çalışmada odak noktası, Rust özelliklerinin kendisinden çok benimseme sürecinin denenmesi
- Sonrasında xdiff modülü dahil Git’in daha fazla iç işlevi Rust ile yeniden yazılabilir
- Rust kademeli olarak daha geniş alanda uygulanırken, tüm ekosistemin Rust tabanlı derleme ortamına uyum sağlaması teşvik edilecek
Çıkarımlar
- Git, tarihindeki en önemli dilsel dönüşümlerden birine hazırlanıyor
- Rust’un zorunlu hale gelmesiyle güvenlik, bakım kolaylığı ve uzun vadeli gelişim potansiyeli güvence altına alınabilir
- Dağıtımcılar ve geliştiriciler için gelecekte Git ekosisteminde Rust geliştirme ortamı kurmak zorunlu hale gelecek
1 yorum
Hacker News görüşleri
İlgili tartışma bağlantısı
Rust desteğinin de standartları oturmamış bir dil olduğu için zamanla uygulamasının çok geride kalabileceğinden (eskiden Java’da olduğu gibi) şüphe ediyor
Git zaten oldukça olgun bir araç gibi görünüyor ve yeni bir dil eklemeyi gerektirecek kadar büyük ölçekli yeni koddan ziyade bakım ve iyileştirme ihtiyacı varmış gibi duruyor
Linux’ta olduğu gibi sürekli yeni sürücülere ihtiyaç duyulan bir durumun aksine, Git’te bunu gerektirecek bir neden görmüyor
Kaçırdığı bir şey varsa bunu açıklayabilecek birini istiyor
Git’teki değişiklikler RelNotes’ta görülebilir ya da daha anlaşılır bir özet için GitHub blogundaki Git kategorisine bakılabilir
Örneğin git-branchless, Rust ile yazılmış bellek içi birleştirme gibi özellikler içeriyor
Rust ile ilgili daha fazla içerik o e-posta listesinde bulunabilir
(Bunun lehine ya da aleyhine bir değerlendirme yapmıyor, birilerinin bunu yapacağını söylüyor)
Git’i C ile geliştirmek isteyen neredeyse kimse yokken, Rust ile yeniden yazıma ilgi duyan geliştiriciler katılmaya hevesli
Git oldukça olgun görünüyor, dolayısıyla büyük miktarda yeni kodun eklenmesi de pek olası değil
Rust, C’ye kıyasla çok daha karmaşık
Gerçekten nesne yönelimli özellikler gerekiyorsa yalnızca C++98 kullanmak bile modern C++ ya da Rust’tan çok daha basit ve anlaşılır olurdu
Rust gelecekteki yamalar için değil, derleme sistemi içinde zorunlu olacak
Eğer yanlışsa tekrar düzeltilebileceğini ekliyor
Derleme sisteminin kendisini derlemek için mi gerekli olduğu, yoksa uygulamayı derlemek için de zorunlu olup olmadığı merak ediliyor
Git’e çok emek verdiğini ve çeşitli projeler yaptığını, Git’in hacklenebilirliğini kaybetmek istemediğini söylüyor
Hatta Rust’ın genel C’den (özellikle hataya açık C’den) öğrenmesi daha kolay olduğunu, Git ya da Linux kaynak kodunu öğrenmekten ise kesinlikle daha kolay olduğunu söylüyor
GitHub verisine göre C %50, Shell %38, Perl %4, kalanı ise TCL/Python vb.
Perl/TCL aslında daha da istisnai kalıyor
Proje büyürken sağa sola eklenmiş çok sayıda hack kod birikti ve artık güvenlik/performans iyileştirmeleriyle birlikte eski hack kodları temizleme zamanı geldi
Rust’ın buna uygun olduğunu düşünüyor
Git’in kısmen Rust kullanmasının, kendi yazdığı Git istemcisi ya da sunucusunu geliştirmesini engellemeyeceğini düşünüyor
Debian sürüm notlarında da Rust/Go paketleriyle ilgili sorunlar açıkça belirtiliyor
Rust paketleri derlenirken statik bağlama sorunları yüzünden sık sık yeniden derleme gerekebiliyor; bu da pratik kullanımda rahatsızlık yaratıyor
Linux işletim sistemlerinde gerekli olan kararlı ABI/paylaşımlı kütüphane sorununu Rust tarafı görmezden gelirse, C’den daha fazla şikâyet üretebilir
Büyük yazılım mimarilerinde daha dikkatli olunması gerektiğini düşünüyor
Örnekler için bu yazıda NonStop anahtar sözcüğünü aratmayı öneriyor
RESF gibi yerlerde “platform Rust’ı desteklemiyor” deniyor ama gerçekte çalışabilmesi için Rust derleyicisinin destek vermesi gerekiyor
git 2.x artık oturmuş göründüğü için uyumluluğu kıracak bir neden yokmuş gibi geliyor
Son dönem geliştirme kültürünün bu tür araç zinciri kullanımından uzaklaşıp uzaklaşmadığını sorguluyor
Kaynak kontrolü, derleme ve çalışma ortamları farklıydı; uzak kopyalama ya da uzaktan çalıştırma gerekiyordu ve derleme kurallarında hedef platform tespiti şarttı
Tek bir
--targetbayrağıyla yaklaşık 100 platform için ciddi bir sorun yaşamadan derleme yapılabildiği belirtiliyorAsıl sorunun bazı Git geliştiricilerinin eski/sabit geliştirme makinelerine bağlı kalması olduğu düşünülüyor
Çapraz derleme her zaman ikinci sınıf vatandaş muamelesi görüyor ve harici projelerde düzgün çalışması zaten beklenmiyor
Bazı Linux dağıtımları Raspberry Pi gibi sistemlerde yalnızca gerçek donanım üzerinde derlemeyi tercih ediyor
Bu yüzden kimse bunu doğru dürüst desteklemek için çaba harcamıyor
Özellikle Linux tarafı kötü durumda; glibc yapısı eskidiği için herhangi bir donanımda en düşük ortak glibc hedefini tutturmak zorlaştı
Çoğu proje çapraz derleme desteğini denemeye bile kalkmıyor
Zig bunu iyileştirmeye çalışıyor
Git proje ekosisteminin çekirdek araçlarından biri olduğu için, değişimin riskli olduğunu ve 6 ay gibi kısa bir sürede zorunlu bağımlılık yapılmasının tehlikeli olacağını düşünüyor
Bu karmaşıklık derleme zamanında daha fazla hatayı yakalama amacı taşısa da, sonuç olarak dilin kendisini oldukça karmaşık hale getiriyor
Bu yüzden benimsenmesini önermiyor
Çekirdeğin de benzer şekilde Rust’ı reddettiğini sandığını ekliyor
Zaten karmaşık olan çekirdeğe Haskell düzeyinde bir tip sistemi ve Lisp seviyesinde bir makro sistemi eklenirse karmaşıklığın daha da artacağını düşünüyor
serdeüzerinden Rust kodunu takip etmenin zor olduğunu söylüyorBuna karşılık Go’daki Unmarshal’ın takibinin çok daha kolay olduğunu belirtiyor
Çünkü derleyiciye daha fazla bilgi yüklenebiliyor
Serde ile büyük bir sorun yaşamadığını, hatta Go’daki Unmarshal’ı daha sık debug ettiğini belirtiyor
Çekirdeğin Rust’ı reddettiği iddiasının da aslında iki geliştirici arasında header’ların nereye konacağına dair bir anlaşmazlık olduğunu söylüyor
Rust’ın giriş eşiği C’den daha yüksek olsa da, “asgari Rust” ile “hızlı ve güvenli Rust” arasındaki fark, C’de olduğundan çok daha küçüktür
borrow checker kadar önemli bulunuyor
Sözdizimi de hoşgörülü bulunuyor
Linux çekirdeği gerçekte Rust’ı reddetmiş değil