நிரலாக்கமானது குறியீட்டை விட அதிகம்

நிரலாக்கமானது குறியீட்டை விட அதிகம்

இது மொழிபெயர்ப்புக் கட்டுரை ஸ்டான்போர்ட் கருத்தரங்கு. ஆனால் அதற்கு முன் ஒரு சிறிய அறிமுகம் உள்ளது. ஜோம்பிஸ் எவ்வாறு உருவாகிறது? ஒவ்வொருவரும் ஒரு நண்பரையோ சக ஊழியரையோ தங்கள் நிலைக்கு உயர்த்த விரும்பும் சூழ்நிலையில் தங்களைக் கண்டறிந்துள்ளனர், ஆனால் அது பலனளிக்கவில்லை. மேலும், "இது வேலை செய்யாது" உங்களுக்காக அல்ல, ஆனால் அவருக்கு: அளவின் ஒரு பக்கத்தில் ஒரு சாதாரண சம்பளம், பணிகள் மற்றும் பல உள்ளன, மறுபுறம் சிந்திக்க வேண்டிய அவசியம் உள்ளது. நினைப்பது விரும்பத்தகாதது மற்றும் வேதனையானது. அவர் விரைவாக கைவிட்டு, மூளையைப் பயன்படுத்தாமல் தொடர்ந்து குறியீட்டை எழுதுகிறார். கற்றறிந்த உதவியற்ற தன்மையின் தடையை கடக்க எவ்வளவு முயற்சி எடுக்க வேண்டும் என்பதை நீங்கள் புரிந்துகொள்கிறீர்கள், மேலும் நீங்கள் அதை செய்ய மாட்டீர்கள். இப்படித்தான் ஜோம்பிஸ் உருவாகிறது, அதை குணப்படுத்த முடியும் என்று தோன்றுகிறது, ஆனால் இதை யாரும் செய்ய மாட்டார்கள் என்று தெரிகிறது.

அதைப் பார்த்தபோது லெஸ்லி லம்போர்ட் (ஆம், பாடப்புத்தகங்களிலிருந்து அதே நண்பர்) ரஷ்யாவிற்கு வருகிறது மற்றும் ஒரு அறிக்கையை வழங்கவில்லை, ஆனால் ஒரு கேள்வி-பதில் அமர்வு, நான் கொஞ்சம் எச்சரிக்கையாக இருந்தேன். ஒரு வேளை, லெஸ்லி ஒரு உலகப் புகழ்பெற்ற விஞ்ஞானி, விநியோகிக்கப்பட்ட கம்ப்யூட்டிங்கில் செமினல் படைப்புகளை எழுதியவர், மேலும் அவரை LaTeX - “Lamport TeX” என்ற எழுத்துக்களின் மூலம் நீங்கள் அறிந்திருக்கலாம். இரண்டாவது ஆபத்தான காரணி அவரது தேவை: வரும் ஒவ்வொருவரும் (முற்றிலும் இலவசமாக) அவருடைய இரண்டு அறிக்கைகளை முன்கூட்டியே கேட்க வேண்டும், அவற்றைப் பற்றி குறைந்தபட்சம் ஒரு கேள்வியைக் கொண்டு வர வேண்டும், அதன் பிறகுதான் வர வேண்டும். லாம்போர்ட் அங்கு என்ன ஒளிபரப்புகிறது என்பதைப் பார்க்க முடிவு செய்தேன் - அது நன்றாக இருக்கிறது! ஜோம்பிஸுக்கு சிகிச்சையளிப்பதற்கான ஒரு மேஜிக் இணைப்பு மாத்திரை இதுவே. நான் உங்களை எச்சரிக்கிறேன்: அதி சுறுசுறுப்பான வழிமுறைகளை விரும்புபவர்கள் மற்றும் அவர்கள் எழுதியதைச் சோதிக்க விரும்பாதவர்களை உரை கடுமையாக எரிக்கக்கூடும்.

ஹப்ரோகாட்டிற்குப் பிறகு, கருத்தரங்கின் மொழிபெயர்ப்பு உண்மையில் தொடங்குகிறது. படித்து மகிழுங்கள்!

நீங்கள் எந்த பணியை மேற்கொண்டாலும், நீங்கள் எப்போதும் மூன்று படிகளை கடக்க வேண்டும்:

  • நீங்கள் எந்த இலக்கை அடைய விரும்புகிறீர்கள் என்பதை முடிவு செய்யுங்கள்;
  • உங்கள் இலக்கை நீங்கள் எவ்வாறு அடைவீர்கள் என்பதைத் தீர்மானிக்கவும்;
  • உங்கள் இலக்கை அடையுங்கள்.

இது நிரலாக்கத்திற்கும் பொருந்தும். குறியீட்டை எழுதும்போது, ​​​​எங்களுக்குத் தேவை:

  • நிரல் சரியாக என்ன செய்ய வேண்டும் என்பதை முடிவு செய்யுங்கள்;
  • அதன் பணியை எப்படிச் செய்ய வேண்டும் என்பதைத் தீர்மானிக்கவும்;
  • பொருத்தமான குறியீட்டை எழுதுங்கள்.

கடைசி படி, நிச்சயமாக, மிகவும் முக்கியமானது, ஆனால் நான் இன்று அதைப் பற்றி பேச மாட்டேன். மாறாக, முதல் இரண்டைப் பற்றி விவாதிப்போம். ஒவ்வொரு புரோகிராமரும் வேலை செய்யத் தொடங்குவதற்கு முன் அவற்றைச் செய்கிறார்கள். நீங்கள் எதை எழுதுகிறீர்கள் என்பதை நீங்கள் முடிவு செய்யாத வரை நீங்கள் எழுத உட்கார மாட்டீர்கள்: உலாவி அல்லது தரவுத்தளம். இலக்கைப் பற்றிய ஒரு குறிப்பிட்ட யோசனை இருக்க வேண்டும். நிரல் சரியாக என்ன செய்யும் என்பதைப் பற்றி நீங்கள் நிச்சயமாக சிந்திக்கிறீர்கள், மேலும் குறியீடு எப்படியாவது உலாவியாக மாறும் என்ற நம்பிக்கையில் அதை இடையூறாக எழுத வேண்டாம்.

குறியீட்டின் இந்த முன் சிந்தனை எப்படி சரியாக நிகழ்கிறது? இதற்கு நாம் எவ்வளவு முயற்சி எடுக்க வேண்டும்? இவை அனைத்தும் நாம் எவ்வளவு சிக்கலான சிக்கலை தீர்க்கிறோம் என்பதைப் பொறுத்தது. நாம் ஒரு தவறு-சகிப்புத்தன்மை விநியோகிக்கப்பட்ட அமைப்பு எழுத வேண்டும் என்று சொல்லலாம். இந்த விஷயத்தில், குறியீட்டிற்கு உட்காரும் முன் விஷயங்களை கவனமாக சிந்திக்க வேண்டும். ஒரு முழு எண் மாறியை 1 ஆல் அதிகரிக்க வேண்டும் என்றால் என்ன செய்வது? முதல் பார்வையில், இங்கே எல்லாம் அற்பமானது மற்றும் எந்த சிந்தனையும் தேவையில்லை, ஆனால் ஒரு வழிதல் ஏற்படலாம் என்பதை நாம் நினைவில் கொள்கிறோம். எனவே, ஒரு பிரச்சனை எளிமையானதா அல்லது சிக்கலானதா என்பதைப் புரிந்து கொள்ள, நீங்கள் முதலில் சிந்திக்க வேண்டும்.

