packages: Optimize 'package-transitive-supported-systems'.
This version is 13% faster than the one above when timing: (fold-packages (lambda (p x) (package-transitive-supported-systems p)) '()) * guix/packages.scm (package-transitive-supported-systems): Make 'systems' a set instead of calling 'lset-intersection' repeatedly.
This commit is contained in:
		
							parent
							
								
									c729901583
								
							
						
					
					
						commit
						24420f5ffa
					
				
					 1 changed files with 10 additions and 9 deletions
				
			
		|  | @ -766,15 +766,16 @@ in INPUTS and their transitive propagated inputs." | |||
|   (mlambdaq (package) | ||||
|     "Return the intersection of the systems supported by PACKAGE and those | ||||
| supported by its dependencies." | ||||
|     (fold (lambda (input systems) | ||||
|             (match input | ||||
|               ((label (? package? p) . _) | ||||
|                (lset-intersection | ||||
|                 string=? systems (package-transitive-supported-systems p))) | ||||
|               (_ | ||||
|                systems))) | ||||
|           (package-supported-systems package) | ||||
|           (bag-direct-inputs (package->bag package))))) | ||||
|     (set->list | ||||
|      (fold (lambda (input systems) | ||||
|              (match input | ||||
|                ((label (? package? p) . _) | ||||
|                 (fold set-insert systems | ||||
|                       (package-transitive-supported-systems p))) | ||||
|                (_ | ||||
|                 systems))) | ||||
|            (list->set (package-supported-systems package)) | ||||
|            (bag-direct-inputs (package->bag package)))))) | ||||
| 
 | ||||
| (define* (supported-package? package #:optional (system (%current-system))) | ||||
|   "Return true if PACKAGE is supported on SYSTEM--i.e., if PACKAGE and all its | ||||
|  |  | |||
		Reference in a new issue