Кіріспе
Компиляторды оңтайландыру
Компьютерлік ғылымда, шектерді тексеруді жою – шектерді тексеруді қолданатын бағдарламалау тілдерінде немесе орындалу кезіндегі жүйелерде пайдалы компилятор оңтайландыруы. Шектерді тексеру – массивке кез келген индекс қолданғанда, сол индекс массивің белгіленген жарамды диапазонында екенін тексеру амалы. Оның мақсаты – осы индекске қолдану операцияларының қайсысын орындау кезінде растау қажет емес екенін анықтап, осы тексерулерді жою. Көп кездесетін мысал – массив элементіне кіру, оны өзгертү, ал өзгерткен мәнді сол массивте сол орналасқан жерге сақтау. Әдетте, бұл мысал элемент массивің оқылып жатқанда бір шек тексеруді, ал өзгерткен элемент сол массив индексі арқылы сақталғанда екінші шек тексеруді тудырады. Шектерді тексеруді жою, егер компилятор немесе орындалу кезіндегі жүйе массивтің мөлшері де, индексі де екі массив операциясы арасында өзгермейтінін анықтаса, екінші тексеруді жоюы мүмкін. Тағы бір мысал – бағдарламашы массив элементтері бойынша циклды жүргізеді, ал цикл шарты индекс массивің шегінде екендігіне кепілдік береді. Бағдарламашының қолмен жасаған тексеруі автоматты тексеруді артық қылатынын анықтау қиын болуы мүмкін. Дегенмен, компилятор немесе орындалу кезіндегі жүйе осы жағдайда шектерді тексеруді жоюға мүмкіндік береді.
In computer science, bounds checking elimination is a compiler optimization useful in programming languages or runtime systems that enforce bounds checking, the practice of checking every index into an array to verify that the index is within the defined valid range of indexes. Its goal is to detect which of these indexing operations do not need to be validated at runtime, and eliminating those checks. One common example is accessing an array element, modifying it, and storing the modified value in the same array at the same location. Normally, this example would result in a bounds check when the element is read from the array and a second bounds check when the modified element is stored using the same array index. Bounds checking elimination could eliminate the second check if the compiler or runtime can determine that neither the array size nor the index could change between the two array operations. Another example occurs when a programmer loops over the elements of the array, and the loop condition guarantees that the index is within the bounds of the array. It may be difficult to detect that the programmer's manual check renders the automatic check redundant. However, it may still be possible for the compiler or runtime to perform proper bounds checking elimination in this case.
Жергілікті құрастырылған тілдерде
Шектерді тексеруді жоюдың бір тәсілі – типтелген статикалық бір тапсырма түріндегі ұсынысты қолдану және әрбір массив үшін сол массив үшін қауіпсіз индексті көрсететін жаңа тип құру. Мәннің массивтің индексі ретінде алғаш рет қолданылуы кезінде типке келтіру (және тиісті тексеру) жүзеге асырылады, бірақ кейін қауіпсіз индекс мәнін типке келтірмей-ақ, дұрыстықтан немесе қауіпсіздіктен айырылмастан пайдалануға болады.
JIT құрастырған тілдерде
Java және C# сияқты уақытында компиляцияланатын тілдер массивтерге қол жеткізер алдында индекстерді әдетте жұмыс уақытында тексереді. HotSpot сияқты кейбір уақытында компиляторлар, егер индекс әрқашан дұрыс диапазон шегінде екенін анықтаса немесе бұрынғы тексеру қателік тудырған болса, осы тексерулердің бір бөлігін жоюға қабілетті.