ஒரு சிக்கலுக்கு சாத்தியமான தீர்வுகளை முன்கூட்டியே சிந்தித்துப் பார்த்தால், தவறுகளைத் தவிர்க்கலாம். ஆனால் இதற்கு உங்கள் சிந்தனை தெளிவாக இருக்க வேண்டும். இதை அடைய, நீங்கள் உங்கள் எண்ணங்களை எழுத வேண்டும். டிக் கிண்டன் மேற்கோள் எனக்கு மிகவும் பிடிக்கும்: "நீங்கள் எழுதும் போது, ​​உங்கள் சிந்தனை எவ்வளவு மந்தமாக இருக்கிறது என்பதை இயற்கை காட்டுகிறது." நீங்கள் எழுதவில்லை என்றால், நீங்கள் சிந்திக்கிறீர்கள் என்று மட்டுமே நினைக்கிறீர்கள். மேலும் உங்கள் எண்ணங்களை குறிப்புகள் வடிவில் எழுத வேண்டும்.

விவரக்குறிப்புகள் பல செயல்பாடுகளைச் செய்கின்றன, குறிப்பாக பெரிய திட்டங்களில். ஆனால் நான் அவற்றில் ஒன்றைப் பற்றி மட்டுமே பேசுவேன்: அவை தெளிவாக சிந்திக்க உதவுகின்றன. தெளிவாகச் சிந்திப்பது மிகவும் முக்கியமானது மற்றும் மிகவும் கடினமானது, எனவே எங்களுக்கு இங்கே எந்த உதவியும் தேவை. குறிப்புகளை எந்த மொழியில் எழுத வேண்டும்? பொதுவாக, புரோகிராமர்களுக்கு இது எப்போதும் முதல் கேள்வி: நாம் எந்த மொழியில் எழுதுவோம்? சரியான பதில் எதுவும் இல்லை: நாங்கள் தீர்க்கும் பிரச்சினைகள் மிகவும் வேறுபட்டவை. சிலருக்கு, TLA+ என்பது நான் உருவாக்கிய விவரக்குறிப்பு மொழி. மற்றவர்களுக்கு, சீனத்தைப் பயன்படுத்துவது மிகவும் வசதியானது. இது அனைத்தும் சூழ்நிலையைப் பொறுத்தது.

மிக முக்கியமான கேள்வி: தெளிவான சிந்தனையை நாம் எவ்வாறு அடைவது? பதில்: நாம் விஞ்ஞானிகளைப் போல் சிந்திக்க வேண்டும். கடந்த 500 வருடங்களாகச் சிறப்பாகச் செயல்பட்ட சிந்தனை முறை இது. அறிவியலில் நாம் யதார்த்தத்தின் கணித மாதிரிகளை உருவாக்குகிறோம். இந்த வார்த்தையின் கண்டிப்பான அர்த்தத்தில் வானியல் ஒருவேளை முதல் விஞ்ஞானமாக இருக்கலாம். வானவியலில் பயன்படுத்தப்படும் கணித மாதிரியில், வான உடல்கள் நிறை, நிலை மற்றும் உந்தம் கொண்ட புள்ளிகளாகத் தோன்றும், உண்மையில் அவை மலைகள் மற்றும் பெருங்கடல்கள், ஏற்ற இறக்கங்கள் மற்றும் பாய்ச்சல்கள் கொண்ட மிகவும் சிக்கலான பொருள்கள். இந்த மாதிரி, மற்றதைப் போலவே, சில சிக்கல்களைத் தீர்க்க உருவாக்கப்பட்டது. நீங்கள் ஒரு கிரகத்தைக் கண்டுபிடிக்க விரும்பினால், தொலைநோக்கியை எங்கு சுட்டிக்காட்டுவது என்பதைத் தீர்மானிப்பதற்கு இது சிறந்தது. ஆனால் இந்த கிரகத்தின் வானிலையை நீங்கள் கணிக்க விரும்பினால், இந்த மாதிரி வேலை செய்யாது.

ஒரு மாதிரியின் பண்புகளை தீர்மானிக்க கணிதம் அனுமதிக்கிறது. இந்த பண்புகள் யதார்த்தத்துடன் எவ்வாறு தொடர்புபடுகின்றன என்பதை அறிவியல் காட்டுகிறது. நம் அறிவியல், கணினி அறிவியல் பற்றி பேசுவோம். நாங்கள் பணிபுரியும் உண்மை என்னவென்றால், பல்வேறு வகையான கணினி அமைப்புகள்: செயலிகள், கேம் கன்சோல்கள், நிரல்களை இயக்கும் கணினிகள் மற்றும் பல. கணினியில் ஒரு நிரலை இயக்குவது பற்றி நான் பேசுவேன், ஆனால், பெரிய அளவில், இந்த முடிவுகள் அனைத்தும் எந்த கணினி அமைப்புக்கும் பொருந்தும். எங்கள் அறிவியலில் நாம் பல்வேறு மாதிரிகளைப் பயன்படுத்துகிறோம்: டூரிங் இயந்திரம், ஓரளவு வரிசைப்படுத்தப்பட்ட நிகழ்வுகளின் தொகுப்பு மற்றும் பல.

திட்டம் என்ன? இது சொந்தமாக கருதக்கூடிய எந்த குறியீடு. நாம் ஒரு உலாவியை எழுத வேண்டும் என்று வைத்துக்கொள்வோம். நாங்கள் மூன்று பணிகளைச் செய்கிறோம்: நிரலின் பயனரின் விளக்கக்காட்சியை வடிவமைத்து, நிரலின் உயர்நிலை வரைபடத்தை எழுதவும், இறுதியாக குறியீட்டை எழுதவும். நாம் குறியீட்டை எழுதும்போது, ​​​​ஒரு டெக்ஸ்ட் ஃபார்மேட்டரை எழுத வேண்டும் என்பதை உணர்கிறோம். இங்கே மீண்டும் நாம் மூன்று சிக்கல்களைத் தீர்க்க வேண்டும்: இந்தக் கருவி எந்த உரையை வழங்கும் என்பதைத் தீர்மானிக்கவும்; வடிவமைப்பிற்கான ஒரு வழிமுறையைத் தேர்ந்தெடுக்கவும்; குறியீடு எழுத. இந்தப் பணிக்கு அதன் சொந்த துணைப் பணி உள்ளது: ஹைபன்களை வார்த்தைகளில் சரியாகச் செருகுவது. இந்த துணைப் பணியையும் நாங்கள் மூன்று படிகளில் தீர்க்கிறோம் - நாம் பார்ப்பது போல், அவை பல நிலைகளில் மீண்டும் மீண்டும் செய்யப்படுகின்றன.

முதல் படியில் ஒரு நெருக்கமான தோற்றத்தை எடுத்துக் கொள்வோம்: நிரல் என்ன சிக்கலை தீர்க்கிறது. இங்கே நாம் பெரும்பாலும் ஒரு நிரலை சில உள்ளீடுகளை எடுத்து சில வெளியீட்டை வழங்கும் செயல்பாடாக வடிவமைக்கிறோம். கணிதத்தில், ஒரு செயல்பாடு பொதுவாக ஜோடிகளின் வரிசைப்படுத்தப்பட்ட தொகுப்பாக விவரிக்கப்படுகிறது. எடுத்துக்காட்டாக, இயற்கை எண்களுக்கான ஸ்கொரிங் செயல்பாடு {<0,0>, <1,1>, <2,4>, <3,9>, …} என விவரிக்கப்படுகிறது. அத்தகைய செயல்பாட்டின் வரையறையின் களம் ஒவ்வொரு ஜோடியின் முதல் கூறுகளின் தொகுப்பாகும், அதாவது இயற்கை எண்கள். ஒரு செயல்பாட்டை வரையறுக்க, அதன் டொமைன் மற்றும் சூத்திரத்தை நாம் குறிப்பிட வேண்டும்.

