Ikarus Scheme is a free optimizing incremental native-code compiler for Scheme as specified in the Revised^6 Report on the Algorithmic Language Scheme.
Ikarus Scheme is free to download, to distribute, to modify, and to redistribute. The complete source is available according to the GNU General Public License (GPL3).
Ikarus Scheme is an optimizing compiler, so your Scheme code will run fast without the need to port hot spots to C "for performance". With an incremental compiler, you don't need a separate compilation step to make your program run fast. The best part is that the compiler itself is fast, capable of compiling thousands of lines of code per second.
Finally, Ikarus Scheme is an R6RS compiler. R6RS is the latest revision of the Scheme standard. The current release of Ikarus supports over 94% of the most important features R6RS, and later releases will bring Ikarus closer to full R6RS conformance. R6RS libraries, scripts, record types, condition system, exception handling, unicode strings, bytevectors, hashtable, and enumerations are among the supported features.
The 0.0.3 release of Ikarus brings the following improvements:
- System usability: When Ikarus encounters a syntactic error (either during reading or during macro expansion), error messages now contain the file name and character position at which the error occurred. Previously, you got a context-free error.
- Better Unicode support: Ikarus's ports are now properly classified into either binary or textual ports (previously, they supported mixed character and byte input/output). The UTF8 and Latin1 codecs are now fully supported for both input and output directions.
- Better R6RS conformance: The 0.0.3 release adds 28 new R6RS primitives, bringing us to 94% of the total R6RS forms and procedures.
Additionally, many existing primitives have been improved (either on the performance front or on generating better error messages), along with some improvements to the compiler itself. See https://launchpad.net/ikarus/+milestone/0.0.3 for details.
The 0.0.2 release advances Ikarus in many directions:
- The Ikarus compiler is faster. Just when I thought the bootstrap time was acceptable (11 seconds on my MacBook), this new release bootstraps in under 7 seconds despite the many added features. The "compiler" benchmark (11700 lines) now compiles in 3 seconds down from 10. The "slatex" benchmark (2350 lines) compiles in about 1/3 of a second.
- Not only is the compiler faster, it also generates faster code. Floating-point intensive programs now get a huge performance boost (the run-time for the "ray", "pnpoly", and "mbrot" benchmarks is reduced by about 30%, "fibfp" and "sumfp" run at about 50% of the time recorded in 0.0.1).
- An infrastructure for adding user-contributed code has been added. In 0.0.2, Ikarus distributes three R6RS libraries from the reference implementation of SRFI-41 (streams). More libraries will be added as they become available. Thanks to Phil Bewig for taking the initiative in producing R6RS SRFIs.
- Ikarus now supports 90% of R6RS, up from 80% in the 0.0.1 release. Future releases will bring it closer to full R6RS conformance.
- Numerous other improvements and bug fixes (thanks to all who submitted bug reports and suggestions for improvements). The 0.0.2 milestone page lists some of the resolved issues. See https://launchpad.net/ikarus/+milestone/0.0.2 for details.
Ikarus runs on the IA-32 (x86) architecture supporting SSE2 extensions. This includes the Athlon 64, Sempron 64, and Turion 64 processors from AMD and the Pentium 4, Xeon, Celeron, Pentium M, Core, and Core2 processors from Intel. The system does not run on Intel Pentium III or earlier processors.
The Ikarus compiler generates SSE2 instructions to handle Scheme's IEEE floating point representation (flonums) for inexact numbers. Note that Ikarus is a 32-bit system even on 64-bit architecutres. On 64-bit Mac OS X or Linux, special compatibility packages may need to be installed if they are not installed already. Refer to the user's guide for a detailed list of requirements and installation instructions.
Ikarus is tested under the following operating systems:
- Mac OS X version 10.4 and 10.5
- Linux 2.6.18 (Debian, Fedora, Gentoo, and Ubuntu).
- FreeBSD version 6.2
- NetBSD version 3.1
- Microsoft Windows XP (using Cygwin 1.5.24).
- GMP: Ikarus uses the GNU Multiple Precision Arithmetic Library (GMP) for some bignum arithmetic operations. To build Ikarus from scratch, GMP version 4.2 or better must be installed along with the required header files. Pre-built GMP packages are available for most operating systems. Alternatively, GMP can be downloaded from http://gmplib.org/.
- GCC: The GNU C Compiler is required to build the Ikarus executable (e.g. the garbage collector, loader, and OS-related runtime). GCC versions 4.1 and 4.2 were successfully used to build Ikarus.
Ikarus Scheme User's Guide
A preliminary version of the Ikarus Scheme User's Guide is available in PDF format. The guide contains:
- Hardware and software requirements
- Installation instructions
- An R6RS crash course
- Description of some of the features provided in the (ikarus) library
- List of additional user-provided libraries (e.g., SRFIs, GUIs, etc.) and where to obtain them from.
- Limitations and missing features
Download ikarus-scheme-users-guide.pdf (253734 bytes) released on February 2, 2008.
R6RS (local copy)Local mirror of the R6RS documents in PDF format are available:
- r6rs.pdf (858815 bytes)
- r6rs-lib.pdf (629868 bytes)
- r6rs-rationale.pdf (284718 bytes)
- r6rs-app.pdf (124571 bytes)
The official release of Ikarus is for download in .tar.gz format. The tarball contains the following:
- The complete source code of the Ikarus C runtime system (garbage collector, boot loader, and foreign procedures).
- The complete source code of the Ikarus Scheme runtime system (expander, compiler, assembler, printer, and the rest of the R6RS standard libraries), written in R6RS Scheme + Ikarus extensions.
- An initial boot image for bootstrapping Ikarus from its sources.
- The User's Guide, in PDF and Latex format.
- Additional contributed libraries (SRFIs, etc).
- Code for 60 R6RS benchmarks that we use periodically to monitor the progress of Ikarus.
Download ikarus-0.0.3.tar.gz (3948264 bytes) released on February 2, 2008.
- ikarus-0.0.2.tar.gz (3838888 bytes) released on November 29, 2007.
- ikarus-0.0.1.tar.gz (1776182 bytes) released on October 31, 2007.
Development of Ikarus is continuing. To access the master repository, you need the Bazaar revision control system.
A development snapshot of the repository can be obtained by performing a lightweight checkout. To do so, type:
$ bzr checkout --lightweight /ikarus.dev
To retreive a specific revision from the repository (say revision 10), do:
$ bzr checkout --lightweight -r 10 /ikarus.dev
Note that the full repository is huge (around 560MB) and is typically not needed for developing with Ikarus.
To checkout a copy of the entire repository, type the following:
$ bzr checkout /ikarus.devOr, from the mirror repository (updated every 5 hours):
$ bzr checkout http://bazaar.launchpad.net/~aghuloum/ikarus/ikarus.dev
Development snapshots are available at ikarus.dev.
To submit bug reports and feature requests, please visit: Launchpad's Ikarus Scheme project.
- Release 0.0.3 announced on February 2, 2008.
- Release 0.0.2 announced on November 29, 2007.
- Initial public release announced on October 31, 2007.
The following license applies to all of ikarus and its source files unless otherwise stated.
Ikarus Scheme -- A compiler for R6RS Scheme. Copyright (C) 2006,2008 Abdulaziz Ghuloum This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 3 as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>