🦋 Welcome to the MAIN() IRC channel of the Raku Programming Language (raku.org). This channel is logged for the purpose of keeping a history about its development | evalbot usage: 'm: say 3;' or /msg camelia m: ... | Log inspection is getting closer to beta. If you're a beginner, you can also check out the #raku-beginner channel!
Set by lizmat on 25 August 2021.
00:01 sftp joined 00:03 reportable6 left, sftp left 00:04 reportable6 joined 00:10 gordonfish- joined 00:12 gordonfish left 01:10 Skarsnik left 01:48 sftp joined 02:33 seednode4 is now known as seednode 03:33 reportable6 left, greppable6 left, statisfiable6 left, bloatable6 left, bisectable6 left, committable6 left, nativecallable6 left, notable6 left, sourceable6 left, tellable6 left, quotable6 left, coverable6 left, releasable6 left, unicodable6 left, squashable6 left, benchable6 left, shareable6 left, evalable6 left, linkable6 left, quotable6 joined 03:34 squashable6 joined, greppable6 joined 03:35 statisfiable6 joined, sourceable6 joined, bisectable6 joined, shareable6 joined, releasable6 joined 03:36 bloatable6 joined, coverable6 joined 04:10 frost joined 04:34 notable6 joined 04:36 committable6 joined, reportable6 joined 05:34 nativecallable6 joined 05:35 linkable6 joined 06:02 reportable6 left 06:04 reportable6 joined 06:17 seednode left 06:18 seednode joined 06:33 benchable6 joined 06:34 tellable6 joined 06:35 unicodable6 joined 06:54 clarjon1 joined 07:17 Sgeo joined, Sgeo_ left 08:03 Sgeo_ joined 08:06 Sgeo left 08:34 evalable6 joined 09:15 Sgeo_ left 09:30 MoC joined 10:30 linkable6 left, evalable6 left 10:31 evalable6 joined 10:32 linkable6 joined 11:32 linkable6 left, evalable6 left, evalable6 joined 11:34 linkable6 joined 12:03 reportable6 left, reportable6 joined 12:06 MoC left 12:32 Skarsnik joined 13:13 linkable6 left 14:13 evalable6 left 14:52 euandreh left 14:55 frost left 15:30 Xliff joined
Xliff \o 15:31
Good morning#raku
Happy to report that total compile time of my projects is the lowest it has been since Jan at ~12,800 seconds 15:32
github.com/Xliff/p6-GLib/blob/mast...ounts.xlsx 15:33
MasterDuke nice 15:58
Skarsnik maybe I should run my gumbo benchmark x) 16:06
16:14 linkable6 joined 16:16 evalable6 joined 16:51 xinming__ left 16:53 xinming__ joined 17:01 patrickb joined
Xliff Here's a question... why doesn't Duration have methods for .years, .months, .weeks, .days, .hours, and .minutes? 17:23
Would a PR be welcome?
Skarsnik hm 17:27
wxhat method do you have on Duration?
Xliff I don't think there are any methods specific to Duration 17:34
patrickb japhb: I'm looking at your Termial::LineEditor. There is a lot to learn. :-)
japhb: In github.com/japhb/Terminal-LineEdit...kumod#L620 why do you use a react block instead of two awaits? IMHO the awaits would have been the more obvious solution. 17:36
lizmat Xliff: makes sense 17:37
question becomes: should Duration.hours be a Real or an Int ?
also: .years and .months are ambiguous, so I would not add those 17:38
as Durations do not have an "anchor" :-)
17:42 monkey_ joined
perryprog I suspect the reason it doesn't have those methods is because no one wants to write date and time code ;) 17:50
17:52 linkable6 left
lizmat well, a nice addition would be to have a "ago" method on Duration, which would do something for "just now" if < 10 seconds, "N seconds ago" if < 50 seconds, "about a minute ago" if < 90, etc etc 17:54
El_Che just saying something without reading the backlog :) : if booleans there is a Before and After method in Go that kind of cover most of the use cases I can think of 18:00
18:02 reportable6 left 18:03 reportable6 joined
lizmat El_Che: elaborate ? 18:03
El_Che you take care of the exact duration before the if 18:05
if entries[i].ValidUntil.Before(now) { ... }
if entries[i].ValidUntil.Before(now.AddDate(0,0,-7) { ... }
a week ago
etc
lizmat we have .earlier and .later on dates and datetimes 18:07
if that's what you mean?
ugexe if the number of seconds every year isnt the same then can a Duration actually have such methods?
lizmat that's what I said... :-) 18:08
El_Che :) 18:10
patrickb japhb: Are you aware that Terminal::termios has parts written in C and thus requires a C compiler to be installed? Terminal::LineEditor depends on it. That's a bit of a bummer for the "written in pure Raku" aspect of Terminal::LineEditor. 18:15
18:15 Sgeo joined
japhb patrickb: re: react instead of two awaits -- by-product of multiple refactorings. Can probably be changed to awaits now, yeah. 18:26
patrickb japhb: Good morning! :-)
japhb patrickb: termios written in C: Grrr. Yet another yak to shave. :-( I mean, it's still useful that Terminal::LineEditor itself is written in Raku, because it's easier to contribute to than e.g. Readline. But yeah, yet another thing to do. 18:28
I have shaved a damn *herd* of yaks at this point, and there's no end in sight!
patrickb: Good morning! :-)
(On the plus side, I refreshed my state machine skills writing Terminal::ANSIParser, so I guess not all the yak shaves are useless.) 18:29
patrickb They are not useless at all! I really appreciate having a fine set of terminal plumbing available in Raku directly. 18:32
Xliff lizmat: I don't think Duration needs an anchor, as that should come from context, which is application specific. 18:35
Duration implies things like days, weeks, months and years.
I do like the concept of .ago, however.
I'll include that in my PR.
japhb Oh, I can see right off one of the reasons that termios has parts written in C -- according to my trusty copy of APUE, the struct varies. And not trivially, either. 18:37
Xliff: Once you subtract two Instants, you are left with a quantity that is only a size on the Instant scale ... the original instants are lost, and you no longer have a concept of anchor points; you have magnitude only. 18:38
Xliff japhb: DateTime - DateTime = Duration. In this situation, there is an anchor. 18:46
If the concern is Instants - Instants, then that should not return a Duration.
It should return an Int.
I also disagree that two instance is not anchored. 18:48
If a DateTime can be created from an Instant, then Instants DO have an anchor when used with context.
Instant - Instant = Duration. (Anchor is the first Instant)
But the above is only true within the application context from which that Instance is derived. 18:49
Juerd If anyone's looking for a project, pypi.org/project/bpython/ has me drooling and I'd love to see a braku :) 19:07
19:14 pussies_slayer_9 joined 19:15 zacts joined 19:16 zacts left
Xliff Juerd: That's neat! Quite an ask though. At least for me. 19:17
japhb Xliff: I'm saying, you created the Duration from two instants there. But the Duration does not remember those instants. It is now just a quantity, which can then be applied to other things.
Xliff japhb: And I'm saying that the nature of that quantity impliee the methods that I wish to add! 19:18
s/impliee/implies/
japhb OK, let's say you subtract Oct 1, midnight from Nov 1, midnight, and you add it to Feb 1. What should happen? 19:19
Xliff sourceable: sub MAIN { }
sourceable6 Xliff, No idea, boss. Can you give me a Code object?
Xliff japhb: The hours and minute different from the first should be added to Feb 1st
(see what I did that?) :) 19:20
s/that/thar/
japhb Juerd: Well, I'm slowly working my way to the point that that *could* be done with Terminal::LineEditor. But it will take someone spending a while thinking about compiler state to complete that.
Xliff: OK, you've made a choice. Why do you think it's the correct one, that can be applied in all instances as a rule, rather than a lot of special cases? 19:21
19:21 pussies_slayer_9 left
Xliff japhb: Yes, I've made a choice. From the options provided. Once that CAN BE VALID given specific situations. 19:22
You are trying to tell me this choice in invalid and that the tools that choice provides are not useful.
japhb Xliff: Yes, you've now hit the nail on the head ("given specific situations"). I think what you *want* is a different class than Duration, but related to it. 19:23
Xliff If you really are telling me that "class Duration" doesn't need operations typically done on a duration.
Why call it a Duration?
Duration IMPLIES units of time.
Don't take the word and change its meaning!
japhb Because it is a duration in the sense of physical passage of time, but passage of time in TAI is not the same as passage of time on the Gregorian Calendar. 19:24
Xliff A duration, in most ALL of its usages, imply "the interegnum between two moments in time"
japhb And no, I'm very much not saying what you're talking about it is unreasonable. Just different.
Xliff How is passage of time any different in any context?
japhb Oh man, there's a lot of physics in the answer to that.
But ... hold on a sec. 19:25
Xliff And if you are not saying it's not unreasonable, then why tell me not to write the PR?
japhb Because you're not looking for CORE Duration, you're looking for "GregorianDuration" or some such
CORE is TAI. 19:26
Xliff japhb: And this is how Raku loses! Because you want to take a generic concept, and turn it into something specific that doesn't mean what the commen sense interpretation is!
japhb: Where in the online docs does it say CORE is TAI. Please point to the page.
And if you can't reference it then please find a place where said reference should be and I will update the docs. 19:27
And then tell me how .minutes, .hours, .days, .weeks, .months, and .years are not TAI when Instants and Durations are mesured in seconds. 19:28
japhb Um, look at src/core/Duration.pm6? 19:30
Because a minutes is not always 60 seconds, a day is not always 24 hours, and a month is not always 30 days. 19:31
(And a year is not always 365 days, forgot that one)
Xliff Now this is true. 19:32
At least among purists.
However pratical coders don't give a shit. 19:33
ugexe they dont until it matters
Xliff And we need more practical coders in Raku if it's going to grow.
ugexe: Think it will matter when they reach for Duration.days and find it missing?
ugexe I have never once needed to reach for such a thing, and I feel like I've done a lot of DateTime related business logic in my life 19:34
Xliff Funny. I neded it today.
And it wasn't for anything overly complex. I had to also reach for "augment", which I usually NEVER have to do. 19:35
To each their own.
ugexe maybe i misunderstand, but how would you do this with e.g. perl?
japhb Also ... Raku is the home of NFG, and characters === grapheme clusters. We try at least to do the actual right thing.
Xliff The use of "augment" is made a bit ugly by its requirement on MONKEY-TYPING and all that opens up.
ugexed: How does how it is used with perl matetr? 19:36
s/matetr/matter/ ?
I hate how my typing is deteriorating... :/
ugexe prior art is usually so for a reason
in other words: why would another language choose to not have such a thing? 19:37
Xliff Because the authors were not that forward thinking.
ugexe are you sure they would not say the same of you?
Xliff There are a lot of other reasons, but that's the big one.
ugexe: I don't think they would. If they aren't going to use it. They won't care that it is there. 19:38
japhb Let's not get into talking about people's intelligence or ability to think in general. That way lies incivility.
Xliff OK, so if the inclination is to not have this in core, then I guess I can module-space it. 19:39
19:39 patrickb left
Xliff I just think that's a cop out. These methods should be usable out of the box. 19:39
japhb Xliff: I'm not saying what you're asking for is useless, it's really not. I'm saying, it's not *Duration* as defined in Raku. It's a different thing. Just like a "Fiscal Year" and a "Calendar Year" are related but not the same.
Let me try a different angle, Xliff. Make a module that is the API you *want*, and then we can discuss. 19:40
Xliff japhb: I do think I just offered that. 19:41
japhb Because I can guarantee that the human perception of dates and the physical notion of time only resemble each other in a "fun house mirror" sort of way.
Xliff: Sorry, our messages passed in the ether
Xliff Ho!
"TAI times are identified by year, month, day, hour, minute, and second."
cr.yp.to/proto/utctai.html
Second paragraph 19:42
This is EXACTLY as I would lay out each method.
19:43 squashable6 left 19:44 squashable6 joined
japhb Great. Do so. I think you've misunderstood what DJB means by "identified by" though .... 19:45
Xliff How so? 19:46
japhb Because TAI does not have timezones or leap seconds. 19:47
Xliff I never mentioned either of those concepts. 19:48
Durations don't recognize those etiher.
s/those/them/
japhb You can absolutely specify a YMDhms for TAI ... they are not the same as YMDhms in any other time system. And in *particular*, a duration in TAI cannot be applied to any other time system than TAI and still be accurate. 19:49
Xliff You mean to tell me that a TAI second is not the same as the seconds we use every day? 19:50
If this is true, why use it?
japhb Yes, read the literal next sentence from the one you pointed out.
Xliff heh. I didn't read that far. 19:51
japhb Because it is a continuous, not changing atomic time. (Time Atomic International, except with French spelling)
Things that require super-accurate, invariant time sources (like GPS) need to care about that. 19:52
(And in case you were wondering if it matters on earth, well ... Google's Spanner database depends on super-accurate time, as do quite a few of the timeouts and such within Google's systems. In order to be hide the difference between UTC and TAI and keep everything from going to absolute hell, they have to smear every UTC leap second over 20 hours to get the difference to stop being prohibitive.) 19:54
20:36 monkey_ left
Xliff japhb: github.com/Xliff/raku-Duration-Uni.../Units.pm6 20:46
japhb Xliff: Years are ~ 365.24 days long, not 365.75. :-) 21:03
The almosts can be filtered out by doing that at the end. 21:05
(They are all equivalent to `$almost = $time-val < 1` at the end) 21:06
But yeah, for human durations, that's a good start.
It's biased towards English, of course, but that's a separate problem. 21:07
21:28 gordonfish- left 21:29 A26F64 joined
japhb .tell patrickb github.com/japhb/Terminal-LineEdit...4ce1cab3e5 -- thanks for the suggestion! 21:32
tellable6 japhb, I'll pass your message to patrickb
22:29 evalable6 left, tellable6 left 22:31 evalable6 joined 22:50 seednode left 22:51 seednode joined 22:53 linkable6 joined 23:30 tellable6 joined