This is the home page of Vicare Scheme, an implementation of the Scheme language compliant with the R6RS standard; it is a fork of Ikarus Scheme by Abdulaziz Ghuloum. The project aims to be a native compiler for R6 Scheme producing single threaded programs running on Intel x86 processors, both 32-bit and 64-bit; it officially supports the GNU+Linux platform. It offers arbitrary precision integers through GMP; it implements an optionally included foreign-functions interface based on Libffi. Development is going through revision 0.2, it is to be considered alpha quality; the project is hosted at Github and as backup at Gitorious.
Scheme is a statically scoped and properly tail-recursive dialect of the Lisp programming language, invented by Guy Lewis Steele Jr. and Gerald Jay Sussman. It was designed to have an exceptionally clear and simple semantics and few different ways to form expressions.
The Revised6 Report on the Algorithmic Language Scheme gives a defining description of the programming language Scheme. The report is the work of many people in the course of many years. Revision 6 was edited by Michael Sperber, R. Kent Dybvig, Matthew Flatt and Anton Van Straaten.
Ikarus Scheme was an almost R6RS compliant implementation of the Scheme programming language; it is the creation of Abdulaziz Ghuloum, which retired from deveoping it in early 2010.
Vicare (pronounced the etruscan way) is an R6RS compliant fork of Ikarus Scheme, aiming to be a native compiler for R6 Scheme producing single threaded programs running on Intel x86 32-bit processors, with experimental support for 64-bit machines; it officially supports the GNU+Linux platform, but it should be possible to port it to other platforms. The documentation is available on line.
Arbitrary precision integers are implemented on top of GMP. The foreign-functions interface (FFI) allows use of foreign C language libraries; it is built on top of Libffi. It is possible to write C language shared libraries using an internal Vicare API and interface them at the Scheme level without using the FFI. A very basic interface to GNU Readline or compatible library is available to make life easier at the REPL; for full line editing capabilities we should rely on rlwrap, as explained in the documentation.
A collection of libraries comes with the Vicare distribution, implementing: direct access to fast, unsafe, low level Vicare functions; bindings to POSIX functions; bindings to some GNU C library specific functions; bindings to some Linux specific functions; a simple event loop on top of the POSIX select() function; other miscellaneous features.
Vicare Scheme 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.
Vicare Scheme 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 the Vicare Scheme package. If not, see http://www.gnu.org/licenses/.
The package archive (tarball) can be downloaded from the download pages at Google Code (Github no more offers a release archive download service).
GNU+Linux systems are the only platform supported so far; however it should be possible to port Vicare on Mac OS X, FreeBSD, NetBSD, and Microsoft Windows using the Cygwin environment; however, a significant amount of work is needed.
This project has a mailing list for announcements and discussions. Bug reports should be registerd at Github's Issue Tracker. It is suggested to use Vicare along with Nausicaa, a large collection of libraries for R6 Scheme.
The R6 Scheme language is fully implemented. The code base can be partitioned in:
Executable run-time support program written in C (garbage collector, boot image loader, etc).
Scheme code implementing the assembler and the compiler.
Scheme libraries implementing the language.
Multilayer interface to the operative system services.
the current development goal is to put the code in such a shape that: the run-time support program and the language implementation will not change anymore and are just subject to maintenance (mostly bug fixes); only the assembler, compiler and interface to the OS should see further significant work.
How it works
Vicare is a compiler for the Scheme language. It does not produce standalone executable programs, neither shared libraries as C language compilers do. Source code for Vicare is either a program or a library; Vicare compiles Scheme libraries into FASL files (FASt Loading) which are stored in a cache directory.
At present, programs cannot be compiled; it is always possible to put all the code of an application into a library and reduce the program needed to launch the application to 2 or 3 lines of Scheme code.
To run an application written in Vicare Scheme we need both the vicare executable program and the boot image file; the boot image contains the language implementation, the compiler and a collection of functions extending the R6RS language.
When running on GNU+Linux systems, it is possible to use the features of the binfmt_misc kernel module to automatically launch Vicare programs without prepending the vicare executable to the name of the program file.
Bindings to foreign libraries
CRE2 Starting from version 0.2d6, Vicare comes with a binding to the CRE2 library embedded in the distribution; CRE2 is a C wrapper for RE2, a regular expressions library written in C++. Inclusion of this binding is optional, we can build and install Vicare without it.
Vicare/Expat A binding to the Expat library, a parser for XML. This is a separate package installing a C library with low-level function wrappers and a Scheme library with a higher-level interface.
Vicare/CityHash A binding to the CityHash C++ library implementing hash functions for strings. This is a separate package installing a C library with low-level function wrappers and a Scheme library with a higher-level interface.
Vicare/Template A template package showing how to write a Vicare extension using both the C language and the Scheme language. The package makes use of the GNU Autotools.
Other libraries for R6RS implementations
Industria a collection of miscellaneous libraries, especially about cryptography. There is a fork of it that repackages the distribution with the GNU Autotools and has verified support for Vicare Scheme.
SRFI-R6RS, a port of the SRFI libraries to R6RS implementations. Notice the Vicare Scheme distribution already comes with such SRFI libraries.
Xitomatl, a collection of miscellaneous libraries. There is no support for Vicare Scheme.
PFDS, a collection of libraries implementing purely functional data structures in Scheme.