Kawa is a full Scheme implementation. It implements almost all of R5RS (for exceptions see Features of R5RS not implemented), plus some extensions. By default, symbols are case sensitive.
It is completely written in Java. Scheme functions and files are automatically compiled into Java byte-codes. Kawa does some optimizations, and the compiled code runs at reasonable speed.
Kawa uses Unicode internally, and uses the Java facilities to convert files using other character encodings.
Kawa provides the usual read-eval-print loop, as well as batch modes.
Kawa provides a framework for implementing other progressing languages, and comes with incomplete support for CommonLisp, Emacs Lisp, and EcmaScript, and the draft XML Query language.
Kawa is written in an object-oriented style.
Kawa has builtin pretty-printer support, and fancy formatting.
Kawa supports class-definition facilities, and separately-compiled modules.
Kawa implements the full numeric tower, including infinite-precision
rational numbers and complex numbers. It also supports "quantities"
with units, such as 3cm
.
You can optionally declare the types of variables.
You can conveniently access Java objects, methods, fields, and classes.
Kawa implements most of the features of the expression language of DSSSL,
the Scheme-derived ISO-standard Document Style Semantics and Specification
Language for SGML. Of the core expression language, the only features
missing are character properties, external-procedure
,
the time-relationed procedures, and character name escapes in
string literals. Also, Kawa is not generally tail-recursive.
From the full expression language, Kawa additionally is missing
format-number
, format-number-list
, and language objects.
Quantities, keyword values, and the expanded lambda
form
(with optional and keyword parameters) are supported.