The New Kingdom of Nouns

Last time I talked about how algebraic abstractions like “monoid” and “semigroup” didn’t seem to be pulling their weight, despite love from functional programmers. That focused on a practical issue: do these abstractions aid or harm comprehension? Do they make programming easier or harder? (Of course, there’s not a simple answer to this question.)

This time, though, I want to talk about something more exploratory: do we have the right tools to talk about these abstractions? This post is therefore going to be much longer and contain a lot more rambling.

Over-abstraction

Back in July I got myself into a discussion on Twitter about whether some of the more algebraic concepts in functional programming were net-useful, after reading Brandon Williams’ (great) articles on how they can be applied in Swift. Brandon Kase suggested I watch his talk “Beyond Types in Swift” from this year’s Functional Swift conference.

Macromancy, Part 2

The Challenge

Given a macro that expands to an arbitrary list of headers, include every header in the list, in order.

#define HEADERS "stdio.h", "stdlib.h", "assert.h"
#include "include_dynamic.h"
// stdio.h, stdlib.h, and assert.h are now included and available.

Progress So Far

The C preprocessor is a powerful tool, but not a particularly versatile one. Rather, it does a few specific things, and people have taken advantage of its workings to compose those capabilities to accomplish their tasks. And sometimes, to do something ridiculous and overengineered…like this.

Older Posts

  1. 2016-08-07 Macromancy
  2. 2016-06-19 Pronoun Buttons
  3. 2016-05-29 Webmailer's Update Bar
  4. 2016-05-23 So You Want to Be a (Compiler) Wizard
  5. 2015-12-29 Re: Contempt Culture
  6. 2015-11-18 Recommendations
  7. 2015-05-09 Nibblesort: Adventures in Optimization
  8. 2015-02-22 AlterConf SF/Oakland
  9. 2015-01-24 “Skip the FFI”
  10. 2012-12-08 How to Write a Checker in 24 Hours
  11. 2012-10-02 Git Tricks
  12. 2012-05-16 Big News
  13. 2012-04-26 Keyboard Adventures
  14. 2012-04-10 Mail Aliases
  15. 2011-08-14 Header Anchors: A Safari Extension
  16. 2011-08-10 "Little Big Details"
  17. 2011-07-29 Weak Linking
  18. 2011-07-25 Using Clang from SVN in Xcode
  19. 2011-07-22 rm vs. Time Machine
  20. 2011-07-14 Priorities
  21. 2011-06-30 Quick Look in TextMate
  22. 2011-06-27 git add
  23. 2011-06-20 Automatic Reference Counting
  24. 2011-06-16 Dealing with "Sandwich Code"
  25. 2011-06-05 gdba
  26. 2011-06-03 Chrome vs. Safari
  27. 2011-05-31 User-Side Troubleshooting
  28. 2011-05-30 Auspicious Continuation
  29. 2009-07-22 Scripting Bridge
  30. 2009-07-08 What Happened to Dockyard?
  31. 2009-06-26 Garbage Collectors and Stack Drawers
  32. 2009-06-21 Z shell
  33. 2009-05-22 “Several New Features”
  34. 2009-05-06 C++ Templates are Turing-Complete
  35. 2009-04-21 [Meme] How Many HTML Elements Can You Name in 5 Minutes?
  36. 2009-04-16 Safer Plugin Categories
  37. 2009-04-02 Hacking Safari 4...for Great Convenience
  38. 2009-03-27 Const Correctness
  39. 2009-03-19 Categories and +load
  40. 2009-03-15 Subversion Checksum Problems
  41. 2009-03-06 JavaScript Tetris
  42. 2008-09-04 Objective-J and Objective-C
  43. 2008-08-28 HTTPS and Name-based Virtual Hosting
  44. 2008-03-08 Alerts Without Apps (or nibs)
  45. 2008-01-14 NSNumber, CFNumber, and CFBoolean
  46. 2007-12-13 GenericToolbar and IB3
  47. 2007-10-27 Performance Optimization: Why We Can't Use valueForKeyPath:
  48. 2007-09-01 Short Xcode Tip: Plugins
  49. 2007-07-15 Port 25 Blocked?
  50. 2007-06-27 GenericToolbar Icon
  51. 2007-04-14 The Symbolism of Pretty URLS
  52. 2007-03-07 Flexible PHP
  53. 2007-01-12 Inauspicious Beginnings