Presentation
STklos is a free Scheme system mostly compliant with the languages features defined in R7RS small. The aim of this implementation is to be fast as well as light. The implementation is based on an ad-hoc Virtual Machine. STklos can also be compiled as a library and embedded in an application.
The salient points of STklos are:
- an efficient and powerful object system based on CLOS providing
- Multiple Inheritance,
- Generic Functions,
- Multi-methods
- an efficient MOP (Meta Object Protocol)
- a simple to use module system
- a full tower of numbers implementation, as defined in R5RS,
- easy connection to the GTK+ toolkit,
- a Perl compatible regular expressions thanks to the PCRE package,
- easily extensible with its ScmPkg mechanism,
- it implements properly tail recursive calls.
Latest News
Version “1.50” released 2020-08-17
This version enhances R7RS compliance and a lot of new SRFIs (thanks to the awesome work of Jeronimo Pellegrini — @jpellegrini)
Changes in this version are:
- Exceptions behavior is now R7RS compliant
current{input,ouput,error}-port
are now parameters as required by R7RS.- Socket ports are now both binary and textual.
- Added support for Android.
- Better support of 32 bits big-endian architectures
- Support of more architectures. STklos can be run now on
- GNU/Linux on x86_64 (64 bits)
- GNU/Linux on ARM v7l (32 bits)
- GNU/Linux on MIPS (32 bits little and big endian)
- FreeBSD
- OPenBSD
- MacOS X86_64
- Windows 10 (on WSL)
- Android on ARM 64
- Support of new SRFIs (most of them were implemented by @jpellegrini):
- SRFI-37: args-fold: a program argument processor
- SRFI-51: Handling rest list
- SRFI-54: Formatting
- SRFI-64: A Scheme API for test suites
- SRFI-117: Queues based on lists
- SRFI-118: Simple adjustable-size strings
- SRFI-129: Titlecase procedures
- SRFI-141: Integer Division
- SRFI-145: Assumptions
- SRFI-151: Bitwise Operations
- SRFI-156: Syntactic combiners for binary predicates
- SRFI-158: Generators and Accumulators
- SRFI-161: Unifiable Boxes
- SRFI-169: Underscores in numbers
- SRFI-171: Transducers
- SRFI-173: Hooks
- SRFI-174: POSIX Timespecs
- SRFI-175: ASCII character library
- SRFI-176: Version flag
- SRFI-180: JSON
- SRFI-185: Linear adjustable-length strings
- SRFI-189: Maybe and Either: optional container types
- SRFI-190: Coroutines Generators
- Better documentation (thanks to @jpellegrini again! — need to be completed)
- description of the internals of STklos
- description of the VM instructions
- instructions to compile STklos on various OS
- updated manual’s bibliography
- Bug fixes
Version “1.40” released 2020-06-05
Changes in this version are:
- Updated the build tools
- Now STklos is case sensitive by default as required by R7RS the R5RS case insensitivity can be enable with the
--case-insensitive
option - New parameter:
repl-theme
permits to customize REPL prompt colors. - Added more tests
- Added the
#:xxx
syntax for keywords for compatibility with other implementations - Added the R7RS syntaxes letrec, let-values & let-values
- Various bug fixes
Version “1.31” released 2019-07-13
Bug fix version.
Changes in this version are:
- Updated the version of the libraries included in the distribution
- Bug fix of various problems when installing STklos
- Bug fix for MacOs UTF8 detection
- Added SRFI-112
- Updated documentation
Version “1.30” released 2019-07-04
The goal of this version consists to be more R7RS compliant. All the R5RS functions which have been extended in R7RS are now conform to R7RS (for instance assoc
and member
accept now an optional parameter which is a compare function, vector->list accepts the start
and end
parameters, …)
Changes in this version are:
- Implementations R7RS I/O
- Ports can now be binary or textual (standard ports are both)
- New functions:
write-string
wite-shared
&write-simple
- functions to input and output bytevectors
read-u8
peek-u8
andu8-ready?
call-with-port
textual-port?
binary-port?
open-binary-input-file
open-binary-output-file
utf8->string
&string->utf8
- Updated various functions to be R7RS compliant.
- Added the R7RS functions on bytevectors
- Added R7RS
#true
and#false
constants - Added R7RS exceptions
- Added R7RS system functions
- Upgraded the libraries embedded in STklos source tree
- Optimization of circular structure reading & writing
- New primitives -
display-simple
&display-shared
- R7RSsymbol=?
- R7RSboolean=?
- Updated documentation
- Added SRFI-111
- Bug fixes