Duration.new neden Int ile çalışıyor ancak Rat ile çalışmıyor?


9

Bir süre için, neden bir Rat'ı bir Real'e elle zorlamam gerekiyor, ama Int değil?

Bu, Perl 6.d uygulayan MoarVM 2020.01.1 sürümü üzerine inşa edilmiş Rakudo 2020.01 sürümüdür. OSX'te.

say $v.WHAT; #(Int)
$v = Duration.new( $v );
say $v;     #20 

my $w = 20.0;
say $w.WHAT; #(Rat)
$w = Duration.new( $w.Real );
say $w;     #20 

my $x = 20.0;
say $x.WHAT; #(Rat)
$x = Duration.new( $x );
say $x;     #hangs

Yanıtlar:


10

Bu bir hatadır. Https://github.com/rakudo/rakudo/commit/f70d95e299 ile giderildi .

RatDiğer herhangi bir türden farklı davranmasının nedeni , Ratdavanın herhangi bir baskı yapmak zorunda kalmayacak şekilde optimize edilmiş olması ve dolayısıyla zorlamanın sonucunu kontrol etmek için gerekli olmamasıdır. Bu durumda, değer doğrudan yeni Durationnesneye yerleştirilir. Bununla birlikte, kapsayıcılığı kaldırmadan bunu yaptı, bu yüzden Durationnesne aslında $xörneğinizden değişkene atıfta bulunacaktır . Bu genel olarak iyi, ama .gistmantık bir şekilde Durationbu öz referansın bir temsilini yaratmaya çalışan sonsuz bir döngü yarattı . İtiraf etmeliyim ki, tam olarak bir döngüye girdiği yere bakmadım.

Her neyse, değerin Durationnesnenin içinde dekonerleştirildiğinden emin olarak , sorun artık kendinden referans gösteremediği için ortadan kalkar .


1
aha - teşekkürler! Genellikle raku ile ben derleyici değil böcek benim olduğunu bulmak!
p6steve

Kendine referans veren soru!
SS Anne
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.