Isso é um bug. Que foi corrigido com https://github.com/rakudo/rakudo/commit/f70d95e299 .
A razão pela qual agiu de maneira diferente do Rat
que para qualquer outro tipo, é que o Rat
caso foi otimizado para não ter que fazer coerção e, portanto, não é necessário verificar o resultado da coerção. Nesse caso, o valor foi colocado diretamente no novo Duration
objeto. No entanto, isso foi feito sem desmaterializar, para que o Duration
objeto realmente fizesse referência à variável $x
do seu exemplo. Tudo está bem em geral, mas a .gist
lógica de alguma forma criou um loop infinito, tentando criar uma representação do Duration
por causa dessa auto-referência. Devo admitir que eu realmente não olhei exatamente onde ele entrou em loop.
De qualquer forma, ao garantir que o valor não seja mantido dentro do Duration
objeto, o problema desaparece, pois não pode mais ser auto-referenciado.