General Description of Similix

Similix is an autoprojector (self-applicable partial evaluator) for a large higher-order subset of the strict functional language Scheme. Similix treats source programs that use a limited class of side-effects, for instance input/output operations. Similix handles partially static data structures.

Similix is automatic: in general, no user annotations (such as unfolding information) are required; user assistance may in some cases be required to avoid looping, however. Similix gives certain guarantees concerning the residual programs it generates: computations are never discarded (partial evaluation thus preserves termination properties) and never duplicated.

Similix is well-suited for partially evaluating for instance interpreters that use environments represented as functions and interpreters written in continuation passing style. Since Similix is self-applicable, stand-alone compilers can be generated from interpreters.

Similix is highly portable. It conforms to the IEEE and R4RS Scheme standards, but it also runs under R3RS Scheme. This distribution should immediately enable you to run Similix on Scm and on Chez Scheme. We have tested this version of Similix on Scm version 4c0 and on Chez Scheme version 3.2.

Similix 5.1 is based on the former Similix 4.0 (by Anders Bondorf ( and Olivier Danvy ( A part of Similix 5.1 has been written jointly by Anders Bondorf and Jesper Jørgensen.

Similix 5.1 is an update of Similix 5.0, containing a number of updates and improvements. Similix 5.1 is also bundled with the Simu system written by Liping Zong; an X windows interface to Similix.

The manual ( contains a section that summarizes some often used binding-time improvements. These are needed in order to obtain good results of partial evaluation. The section is partly Similix-specific, but parts of it are of more general interest.

Related literature


  • A Bondorf and O Danvy. Automatic Autoprojection of Recursive Equations with Global Variables and Abstract Data Types. March, 1990. Summary. Bibtex. D-52.
  • A Bondorf. Self-Applicable Partial Evaluation (Revised Version). December, 1990. Summary. Bibtex. D-67.
  • A Bondorf. Automatic autoprojection of higher order recursive equations. May, 1990. Summary. Bibtex. D-5.
  • A Bondorf and O Danvy. Automatic autoprojection of recursive equations with global variables and abstract data types. 1991. Summary. Bibtex. D-29.
  • A Bondorf. Automatic autoprojection of higher order recursive equations. December, 1991. Summary. Bibtex. D-104.
  • A Bondorf and J Jørgensen. Efficient analyses for realistic off-line partial evaluation. 1992. Summary. Bibtex. D-153.
  • A Bondorf. Improving binding times without explicit cps-conversion. June, 1992. Summary. Bibtex. D-126.
  • A Bondorf and J Jørgensen. Efficient analyses for realistic off-line partial evaluation: extended version. 1993. Summary. Bibtex. D-164. part-1-and-3.dvi.Z. FTP.
  • A Bondorf. Similix 5.0 Manual. May, 1993. Summary. Bibtex. D-167.
  • N D Jones, C Gomard and P Sestoft. Partial Evaluation and Automatic Program Generation. June, 1993. Summary. Bibtex. D-135.
  • Applications:

  • A Bondorf. Compiling laziness by partial evaluation. August, 1991. Summary. Bibtex. D-76.
  • A Bondorf and J Palsberg. Compiling actions by partial evaluation. June, 1993. Summary. Bibtex. D-169.
  • J Jørgensen. Generating a Pattern Matching Compiler by Partial Evaluation. July, 1990. Summary. Bibtex. D-59. dvi.Z. FTP.
  • J Jørgensen. Compiler Generation by Partial Evaluation. 1991. Summary. Bibtex. D-95. dvi.Z. FTP.
  • J Jørgensen. Generating a Compiler for a Lazy Language by Partial Evaluation. January, 1992. Summary. Bibtex. D-98. ps.Z. FTP.
  • R Glück and J Jørgensen. Generating Optimizing Specializers. 1994. Summary. Bibtex. D-186. dvi.Z. FTP.
  • R Glück and J Jørgensen. Generating Transformers for Deforestation and Supercompilation. April, 1994. Summary. Bibtex. D-195. dvi.Z. FTP.
  • C Mossin. Partial evaluation of General Parsers (Extended abstract). June, 1993. Summary. Bibtex. D-158. dvi.Z. FTP.
  • How to get the newest version of Similix

    The current release of Similix is version 5.1. You can download a tar packed version by FTP from (To decode the file Similix-5.1-2.tar.gz recieved in this way, run gunzip -c Similix-5.1-2.tar.gz | tar xvpf - ). If you want to get more information on Similix and how to optain before actually doing so, you might do so by reading the README file of the distribution.

    How to contact the Similix group at DIKU

    Currently the group is: Mailing Address e-mail:

    Any feedback you give us on Similix (or Simu) is appreciated.

    Pointers [11.09.2001]