None of the Arc code I'm currently concerned with currently requires this property. Everything except phase 0 is idempotent.
-Nick On Mon, Aug 5, 2013 at 10:26 AM, Eric Dobson <eric.n.dob...@gmail.com> wrote: > I don't think expanding into a define and a define-for-syntax will > work. If I understand Nick correctly then Arc doesn't have phases and > state should be shared across the uses in macros and uses in the > program. I.e. > > (define cdr/only-once > (let ((state #f)) > (lambda (list) > (if state > list > (begin > (set! state #t) > (cdr list)))))) > > Should only ever take the cdr once even across expansion/runtime. > > > On Mon, Aug 5, 2013 at 10:12 AM, Vincent St-Amour <stamo...@ccs.neu.edu> > wrote: >> For that, you could have Arc's `define' expand into both a Racket >> `define' and a `define-for-syntax', which I believe is what Jens was >> suggesting. You may want to do something similar for `require', too. >> >> Vincent >> >> >> >> At Mon, 5 Aug 2013 10:06:36 -0700, >> Nick Sivo wrote: >>> >>> I'm aware of defmacro and even understand its implementation (cute >>> trick!), but I need to eventually get something like this to work: >>> >>> (require compatibility/defmacro) >>> >>> (define (my-cdr lst) >>> (cdr lst)) >>> >>> (defmacro drop-first-form args >>> `(begin ,@(my-cdr args))) >>> >>> (drop-first-form >>> (displayln 1) >>> (displayln 2)) >>> >>> Where the above just works and displays 2. >>> >>> I'll check out the latest research papers too. >>> >>> Thanks, >>> Nick >>> >>> On Mon, Aug 5, 2013 at 1:40 AM, Noel Welsh <noelwe...@gmail.com> wrote: >>> > Does defmacro do what you want? >>> > >>> > http://docs.racket-lang.org/compatibility/defmacro.html?q=defmacro#%28form._%28%28lib._compatibility%2Fdefmacro..rkt%29._defmacro%29%29 >>> > >>> > In terms of grokking the macro system you probably want to read some of >>> > the >>> > research papers, which you can find from links here: >>> > >>> > http://racket-lang.org/people.html >>> > >>> > Racket's macro system is really cutting edge, so it doesn't have a large >>> > body of text explaining it. >>> > >>> > HTH, >>> > N. >>> > >>> > >>> > >>> > On Sun, Aug 4, 2013 at 9:50 PM, Nick Sivo <nicks...@gmail.com> wrote: >>> >> >>> >> Hello everyone, >>> >> >>> >> I work on Hacker News[1], which is written in Arc[2], and am tasked >>> >> with making it faster. The Arc compiler targets Racket[3], but >>> >> doesn't do so in such a way that function names or source locations >>> >> are preserved. This makes output from the sampling profiler and error >>> >> messages mostly useless. >>> >> >>> >> I'd like to make Arc work as a Racket language (and in the process >>> >> preserve srclocs and names), and have made some progress[4]. However, >>> >> I'm hitting a wall trying to implement Arc's macros. Specifically, I >>> >> need to find a way for the macros themselves to use previously defined >>> >> Arc functions as part of their processing. I understand that there are >>> >> good reasons for Racket's hygiene and syntax phases, but I'm >>> >> implementing an existing language that has its own strong opinions. >>> >> I'm almost certain that accomplishing my goal is possible with the >>> >> right understanding, but despite reading much of the Racket Reference, >>> >> I don't truly get it yet. >>> >> >>> >> With that motivation in mind, what's the best way for me to become >>> >> intimately familiar with Racket's runtime, execution and compilation >>> >> model? Should I read through and make sure I understand the debugger? >>> >> The macro stepper? Is there any kind of guide to Racket Internals? >>> >> >>> >> Thanks for any advice. >>> >> >>> >> Best, >>> >> Nick >>> >> >>> >> [1] https://news.ycombinator.com >>> >> [2] http://arclanguage.org >>> >> [3] Well, really mzscheme >>> >> [4] https://github.com/kogir/rark >>> >> ____________________ >>> >> Racket Users list: >>> >> http://lists.racket-lang.org/users >>> > >>> > >>> ____________________ >>> Racket Users list: >>> http://lists.racket-lang.org/users >> ____________________ >> Racket Users list: >> http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users