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.60” released 2021-02-15
As the previous version, R7RS compliance is enhanced and a bunch of new SRFIS has been implemented (thanks again to Jeronimo Pellegrini — @jpellegrini).
Changes in this version are:
- Added option -I and -A to prepend and append to the loadpath
- New primitives/syntaxes
require-feature
define-values
- Added makefile targets to install only subparts of STklos on constrained environments
- Reader accepts now
#i
for rationals - Changed the version of LALR-SCM to version 2.5.0
- Added scripts and documentation in the
exemples
directory - Definition of a new framework for implementing SRFIs
- Documentation of SRFI is now automatically built
- SRFI tests are automatically done with
make tests
- Automatic update of the SUPPORTED-SRFIS file
- Support of new SRFIs
- SRFI-5: A compatible let form with signatures and rest arguments
- SRFI-41: Streams
- SRFI-61: A more general COND clause
- SRFI-113: Sets and Bags
- SRFI-127: Lazy Sequences
- SRFI-128: Comparators (reduced)
- SRFI-130: Cursor-based string library
- SRFI-134: Immutable Deques
- SRFI-135: Immutable Texts
- SRFI-137: Minimal Unique Types
- SRFI-192: Port Positioning
- SRFI-193: Command line
- SRFI-195: Multiple-value boxes
- SRFI-196: Range Objects
- SRFI-207: String-notated bytevectors
- SRFI-216: SICP Prerequisites (Portable)
- Documentations update
- Added tests
- Bug fixes
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