أدوات المطور · مقارنة النص
كيف يجد فرق النص الخطوط المتغيرة: LCS وخوارزمية مايرز
· كيف يعمل
فرق النص خوارزميات سير عمل المطور
يشرح فكرة أطول تسلسل لاحق مشترك وراء المقارنة القائمة على الخطوط ولماذا جعلتها خوارزمية مايرز سريعة بما يكفي للتشغيل على الفور، حتى داخل علامة تبويب المتصفح.
ملفان وسؤال واحد: أي الأسطر نجت؟ - مقارنة الإطارات كالعثور على أطول عدد من الخطوط المشتركة في كلا الإصدارين بدلاً من مطابقة أرقام الأسطر
لا تصل مراجعتان مع تسميات توضح الأسطر الباقية. ToolAcre يقوم أولاً بتقسيم كل نص إلى قائمة مرتبة، ثم يبحث عن تسلسل لاحق طويل يظهر في كلا القائمتين بنفس الترتيب. تصبح الخطوط الموجودة خارج العمود الفقري المشترك بمثابة إضافات أو عمليات إزالة بدلاً من التعديلات التخمينية.
النتيجة تحمل مواقف أصلية واحدة لكلا الجانبين. يحتوي الصف الذي لم يتغير على رقم على كل جانب، وإزالة فقط على اليسار، وإضافة على اليمين فقط. هذا الحساب يجعل القصة المعروضة قابلة للمراجعة حتى عندما تعطي الأسطر المتكررة أكثر من محاذاة معقولة.
لماذا يعمل الفرق على السطور، وليس على الأحرف - كيف يؤدي التقسيم على الأسطر الجديدة إلى تحويل النص إلى سلسلة من الوحدات القابلة للمقارنة ولماذا يجعل ذلك النثر يتصرف بشكل مختلف عن التعليمات البرمجية
يعامل التنفيذ السطر الكامل كوحدة المقارنة الخاصة به. ومن ثم فإن حدود السطر الجديد تشكل النتيجة: فتحرير كلمة واحدة داخل فقرة مخزنة على سطر واحد يحل محل ذلك السطر بأكمله، في حين أن نفس النثر المرتب جملة بعد جملة يمكن أن يعزل منطقة أصغر بكثير.
مقارنة الخط ليست تحليلًا للشخصية مخفيًا خلف شاشة مختلفة. يقوم `splitLines` بإنشاء صفائف، ويقوم الجدول LCS بمقارنة مفتاح سطر بآخر. تناسب هذه التفاصيل المتوقعة ملفات المصدر والتكوين، لكنها لا تستطيع إبراز الحروف الدقيقة التي تم تغييرها داخل بديل ذي مظهر مطابق.
أطول سلسلة فرعية مشتركة بعبارات واضحة - تستعرض فكرة LCS في مثال مكون من خمسة أسطر وتوضح كيف يصبح كل شيء خارج السلسلة اللاحقة عبارة عن إدراج أو حذف
تخيل الخطوط اليسرى A وB وC وD وE والخطوط اليمنى A وC وE. تشكل A وC وE سلسلة فرعية مشتركة مرتبة. يقع B وD خارجه، وبالتالي فإن النتيجة تشير إلى عمليتي إزالة وثلاثة صفوف غير متغيرة دون الحاجة إلى إقران أي من الخطين المحذوفين مع بديل.
يسجل الجدول، لكل زوج من المواضع المتبقية، أفضل طول مشترك متاح من هناك. وتسير عملية إعادة الإعمار إلى الأمام من خلال تلك القيم. مفاتيح متساوية تقدم كلا الجانبين. وإلا فإن القيمة المجاورة الأكبر تقرر ما إذا كانت ستصدر إزالة يسارًا أو إضافة يمينًا.
خوارزمية مايرز وسبب أهمية السرعة - تشرح، بدون صيغ، كيف يؤدي تتبع أقصر نص تحريري إلى الحفاظ على سرعة المقارنة في الملفات التي تحتوي على آلاف الأسطر
يسمي المصنف مايرز، ولكن `diff.js` ينفذ بشكل واضح البرمجة الديناميكية للتسلسل اللاحق الأطول المشترك. ينص تعليقها على الوقت والذاكرة للوسط المختلف. إن المطالبة بسلوك مايرز أو سلوك الرسم البياني الأقصر من شأنه أن يحل محل خوارزمية مألوفة للتعليمات البرمجية التي يتم شحنها بالفعل.
ToolAcre حدود تلك التكلفة قبل التخصيص. يتم إزالة البادئات واللاحقات المتساوية في تمريرات خطية، وقد يحتوي أي وسط مختلف على 2,000 أسطر على الأكثر. المصفوفة هي `Uint32Array`؛ يحتل أسوأ مربع موثق مسموح به حوالي ستة عشر ميغابايت بدلاً من القيم المعبأة غير المحدودة.
يستخدم ToolAcre جدول LCS، وليس خوارزمية مايرز المذكورة في المخطط التفصيلي
قارن سجل التغيير الذي يحتوي على "بحث مضاف" و"تصدير ثابت" و"مساعدة محدثة" بمراجعة تحتفظ بالإدخالين الأول والثالث ولكنها تُدرج "عوامل التصفية المضافة" قبل الأخير. تعمل الإدخالات الشائعة على تثبيت المسار، وتتم إزالة "التصدير الثابت"، وتتم إضافة "المرشحات المضافة".
لا تستدعي الخوارزمية هذا الزوج خطًا معدلاً. مفردات صفها متساوية فقط، إضافة وإزالة، فيظهر استبدال النص كحذف واحد يتبعه إضافة واحدة. يحسب الملخص تلك العمليات بشكل منفصل ويضع علامة على النصوص المتطابقة فقط عندما يكون كلا العددين صفرًا.
لماذا يمكن أن يبدو الاختلافان الصحيحان مختلفين - يوضح كيف تفسر العلاقات بين نصوص التحرير القصيرة المتساوية سبب إلقاء إحدى الأدوات اللوم على سطر فارغ وتلقي أداة أخرى باللوم على قوس الإغلاق
يمكن للخطوط المتكررة أو القابلة للتبديل أن تنتج عدة تسلسلات فرعية مشتركة بنفس الطول. ToolAcre يحل ربطًا واحدًا عن طريق تفضيل الإزالة عندما تكون قيمتا الجدول المجاورتين متساويتين. قد يختار التنفيذ الصحيح الآخر إضافة أولاً ويقدم محاذاة ذات مظهر مختلف وبنفس تكلفة التحرير.
ولهذا السبب يمكن أن يظهر سطر فارغ أو قوس إغلاق مرتبطًا بقطعة كبيرة مختلفة عبر الأدوات. لا يعني التناقض تلقائيًا فقدان محتوى المقارنة. اقرأ أرقام الأسطر الأصلية والصفوف المحيطة التي لم تتغير قبل التعامل مع اختلافات العرض التقديمي كادعاءات واقعية متنافسة.
ما لا يغطيه هذا - المقارنة الدلالية أو الهيكلية، واكتشاف الحركة، والتمييز على مستوى الكلمة، هي خارج نطاق ما يحسبه الفرق القائم على الخط
لا شيء في هذا المسار يوزع أشجار بناء الجملة، أو يتعرف على المعرفات المعاد تسميتها، أو يسمي الكتل المنقولة، أو يفهم معنى النثر. تنتهك الفقرة المنقولة متطلبات الترتيب المشترك ويمكن أن تظهر مرة واحدة عند إزالتها ومرة عند إضافتها. لا تقوم الأداة أيضًا بحساب التمييزات على مستوى الأحرف أو الكلمات داخل الصفوف.
هذه الإغفالات هي حدود، وليست أوضاعًا مخفية. استخدم مراجعًا مدركًا للغة للمطالبات الدلالية والتحكم في الإصدار لسجل الدمج. يجيب فرق النص على السؤال الأضيق حول كيفية اختلاف تسلسلين سطريين مرتبين، ثم يتيح للإنسان تفسير ما إذا كانت هذه التعديلات النصية مهمة.
الوجبات الجاهزة: ما تعنيه الخطوط المميزة حقًا - يلخص كيفية قراءة اختلاف السطر كأقصر قصة من التعديلات وكيف تقوم مقارنة النص الخاصة بـ ToolAcre بتشغيل هذا في علامة التبويب الخاصة بك دون تحميل أي شيء
اقرأ الصفوف الخضراء والحمراء كتفسير واحد مشتق من LCS، وليس كدليل على نية المؤلف. يؤدي تقليم البادئة واللاحقة إلى تغيير حجم العمل ولكن ليس محاسبة السطر النهائي. يظل النص الأصلي في كل صف حتى عندما توفر خيارات حالة الأحرف أو المسافة البيضاء مفاتيح أكثر مرونة للمطابقة.
يتم تنفيذ المقارنة من خلال وحدات المتصفح المستوردة ويتم عرضها باستخدام عقد نصية DOM؛ لا توجد نقطة نهاية للتحويل في مسار الأداة. جرب مثالاً مكونًا من خمسة أسطر، وقم بتبديل الجوانب، وقم بتنزيل الإخراج على شكل رقعة لترى كيف يغير الاتجاه الإضافات إلى عمليات الإزالة دون اختراع دلالات.