Hi Maxim,

Factor is flexible enough  that you can implement your proposal and  
play around with it.

It should be possible to make it efficient too; locals don't have any  
support from the compiler either.

Also note that Factor's locals library supports mutable locals too  
(suffix the name with !, and use foo! to write; see the docs for  
details).

Slava

On Apr 7, 2008, at 1:41 AM, Maxim Savtchenko wrote:

> I have mixed feelings about extra/locals library. It is good to have
> local named storage, but current design of extra/locals looks very
> "lispish" (FP-style immutable variables). I think, there is a way to
> make it closer to Factor stack-shuffling paradigm. So I have a
> suggestion. What if we can use not local variables, but local
> additional retain stacks, just like ">r" and "r>"? Let me show you
> this concept on example from recent Slava's blog-post:
>
> :: julian-day-number>date ( n -- year month day )
>    #! Inverse of julian-day-number
>    [let* | a [ n 32044 + ]
>            b [ 4 a * 3 + 146097 /i ]
>            c [ a 146097 b * 4 /i - ]
>            d [ 4 c * 3 + 1461 /i ]
>            e [ c 1461 d * 4 /i - ]
>            m [ 5 e * 2 + 153 /i ] |
>        100 b * d + 4800 -
>        m 10 /i + m 3 +
>        12 m 10 /i * -
>        e 153 m * 2 + 5 /i - 1+
>    ] ;
>
> This is how it looks with lisp-style locals. And here is my  
> suggestion:
>
> : julian-day-number>date ( n -- year month day )
>    #! Inverse of julian-day-number
>    [rest n a b c d e f | >n
>        n 32044 + >a
>        4 a * 3 + 146097 /i >b
>        a 146097 b * 4 /i - >c
>        4 c * 3 + 1461 /i >d
>        c 1461 d * 4 /i - >e
>        5 e * 2 + 153 /i >m
>        100 b * d + 4800 -
>        m 10 /i + m 3 +
>        12 m 10 /i * -
>        e 153 m * 2 + 5 /i - 1+
>    ] ;
>
> "[rest" - is fo REtain STacks. It creates additional local stacks with
> accessors to them. Each stack ("x" for example) have three accessors.
> Traditional ">x" and "x>" with semantics of ">r" and "r>". And
> abbreviation "x" with semantics of "x> dup >x". At the end of "[rest
> ... ]" block remaining values on additional stacks are simply
> dismissed. Looks good for me.
>
> This raises major question. Is it possible to compile efficient code
> with more than one retain stack?
>
> Maxim Savchenko.
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
> Register now and save $200. Hurry, offer ends at 11:59 p.m.,
> Monday, April 7! Use priority code J8TLD2.
> http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
> _______________________________________________
> Factor-talk mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/factor-talk


-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Register now and save $200. Hurry, offer ends at 11:59 p.m., 
Monday, April 7! Use priority code J8TLD2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Factor-talk mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to