Ana Sayfa

RE#: F# ile Geliştirilen En Hızlı Regex Motoru Açık Kaynak Oldu

1 dk okuma

Bir yıl önce F# ile geliştirilen RE# adlı regex motoru, sadece .NET'teki rakiplerini geride bırakmakla kalmayıp, endüstri standardı birçok kıyaslamada diğer tüm endüstriyel regex motorlarını da geride bırakarak dünyanın en hızlısı unvanını kazandı. Bu motor, birleşim, kesişim ve tümleme gibi tam boolean operatör setini ve hatta bağlama duyarlı 'lookaround' özelliklerini desteklemesiyle öne çıkıyor. Tüm bu gelişmiş özelliklere rağmen, RE#, O(n) arama süresi karmaşıklığını koruyarak, benzeri görülmemiş bir performans ve yetenek kombinasyonu sunuyor. POPL 2025'te yayımlanan makalenin ardından, projenin açık kaynak olarak paylaşılmasıyla mühendislik detayları da gün yüzüne çıkıyor.

Günümüzdeki çoğu regex motoru, Thompson'ın NFA yapısı veya 'backtracking' yaklaşımlarından birine dayanır. Thompson tarzı motorlar (grep, RE2) doğrusal zaman garantisi sunarken, sadece temel operatörleri destekler. 'Backtracking' motorları ise (çoğu kullandığımız motor) 'backreference' ve 'lookaround' gibi gelişmiş özellikler sunar ancak kötü niyetli girdilerde üstel zaman karmaşıklığına ulaşarak ReDoS gibi güvenlik riskleri oluşturabilir. Her iki yaklaşım da kesişim ve tümleme gibi boolean operatörlerini desteklemez; bu operatörler 1964'ten beri biliniyor olsa da zamanla unutulmuş ve ancak son yıllarda yeniden ilgi görmüştür.

RE#, SRM ve .NET NonBacktracking motorundan ilham alsa da, daha önce yapılmamış bir mühendislik yaklaşımıyla geliştirildi. Geliştiricilerin temel amacı, bu boolean operatörlerinin gerçek dünyadaki faydasını vurgulamaktı. Hız, başlangıçta ikincil bir hedef olsa da, projenin "teorik bir merak" olduğu yönündeki eleştirileri gidermek ve geniş çapta kabul görmesini sağlamak için kritik bir öneme sahipti. Bir yıldan fazla süren deneyler sonucunda, hem teoride hem de pratikte mükemmel çalışan bir kombinasyon bulunarak RE#'nin gerçek dünya kullanım senaryoları için hızlı ve pratik hale gelmesi sağlandı.

İçgörü

RE#, boolean operatörleri ve O(n) zaman karmaşıklığı ile mevcut regex motorlarının sınırlamalarını aşarak, geliştiricilere daha güçlü ve güvenli metin işleme yetenekleri sunuyor.

Kaynak