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
|