ஆனால் கணிதத்தில் உள்ள செயல்பாடுகள் நிரலாக்க மொழிகளில் உள்ள செயல்பாடுகளைப் போல இருக்காது. கணிதம் மிகவும் எளிமையானது. சிக்கலான எடுத்துக்காட்டுகளுக்கு என்னிடம் நேரம் இல்லை என்பதால், எளிமையான ஒன்றைக் கருத்தில் கொள்வோம்: C இல் ஒரு செயல்பாடு அல்லது ஜாவாவில் நிலையான முறை இரண்டு முழு எண்களின் மிகப் பெரிய பொது வகுப்பினை வழங்கும். இந்த முறையின் விவரக்குறிப்பில் நாம் எழுதுவோம்: கணக்கிடுகிறது GCD(M,N) வாதங்களுக்கு M и Nஅங்கு GCD(M,N) - ஒரு செயல்பாட்டின் டொமைன் முழு எண்களின் ஜோடிகளின் தொகுப்பாகும், மேலும் திரும்பும் மதிப்பு மிகப்பெரிய முழு எண் ஆகும் M и N. இந்த மாதிரியுடன் யதார்த்தம் எவ்வாறு ஒப்பிடப்படுகிறது? மாடல் முழு எண்களுடன் செயல்படுகிறது, மேலும் சி அல்லது ஜாவாவில் 32-பிட் உள்ளது int. இந்த மாதிரியானது அல்காரிதம் சரியானதா என்பதை தீர்மானிக்க அனுமதிக்கிறது GCD, ஆனால் அது வழிதல் பிழைகளைத் தடுக்காது. இதற்கு மிகவும் சிக்கலான மாதிரி தேவைப்படும், இதற்கு நேரமில்லை.

ஒரு மாதிரியாக செயல்பாட்டின் வரம்புகளைப் பற்றி பேசலாம். சில நிரல்கள் (ஆப்பரேட்டிங் சிஸ்டங்கள் போன்றவை) குறிப்பிட்ட வாதங்களுக்கு ஒரு குறிப்பிட்ட மதிப்பை மட்டும் வழங்குவதில்லை; அவை தொடர்ந்து இயங்கும். கூடுதலாக, ஒரு மாதிரியின் செயல்பாடு இரண்டாவது படிக்கு மிகவும் பொருத்தமானது: சிக்கலை எவ்வாறு தீர்ப்பது என்பதைத் திட்டமிடுங்கள். Quicksort மற்றும் Bubble sort ஆகியவை ஒரே செயல்பாட்டைக் கணக்கிடுகின்றன, ஆனால் அவை முற்றிலும் வேறுபட்ட அல்காரிதம்கள். எனவே, நிரலின் இலக்கை அடைவதற்கான வழியை விவரிக்க, நான் மற்றொரு மாதிரியைப் பயன்படுத்துகிறேன், அதை நிலையான நடத்தை மாதிரி என்று அழைக்கலாம். நிரல் அதில் அனைத்து செல்லுபடியாகும் நடத்தைகளின் தொகுப்பாக குறிப்பிடப்படுகிறது, அவை ஒவ்வொன்றும் மாநிலங்களின் வரிசையாகும், மேலும் ஒரு நிலை என்பது மாறிகளுக்கு மதிப்புகளை ஒதுக்குவதாகும்.

யூக்ளிடியன் அல்காரிதத்தின் இரண்டாவது படி எப்படி இருக்கும் என்று பார்ப்போம். நாம் கணக்கிட வேண்டும் GCD(M, N). நாங்கள் துவக்குகிறோம் M எப்படி xமற்றும் N எப்படி y, பின்னர் இந்த மாறிகளில் சிறியதை பெரியவற்றிலிருந்து சமமாக இருக்கும் வரை மீண்டும் மீண்டும் கழிக்கவும். உதாரணமாக, என்றால் M = 12மற்றும் N = 18, பின்வரும் நடத்தையை நாம் விவரிக்கலாம்:

[x = 12, y = 18] → [x = 12, y = 6] → [x = 6, y = 6]

மற்றும் என்றால் M = 0 и N = 0? பூஜ்ஜியம் அனைத்து எண்களாலும் வகுபடும், எனவே இந்த வழக்கில் பெரிய வகுத்தல் இல்லை. இந்த சூழ்நிலையில், நாம் மீண்டும் முதல் படிக்குச் சென்று கேட்க வேண்டும்: நேர்மறை எண்களுக்கு ஜிசிடியை நாம் உண்மையில் கணக்கிட வேண்டுமா? இது தேவையில்லை என்றால், நீங்கள் விவரக்குறிப்பை மாற்ற வேண்டும்.

உற்பத்தித்திறன் பற்றிய ஒரு குறுகிய திசைதிருப்பல் இங்கே உள்ளது. இது பெரும்பாலும் ஒரு நாளைக்கு எழுதப்பட்ட குறியீட்டு வரிகளின் எண்ணிக்கையில் அளவிடப்படுகிறது. ஆனால் நீங்கள் ஒரு குறிப்பிட்ட எண்ணிக்கையிலான வரிகளை அகற்றினால், உங்கள் பணி மிகவும் பயனுள்ளதாக இருக்கும், ஏனெனில் நீங்கள் பிழைகளுக்கு குறைவான இடம் உள்ளது. குறியீட்டிலிருந்து விடுபடுவதற்கான எளிதான வழி முதல் கட்டத்தில் உள்ளது. நீங்கள் செயல்படுத்த முயற்சிக்கும் அனைத்து மணிகள் மற்றும் விசில்கள் உங்களுக்குத் தேவையில்லை என்பது சாத்தியம். ஒரு திட்டத்தை எளிதாக்குவதற்கும் நேரத்தை மிச்சப்படுத்துவதற்கும் விரைவான வழி, செய்யக்கூடாத விஷயங்களைச் செய்யாமல் இருப்பதுதான். இரண்டாவது படியானது இரண்டாவது அதிக நேரத்தைச் சேமிக்கும் திறனைக் கொண்டுள்ளது. எழுதப்பட்ட வரிகளின் அடிப்படையில் நீங்கள் உற்பத்தித்திறனை அளந்தால், ஒரு பணியை எவ்வாறு முடிப்பது என்பதைப் பற்றி சிந்திப்பது உங்களை உருவாக்கும் குறைவான உற்பத்தி, ஏனெனில் அதே சிக்கலை நீங்கள் குறைந்த குறியீடு மூலம் தீர்க்க முடியும். நான் இங்கே சரியான புள்ளிவிவரங்களை கொடுக்க முடியாது, ஏனென்றால் விவரக்குறிப்பில் நான் செலவழித்த நேரத்தின் காரணமாக நான் எழுதாத வரிகளின் எண்ணிக்கையை எண்ணுவதற்கு எனக்கு வழி இல்லை, அதாவது முதல் மற்றும் இரண்டாவது படிகளில். எங்களால் இங்கே ஒரு பரிசோதனையும் செய்ய முடியாது, ஏனென்றால் ஒரு பரிசோதனையில் முதல் படியை முடிக்க எங்களுக்கு உரிமை இல்லை; பணி முன்கூட்டியே தீர்மானிக்கப்படுகிறது.

முறைசாரா விவரக்குறிப்புகளில் உள்ள பல சிரமங்களைக் கவனிப்பது எளிது. செயல்பாடுகளுக்கு கடுமையான விவரக்குறிப்புகளை எழுதுவதில் கடினமான ஒன்றும் இல்லை; இதை நான் விவாதிக்க மாட்டேன். அதற்கு பதிலாக, நிலையான நடத்தைகளுக்கான வலுவான குறிப்புகளை எழுதுவது பற்றி பேசுவோம். பாதுகாப்புச் சொத்தைப் பயன்படுத்தி எந்தவொரு நடத்தைகளையும் விவரிக்க முடியும் என்று ஒரு தேற்றம் உள்ளது (பாதுகாப்பு) மற்றும் உயிர்வாழும் பண்புகள் (உயிர்மை). பாதுகாப்பு என்பது மோசமான எதுவும் நடக்காது, நிரல் தவறான பதிலைக் கொடுக்காது. உயிர்வாழ்வது என்பது விரைவில் அல்லது பின்னர் ஏதாவது நல்லது நடக்கும், அதாவது நிரல் விரைவில் அல்லது பின்னர் சரியான பதிலைக் கொடுக்கும். ஒரு விதியாக, பாதுகாப்பு மிக முக்கியமான குறிகாட்டியாகும்; பிழைகள் பெரும்பாலும் இங்கு நிகழ்கின்றன. எனவே, நேரத்தை மிச்சப்படுத்த, உயிர்வாழ்வதைப் பற்றி நான் பேசமாட்டேன், இருப்பினும் அதுவும் முக்கியமானது.

