<div dir="ltr"><div><div><div><div>Rüdiger,<br><br></div>I used to think as you do (for the same reasons and with the same history you describe), but then I understood that the macro system is still an area under research. I think PLT and all other Scheme researchers are all willing to have the simplest and most beautiful definition of a hygienic macro system (or whatever comes next), but currently Racket&#39;s is the best we have (although I know little about other macro systems, so certainly some people would disagree).<br>

<br></div>Regarding the whole rest of Racket features, bells and whistles, you can still do without them if you want, but you&#39;ll end up redefining them all at some point. The programmers behind Racket are doing their best to produce practical yet powerful tools, but hey, they&#39;re only human. If you find a better way to do something they did, just make it a PLaneT package, or fork the git repository, and discuss the benefits on the mailing list. I&#39;m pretty sure they&#39;re all willing to make Racket better and simpler.<br>

<br></div>However, I also agree that Racket is quite complex if you want to know it all. And collapsing some parts of it into simpler structures might be difficult because of the required backward compatibility. I wish sometimes programmers could be able to care less about that.<br>

<br></div>Just my own point of view,<br>Laurent<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Jan 18, 2013 at 9:22 PM, Rüdiger Asche <span dir="ltr">&lt;<a href="mailto:rac@ruediger-asche.de" target="_blank">rac@ruediger-asche.de</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Tim, I wholeheartedly agree. Scheme used to be plainly beautiful. Understand lambda expressions, recursion and continuations, and everything else more or less falls into place.<br>


<br>
The Scheme part of Racket still is as cool, but the rest is a moloch. Just syntactically understanding a Racket application requires deep digging into the guts; when I first picked up Racket after a long absence of Scheme, I just couldn&#39;t make heads or tails of all the #s, :s, ,s and and %s spread all over the place (and I still need to look those up frequently when I don&#39;t deal with something for a week or more). The macro system is even worse for the reasons you describe. Nothing simple, beautiful or orthogonal anymore. What a shame. Then take modules, phases and all the other bells and whistles (some of which are actually useful, but most appear to be of interest more to theoreticians than people involved in solving real problems) and you end up with something that takes much more time to get the tools to work right before you even get something relatively straightforward accomplished with them.<br>


<br>
It used to be the case that you could reduce a Scheme system to a very few primitives and build the rest around it using syntactic extensions. That may still be true in Racket, but dealing with the syntactic extensions themselves requires learning a complete new and several times more complexe language. Bummer. I just don&#39;t see how one would attract newcomers to Racket when all the beauty is so obfuscated.<div class="im">

