emacs.d/clones/lisp/www.cliki.net/The Great Macro Debate.html
2022-10-07 15:47:14 +02:00

57 lines
No EOL
5.4 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>CLiki: The Great Macro Debate</title>
<link rel="alternate" type="application/atom+xml" title="ATOM feed of edits to current article"
href="https://www.cliki.net/site/feed/article.atom?title=The%20Great%20Macro%20Debate">
<link rel="stylesheet" href="static/css/style.css">
<link rel="stylesheet" href="static/css/colorize.css">
</head>
<body>
<span class="hidden">CLiki - The Great Macro Debate</span>
<div id="content"><div id="content-area"><div id="article-title">The Great Macro Debate</div><div id="article">The Great Macro Debate was a panel between <a href="https://www.cliki.net/Jeremy%20Brown" class="new">Jeremy Brown</a> and <a href="https://www.cliki.net/Richard%20Gabriel" class="new">Richard Gabriel</a> (on the side against macros) and <a href="Pascal&#32;Costanza.html" class="internal">Pascal Costanza</a> and <a href="https://www.cliki.net/Guy%20Steele" class="new">Guy Steele</a> (for macros), moderated by <a href="https://www.cliki.net/Dan%20Weinreb" class="new">Dan Weinreb</a>, that took place at the 2009 International Lisp Conference.<p>Thanks to <a href="Paul&#32;Graham.html" class="internal">Paul Graham</a>, we all know that macros can be awesome. However, over-use of macros for defining new syntaxes can quickly lead to unmaintainable code. This was effectively parodied in the "Lisp at Light Speed" blog in 2005: <a href="http://web.archive.org/web/20070706135848/brucio.blogspot.com/2005/03/concision-is-equivalent-to.html">http://web.archive.org/web/20070706135848/brucio.blogspot.com/2005/03/concision-is-equivalent-to.html</a>.<p><b>The debate continues, right here on <a href="CLiki.html" class="internal">CLiki</a>!</b>
<hr><p>Lisp macros are not syntactic extensions! They are a full-fledged metaprogramming facility. Don't use macros to make new, stupider ways of writing for loops, use them to express domain concepts. Here is how I like to think about macros: <a href="http://news.ycombinator.com/item?id=645338">http://news.ycombinator.com/item?id=645338</a>. <a href="Vladimir&#32;Sedach.html" class="internal">Vladimir Sedach</a><p><hr><p>Vlad, I agree whole-heartedly. Lisp stands for LISt Processing, so it amazes me that LOOP is so needlessly confusing. LOOP should not be extended, rather, the collection itself should be extended. Ruby does it perfectly. -- Andrew Pennebaker<p><hr><p>Vladimir,
If you want to criticize macros then provide criticism.
What you're doing here is essentially knee-jerk reactionary propaganda.
Thanks,
The concerned public.<p>I'm planning to write an inflammatory blog post that will name names and point fingers and hopefully have some coherent arguments and insightful criticism. <a href="Vladimir&#32;Sedach.html" class="internal">Vladimir Sedach</a><p>I should probably state what I want to get out of all this:<p>A style guide to writing macros that explains what to do and <i>not</i> to do and why. It's quite obvious from all the "def" macro packages that people new to CL have a serious case of 1. NIH (Not Invented Here) and 2. NKWTWM (Not Knowing Why To Write Macros). <a href="Vladimir&#32;Sedach.html" class="internal">Vladimir Sedach</a><p><hr>
<a href="Document.html" class="category">Document</a></div></div>
<div id="footer" class="buttonbar"><ul><li><a href="The&#32;Great&#32;Macro&#32;Debate.html">Current version</a></li>
<li><a href="https://www.cliki.net/site/history?article=The%20Great%20Macro%20Debate">History</a></li>
<li><a href="https://www.cliki.net/site/backlinks?article=The%20Great%20Macro%20Debate">Backlinks</a></li><li><a href="https://www.cliki.net/site/edit-article?title=The%20Great%20Macro%20Debate&amp;from-revision=3770690878">Edit</a></li><li><a href="https://www.cliki.net/site/edit-article?create=t">Create</a></li></ul></div>
</div>
<div id="header-buttons" class="buttonbar">
<ul>
<li><a href="https://www.cliki.net/">Home</a></li>
<li><a href="https://www.cliki.net/site/recent-changes">Recent Changes</a></li>
<li><a href="CLiki.html">About</a></li>
<li><a href="Text&#32;Formatting.html">Text Formatting</a></li>
<li><a href="https://www.cliki.net/site/tools">Tools</a></li>
</ul>
<div id="search">
<form action="https://www.cliki.net/site/search">
<label for="search_query" class="hidden">Search CLiki</label>
<input type="text" name="query" id="search_query" value="" />
<input type="submit" value="search" />
</form>
</div>
</div>
<div id="pageheader">
<div id="header">
<span id="logo">CLiki</span>
<span id="slogan">the common lisp wiki</span>
<div id="login"><form method="post" action="https://www.cliki.net/site/login">
<label for="login_name" class="hidden">Account name</label>
<input type="text" name="name" id="login_name" class="login_input" />
<label for= "login_password" class="hidden">Password</label>
<input type="password" name="password" id="login_password" class="login_input" />
<input type="submit" name="login" value="login" id="login_submit" /><br />
<div id="register"><a href="https://www.cliki.net/site/register">register</a></div>
<input type="submit" name="reset-pw" value="reset password" id="reset_pw" />
</form>
</div>
</div>
</div>
</body></html>