- Zig ve Rust'ta enum dizilerinin bellek verimliliğine dair bir yazı
- Rust'ta değişken boyutlu enum'lar (veya etiketli union'lar), en büyük varyant için yeterli veri ayırmayı gerektirdiğinden önemli ölçüde bellek parçalanmasına yol açabilir
- Bu bellek parçalanması, çok sayıda enum
Vec veya HashMap içinde toplandığında sorun yaratabilir
- Yazar, Rust'ta belirli enum'lar için özelleşmiş veri yapıları oluşturarak parçalanmayı azaltmanın neredeyse imkansız olduğunu öne sürüyor
- Zig ise daha esnek ve verimli veri yapısı dönüşümlerine izin veriyor
- Yazar, özellikle derleyiciler ve sözdizimi ağacı düğümleri bağlamında, bellek parçalanmasını azaltmanın önemini vurguluyor
- Yazı, paketleme verimliliğini artırmanın en yaygın yolunun, enum varyantlarını mümkün olduğunca küçük tutmak için etiketli indeksler kullanmak olduğunu öne sürüyor
- Zig'in aşamalı derlemesi, herhangi bir tür için genel olarak struct-of-arrays (SoA) dönüşümü yapan kapsayıcı türlere izin veriyor
- Yazar, parçalanmayı daha da azaltmak için variants arrays of arrays (AoVA) kavramını tanıtıyor
- Yazıda ayrıca boyut eşdeğerlik sınıfları kavramı da ele alınıyor; burada aynı boyuttaki varyantlar birlikte gruplanarak kapsayıcı içindeki toplam vektör sayısı azaltılıyor
- Yazar, bu veri yapısının bir prototipini Zig'de gerçekleştirdi ve alan türleri, bayt ve bit boyutları ile discriminator kontrollerine yönelik derleyici yerleşiklerini kullandı
- Yazı, Rust'ta son derece verimli genel veri yapıları yazmanın zorlayıcı olabileceği, ancak Zig'in
comptime özelliğinin daha yapılandırılabilir bellek yerleşimlerine imkan tanıdığı sonucuna varıyor
Henüz yorum yok.