Skip to content
This repository has been archived by the owner. It is now read-only.
A Scheme embedded in Rust, like Lua in C.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
libruse-eval
libruse-print
libruse-read
libruse
ruse
.gitignore
CODE_OF_CONDUCT.md
CONTRIBUTING.md
COPYRIGHT.md
LICENSE-APACHE.md
LICENSE-MIT.md
README.md

README.md

Ruse

This is an experimental project to create an R7RS small-specification-compliant Scheme as an embedded language in Rust, similar to the relationship between Lua and C.

Specification

The goal is for Ruse to be compliant with the R7RS small specification, along with whatever additional features are deemed necessary or desirable.

The specification may be found here: http://www.scheme-reports.org/

The 7th edition of the Scheme standard was chosen for several reasons. First, that it is the most recent edition of the standard. Second, that it retains the smallness and simplicity of R5RS, which many felt was lost in the language's 6th version. Finally, the most recent Scheme report is the easiest to find.

It is likely that additional features will be implemented that are not described in the R7RS small specification. This is fine, and should be no cause for concern so long as the specified semantics are maintained.

Project Goals

The main goal of Ruse is to be a learning project and learning experience for those who make and use it. It may be that it becomes a more serious effort at some point in the future, but for now it is little more than a hobbyist's project. It allows the contributors to experiment and stretch themselves a bit with implementing a programming language, without the pressure of concern that anyone will actually use it. That said, if you do use it, let us know how it goes.

Contributing

See the CONTRIBUTING.md file.

Structure

Ruse is structured currently into 5 separate Rust crates.

  • ruse is the Ruse interpreter, and is a binary.
  • libruse is the library interface to Ruse. The CLI just uses libruse.
  • libruse-read is the reading portion of the interpreter.
  • libruse-eval is the evaluation portion of the interpreter.
  • libruse-print is the printing portion of the interpreter.
You can’t perform that action at this time.