Leonidas changed the topic of #ocaml to: Discussion about the OCaml programming language | http://www.ocaml.org | OCaml 5.1.1 released: https://ocaml.org/releases/5.1.1 | Try OCaml in your browser: https://try.ocamlpro.com | Public channel logs at https://libera.irclog.whitequark.org/ocaml/
trev has joined #ocaml
cr1901 has quit [Read error: Connection reset by peer]
cr1901 has joined #ocaml
average has quit [Quit: Connection closed for inactivity]
rgrinberg has joined #ocaml
mima has quit [Ping timeout: 252 seconds]
pi3ce has joined #ocaml
<companion_cube> you have to make sure you match the identifiers thingies
<companion_cube> but I'm not entirely convinced by runtime events so far
szkl has joined #ocaml
trillion_exabyte has quit [Ping timeout: 268 seconds]
trillion_exabyte has joined #ocaml
emp has quit [Quit: ZNC 1.8.2 - https://znc.in]
emp has joined #ocaml
rgrinberg has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
azimut has quit [Ping timeout: 240 seconds]
meritamen has joined #ocaml
meritamen has quit [Quit: I gotta go.]
szkl has quit [Quit: Connection closed for inactivity]
rgrinberg has joined #ocaml
patrick is now known as Guest5750
Guest5750 has quit [Killed (tungsten.libera.chat (Nickname regained by services))]
patrick__ has joined #ocaml
rgrinberg has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
szkl has joined #ocaml
Serpent7776 has joined #ocaml
rgrinberg has joined #ocaml
motherfsck has quit [Quit: quit]
bartholin has joined #ocaml
olle has joined #ocaml
<discocaml> <leostera> okay found something new.
<discocaml> <leostera>
<discocaml> <leostera> i have a shallow continuation per process, sometimes a process will spawn more processes (which in turn will have shallow continuations of their own initialized).
<discocaml> <leostera>
<discocaml> <leostera> those new processes however are not explicitly linked back to the spawning process, they’re just treated as siblings.
<discocaml> <leostera> if you follow the lifecycle of one of them, eventually i free all possible references to it from just about everywhere you can think of.
<discocaml> <leostera>
<discocaml> <leostera> and yet its gc.finalizers don’t run
bartholin has quit [Quit: Leaving]
<discocaml> <leostera> HOWEVER when the spawner process is terminated and its own continuation is released (t.cont <— empty) THEN i see the finalizers for all the processes it spawned triggering
<discocaml> <leostera> it is as if creating a continuation while inside of a continuation has created some sort of data dependency between them
<discocaml> <leostera> what’s worse is that even then, the memory isn’t freed 😦
<discocaml> <leostera> so yeah i’m very much confused here
<discocaml> <leostera> this is starting to feel more like a weird interaction between gc+effects — but maybe it’s totally expected behavior to those of you who know how it should work
<discocaml> <leostera> okay found something new.
<discocaml> <leostera>
<discocaml> <leostera> riot uses a shallow continuation per process, sometimes a process will spawn more processes (which in turn will have shallow continuations of their own initialized).
<discocaml> <leostera>
<discocaml> <leostera> those new processes however are not explicitly linked back to the spawning process, they’re just treated as siblings. they go into the process table as strong references and everywhere else as weak refs.
<discocaml> <leostera>
<discocaml> <leostera> if you follow the lifecycle of one of them, eventually it terminated and we free all possible references to it from just about everywhere you can think of. like literally doing stuff like:
<discocaml> <leostera>
<discocaml> <leostera> let free proc =
<discocaml> <leostera> proc.cont <- empty;
<discocaml> <leostera> Atomic.make proc.links None;
<discocaml> <leostera> (* etc *)
<discocaml> <leostera>
<discocaml> <leostera> and yet its gc.finalizers don’t run!
<discocaml> <leostera>
<discocaml> <leostera> HOWEVER when the spawner process is terminated and its own continuation is released (t.cont <- empty) THEN i see the finalizers for all the processes it spawned triggering
<discocaml> <leostera>
<discocaml> <leostera> it is as if creating a continuation while inside of a continuation has created some sort of data dependency between them
<discocaml> <leostera>
<discocaml> <leostera> what’s worse is that even then, the memory isn’t freed 😦
<discocaml> <leostera>
<discocaml> <leostera> so yeah i’m very much confused here
<discocaml> <leostera>
<discocaml> <leostera> this is starting to feel more like a weird interaction between gc+effects — but maybe it’s totally expected behavior to those who know how it should work.
<discocaml> <leostera> ooops i don goofed the messages sorry irc peeps 🙏🏼
olle has left #ocaml [#ocaml]
mima has joined #ocaml
<discocaml> <leostera> i think i can replicate this behavior on miou
average has joined #ocaml
fweht has joined #ocaml
trev has left #ocaml [#ocaml]
neiluj has joined #ocaml
azimut has joined #ocaml
azimut has quit [Remote host closed the connection]
azimut has joined #ocaml
Square2 has joined #ocaml
<Square2> Does OCaml (and F#) feel anything like working with Haskell?
<reynir> In my experience it is less frustrating
<reynir> (but it's many years since I use Haskell, and then not much)
<Square2> reynir, thanks
a51 has joined #ocaml
waleee has quit [Ping timeout: 256 seconds]
mima has quit [Ping timeout: 260 seconds]
rgrinberg has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
average has quit [Quit: Connection closed for inactivity]
gwizon has joined #ocaml
bartholin has joined #ocaml
average has joined #ocaml
mima has joined #ocaml
a51 has quit [Quit: WeeChat 4.1.2]
neiluj has quit [Quit: neiluj]
gwizon has quit [Quit: leaving]
neiluj has joined #ocaml
gwizon has joined #ocaml
gwizon has quit [Client Quit]
<discocaml> <Kali> the ocaml tooling is generally much nicer to use in my opinion
<discocaml> <Kali> and the type errors are far more readable
<discocaml> <leostera> nevermind, skill issue on my side! we're so back
gwizon has joined #ocaml
gwizon_ has joined #ocaml
<discocaml> <bluddy5> what was the problem?
rgrinberg has joined #ocaml
rgrinberg has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
<discocaml> <leostera> on the one side, creating continuations inside continuations – i fixed this by deferring the creation until i return control to the scheduler
<discocaml> <leostera> on the other side, i'm adding runtime events to see why on earth i use up so much memory
azimut has quit [Ping timeout: 240 seconds]
azimut has joined #ocaml
neiluj has quit [Read error: Connection reset by peer]
azimut has quit [Remote host closed the connection]
azimut has joined #ocaml
rgrinberg has joined #ocaml
azimut has quit [Remote host closed the connection]
azimut has joined #ocaml
waleee has joined #ocaml
rgrinberg has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
gareppa has joined #ocaml
<discocaml> <contextfreebeer> Square2: there's a lot more "type acrobatics" in Haskell
Square2 has quit [Ping timeout: 245 seconds]
<discocaml> <Ada> what does cohttp Body.to_string_list do?
Anarchos has joined #ocaml
rgrinberg has joined #ocaml
gwizon_ has quit [Quit: Lost terminal]
gwizon has quit [Quit: Lost terminal]
azimut has quit [Remote host closed the connection]
azimut has joined #ocaml
mizlan has joined #ocaml
lthms has left #ocaml [#ocaml]
mizlan has quit [Ping timeout: 276 seconds]
fweht has quit [Quit: Connection closed for inactivity]
<Anarchos> if i have module (A : INTF with type t = string) = struct type t = string val f : t -> unit ... end) how can i use A.f on a string ?
<Anarchos> INTF is declared as : module type INTF = sig type t val f : t -> unit)
average has quit [Quit: Connection closed for inactivity]
mizlan has joined #ocaml
Anarchos has quit [Ping timeout: 260 seconds]
mizlan has quit [Ping timeout: 264 seconds]
gareppa has quit [Quit: WeeChat 4.0.5]
mizlan has joined #ocaml
szkl has quit [Ping timeout: 255 seconds]
szkl has joined #ocaml
<discocaml> <functionalprogramming> what's the IRC channel that the bridge connects to? Doesn't seem to be #ocaml on libera.chat
<mizlan> never mind it is
Tuplanolla has joined #ocaml
rgrinberg has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
rgrinberg has joined #ocaml
mizlan has quit [Ping timeout: 255 seconds]
rgrinberg has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
Anarchos has joined #ocaml
rgrinberg has joined #ocaml
bartholin has quit [Quit: Leaving]
oriba has joined #ocaml
Anarchos has quit [Quit: Vision[]: i've been blurred!]
mizlan has joined #ocaml
<discocaml> <Kali> Anarchos: it should just work?
<discocaml> <Kali> ```ocaml
<discocaml> <Kali> module type INTF = sig type t val f : t -> unit end
<discocaml> <Kali>
<discocaml> <Kali> module A : INTF with type t = string = struct
<discocaml> <Kali> type t = string
<discocaml> <Kali> let f = print_string
<discocaml> <Kali> end
<discocaml> <Kali>
<discocaml> <Kali> let () = A.f "hello world\n"
<discocaml> <Kali> ```
mizlan_ has joined #ocaml
mizlan has quit [Ping timeout: 264 seconds]
<mizlan_> When I `opam install` a package (like `merlin` for instance), how can I tell opam to pick a version that works with the other dependencies instead of having it prompt to update versions of everything? Would the right way be to pin the versions of the appropriate packages?
mizlan_ has quit [Remote host closed the connection]
mizlan has joined #ocaml
<mizlan> Seems like yes
rgrinberg has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
mizlan has quit [Remote host closed the connection]
mizlan has joined #ocaml
rgrinberg has joined #ocaml
Serpent7776 has quit [Ping timeout: 276 seconds]
mima has quit [Ping timeout: 276 seconds]
divya has joined #ocaml
mizlan has quit [Remote host closed the connection]
mizlan has joined #ocaml
rgrinberg has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
mal`` has quit [Quit: Leaving]
mizlan has quit [Remote host closed the connection]
mizlan has joined #ocaml
mal`` has joined #ocaml
rgrinberg has joined #ocaml
Tuplanolla has quit [Quit: Leaving.]