Hi Maxime, Il giorno dom, 19/09/2021 alle 20.23 +0200, Maxime Devos ha scritto: > Olivier Dion via General Guile related discussions schreef op zo 19- > 09-2021 om 14:11 [-0400]: > > On Sun, 19 Sep 2021, adriano <randomloo...@riseup.net> wrote: > > > > If you want to avoid the problem, you should explicitely bind > > > > and > > > > call the gps-close function and not rely on the garbage > > > > collector to > > > > do it for you. You can use dynamic-wind to open and close > > > > resources as needed. > > > > > > It'd be so nice to have an example > > > > (define (with-my-resource token proc) > > (let ((resource #f)) > > (dynamic-wind > > (lambda () > > (set! resource (open-my-resource% token))) > > > > (proc resource) > > > > (lambda () > > (when resource > > (close-my-resource% resource)))))) > > > > (with-my-resource "some-internal-token" (lambda ())) > > FWIW, this doesn't work well with continuations, e.g. if you use > guile-fibers > for concurrency. I'm not familiar with 'libgps', so I'm not sure if > it would > work for you, but another method for implementing with-my-resource > could be to > use the exception handling mechanism to call 'close-my-resource' on > both > normal exits and abnormal exits. > > Note that this alternative method does _not_ close the resource when > calling > an escape continuation (let/ec (with-my-resource .. (lambda (r) (ec) > (unreachable)))), > so you might want to use something like guardians and after-gc-hook > to eventually > free the resource. > > (Here, close-my-resource is like close-my-resource% except it doesn't > do anything > if the resource is already closed.) > > Greetings, > Maxime.
Well, it'd be wonderful to have an example of what you're describing here ! 🙂️ The new exceptions system is still quite obscure 🤷️