
مهندسان کامپایلر اپل (Apple) امروز یک درایور جدید با نام clang-ssaf-driver را به مخزن بالادستی LLVM/Clang افزودند. این ابزار برای انجام تبدیلهای کد منبع به کد منبع (Source-to-Source Transformations) روی کل پروژه در حین ساخت (Build) طراحی شده و نتایج را ارائه میکند.
SSAF چیست و چه میکند؟
SSAF مخفف چارچوب تحلیل ایستای مقیاسپذیر (Scalable Static Analysis Framework) است. درایور جدید میتواند قواعد تبدیل افزودنی را بپذیرد و نخستین قاعده آن cpp-bounded-buffers نام دارد.
- اجرای تبدیل روی پروژه هنگام ساخت و نمایش نتیجه
- تشخیص خلاصهها (Summaries) و تحلیل کلبرنامه (Whole-Program Analysis) موردنیاز هر تبدیل
- تولید وصله (Patch) برای ویرایشهای خودکار کد منبع، علاوه بر گزارش تبدیل
- پشتیبانی از قواعد تبدیل افزودنی؛ نخستین قاعده cpp-bounded-buffers است
cpp-bounded-buffers و بازنویسی اشارهگرهای C++
یکی از نخستین قواعد تبدیل در Clang SSAF، cpp-bounded-buffers است که اشارهگرهای خام (Raw Pointers) و آرایههای C++ را که به محدوده (Bounds) نیاز دارند، به bounded_ptr و bounded_array بازنویسی میکند.
جزئیات فنی و نحوه کار
Jan Korous از اپل در درخواست ادغام (Pull Request) توضیح داد: «ابزاری اضافه شده که یک تبدیل کد منبع را روی پروژه در حین ساخت اجرا میکند و نتیجه را ارائه میدهد. این ابزار میداند هر تبدیل به چه خلاصهها و چه تحلیل کلبرنامهای نیاز دارد؛ بنابراین کاربر فقط نام تبدیل و فرمان ساخت (Build Command) را مشخص میکند. cpp-bounded-buffers نخستین مورد است. این درایور پروژههایی را که با make ساخته میشوند، از طریق clang-ssaf-orchestrator-make هدایت میکند.»
درایور ویرایشهای کد منبع واحد پیوند (Link Unit) را به شکل وصله (Patch) مینویسد و گزارش تبدیل را همانند نمایش تشخیصهای کامپایلر چاپ میکند و آن را به قالب SARIF نیز مینویسد. یک ادغام (Merge) تنها تعارضهای میان ورودیهای خودش را حل میکند؛ بنابراین ویرایشی که با تعارض گزارششده همپوشانی داشته باشد، از وصله حذف میشود. با گزینه --apply درایور ویرایشها را با clang-apply-replacements اعمال میکند؛ ابزاری که پیش از ساخت جستوجو میشود و بررسی میکند که کد منبع در نهایت همانگونه که وصله نشان میدهد، شود.
به گفته اپل، این کار تعمیم ابزاری است که پیشتر با نام clang-reforge پیشنهاد شده بود. هدف، ساخت یک درایور تحلیل و تبدیل همهمنظوره و جدا از جزئیات خاص است.
زمان عرضه
انتظار میرود clang-ssaf-driver در LLVM 24 که بهار سال آینده منتشر میشود، در دسترس قرار گیرد.