Schant is a Scheme language compiler which conforms to most of the R4RS language specification. Schant is tail recursive and uses a stop and copy garbage collector.
=> in cond
Compare a number to a list of numbers
gcd lcm can only have two arguments
string-append can only have two arguments
number->string doesn't handle optional base argument
Only standard input output I/O procedures supported:
eof-object? read display write newline read-char write-char
no load procedure
Real numbers can't start with "."
No
force delay
No macros processing.
(bitwise-and x y)
(bitwise-or x y)
(bitwise-not x)
(bitwise-xor x y)
(exit n)
(symbol-hash symbol)
Three versions of schant exist. The first one: schant-int, only supports integer numbers. The second: schant-bigfloat8, supports integers and floating point numbers with a precision of 8 digits. Elementary functions (e.g. sin, exp, etc.) will have an accuracy of about 6 digits. Finally: schant-bigfloat12, supports integers and floating point numbers with a precision of 12 digits. Elementary functions (e.g. sin, exp, etc.) will have an accuracy of about 10 digits.
Integer numbers can be specified as:
One or more decimal digits
A binary number of the form #bnn... with up to 32 binary n digits
A hexadecimal number of the form #xnn... with up to 8 hexadecimal n digits
Two steps are involved. First compile the scheme source to schant bytecodes. Then run the bytecodes with schant.
cat bin/schant-compiler.txt x.scm | bin/schant-int >bytecodes
cat args bytecodes | bin/schant-int
If floating point numbers are used then use schant-bigfloat8 or schant-bigfloat12.
cat bin/schant-compiler.txt x.scm | bin/schant-bigfloat8 >bytecodes
cat args bytecodes | bin/schant-bigfloat8
The file "args" is optional and can contain zero or more of the following arguments.
-d prints debug information while running. e.g. garbage collection invocations.
-z normally execution without this option treats symbols case insensitively. when the option is set treat symbols case sensitively.
A convenience script: compile-schant-with-shmall.sh is provided to compile schant from source using the shmall C compiler. It compiles in a stack / heap sized to 88MB (22000000 * 4). This constant can be adjusted up or down in the script.