30 ms·
Clever Functional Design
- skybrian 7y agoNice. Although it's not mentioned, it seems like the insight here is partially about the lingering effects on the API of one model of persistence? A log is normally considered a stream that's too large to keep in memory and needs to be incrementally persisted to disk on the fly, in timestamp order. (Or at least, the traditional file-based way does that, which affects the API.) But each HTTP request happens in memory and its log could be kept there. A downside might be if the server crashes in the middle of a request, the request is entirely unlogged? But maybe you could log some values to disk and merge them later.
- toast0 7y agoIt wouldn't make sense to log most of these events outside the context of the http request -- it makes sense to smash it all into the one log line. Otherwise you have no simple way to tie everything back together; you could make an id for each request and tie everything back to that, but that is inconvenient, slow, and mostly a way to justify a Hadoop cluster you don't actually need. That's not the key insight though. The key insight is not to try to log the time something took -- instead, log the beginning and the end, and calculate the duration later. This makes the logging apis much simpler and enables measuring times between events in different scopes without coupling the different scopes.
- macintux 7y ago> it was the structural constraint of already being in an immutable context that prompted the cleaner design. Yes! This is what I think most languages retrofitted to include functional features miss: the constraints of immutability and (customarily) no global variables force you to think about what data you actually need where, and often lead to a cleaner design. Constraints are incredibly valuable.
- dkersten 7y agoConstraints are necessary for ingenuity and creativity too. Also, those constraints create consistency though necessity. For example, you can write immutable code in Javascript/Python/Whatever, but because it doesn't force it on you through constraints of the language, you have no guarantees that other parts of the application follows your immutability rules, so many of the benefits are lost. Being able to make assumptions about a program, because the language enforces them to be true, is very useful.
- reificator 7y agoEven when a language allows mutability, just having immutability by default makes a huge difference.
- dkersten 7y agoSure, I mean, every useful language must have some form of mutable state, after all. Defaults are important!
- voxl 7y agoConstraints are not necessary for creativity.
- tlb 7y agoWhat would you point to as the most creative thing done with zero constraints?
- stonesixone 7y agoSpeaking personally, I would say I'm most creative when dreaming (where there are no constraints).
- artificialLimbs 7y ago