ක්‍රමලේඛනය යනු කේතීකරණයට වඩා වැඩි ය

ක්‍රමලේඛනය යනු කේතීකරණයට වඩා වැඩි ය

මෙය පරිවර්තන ලිපියකි ස්ටැන්ෆර්ඩ් සම්මන්ත්‍රණය. හැබැයි ඊට කලින් පොඩි හැදින්වීමක් තියෙනවා. Zombies හැදෙන්නේ කොහොමද? සෑම කෙනෙකුම තම මිතුරෙකු හෝ සගයෙකු තම මට්ටමට ගෙන ඒමට අවශ්ය තත්වයක සිටින නමුත් එය සාර්ථක නොවේ. එපමනක් නොව, "එය ක්රියාත්මක නොවේ" ඔබට එතරම් නොවේ, නමුත් ඔහු සඳහා: පරිමාණයේ එක් පැත්තක සාමාන්ය වැටුපක්, කාර්යයන් සහ යනාදිය වන අතර අනෙක් පැත්තෙන් සිතීම අවශ්ය වේ. සිතීම අප්රසන්න සහ වේදනාකාරී වේ. ඔහු ඉක්මනින් අත්හැර දමා ඔහුගේ මොළය භාවිතා නොකර කේතය ලිවීම දිගටම කරගෙන යයි. උගත් අසරණ භාවයේ බාධකය ජය ගැනීමට කොපමණ උත්සාහයක් ගත යුතුද යන්න ඔබට වැටහෙන අතර ඔබ එය කරන්නේ නැත. zombies හැදෙන්නේ මෙහෙමයි, ඒකෙන් සනීප කරන්න පුළුවන් වගේ, ඒත් කවුරුත් මේක කරන එකක් නෑ වගේ.

ඒක දැක්කම ලෙස්ලි ලැම්පෝට් (ඔව්, පෙළපොත් වලින් එම මිතුරා) රුසියාවට පැමිණේ සහ වාර්තාවක් ලබා දෙන්නේ නැත, නමුත් ප්‍රශ්නෝත්තර වාරයක්, මම ටිකක් කල්පනාකාරී විය. යම් හෙයකින් ලෙස්ලි යනු ලෝක ප්‍රකට විද්‍යාඥයෙක්, බෙදා හරින ලද පරිගණනයේ මූලික කෘතිවල කතුවරයා වන අතර, LaTeX - "Lamport TeX" හි La යන අකුරුවලින් ඔබ ඔහුව හඳුනනවා විය හැකිය. දෙවන භයානක සාධකය වන්නේ ඔහුගේ අවශ්‍යතාවයයි: පැමිණෙන සෑම කෙනෙකුම (සම්පූර්ණයෙන්ම නොමිලේ) ඔහුගේ වාර්තා කිහිපයකට කල්තියා සවන් දිය යුතුය, අවම වශයෙන් එක් ප්‍රශ්නයක්වත් ඒවා ගැන ඉදිරිපත් කළ යුතුය, පසුව පමණක් පැමිණිය යුතුය. ලැම්පෝර්ට් එහි විකාශනය කරන්නේ කුමක්දැයි බැලීමට මම තීරණය කළෙමි - එය විශිෂ්ටයි! මෙය හරියටම ඒ දෙයයි, පිල්ලි වලට ප්‍රතිකාර කිරීම සඳහා මැජික් ලින්ක් පෙත්තක්. මම ඔබට අනතුරු අඟවන්නෙමි: සුපිරි කඩිසර ක්‍රමවේදවලට ආදරය කරන සහ ඔවුන් ලියා ඇති දේ පරීක්ෂා කිරීමට අකමැති අය පෙළ බරපතල ලෙස පුළුස්සා දැමිය හැකිය.

හබ්‍රොකට් එකෙන් පස්සේ සම්මන්ත්‍රණයේ පරිවර්තනය ඇත්තටම පටන් ගන්නවා. කියවීම රසවිඳින්න!

ඔබ කුමන කාර්යයක් භාර ගත්තද, ඔබ සෑම විටම පියවර තුනක් හරහා යා යුතුය:

  • ඔබට සාක්ෂාත් කර ගැනීමට අවශ්‍ය ඉලක්කය තීරණය කරන්න;
  • ඔබ ඔබේ ඉලක්කය සපුරා ගන්නේ කෙසේද යන්න තීරණය කරන්න;
  • ඔබේ ඉලක්කය කරා ළඟා වන්න.

මෙය වැඩසටහන්කරණයට ද අදාළ වේ. අපි කේතය ලියන විට, අපට අවශ්ය වන්නේ:

  • වැඩසටහන හරියටම කළ යුතු දේ තීරණය කරන්න;
  • එහි කාර්යය ඉටු කළ යුතු ආකාරය හරියටම තීරණය කරන්න;
  • සුදුසු කේතය ලියන්න.

අවසාන පියවර, ඇත්ත වශයෙන්ම, ඉතා වැදගත් වේ, නමුත් මම අද ඒ ගැන කතා නොකරමි. ඒ වෙනුවට අපි පළමු දෙක ගැන කතා කරමු. සෑම ක්‍රමලේඛකයෙකුම වැඩ කිරීමට පටන් ගැනීමට පෙර ඒවා ඉටු කරයි. ඔබ ලියන දේ ඔබ තීරණය කර ඇත්නම් මිස ඔබ ලිවීමට වාඩි වන්නේ නැත: බ්‍රවුසරයක් හෝ දත්ත සමුදායක්. ඉලක්කය පිළිබඳ නිශ්චිත අදහසක් තිබිය යුතුය. වැඩසටහන හරියටම කරන්නේ කුමක්ද යන්න ගැන ඔබ අනිවාර්යයෙන්ම සිතන අතර, කේතය කෙසේ හෝ බ්‍රව්සරයක් බවට පත්වනු ඇතැයි යන බලාපොරොත්තුවෙන් එය අහම්බෙන් ලියන්න එපා.

