Features
Standard conformance
- Covers R5RS, almost.
- Both R5RS high-level macro and legacy define-macro are supported.
- Numeric operations are supported on fixnum, bignum, flonum and complex.
- Supports the following SRFIs.
- SRFI-0 Feature based conditional expansion construct
- SRFI-1 List library
- SRFI-2 And-let*
- SRFI-4 Homogeneous numeric vector datatypes
- SRFI-5 A compatible let form with signatures and rest arguments
- SRFI-6 String ports
- SRFI-7 Feature-based program configuration language
- SRFI-8 Receive
- SRFI-9 Record Types
- SRFI-10 Sharp-comma external form
- SRFI-11 Let-values
- SRFI-13 String Library
- SRFI-14 Character Set Library
- SRFI-16 Syntax for procedures of variable arity
- SRFI-17 Generalized set!
- SRFI-18 Multithreading support
- SRFI-19 Time data types and procedures
- SRFI-22 Running Scheme Scripts on Unix
- SRFI-23 Error reporting mechanism
- SRFI-25 Multi-dimensional array primitives
- SRFI-26 Notation for Specializing Parameters without Currying
- SRFI-27 Sources of random bits
- SRFI-28 Basic format strings
- SRFI-29 Localization
- SRFI-30 Nested Multi-line comments
- SRFI-31 A special form rec for recursive evaluation
- SRFI-34 Exception Handling for Programs
- SRFI-35 Conditions
- SRFI-36 I/O Conditions (partly)
- SRFI-37 args-fold: a program argument processor
- SRFI-38 External Representation for Data With Shared Structure
- SRFI-39 Parameter objects
- SRFI-40 A Library of Streams
- SRFI-42 Eager comprehenshion
- SRFI-43 Vector Library
- SRFI-45 Primitives for Expressing Iterative Lazy Algorithms
- SRFI-55 require-extension
- SRFI-60 Integers as bits
- SRFI-61 A more general cond clause
- SRFI-62 S-expression comments
- SRFI-87 => in case clauses
- SRFI-98 An interface to access environment variables
- SRFI-99 ERR5RS Records
Additional features
- Module system:a simple module system, API compatible to STklos
- Object system:CLOS-like object system with metaobject protocol. Almost API compatible to STklos . It is also similar to Guile 's object system.
- Multibyte string support: Strings are represented by multibyte string internally. You can use UTF-8, EUC-JP, Shift-JIS or no multibyte encoding by configure-time choice. Conversion between native coding system and external coding system is supported by port objects.
- Multibyte regexp: Regular expression matcher is aware of multibyte string; you can use multibyte characters both in patterns and matched strings.
- Reader extension: literal regexp and char-set, string interpolation:
Extended reader recognizes #/.../ as an regular expression,
and #[...] as a character set. Handy to write one-liners.
(e.g. (rxmatch-substring (rxmatch #/(\d+)/ "abc123def")) ==> "123")
Also "string interpolation" is supported (e.g. (display #`"1 + 2 = ,(+ 1 2)\n")). - System interface: Covers most of POSIX.1 and some other features common in Unices. See section 6.19 of the reference manual for details.
- Network interface: Has API for socket-based network interface, including IPv6 if the OS suppots it.
- Multithreading: Based on native threads. Scheme-level API conforms SRFI-18.
- DBM interface: Interface to DBM-like libraries (dbm, ndbm and/or gdbm) if the system provides them.
- XML parsing: Oleg Kiselyov's SXML tools are included.
- OpenGL binding: OpenGL binding is provided in a separate package.
- GTK binding: GTK2 binding is provided in a separate package.
Performance
Gauche is a script engine in the sense that it reads and evaluates the source code, but internally it compiles Scheme expressions into an intermediate forma by optimizing compiler then executes it by a virtual machine. So far, the performance is comparable to other Scheme interpreters, I hope.
Platforms
The table below lists the platforms Gauche runs on. If you can compile on the other platforms, let me know.
| Gauche version | OS | CPU | CC | Threads | Status |
|---|---|---|---|---|---|
| 0.9.3.3 | Linux (Ubuntu 10.04) | x86, x86_64 | gcc | OK | Passes all tests. |
| Windows Vista SP2 (Cygwin-NT 5.1) | x86_64 | gcc | OK | One new GC test fails, which is under investigation. Gauche tests pass. | |
| Windows Vista SP2 (MinGW) | x86_64 | gcc | OK | Some GC tests fail, though I believe it is test build process problem. | |
| MacOS X 10.7 | x86_64 | gcc | OK | Passes all tests. | |
| 0.9.3 | FreeBSD 9 | x86_64 | gcc | OK | Passes all tests. |
| 0.8.8 | Linux (Debian3.0) | Alpha | gcc | OK | Passes all tests. |
| Solaris 9 | SPARC | gcc | OK | Use gmake to build. Passes all tests. | |
| Solaris 9 | x86 | gcc | OK | Use gmake to build. Passes all tests. | |
| 0.9.2 | NetBSD 5 | x86 | gcc | OK | Passes all tests. |
| NetBSD 5 | x86_64 | gcc | OK | Passes all tests. | |
| 0.9 | NetBSD 5 | Power PC | gcc | OK | Passes all tests. |
| 0.8.9 | HP-UX 11.11 | PA RISC | gcc | N/A | Passes all tests except gauche.charconv. It seems to choke when compiled with the system provided iconv. We haven't dug it well, but if it bites you, try alternative iconv library. |
| 0.7.1 | Linux (Debian3.0) | SPARC | gcc | OK | Passes all tests. |
| 0.8.12 | Linux (Debian3.0) | Power PC | gcc | OK | Passes all tests |
| 0.5.2 | Irix 6.5 | MIPS | gcc, MIPSPro CC | ? | Passes all tests |
| FreeBSD 2.2.1 | x86 | gcc | ? | Passes all tests (thanks to Abe Hiroshi) | |
| 0.5.4 | MacOS 7.5.5 | 68k | sc | N/A | Reported to work with some modification by Yasunari Shimizu. Many system functions don't work. I don't have the porting code. |
Bugs
There must be a lot, but I list a few important ones.
- Character classes are correct only in ASCII range, even if you compile Gauche with UTF-8 native encoding. I'm not sure how soon I can fix this.
- R5RS define-syntax macros that generate define-syntax macros don't work.