சாத்தியமான ஆரம்ப நிலைகளின் தொகுப்பை முதலில் குறிப்பிடுவதன் மூலம் பாதுகாப்பை அடைகிறோம். இரண்டாவதாக, ஒவ்வொரு மாநிலத்திற்கும் சாத்தியமான அனைத்து அடுத்த மாநிலங்களுடனும் உறவுகள். விஞ்ஞானிகளைப் போல நடந்துகொண்டு, மாநிலங்களை கணித ரீதியாக வரையறுப்போம். ஆரம்ப நிலைகளின் தொகுப்பு சூத்திரத்தால் விவரிக்கப்படுகிறது, எடுத்துக்காட்டாக, யூக்ளிடியன் அல்காரிதம் வழக்கில்: (x = M) ∧ (y = N). சில மதிப்புகளுக்கு M и N ஒரே ஒரு ஆரம்ப நிலை உள்ளது. அடுத்த மாநிலத்துடனான உறவு ஒரு சூத்திரத்தால் விவரிக்கப்படுகிறது, அதில் அடுத்த மாநிலத்தின் மாறிகள் ஒரு பிரைமுடன் எழுதப்படுகின்றன, மேலும் தற்போதைய நிலையின் மாறிகள் பிரைம் இல்லாமல் எழுதப்படுகின்றன. யூக்ளிடியன் அல்காரிதத்தின் விஷயத்தில், இரண்டு சூத்திரங்களின் விலகலைக் கையாள்வோம், அதில் ஒன்றில் x மிகப்பெரிய மதிப்பு, மற்றும் இரண்டாவது - y:

நிரலாக்கமானது குறியீட்டை விட அதிகம்

முதல் வழக்கில், y இன் புதிய மதிப்பு y இன் முந்தைய மதிப்புக்கு சமமாக இருக்கும், மேலும் பெரிய ஒன்றிலிருந்து சிறிய மாறியைக் கழிப்பதன் மூலம் x இன் புதிய மதிப்பைப் பெறுகிறோம். இரண்டாவது வழக்கில், நாம் எதிர்மாறாக செய்கிறோம்.

யூக்ளிடியன் அல்காரிதத்திற்கு வருவோம். மீண்டும் என்று வைத்துக்கொள்வோம் M = 12, N = 18. இது ஒரு ஆரம்ப நிலையை வரையறுக்கிறது, (x = 12) ∧ (y = 18). இந்த மதிப்புகளை மேலே உள்ள சூத்திரத்தில் இணைத்து பெறுகிறோம்:

நிரலாக்கமானது குறியீட்டை விட அதிகம்

சாத்தியமான ஒரே தீர்வு இங்கே: x' = 18 - 12 ∧ y' = 12, மற்றும் நாம் நடத்தை பெறுகிறோம்: [x = 12, y = 18]. அதே வழியில், நம் நடத்தையில் உள்ள அனைத்து நிலைகளையும் விவரிக்கலாம்: [x = 12, y = 18] → [x = 12, y = 6] → [x = 6, y = 6].

கடைசி நிலையில் [x = 6, y = 6] வெளிப்பாட்டின் இரண்டு பகுதிகளும் தவறானதாக இருக்கும், எனவே அதற்கு அடுத்த நிலை இல்லை. எனவே, இரண்டாவது படியின் முழுமையான விவரக்குறிப்பு எங்களிடம் உள்ளது - நாம் பார்ப்பது போல், இது பொறியாளர்கள் மற்றும் விஞ்ஞானிகளைப் போலவே மிகவும் சாதாரண கணிதம், மற்றும் கணினி அறிவியலைப் போல விசித்திரமானது அல்ல.

இந்த இரண்டு சூத்திரங்களையும் தற்காலிக தர்க்கத்தின் ஒரு சூத்திரமாக இணைக்கலாம். இது நேர்த்தியாகவும் விளக்கவும் எளிதானது, ஆனால் அதற்கு இப்போது நேரம் இல்லை. வாழ்வாதாரத்துக்காக மட்டுமே நமக்கு தற்காலிக தர்க்கம் தேவைப்படலாம்; பாதுகாப்புக்கு அது தேவையில்லை. எனக்கு தற்காலிக தர்க்கம் பிடிக்காது, இது சாதாரண கணிதம் அல்ல, ஆனால் உயிரோட்டத்தின் விஷயத்தில் இது அவசியமான தீமை.

ஒவ்வொரு மதிப்புக்கும் யூக்ளிடியன் அல்காரிதத்தில் x и y தனித்துவமான மதிப்புகள் உள்ளன x' и y', இது அடுத்த மாநிலத்துடனான உறவை உண்மையாக்கும். வேறு வார்த்தைகளில் கூறுவதானால், யூக்ளிடியன் அல்காரிதம் உறுதியானது. ஒரு தீர்மானமற்ற வழிமுறையை மாதிரியாக்க, தற்போதைய நிலை பல சாத்தியமான எதிர்கால நிலைகளைக் கொண்டிருக்க வேண்டும், மேலும் முதன்மையான மாறியின் ஒவ்வொரு மதிப்பும் முதன்மை மாறியின் பல மதிப்புகளைக் கொண்டிருக்க வேண்டும், அதாவது அடுத்த நிலைக்கான உறவு உண்மையாக இருக்கும். இதைச் செய்வது கடினம் அல்ல, ஆனால் நான் இப்போது உதாரணங்களை கொடுக்க மாட்டேன்.

வேலை செய்யும் கருவியை உருவாக்க, உங்களுக்கு முறையான கணிதம் தேவை. ஒரு விவரக்குறிப்பை எப்படி முறைப்படுத்துவது? இதைச் செய்ய, எங்களுக்கு ஒரு முறையான மொழி தேவைப்படும், எ.கா. TLA+. இந்த மொழியில் யூக்ளிடியன் அல்காரிதத்தின் விவரக்குறிப்பு இப்படி இருக்கும்:

நிரலாக்கமானது குறியீட்டை விட அதிகம்

ஒரு முக்கோணத்துடன் சமமான அடையாளக் குறியீடு என்பது அடையாளத்தின் இடதுபுறத்தில் உள்ள மதிப்பு, அடையாளத்தின் வலதுபுறத்தில் உள்ள மதிப்புக்கு சமமாக தீர்மானிக்கப்படுகிறது. சாராம்சத்தில், ஒரு விவரக்குறிப்பு என்பது ஒரு வரையறை, எங்கள் விஷயத்தில் இரண்டு வரையறைகள். TLA+ இல் உள்ள விவரக்குறிப்புக்கு, மேலே உள்ள ஸ்லைடில் உள்ளதைப் போல நீங்கள் அறிவிப்புகளையும் சில தொடரியல்களையும் சேர்க்க வேண்டும். ASCII இல் இது இப்படி இருக்கும்:

நிரலாக்கமானது குறியீட்டை விட அதிகம்

