Acknowledgments |
Introduction |
Why Clojure? |
Why Macros? |
Metaprogramming in Non-Lisps |
Who Is This Book For? |
What’s in This Book? |
How to Read This Book |
Online Resources |
1. | Build a Solid Foundation |
Code Is Data |
Transforming Code |
Evaluating Your First Macro |
Macroexpansion |
2. | Advance Your Macro Techniques |
Syntax-Quoting and Unquoting |
Approaching Hygiene with the Gensym |
Secret Macro Voodoo |
3. | Use Your Powers Wisely |
Macros Aren’t Values |
Macros Can Be Contagious |
Macros Can Be Tricky to Get Right |
4. | Evaluate Code in Context |
Dynamic Bindings |
Evaluating (or Not) in Time and Place |
Rescuing Errors |
Cleaning Up Resources |
5. | Speed Up Your Systems |
Benchmarking Your Code |
Hiding Performance Optimizations |
Moving Execution to Compile Time |
6. | Build APIs That Say Just What They Mean |
Compojure |
Clojure Koans |
Decoupling Macros from Functions |
7. | Bend Control Flow to Your Will |
Loops and Loops and Loops and… |
Turning Expressions Inside Out with Threading Macros |
Delimited Continuations |
8. | Implement New Language Features |
Implementing Pattern Matching |
Error Handling in Macros |
Code-Walking Macros |
Macros Are [Not] Magic |
Bibliography |
18.116.80.45