මෙම කේතය පිළිබඳ පූර්ව සිතීම හරියටම සිදු වන්නේ කෙසේද? අපි මේ සඳහා කොපමණ උත්සාහයක් දැරිය යුතුද? ඒ සියල්ල රඳා පවතින්නේ අප විසඳන ගැටලුව කෙතරම් සංකීර්ණද යන්න මතය. අපි හිතමු අපිට වැරදි ඉවසන බෙදාහැරීමේ පද්ධතියක් ලියන්න ඕන කියලා. මෙම අවස්ථාවේ දී, අපි කේතයට වාඩි වීමට පෙර හොඳින් සිතා බැලිය යුතුය. අපට පූර්ණ සංඛ්‍යා විචල්‍යයක් 1 න් වැඩි කිරීමට අවශ්‍ය නම් කුමක් කළ යුතුද? මුලින්ම බැලූ බැල්මට, මෙහි ඇති සෑම දෙයක්ම සුළුපටු නොවන අතර කිසිදු සිතුවිල්ලක් අවශ්ය නොවේ, නමුත් පිටාර ගැලීමක් සිදුවිය හැකි බව අපට මතකයි. එමනිසා, ගැටලුවක් සරලද සංකීර්ණද යන්න තේරුම් ගැනීමට පවා, ඔබ මුලින්ම සිතා බැලිය යුතුය.

ඔබ ගැටලුවකට හැකි විසඳුම් ගැන කල්තියා සිතන්නේ නම්, ඔබට වැරදි වළක්වා ගත හැකිය. නමුත් මේ සඳහා ඔබේ චින්තනය පැහැදිලි විය යුතුය. මෙය සාක්ෂාත් කර ගැනීම සඳහා, ඔබ ඔබේ සිතුවිලි ලියා තැබිය යුතුය. මම Dick Guindon උපුටා දැක්වීමට කැමතියි: "ඔබ ලියන විට, ඔබේ චින්තනය කෙතරම් අලසද යන්න ස්වභාවධර්මය ඔබට පෙන්වයි." ඔබ නොලියන්නේ නම්, ඔබ සිතන්නේ ඔබ සිතන බවයි. තවද ඔබ ඔබේ සිතුවිලි පිරිවිතර ආකාරයෙන් ලියා තැබිය යුතුය.

පිරිවිතරයන් බොහෝ කාර්යයන් ඉටු කරයි, විශේෂයෙන් විශාල ව්‍යාපෘතිවල. නමුත් මම ඔවුන්ගෙන් එකක් ගැන පමණක් කතා කරමි: ඒවා පැහැදිලිව සිතීමට අපට උපකාර කරයි. පැහැදිලිව සිතීම ඉතා වැදගත් සහ තරමක් අපහසු බැවින් අපට මෙහි ඕනෑම උදව්වක් අවශ්‍ය වේ. අපි පිරිවිතර ලිවිය යුත්තේ කුමන භාෂාවෙන්ද? පොදුවේ ගත් කල, මෙය සෑම විටම ක්‍රමලේඛකයින් සඳහා වන පළමු ප්‍රශ්නයයි: අපි ලියන්නේ කුමන භාෂාවෙන්ද? නිවැරදි පිළිතුරක් නොමැත: අප විසඳන ගැටළු ඉතා විවිධාකාර වේ. සමහර අය සඳහා, TLA+ යනු මා විසින් වර්ධනය කරන ලද පිරිවිතර භාෂාවකි. අනෙක් අයට, චීන භාෂාව භාවිතා කිරීම වඩාත් පහසු වේ. එය සියල්ල තත්ත්වය මත රඳා පවතී.

වඩාත් වැදගත් ප්‍රශ්නය නම්: අපට වඩා පැහැදිලි චින්තනයක් ලබා ගත හැක්කේ කෙසේද? පිළිතුර: අපි විද්‍යාඥයන් මෙන් සිතිය යුතුයි. මෙය පසුගිය වසර 500 තුළ හොඳින් ක්‍රියාත්මක වූ චින්තන ක්‍රමයකි. විද්‍යාවේදී අපි යථාර්ථයේ ගණිතමය ආකෘති ගොඩනඟමු. වචනයේ පරිසමාප්ත අර්ථයෙන්ම මුල්ම විද්‍යාව තාරකා විද්‍යාව විය හැක. තාරකා විද්‍යාවේ භාවිතා වන ගණිතමය ආකෘතියේ දී, ආකාශ වස්තූන් ස්කන්ධය, පිහිටීම සහ ගම්‍යතාවය සහිත ලක්ෂ්‍ය ලෙස පෙනේ, නමුත් යථාර්ථයේ දී ඒවා කඳු සහ සාගර, ඉබ්බන් සහ ගලා යන අතිශය සංකීර්ණ වස්තූන් වේ. මෙම ආකෘතිය, වෙනත් ඕනෑම දෙයක් මෙන්, ඇතැම් ගැටළු විසඳීම සඳහා නිර්මාණය කරන ලදී. ඔබට ග්‍රහලෝකයක් සොයා ගැනීමට අවශ්‍ය නම් දුරේක්ෂයක් යොමු කළ යුතු ස්ථානය තීරණය කිරීම සඳහා එය විශිෂ්ටයි. නමුත් ඔබට මෙම ග්රහලෝකයේ කාලගුණය අනාවැකි කිරීමට අවශ්ය නම්, මෙම ආකෘතිය ක්රියා නොකරනු ඇත.

