As of 2016, is there a Scheme implementation which supports 100% of R7RS (small) with no deviations?
Asked Answered
U

2

27

I am willing to learn Scheme. I want to stick to R7RS since it's the last standard. However, it seems that there is a lot of fragmentation on the Scheme current implementations, and most of them staying at R5RS or part of R6RS.

The only one I have found supports part of R7RS is Kawa, but as it runs on JVM, it doesn't support tail call optimization, and that is a strong point against that implementation.

Is the Scheme world really that fragmented that there is not even an R7RS full implementation yet? I am asking, because if there is not, as soon as I catch up, I am planning on building one; but, if there exists one, it would be better not to reinvent the wheel and contribute to that certain implementation.

Please, if you have information, I would appreciate not only answering with names, but also with proper further information (official website of the implementation or even a extract from a mailing group would be useful as a reference).

And by the way, I am not considering Racket, as it's not really Scheme anymore.

Unready answered 3/2, 2016 at 0:15 Comment(4)
This is a well phrased, specific, well-written, and answerable question. However: "Questions asking us to recommend or find a book, tool, software library, tutorial or other off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam." Answers to this question will become outdated with time (even though you added "As of 2016" to the question) and stale. It's not a good fit for "canonical" knowledge.Chantal
In what way is Racket not scheme anymore? Serious question.Haiduk
@Flux First, English is a language with a wider adoption than Japanese. Second, that question was made during 2015, I limited mine to 2016.Unready
@Haiduk sorry for the delay. Scheme is a language that inspired Racket but it later evolved to its own programming language which, although gets inspiration from Lisps such as Scheme, no longer can be considered even a dialect of it. Racket nowadays is a language so rich and huge you can use subsets/collections of the language in a way to comply with different programming languages standards. For example, you can use sicp and sicp-pict to comply with the MIT Scheme used in the book Structure and Interpretation of Computer Programs.Unready
T
27

The Chairman of R7RS Small Language ("Working Group 1") committee, Alex Shinn, created Chibi Scheme as the standard evolved. I believe it is fully compliant. It is a bytecode compiler.

Larceny has a mostly (totally?) compliant R7RS mode, and compiles to machine code.

I have been playing with Picrin which aims for R7RS compliance, and is very very close. It is a bytecode compiler.

A list of implementations that are aiming for R7RS compliance at the committee's wiki include:

  • Chibi
  • Chicken (partial)
  • Foment
  • Gauche
  • Guile (partial)
  • Husk
  • Kawa
  • Larceny
  • Mosh (partial)
  • Picrin
  • Sagittarius
Tropic answered 3/2, 2016 at 0:51 Comment(5)
I found some of the ones from the above list, but there are many which have not been updated since 2015 (like Foment) or Gauche (2014). However, Chibi seems to really be 100% compliant. I will take a look and based on that, pick your answer.Unready
Indeed, Chibi Scheme is fully compliant with the R7RS standard. Also it has several SRFI's implemented, which makes it the best option now, and I hope for a long time.Unready
Gauche is actively developed and already R7RS compliant except a few minor cases. Just the author (me) is too lazy to make releases.Bordelaise
Indeed, Larceny claims to support R7RS. Two warnings, though: it currently only supports 32bit programming (it runs on 64bit operating systems and architectures but in 32bit mode), and it is a JIT not an AOT compiler. (Currently, the only Scheme compiler producing (excellent) executables is Chez, which unfortunately is still stuck on R6RS. If it ever moves to R7RS it will probably render irrelevant all the other implementations.)Grief
In fact Larceny is an AOT compiler, even though it does not produce stand-alone executables.Binaural
T
8

Although the question explicitly excludes Racket from consideration as not being Scheme I will point to Racket package "R7RS" which implements R7Rs small.

There are some small incompatibilities documented on project's page.

Treillage answered 5/9, 2016 at 15:24 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.