🦋 Welcome to the IRC channel of the core developers of the Raku Programming Language (raku.org #rakulang). This channel is logged for the purpose of history keeping about its development | evalbot usage: 'm: say 3;' or /msg camelia m: ... | log inspection situation still under development | For MoarVM see #moarvm
Set by lizmat on 22 May 2021.
00:07 reportable6 left 00:09 reportable6 joined 00:56 frost joined 01:19 frost left 01:59 frost joined 02:05 frost left 02:24 frost joined 02:30 frost left 02:43 frost joined 03:12 discord-raku-bot left, discord-raku-bot joined 03:16 frost left 03:21 frost joined 03:41 frost left 03:51 frost joined 03:56 frost left 06:07 reportable6 left 06:19 frost joined 07:10 reportable6 joined 07:38 frost left 07:47 frost joined 07:53 frost left
nine Ooooh....now I know where the spectest failures on my laptop are coming from. I've got 6.d-errata checked out 08:46
Geth rakudo/fix_unsigned_for_merge: 6 commits pushed by (Stefan Seifert)++ 09:02
10:13 linkable6 left, evalable6 left 10:16 evalable6 joined 10:27 frost joined 10:32 frost left 10:42 frost joined 10:55 frost left 11:02 frost joined 11:26 frost left 11:47 frost joined 11:51 frost left 12:07 reportable6 left 12:14 linkable6 joined 13:07 frost joined 13:33 carlmasak joined 13:41 frost left
lizmat m: dd 0.8144262510988963255087469.nude # what's wrong with this picture ? 14:08
camelia (8144262510988963255087469, 10000000000000000000000000)
lizmat m: dd 0.8144262510988963255087469.^name
camelia "Rat"
lizmat both values *exceed* the size of 64 native ints
14:10 reportable6 joined
lizmat but we're ok with that, as Rats currently are created with Int attributes, rather than with 'int" attributes 14:12
moon-child inb4 rat (with a lowercase r) 14:14
codesections lizmat that's all correct (at least according to the current docs)
lizmat m: dd Rat.new(8144262510988963255087469,10000000000000000000000000).nude # the real issue
camelia (8144262510988963255087469, 10000000000000000000000000)
lizmat that should either have become a Num or a FatRat, or warn or die 14:15
basically, we don't check for upgrading on creation of a Rat
and perhaps we should ?
moon-child ah, yeah, because:
codesections The docs *explicitly* allow for that, though: "When constructing a Rat (i.e. when it is not a result of some mathematical expression), however, a larger denominator can be used" 14:16
moon-child m: my $x = Rat.new(8144262510988963255087469,10000000000000000000000000); say WHAT $x; say WHAT 1*$x;
camelia (Rat)
moon-child seems odd
codesections and give my $c = Rat.new(1, 2⁶⁴); as an example
lizmat seems to me the docs are describing current behaviour rather than desired behaviour
if Rats had been created with native ints, this would not have worked 14:17
codesections Well, in general the docs don't (intentionally) describe bugs – so the author of that section (Zoffix, I think?) thought it was desired 14:18
moon-child S02-types/num.t: ‘Rat supports extended precision rational arithmetic’ 14:19
14:19 carlmasak left
nine Or just didn't know any better 14:19
codesections Hmm, that section of the docs previously read: 14:22
> When I<constructing> a L<Rat> (i.e. when it is not
a result of some mathematical expression), however, a "fattish" L<Rat> with
larger denominator will be created.
github.com/Raku/doc/blame/6c9a97c2...erics.pod6 14:23
(not sure what a "fattish" Rat is :D )
MasterDuke we used to have Texas operators, we could have NYC rats... 14:25
moon-child haha
lizmat well, the "fattish" Rat is a Rat with out of range numerator / denominator values
that *would* be ok in a FatRat
codesections MasterDuke: no thanks! nude FatRats are frightening enough 14:26
lizmat of course, if we would silently upgrade to FatRat or downgrade to Num, this would fail: 14:27
m: my Rat $a = 0.8144262510988963255087469
camelia ( no output )
lizmat m: say Num ~~ Rat; say FatRat ~~ Rat 14:28
camelia False
codesections lizmat yeah. And that change was based on a Rat normalization grant, so it presumably _was_ intentional 4 years ago. (Which isn't to say it's correct, just probably not an accident)
moon-child m: say Rat ~~ FatRat 14:29
camelia False
lizmat if we leave things as they are, then I think that
0.8144262510988963255087469 would need a compile time worry
14:48 MasterDuke left
lizmat afk for a few hours& 14:50
14:52 qorg11 left 14:53 qorg11 joined 15:06 carlmasak joined, MasterDuke joined 15:16 carlmasak left 15:36 carlmasak joined, carlmasak left 16:31 kjp left 16:34 kjp joined
codesections .tell lizmat it looks like the `Rat` initialization is intentional (with the goal of letting users have a Rat that can be used with full precision with FatRats but isn't infectious). See news.perlfoundation.org/post/grant...6_bugfixin (describing a `MidRat` to provide this functionality) and 17:24
blogs.perl.org/users/zoffix_znet/20...-2018.html (deciding to fold that into `Rat` instead of adding `MidRat`)
tellable6 codesections, I'll pass your message to lizmat
lizmat codesections: but that is not achieved, as precision is lost!
codesections Well, only when it's printed :) 17:26
m: my $var = 0.8144262510988963255087469; my $var2 = 1.FatRat × $var; say $var2; 17:27
camelia 0.8144262510988963255087469
lizmat m: my $var = 0.8144262510988963255087469; my $var2 = 1 × $var; say $var2 17:28
camelia 0.8144262510988963
lizmat m: my $var = 0.8144262510988963255087469; my $var2 = 2 × $var; say $var2
camelia 1.6288525021977927
lizmat looks to me it's losing precision unless you *know* you want a FatRat ?
in any case, I just found out that 0.1234.FatRat is codegenned as a fattish constant Rat with the .FatRat called on it at runtime :-( 17:29
codesections It's a weird creature. It _has_ the precision internally, but it loses it whenever it's used with anything other than a FatRat 17:30
lizmat and since a FatRat is not a Rat, we cannot just simply create a FatRat constanrt
meh 17:31
codesections It seems like your idea of special-casing how Rats print when they have a denominator that's a power of 10 would solve 95% of the issue 17:33
lizmat actually, that was a bad idea 17:35
MasterDuke m: class A is FatRat {}.new.raku.say; class B is Rational {}.new.raku.say   a bunch of other classes have this problem, they hard-code their name in their `method raku` instead of using `self.^name` 17:36
camelia ===SORRY!=== Error while compiling <tmp>
Two terms in a row
at <tmp>:1
------> say; class B is Rational {}.new.raku.say⏏   a bunch of other classes have this pr
expecting any of:
infix stopper
MasterDuke m: class A is FatRat {}.new.raku.say; class B is Rational {}.new.raku.say  # a bunch of other classes have this problem, they hard-code their name in their `method raku` instead of using `self.^name` 17:37
camelia FatRat.new(0, 1)
B.new(numerator => 0, denominator => 1)
[Coke] MasterDuke: that seems like an easy fix, yes? 17:39
lizmat yeah, that'd be an easy fix 17:45
[Coke] We should probably have a spectest that loops through all the predefined classes, subclasses them, and verifies that the new subclass appears in the raku. 17:57
18:04 cognominal joined
codesections [Coke] would there be any cases where we *don't* want the subclass name in the .raku output? (I'm wondering if it's ever a signal that the .raku method is a bit "weird") 18:04
[Coke] ... that's possible, but easy enough to adjust the list of classes we're testing. 18:05
probably want a specific list not "iterate all classes"
18:06 squashable6 left
codesections m: my class A is FatRat { has $.attribute}; my $a = A.new: :attribute<value I expected to see>; say $a.raku 18:06
camelia FatRat.new(0, 1)
cognominal Happy new year to everyone. 18:07
codesections I'm not sure that the string "FatRat" is the *most* surprising part of ^^^
cognominal same to you 🎉 18:08
18:08 reportable6 left
Geth rakudo: d6e6afb0b1 | (Elizabeth Mattijsen)++ | src/core.c/Rat.pm6
Make sure that subclasses of FatRat .raku correctly
18:10 reportable6 joined 18:24 squashable6 joined
Geth rakudo: 82afbbf04d | (Elizabeth Mattijsen)++ | src/core.c/Rat.pm6
Make Rat.FatRat about 5x as fast

Since the Rat's attributes are already normalized, there is no reason to go through the whole normalization process again.
This also affects FatRat literals in the form 0.1234.FatRat, as these are currently codegenned as Rat WVal's with the .FatRat method called on them at runtime.
rakudo/FatRat-literals: dc4d54020c | (Elizabeth Mattijsen)++ | 3 files
Make FatRat literals codegen as WVals

A literal as .123.FatRat was codegenned as a Rat WVal and a call to the .FatRat method at runtime: it is now codegenned as a FatRat WVal.
Also, if a Rat literal exceeds the precision of a Rat, it will issue a worry that mentions to either make it a Num or a FatRat.
rakudo: lizmat++ created pull request #4710:
Make FatRat literals codegen as WVals
19:07 [Coke]_ joined
lizmat codesections: github.com/rakudo/rakudo/pull/4710 19:07
19:10 [Coke] left
lizmat afk& 19:10
20:52 [Coke]_ left 20:55 [Coke] joined
Geth tap-harness6: 74b2f6d1d1 | (Leon Timmermans)++ | lib/TAP.pm
Rename variables in Test::Harness::run for simplification
tap-harness6: 73c3a95516 | (Leon Timmermans)++ | lib/TAP.pm
Allow Supplier as output handle
tap-harness6: cacf119e85 | (Leon Timmermans)++ | 3 files
22:09 cognominal left 22:10 cognominal joined 22:11 cognominal left 23:51 evalable6 left, linkable6 left 23:53 linkable6 joined