Hacker News

RE#: kaip sukūrėme greičiausią regex variklį F#

komentarai

10 min read Via iev.ee

Mewayz Team

Editorial Team

Hacker News

Neprilygstamo greičio išlaisvinimas: RE# filosofija

Programinės įrangos kūrimo pasaulyje reguliarios išraiškos yra pagrindinė teksto analizės ir patvirtinimo priemonė. Tačiau, kaip žino bet kuris kūrėjas, prastai optimizuotas reguliarusis reiškinys gali tapti reikšminga našumo kliūtimi, sulėtinti duomenų apdorojimą ir paveikti vartotojo patirtį. „Mewayz“, kur mūsų modulinė verslo OS sukurta taip, kad būtų galima maksimaliai efektyviai valdyti sudėtingas įmonės darbo eigas, negalėjome sau leisti tokių kliūčių. Mums reikėjo regex variklio, kuris būtų ne tik galingas, bet ir nepaprastai greitas. Tai paskatino mus sukurti RE#, didelio našumo regex variklį, parašytą tik F#. Mūsų tikslas buvo panaudoti pirmąją funkcinę F# paradigmą, kad sukurtume sprendimą, kuris pralenktų net labai optimizuotas C++ bibliotekas, ir mums pavyko.

Kodėl F# reikalingas Regex variklis?

F# pasirinkimas buvo apgalvotas ir strateginis. Nors tokios kalbos kaip C arba C++ dažnai yra numatytoji našumui svarbiam kodui, mes tikėjome, kad unikalios F# savybės puikiai tinka sudėtingam būsenos valdymui, būdingam reguliariojo reiškinio vertinimui. Galingas modelių suderinimas, nekintamumas pagal numatytuosius nustatymus ir išraiškinga tipo sistema leido mums modeliuoti probleminę sritį natūraliau ir su mažiau klaidų. Užuot kovoję su rankiniu atminties valdymu ir sudėtinga rodyklės logika, galėtume sutelkti dėmesį į pagrindinį algoritmą. Tai puikiai dera su Mewayz filosofija kurti tvirtus, prižiūrimus ir didelio našumo modulius, kurie sudaro patikimos verslo operacinės sistemos pagrindą. F# suteikė mums galimybę parašyti greitą ir teisingą kodą.

Architektūra siekiant našumo: nuo NFA iki sudaryto vykdymo

Dauguma reguliariųjų reiškinių variklių yra sukurti remiantis nedeterministiniu baigtiniu automatu (NFA). Iššūkis slypi tame, kaip imituojate šį automatą. Tradiciniai varikliai dažnai naudoja interpretatoriaus modelį, kuris žingsnis po žingsnio pateikia NFA kiekvienam įvesties simboliui. RE# laikosi kitokio, agresyvesnio požiūrio: reguliariojo reiškinio šabloną sudarome tiesiai į specializuotą F# funkciją vykdymo metu. Šis procesas, žinomas kaip „Just-in-Time“ (JIT) kompiliavimas, paverčia abstrakčią šabloną į labai optimizuotą .NET tarpinės kalbos (IL) kodą. Rezultatas yra tai, kad derinant eilutę nebereikia interpretuoti grafiko struktūros, o atlikti specialiai pritaikytą funkciją, kuri atlieka patikrinimą siauroje kilpoje. Pagrindiniai mūsų architektūros komponentai:

  • Šablono skaidymas: reguliariosios išraiškos šablono suskaidymas į struktūrinį abstrakčiosios sintaksės medį (AST).
  • IL kodo generavimas: dinamiškai skleidžiamos optimizuotos IL instrukcijos, atspindinčios atitikimo logiką.
  • Talpyklą tausojantis dizainas: agresyvus sukompiliuotų funkcijų kaupimas talpykloje, kad būtų išvengta dažnai naudojamų šablonų pakartotinio kompiliavimo.
  • Nulinis atšaukimas: valdomo atgalinio sekimo įgyvendinimas naudojant efektyvias F# rekursines funkcijas ir uodegos skambučių optimizavimą.

Šis kompiliavimo veiksmas yra pagrindinė priežastis, dėl kurios RE# pasiekia nepaprastą greitį, dažnai sutrumpinant atitikimo laiką iki beveik vietinio vykdymo lygio.

