Я использовал APL / 370 в конце 60-х на IBM 360/40. APL - это язык, в котором практически все является многомерным массивом, и есть удивительные операторы для манипулирования массивами, включая изменение формы от N измерений до M измерений и т. Д.
Неудивительно, что массив из N измерений имел границы индекса 1..k с различным положительным k для каждой оси .. и юридически k всегда было меньше 2 ^ 31 (положительные значения в 32 немного подписал машинное слово). Теперь массив из N измерений имеет место, назначенное в памяти. Попытки получить доступ к слоту массива с использованием индекса, слишком большого для оси, проверяются по верхней границе массива с помощью APL. И, конечно, это относится к массиву из N измерений, где N == 1.
APL не проверял, не сделали ли вы что-то невероятно глупое с оператором RHO (изменение формы массива). APL допускает не более 64 измерений. Таким образом, вы можете создать массив размером 1-64, и APL сделает это, если все размеры массива будут меньше 2 ^ 31. Или вы можете попытаться создать массив размером 65 . В этом случае APL дурачился и неожиданно возвращал массив из 64 измерений, , но не смог проверить размеры оси.
(Это действительно там, где произошло «переполнение целых чисел»). Это означало, что вы можете создать массив с размерами осей 2 ^ 31 или более ... но интерпретируемые как целые числа со знаком, они трактуются как отрицательные числа.
Правильное заклинание оператора RHO, примененное к такому массиву, может уменьшить размерность до 1, с верхней границей, получить это «-1». Назовите эту матрицу "червоточиной" (вы поймете, почему в данный момент). Такой массив червоточин имеет
место в памяти, как и любой другой массив. Но все обращения к массиву проверяются по верхней границе ... но проверка привязки к массиву оказалась выполненной с помощью unsigned сравнения по APL. Таким образом, вы можете получить доступ к WORMHOLE [1], WORMHOLE [2], ... WORMHOLE [2 ^ 32-2] без возражений. По сути, вы можете получить доступ ко всей памяти машины.
В APL также была операция присвоения массива, в которой вы могли заполнить массив значением.
WORMHOLE [] <- 0 обнуляет <em>все памяти.
Я сделал это только один раз, поскольку он стер память, содержащую мое рабочее пространство APL, интерпретатор APL и, очевидно, критическую часть APL, которая включала разделение времени (в те дни он не был защищен от пользователей) ... терминал номер
перешел из своего обычного состояния с механически очень шумным (у нас было 2741 терминалов Selectric APL) в беззвучный режим примерно через 2 секунды.
Сквозь стекло в компьютерную комнату я видел оператора, пораженного огнем 370, когда они все погасли. Много бега вокруг последовало.
Хотя в то время это было забавно, я держал рот на замке.
С некоторой осторожностью, очевидно, можно было вмешаться в ОС произвольным образом.