Ana Sayfa

WebAssembly Metin Formatı Ayrıştırıcısında %350 Performans Artışı

1 dk okuma

wasm-language-tools projesindeki WebAssembly Text Format (WAT) ayrıştırıcısının önceki sürümleri, performans açısından yetersiz kalıyordu. Geliştirici, ayrıştırıcıyı baştan yazarak önemli bir iyileşme sağladı ve yapılan benchmark testlerinde performansı %350 oranında artırdı. Bu başarı, çeşitli optimizasyon tekniklerinin bir araya getirilmesiyle elde edildi.

İlk olarak, winnow gibi bir ayrıştırıcı kombinatör kütüphanesi yerine el yazımı bir ayrıştırıcı kullanıldı. Ayrıştırıcı kombinatörleri kolaylık sağlasa da, el yazımı ayrıştırıcılar genellikle daha hızlıdır ve gelecekteki optimizasyonlara daha açık bir yapı sunar. İkinci olarak, WAT formatındaki sıkça kullanılan parantezler ve anahtar kelimeler gibi "iyi bilinen" yeşil token'lar ve yeşil düğümler önceden hazırlanarak LazyLock ile depolandı ve ihtiyaç duyulduğunda kopyalandı. Bu yaklaşım, aynı token ve düğümlerin tekrar tekrar oluşturulmasının önüne geçerek bellek ve işlemci yükünü azalttı.

Anahtar kelime eşleştirmesinde de iyileştirmeler yapıldı; sözcükleri yakalayıp dize karşılaştırması yapmak yerine, kaynak kodun bayt cinsinden ön eki kontrol edildi ve ardından sonraki karakterin bir tanımlayıcı karakter olup olmadığına bakıldı. Ayrıca, dizeler ve yorumlar dışındaki ASCII tabanlı token'lar için gereksiz UTF-8 sınır kontrollerini atlamak amacıyla get_unchecked metodu kullanıldı. Ayrıştırıcı, rowan::GreenToken yerine kendi Token tipini üreterek, daha maliyetli olan rowan::GreenToken nesnelerinin yalnızca gerçekten ihtiyaç duyulduğunda oluşturulmasını sağladı. Son olarak, rowan::GreenNodeBuilder'dan ilham alınarak, rowan::GreenNode oluşturulurken birçok geçici Vec oluşturulmasını engellemek için tek ve paylaşımlı bir Vec kullanıldı. Bu yöntem, bellek tahsis ve serbest bırakma işlemlerini minimize ederek performansa önemli katkı sağladı.

İçgörü

Bu optimizasyonlar, WebAssembly geliştirme araçlarının daha hızlı ve verimli çalışmasını sağlayarak geliştirici deneyimini doğrudan iyileştiriyor.

Kaynak