„Sudarydami reguliariojo reiškinio šablonus į optimizuotą IL, efektyviai pašaliname vertėjo išlaidas, todėl RE# gali pranokti žemesnio lygio kalbomis parašytus variklius. Tai liudija F# metaprogramavimo galimybių galią“. – „Mewayz“ pagrindinės komandos vyriausiasis inžinierius

Mewayz OS integravimas ir poveikis

RE# kūrimas nebuvo akademinis užsiėmimas; jį lėmė realūs Mewayz platformos poreikiai. Mūsų verslo OS priklauso nuo greito duomenų apdorojimo, pradedant analize realiuoju laiku ir žurnalų analizei, baigiant vartotojo įvesties patvirtinimu ir duomenų srautų transformavimu. Prieš RE# susidūrėme su modulių, atsakingų už duomenų gavimą ir patvirtinimą, veikimo trikdžių. Integravę RE# kaip numatytąjį regex variklį visoje Mewayz OS, pastebėjome tiesioginius ir dramatiškus patobulinimus. Duomenų apdorojimo vamzdynai, kurie kažkada buvo sunkiai apkraunami, dabar veikia sklandžiai, užtikrindami, kad mūsų klientai galėtų kurti ir paleisti sudėtingas, daug duomenų reikalaujančias programas, nesijaudindami dėl teksto apdorojimo vėlavimų. Šis našumo padidinimas pagerina visą ekosistemą, todėl kiekvienas modulis, kuris priklauso nuo manipuliavimo tekstu, yra jautresnis ir keičiamas.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

Išvada: ateities inovacijų fondas

Sparčiausio F# regex variklio sukūrimas buvo reikšmingas pasiekimas, pabrėžiantis Mewayz įsipareigojimą siekti techninės kompetencijos. RE# įrodo, kad tokios kalbos kaip F# pasirinkimas kūrėjo ergonomikai nereiškia, kad reikia aukoti našumą; iš tikrųjų tai gali būti raktas jį atrakinti. Šio projekto sėkmė suteikia tvirtą pagrindą būsimiems „Mewayz“ OS moduliams ir užtikrina, kad pridėjus galingesnių darbo eigos automatizavimo ir duomenų analizės funkcijų, pagrindinės teksto apdorojimo galimybės niekada nebus ribojantis veiksnys. Sukūrėme variklį, kuris yra ne tik greitas šiandien, bet ir sukonstruotas taip, kad galėtų susidoroti su sudėtingais rytojaus duomenų iššūkiais.

Dažniausiai užduodami klausimai

Neprilygstamo greičio išlaisvinimas: RE# filosofija

Programinės įrangos kūrimo pasaulyje reguliarios išraiškos yra pagrindinė teksto analizės ir patvirtinimo priemonė. Tačiau, kaip žino bet kuris kūrėjas, prastai optimizuotas reguliarusis reiškinys gali tapti reikšminga našumo kliūtimi, sulėtinti duomenų apdorojimą ir paveikti vartotojo patirtį. „Mewayz“, kur mūsų modulinė verslo OS sukurta taip, kad būtų galima maksimaliai efektyviai valdyti sudėtingas įmonės darbo eigas, negalėjome sau leisti tokių kliūčių. Mums reikėjo regex variklio, kuris būtų ne tik galingas, bet ir nepaprastai greitas. Tai paskatino mus sukurti RE#, didelio našumo regex variklį, parašytą tik F#. Mūsų tikslas buvo panaudoti pirmąją funkcinę F# paradigmą, kad sukurtume sprendimą, kuris pralenktų net labai optimizuotas C++ bibliotekas, ir mums pavyko.

Kodėl „Regex“ variklio F#?

