- Rust’ın düzenli ifade kütüphanesini geliştiren ve optimize eden, Rust’ın
regex crate’inin bir yazarı bulunuyor.
regex crate’inin iç yapısını ayrı bir API olarak açığa çıkaran regex-automata adlı yeni bir crate oluşturuldu.
- Bu, iç yapısını bu düzeyde ayrı bir sürüm kütüphanesi olarak açığa çıkaran ilk düzenli ifade kütüphanesidir.
- Bu yazı, iyileştirme için yeniden yazım sürecini, sorunların nasıl çözüldüğünü ve
regex-automata API’sine dair bir rehberi sunuyor.
- Hedef kitle, Rust programcıları ve sonlu otomat tabanlı düzenli ifade motorlarının nasıl uygulandığıyla ilgilenen herkestir.
- Bu yazı,
regex crate’i ve geliştirme sürecinin kısa bir tarihçesini sunuyor.
regex crate’inin karşılaştığı sorunlar arasında yapılandırma, testler, belirli API talepleri ve tamamen derlenmiş DFA gereksinimi yer alıyor.
- Yeniden yazım, bu sorunları çözüyor ve daha esnek, daha iyi optimize edilmiş bir çözüm sunuyor.
regex-automatayı ayrı bir crate olarak yayımlamak, ana regex crate’ini karmaşıklaştırmadan ek API’lerin deneysel olarak geliştirilmesine olanak tanıyor.
- Bu yazı,
regex-automata kullanmanın faydalarını ve düzenli ifade motorları alanındaki olası iyileştirme fırsatlarını vurguluyor.
- Yazı,
regex crate API’sine komut satırı erişimi sağlayan regex-cli programını açıklıyor.
- Bu program; derlenmiş DFA’ları dosyaya serileştirme ve Rust kodu üretme gibi yardımcı araçlar içeriyor.
- Yazı, düzenli ifade desenlerinde Unicode’un etkisine dair örnekler gösteriyor.
regex-cli programı, regex crate ekosistemindeki çeşitli veri türlerini hata ayıklama amacıyla yazdırabiliyor ve görüntüleyebiliyor.
- Yakalama grupları kullanarak çoklu desen araması çalıştırabilen
regex-cli find komutu bulunuyor.
- Yazı, desen ayrıştırmadan NFA oluşturulmasına kadar düzenli ifade motorundaki veri akışını açıklıyor.
- Literal çıkarımı,
regex crate’inde kullanılan önemli bir optimizasyon tekniğidir.
- Literal çıkarımı, düzenli ifade deseninden literal değerleri çıkarıp metin içinde olası eşleşme adaylarını hızlıca belirlemek anlamına gelir.
- Hangi literallerin aranacağını seçmek, yanlış pozitifleri en aza indirmek ve gecikmeyi düşürmek açısından önemlidir.
- Literal çıkarımı, yanlış pozitifleri ve gecikme etkisini en aza indirmeyi hedefleyen sezgisel bir süreçtir.
- Literal çıkarımı için temel yaklaşım, daha uzun literallere öncelik vermek ve aşırı kısa ya da çok yaygın literallerden kaçınmaktır.
- Yazı, düzenli ifadelerde literal dizi optimizasyonunu açıklıyor.
- Literal dizi, tam eşleşen dizeler olarak ele alınan bir karakter dizisi kümesidir.
- Optimizasyon sürecinde, performansı artırmak için sonsuza genişletilebilecek diziler belirlenir.
- Yazı, farklı düzenli ifadelerin nasıl farklı literal diziler üretebildiğini anlatıyor.
- Yazı ayrıca metin içinde literal arama sürecini de ele alıyor.
- Tek alt dize ve çoklu alt dize aramalarında farklı algoritmalar kullanılıyor.
- Yazı, NFA’ların (deterministik olmayan sonlu otomatlar) kavramını ve düzenli ifade motorlarındaki rolünü tanıtıyor.
- NFA’lar başka türlere dönüştürülebilir; örneğin DFA’ların (deterministik sonlu otomatlar) uygulanmasında kullanılabilirler.
- Yazı, NFA’nın bileşenlerine dair ayrıntılı örnekler sunuyor ve bunları açıklıyor.
- Yazı, yeni NFA derleyicisinde epsilon geçişlerinin kullanımını azaltan optimizasyonlardan söz ediyor.
- Yeni NFA derleyicisi, birden fazla bayt aralığını içeren seyrek durumlar kullanarak NFA gösterimini optimize ediyor.
- Bu optimizasyon, ek yükü azaltıyor ve epsilon geçişlerine olan ihtiyacı ortadan kaldırıyor.
- Önceki derleyicide kullanılan bayt odaklı NFA yavaştı ve Unicode ile bayt odaklı NFA için ayrı derlemeler gerektiriyordu.
- Yeni NFA derleyicisi, Unicode sınıflarını işlemek için UTF-8 otomatını bayt odaklı NFA’ya entegre ediyor.
- Yeni derleyici, sıralı ve iç içe geçmeyen öğe dizilerinden minimal DFA’lar hesaplamak için Daciuk algoritmasını kullanıyor.
- Ters geçişler,
range trie adlı özel bir veri yapısı kullanılarak ele alınıyor.
- Yeni NFA derleyicisi, önceki derleyiciye kıyasla daha az durum içeren ve epsilon geçişi olmayan NFA’lar üretiyor.
- Ters küçültme optimizasyonu kullanılarak NFA boyutu daha da azaltılabiliyor, ancak bu derleme süresini artırıyor.
- Genel olarak yeni NFA derleyicisi, performansı artırıyor ve düzenli ifadelerde Unicode sınıflarının işlenmesini sadeleştiriyor.
- Yazı, karakter kodlamasıyla ilgili teknik sorunları tartışıyor.
- Bu sorun, seyrek karakterler ve farklı kodlama biçimlerindeki temsilleriyle ilgilidir.
- Yazı, belirli karakterlerden ve bunların ilgili kodlamalardaki sıklığından söz ediyor.
- Yazı, karakter kodlamasının karmaşıklığını ve olası zorluklarını vurguluyor.
- Bu yazı, karakter kodlamasıyla çalışan yazılım mühendisleri ve geliştiriciler için ilgi çekici olabilir.
- Yazı, düzenli ifade motorlarında NFA optimizasyon tekniklerini tartışıyor.
- Thompson NFA, epsilon geçişleri nedeniyle iyi ölçeklenmemesiyle bilinir.
- Yazı, literal alternatiflerini sınırlayarak epsilon geçişlerini azaltan bir NFA optimizasyonunu tanıtıyor.
- Yeni NFA derleyicisi, literal’lerden bir trie oluşturuyor ve bunu epsilon geçişleri en aza indirilmiş bir NFA’ya dönüştürüyor.
- Bu optimizasyon, soldan en önce eşleşme önceliğini koruyor ve arama performansını artırıyor.
- Yazı ayrıca Glushkov NFA ve NFA’nın tek bir bitişik bellek ayırımı içinde saklanmasına yönelik gelecekteki çalışmalardan da söz ediyor.
- Rust’ın
regex crate’i, özellikler ile arama performansı arasında denge kurmak için birden fazla düzenli ifade motoru kullanıyor.
- PikeVM, crate içindeki en güçlü düzenli ifade motorudur ve tüm düzenli ifade özelliklerini destekler.
- PikeVM, NFA’yı simüle eder
1 yorum
Hacker News görüşleri
regexcrate'i efsanevidir ve topluluk için değerli bir araçtır.regexcrate'indeki değişiklikleri ve iyileştirmeleri derinlemesine ele aldı.regex-automatacrate'i tüm metin veri yapılarıyla uyumludur.