நீங்கள் பார்க்க முடியும் என, சிக்கலான எதுவும் இல்லை. TLA+ இல் உள்ள விவரக்குறிப்பு சரிபார்க்கப்படலாம், அதாவது, ஒரு சிறிய மாதிரியில் அனைத்து சாத்தியமான நடத்தைகளையும் கடந்து செல்ல முடியும். எங்கள் விஷயத்தில், இந்த மாதிரி சில மதிப்புகளாக இருக்கும் M и N. இது மிகவும் பயனுள்ள மற்றும் எளிமையான சரிபார்ப்பு முறையாகும், இது முற்றிலும் தானாகவே உள்ளது. கூடுதலாக, உண்மைக்கான முறையான ஆதாரங்களை எழுதவும், இயந்திரத்தனமாக அவற்றைச் சரிபார்க்கவும் முடியும், ஆனால் இதற்கு நிறைய நேரம் எடுக்கும், எனவே கிட்டத்தட்ட யாரும் இதைச் செய்வதில்லை.

TLA+ இன் முக்கிய தீமை என்னவென்றால், அது கணிதம், மற்றும் நிரலாளர்கள் மற்றும் கணினி விஞ்ஞானிகள் கணிதத்திற்கு பயப்படுகிறார்கள். முதல் பார்வையில் இது ஒரு நகைச்சுவையாகத் தெரிகிறது, ஆனால், துரதிர்ஷ்டவசமாக, நான் இதை எல்லா தீவிரத்திலும் சொல்கிறேன். என்னுடைய சக ஊழியர் ஒருவர் TLA+ ஐ பல டெவலப்பர்களுக்கு எப்படி விளக்க முயன்றார் என்று சொல்லிக் கொண்டிருந்தார். சூத்திரங்கள் திரையில் தோன்றியவுடன், அவர்களின் கண்கள் உடனடியாக கண்ணாடியாக மாறியது. எனவே TLA+ பயமாக இருந்தால், நீங்கள் பயன்படுத்தலாம் பிளஸ்கால், ஒரு வகையான பொம்மை நிரலாக்க மொழி. PlusCal இல் உள்ள வெளிப்பாடு எந்த TLA+ வெளிப்பாடாகவும் இருக்கலாம், அதாவது அடிப்படையில் எந்த கணித வெளிப்பாடாகவும் இருக்கலாம். கூடுதலாக, பிளஸ்கால் நிர்ணயம் செய்யாத அல்காரிதங்களுக்கான தொடரியல் உள்ளது. பிளஸ்கால் எந்த TLA+ வெளிப்பாட்டையும் எழுத முடியும் என்பதால், எந்த உண்மையான நிரலாக்க மொழியையும் விட இது மிகவும் வெளிப்படையானது. அடுத்து, PlusCal TLA+ விவரக்குறிப்பில் எளிதாகப் படிக்கத் தொகுக்கப்பட்டுள்ளது. சிக்கலான PlusCal விவரக்குறிப்பு TLA+ இல் எளிமையான ஒன்றாக மாறும் என்று இது அர்த்தப்படுத்துவதில்லை - அவற்றுக்கிடையேயான கடித தொடர்பு வெளிப்படையானது, கூடுதல் சிக்கலானது எதுவும் தோன்றாது. இறுதியாக, இந்த விவரக்குறிப்பை TLA+ கருவிகளைப் பயன்படுத்தி சரிபார்க்கலாம். பொதுவாக, ப்ளஸ்கால் கணிதத்தின் மீதான பயத்தை போக்க உதவும்; புரோகிராமர்கள் மற்றும் கணினி விஞ்ஞானிகளுக்கு கூட இதைப் புரிந்துகொள்வது எளிது. கடந்த காலத்தில் சில காலம் (சுமார் 10 ஆண்டுகள்) அதற்கான வழிமுறைகளை வெளியிட்டேன்.

ஒருவேளை யாராவது TLA+ மற்றும் PlusCal கணிதம் என்று ஆட்சேபிப்பார்கள், மேலும் கணிதம் உருவாக்கப்பட்ட உதாரணங்களுடன் மட்டுமே செயல்படுகிறது. நடைமுறையில், வகைகள், நடைமுறைகள், பொருள்கள் மற்றும் பலவற்றைக் கொண்ட உண்மையான மொழி உங்களுக்குத் தேவை. இது தவறு. அமேசானில் பணிபுரிந்த கிறிஸ் நியூகாம்ப் எழுதுவது இங்கே: "நாங்கள் பத்து பெரிய திட்டங்களில் TLA+ ஐப் பயன்படுத்தியுள்ளோம், மேலும் ஒவ்வொரு சந்தர்ப்பத்திலும் அதன் பயன்பாடு வளர்ச்சியில் குறிப்பிடத்தக்க மாற்றத்தை ஏற்படுத்தியது, ஏனெனில் அவை உற்பத்தியைத் தாக்கும் முன் ஆபத்தான பிழைகளை எங்களால் பிடிக்க முடிந்தது, மேலும் இது ஆக்ரோஷமாகச் செயல்படத் தேவையான நுண்ணறிவையும் நம்பிக்கையையும் எங்களுக்கு வழங்கியது. நிரலின் உண்மையை பாதிக்காமல் செயல்திறன் மேம்படுத்தல்கள்". முறையான முறைகளைப் பயன்படுத்தும் போது நாம் திறமையற்ற குறியீட்டைப் பெறுகிறோம் என்பதை நீங்கள் அடிக்கடி கேட்கலாம் - நடைமுறையில், எல்லாம் சரியாக எதிர்மாறாக இருக்கிறது. கூடுதலாக, புரோகிராமர்கள் அவற்றின் பயனை நம்பினாலும், முறையான முறைகளின் அவசியத்தை மேலாளர்கள் நம்ப முடியாது என்ற கருத்து உள்ளது. மற்றும் நியூகாம்ப் எழுதுகிறார்: "நிர்வாகிகள் இப்போது TLA+ இல் விவரக்குறிப்புகளை எழுதுவதற்கு சாத்தியமான எல்லா வழிகளிலும் அழுத்தம் கொடுக்கிறார்கள், மேலும் இதற்காக நேரத்தை ஒதுக்குகிறார்கள்". எனவே மேலாளர்கள் TLA+ வேலை செய்வதைப் பார்க்கும்போது, ​​அவர்கள் அதை ஏற்றுக்கொள்கிறார்கள். கிறிஸ் நியூகாம்ப் இதை ஆறு மாதங்களுக்கு முன்பு (அக்டோபர் 2014) எழுதினார், ஆனால் இப்போது, ​​எனக்குத் தெரிந்தவரை, TLA+ 14 திட்டங்களில் பயன்படுத்தப்படுகிறது, 10 அல்ல. மற்றொரு உதாரணம் XBox 360-ன் வடிவமைப்போடு தொடர்புடையது. சார்லஸ் தாக்கர் மற்றும் ஒரு பயிற்சியாளர் வந்தார். நினைவக அமைப்புக்கான விவரக்குறிப்பை எழுதினார். இந்த விவரக்குறிப்புக்கு நன்றி, ஒரு பிழை கண்டறியப்பட்டது, இல்லையெனில் அது கண்டறியப்படவில்லை மற்றும் ஒவ்வொரு XBox 360 ஐ நான்கு மணிநேர பயன்பாட்டிற்குப் பிறகு செயலிழக்கச் செய்யும். IBM இன் பொறியாளர்கள் தங்கள் சோதனைகள் இந்த பிழையைக் கண்டறிந்திருக்காது என்பதை உறுதிப்படுத்தினர்.

நீங்கள் இணையத்தில் TLA+ பற்றி மேலும் படிக்கலாம், ஆனால் இப்போது முறைசாரா விவரக்குறிப்புகள் பற்றி பேசலாம். குறைவான பொதுவான வகுப்பி போன்றவற்றைக் கணக்கிடும் நிரல்களை நாம் அரிதாகவே எழுத வேண்டியிருக்கும். TLA+ க்காக நான் எழுதிய அழகான-அச்சுப்பொறி கருவி போன்ற நிரல்களை அடிக்கடி எழுதுகிறோம். எளிமையான செயலாக்கத்திற்குப் பிறகு, TLA+ குறியீடு இப்படி இருக்கும்:

