Coregex؛ جایگزین سریع regexp در Go با شتابدهی SIMD
Coregex یک جایگزین سریع برای regexp در Go است که با چند موتور تطبیق و بهینهسازی SIMD کار میکند. اگر جستوجوی متن بخش سنگین برنامهتان است، این پروژه میتواند حسابی جالب باشد.

فهرست مطالب5 بخش
Coregex یک موتور Regex خالص برای زبان Go است که بهعنوان جایگزینی سریع برای بسته استاندارد regexp طراحی شده. این پروژه با انتخاب خودکار موتور تطبیق و استفاده از پیشفیلترهای SIMD تلاش میکند جستوجوی الگوهای متنی را، بهخصوص در ورودیهای بزرگ و پرتکرار، سریعتر انجام دهد.
#نکات کلیدی
- Coregex با Go نوشته شده و برای استفاده در محیطهای عملیاتی طراحی شده است.
- این موتور بسته به الگو، مناسبترین راهبرد تطبیق را بهصورت خودکار انتخاب میکند.
- شتاب معمول اعلامشده برای الگوهای واقعی بین ۱۵ تا ۲۴۰ برابر نسبت به regexp استاندارد Go است.
- در برخی حالتهای خاص، افزایش سرعت میتواند به بیش از ۱۰۰۰ برابر برسد.
- الگوی کامپایلشده را میتوان بهصورت همزمان میان چند goroutine به اشتراک گذاشت.
#چند موتور برای الگوهای متفاوت
بسته regexp استاندارد Go عمداً ساختاری ساده دارد و از یک موتور NFA استفاده میکند. این طراحی زمان اجرای O(n) را تضمین میکند، اما همه فرصتهای ممکن برای بهینهسازی عملکرد را به کار نمیگیرد. پروژه Coregex در GitHub با الهام از معماری regex-crate در Rust، رویکرد چندموتوره را به Go آورده است.
فرایند کار Coregex با تجزیه الگو، ساخت NFA، استخراج بخشهای ثابت و انتخاب راهبرد مناسب ادامه پیدا میکند. در معماری آن ۱۶ راهبرد دیده میشود که از جمله آنها میتوان به LazyDFA، PikeVM، OnePass، BoundedBacktracker، Teddy و AhoCorasick اشاره کرد. ورودی همچنین میتواند پیش از رسیدن به موتور اصلی از پیشفیلتر SIMD عبور کند.
این انتخاب خودکار اهمیت زیادی دارد، چون همه الگوهای Regex رفتار یکسانی ندارند. بعضی الگوها بخش ثابت مشخصی دارند، بعضی به جستوجوی کاراکترهای خاص وابستهاند و برخی نیز با پیمایش معکوس بهتر پردازش میشوند. Coregex تلاش میکند بدون نیاز به انتخاب دستی شما، راهبرد متناسب با هر الگو را به کار بگیرد.
#ادعای سرعت با یک توضیح مهم
توضیحات پروژه از افزایش سرعت کلی ۳ تا بیش از ۳۰۰۰ برابر نسبت به کتابخانه استاندارد سخن میگوید، اما عدد معمول برای الگوهای دنیای واقعی بین ۱۵ تا ۲۴۰ برابر اعلام شده است. بنچمارکهای میانزبانی معرفیشده در پروژه روی ورودی ۶ مگابایتی و پردازنده AMD EPYC اجرا شدهاند.
بیشترین اعداد به حالتهای خاص مربوط میشوند؛ یعنی جایی که پیشفیلتر میتواند بخش بزرگی از ورودی را اصلاً به موتور تطبیق نفرستد. نمونه مطرحشده، جستوجوی الگوی IP در متنی بدون رقم است. بنابراین هنگام ارزیابی Coregex بهتر است عملکرد آن را با الگوها و دادههای واقعی پروژه خودتان بسنجید، نه اینکه بیشترین عدد اعلامشده را برای همه کاربردها یکسان در نظر بگیرید.
#API آشنا و امکانات کمهزینهتر
Coregex بهعنوان جایگزینی با API مشابه regexp ارائه شده و نصب آن با دستور go get انجام میشود. این کتابخانه به Go 1.27 یا جدیدتر نیاز دارد و وابستگیهای حداقلی آن شامل golang.org/x/sys و github.com/coregx/ahocorasick است.
علاوه بر متدهای آشنای کامپایل و جستوجو، چند مسیر برای کاهش تخصیص حافظه در نظر گرفته شده است:
- بررسی وجود تطبیق با IsMatch، بدون تخصیص حافظه
- دریافت موقعیت یک تطبیق با FindIndices، بدون تخصیص حافظه
- پیمایش همه تطبیقها با AllIndex و AllString
- استفاده مجدد از بافر فراخواننده با AppendAllIndex
- تنظیم سقف حافظه نهان DFA و فعالکردن پیشفیلتر از طریق پیکربندی
الگوی کامپایلشده از نوع Regexp برای استفاده همزمان چند goroutine ایمن اعلام شده است. Coregex برای مدیریت وضعیت هر جستوجو از sync.Pool، مشابه بسته استاندارد Go، استفاده میکند. برای معماریهایی که شتابدهی موردنظر در دسترس نیست نیز مسیر جایگزین خالص Go وجود دارد.
این موتور در GoAWK نیز آزمایش شده و این بررسی عملی بیش از ۱۵ حالت مرزی را آشکار کرده که بنچمارکهای مصنوعی پیدا نکرده بودند. در کنار کد، مخزن پروژه شامل مستندات معماری و جزئیات بهینهسازی، مجوز MIT، راهنمای مشارکت و سیاست امنیتی است.
#جمعبندی
اگر برنامه Go شما مرتب حجم زیادی از متن را با Regex بررسی میکند، Coregex گزینهای قابلتوجه برای ارزیابی است. معماری چندموتوره، پیشفیلترهای SIMD، API آشنا و مسیرهای بدون تخصیص حافظه میتوانند جذاب باشند؛ بااینحال معیار واقعی، نتیجه آزمایش روی همان دادهها و الگوهایی است که برنامه شما در عمل پردازش میکند.
مطالب مرتبط
برای ادامه مطالعه
این یادداشتها بر اساس موضوع مشترک، همپوشانی برچسبها و تازگی انتشار انتخاب میشوند.
تازهلینوس توروالدز: کیفیت کد مهمتر از ابزار هوش مصنوعی است
لینوس توروالدز با ممنوعیت کلی ابزارهای هوش مصنوعی در برنامهنویسی موافق نیست. از نگاه او، چیزی که اهمیت دارد کیفیت کد و درک برنامهنویس از نتیجه نهایی است.

Beamer؛ کنترل همزمان ویندوز و مک با یک موس و کیبورد
اگه همزمان با دو کامپیوتر کار میکنید، Beamer اجازه میده هر دو رو با یک موس و کیبورد کنترل کنید؛ حتی وقتی یکی ویندوزی و دیگری مک باشه.

ffmpeg-skill؛ تدوین محلی ویدیو با Claude Code و Codex
پروژه متنباز ffmpeg-skill با ۴۲ ابزار آماده، تدوین و بررسی ویدیو را از طریق Claude Code، Codex، Cursor و کلاینتهای MCP روی سیستم کاربر انجام میدهد.
دیدگاهها
اولین نفری باش که دیدگاه میذاره