00:27 Sgeo joined
apogee_ntv Notcurses::Native done! Wow that was pain. 01:17
01:53 kylese left, hulk joined 01:59 kybr joined
kybr m: <0 1 2 3 4>.Set (-) <1 2 3>.Set 01:59
evalable6 WARNINGS for /tmp/7ZDFvQH2Ht:
Useless use of "(-)" in expression ".Set (-) <1 2 3>.Set" in sink context (line 1)
kybr m: say <0 1 2 3 4>.Set (-) <1 2 3>.Set 02:03
evalable6 Set(0 4)
kybr m: say (^5).List.Set (-) <1 2 3>.Set
evalable6 Set(0 1 2 3 4)
kybr m: say (^5).List.Set == <0 1 2 3 4>.Set 02:04
evalable6 True
kybr what am i missing? why do the first two m: above have different answers? 02:05
apogee_ntv Selkie now builds with no C compile chain on MacOS/Linux/Windows. Need glibc 2.35 for that to work on Linux.
(or higher) 02:07
kybr m: <0 1 2 3 4>.Set.pick.WHAT 02:09
evalable6
kybr m: say <0 1 2 3 4>.Set.pick.WHAT 02:10
evalable6 (IntStr)
kybr m: say (^5).List.Set.pick.WHAT
evalable6 (Int)
02:15 hulk left, kylese joined 02:47 orangebot joined 03:07 lichtkind__ joined 03:10 lichtkind_ left 03:18 orangebot left
apogee_ntv And Vips::Native done. 03:18
03:24 apogee_ntv left 03:26 vasko4535586 left 03:27 apogee_ntv joined 03:32 vasko4535586 joined 04:07 topnep left 04:08 sibl joined, topnep joined 05:14 Aedil left 05:18 Aedil joined 06:12 topnep left 06:13 topnep joined 06:26 kybr left 06:30 soverysour joined, soverysour left, soverysour joined, abraxxa joined 06:56 sibl left, sibl joined 07:00 Sgeo left 07:20 soverysour left
patrickb apogee_ntv: Do you have knowledge of how native library dependencies work on Windows? 07:24
If so I'd like to have a chat.
apogee_ntv patrickb: Some idea yes, I dont use Win but I build for it often 07:36
07:45 sibl left, sibl joined
patrickb I've been pondering building a binaries store on top of vcpkg. 07:46
The vcpkg guys say, that it's a pretty bad idea. I'm still in the phase of gathering understanding of the problem domain. 07:47
irclogs.raku.org/moarvm/2026-04-04.html#20:57 07:48
This is my latest set of questions I'm wondering about.
Libraries can depend on each other, so they form a graph. One can't have colliding symbols in a process. Is there a way to separate symbols in libraries I load? If so, then the issue of colliding symbols is not so big anymore. 07:51
I've never heard of this issue in the context of native call yet. But I' kinda expect the issue to show up whenever I use multiple non trivial native call libraries on Windows, because each lib is usually provided with all dependencies included, so collisions should happen often. 07:52
07:56 soverysour joined
patrickb The answer to these questions influences how a vcpkg binary sore would be structured. 07:56
The answer to these questions influences how a vcpkg binary sore would be structured.
Should the graph of all libraries (and their dependencies) be free of duplicates? Are multiple versions of the same dependency prohibited in the graph? 07:58
08:00 soverysour left 08:05 soverysour joined 08:12 dakkar joined 08:14 librasteve_ joined 08:16 soverysour left
lizmat m: dd <1 2 3>, (1,2,3) 08:18
evalable6 (IntStr.new(1, "1"), IntStr.new(2, "2"), IntStr.new(3, "3"))
(1, 2, 3)
lizmat kybr ^^ that's what you're missing
08:20 soverysour joined
librasteve_ kybr: I guess you have answered your own question on the behaviour of Set compare (which uses .WHICH to do the compare, like the `===` value identity operator 08:20
tellable6 librasteve_, I'll pass your message to kybr
librasteve_ oh and that angle bracket number literals `<>` make lovely Allomorphs like IntStr 08:22
disbot2 <librasteve> ah - seems that I was too late ;-) 08:23
08:38 sp1983_ joined 08:47 sibl left 09:03 soverysour left 09:06 soverysour joined 09:13 sibl joined
apogee_ntv patrickb: I've been mostly building on msys2 to be honest, the compile chain is much nicer to run. 09:26
If you look at the GitHub Actions for Notcurses::Nativecall, the build process is absolutely cursed. 09:27
But it works.
Notcurses::Native
09:31 Guest66 joined, Guest66 left
apogee_ntv For your question about symbol collision, you have the general broad strokes right yes but there's a lot of nuance. Each DLL has its own namespace, so if you have i.e. two SSL dlls exporting 'do_ssl_handshake', the loader won't confuse those because in one place you're calling GetProcAddress('openssl', 'do_ssl_handshake') and in the other you're calling GetProcAddress('libressl', 'do_ssl_handshake'). 09:33
Geth CCR/main: 900bc7574a | (Elizabeth Mattijsen)++ | 2 files
Collect and conserve Tom Browder's own blog
09:35
09:35 sibl left 09:36 sibl joined
apogee_ntv The issue comes when you try to load 2 DLLs with the same name on the same search path. You can avoid it by making sure your DLLs have different names and are called by name (i.e. 'openssl-2.0.0.dll' and 'openssl-2.1.3.dll' will not have namespace collisions) or you can create per module sibling directory (Windows DLLs automatically look for siblings in same folder so i.e. you'd have 09:39
%PATH%\GTK-Simple\lib and %PATH\OpenSSL\lib each with their own openssl.dll and they wont collide).
If you look at Notcurses::Native and Vips::Native build process this is how I solve it, using sibling detection.
The way Linux solves this is via .so.6.2.1 vs .so.6.6.7 naming convention, the same underlying problem exists but there are stronger standard practices. dlopen is actually worse in some ways because you can flatten symbol imports with RTLD_GLOBAL as an aside. 09:43
Hope that helps. 09:45
(if you use MSYS2, it uses linux-style naming convention which also helps for disambiguation) 09:47
09:47 sp1983_ left 09:48 sp1983_ joined 10:05 sibl left