Введение

Оптимизация компилятора
В информатике, исключение проверки границ — это оптимизация компилятора, полезная в языках программирования или средах выполнения, которые обеспечивают проверку границ, то есть проверку каждого индекса при обращении к массиву на предмет его нахождения в пределах допустимого диапазона индексов. Её цель — определить, какие из этих операций индексирования не требуют проверки во время выполнения, и устранить эти проверки. Типичный пример — доступ к элементу массива, его изменение и сохранение измененного значения в тот же массив по тому же индексу. Обычно в этом случае проверка границ выполняется при чтении элемента из массива и повторно — при записи измененного элемента с использованием того же индекса. Исключение проверки границ может устранить вторую проверку, если компилятор или среда выполнения могут установить, что размер массива и индекс не изменяются между этими двумя операциями. Другой пример возникает, когда программист перебирает элементы массива, а условие цикла гарантирует, что индекс остается в пределах границ массива. Может быть сложно определить, что ручная проверка, выполненная программистом, делает автоматическую проверку избыточной. Однако компилятор или среда выполнения все равно могут успешно выполнить исключение проверки границ в этом случае.

На языках, скомпилированных на основе исходного языка

Один из способов исключения проверок границ — использовать типизированное статическое представление в форме одиночного присваивания и для каждого массива создавать новый тип, представляющий безопасный индекс для этого конкретного массива. Первое использование значения в качестве индекса массива приводит к приведению типов во время выполнения (и соответствующей проверке), но впоследствии это безопасное значение индекса можно использовать без приведения типов, не теряя при этом корректности или безопасности.

На языках, составленных JIT

Точно вовремя компилируемые языки, такие как Java и C#, часто проверяют индексы во время выполнения перед обращением к массивам. Некоторые компиляторы JIT, например HotSpot, способны исключить часть этих проверок, если они выясняют, что индекс всегда находится в допустимом диапазоне, или если предыдущая проверка уже привела бы к возникновению исключения.