Чем должна быть заполнена память, если моя программа malbolge содержит только 1 инструкцию?
В соответствии с оригинальной спецификацией '98, Ben Olmstead Malbolge VM заполняет пустые ячейки памяти, используя сумасшедшие операции на двух предыдущих ячейках. "Ячейки, которые не инициализированы, устанавливаются путем повторного выполнения операций над предыдущими двумя ячейками". Т.е.
[m] = crz [m-2], [m-1]
Ради здравого смысла, что мне делать, если программа содержит только 1 инструкцию?
Или я должен предположить, что последний символ всегда EOF
?
1 ответ
Судя по реализации и языковой адвокатуры, есть два варианта -
Если мы рассматриваем определение "две предыдущие ячейки" как буквально две предыдущие ячейки, то программа с одним символом или пустой ошибкой в языке недопустима в языке, потому что она не может быть выполнена в соответствии со спецификациями.
Если мы рассмотрим определение
[m] = crz [m-2], [m-1]
, это становится интересным. Основная реализация (наряду с, вероятно, большей частью остальных) используетunsigned short
(или жеint
) для указателя памяти. Когда вы пытаетесь вычитать2
от1
(m-2
) это приводит к0xffff
, десятичный65535
(подробности см. в этом ответе), что немного больше, чем у Мальболжа.59049
ограничение памяти. Этот глюк работает (почти) идеально на обычной машине, используя0xffff
ячейка для сумасшедших операций (даже не повреждая память вне среды!), но выйдет из строя на ограниченном объеме памяти или виртуальной машине.- Вы могли бы в конечном итоге
0xffffffff
вместо0xffff
в зависимости от того, как вы используете указатель.
- Вы могли бы в конечном итоге
Короче,
- Если вы запустите его вручную, предположите, что это не удалось.
- Если вы запустите его на виртуальной машине, это не удастся.
- Если вы запустите его на симуляторе, он, вероятно, будет работать, но не сможет запустить сам, поскольку
0xffff
Ячейка памяти со случайным значением, приводящая к случайным значениям в памяти среды. С другой стороны, что вы можете ожидать от однобайтовой программы malbolge?