I seem have hit the same (or related) bug that Laurent Orseau submitted as bug 11017 (but in a completely different context that might help track it down) and I haven't been able to find a workaround. The actual error message I get is:
string<?: expects type <string> as 1st argument, given: #f; other arguments were: "c29a751537a750b825f72c9ee37eea737a0f3a8b9cd41e2f58a86ac8158ca605f292b20a02896479" coming from somewhere in the bowels of DrRacket. I don't get the error when using Racket (i.e., MzScheme). I'm not sure if this machine was running the stock V5.0 or a post-V5.0 nightly build that fixed a PLaneT problem I was having. But, the pre-release 5.0.1 build gives the same error. I reloaded V4.2.5 and the code runs fine there. I was hoping that the string in the error message itself might give someone in the know some idea of the problem. Unfortunately, this happens in a rather large autogenerated agent-based simulation that isn't easily posted - although I can send the code and the development packages it uses to someone if they need it. A short extract of the 'main' program that runs: #lang scheme ;;; Agent Generation from Templates - PRIME (AGenT') by SET Corporation (an SAIC Company) ;;; Autogenerated PLT Scheme source code invest-in-pa-yangi-yangi-tucker---plausible-outcomes-212-main.ss ;;; Generated Monday, July 19th, 2010 12:33:42pm (require (planet williams/madness/madness) "invest-in-pa-yangi-yangi-tucker---plausible-outcomes-212-arguments.ss" "invest-in-pa-yangi-yangi-tucker---plausible-outcomes-212-argument-values.ss" "invest-in-pa-yangi-yangi-tucker---plausible-outcomes-212-data-collection.ss") ... <about 1300 SLOC redacted> ;;; ;;; Monte Carlo loop INVEST-IN-PA-YANGI-YANGI-TUCKER---PLAUSIBLE-OUTCOMES ;;; (define (INVEST-IN-PA-YANGI-YANGI-TUCKER---PLAUSIBLE-OUTCOMES n) (with-new-simulation-environment (let ((aggregate-instance-index (make-hasheq))) (for ((i (in-range n))) (INVEST-IN-PA-YANGI-YANGI-TUCKER i aggregate-instance-index)) (print-statistics aggregate-instance-index) (generate-exhibit-files aggregate-instance-index) (generate-results-XML aggregate-instance-index n)))) ;;; ;;; Execute Monte Carlo ;;; (INVEST-IN-PA-YANGI-YANGI-TUCKER---PLAUSIBLE-OUTCOMES 10) ;;; ;;; Module Contracts ;;; (provide (all-defined-out)) If I simply remove the call to (INVEST-IN-PA-YANGI-YANGI-TUCKER---PLAUSIBLE-OUTCOMES 10) and move it to it's own package: #lang scheme ;;; Agent Generation from Templates - PRIME (AGenT') by SET Corporation (an SAIC Company) ;;; Autogenerated PLT Scheme source code invest-in-pa-yangi-yangi-tucker---plausible-outcomes-212-monte-carlo.ss ;;; Generated Monday, July 19th, 2010 12:33:43pm (require "invest-in-pa-yangi-yangi-tucker---plausible-outcomes-212-main.ss") ;;; ;;; Execute Monte Carlo ;;; (INVEST-IN-PA-YANGI-YANGI-TUCKER---PLAUSIBLE-OUTCOMES 10) I get the error above. [Again, it runs under Racket (i.e., MzScheme).] Please let me know if there are some switches I can set or otherwise provide additional information. Ah, I just ran it with "No debugging or profiling" checked and got some additional information - seems interesting that I got more information with no debugging. But anyway the error printed is now ..\..\..\..\..\..\..\..\..\Program Files\Racket\collects\racket\private\sort.rkt:85:19: string<?: expects type <string> as 1st argument, given: #f; other arguments were: "146047b7b2121bf8f7b15d7c2ef396b710f394474c12d02f2de08868342b8264c39b7fe111a38bf5" It also gave a backtrace that I copied and pasted into the attached file. [Was a better way to do that?] Doug
string<?: expects type <string> as 1st argument, given: #f; other arguments were: "146047b7b2121bf8f7b15d7c2ef396b710f394474c12d02f2de08868342b8264c39b7fe111a38bf5" C:\Program Files\Racket\collects\racket\private\sort.rkt: 85:19 (let jloop ([j (i+ Blo i)]) (let ([ref-j-1 (ref (i- j 1))]) (if (and (i< Blo j) (<? ref-i ref-j-1)) (begin (set! j ref-j-1) (jloop (i- j 1))) (begin (set! j ref-i) (iloop (i+ i 1))))))))))) C:\Program Files\Racket\collects\racket\private\sort.rkt: 213:0 (case-lambda [(lst <?) (sort-body lst <? #f #f #f)] [(lst <? getkey) (if (and getkey (not (eq? values getkey))) (sort lst <? getkey #f) (sort lst <?))] [(lst <? getkey cache-keys?) (if (and getkey (not (eq? values getkey))) (sort-body lst <? #t getkey cache-keys?) (sort lst <?))]) C:\Program Files\Racket\collects\compiler\cm.rkt: 177:0 (define (get-dep-sha1s deps up-to-date read-src-syntax mode must-exist?) (let ([l (for/fold ([l null]) ([dep (in-list deps)]) (and l ;; (cons 'ext rel-path) => a non-module file, check source ;; rel-path => a module file name, check cache (let* ([ext? (and (pair? dep) (eq? 'ext (car dep)))] [p (main-collects-relative->path (if ext? (cdr dep) dep))]) (cond [ext? (let ([v (get-source-sha1 p)]) (cond [v (cons (cons (delay v) dep) l)] [must-exist? (error 'cm "cannot find external-dependency file: ~v" p)] [else #f]))] [(or (hash-ref up-to-date (simple-form-path p) #f) ;; Use `compiler-root' with `sha1-only?' as #t: (compile-root mode p up-to-date read-src-syntax #t)) => (lambda (sh) (cons (cons (cdr sh) dep) l))] [must-exist? ;; apparently, we're forced to use the source of the module, ;; so compute a sha1 from it instead of the bytecode (cons (cons (get-source-sha1 p) dep) l)] [else #f]))))]) (and l (let ([p (open-output-string)] [l (map (lambda (v) (cons (force (car v)) (cdr v))) l)]) ;; sort by sha1s so that order doesn't matter (write (sort l string<? #:key car) p) ;; compute one hash from all hashes (sha1 (open-input-bytes (get-output-bytes p))))))) C:\Program Files\Racket\collects\compiler\cm.rkt: 214:6 (lambda (op tmp-path) (let ([deps (append (map path->main-collects-relative deps) (map (lambda (x) (cons 'ext (path->main-collects-relative x))) external-deps))]) (write (list* (version) (cons (or src-sha1 (get-source-sha1 path)) (get-dep-sha1s deps up-to-date read-src-syntax mode #t)) deps) op) (newline op)))))) C:\Program Files\Racket\collects\racket\private\more-scheme.rkt: 158:2 (define (call-with-break-parameterization paramz thunk) (unless (break-paramz? paramz) (raise-type-error 'call-with-break-parameterization "break parameterization" 0 paramz thunk)) (unless (and (procedure? thunk) (procedure-arity-includes? thunk 0)) (raise-type-error 'call-with-parameterization "procedure (arity 0)" 1 paramz thunk)) (begin0 (with-continuation-mark break-enabled-key (break-paramz-ref paramz 0) (begin (check-for-break) (thunk))) (check-for-break))) C:\Program Files\Racket\collects\compiler\cm.rkt: 158:5 (lambda () (begin0 (let ([out (open-output-file tmp-path #:exists 'truncate/replace)]) (dynamic-wind void (lambda () (call-with-break-parameterization bp (lambda () (proc out tmp-path)))) (lambda () (close-output-port out)))) (set! ok? #t))) C:\Program Files\Racket\collects\racket\private\more-scheme.rkt: 158:2 (define (call-with-break-parameterization paramz thunk) (unless (break-paramz? paramz) (raise-type-error 'call-with-break-parameterization "break parameterization" 0 paramz thunk)) (unless (and (procedure? thunk) (procedure-arity-includes? thunk 0)) (raise-type-error 'call-with-parameterization "procedure (arity 0)" 1 paramz thunk)) (begin0 (with-continuation-mark break-enabled-key (break-paramz-ref paramz 0) (begin (check-for-break) (thunk))) (check-for-break))) C:\Program Files\Racket\collects\compiler\cm.rkt: 158:5 (lambda () (begin0 (let ([out (open-output-file tmp-path #:exists 'truncate/replace)]) (dynamic-wind void (lambda () (call-with-break-parameterization bp (lambda () (proc out tmp-path)))) (lambda () (close-output-port out)))) (set! ok? #t))) C:\Program Files\Racket\collects\compiler\cm.rkt: 389:42 ((if sha1-only? values (lambda (build) (build) #f)) C:\Program Files\Racket\collects\compiler\cm.rkt: 354:0 (define (maybe-compile-zo sha1-only? deps mode path orig-path read-src-syntax up-to-date) (let ([actual-path (actual-source-path orig-path)]) (unless sha1-only? ((manager-compile-notify-handler) actual-path) (trace-printf "compiling: ~a" actual-path)) (begin0 (parameterize ([indent (string-append " " (indent))]) (let* ([zo-name (path-add-suffix (get-compilation-path mode path) #".zo")] [zo-exists? (file-exists? zo-name)]) (if (and zo-exists? (trust-existing-zos)) (begin (log-info (format "cm: ~atrusting ~a" (build-string (depth) (λ (x) (if (= 2 (modulo x 3)) #\| #\space))) zo-name)) (touch zo-name) #f) (let ([src-sha1 (and zo-exists? deps (cadr deps) (get-source-sha1 path))]) (if (and zo-exists? src-sha1 (equal? src-sha1 (caadr deps)) (equal? (get-dep-sha1s (cddr deps) up-to-date read-src-syntax mode #f) (cdadr deps))) (begin (log-info (format "cm: ~ahash-equivalent ~a" (build-string (depth) (λ (x) (if (= 2 (modulo x 3)) #\| #\space))) zo-name)) (touch zo-name) #f) ((if sha1-only? values (lambda (build) (build) #f)) (lambda () (when zo-exists? (try-delete-file zo-name #f)) (log-info (format "cm: ~acompiling ~a" (build-string (depth) (λ (x) (if (= 2 (modulo x 3)) #\| #\space))) actual-path)) (parameterize ([depth (+ (depth) 1)]) (with-handlers ([exn:get-module-code? (lambda (ex) (compilation-failure mode path zo-name (exn:get-module-code-path ex) (exn-message ex)) (raise ex))]) (compile-zo* mode path src-sha1 read-src-syntax zo-name up-to-date)))))))))) (unless sha1-only? (trace-printf "end compile: ~a" actual-path))))) C:\Program Files\Racket\collects\compiler\cm.rkt: 448:2 (define (do-check) (let* ([main-path orig-path] [alt-path (rkt->ss orig-path)] [main-path-time (try-file-time main-path)] [alt-path-time (and (not main-path-time) (not (eq? alt-path main-path)) (try-file-time alt-path))] [path (if alt-path-time alt-path main-path)] [path-time (or main-path-time alt-path-time)] [path-zo-time (get-compiled-time mode path)]) (cond [(not path-time) (trace-printf "~a does not exist" orig-path) (or (and up-to-date (hash-ref up-to-date orig-path #f)) (let ([stamp (cons path-zo-time (delay (get-compiled-sha1 mode path)))]) (hash-set! up-to-date main-path stamp) (unless (eq? main-path alt-path) (hash-set! up-to-date alt-path stamp)) stamp))] [else (let ([deps (read-deps path)]) (define build (cond [(not (and (pair? deps) (equal? (version) (car deps)))) (lambda () (trace-printf "newer version...") (maybe-compile-zo #f #f mode path orig-path read-src-syntax up-to-date))] [(> path-time path-zo-time) (trace-printf "newer src...") ;; If `sha1-only?', then `maybe-compile-zo' returns a #f or thunk: (maybe-compile-zo sha1-only? deps mode path orig-path read-src-syntax up-to-date)] [(ormap (lambda (p) ;; (cons 'ext rel-path) => a non-module file (check date) ;; rel-path => a module file name (check transitive dates) (define ext? (and (pair? p) (eq? 'ext (car p)))) (define d (main-collects-relative->path (if ext? (cdr p) p))) (define t (if ext? (cons (try-file-time d) #f) (compile-root mode d up-to-date read-src-syntax #f))) (and (car t) (> (car t) path-zo-time) (begin (trace-printf "newer: ~a (~a > ~a)..." d (car t) path-zo-time) #t))) (cddr deps)) ;; If `sha1-only?', then `maybe-compile-zo' returns a #f or thunk: (maybe-compile-zo sha1-only? deps mode path orig-path read-src-syntax up-to-date)] [else #f])) (cond [(and build sha1-only?) #f] [else (when build (build)) (let ([stamp (cons (get-compiled-time mode path) (delay (get-compiled-sha1 mode path)))]) (hash-set! up-to-date main-path stamp) (unless (eq? main-path alt-path) (hash-set! up-to-date alt-path stamp)) stamp)]))]))) C:\Program Files\Racket\collects\compiler\cm.rkt: 542:4 (define (compilation-manager-load-handler path mod-name) (cond [(not mod-name) (trace-printf "skipping: ~a mod-name ~s" path mod-name)] [(not (or (file-exists? path) (let ([p2 (rkt->ss path)]) (and (not (eq? path p2)) (file-exists? p2))))) (trace-printf "skipping: ~a file does not exist" path)] [(or (null? (use-compiled-file-paths)) (not (equal? (car modes) (car (use-compiled-file-paths))))) (trace-printf "skipping: ~a compiled-paths's first element changed; current value ~s, first element was ~s" path (use-compiled-file-paths) (car modes))] [(not (eq? compilation-manager-load-handler (current-load/use-compiled))) (trace-printf "skipping: ~a current-load/use-compiled changed ~s" path (current-load/use-compiled))] [(not (eq? orig-eval (current-eval))) (trace-printf "skipping: ~a orig-eval ~s current-eval ~s" path orig-eval (current-eval))] [(not (eq? orig-load (current-load))) (trace-printf "skipping: ~a orig-load ~s current-load ~s" path orig-load (current-load))] [(not (eq? orig-registry (namespace-module-registry (current-namespace)))) (trace-printf "skipping: ~a orig-registry ~s current-registry ~s" path orig-registry (namespace-module-registry (current-namespace)))] [else (trace-printf "processing: ~a" path) (compile-root (car modes) path cache read-syntax #f) (trace-printf "done: ~a" path)]) (default-handler path mod-name))
_________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/dev