yes it is based on SRFI-105 as explained in section 7: Features. The project is based on R6RS (R5RS too) and SRFI for compatibility. Linus we had a discussion about bindings month ago and Scheme+ take in account the impossibility in Scheme to have a single operator for defining a variable anywhere . There is no more mutation in Scheme+ than in other code. If you code already use mutation with set! array-set! then Scheme+ encapsulate it with new and easy operator,that's all. Scheme+ is 100% compatible with R6RS and SRFI. I used it to convert a big code (see section 20:Scheme+ in action) and it worked at the first time. let/ec, which i did not knew, is not standardised but i will work on this,thank you for your advice. Scheme+ is really fast because macro are generally one step expanded ,or have recusivity depth of the size of the object (example array dim 3 , we recall three time the macro expansion) and on a compiled Scheme as Guile i'm not sure it is slower.(I could have done better as SRFI arrays which define a macro for each dimension 1,2,3,.... until a fixed number) If someone have counter example with call/cc or threads making fail Scheme+ i will do my best to fix that and improve it. This is only version 1.0.
Damien On Mon, Dec 20, 2021 at 9:16 AM Linus Björnstam <linus.inter...@fastmail.se> wrote: > Hi Damien! > > I played around with it and it seems to rely heavily on mutation, which > makes guile (and chez and racket for that matter) box the values. That adds > a layer of indirection to memory access, meaning slower code (apart from > the more obvious problems of continuation safety and threading safety). It > could be partially fixed with a very much not fun to write syntax case > macro: you expand a body as far as possible into a letrec* (and > letrec-syntax) shadowing bindings when needed and use set! only in places > where bindings are not declared. > > The workhorse you need for that is syntax-local-binding. > > If you want this system to be resilient and work well with other scheme > code that is probably the path to go. One could imagining having a > procedure form that is fully expanded, analyzed and then > some-kind-of-CPS-transformed so that all variables are passed as state. > That way you would get continuation and thread safety, while allowing > something that seems like and, at least locally, behaves like mutation to > take place. > > This (the local mutation part) is tangential to something I have wanted to > write for a long time, but I have not had the time (nor intelligence). If > you want to discuss some ideas or have any question we can take this > off-list. > > Another thing would be to not use call/cc in the def form. Let/ec is a lot > faster. > > -- > Linus Björnstam > > On Mon, 20 Dec 2021, at 01:05, Damien Mattei wrote: > > Hi, > > I finished today the first version of Scheme+. > > Scheme+ is an extension of the syntax of the Scheme language. > > Scheme+ makes it easy the assignment of Scheme objects in infix (works > also > > in prefix) notation with a few new operators ← (or <-), [ ],⥆ (or <+) . > > > > Scheme+ does much more things,see: > > > > https://damien-mattei.github.io/Scheme-PLUS-for-Guile/Scheme+io.html > > > > or: > > > > > https://github.com/damien-mattei/Scheme-PLUS-for-Guile/blob/main/README.md > > > > static light HTML page: > > https://damien-mattei.github.io/Scheme-PLUS-for-Guile/Scheme+.html > > > > direct link to code and README: > > https://github.com/damien-mattei/Scheme-PLUS-for-Guile > > > > Best regards, > > > > Damien Mattei >