F# pasirinkimas buvo apgalvotas ir strateginis. Nors tokios kalbos kaip C arba C++ dažnai yra numatytoji našumui svarbiam kodui, mes tikėjome, kad unikalios F# savybės puikiai tinka sudėtingam būsenos valdymui, būdingam reguliariojo reiškinio vertinimui. Galingas modelių suderinimas, nekintamumas pagal numatytuosius nustatymus ir išraiškinga tipo sistema leido mums modeliuoti probleminę sritį natūraliau ir su mažiau klaidų. Užuot kovoję su rankiniu atminties valdymu ir sudėtinga rodyklės logika, galėtume sutelkti dėmesį į pagrindinį algoritmą. Tai puikiai dera su Mewayz filosofija kurti tvirtus, prižiūrimus ir didelio našumo modulius, kurie sudaro patikimos verslo operacinės sistemos pagrindą. F# suteikė mums galimybę parašyti greitą ir teisingą kodą.

Architektūra siekiant našumo: nuo NFA iki sudaryto vykdymo

Dauguma reguliariųjų reiškinių variklių yra sukurti remiantis nedeterministiniu baigtiniu automatu (NFA). Iššūkis slypi tame, kaip imituojate šį automatą. Tradiciniai varikliai dažnai naudoja interpretatoriaus modelį, kuris žingsnis po žingsnio pateikia NFA kiekvienam įvesties simboliui. RE# laikosi kitokio, agresyvesnio požiūrio: reguliariojo reiškinio šabloną sudarome tiesiai į specializuotą F# funkciją vykdymo metu. Šis procesas, žinomas kaip „Just-in-Time“ (JIT) kompiliavimas, paverčia abstrakčią šabloną į labai optimizuotą .NET tarpinės kalbos (IL) kodą. Rezultatas yra tai, kad derinant eilutę nebereikia interpretuoti grafiko struktūros, o atlikti specialiai pritaikytą funkciją, kuri atlieka patikrinimą siauroje kilpoje. Pagrindiniai mūsų architektūros komponentai:

Mewayz OS integravimas ir poveikis

RE# kūrimas nebuvo akademinis užsiėmimas; jį lėmė realūs Mewayz platformos poreikiai. Mūsų verslo OS priklauso nuo greito duomenų apdorojimo, pradedant analize realiuoju laiku ir žurnalų analizei, baigiant vartotojo įvesties patvirtinimu ir duomenų srautų transformavimu. Prieš RE# susidūrėme su modulių, atsakingų už duomenų gavimą ir patvirtinimą, veikimo trikdžių. Integravę RE# kaip numatytąjį regex variklį visoje Mewayz OS, pastebėjome tiesioginius ir dramatiškus patobulinimus. Duomenų apdorojimo vamzdynai, kurie kažkada buvo sunkiai apkraunami, dabar veikia sklandžiai, užtikrindami, kad mūsų klientai galėtų kurti ir paleisti sudėtingas, daug duomenų reikalaujančias programas, nesijaudindami dėl teksto apdorojimo vėlavimų. Šis našumo padidinimas pagerina visą ekosistemą, todėl kiekvienas modulis, kuris priklauso nuo manipuliavimo tekstu, yra jautresnis ir keičiamas.

Išvada: ateities inovacijų fondas

Sparčiausio F# regex variklio sukūrimas buvo reikšmingas pasiekimas, pabrėžiantis Mewayz įsipareigojimą siekti techninės kompetencijos. RE# įrodo, kad tokios kalbos kaip F# pasirinkimas kūrėjo ergonomikai nereiškia, kad reikia aukoti našumą; iš tikrųjų tai gali būti raktas jį atrakinti. Šio projekto sėkmė suteikia tvirtą pagrindą būsimiems „Mewayz“ OS moduliams ir užtikrina, kad pridėjus galingesnių darbo eigos automatizavimo ir duomenų analizės funkcijų, pagrindinės teksto apdorojimo galimybės niekada nebus ribojantis veiksnys. Sukūrėme variklį, kuris yra ne tik greitas šiandien, bet ir sukonstruotas taip, kad galėtų susidoroti su sudėtingais rytojaus duomenų iššūkiais.

Supaprastinkite savo verslą naudodami „Mewayz“

Mewayz vienoje platformoje sujungia 207 verslo modulius – CRM, sąskaitų faktūrų išrašymą, projektų valdymą ir kt. Prisijunkite prie daugiau nei 138 000 naudotojų, kurie supaprastino savo darbo eigą.

Pradėkite nemokamai šiandien →

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime