That is amusing! When you compile this program the compiler sees that the expression in calculate-largest-prime is a constant, so it computes the value at compilation time and dumps the value in the generated C code. If you are patient, add the -expansion option to see the code after the high level program transformations. You will see:
(define calculate-largest-prime (lambda () 3003764…))) ;; over 22 million digits!
So the (time (calculate-largest-prime)) reports a run time of 0 milliseconds!
Anyway, the segfault happens in number->string . I don’t yet know why but I suspect a bug in gcc due to the enormous bignum constant. I’ll investigate.
Marc
On Jan 25, 2016, at 3:58 AM, Alex Silva asandroq@gmail.com wrote:
Hallo,
The following program works fine when interpreted, but crashes when compiled:
(declare (block) (standard-bindings) (extended-bindings)) (define (calculate-largest-prime) (- (expt 2 74207281) 1)) (define *largest-prime* (time (calculate-largest-prime))) (define *prime-string* (time (number->string *largest-prime*))) (time (println *prime-string*))
Gambit 4.8.3, GCC 5.3.0, Ubuntu 14.04
-- -alex http://unendli.ch/ _______________________________________________ Gambit-list mailing list Gambit-list@iro.umontreal.ca https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list