[racket] Best Way to Really Understand the Compilation and Execution Model?
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 <stamourv at 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 <noelwelsh at 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 <nicksivo at 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