Зачем поле "guard"?
Что значит "контролируется при присваивании/создании"?
Что значит "в случае обращения к защищенному участку памяти"?
Изначально данное поле предназначалось для защиты объектов. Обычно это поле равно 0, что говорит о том, что "дверь открыта" и с объектом (вернее с выделенным участком памяти, где и лежит нужный нам объект) можно делать всё что угодно и кому угодно. Если значение отлично от 0, то объект защищен и его нельзя трогать - нельзя пересоздать (что гарантирует присутствие нужного экземпляра), нельзя собрать сборщиком мусора и т.д., а WITH использует этот механизм для того, чтобы гарантировать неизменность не только типа, но и экземпляра.
В оригинальном Обероне WITH тупой до безобразия. Во время компиляции просто временно меняется тип переменной и далее соответственно разыменования контролируются с этим временным типом (контроль времени компиляции). А у вас я так понимаю в рантайме при каждом разыменовании контроль происходит?
В оригинальном Обероне опять же в рантайме контроль осуществляется ровно один раз при входе в блок WITH.
Ничего не могу сказать про оригинальный Оберон, потому что когда мы писали компилятор я видел только описание языка и никакого реального компилятора у нас не было. Возможно, я неверно интерпретировал описание WITH, потому что в моём понимании любое обращение к защищаемой переменной должно вызывать проверку типа, либо должен быть механизм, гарантирующий неизменность типа и экземпляра. Т.к. это относительно медленное дело, то мы и решили уже имеющийся у нас механизм с полем guard использовать и здесь - ведь залоченный объект гарантированно неизменен (т.е. защищен) и проверять это при каждом обращении совершенно бессмысленно, хотя это тоже поддерживается через ключи компиляции. В тоже время за 7 лет эксплуатации данные предосторожности были использованы только при разработке для отслеживания возможных казусов, и ни разу не сработали, потому что изменение защищенной переменной говорит о дыре не в языке или реализации компилятора, а в голове у программиста.