हिन्दी

डेवलपर टूल · पाठ तुलना

Unix अंतर का एक संक्षिप्त इतिहास: हंट, मैकिलॉय और लाइन-आधारित मॉडल

· पेजभूमि

पाठ-अंतर एल्गोरिदम सॉफ्टवेयर-इतिहास

एक ऐतिहासिक समयरेखा एक सत्यापित आधुनिक LCS तुलना पैनल पर रुकती है
मूल ToolAcre वेक्टर चित्रण

1970 के दशक में बेल लैब्स से लेकर आज के टूल तक के निशान अलग-अलग हैं, जो बताते हैं कि लाइनों द्वारा पाठ की तुलना करना मानक क्यों बन गया और बाद में एल्गोरिदम ने इसे कैसे परिष्कृत किया।

'क्या बदला' की हर तस्वीर Unix डिफरेंस जैसी क्यों दिखती है - इस अवलोकन के साथ खुलती है कि कोड होस्टिंग साइट्स, समीक्षा टूल और ब्राउज़र टूल सभी एक ही मॉडल को प्राप्त करते हैं

आधुनिक समीक्षा स्क्रीन अक्सर अपरिवर्तित संदर्भ, निष्कासन और परिवर्धन का दृश्य व्याकरण साझा करते हैं। उस समानता को पूरी वंशावली कहानी में बदलना आकर्षक है, लेकिन यह भंडार Unix इतिहास के प्राथमिक संग्रह के बजाय ToolAcre के वर्तमान कार्यान्वयन का प्रमाण है।

इसलिए सुरक्षित आलेख दो कार्यों को अलग करता है। यह विस्तार से बताता है कि वर्तमान स्रोत क्या साबित करता है और कार्यपुस्तिका के ऐतिहासिक नामों, तिथियों और उद्देश्यों को बाहरी आधिकारिक संदर्भों की आवश्यकता के रूप में चिह्नित करता है। परिचितता कोई उद्धरण नहीं है, विशेषकर एल्गोरिथम लेखकत्व के लिए।

बेल लैब्स और फ़ाइलों की तुलना करने की समस्या - प्रारंभिक-Unix को स्रोत फ़ाइलों और डगलस मैकलरॉय और जेम्स हंट के काम की तुलना करने की आवश्यकता का वर्णन करता है

रूपरेखा प्रारंभिक कार्य का श्रेय बेल लैब्स के आंकड़ों को देती है। चार टेक्स्ट डिफ सोर्स फाइलों में से कोई भी उस इतिहास का दस्तावेज़ नहीं बनाता है, और कार्य आविष्कृत या बिना उद्धृत दावों को रोकता है। फलस्वरूप यह मॉड्यूल तयशुदा तथ्यों के रूप में जीवनी संबंधी विवरण, उद्धरण या तारीखों को नहीं दोहराता है।

भविष्य के ऐतिहासिक लेख में सीधे कागजात, मैनुअल या संस्थागत अभिलेखागार का हवाला दिया जाना चाहिए। जब तक वे स्रोत साक्ष्य सेट का हिस्सा नहीं होते, तब तक सुधार स्पष्ट है: ToolAcre आज एक लाइन-डिफ मॉडल प्रदर्शित कर सकता है, लेकिन यह मॉडल की मूल कहानी में हर चरण को प्रमाणित नहीं कर सकता है।

बेल लैब्स के लेखकत्व और प्रारंभिक-Unix इतिहास के लिए बाहरी प्राथमिक स्रोतों की आवश्यकता है जो इस भंडार में मौजूद नहीं हैं

वर्तमान कोड सामान्यीकृत न्यूलाइन सम्मेलनों पर विभाजित होता है और लाइनों के सरणियों की तुलना करता है। यह तथ्य आज की विस्तृतता को स्पष्ट करता है। यह साबित नहीं करता है कि टेलेटाइप्स या भंडारण की कमी के कारण ऐतिहासिक डिजाइन का चुनाव हुआ, क्योंकि कार्यान्वयन में कोई ऐतिहासिक सामग्री आयात नहीं की गई है।

विद्वता से परे भेद मायने रखता है। "यह टूल लाइनों पर काम करता है" परीक्षणों द्वारा प्रतिलिपि प्रस्तुत करने योग्य है। "पंक्तियाँ इस ऐतिहासिक कारण से चुनी गईं" एक आकस्मिक दावा है जिसके लिए उस अवधि के दस्तावेज़ों की आवश्यकता होती है। अच्छा तकनीकी लेखन वर्तमान कोड को पिछले इरादे के पूर्वव्यापी साक्ष्य के रूप में उपयोग नहीं करता है।

भंडार साबित करता है ToolAcre लाइनों की तुलना करता है; यह साबित नहीं होता कि ऐतिहासिक प्रणालियों ने उन्हें क्यों चुना

`toUnifiedText` `---` और `+++` लेबल उत्सर्जित करता है जिसके बाद प्रत्येक पंक्ति में रिक्त स्थान, माइनस या प्लस लगा होता है। यह पैच-आकार का है और डाउनलोड के लिए उपयोगी है, लेकिन इसमें कोई `@@` हंक हेडर नहीं है। इसे पूर्ण एकीकृत अंतर कहना यहां लागू किए गए प्रारूप को बढ़ा-चढ़ाकर पेश करेगा।