ගණිතය මඟින් ආකෘතියක ගුණාංග තීරණය කිරීමට අපට ඉඩ සලසයි. මෙම ගුණාංග යථාර්ථයට සම්බන්ධ වන්නේ කෙසේදැයි විද්‍යාව පෙන්වා දෙයි. අපි අපේ විද්‍යාව, පරිගණක විද්‍යාව ගැන කතා කරමු. අප සමඟ වැඩ කරන යථාර්ථය වන්නේ විවිධ වර්ගවල පරිගණක පද්ධති වේ: ප්‍රොසෙසර, ක්‍රීඩා කොන්සෝල, වැඩසටහන් ක්‍රියාත්මක කරන පරිගණක සහ යනාදිය. මම පරිගණකයක වැඩසටහනක් ක්‍රියාත්මක කිරීම ගැන කතා කරමි, නමුත්, විශාල වශයෙන්, මෙම සියලු නිගමන ඕනෑම පරිගණක පද්ධතියකට අදාළ වේ. අපගේ විද්‍යාවේදී අපි විවිධ මාදිලි භාවිතා කරමු: ටියුරින් යන්ත්‍රය, අර්ධ වශයෙන් ඇණවුම් කළ සිදුවීම් කට්ටල සහ තවත් බොහෝ දේ.

වැඩසටහන කුමක්ද? මෙය තනිවම සලකා බැලිය හැකි ඕනෑම කේතයකි. අපි හිතමු බ්‍රවුසරයක් ලියන්න ඕන කියලා. අපි කාර්යයන් තුනක් ඉටු කරමු: වැඩසටහනේ පරිශීලකයාගේ ඉදිරිපත් කිරීම සැලසුම් කරන්න, ඉන්පසු වැඩසටහනේ ඉහළ මට්ටමේ රූප සටහන ලියන්න, අවසානයේ කේතය ලියන්න. අපි code එක ලියනකොට අපිට තේරෙනවා අපිට text formatter එකක් ලියන්න ඕන කියලා. මෙහිදී නැවතත් අපට ගැටළු තුනක් විසඳිය යුතුය: මෙම මෙවලම ආපසු ලබා දෙන්නේ කුමන පෙළද යන්න තීරණය කරන්න; හැඩතල ගැන්වීම සඳහා ඇල්ගොරිතමයක් තෝරන්න; කේතය ලියන්න. මෙම කාර්යයට තමන්ගේම උප කාර්යයක් ඇත: හයිෆන් නිවැරදිව වචනවලට ඇතුළත් කිරීම. අපි මෙම උප කාර්යය පියවර තුනකින් විසඳන්නෙමු - අපට පෙනෙන පරිදි, ඒවා බොහෝ මට්ටම්වල පුනරාවර්තනය වේ.

පළමු පියවර දෙස සමීපව බලමු: වැඩසටහන විසඳන ගැටලුව කුමක්ද? මෙහිදී අපි බොහෝ විට යම් ආදානයක් ගෙන යම් ප්‍රතිදානයක් ලබා දෙන ශ්‍රිතයක් ලෙස වැඩසටහනක් ආදර්ශයට ගනිමු. ගණිතයේ දී, ශ්‍රිතයක් සාමාන්‍යයෙන් විස්තර කෙරෙනුයේ පිළිවෙලට ඇති යුගල කට්ටලයක් ලෙස ය. උදාහරණයක් ලෙස, ස්වාභාවික සංඛ්‍යා සඳහා වර්ග කිරීමේ ශ්‍රිතය {<0,0>, <1,1>, <2,4>, <3,9>, …} කට්ටලය ලෙස විස්තර කෙරේ. එවැනි ශ්‍රිතයක් නිර්වචනය කිරීමේ වසම එක් එක් යුගලයේ පළමු මූලද්‍රව්‍ය සමූහය, එනම් ස්වාභාවික සංඛ්‍යා වේ. ශ්‍රිතයක් අර්ථ දැක්වීමට, අපි එහි වසම සහ සූත්‍රය සඳහන් කළ යුතුය.

