Hello,
Here's fun hack that's a replacement for 'load'. I use something like this with Chicken.
If the scheme file doesn't have a corresponding object file or if the object file is out of date, the scheme file is compiled and loaded.
Otherwise the object file is loaded.
(define (smart-load scheme-file)
(let ((object-file (current-object-file scheme-file)))
(cond ((and object-file (file-newer? object-file scheme-file) (not (member object-file *gambit-loaded-files*))) (set! *gambit-loaded-files* (cons object-file *gambit-loaded-files*)) (gambit-scheme-load object-file))
((and object-file (file-newer? object-file scheme-file)) 'already-loaded)
(else (print "Compiling file: " scheme-file "\n") (compile-file scheme-file) (smart-load scheme-file)))))
Where the supporting procedures are:
(define (file-newer? a b) (> (time->seconds (file-info-last-modification-time (file-info a))) (time->seconds (file-info-last-modification-time (file-info b)))))
(define (current-object-file scheme-file) (let ((object-file? (let ((object-file-prefix (string-append (path-strip-directory (path-strip-extension scheme-file)) ".o"))) (lambda (file) (string-prefix? object-file-prefix file))))) (let ((object-files (sort-list (filter object-file? (directory-files (path-directory scheme-file))) string>))) (if (null? object-files) #f (string-append (path-directory scheme-file) (first object-files))))))
Ed
Afficher les réponses par date