मार्ग सामान्य या संदर्भ प्रारूप भी उत्पन्न नहीं करता है। उन प्रारूपों के बीच ऐतिहासिक विकास को बाहरी मैनुअल के साथ समझाने लायक हो सकता है, फिर भी शिप किया गया आउटपुट एक संकीर्ण विवरण का समर्थन करता है: परिचित मार्करों और कॉलर द्वारा आपूर्ति किए गए लेबल के साथ एक पठनीय पूर्ण-पंक्ति स्ट्रीम।

ToolAcre एक पैच-आकार की स्ट्रीम निर्यात करता है, पूर्ण ऐतिहासिक भिन्न प्रारूप नहीं

रूपरेखा कहती है कि आधुनिक इंजन मायर्स का उपयोग करते हैं, लेकिन ToolAcre नहीं करते। इसके फ़ाइल हेडर में सादे LCS डायनेमिक प्रोग्रामिंग और दस्तावेज़ O(n·m) समय और अलग-अलग मध्य में मेमोरी के नाम हैं। कार्यान्वयन एक `Uint32Array` तालिका भरता है और इसके माध्यम से एक पथ का पुनर्निर्माण करता है।

यह कोई कॉस्मेटिक सुधार नहीं है. एल्गोरिथम नाम विशिष्ट जटिलता रखते हैं और व्यवहार को जोड़ते हैं। उपसर्ग और प्रत्यय ट्रिमिंग के साथ-साथ एक 2,000-लाइन कैप इस डिज़ाइन को बंधे हुए चिपकाए गए अंतरों के लिए उपयुक्त बनाती है। पाठकों को मायर्स जटिलता दावे को द्विघात मैट्रिक्स वाले कोड पर स्थानांतरित नहीं करना चाहिए।

ToolAcre सादे LCS गतिशील प्रोग्रामिंग का उपयोग करता है, मायर्स का नहीं

लाइन-आधारित तुलना अभी भी सिमेंटिक तुल्यता, स्थानांतरित ब्लॉक या फ़ॉर्मेटिंग इरादे की पहचान नहीं कर सकती है। वे सीमाएँ सीधे आदेशित स्ट्रिंग कुंजियों से अनुसरण करती हैं। एक कंपाइलर दो स्रोत अंशों को समतुल्य मान सकता है, जबकि एक लाइन अंतर रिपोर्ट प्रतिस्थापन, या आक्रामक सामान्यीकरण के तहत रिवर्स पर विचार कर सकता है।

मूल मॉडल सटीक रूप से उपयोगी रहता है क्योंकि इसका परिणाम निरीक्षण योग्य होता है। प्रत्येक पंक्ति में पाठ, प्रकार और पार्श्व-विशिष्ट पंक्ति संख्याएँ होती हैं। समीक्षक प्रत्येक पंक्ति को ध्यान में रखते हुए संरेखण से असहमत हो सकता है, जो कि अपारदर्शी "अर्थ परिवर्तित" स्कोर के साथ कठिन है।

इसमें क्या शामिल नहीं है - बाइनरी तुलना, डेल्टा संपीड़न और संस्करण-नियंत्रण आंतरिक

बाइनरी डेल्टा, कम्प्रेशन, रिपॉजिटरी ऑब्जेक्ट स्टोरेज और मर्ज इंटरनल इस मार्ग और साक्ष्य सेट दोनों से बाहर हैं। लेख स्मृति से भरने के बजाय अनुरोधित ऐतिहासिक कालक्रम को भी छोड़ देता है। किसी असत्यापित दावे को प्रकाशित करने की तुलना में किसी दावे का गायब होना बेहतर है।

उन विषयों के लिए, वर्णित प्रणालियों से प्राथमिक विनिर्देश और स्रोत एकत्र करें। दृश्य समानता से किसी फ़ाइल स्वरूप या "न्यूनतम" शब्द से किCAल्गोरिथम का अनुमान न लगाएं। ToolAcre का कॉन्फिगरेशन उस शब्द का उपयोग करता है, जबकि कार्यान्वयन सटीक तंत्र प्रदान करता है जो इसे योग्य बनाता है।

टेकअवे: एक अच्छे विचार के पचास वर्ष - वंशावली का सारांश देता है और नोट करता है कि ToolAcre की टेक्स्ट तुलना ब्राउज़र टैब में समान लाइन-आधारित मॉडल लागू करती है

टिकाऊ पाठ पद्धतिगत है: इतिहास को कार्यान्वयन से अलग करें। यह ब्राउज़र टूल सामान्यीकृत लाइन विभाजन, LCS पुनर्निर्माण, स्पष्ट विकल्प, एक भिन्न-लाइन कैप और स्थानीय रेंडरिंग साबित करता है। यह साबित नहीं करता कि आसपास की परंपराओं का आविष्कार किसने किया या क्यों किया।

वर्तमान पाठ का निरीक्षण करने के लिए मार्ग का उपयोग करें और अतीत को बताने के लिए प्राथमिक स्रोतों का उपयोग करें। वह सीमा ऐतिहासिक लेख को कम व्यापक बना सकती है, लेकिन यह इसमें शामिल प्रत्येक कथन को श्रवण योग्य बनाती है। परिशुद्धता एक परिष्कृत वंशावली को मात देती है जिसे बिना उद्धृत स्मरण से इकट्ठा किया गया है।