دنبال فرمانی برای اجرا بگردید…
zev sdiff برای فایلهای منبع Zig یک مقایسهٔ ساختاری انجام میدهد: هر دو نسخه را با std.zig.Ast (تجزیهگر AST خود کامپایلر Zig) تجزیه میکند، بهجای آنکه خطهای متن را مقایسه کند.
برای هر تابع سطح بالا یا متد ساختار، zev نام، امضای عادیسازیشده (انواع پارامترها و نوع بازگشتی که مستقیماً از منبع تجزیهشده خوانده میشوند) و هشی از متن بدنهٔ آن را استخراج میکند. مقایسهٔ نسخهٔ قدیم و تازهٔ یک فایل یکی از این نتیجهها را میدهد:
added: تابعی که فقط در نسخهٔ تازه هستremoved: تابعی که فقط در نسخهٔ قدیم هستsignature_changed: همان نام تابع، با انواع پارامتر یا نوع بازگشتی متفاوتbody_changed: همان نام و امضا، با بدنهٔ متفاوتlikely_rename: تابعی که با یک نام ناپدید شده و با نامی دیگر و هش بدنهٔ یکسان دوباره آمده استیک نمونهٔ واقعی که با خود دستور zev sdiff اجرا شده است:
≈ fn body_will_change body changed≈ fn sig_will_change signature changed: (i32) i32 -> (i32, i32) i32↔ fn calc -> calculate_total identical body- fn will_be_removed removed+ fn brand_new_function addedتغییر نام با جفتکردن تابعی ناپدیدشده با تابعی تازه که هش بدنهٔ یکسان دارد تشخیص داده میشود؛ وقتی تابعی بدون تغییر پیادهسازیاش تغییر نام دهد، این روش واقعاً قابل اعتماد است. اگر نام و بدنهٔ یک تابع در یک ویرایش با هم تغییر کنند، بهصورت یک حذف و یک افزودن ساده گزارش میشود، نه تغییر نام، چون در این حالت نشانهٔ قابل اعتمادی دو نسخه را به هم وصل نمیکند.
با نامهای تکراری عمداً محتاطانه رفتار میشود: اگر نامی در هر کدام از دو نسخهٔ فایل بیش از یک بار بیاید (مثلاً دو ساختار متفاوت که هر کدام init خودشان را دارند)، آن نام کاملاً از جفتسازی مستقیم کنار گذاشته میشود و به تشخیص تغییر نام یا افزودن/حذف میرسد، بهجای آنکه خطر جفتکردن دو تابع نادرست زیر یک نام مشترک پذیرفته شود.
مقایسهٔ معنایی به زیرساخت موجود FileDiff/SemanticChange در zev وصل است؛ همان ساختاری که مقایسهٔ سادهتر و مبتنی بر الگوی متنی برای زبانهای دیگر به کار میبرد. فایلهای Zig به مقایسهٔ مبتنی بر AST فرستاده میشوند و همهٔ زبانهای پشتیبانیشدهٔ دیگر همچنان از مسیر متنی موجود استفاده میکنند. اگر فایل Zig بهدرستی تجزیه نشود (مثلاً خطای نحوی وسط ویرایش)، مقایسهٔ AST خودکار به همان روش متنی برمیگردد، پس همچنان مقایسهای تولید میشود.