Hacker News new | past | comments | ask | show | jobs | submit login

My own take on it, in a nutshell, is that while Lisp-1 has a certain elegance which is attractive, it makes the macro hygiene problem much worse (sections 6 and 13). I've seen it claimed that there's never been a really good solution for this in Scheme, though I've never written much Scheme and haven't attempted to evaluate this claim personally. In any case, I'm very much accustomed to how one does things in Common Lisp and don't mind either its Lisp-2 namespace-crossing operators ('function' and 'funcall', section 5) or its "low-level" macros.

I also tend to think that far more electrons have been spilled over this issue than it deserves. It's an engineering decision with tradeoffs either way; there's no god-ordained right answer. I'm sure that if I were trying to decide whether to write a large system in Scheme, its being a Lisp-1 would be the least of my concerns.




Hygiene is still needed in CL, but is accomplished in different ways that are not so explicit. Packages and namespaces end up doing most of the heavy lift, so CL's macro system, while it looks more raw than Scheme's, is still pretty robust. And many of us just find it simpler because it involves a lot less mechanism. (Odd that in that isolated realm of macro processing, the Scheme system is complicated and CL is not. You never get anything for free--you just trade one thing for another. Laws of thermodynamics and all that. They're hard to escape.)


I did find that most all of my questions were directly addressed in the paper on a slow read. I should have picked up on them in a fast read.

Your second paragraph seems to hit it on the head, though. Since most of my exposure was to scheme and racket, I have not looked deeply at Lisp2s. However, having switched to emacs and written some elisp, I have yet to really be annoyed by the fact that it is a Lisp2.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: