guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Scheme+


From: Damien Mattei
Subject: Re: Scheme+
Date: Mon, 20 Dec 2021 10:20:41 +0100

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.internet@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
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]