sbcl-lisp : 0.7s

racket-scheme : 0.7s

ccl-lisp : 6s

kawa-scheme : 14s

abcl-lisp : 45s

    • Ok_Specific_7749@alien.topOPB
      link
      fedilink
      English
      arrow-up
      1
      ·
      11 months ago

      For me the availability of libraries is more important.
      Even the size of the executable is not important.

    • ventuspilot@alien.topB
      link
      fedilink
      English
      arrow-up
      1
      ·
      11 months ago

      How many times do you calculate Fibonacci

      I you don’t memoize - everytime!

      I’ll see myself out…

  • rpiirp@alien.topB
    link
    fedilink
    English
    arrow-up
    1
    ·
    11 months ago

    Next question: SBCL type annotations and optimization levels?

    This type of post doesn’t make sense without source code, hardware used, OS, distro, compiler/interpreter/runtime/library versions, virtualization, etc.

  • theangeryemacsshibe@alien.topB
    link
    fedilink
    English
    arrow-up
    1
    ·
    11 months ago

    Without type declarations I have CCL computing (fib 39) in 0.365 seconds and (fib 39) in 0.743 seconds. This is because CCL inlines the fixnum case for generic addition, and SBCL does not.

  • mfreddit@alien.topB
    link
    fedilink
    English
    arrow-up
    1
    ·
    11 months ago

    You didn’t say on which machine you did your measurements… Here’s Gambit on a 5 year old intel based machine achieving 0.148 seconds:

    $ ./configure --enable-single-host --enable-march=native CC=gcc-9 ; make -j8 ; sudo make install
    ...
    $ gsc -exe fib.scm
    $ ./fib
    (time (fib 39))
        0.147854 secs real time
        0.147816 secs cpu time (0.147732 user, 0.000084 system)
        no collections
        64 bytes allocated
        3 minor faults
        no major faults
    63245986
    $ sysctl -n machdep.cpu.brand_string
    Intel(R) Core(TM) i7-8700B CPU @ 3.20GHz
    $ cat fib.scm
    (declare
      (standard-bindings)
      (fixnum)
      (not safe)
      (block)
      (not interrupts-enabled)
      (inlining-limit 1000)
    )
    
    (define (fib n)
      (if (< n 2)
          n
          (+ (fib (- n 1))
             (fib (- n 2)))))
    
    (println (time (fib 39)))
    
  • ventuspilot@alien.topB
    link
    fedilink
    English
    arrow-up
    1
    ·
    11 months ago

    At least with abcl you may want to consider using the builtin compiler for a considerable speedup, don’t know about the others:

    C:\>abcl
    CL-USER(1): (defun fib (x) (if (< x 2) 1 (+ (fib (- x 2)) (fib (- x 1)))))
    FIB
    CL-USER(2): (time (fib 39))
    86.97 seconds real time
    0 cons cells
    102334155
    CL-USER(3): (compile 'fib)
    FIB
    NIL
    NIL
    CL-USER(4): (time (fib 39))
    8.958 seconds real time
    0 cons cells
    102334155
    CL-USER(5):