නමුත් ගණිතයේ ශ්‍රිත ක්‍රමලේඛන භාෂා වල ශ්‍රිත වලට සමාන නොවේ. ගණිතය වඩාත් සරල ය. මට සංකීර්ණ උදාහරණ සඳහා වෙලාවක් නොමැති නිසා, අපි සරල එකක් සලකා බලමු: C හි ශ්‍රිතයක් හෝ පූර්ණ සංඛ්‍යා දෙකක ශ්‍රේෂ්ඨ පොදු භාජකය ලබා දෙන ජාවා හි ස්ථිතික ක්‍රමයක්. මෙම ක්රමයේ පිරිවිතරයේ දී අපි ලියන්නෙමු: ගණනය කරයි GCD(M,N) තර්ක සඳහා M и Nකොහෙද GCD(M,N) - වසම පූර්ණ සංඛ්‍යා යුගල කට්ටලයක් වන ශ්‍රිතයක් වන අතර ආපසු ලැබෙන අගය බෙදනු ලබන විශාලතම නිඛිල වේ M и N. යථාර්ථය මෙම ආකෘතිය සමඟ සැසඳෙන්නේ කෙසේද? ආකෘතිය පූර්ණ සංඛ්‍යා සමඟ ක්‍රියාත්මක වන අතර C හෝ Java හි අපට 32-bit ඇත 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? ශුන්‍යය සියලු සංඛ්‍යා වලින් බෙදිය හැකි බැවින් මෙම අවස්ථාවෙහි ශ්‍රේෂ්ඨ බෙදුම්කරුවෙකු නොමැත. මෙම තත්වය තුළ, අපි පළමු පියවර වෙත ආපසු ගොස් මෙසේ අසන්නෙමු: ධනාත්මක නොවන සංඛ්‍යා සඳහා GCD ගණනය කිරීමට අපට අවශ්‍යද? මෙය අවශ්ය නොවේ නම්, ඔබ පමණක් පිරිවිතර වෙනස් කිරීමට අවශ්ය වේ.

ඵලදායිතාව පිළිබඳ කෙටි අපගමනය මෙහි දී සිදු වේ. එය බොහෝ විට මනිනු ලබන්නේ දිනකට ලියන ලද කේත පේළි ගණනෙනි. නමුත් ඔබට දෝෂ සඳහා අඩු ඉඩක් ඇති නිසා, ඔබ නිශ්චිත රේඛා සංඛ්යාවක් ඉවත් කළහොත් ඔබේ කාර්යය වඩාත් ප්රයෝජනවත් වේ. සහ කේතය ඉවත් කිරීමට පහසුම ක්රමය පළමු පියවර වේ. ඔබ ක්‍රියාත්මක කිරීමට උත්සාහ කරන සියලුම සීනු සහ විස්ල් ඔබට අවශ්‍ය නොවන බව විය හැකිය. වැඩසටහනක් සරල කිරීමට සහ කාලය ඉතිරි කර ගැනීමට ඇති වේගවත්ම ක්‍රමය නම් නොකළ යුතු දේ නොකිරීමයි. දෙවන පියවරට දෙවන ඉහළම කාලය ඉතිරි කිරීමේ හැකියාව ඇත. ඔබ ලියා ඇති රේඛා අනුව ඵලදායිතාව මනින්නේ නම්, කාර්යයක් සම්පූර්ණ කරන්නේ කෙසේද යන්න ගැන සිතීම ඔබව සාදයි අඩු ඵලදායී, අඩු කේතයකින් ඔබට එකම ගැටළුව විසඳිය හැකි බැවිනි. මට මෙහි නිශ්චිත සංඛ්‍යාලේඛන ලබා දිය නොහැක, මන්ද මා පිරිවිතරය සඳහා ගත කළ කාලය, එනම් පළමු සහ දෙවන පියවර නිසා මා නොලියූ පේළි ගණන ගණන් කිරීමට ක්‍රමයක් නොමැති බැවිනි. තවද අපට මෙහි අත්හදා බැලීමක් කළ නොහැක, මන්ද අත්හදා බැලීමකදී පළමු පියවර සම්පූර්ණ කිරීමට අපට අයිතියක් නැත; කාර්යය කල්තියා තීරණය වේ.

අවිධිමත් පිරිවිතරවල බොහෝ දුෂ්කරතා නොසලකා හැරීම පහසුය. කාර්යයන් සඳහා දැඩි පිරිවිතර ලිවීමේ අපහසු කිසිවක් නැත; මම මෙය සාකච්ඡා නොකරමි. ඒ වෙනුවට, අපි සම්මත හැසිරීම් සඳහා ශක්තිමත් පිරිවිතර ලිවීම ගැන කතා කරමු. ආරක්ෂක දේපල භාවිතයෙන් ඕනෑම හැසිරීම් මාලාවක් විස්තර කළ හැකි බව ප්‍රමේයයක් ඇත (ආරක්ෂාව) සහ පැවැත්මේ ගුණාංග (සජීවී බව). ආරක්ෂාව යනු නරක කිසිවක් සිදු නොවන බවයි, වැඩසටහන වැරදි පිළිතුරක් ලබා නොදේ. පැවැත්ම යනු ඉක්මනින් හෝ පසුව හොඳ දෙයක් සිදුවනු ඇති බවයි, එනම් වැඩසටහන ඉක්මනින් හෝ පසුව නිවැරදි පිළිතුර ලබා දෙනු ඇත. රීතියක් ලෙස, ආරක්ෂාව වඩාත් වැදගත් දර්ශකයකි; දෝෂ බොහෝ විට මෙහි සිදු වේ. එමනිසා, කාලය ඉතිරි කර ගැනීම සඳහා, මම පැවැත්ම ගැන කතා නොකරමි, එය ඇත්ත වශයෙන්ම වැදගත් වුවද.