நிரலாக்கமானது குறியீட்டை விட அதிகம்

ஆனால் மேலே உள்ள எடுத்துக்காட்டில், இணைப்பு மற்றும் சம அடையாளங்கள் சீரமைக்கப்பட வேண்டும் என்று பயனர் பெரும்பாலும் விரும்பினார். எனவே சரியான வடிவமைப்பு இது போல் இருக்கும்:

நிரலாக்கமானது குறியீட்டை விட அதிகம்

மற்றொரு உதாரணத்தைக் கவனியுங்கள்:

நிரலாக்கமானது குறியீட்டை விட அதிகம்

இங்கே, மாறாக, மூலத்தில் சம அடையாளங்கள், கூட்டல் மற்றும் பெருக்கல் ஆகியவற்றின் சீரமைப்பு சீரற்றதாக இருந்தது, எனவே எளிமையான செயலாக்கம் போதுமானது. பொதுவாக, சரியான வடிவமைப்பிற்கு சரியான கணித வரையறை இல்லை, ஏனெனில் இந்த விஷயத்தில் "சரியானது" என்பது "பயனர் என்ன விரும்புகிறார்" என்று பொருள்படும், மேலும் இதை கணித ரீதியாக தீர்மானிக்க முடியாது.

உண்மைக்கு ஒரு வரையறை இல்லை என்றால், விவரக்குறிப்பு பயனற்றது என்று தோன்றுகிறது. ஆனால் அது உண்மையல்ல. ஒரு நிரல் என்ன செய்ய வேண்டும் என்று எங்களுக்குத் தெரியாததால், அது எவ்வாறு செயல்பட வேண்டும் என்பதைப் பற்றி நாம் சிந்திக்கத் தேவையில்லை என்று அர்த்தமல்ல - மாறாக, நாம் அதற்கு இன்னும் அதிக முயற்சியை செலவிட வேண்டும். விவரக்குறிப்பு இங்கே குறிப்பாக முக்கியமானது. கட்டமைக்கப்பட்ட அச்சிடலுக்கான உகந்த நிரலைத் தீர்மானிக்க இயலாது, ஆனால் இது நாம் அதை மேற்கொள்ளக்கூடாது என்று அர்த்தமல்ல, மேலும் நனவின் நீரோட்டமாக குறியீட்டை எழுதுவது வழக்கு அல்ல. வரையறைகளுடன் ஆறு விதிகளின் விவரக்குறிப்பை எழுதி முடித்தேன் கருத்துகள் வடிவில் ஒரு ஜாவா கோப்பில். விதிகளில் ஒன்றின் எடுத்துக்காட்டு இங்கே: a left-comment token is LeftComment aligned with its covering token. இந்த விதி கணித ஆங்கிலத்தில் எழுதப்பட்டுள்ளது: LeftComment aligned, left-comment и covering token - வரையறைகளுடன் கூடிய விதிமுறைகள். கணிதவியலாளர்கள் கணிதத்தை விவரிக்கும் விதம் இதுதான்: அவர்கள் சொற்களின் வரையறைகளை எழுதுகிறார்கள், அவற்றின் அடிப்படையில் விதிகளை உருவாக்குகிறார்கள். இந்த விவரக்குறிப்பின் நன்மை என்னவென்றால், 850 கோடுகளின் குறியீட்டை விட ஆறு விதிகளைப் புரிந்துகொள்வதற்கும் பிழைத்திருத்துவதற்கும் மிகவும் எளிதானது. இந்த விதிகளை எழுதுவது எளிதானது அல்ல என்று நான் சொல்ல வேண்டும்; பிழைத்திருத்தத்திற்கு நிறைய நேரம் எடுத்தது. இந்த நோக்கத்திற்காக நான் குறிப்பாக குறியீட்டை எழுதினேன், அது எந்த விதி பயன்படுத்தப்படுகிறது என்று எனக்குச் சொன்னது. சில எடுத்துக்காட்டுகளுடன் இந்த ஆறு விதிகளை நான் சோதித்ததால், 850 கோடுகளின் குறியீட்டை நான் பிழைத்திருத்த வேண்டியதில்லை, மேலும் பிழைகளைக் கண்டறிவது மிகவும் எளிதானது. இதற்கான சிறந்த கருவிகளை ஜாவா கொண்டுள்ளது. நான் குறியீட்டை எழுதியிருந்தால், அது எனக்கு அதிக நேரம் எடுத்திருக்கும் மற்றும் வடிவமைப்பு தரம் குறைந்ததாக இருந்திருக்கும்.

முறையான விவரக்குறிப்பை ஏன் பயன்படுத்த முடியவில்லை? ஒருபுறம், சரியான செயல்படுத்தல் இங்கே மிகவும் முக்கியமானது அல்ல. ஒரு கட்டமைக்கப்பட்ட பிரிண்ட்அவுட் சிலருக்குத் திருப்தியளிக்காததாக இருக்கும், எனவே எல்லா அசாதாரண சூழ்நிலைகளிலும் நான் அதைச் சரியாகப் பயன்படுத்த வேண்டியதில்லை. அதைவிட முக்கியமானது என்னிடம் போதுமான கருவிகள் இல்லை என்பதுதான். TLA+ மாதிரி சரிபார்ப்பு இங்கே பயனற்றது, எனவே நான் கையால் உதாரணங்களை எழுத வேண்டும்.

கொடுக்கப்பட்ட விவரக்குறிப்பு அனைத்து விவரக்குறிப்புகளுக்கும் பொதுவான அம்சங்களைக் கொண்டுள்ளது. இது குறியீட்டை விட உயர்ந்த நிலை. எந்த மொழியிலும் செயல்படுத்தலாம். அதை எழுதுவதற்கு எந்த கருவிகளும் முறைகளும் இல்லை. இந்த விவரக்குறிப்பை எழுத எந்த நிரலாக்க பாடமும் உங்களுக்கு உதவாது. TLA+ இல் கட்டமைக்கப்பட்ட அச்சுப்பொறி நிரல்களை எழுதுவதற்கு நீங்கள் ஒரு மொழியை எழுதினால் தவிர, இந்த விவரக்குறிப்பை தேவையற்றதாக மாற்றும் கருவிகள் எதுவும் இல்லை. இறுதியாக, இந்த விவரக்குறிப்பு குறியீட்டை எவ்வாறு சரியாக எழுதுவோம் என்பதைப் பற்றி எதுவும் கூறவில்லை, குறியீடு என்ன செய்கிறது என்பதைக் கூறுகிறது. குறியீட்டைப் பற்றி சிந்திக்கத் தொடங்குவதற்கு முன், சிக்கலைப் பற்றி சிந்திக்க உதவும் வகையில் ஒரு விவரக்குறிப்பை எழுதுகிறோம்.

ஆனால் இந்த விவரக்குறிப்பு மற்ற விவரக்குறிப்புகளிலிருந்து வேறுபடுத்தும் அம்சங்களையும் கொண்டுள்ளது. 95% மற்ற விவரக்குறிப்புகள் மிகவும் குறுகிய மற்றும் எளிமையானவை:

நிரலாக்கமானது குறியீட்டை விட அதிகம்

மேலும், இந்த விவரக்குறிப்பு விதிகளின் தொகுப்பாகும். இது பொதுவாக மோசமான விவரக்குறிப்பின் அறிகுறியாகும். விதிகளின் தொகுப்பின் விளைவுகளைப் புரிந்துகொள்வது மிகவும் கடினம், அதனால்தான் அவற்றை பிழைத்திருத்துவதற்கு நான் அதிக நேரம் செலவிட வேண்டியிருந்தது. இருப்பினும், இந்த விஷயத்தில் என்னால் சிறந்த வழியைக் கண்டுபிடிக்க முடியவில்லை.

