Кіріспе

Бағдарламалау тілінің құралы. Қысқа тұйықтамалы бағалау, минималды бағалау немесе Маккарти бағалауы (Джон Маккарти атымен) – кейбір бағдарламалау тілдеріндегі кейбір бульдік операторлардың семантикасы, онда екінші аргумент тек бірінші аргумент өрнектің мәнін анықтау үшін жеткіліксіз болған жағдайда ғана орындалады немесе бағаланады: Егер AND функциясының бірінші аргументі жалғанға бағаланса, жалпы мән жалған болуы керек; ал егер OR функциясының бірінші аргументі шындыққа бағаланса, жалпы мән дұрыс болуы керек. Жақсылықпен бағалау (lazy evaluation) бар тілдерде (Lisp, Perl, Haskell) бульдік операторлар әдетте қысқа тұйықталады. Басқа тілдерде (Ada, Java, Delphi) қысқа тұйықтамалы және стандартты бульдік операторлардың екеуі де қолжетімді. Нәтижені анықтау үшін екі операндтың да әрқашан қажет болатындықтан, кейбір бульдік операциялар үшін, мысалы, эксклюзивті немесе (XOR) үшін, қысқа тұйықтама жасау мүмкін емес. Қысқа тұйықтамалы операторлар, іс жүзінде, қарапайым арифметикалық операторлар емес, басқару құрылымдары болып табылады, өйткені олар қатаң емес. Императивті тілдерде (әсіресе C және C++), жанама әсерлер маңызды болғанда, қысқа тұйықтамалы операторлар реттілік нүктесін енгізеді: олар екінші аргументті (мүмкіндігінше) өңдеуден бұрын, бірінші аргументті, соның ішінде кез келген жанама әсерлерді толық бағалайды. ALGOL 68 пайдаланушы анықтаған операторлар мен процедураларды жасау үшін процедуралық тәсілдерді қолданды. Қысқа тұйықтамалы операторларды пайдалану мәселелі деп сынға түсті.

Анықтама

Қысқа тұйықталуды іске асыратын кез келген бағдарламалау тілінде, `x және y` өрнегі `егер x болса, y болмаса x` шартты өрнегімен тең, ал `x немесе y` өрнегі `егер x болса, x болмаса y` шартты өрнегімен тең. Екі жағдайда да, `x` тек бір рет бағаланады. Жоғарыдағы жалпыланған анықтама, `True` және `False` екі ғана шындық мәнінен өзгеше, бос типті тілдерді де қамтиды, онда қысқа тұйықталу операторлары соңғы бағаланған кіші өрнекті қайтара алады. Бұл төмендегі кестеде "соңғы мән" деп аталады. Қатаң түрде типтелген тіл үшін, Бульдік жағдайда бұл өрнектер тиісінше `егер x болса, y болмаса жалған` және `егер x болса, шын болмаса y` түрінде қарапайымдатылады.

Ресмилендіру

Қысқа тұйықталу логикасы, жанама әсерлерімен немесе оларсыз, Хоар шарты негізінде формалдануы мүмкін. Осының нәтижесінде, қысқа тұйықталу операторлары жоқ операторларды қысқа тұйықталу логикасынан осыған ұқсас бағалау тізбегін алу үшін анықтауға болады.

Оптимизациялауды шектеуден болатын тиімділіктің төмендеуі

Қысқа тұйықталу заманауи орталық процессорларда (CPU) тармақтарды болжауда қателерге алып келуі мүмкін және өнімділікті күрт төмендетуі мүмкін. Назар аударуға лайық мысал – сәулелерді іздеудегі осьтерге қатысты қораптардың қиылысуын анықтайтын жоғары сапалы код. Кейбір компиляторлар мұндай жағдайларды анықтап, одан да жылдам код жасаса да, бағдарламалау тілінің ережелері мұндай оңтайландыруларға кедерес келтіруі мүмкін. 2012 жылғы деректер бойынша, мұндай жағдайларды оңтайландыра алмайтын компилятордың мысалы – Java-ның Hotspot виртуалды машинасы (VM).