විය හැකි ආරම්භක තත්ත්‍වයන් සමූහයක් පළමුව සඳහන් කිරීමෙන් අපි ආරක්ෂාව සාක්ෂාත් කර ගනිමු. දෙවනුව, එක් එක් ප්‍රාන්තය සඳහා හැකි සියලු ඊළඟ ප්‍රාන්ත සමඟ සබඳතා. අපි විද්‍යාඥයන් ලෙස හැසිරෙමින් ප්‍රාන්ත ගණිතමය වශයෙන් නිර්වචනය කරමු. ආරම්භක අවස්ථා සමූහය සූත්‍රය මගින් විස්තර කෙරේ, උදාහරණයක් ලෙස, යුක්ලීඩීය ඇල්ගොරිතමයේ දී: (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, සෙල්ලම් බඩු ක්‍රමලේඛන භාෂාවකි. PlusCal හි ප්‍රකාශනයක් ඕනෑම TLA+ ප්‍රකාශනයක්, එනම් මූලික වශයෙන් ඕනෑම ගණිත ප්‍රකාශනයක් විය හැක. අතිරේකව, PlusCal හට නිර්ණය නොවන ඇල්ගොරිතම සඳහා වාක්‍ය ඛණ්ඩ ඇත. PlusCal හට ඕනෑම TLA+ ප්‍රකාශනයක් ලිවිය හැකි බැවින්, එය ඕනෑම සැබෑ ක්‍රමලේඛන භාෂාවකට වඩා සැලකිය යුතු ලෙස ප්‍රකාශිත වේ. ඊළඟට, PlusCal TLA+ පිරිවිතර කියවීමට පහසු ලෙස සම්පාදනය කෙරේ. ඇත්ත වශයෙන්ම, සංකීර්ණ PlusCal පිරිවිතර TLA+ හි සරල එකක් බවට පත්වනු ඇතැයි මින් අදහස් නොවේ - ඒවා අතර ලිපි හුවමාරුව පැහැදිලිය, අමතර සංකීර්ණතාවයක් නොපෙන්වයි. අවසාන වශයෙන්, මෙම පිරිවිතර TLA+ මෙවලම් භාවිතයෙන් සත්‍යාපනය කළ හැක. පොදුවේ ගත් කල, PlusCal ගණිතය පිළිබඳ භීතිකාව ජය ගැනීමට උපකාරී වේ; එය ක්‍රමලේඛකයින්ට සහ පරිගණක විද්‍යාඥයින්ට පවා තේරුම් ගැනීමට පහසුය. මම අතීතයේ යම් කාලයක් (අවුරුදු 10 ක් පමණ) එහි ඇල්ගොරිතම පළ කළෙමි.

සමහර විට TLA+ සහ PlusCal ගණිතය බවට යමෙක් විරුද්ධ වනු ඇත, සහ ගණිතය ක්‍රියා කරන්නේ සාදන ලද උදාහරණ සමඟ පමණි. ප්රායෝගිකව, ඔබට වර්ග, ක්රියා පටිපාටි, වස්තු ආදිය සමඟ සැබෑ භාෂාවක් අවශ්ය වේ. මේක වැරදියි. Amazon හි සේවය කළ Chris Newcomb ලියන දේ මෙන්න: “අපි විශාල ව්‍යාපෘති දහයක් සඳහා TLA+ භාවිතා කර ඇති අතර, සෑම අවස්ථාවකදීම එහි භාවිතය සංවර්ධනයට සැලකිය යුතු වෙනසක් ඇති කළේ ඒවා නිෂ්පාදනයට පැමිණීමට පෙර භයානක දෝෂ අල්ලා ගැනීමට අපට හැකි වූ නිසා සහ එය අපට ආක්‍රමණශීලී වීමට අවශ්‍ය අවබෝධය සහ විශ්වාසය ලබා දුන් බැවිනි. වැඩසටහනේ සත්‍යයට බලපෑම් නොකර කාර්ය සාධන ප්‍රශස්තිකරණය". විධිමත් ක්‍රම භාවිතා කරන විට අපට අකාර්යක්ෂම කේතයක් ලැබෙන බව ඔබට බොහෝ විට ඇසෙනු ඇත - ප්‍රායෝගිකව, සියල්ල හරියටම ප්‍රතිවිරුද්ධ වේ. මීට අමතරව, ක්‍රමලේඛකයින්ට ඒවායේ ප්‍රයෝජනය ගැන ඒත්තු ගියත්, විධිමත් ක්‍රමවල අවශ්‍යතාවය කළමනාකරුවන්ට ඒත්තු ගැන්විය නොහැකි බවට මතයක් තිබේ. සහ නිව්කොම්බ් මෙසේ ලියයි. "කළමනාකරුවන් දැන් TLA+ හි පිරිවිතර ලිවීමට හැකි සෑම ආකාරයකින්ම තල්ලු කරමින් සිටින අතර, මේ සඳහා විශේෂයෙන් කාලය වෙන් කරයි". එබැවින් කළමනාකරුවන් TLA + ක්‍රියා කරන බව දුටු විට, ඔවුන් එය වැළඳ ගනී. Chris Newcomb මෙය ලියා ඇත්තේ මීට මාස හයකට පමණ පෙර (ඔක්තෝබර් 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+ model checker එක මෙතන වැඩක් නැති නිසා උදාහරණ අතින් ලියන්න වෙනවා.

ලබා දී ඇති පිරිවිතර සියලු පිරිවිතරයන්ට පොදු ලක්ෂණ ඇත. එය කේතයට වඩා ඉහළ මට්ටමක පවතී. එය ඕනෑම භාෂාවකින් ක්රියාත්මක කළ හැකිය. එය ලිවීම සඳහා මෙවලම් හෝ ක්රම නොමැත. මෙම පිරිවිතර ලිවීමට කිසිදු ක්‍රමලේඛන පාඨමාලාවක් ඔබට උපකාර නොවනු ඇත. තවද ඔබ TLA+ හි ව්‍යුහගත මුද්‍රණ වැඩසටහන් ලිවීම සඳහා විශේෂයෙන් භාෂාවක් ලියන්නේ නම් මිස, මෙම පිරිවිතර අනවශ්‍ය කළ හැකි මෙවලම් නොමැත. අවසාන වශයෙන්, මෙම පිරිවිතරය අපි කේතය හරියටම ලියන්නේ කෙසේද යන්න ගැන කිසිවක් නොකියයි, එය කේතය කරන්නේ කුමක්ද යන්න සඳහන් කරයි. අපි කේතය ගැන සිතීමට පෙර ගැටලුව ගැන සිතා බැලීමට අපට උපකාර කිරීමට පිරිවිතරයක් ලියන්නෙමු.

නමුත් මෙම පිරිවිතර අනෙකුත් පිරිවිතරයන්ගෙන් එය වෙන්කර හඳුනාගත හැකි ලක්ෂණ ද ඇත. අනෙකුත් පිරිවිතරයන්ගෙන් 95% ක් ඉතා කෙටි සහ සරල ය:

ක්‍රමලේඛනය යනු කේතීකරණයට වඩා වැඩි ය

තවද, මෙම පිරිවිතරය නීති මාලාවකි. මෙය සාමාන්‍යයෙන් දුර්වල පිරිවිතරයක ලකුණකි. නීති මාලාවක ප්‍රතිවිපාක තේරුම් ගැනීම තරමක් අපහසුය, ඒ නිසා මට ඒවා නිදොස් කිරීමට බොහෝ කාලයක් ගත කිරීමට සිදු විය. කෙසේ වෙතත්, මෙම නඩුවේදී මට වඩා හොඳ ක්රමයක් සොයාගත නොහැකි විය.

අඛණ්ඩව ක්රියාත්මක වන වැඩසටහන් ගැන වචන කිහිපයක් පැවසීම වටී. සාමාන්‍යයෙන් ඒවා මෙහෙයුම් පද්ධති හෝ බෙදා හරින ලද පද්ධති වැනි සමාන්තරව ක්‍රියා කරයි. ඉතා සුළු පිරිසකට ඔවුන්ගේ මනසින් හෝ කඩදාසි මත ඒවා තේරුම් ගත හැකි අතර, වරක් මට එය කිරීමට හැකි වුවද, මම ඔවුන්ගෙන් කෙනෙකු නොවේ. එබැවින්, අපගේ කාර්යය පරීක්ෂා කරන මෙවලම් අපට අවශ්‍ය වේ - උදාහරණයක් ලෙස, TLA+ හෝ PlusCal.

කේතය කළ යුත්තේ කුමක්දැයි මා දැනටමත් දැන සිටියේ නම් මට පිරිවිතරයක් ලිවීමට අවශ්‍ය වූයේ ඇයි? ඇත්තටම මම හිතුවේ මම දන්නවා කියලා විතරයි. ඊට අමතරව, පිරිවිතරයක් සමඟින්, පිටස්තරයෙකුට එය හරියටම කරන්නේ කුමක්ද යන්න තේරුම් ගැනීමට කේතය දෙස බැලීමට අවශ්‍ය නොවේ. මට රීතියක් තිබේ: පොදු නීති නොතිබිය යුතුය. ඇත්ත වශයෙන්ම මෙම රීතියට ව්‍යතිරේකයක් ඇත, මා අනුගමනය කරන එකම සාමාන්‍ය රීතිය මෙයයි: කේතය කරන්නේ කුමක්ද යන්න පිළිබඳ පිරිවිතර මඟින් එම කේතය භාවිතා කරන විට ඔවුන් දැනගත යුතු සියල්ල මිනිසුන්ට පැවසිය යුතුය.

ඉතින් ක්‍රමලේඛකයින් සිතීම ගැන හරියටම දැනගත යුත්තේ කුමක්ද? ආරම්භ කිරීමට, සෑම කෙනෙකුටම එක හා සමානයි: ඔබ ලියන්නේ නැත්නම්, ඔබ සිතන බව ඔබට පෙනේ. ඒ වගේම code කරන්න කලින් හිතන්න ඕනේ, ඒ කියන්නේ code කරන්න කලින් ලියන්න ඕනේ. පිරිවිතරයක් යනු අපි කේතනය කිරීම ආරම්භ කිරීමට පෙර ලියන දෙයයි. ඕනෑම කෙනෙකුට භාවිතා කළ හැකි හෝ වෙනස් කළ හැකි ඕනෑම කේතයක් සඳහා පිරිවිතරයක් අවශ්‍ය වේ. මෙම "යමෙකු" එය ලියා මාසයකට පසු කේතයේ කතුවරයා බවට පත්විය හැකිය. විශාල වැඩසටහන් සහ පද්ධති සඳහා, පන්ති සඳහා, ක්‍රම සඳහා සහ සමහර විට තනි ක්‍රමයක සංකීර්ණ කොටස් සඳහා පිරිවිතරයක් අවශ්‍ය වේ. කේතය ගැන ඔබ ලිවිය යුත්තේ කුමක්ද? එය කරන්නේ කුමක්ද, එනම්, මෙම කේතය භාවිතා කරන ඕනෑම කෙනෙකුට ප්‍රයෝජනවත් විය හැකි දෙයක් ඔබ විස්තර කළ යුතුය. සමහර විට කේතය එහි ඉලක්කය සපුරා ගන්නේ කෙසේද යන්න සඳහන් කිරීමට ද අවශ්‍ය විය හැකිය. අපි ඇල්ගොරිතම පාඨමාලාවේදී මෙම ක්‍රමය හරහා ගියා නම්, අපි එය ඇල්ගොරිතමයක් ලෙස හඳුන්වමු. එය වඩාත් විශේෂිත සහ අලුත් දෙයක් නම්, අපි එය උසස් මට්ටමේ නිර්මාණයක් ලෙස හඳුන්වමු. මෙහි විධිමත් වෙනසක් නොමැත: දෙකම වැඩසටහනේ වියුක්ත ආකෘති වේ.

ඔබ හරියටම කේත පිරිවිතර ලිවිය යුත්තේ කෙසේද? ප්රධාන දෙය: එය කේතයට වඩා එක් මට්ටමක ඉහළ විය යුතුය. එය තත්වයන් සහ හැසිරීම් විස්තර කළ යුතුය. කාර්යයට අවශ්ය වන පරිදි එය දැඩි විය යුතුය. ඔබ කාර්යයක් ක්‍රියාත්මක කරන්නේ කෙසේද යන්න පිළිබඳ පිරිවිතරයක් ලියන්නේ නම්, එය ව්‍යාජ කේතයකින් හෝ PlusCal භාවිතයෙන් ලිවිය හැකිය. විධිමත් පිරිවිතර භාවිතයෙන් පිරිවිතර ලිවීමට ඔබ ඉගෙන ගත යුතුය. මෙය ඔබට අවශ්‍ය කුසලතා ලබා දෙන අතර එය අවිධිමත් ඒවා සඳහාද උපකාරී වේ. විධිමත් පිරිවිතර ලිවීමට ඔබට ඉගෙන ගත හැක්කේ කෙසේද? අපි වැඩසටහන් කිරීමට ඉගෙන ගත් විට, අපි වැඩසටහන් ලියා පසුව ඒවා දෝෂහරණය කළෙමු. මෙහි එකම දෙය: ඔබට පිරිවිතරයක් ලිවිය යුතුය, එය ආදර්ශ පරීක්ෂකයෙකු සමඟ පරීක්ෂා කර දෝෂ නිවැරදි කරන්න. TLA+ විධිමත් පිරිවිතරයක් සඳහා හොඳම භාෂාව නොවිය හැකි අතර, වෙනත් භාෂාවක් ඔබේ නිශ්චිත අවශ්‍යතා සඳහා වඩාත් සුදුසු වනු ඇත. TLA+ හි ඇති විශිෂ්ටතම දෙය නම් එය ගණිතමය චින්තනය ඉගැන්වීමේ විශිෂ්ට කාර්යයක් කිරීමයි.

පිරිවිතර සහ කේතය සම්බන්ධ කරන්නේ කෙසේද? ගණිතමය සංකල්ප සහ ඒවා ක්‍රියාත්මක කිරීම සම්බන්ධ කරන අදහස් භාවිතා කිරීම. ඔබ ප්‍රස්ථාර සමඟ වැඩ කරන්නේ නම්, වැඩසටහන් මට්ටමේදී ඔබට නෝඩ් අරා සහ සබැඳි අරා ඇත. එබැවින් මෙම ක්‍රමලේඛන ව්‍යුහයන් මගින් ප්‍රස්ථාරය හරියටම ක්‍රියාත්මක කරන්නේ කෙසේද යන්න ඔබ ලිවිය යුතුය.

ඉහත කිසිවක් කේතය ලිවීමේ ක්‍රියාවලියට අදාළ නොවන බව සටහන් කළ යුතුය. ඔබ කේතය ලියන විට, එනම්, තුන්වන පියවර සිදු කරන විට, ඔබ ද වැඩසටහන හරහා සිතා බැලිය යුතුය. උප කාර්යයක් සංකීර්ණ හෝ පැහැදිලි නොවේ නම්, ඔබ ඒ සඳහා පිරිවිතරයක් ලිවිය යුතුය. නමුත් මම මෙහි කේතය ගැන කතා කරන්නේ නැහැ. ඔබට ඕනෑම ක්‍රමලේඛන භාෂාවක්, ඕනෑම ක්‍රමවේදයක් භාවිතා කළ හැකිය, මෙය ඔවුන් ගැන නොවේ. එසේම, ඉහත කිසිවක් ඔබගේ කේතය පරීක්ෂා කර දෝෂහරණය කිරීමේ අවශ්‍යතාවය ඉවත් නොකරයි. වියුක්ත ආකෘතිය නිවැරදිව ලියා ඇතත්, එය ක්රියාත්මක කිරීමේදී දෝෂ ඇති විය හැක.

පිරිවිතර ලිවීම කේතීකරණ ක්‍රියාවලියේ අතිරේක පියවරකි. එයට ස්තූතියි, බොහෝ දෝෂ අඩු උත්සාහයකින් අල්ලා ගත හැකිය - ඇමේසන් වෙතින් ක්‍රමලේඛකයන්ගේ අත්දැකීම් වලින් අපි මෙය දනිමු. පිරිවිතරයන් සමඟ, වැඩසටහන් වල ගුණාත්මකභාවය ඉහළ යයි. ඉතින් ඇයි අපි ඔවුන් නොමැතිව බොහෝ විට යන්නේ? මොකද ලියන්න අමාරුයි. නමුත් ලිවීම දුෂ්කර ය, මන්ද මේ සඳහා ඔබ සිතිය යුතු අතර සිතීම ද දුෂ්කර ය. ඔබ සිතන බව මවා පෑම සැමවිටම පහසුය. මෙහි දිවීම සමග සාදෘශ්‍යයක් ඇඳිය ​​හැක - ඔබ දුවන්නේ අඩුවෙන්, මන්දගාමීව ධාවනය වේ. ඔබ ඔබේ මාංශ පේශි පුහුණු කළ යුතු අතර ලිවීමට පුරුදු විය යුතුය. ඒකට පුරුදු වෙන්න ඕන.

පිරිවිතර වැරදි විය හැක. ඔබ කොතැනක හෝ වැරැද්දක් කර ඇති හෝ අවශ්‍යතා වෙනස් වී තිබිය හැකිය, නැතහොත් වැඩිදියුණු කිරීමක් සිදු කිරීමට අවශ්‍ය විය හැකිය. ඕනෑම අයෙකු භාවිතා කරන ඕනෑම කේතයක් වෙනස් කළ යුතුය, එබැවින් ඉක්මනින් හෝ පසුව පිරිවිතර තවදුරටත් වැඩසටහනට නොගැලපේ. ඉතා මැනවින්, මෙම අවස්ථාවේදී, ඔබ නව පිරිවිතරයක් ලිවිය යුතු අතර කේතය සම්පූර්ණයෙන්ම නැවත ලිවිය යුතුය. අපි හොඳටම දන්නවා මේක කවුරුත් කරන්නේ නැහැ කියලා. ප්‍රායෝගිකව, අපි කේතය පැච් කර සමහර විට පිරිවිතර යාවත්කාලීන කරන්නෙමු. මෙය ඉක්මනින් හෝ පසුව සිදුවනු ඇත නම්, පිරිවිතර ලියන්නේ මන්ද? පළමුව, ඔබේ කේතය සංස්කරණය කරන පුද්ගලයා සඳහා, පිරිවිතරයේ ඇති සෑම අමතර වචනයක්ම එහි බර රත්‍රන් වලින් වටිනු ඇති අතර, මෙම පුද්ගලයා ඔබ විය හැකිය. මම මගේ කේතය සංස්කරණය කරන විට ප්‍රමාණවත් තරම් නිශ්චිත නොවීම නිසා මම බොහෝ විට මටම පයින් ගසමි. මම කේතයට වඩා වැඩි පිරිවිතර ලියන්නෙමි. එබැවින්, ඔබ කේතය සංස්කරණය කරන විට, පිරිවිතර සෑම විටම යාවත්කාලීන කළ යුතුය. දෙවනුව, එක් එක් සංස්කරණය සමඟ කේතය නරක අතට හැරේ, එය කියවීම සහ නඩත්තු කිරීම වඩාත් අපහසු වේ. මෙය එන්ට්‍රොපිය වැඩි වීමකි. නමුත් ඔබ පිරිවිතරයකින් ආරම්භ නොකරන්නේ නම්, ඔබ ලියන සෑම පේළියක්ම සංස්කරණයක් වනු ඇත, කේතය විශාල වන අතර ආරම්භයේ සිට කියවීමට අපහසු වනු ඇත.

කිව්වා වගේ අයිසන්හවර්, සැලැස්මකට අනුව කිසිදු සටනක් ජය නොගත් අතර සැලැස්මක් නොමැතිව කිසිදු සටනක් ජය ගත්තේ නැත. ඔහු සටන් ගැන යමක් දැන සිටියේය. පිරිවිතර ලිවීම කාලය නාස්ති කිරීමක් බවට මතයක් තිබේ. සමහර විට මෙය සත්ය වන අතර, කාර්යය ඉතා සරල වන අතර එය සිතා බැලීමේ තේරුමක් නැත. නමුත් ඔබ සැමවිටම මතක තබා ගත යුතු කරුණක් නම්, ඔබට පිරිවිතර ලිවීමෙන් වළකින්නැයි උපදෙස් දෙන විට, එයින් අදහස් කරන්නේ ඔබට සිතන්න එපා යැයි උපදෙස් දෙන බවයි. ඒ වගේම හැම මොහොතකම ඔබ මේ ගැන සිතිය යුතුයි. කාර්යයක් ගැන සිතීම ඔබ වැරදි නොකරන බවට සහතික නොවේ. අප දන්නා පරිදි, කිසිවෙකු මැජික් යෂ්ටියක් නිර්මාණය නොකළ අතර, වැඩසටහන්කරණය දුෂ්කර කාර්යයකි. නමුත් ඔබ කාර්යය ගැන සිතන්නේ නැත්නම්, ඔබ වැරදි කිරීමට සහතික වේ.

ඔබට විශේෂ වෙබ් අඩවියකින් TLA+ සහ PlusCal ගැන වැඩිදුර කියවිය හැකිය, ඔබට මගේ මුල් පිටුවෙන් එහි යා හැක ලින්ක්. මට එපමණයි, ඔබේ අවධානයට ස්තූතියි.

මෙය පරිවර්තනයක් බව කරුණාවෙන් සලකන්න. ඔබ අදහස් ලියන විට, කතුවරයා ඒවා නොකියවන බව මතක තබා ගන්න. ඔබට සැබවින්ම කතුවරයා සමඟ කතාබස් කිරීමට අවශ්‍ය නම්, ඔහු 2019 ජූලි 11-12 දිනවල ශාන්ත පීටර්ස්බර්ග් හි පැවැත්වෙන හයිඩ්‍රා 2019 සම්මන්ත්‍රණයේ සිටිනු ඇත. ටිකට්පත් මිලදී ගත හැකිය නිල වෙබ් අඩවියේ.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න