[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Chicken-users] About peformance of user defined procedures

From: Pedro Henrique Antunes de Oliveira
Subject: [Chicken-users] About peformance of user defined procedures
Date: Sat, 30 Jul 2011 20:43:20 -0300


I have a file map.scm, which contais this code:

(define (mymap1 op ls)
  (let loop ((ls ls) (acc '()))
    (if (null? ls)
        (reverse acc)
        (loop (cdr ls) (cons (op (car ls)) acc)))))

(define (mymap2 op ls)
  (let loop ((ls ls))
    (if (null? ls)
        (cons (op (car ls)) (loop (cdr ls))))))

(define (mymap3 op ls)
  (if (null? ls)
      (cons (op (car ls)) (mymap3 op (cdr ls)))))

(define ls (let loop ((i 0)) (if (= i 1000000) '() (cons i (loop (add1 i))))))

And another four files, f1.scm, f2.scm, f3.scm, f4.scm.

(include "map.scm")
(map add1 ls)

(include "map.scm")
(mymap1 add1 ls)

(include "map.scm")
(mymap2 add1 ls)

(include "map.scm")
(mymap3 add1 ls)

Compiling all four f[1-4].scm files, with csc -O3, I got those results:

f1 took 0.95secs (average)
f2 took 1.65secs (average)
f3 took 1.35secs (average)
f4 took 1.35secs (average)

I understand why f4 and f3 are pretty much the same thing, but what
differs from mine to the built in map that makes the built in so
faster (2-3x faster)?

Interpreted languages have this characteristic that built in
procedures tend to be much faster, but this all is compiled. I suppose
it is possible to make procedures, in chicken/scheme that are as fast
as the built in one. Right?

Note: compiling with -O5 instead of -O3 made the programs 0.1secs "shorter".
Note2: this is not about map specifically (I've been looking at some
procedures that I have that look somewhat to some built in ones, but
are much slower)

reply via email to

[Prev in Thread] Current Thread [Next in Thread]