antononcube If weights are applicable … 00:00
timo csv would be a relatively natural fit
antononcube I am not sure what nearest root means. 00:01
timo well, we do have some properties on the nodes: managed size and unmanaged size, and kinds of objects (and roots). and edges have descriptions but nothing that i would consider a weight
ah, that's from garbage collector nomenclature
00:02 ky3 left
antononcube Ok, no weights, then. 🙂 00:03
timo at any point in the program, you have a set of gc-managed objects that are pointed at by some not-gc-managed memory. common examples for that are the C stack which can have pointers at gc-managed objects, or the "thread context" which points at just a whole lot of stuff
00:03 ky3 joined
timo this set of pointers that are somewhere in memory that's not owned by a GC-managed object are called roots 00:04
in a GC like moar's, you start from the root set and then do a reachability search to identify everything that should be kept around, and everything you've not marked gets freed in the next step; those steps are "mark" and "sweep" respectively
reachability search / flood fill / breadth- or depth-first search 00:05
antononcube Ok. This is typical graph theory problem / setup.
timo right. the tricky part of that is all in the management of roots, the proper enumeration of pointers inside an object to all other objects, how to not spend too much time looking at things that are unlikely to have become unreachable 00:07
and when you add concurrency and/or parallelism into the mix, more tricky business
it's an enormous topic
antononcube I need to think about this… 00:12
timo for today i might be out of time, if i don't get you that data by saturday i'd appreciate a reminder ping
antononcube Ok, sure! 00:13
00:13 ky3 left, ky3 joined
timo gchandbook.org/ this is as far as i know the number one source for information about garbage collection. i haven't read it yet, i absorbed most of what i know about GC from jonathan i think :D 00:14
i believe there's a talk about moar's GC by jonathan as well, with slides and recording available 00:15
antononcube Interesting. 00:16
timo it's also good to know that moar's GC is a "precise semi-space copying generational parallel (but not concurrent)" garbage collector 00:17
don't let me distract you too much, i sometimes find it hard to stop talking 00:19
00:22 ky3 left 00:23 ky3 joined
antononcube At least the mathematical formulation of the problem is an interesting challenge. 00:25
timo oh? i'm not sure i follow. do you mean a formulation that has something like "program memory over time as a big multi-dimensional sequence" or .. not sure how you would commonly model something like that 00:27
00:32 ky3 left 00:33 ky3 joined
antononcube More like : > for a given subset of vertices of a graph, find the shortest path to that set for a given node . 00:41
timo ah, the subset is the roots i guess? and the given node is the object you want to check for its live/dead state 00:42
antononcube But that seems to be too simplistic. Maybe some sort of optimization problem formulation is required.
00:43 ky3 left, ky3 joined
Yes, that is what I have in mind… 00:43
timo it's a very wide field allowing for lots of questions you can ask, when you include things like "i would like the program to run at the same time as the garbage collector is working", and then kind of another discipline if you want to have better performance by improving your memory access patterns with regards to the cache hierarchy, and then there's some memory management tricks, and and and and 00:46
it would be interesting to know how much new stuff you could find with a formalised approach to that particular piece of the puzzle. i'm not sure if there's very much, but of course you can just add more pieces to the scope of your research if you want "more interesting" :D 00:49
00:53 ky3 left, ky3 joined 01:03 ky3 left, ky3 joined
antononcube I need the problem formulation for any kind of “social contract” with the consumers of the solution. 01:04
timo i think what you mean by "social contract" we would call the garbage collector's "invariants" 01:05
antononcube Hm… I am not sure. I mean what kind of “solutions” are admissible. 01:09
For example, are you looking for a concrete, one algorithm or for a platform ? 01:10
timo oh ok 01:11
in many cases, all the consumer of a garbage collected system is looking for is "i want to be able to create objects and not care about when they should be freed" 01:12
01:13 ky3 left, ky3 joined
timo additional requirements can arise from specialized use cases. maybe you want to be able to give the GC a hint where some objects are supposed to be placed, like if you are using something like huge pages 01:14
maybe you're not working with objects in memory, but entries in a file system that uses copy-on-write and can share extents, like btrfs
or something in between, which would be nonvolatile ram 01:15
maybe your consumer wants the program to be able to fork and not dirty any of the pages from the parent process, so they don't get copied 01:16
some requirements are a little bit more "nebulous", like "the GC must never cause the main code to pause for longer than n nanoseconds", which would be real-time garbage collection 01:17
this is too exciting, i really do have to go AFK
01:22 ky3 left 01:24 ky3 joined 01:32 ky3 left 01:33 ky3 joined
antononcube Good luck! 01:37
01:43 ky3 left, ky3 joined 01:53 ky3 left, ky3 joined 01:56 stanrifkin left 02:12 ky3 left 02:13 ky3 joined 02:22 ky3 left 02:23 ky3 joined 02:33 ky3 left, ky3 joined 02:35 guifa joined 02:43 ky3 left, ky3 joined 02:53 ky3 left, ky3 joined 03:00 hulk joined 03:01 kylese left 03:02 holyghost joined 03:03 ky3 left
holyghost . 03:03
03:03 ky3 joined
antononcube @holyghost Spooky!! 03:12
03:13 ky3 left, ky3 joined 03:15 hulk left, kylese joined 03:16 guifa left 03:23 ky3 left, ky3 joined 03:33 ky3 left, ky3 joined 03:43 ky3 left
holyghost No ghost no answer ;-) 03:43
03:43 ky3 joined 04:03 ky3 left, ky3 joined 04:12 ky3 left 04:13 ky3 joined 04:20 Aedil joined 04:23 ky3 left, ky3 joined 04:33 ky3 left, ky3 joined 04:42 ky3 left 04:43 ky3 joined 04:53 ky3 left, ky3 joined 05:03 ky3 left, ky3 joined 05:12 teatime left, ky3 left 05:14 ky3 joined 05:22 ky3 left 05:23 ky3 joined 05:33 ky3 left, ky3 joined 05:43 ky3 left, ky3 joined 05:49 holyghost left 05:53 ky3 left 05:54 ky3 joined 06:02 ky3 left 06:03 ky3 joined 06:05 Sgeo left 06:13 ky3 left, ky3 joined 06:23 ky3 left, ky3 joined 06:25 andinus left 06:27 andinus joined 06:32 ky3 left 06:33 ky3 joined 06:43 ky3 left, ky3 joined 06:50 abraxxa-home joined 06:51 abraxxa-home left, tjr left 06:52 abraxxa-home joined, abraxxa-home left, abraxxa-home joined 06:53 tjr joined 07:01 tjr left 07:02 tjr joined, ky3 left 07:03 ky3 joined 07:13 ky3 left, ky3 joined 07:14 abraxxa-home left 07:16 abraxxa-home joined, abraxxa-home left 07:23 dano left, ky3 left, dano joined, ky3 joined 07:25 abraxxa-home joined 07:33 ky3 left, ky3 joined 07:34 abraxxa-home left 07:35 abraxxa-home joined 07:41 teatime joined 07:42 ky3 left 07:43 ky3 joined 07:47 abraxxa-home left 07:48 abraxxa-home joined 07:53 ky3 left, ky3 joined 08:03 ky3 left, ky3 joined 08:13 ky3 left, ky3 joined 08:22 ky3 left 08:23 ky3 joined 08:43 ky3 left, ky3 joined 08:53 ky3 left, ky3 joined 09:12 ky3 left 09:13 ky3 joined, dakkar joined
librasteve great - thanks! 09:18
09:33 ky3 left, ky3 joined
antononcube I use VS Code with Jupyter for the visualizations with “JavaScripdt::D3” and “JavaScripdt::Google::Charts”. These packages produce JavaScript code which is not executed / rendered as graphics in IntelliJ. 09:37
SmokeMachine m: use experimental :rakuast; say ::("RakuAST::VarDeclaration::Simple") # should this be an error? 09:42
camelia No such method 'EXISTS-KEY' for invocant of type 'BOOTHash'. Found
'EXISTS-KEY' on type 'Any'
in block <unit> at <tmp> line 1
09:42 ky3 left 09:43 ky3 joined
timo i wonder if we are missing an hllize operation somewhere 09:44
ok the code that calls EXISTS-KEY on the thing is in an nqp file, so it wouldn't hllize for raku anyway unless we explicitly ask for that 09:47
lizmat m: m: use v6.*; say ::("RakuAST::VarDeclaration::Simple") 09:52
camelia ===SORRY!=== Error while compiling <tmp>
Too late to switch language version. Must be used as the very first statement.
at <tmp>:1
------> m: use v6.*⏏; say ::("RakuAST::VarDeclaration::Simpl
lizmat m: use v6.*; say ::("RakuAST::VarDeclaration::Simple")
camelia No such method 'EXISTS-KEY' for invocant of type 'BOOTHash'. Found
'EXISTS-KEY' on type 'Any'
in block <unit> at <tmp> line 1
09:53 ky3 left, ky3 joined
lizmat yeah, looks like. attempting a fix 09:55
10:03 ky3 left, ky3 joined 10:19 sena_kun joined
lizmat SmokeMachine: could you make an issue for it, the solution does not appear to be simple :-( 10:21
SmokeMachine sure
lizmat thanks! 10:22
10:22 ky3 left 10:23 ky3 joined 10:26 Aedil left
timo .o( make an exists-key dispatcher that looks if it's nqp::ishash, then uses nqp::existskey, otherwise delegates to make a method call "EXISTS-KEY", then the same thing for AT-KEY ) 10:31
lizmat afaik, there's already quite a lot of magic the other way
m: my %h = :42a; use nqp; say nqp::atkey(%h,"a") 10:32
camelia 42
timo ah, right, we have associative delegate attributes
lizmat but that's flaky on the JVM backend to my recollection
timo so a class that's well-behaved will immediately work with nqp::atkey and nqp::existskey 10:33
lizmat OOC, what makes a class well-behaved ?
10:33 ky3 left
timo i don't remember exactly how you set an attribute to be the positional or associative delegate 10:33
10:33 ky3 joined
timo nqp has "is positional_delegate" and "is associative_delegate" i think? on attributes 10:35
and of course if it's not an object based on the P6Opaque repr, then whether or not it can existskey or atkey is defined by the repr's implementation inside moarvm 10:37
10:41 Aedil joined 10:52 ky3 left 10:53 ky3 joined
SmokeMachine github.com/rakudo/rakudo/issues/5676 10:54
timo i wonder if maybe it's so early that the `nqp::isnull($stash_type)` in Metamodel/Stashing.nqp returns true and we end up with the RakuAST package not having a stash? 11:02
lizmat could well be 11:03
11:03 ky3 left, ky3 joined
timo AFK so can't immediately investigate 11:04
11:23 ky3 left, ky3 joined
lizmat timo: fwiw, I re 11:25
timo: fwiw, I've removed #5676 from my immediate todo list
11:33 ky3 left, ky3 joined 11:42 ky3 left 11:43 ky3 joined 11:53 ky3 left, ky3 joined 11:59 abraxxa-home left 12:02 ky3 left 12:03 ky3 joined 12:13 ky3 left, ky3 joined
antononcube The package “Math::Matrix” uses the operator dot for the dot product between two matrices, Does this fit the “standard” Raku style? Maybe it should be (dot) , because of, say, (elem) and ∈ . I know that div and mod exist, but is dot with the same “status”? Maybe, using parenthesis as in (<some-op>) is to designate/hint operations between sets? 12:21
12:23 ky3 left, ky3 joined
librasteve well, with coercers (one day), I might go: 12:25
sub fn(Math::Matrix() $l, Math::Matrix() $r) { $l dot $r } 12:26
lizmat antononcube the () for set operators was chosen because the () sorta imply a collection 12:27
librasteve so would be less confusing to have dot for one and (dot) for the other
12:33 ky3 left
antononcube Ok, sounds good. Thank you both! 12:33
12:33 ky3 joined 12:43 ky3 left, ky3 joined 12:53 ky3 left, ky3 joined 13:02 ky3 left 13:03 ky3 joined 13:13 ky3 left, ky3 joined
lizmat ky3: could you please check your setup: it keeps timing out over and over again :-( 13:15
timo i turned on my weechat smart filter which only shows joins and parts if the same user also writes some text in a configurable time interval before or after, so you immediately see if someone you were just talking to has left, or if someone who just spoke up was on the channel before or just joined. pretty neat feature 13:28
13:33 ky3 left, ky3 joined 13:42 ky3 left 13:43 ky3 joined 13:53 ky3 left 13:54 ky3 joined
ab5tract timo: genius 13:59
I’ll have to submit a feature request to IRCCloud for the same 14:00
14:02 ky3 left
antononcube @librasteve Thanks for posting the "Sparse Matrix neat examples" video on Haystack News! 14:03
14:03 ky3 joined 14:12 ky3 left 14:13 ky3 joined 14:14 Sgeo joined
librasteve no problem - when I occasionally hit the HN frontpage with one of my raku journey posts, I am happy because I get ~9000 views instead of the usual couple of hundred (well I really like that there are so many raku people who are interested - but separately I like like that I can push raku into the wider world a bit to the HN dev crowd) ... i always try to do a raku reply on an HN post when I think that there is a 14:19
genuine link --- in this case, where I see stuff (eg on raku + LLMs) that I think would be of interest to the wider HN audinece I submit that too ... just let me know if you are too shy ;-) ... in this case, I am surprised that there was not more interest - but videos are hard and the HN submit -> frontpage promotion is very fickle
turns out the ones that make a connection (eg HTMX & Raku Cro) can also be posted eg on the HTMX reddit and they do quite well to raise raku awareness too 14:20
14:23 ky3 left 14:24 ky3 joined
antononcube Good to know! I just renewed my HN account -- the moderators were very helpful resoliving my login issues. 14:25
I am not sure what HN "crowd" is looking for... In my usual circles of data science and machine learning, people are mostly interested in know-how talks/presentations/articles. Not so much about methodology and general "tooling" topics. 14:29
Well, except LLM-related methodology -- that is always bringing attention.
14:32 ky3 left 14:33 ky3 joined
librasteve ^this 14:38
antononcube Here is my newest HN submission!!! news.ycombinator.com/item?id=42007331 14:41
14:43 ky3 left, ky3 joined 14:53 ky3 left, ky3 joined 15:02 ky3 left 15:03 ky3 joined 15:13 ky3 left, ky3 joined 15:23 ky3 left, ky3 joined 15:32 ky3 left 15:33 ky3 joined 15:43 ky3 left, ky3 joined 15:53 ky3 left, ky3 joined 16:02 ky3 left 16:03 ky3 joined 16:13 ky3 left, ky3 joined 16:23 ky3 left, ky3 joined, abraxxa-home joined 16:32 ky3 left 16:33 ky3 joined 16:43 ky3 left, ky3 joined 16:53 ky3 left, ky3 joined 17:02 ky3 left 17:03 ky3 joined 17:23 ky3 left, ky3 joined 17:30 dakkar left 17:33 ky3 left, ky3 joined 17:37 codesections joined 17:42 ky3 left 17:43 ky3 joined 17:50 Aedil left 18:03 ky3 left, ky3 joined 18:12 ky3 left 18:13 ky3 joined 18:22 ky3 left 18:23 ky3 joined 18:28 stanrifkin joined 18:33 ky3 left, ky3 joined 18:42 ky3 left 18:43 ky3 joined 18:53 ky3 left, ky3 joined 19:03 ky3 left, ky3 joined 19:05 codesections left 19:13 ky3 left, ky3 joined 19:23 ky3 left, ky3 joined 19:26 perlbot left, simcop2387 left 19:31 perlbot joined 19:32 abraxxa-home left 19:33 ky3 left, simcop2387 joined, ky3 joined 19:43 ky3 left, ky3 joined 19:52 ky3 left 19:53 ky3 joined 20:03 ky3 left, ky3 joined 20:12 ky3 left 20:13 ky3 joined 20:23 ky3 left, ky3 joined 20:32 ky3 left 20:33 ky3 joined 20:42 ky3 left 20:43 ky3 joined 20:53 ky3 left, ky3 joined 21:03 ky3 left, ky3 joined 21:13 ky3 left, ky3 joined 21:23 ky3 left, ky3 joined 21:33 ky3 left, ky3 joined 21:42 ky3 left 21:43 ky3 joined 21:46 guifa joined 21:52 ky3 left 21:53 ky3 joined 21:57 tadzik2 is now known as tadzik, tadzik left, tadzik joined 22:03 ky3 left 22:04 ky3 joined 22:12 ky3 left 22:13 ky3 joined 22:23 ky3 left, ky3 joined 22:33 ky3 left, ky3 joined 22:43 ky3 left, ky3 joined 23:03 ky3 left, ky3 joined 23:12 ky3 left 23:13 ky3 joined 23:23 ky3 left, ky3 joined 23:33 ky3 left, ky3 joined 23:43 ky3 left, ky3 joined 23:52 ky3 left 23:53 ky3 joined