[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Guile 2.2.4 vs Guile 1.8
From: |
Jacques Menu |
Subject: |
Guile 2.2.4 vs Guile 1.8 |
Date: |
Sun, 26 Jul 2020 09:03:47 +0200 |
Hello folks,
I’ve been curious about what the compilation provided by Guile 2.x leads to in
terms of function calls speed.
Here are the results of tabulating the Ackermann function up to 'Ack (3, 10)'
on my machine in various languages, with output like the one below.
The code for function Ack() is straightforward in all languages, no attempt is
made to maximise speed with language-specific features. For example, in Guile
and Lua:
(define (Ack m n)
(if (= m 0)
(+ n 1)
(if (= n 0)
(Ack (- m 1) 1)
(Ack (- m 1) (Ack m (- n 1)))
)
)
)
function Ack (m, n)
if (m == 0) then
return n + 1
else
if (n == 0) then
return Ack (m - 1, 1)
else
return Ack (m - 1, Ack (m, n - 1))
end
end
end
Times vary from run to run of course, but the figures give an idea.
I’d be interested in testing a small data-centric example, that would be
typical of what LilyPond does frequently. Hints are welcome.
HTH, for what it's worth!
JM
—
C++ (clang version 11.0.0) :
real 0m0.347s
user 0m0.335s
sys 0m0.010s
Swift 5.1.3 :
real 0m0.648s
user 0m0.544s
sys 0m0.097s
Guile 2.2.4, compiled :
real 0m1.184s
user 0m1.146s
sys 0m0.034s
Lua 5.3.5 :
real 0m3.167s
user 0m3.072s
sys 0m0.082s
Guile 1.8 :
real 0m9.460s
user 0m8.841s
sys 0m0.401s
Python 3.8.4 :
real 0m14.888s
user 0m12.111s
sys 0m2.718s
--
menu@macbookprojm: ~/Lua/Ackermann > guile --version
guile (GNU Guile) 2.2.4
Copyright (C) 2018 Free Software Foundation, Inc.
License LGPLv3+: GNU LGPL 3 or later <http://gnu.org/licenses/lgpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
menu@macbookprojm: ~/Lua/Ackermann >
menu@macbookprojm: ~/Lua/Ackermann > time guile Ackermann.scm
"(Ack 1 1) = 3"
"(Ack 1 2) = 4"
"(Ack 1 3) = 5"
"(Ack 1 4) = 6"
"(Ack 1 5) = 7"
"(Ack 1 6) = 8"
"(Ack 1 7) = 9"
"(Ack 1 8) = 10"
"(Ack 1 9) = 11"
"(Ack 1 10) = 12"
"(Ack 2 1) = 5"
"(Ack 2 2) = 7"
"(Ack 2 3) = 9"
"(Ack 2 4) = 11"
"(Ack 2 5) = 13"
"(Ack 2 6) = 15"
"(Ack 2 7) = 17"
"(Ack 2 8) = 19"
"(Ack 2 9) = 21"
"(Ack 2 10) = 23"
"(Ack 3 1) = 13"
"(Ack 3 2) = 29"
"(Ack 3 3) = 61"
"(Ack 3 4) = 125"
"(Ack 3 5) = 253"
"(Ack 3 6) = 509"
"(Ack 3 7) = 1021"
"(Ack 3 8) = 2045"
"(Ack 3 9) = 4093"
"(Ack 3 10) = 8189"
real 0m1.184s
user 0m1.146s
sys 0m0.034s
menu@macbookprojm: ~/Lua/Ackermann >
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Guile 2.2.4 vs Guile 1.8,
Jacques Menu <=