<br>
<br>
----- Original Message ----- From: &quot;Tim Brown&quot; &lt;<a href="mailto:tim.brown@cityc.co.uk" target="_blank">tim.brown@cityc.co.uk</a>&gt;<br></div>
To: &quot;Matthias Felleisen&quot; &lt;<a href="mailto:matthias@ccs.neu.edu" target="_blank">matthias@ccs.neu.edu</a>&gt;<br>
Cc: &quot;Racket Users&quot; &lt;<a href="mailto:users@racket-lang.org" target="_blank">users@racket-lang.org</a>&gt;<br>
Sent: Friday, January 18, 2013 6:36 PM<br>
Subject: Re: [racket] variables within macros<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 18/01/13 15:54, Matthias Felleisen wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Is there a single stumbling block or do you feel overwhelmed by<br>
the broad API to the syntax system? -- Matthias<br>
</blockquote>
<br>
It&#39;s a combination of the two...<br>
<br>
My single stumbling block is &quot;binding&quot; identifiers -- I&#39;m never sure if<br>
I&#39;m going to end up with an identifier referencing the same value/entity/<br>
thing. This is because I&#39;m not so used to passing the lexical context<br>
around as the macro API (probably) demands.<br>
<br>
So, in order to get my bindings right, I want to be sure I&#39;m using<br>
the right syntax-... calls. And this is where the breadth of the API<br>
starts to overwhelm me.<br>
<br>
There is also the fact that I&#39;m &quot;feeling around&quot; the rest of the racket API<br>
to understand the runtime-work that I want my macros to help me with.<br>
Trouble is, the more I look into it &quot;runtime&quot; seems to be less like<br>
&quot;execute a function&quot; and more like &quot;run another macro&quot;!<br>
<br>
<br>
<br>
A concrete example is that I am trying to write a #lang language. Which, I<br>
believe (from syntax_module-reader.html) requires me to:<br>
(provide (except-out (all-from-out racket) #%module-begin)<br>
         (rename-out [module-begin #%module-begin]))<br>
<br>
I also want to (provide define/tested) which defines functions (with<br>
racket&#39;s define), but also adds a unit test to the function... ala<br>
(check-= (add2 2) 4 0 &quot;something descriptive&quot;) Racket/raco provides the<br>
facility to put that into a &quot;test&quot; module for unit testing.<br>
<br>
But I find that because I&#39;m tinkering with #%module-begin, simply adding<br>
a (module+ test (check-= ...)) clause causes problems.<br>
<br>
I *think* I&#39;m doing something relatively simple; but there are enough<br>
gotchas here to keep me going round in circles.<br>
<br>
What I have just described is in:<br>
  <a href="https://github.com/tim-brown/plt-games-racket-tested" target="_blank">https://github.com/tim-brown/<u></u>plt-games-racket-tested</a><br>
<br>
the &quot;minimal-...&quot; code(*), when run leaves me with the error:<br>
&quot;check-=: unbound identifier in module in: check-=&quot;<br>
<br>
To my mind there is nothing wrong! There is either something stupid that<br>
I&#39;m missing, or there is something that requires &quot;knowledge of how all of<br>
racket works together&quot; (as described above).<br>
<br>
This is a bit of a big bite to have taken out of the macro system, but I<br>
have to start non-triviality somewhere. Equally, though extending the<br>
language is something that Racket encourages; and as far as I can tell,<br>
this is (or should be) a trivial extension.<br>
<br>
Thank you for listening :-)<br>
<br>
Tim<br>
<br>
* the rest of the code shows evidence of me banging my head against various<br>
  walls, may be instructive as to what extremes I have gone two, and may<br>
  also provide amusement; but the minimal-... code is fundamentally where<br>
  I&#39;m coming stuck.<br>
<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Jan 18, 2013, at 6:38 AM, Tim Brown wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 17/01/13 21:33, Greg Hendershott wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


Greg Hendershott&#39;s pages may be of interest to you:<br>
<a href="http://www.greghendershott.com/fear-of-macros/" target="_blank">http://www.greghendershott.<u></u>com/fear-of-macros/</a><br>
</blockquote></blockquote></blockquote>
<br>
Which is as close as I have come to &quot;How to Design Macros&quot; so far.<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I read that earlier, and it gave me the confidence to get stuck in...<br>
maybe I read it again to give me the insight to know what I&#39;m doing.<br>
</blockquote>
<br>
Well it might help prepare you to understand something like Danny&#39;s<br>
solution. But unfortunately it doesn&#39;t specifically explain local<br>
expansion. That was only at the fuzzy edge of my own understanding.<br>
Still is: When I read something like Jens&#39; code, my brain still hears<br>
&quot;blah blah blah Ginger&quot;.<br>
&lt;<a href="https://www.google.com/search?q=blah+blah+blah+ginger&amp;tbm=isch" target="_blank">https://www.google.com/<u></u>search?q=blah+blah+blah+<u></u>ginger&amp;tbm=isch</a>&gt;<br>
</blockquote>
<br>
Do you _know_ how good it makes me feel that someone else &quot;blah blah blah<br>
Ginger&quot;s with macros?<br>
<br>
Went through fear-of-macros AGAIN last night. I think I can cope with that!<br>
It all sounds *so reasonable*... but everything anyone writes about macros<br>
sounds *so reasonable*. Until I put the page down!<br>
<br>
I feel like one of those Zen disciples who just doesn&#39;t get it.<br>
But quite often they do. After a while. So I&#39;m keeping up hope.<br>
<br>
Tim<br>
<br>
--<br>
Tim Brown &lt;<a href="mailto:tim.brown@cityc.co.uk" target="_blank">tim.brown@cityc.co.uk</a>&gt;  | City Computing Limited            |<br>
T: <a href="tel:%2B44%2020%208770%202110" value="+442087702110" target="_blank">+44 20 8770 2110</a>                | City House, Sutton Park Road      |<br>
F: <a href="tel:%2B44%2020%208770%202130" value="+442087702130" target="_blank">+44 20 8770 2130</a>                | Sutton, Surrey, SM1 2AE, GB       |<br>
------------------------------<u></u>------------------------------<u></u>-----------|<br>
BEAUTY:  What&#39;s in your eye when you have a bee in your hand           |<br>
------------------------------<u></u>------------------------------<u></u>-----------&#39;<br>
City Computing Limited registered in London No. 1767817.<br>
Registered Office: City House, Sutton Park Road, Sutton, Surrey, SM1 2AE<br>
VAT number 372 8290 34.<br>
____________________<br>
Racket Users list:<br>
<a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/<u></u>users</a><br>
</blockquote>
<br>
</blockquote>
<br>
<br>
-- <br>
Tim Brown &lt;<a href="mailto:tim.brown@cityc.co.uk" target="_blank">tim.brown@cityc.co.uk</a>&gt;  | City Computing Limited            |<br>
T: <a href="tel:%2B44%2020%208770%202110" value="+442087702110" target="_blank">+44 20 8770 2110</a>                | City House, Sutton Park Road      |<br>
F: <a href="tel:%2B44%2020%208770%202130" value="+442087702130" target="_blank">+44 20 8770 2130</a>                | Sutton, Surrey, SM1 2AE, GB       |<br>
------------------------------<u></u>------------------------------<u></u>-----------|<br>
BEAUTY:  What&#39;s in your eye when you have a bee in your hand           |<br>
------------------------------<u></u>------------------------------<u></u>-----------&#39;<br>
City Computing Limited registered in London No. 1767817.<br>
Registered Office: City House, Sutton Park Road, Sutton, Surrey, SM1 2AE<br>
VAT number 372 8290 34.<br>
____________________<br>
 Racket Users list:<br>
 <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/<u></u>users</a> <br>
</blockquote>
<br>
____________________<br>
 Racket Users list:<br>
 <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/<u></u>users</a><br>
</div></div></blockquote></div><br></div>