<div dir="ltr">how FriCAS does perform compared to CCL, for example, can you test for me the fibonacci function<div><br></div><div>on my computer ccl takes 7.22seconds, what about FriCAS on CCL?</div><div><br></div><div>ie. (defun fib (n) (if (< n 2) n (+ (fib (- n 1)) (fib (- n 2)))))</div><div>? (time (fib 45))<br>(FIB 45)<br>took 7,225,458 microseconds (7.225458 seconds) to run.<br>During that period, and with 16 available CPU cores,<br>     7,222,601 microseconds (7.222601 seconds) were spent in user mode<br>         2,253 microseconds (0.002253 seconds) were spent in system mode<br>1134903170<br></div><div><br></div><div>I am interested to know how fast can be an interpreter compared to the host language (few hundreds times slower or at best 10 times slower?)</div><div>is there any benchmark tests of interpreters compared to their host languages?</div><div><br></div><div>Thanks </div><div><br></div><div>-taoufik</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, May 12, 2020 at 2:46 PM Waldek Hebisch <<a href="mailto:hebisch@math.uni.wroc.pl">hebisch@math.uni.wroc.pl</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Tue, May 12, 2020 at 08:54:03AM +0200, Taoufik Dachraoui wrote:<br>
> I am implementing a new lisp dialect programming language (statically<br>
> typed, generic programming, lambda calculus + syntax)<br>
> I found that limiting the number of variables in a closure may be of help<br>
> in optimising the interpreter (simulator)<br>
> <br>
> I would like to know how closures are efficiently implemented in lisp<br>
> languages<br>
> <br>
> In the implementation I have a notion of frame which contains the address<br>
> of a function and the variables in a closure<br>
> <br>
> and I am trying to optimise the implementation by limiting the size of the<br>
> closure but this may not be acceptable<br>
> <br>
> Any thoughts are welcome, and wanted to know how Clozure CL is implemented<br>
> and if there is a notion of frames<br>
<br>
I do not know how Clozure CL implements closures, but I can tell<br>
you about two different system.  One is FriCAS which contains<br>
staticaly typed language compiling to Common Lisp (you can run<br>
FriCAS on top of Clozure CL).  In FriCAS finction is represented<br>
by Lisp dotted pair, CAR is Lisp function while CDR is extra<br>
argument.  For closures the extra argument is Lisp vector<br>
containing captured values.  Currently FriCAS has no limit<br>
on number of captured, while number of arguments to functions<br>
is limited to about 30.  Limit on number of arguments is<br>
kind of soft: FriCAS need a few Lisp symbols for each argument.<br>
If needed one can increase number of arguments by adding<br>
extra sysmbols (but up to now current limits are adequate).<br>
<br>
Concerning efficiency, FriCAS compiler in several places<br>
uses linear searches and large number of relevant objects<br>
slows down compilation.  My experiments suggest that<br>
Clozure CL has similar problem, normaly Clozure CL<br>
compiler is quite fast, but with large number of variables<br>
it considerably slowed down (at least that happended in the<br>
past using earlier version).  Still, slowing down<br>
compilation seems to be mcuh better than hard coded<br>
limit.<br>
<br>
Another system is Poplog.  It offers Lispy data structures<br>
and user defined syntax (there is user accessible interface<br>
to code generator, so users can generate arbitrary code<br>
from new sysntax).  In Poplog closures are implemented<br>
in two step way.  Namely, Poplog allows "partial<br>
evaluation", that is you can replace last k arguments<br>
to function by fixed values.  "partial evaluation" via<br>
small stub which has table of fixed values and copies<br>
values from table to argument positions.  Actual code of<br>
function takes extra arguments for each closed over<br>
variable.<br>
<br>
-- <br>
                              Waldek Hebisch<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr">Taoufik Dachraoui<div><br></div></div></div>