Ludovic Courtès writes: > Hi, > > Christopher Baines skribis: > >> To ensure that it just returns a single package record for some given >> arguments, as this helps to avoid poor performance of the store connection >> object cache. >> >> * gnu/packages/base.scm (make-ld-wrapper): Move code to >> make-ld-wrapper/implementation and call it. >> (make-ld-wrapper/implementation) New procedure. >> >> Change-Id: Id6fc805a4a7ffbc5ff0a5174eafcdf2c7c46854d > > Do you have figures before and after the change? > > The reason I’m asking is that (gnu packages commencement) arranges to > not call ‘make-ld-wrapper’ repeatedly already. For instance, there’s: > > (define-public ld-wrapper > ;; The final 'ld' wrapper, which uses the final Guile and Binutils. > (make-ld-wrapper "ld-wrapper" > #:binutils binutils-final > #:guile guile-final > #:bash bash-final)) > > and from there on we manipulate a single record. I believe the reason packages from make-ld-wrapper were showing up multiple times in the cache for me is linked to it's use in the cross-base module, as part of the cross-gcc procedure. A later commit does change cross-gcc to return a single package record for some given arguments, so that probably resolves the biggest misuse of make-ld-wrapper. I think there's other cases (in the llvm and mold modules) where it looks like it's called multiple times with the same arguments, so maybe that's an argument for having memoization around make-ld-wrapper even though it's not needed for all uses.