۲ آبان ۱۴۰۵ rtfeldman.com ۳ دقیقه مطالعه

بررسی امکان‌پذیری رقابت برنامه‌نویسی تابعی محض با زبان C

بررسی امکان‌پذیری رقابت برنامه‌نویسی تابعی محض با زبان C — How close can pure functional programming get to C?

خلاصه

این مقاله به بررسی عملکرد کتابخانه‌های فشرده‌سازی داده در زبان‌های برنامه‌نویسی تابعی مانند Roc و Lean در مقایسه با استاندارد طلایی C یعنی libdeflate می‌پردازد. نتایج نشان می‌دهد که زبان‌های تابعی با بهینه‌سازی مناسب می‌توانند به اختلاف عملکرد بسیار کمی نسبت به C دست پیدا کنند.

مقدمه و زمینه

زبان‌های برنامه‌نویسی تابعی (Functional Programming) معمولاً به خاطر ویژگی‌هایی مثل ایمنی حافظه، قابلیت پیش‌بینی و ابزارهای اثبات ریاضی شناخته می‌شوند، اما کمتر کسی آن‌ها را با هدف دستیابی به حداکثر کارایی زمان اجرا و رقابت مستقیم با زبان C انتخاب می‌کند. با این حال، نتایج اخیر نشان داده‌اند که زبان‌های تابعی مدرن در حال نزدیک شدن به رکوردهای سرعت زبان‌های سطح پایین هستند.

پیش‌تر، مقاله‌ای درباره کتابخانه فشرده‌سازی DEFLATE نوشته شده با زبان Lean 4 منتشر شد که توانسته بود پکیج معروف Rust یعنی miniz_oxide را با اختلاف پشت سر بگذارد. با این وجود، حتی آن پیاده‌سازی نیز نتوانست رقیب جدی برای استاندارد نهایی فشرده‌سازی یعنی libdeflate (نوشته شده به زبان C و مجهز به دستورات SIMD مختص سخت‌افزار) باشد.

ورود زبان Roc به میدان

برای به چالش کشیدن libdeflate، نویسنده به سراغ زبان Roc رفته است. زبان Roc یک زبان برنامه‌نویسی تابعی است که تمرکز صریحی روی کارایی زمان اجرا و سرعت کامپایل دارد. با وجود اینکه Roc هنوز به نسخه پایدار اول خود (0.1.0) نرسیده و اکوسیستم پکیج‌های آن عملاً بهینه‌سازی خاصی را تجربه نکرده بود، زیرساخت کلی زبان به اندازه‌ای قدرتمند بود که بتواند برای رقابت با libdeflate آماده شود.

نویسنده زمان زیادی را صرف بهینه‌سازی پکیج roc-deflate کرد؛ کتابخانه‌ای که توسط Niclas Ahden نوشته شده و حتی در کارهای واقعی تولیدی (Production) نیز مورد استفاده قرار می‌گیرد. هدف این بود که عملکرد این کتابخانه تابعی در APIهای غیرجریان‌شونده (Non-streaming) روی مجموعه داده‌های استاندارد Silesia سنجیده شود.

نتایج بنچمارک‌ها و جزئیات فنی

تست‌های عملکرد روی دو سخت‌افزار مختلف انجام شد:

  • یک دستگاه مک‌بوک پرو ۲۰۲۱ مجهز به تراشه M1.
  • یک سرور لینوکسی مجهز به پردازنده AMD Ryzen 9 3900X با معماری x64.

پس از اجرای مجموعه‌ای از بنچمارک‌ها روی متن‌ها و فایل‌های مختلف، نتایج بسیار جالب توجه بود. کتابخانه roc-deflate در مجموع میانگین ۱۳۴ بنچمارک مختلف را با اختلاف بسیار کمی نسبت به C به پایان رساند:

  • در پردازنده AMD Ryzen، نسخه Roc تنها حدود ۸.۹ درصد کندتر از libdeflate عمل کرد.
  • در تراشه M1، این اختلاف به شکل چشم‌گیری کاهش یافت و به تنها ۲.۶ درصد رسید.

چرا این موضوع برای مهندسان نرم‌افزار اهمیت دارد؟

برای توسعه‌دهندگان، این دستاورد نشان می‌دهد که مرز سنتی میان زبان‌های سطح پایین مانند C و زبان‌های سطح بالا یا تابعی محض در حالمر محو شدن است. امکان نوشتن کدهای ایمن و قابل‌نگهداری به سبک تابعی، بدون قربانی کردن شدید کارایی سخت‌افزار، چشم‌انداز تازه‌ای را برای توسعه سیستم‌های با کارایی بالا باز می‌کند.

این مطلب به‌صورت کاملاً خودکار و با هوش مصنوعی از مقالهٔ اصلی و بحث هکرنیوز تهیه شده و ممکن است خطا داشته باشد. حقوق مطلب اصلی متعلق به نویسندهٔ آن است. قوانین و گزارش مشکل

این خبر را با دیگران به اشتراک بگذارید

خبرهای فناوری در قالب پست و ویدیوی کوتاه، در اینستاگرام هکرنیوز بلاگ. به‌زودی
هر خبر به محض انتشار، به‌همراه پادکست روزانه در کانال تلگرام هکرنیوز بلاگ.