4 ms·
This has reminded me of "closures are poor man's objects; objects are poor man's closures."
by Koshkin 5y ago
This has reminded me of "closures are poor man's objects; objects are poor man's closures."
- b3morales 5y agoIndeed; a classic hacker koan. For the reader's reference: http://wiki.c2.com/?ClosuresAndObjectsAreEquivalent http://wiki.c2.com/?ClosuresAndObjectsAreEquivalent
- sillysaurusx 5y agoI like how no one voted yes and a bunch of people voted no.
- Jtsummers 5y ago"a bunch" is actually 2. What looks like a second nay vote is actually a rebuttal to the first. It seems most people just skipped the voting and went straight to the discussion.
- yodsanklai 5y agoThis was a "aha" moment for me, realizing objects and closures were the same thing.
- jerf 5y agoI think an even more interesting perspective is that they aren't the same thing, but they can be implemented in terms of each other. "Implemented in terms of each other" is an important metric, and in math that's not an unreasonable definition of "the same thing after all", but in engineering I would say it's not. If nothing else, the different affordances offered by each matter quite a bit in practice. Even in math that's still true, honestly, although in a different way.
- Koshkin 5y agoYou are not incorrect, but in C++ a closure (lambda) is quite literally an object (of an anonymous class).
- codemac 5y agoIt seems anyone that implements objects first, implements closures with them. Anyone that implements closures first, implements objects with them. Let over Lambda being the super fun book of implementing anything with closures.
- gpderetta 5y agovery pedantically anything that occupies memory and has an an address is an object in C and C++. If you mean in the OO way, I wouldn't call a lambda an object as it doesn't even do dynamic dispatch.
- OskarS 5y ago> I think an even more interesting perspective is that they aren't the same thing, but they can be implemented in terms of each other. I don’t know, I think that it’s perfectly reasonable even from an engineering/computer science perspective to say that they are literally the same thing, just viewed from two different perspectives. After all, what is an object? It’s some code, with bundled data. What is a closure? It’s some code… with some bundled data. I think it’s fair to say that this is a “is it a vase or two faces?” situation. You’re looking at the same image, just seeing it from different perspectives.
- sullyj3 5y agoOne key difference is that usually the captured values in a closure can't be mutated.
- pritambaral 5y agoI don't know where you're getting that from. In lambda calculus — where closures were first developed — there's no restrictions against mutation of captured variables or values.
- ncmncm 5y agoExcept, they aren't the same thing at all. A closure could be an object, or not. An object could be a closure, or not. The "aha" should be that it doesn't matter what you call it, what matters is what you can do with it.