Это ошибка. Что было исправлено с помощью https://github.com/rakudo/rakudo/commit/f70d95e299.
Причина, по которой он действовал иначе для Rat
, чем для любого другого типа, заключается в том, что случай Rat
был оптимизирован, чтобы не выполнять никакого принуждения, и, следовательно, не нужно проверять результат принуждения. В этом случае значение было помещено непосредственно в новый объект Duration
. Однако это было сделано без деконтейнерства, поэтому объект Duration
фактически будет ссылаться на переменную $x
из вашего примера. В общем, все нормально, но .gist
logi c каким-то образом создал бесконечное l oop, пытаясь создать представление Duration
из-за этой самоссылки. Должен признать, что я действительно не изучал, куда именно он попал в al oop.
В любом случае, убедившись, что значение извлечено изнутри внутри объекта Duration
, проблема исчезнет, так как она не может быть больше ссылаться на себя.