| |||||||||
Bounds checking is the name given to any method of detecting whether or not the index given lies within the limits of the array. For example, accessing index 25 on an array of size 10 would be caught by bounds checking as an invalid index, because it does not lie within the specified size limit of the array.
Because performing bounds checking during every access of an array is inefficient and in some applications unacceptable, there are compiler technologies for eliminating bounds checking in many common cases when they are provably not needed; see bounds checking elimination.
Many mainstream languages of the 1980's and 1990's, such as C, C++, and Pascal, did not ever perform automatic bounds checking, in the interest of efficiency. However, this has been a source of innumerable errors; although necessary in some cases, many believe these languages sacrifice too much in the search for rapid execution. In his 1980 Turing Award lecture (1), C. Antony R. Hoare, describing his experience in the design of Algol 60, which included bounds checking, said:
Mainstream languages that enforce run time checking include Java and C#. These are relatively new languages.