தொடர்ச்சியாக இயங்கும் நிரல்களைப் பற்றி சில வார்த்தைகளைச் சொல்வது மதிப்பு. பொதுவாக அவை இயக்க முறைமைகள் அல்லது விநியோகிக்கப்பட்ட அமைப்புகள் போன்ற இணையாக இயங்குகின்றன. வெகு சிலரே அவற்றை தங்கள் மனதில் அல்லது காகிதத்தில் புரிந்து கொள்ள முடியும், நான் அவர்களில் ஒருவன் அல்ல, இருப்பினும் என்னால் அதை ஒருமுறை செய்ய முடிந்தது. எனவே, எங்கள் வேலையைச் சரிபார்க்கும் கருவிகள் எங்களுக்குத் தேவை - எடுத்துக்காட்டாக, TLA+ அல்லது PlusCal.

குறியீடு என்ன செய்ய வேண்டும் என்று எனக்கு முன்பே தெரிந்திருந்தால் நான் ஏன் விவரக்குறிப்பை எழுத வேண்டும்? உண்மையில், எனக்கு தெரியும் என்று மட்டுமே நினைத்தேன். கூடுதலாக, ஒரு விவரக்குறிப்புடன், வெளியாட்கள் குறியீடு சரியாக என்ன செய்கிறது என்பதைப் புரிந்துகொள்வதற்கு இனி அதைப் பார்க்க வேண்டியதில்லை. எனக்கு ஒரு விதி உள்ளது: பொதுவான விதிகள் எதுவும் இருக்கக்கூடாது. நிச்சயமாக இந்த விதிக்கு விதிவிலக்கு உள்ளது, நான் பின்பற்றும் ஒரே பொதுவான விதி இதுதான்: குறியீடு என்ன செய்கிறது என்பதன் விவரக்குறிப்பு, அந்தக் குறியீட்டைப் பயன்படுத்தும் போது மக்கள் தெரிந்து கொள்ள வேண்டிய அனைத்தையும் சொல்ல வேண்டும்.

எனவே புரோகிராமர்கள் சிந்தனை பற்றி சரியாக என்ன தெரிந்து கொள்ள வேண்டும்? தொடங்குவதற்கு, அனைவருக்கும் ஒரே மாதிரியாக இருக்கும்: நீங்கள் எழுதவில்லை என்றால், நீங்கள் சிந்திக்கிறீர்கள் என்று மட்டுமே தோன்றுகிறது. மேலும், நீங்கள் குறியீடு செய்வதற்கு முன் நீங்கள் சிந்திக்க வேண்டும், அதாவது நீங்கள் குறியீடு எழுதுவதற்கு முன் எழுத வேண்டும். குறியீடானது குறியீட்டு முறையைத் தொடங்குவதற்கு முன் நாம் எழுதுவது. எவரும் பயன்படுத்தக்கூடிய அல்லது மாற்றக்கூடிய எந்தவொரு குறியீட்டிற்கும் ஒரு விவரக்குறிப்பு தேவை. இந்த "யாரோ" குறியீடு எழுதப்பட்ட ஒரு மாதத்திற்குப் பிறகு அதன் ஆசிரியராக மாறலாம். பெரிய நிரல்களுக்கும் அமைப்புகளுக்கும், வகுப்புகளுக்கும், முறைகளுக்கும், சில சமயங்களில் ஒற்றை முறையின் சிக்கலான பிரிவுகளுக்கும் கூட விவரக்குறிப்பு தேவைப்படுகிறது. குறியீட்டைப் பற்றி சரியாக என்ன எழுத வேண்டும்? இது என்ன செய்கிறது என்பதை நீங்கள் விவரிக்க வேண்டும், அதாவது இந்தக் குறியீட்டைப் பயன்படுத்தும் எவருக்கும் பயனுள்ளதாக இருக்கும். சில நேரங்களில் குறியீடு அதன் இலக்கை எவ்வாறு சரியாக அடைகிறது என்பதைக் குறிப்பிடுவது அவசியமாக இருக்கலாம். அல்காரிதம் பாடத்தில் இந்த முறையைப் பின்பற்றினால், அதை அல்காரிதம் என்கிறோம். இது மிகவும் சிறப்பு வாய்ந்த மற்றும் புதியதாக இருந்தால், அதை உயர்நிலை வடிவமைப்பு என்று அழைக்கிறோம். இங்கே முறையான வேறுபாடு இல்லை: இரண்டும் நிரலின் சுருக்க மாதிரிகள்.

குறியீடு விவரக்குறிப்பை எவ்வாறு சரியாக எழுத வேண்டும்? முக்கிய விஷயம்: இது குறியீட்டை விட ஒரு நிலை அதிகமாக இருக்க வேண்டும். இது நிலைகளையும் நடத்தைகளையும் விவரிக்க வேண்டும். பணிக்கு தேவையான அளவு கண்டிப்பாக இருக்க வேண்டும். ஒரு பணியை எவ்வாறு செயல்படுத்துவது என்பதற்கான விவரக்குறிப்பை நீங்கள் எழுதுகிறீர்கள் என்றால், அதை சூடோகோட் அல்லது பிளஸ்கால் பயன்படுத்தி எழுதலாம். முறையான விவரக்குறிப்புகளைப் பயன்படுத்தி விவரக்குறிப்புகளை எழுத நீங்கள் கற்றுக்கொள்ள வேண்டும். இது உங்களுக்கு தேவையான திறன்களை வழங்கும், இது முறைசாராவற்றிற்கும் உதவும். முறையான விவரக்குறிப்புகளை எழுத எப்படி கற்றுக்கொள்ளலாம்? நாங்கள் நிரல் செய்ய கற்றுக்கொண்டபோது, ​​நாங்கள் நிரல்களை எழுதி, பின்னர் பிழைத்திருத்தம் செய்தோம். இங்கே அதே விஷயம்: நீங்கள் ஒரு விவரக்குறிப்பை எழுத வேண்டும், அதை மாதிரி சரிபார்ப்பாளருடன் சரிபார்த்து, பிழைகளை சரிசெய்யவும். TLA+ முறையான விவரக்குறிப்புக்கு சிறந்த மொழியாக இருக்காது, மேலும் உங்கள் குறிப்பிட்ட தேவைகளுக்கு மற்றொரு மொழி மிகவும் பொருத்தமானதாக இருக்கும். TLA+ இன் பெரிய விஷயம் என்னவென்றால், இது கணித சிந்தனையை கற்பிப்பதில் ஒரு சிறந்த வேலையைச் செய்கிறது.

விவரக்குறிப்பு மற்றும் குறியீட்டை எவ்வாறு இணைப்பது? கணிதக் கருத்துகள் மற்றும் அவற்றின் செயலாக்கத்தை இணைக்கும் கருத்துகளைப் பயன்படுத்துதல். நீங்கள் வரைபடங்களுடன் பணிபுரிந்தால், நிரல் மட்டத்தில் உங்களிடம் முனைகளின் வரிசைகள் மற்றும் இணைப்புகளின் வரிசைகள் இருக்கும். எனவே இந்த நிரலாக்க கட்டமைப்புகளால் வரைபடம் எவ்வாறு சரியாக செயல்படுத்தப்படுகிறது என்பதை நீங்கள் எழுத வேண்டும்.

