HN Hall of Fame Weekly email

“A closure is a poor man’s object; an object is a poor man’s closure” (2003)

people.csail.mit.edu Essays & writing Forum discussions Software engineering Class of 2017-05 Hall of Fame
Screenshot of people.csail.mit.edu captured 2026-07-20
Page preview · captured 2026-07-20

Resurfaced independently across 6 calendar years, with breakout response in 2 of them.

submissions
7
submitters
7
observed span
2007–2022
peak thread · 227 comments
289 pts
latest 20+ return · 2017-05-01
289 pts

Submission timeline

2007–2026

One slot for every year since HN launched. Height is that year's peak points; orange marks a 100+ point or 50+ comment breakout. Select a bar to open its strongest thread.

First comments on top threads

HN comment order

My definition of an object is "an ADT that gets to 'decide', using private runtime state, what to do in response to any/all attempts to interact with it." Which makes for a very simple test: if something is an object, you should be able to send it a message that makes it change its mind about what messages it accepts after that. There's no obvious way to implement a behavior like this using the native "objects" in nominally-object-oriented languages like…

derefr·289-point thread·

One problem I've noticed with a very closure-heavy style is that debugging is a pain — you have a closure with a bunch of local state and no way to print or otherwise access it (from the repl, say). So then you end up writing special cases of the function for when the first argument is :debug... any better ways to do this?

basman·132-point thread·

This post had inspired me to write CljOS[1], an Object System in Clojure mainly because I wanted to write a game engine and had freshly arrived from the Java world. It turned out to be extremely straightforward to map objects to closures. Took <100 lines of documented code! obj.method(& args) => (obj :method & args) I even have a basic 2d sprite-based game engine here[2] (on top of Swing!). [1] https://github.com/divs1210/cljos [2] https://github.com/divs1210/bakait

I invoke the ko rule... Situational Cycle: a move sequence that starts and ends at the same position such that at the end of that cycle it is the same player's turn as it was at the start. If cycles are allowed without restrictions on them, it is possible for a game to go on indefinitely. [1] The 'ko' situation is the most common cycle that occurs in the game of go. Ko: a situation where two alternating single stone…

The first top-level comment from each of the four biggest threads, in HN’s own order. Excerpts are shortened; open a comment for full context.

Breakout years
2

100+ points or 50+ comments

Total points
600

reference only — not used in Hall rules or ranking

Total comments
309

reference only — not used in Hall rules or ranking

Every submission

DateTitle as submittedByPointsComments
2007-10-14What's so cool about Scheme?nickb60
2010-04-05Objects are a poor man's closures (2003)First breakoutj_baker13238
2010-12-08Objects vs closuresprog7417
2011-04-25"A closure is an object that supports exactly one method: apply"fogus10
2015-08-03RE: What's so cool about Scheme? (2003)dorsatum8627
2017-05-01“A closure is a poor man’s object; an object is a poor man’s closure” (2003)Hall induction · Best thread · Latest 20+ point returnnoblethrasher289227
2022-03-06What's so cool about Scheme?graderjs120