شکاف دیباگ در Rust پیش از آنکه مشکل ابزار باشد، مشکل نمایش داده است
نخستین پیمایش اختصاصی دیباگ Rust نشان میدهد مشکل توسعهدهندگان فقط دسترسی به دیباگر نیست؛ بسیاری از آنها پس از توقف اجرا، مقادیر آشنای Rust را بهروشنی نمیبینند. فرصت بعدی پروژه، بهبود نمایش دادهها، پشتیبانی از async و نگهداری آسانتر visualizerهاست.

نخستین پیمایش اختصاصی دیباگ Rust نشان میدهد مسئله فقط انتخاب دیباگر نیست. بیش از ۲۳۰۰ نفر پاسخ دادهاند، اما بیش از نیمی از آنها گفتهاند که در حال حاضر برای Rust از دیباگر استفاده نمیکنند. دیباگ با چاپ خروجی و ماکروی dbg! همچنان انتخاب پیشفرض است، چون اغلب راهاندازی و استفاده از آن سریعتر و سادهتر است.
قویترین سیگنال پیمایش به قابلمشاهدهبودن دادهها مربوط میشود. کمی بیش از ۷۴ درصد پاسخدهندگان، نمایش ضعیف مقادیر را یک مشکل دیباگر دانستهاند و بیش از ۵۵ درصد گفتهاند که نتوانستهاند متغیرها را چاپ کنند. شکایتها بهویژه درباره enumها و مجموعههایی مانند HashMap و Vec متمرکز بوده است؛ جایی که جزئیات پیادهسازی میتواند وضعیت واقعی موردنیاز توسعهدهنده را پنهان کند.
گامبهگام اجرا کردن نیز در موقعیتهایی که برنامههای Rust از نظر مفهومی پیچیدهتر میشوند، قابل اتکا نیست. کمی بیش از ۵۱ درصد پاسخدهندگان گفتهاند هنگام step کردن با مشکل روبهرو شدهاند. در میان آنها، کد async با کمی بیش از ۲۸ درصد رایجترین زمینه بود و پس از آن کدهای مبتنی بر macro با حدود ۲۳ درصد قرار داشتند. فقط یکچهارم پاسخدهندگان گفتهاند از دیباگر برای دیباگ کد async استفاده میکنند؛ هرچند گزارش هشدار میدهد که این موضوع ممکن است هم ناشی از ضعف ابزارها باشد و هم ناشی از استفاده محدود از برنامههای async.
بنابراین کاربردیترین برداشت از پیمایش، ماهیتی معماری دارد: بهبود دیباگ Rust شاید بیش از آنکه به اتصالهای بیشتر به دیباگرها نیاز داشته باشد، به یک لایه بهتر برای نمایش داده نیاز داشته باشد. گزارش پیشنهاد میکند enumها با variant واقعی خود نمایش داده شوند، مجموعهها محتویاتشان را بهجای چیدمان داخلی نشان دهند و مقادیر String و CString بهشکل متن دیده شوند. بهبود stack trace در async، گامبرداری بهتر در iteratorها و futureها و مستندات روشنتر برای راهاندازی نیز از پیشنهادهای دیگرند.
Rust همین حالا برای بخشی از این کار یک سازوکار دارد. ویژگی debugger_visualizer فایلهای Natvis برای دیباگرهای مایکروسافت یا اسکریپتهای pretty-printer مربوط به GDB را در اطلاعات دیباگ جاسازی میکند. مستندات Rust Reference میگوید این ویژگی نمایش مقادیر را بهتر میکند و میتوان آن را روی یک module یا ریشه crate اعمال کرد. بااینحال، نزدیک به ۶۲ درصد از پاسخدهندگانی که خود را نویسنده کتابخانه معرفی کردهاند، از این ویژگی خبر نداشتند. در گروه کوچکتری که آن را میشناختند اما استفاده نمیکردند، کمبود وقت و ندانستن روش نوشتن اسکریپتهای visualizer از موانع اصلی بود.
برای تیمهای زیرساخت Rust، درس فوری و عملی این است که usability دیباگر باید با مقادیری سنجیده شود که توسعهدهندگان واقعاً بررسی میکنند، نه فقط با اینکه breakpoint و stack trace کار میکنند یا نه. در سرویسها و اجزای سیستمی که Rust را با C، C++ یا Python ترکیب میکنند نیز باید مسیر دیباگ میانزبانی واقعبینانهای وجود داشته باشد؛ ۴۴ درصد پاسخدهندگان گفتهاند برنامههایی را دیباگ میکنند که Rust را با زبان دیگری ترکیب کردهاند و C رایجترین زبان همراه بوده است.
این گزارش یک راهحل واحد یا زمانبندی انتشار اعلام نمیکند. در عوض، یک فهرست اولویتدار برای نگهداری به دست میدهد: مقادیر را قابلفهم کنید، اجرای async را قابلردیابی کنید و ساخت و نگهداری visualizerها را آسانتر کنید. این اعداد حاصل پاسخهای یک پیمایشاند، نه یک بنچمارک کنترلشده از همه توسعهدهندگان Rust؛ گزارش همچنین تصریح میکند که گروه افرادی که استفاده از Rust را متوقف کرده بودند کوچک بوده است. با وجود این محدودیت، یافتهها معیار مشخصی برای آینده میسازند: آیا ابزارهای جدید دیباگ را از مراجعه به logها سریعتر میکنند یا نه.
خبرخوان را در ایمیل بگیرید
هر سیگنال تازه، مستقیم از خط تولید. بدون مزاحمت، لغو عضویت در هر زمان.