மேலே உள்ள எதுவும் குறியீட்டை எழுதும் செயல்முறைக்கு பொருந்தாது என்பதை கவனத்தில் கொள்ள வேண்டும். நீங்கள் குறியீட்டை எழுதும்போது, ​​அதாவது மூன்றாவது படியைச் செய்யும்போது, ​​​​நீங்கள் நிரல் மூலம் சிந்திக்கவும் சிந்திக்கவும் வேண்டும். ஒரு துணைப் பணி சிக்கலானதாகவோ அல்லது வெளிப்படையாகவோ இல்லாமல் இருந்தால், அதற்கான விவரக்குறிப்பை நீங்கள் எழுத வேண்டும். ஆனால் நான் இங்கே குறியீட்டைப் பற்றி பேசவில்லை. நீங்கள் எந்த நிரலாக்க மொழியையும், எந்த முறையையும் பயன்படுத்தலாம், இது அவர்களைப் பற்றியது அல்ல. மேலும், மேலே உள்ள எதுவும் உங்கள் குறியீட்டைச் சோதித்து பிழைத்திருத்த வேண்டிய தேவையை நீக்காது. சுருக்க மாதிரி சரியாக எழுதப்பட்டாலும், அதை செயல்படுத்துவதில் பிழைகள் இருக்கலாம்.

குறியாக்க செயல்முறையில் குறிப்புகளை எழுதுவது கூடுதல் படியாகும். இதற்கு நன்றி, குறைந்த முயற்சியில் பல பிழைகள் பிடிக்கப்படலாம் - அமேசான் புரோகிராமர்களின் அனுபவத்திலிருந்து இதை நாங்கள் அறிவோம். விவரக்குறிப்புகளுடன், நிரல்களின் தரம் அதிகமாகிறது. அப்படியானால் நாம் ஏன் அவர்கள் இல்லாமல் அடிக்கடி செல்கிறோம்? ஏனென்றால் எழுதுவது கடினம். ஆனால் எழுதுவது கடினம், ஏனென்றால் இதற்காக நீங்கள் சிந்திக்க வேண்டும், சிந்திக்கவும் கடினமாக உள்ளது. நீங்கள் நினைக்கிறீர்கள் என்று பாசாங்கு செய்வது எப்போதும் எளிதானது. ஓடுவதைக் கொண்டு ஒரு ஒப்புமையை இங்கே வரையலாம் - நீங்கள் எவ்வளவு குறைவாக ஓடுகிறீர்களோ, அவ்வளவு மெதுவாக ஓடுகிறீர்கள். நீங்கள் உங்கள் தசைகளைப் பயிற்றுவிக்க வேண்டும் மற்றும் எழுதப் பயிற்சி செய்ய வேண்டும். அதற்கு பயிற்சி தேவை.

விவரக்குறிப்பு தவறாக இருக்கலாம். நீங்கள் எங்காவது தவறு செய்திருக்கலாம், அல்லது தேவைகள் மாறியிருக்கலாம் அல்லது முன்னேற்றம் செய்ய வேண்டியிருக்கலாம். எவரும் பயன்படுத்தும் எந்த குறியீடும் மாற்றப்பட வேண்டும், எனவே விரைவில் அல்லது பின்னர் விவரக்குறிப்பு நிரலுடன் பொருந்தாது. வெறுமனே, இந்த விஷயத்தில், நீங்கள் ஒரு புதிய விவரக்குறிப்பை எழுத வேண்டும் மற்றும் குறியீட்டை முழுமையாக மீண்டும் எழுத வேண்டும். இதை யாரும் செய்வதில்லை என்பது எங்களுக்கு நன்றாகத் தெரியும். நடைமுறையில், நாங்கள் குறியீட்டை இணைக்கிறோம் மற்றும் விவரக்குறிப்பை புதுப்பிக்கலாம். இது விரைவில் அல்லது பின்னர் நடக்கும் என்றால், விவரக்குறிப்புகளை ஏன் எழுத வேண்டும்? முதலாவதாக, உங்கள் குறியீட்டைத் திருத்தும் நபருக்கு, விவரக்குறிப்பில் உள்ள ஒவ்வொரு கூடுதல் வார்த்தையும் அதன் எடைக்கு மதிப்புடையதாக இருக்கும், மேலும் இந்த நபர் நீங்களாக இருக்கலாம். எனது குறியீட்டை நான் திருத்தும் போது போதுமான அளவு குறிப்பிட்டதாக இல்லாததால் அடிக்கடி என்னை நானே உதைக்கிறேன். நான் குறியீட்டை விட அதிக விவரக்குறிப்புகளை எழுதுகிறேன். எனவே, நீங்கள் குறியீட்டைத் திருத்தும்போது, ​​விவரக்குறிப்பு எப்போதும் புதுப்பிக்கப்பட வேண்டும். இரண்டாவதாக, ஒவ்வொரு திருத்தத்தின் போதும் குறியீடு மோசமாகிறது, அதைப் படிக்கவும் பராமரிக்கவும் கடினமாகிறது. இது என்ட்ரோபியின் அதிகரிப்பு ஆகும். ஆனால் நீங்கள் ஒரு விவரக்குறிப்புடன் தொடங்கவில்லை என்றால், நீங்கள் எழுதும் ஒவ்வொரு வரியும் ஒரு திருத்தமாக இருக்கும், மேலும் குறியீடு பருமனாகவும் தொடக்கத்தில் இருந்து படிக்க கடினமாகவும் இருக்கும்.

சொன்னது போல் ஐசனோவர், எந்த போரும் ஒரு திட்டத்தின் படி வெற்றி பெறவில்லை, மற்றும் ஒரு திட்டம் இல்லாமல் எந்த போரும் வெற்றி பெறவில்லை. மேலும் அவர் போர்களைப் பற்றி அறிந்திருந்தார். குறிப்புகள் எழுதுவது நேரத்தை வீணடிப்பதாக ஒரு கருத்து உள்ளது. சில நேரங்களில் இது உண்மை, மற்றும் பணி மிகவும் எளிமையானது, அதை நினைத்துப் பார்ப்பதில் எந்த அர்த்தமும் இல்லை. ஆனால் விவரக்குறிப்புகளை எழுத வேண்டாம் என்று உங்களுக்கு அறிவுறுத்தப்பட்டால், நீங்கள் சிந்திக்க வேண்டாம் என்று அறிவுறுத்தப்படுகிறீர்கள் என்பதை நீங்கள் எப்போதும் நினைவில் கொள்ள வேண்டும். மேலும் ஒவ்வொரு முறையும் இதைப் பற்றி சிந்திக்க வேண்டும். ஒரு பணியை நினைத்துப் பார்ப்பது, நீங்கள் தவறு செய்ய மாட்டீர்கள் என்று உத்தரவாதம் அளிக்காது. எங்களுக்குத் தெரியும், யாரும் மந்திரக்கோலைக் கண்டுபிடிக்கவில்லை, நிரலாக்கமானது கடினமான பணியாகும். ஆனால் நீங்கள் பணியின் மூலம் சிந்திக்கவில்லை என்றால், நீங்கள் தவறு செய்வது உறுதி.

சிறப்பு இணையதளத்தில் TLA+ மற்றும் PlusCal பற்றி மேலும் படிக்கலாம், எனது முகப்புப் பக்கத்திலிருந்து நீங்கள் அங்கு செல்லலாம் இணைப்பு. எனக்கு அவ்வளவுதான், உங்கள் கவனத்திற்கு நன்றி.

இது ஒரு மொழிபெயர்ப்பு என்பதை நினைவில் கொள்ளவும். நீங்கள் கருத்துகளை எழுதும்போது, ​​​​அதை ஆசிரியர் படிக்க மாட்டார் என்பதை நினைவில் கொள்ளுங்கள். நீங்கள் உண்மையிலேயே ஆசிரியருடன் அரட்டையடிக்க விரும்பினால், அவர் ஜூலை 2019-11, 12 அன்று செயின்ட் பீட்டர்ஸ்பர்க்கில் நடைபெறும் ஹைட்ரா 2019 மாநாட்டில் இருப்பார். டிக்கெட் வாங்கலாம் அதிகாரப்பூர்வ இணையதளத்தில்.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்