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.70” released 2021-11-25
This version further improves compliance with R7RS and brings some new SRFIs
The main changes in this version are:
- Added the some comma-commands to the REPL (,pwd ,cd and ,shell)
- Use system Posix glob instead of the provided gnu-glob
- Improved reader (
|.|
is wow valid symbol as well as numbers with bars) - New primitive/syntaxes
tagbody
repeat
keyword-colon-position
is a parameter object specifying the places where the colon can be used in keyword.
- Suppressed the calls to insecure C function (such as
strcpy
orstrcat
) - List reading is tail recursive now
- Added an extension directory, which contains for now:
- GTKlos which gives access to the GTK+ toolkit using the OO layer available in STklos. This version uses the GTK+3 toolkit. It also defines a canvas widget. if the to have the goocanvas library is installed.
- an extension which permits to make a file system in Scheme, using FUSE (Filesystem in Userspace).
- Use gmp-mini (which is provided) if gmp is not available, instead of our version which was based on old unmaintained version of mpi.
- Support of new SRFIs:
- SRFI-25: Multi-dimensional Arrays
- SRFI-27: Source of random bits
- SRFI-29: Localization
- SRFI-94: Type-Restricted Numerical Functions
- SRFI-132: Sort Libraries
- SRFI-133: Vector Library (R7RS-compatible)
- SRFI-143: Fixnums
- SRFI-144: Flonums
- SRFI-170: POSIX API
- SRFI-208: NaN procedures
- SRFI-214: Flexvectors
- SRFI-217: Integer Sets
- SRFI-219: Define higher-order lambda
- SRFI-223: Generalized binary search procedures
- SRFI can be implemented in C and Scheme
- Various optimizations
- Documentation update
- Added tests
- Bug fixes
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