anon_d
Joined 16 years ago
Joined 16 years ago
Debugging in a strict FP language is pretty much exactly like debugging in an imperative language. Debugging in a lazy FP language requires somewhat different approaches, but still does not have the problems you are implying here.
> In the end, the result is wrong, good luck finding where.
This is not true. If this was true, nobody would be able to build significant things in FP languages.
> Optimization aside, what you code is what the computer runs.
> But then you end up with something that doesn't look at all like what your wrote.
No, you can trace code down through the compiler transformations and generally understand what is going on at each level of abstraction.
Compilers for imperative languages are just as "magical".
In practice, functional programming is a way of organizing imperative programs. Kind of like how OO is a way of organizing imperative programs.
Almost all applications written in Haskell use the IO monad quite a bit, for example. Large Haskell projects generally use a lot of C libraries, and sometimes even directly include C code for performance sensitive bits.
If you don't want to "hang with that crowd" then there's nothing to worry about here w.r.t filter.
It implies that `(add 3)` is being magically converted into `(\x -> (add 3 x))` by some fancy front-end feature.
But no, `add` is just a function that returns a function.
This pattern is core to the entire paradigm of functional programming, all the way down to the lambda calculus.
All functional programming languages are essentially just fancy syntax around lambda calculus. They have different implementation strategies (strict vs lazy), different type systems, and they have been extended with different primitives (floats, operations on floats, etc).
But at their core, they are all just lambda calculus.
In the lambda calculus, there is ONLY functions, and all functions take one argument. There are no tuples. So, multiple arguments are implemented with the pattern in question. For example:
mul = (λx. λy. λz. x(yz))
The fact that Go has a nice compiler doesn't really help, because the code generated by the functional compiler will have usage patterns that are very different from what the Go compiler is designed around.
People expect this, so doing anything "off script" around other people makes them EXTREMELY uncomfortable. If they are strangers, they usually "filter you out", pretend they don't notice, and create distance. If they are associated with you, they will immediately begin pressuring you to stop in increasingly less subtle ways.
Everything about our social interactions is completely scripted. We are choosing between pre-approved scripts that we learned movies and shows. In our public behavior, we are literally just executing software that has been uploaded to our brains.
You mostly don't notice this because that's all you've ever known. However, if you deliberately force yourself outside the script YOU WILL NOTICE, and you will notice very, very intensely.
As a consequence, most of the "interesting" people that you meet in real life are hiding, taking on the same exterior behaviors as everyone else.
A torrent is basically a filesystem, dumped into a single large bytestring, broken into constant size chunks. Then there is a fairly small swarm of nodes trading those chunks. Most of those nodes are trying to download everything, and want to saturate inbound/outbound pipes.
- IPFS is a single massive DHT for advertising who has what for every single blob in the entire network. Most nodes have a tiny subset of that data.
- IPFS does not use a constant block size.
- IPFS uses a "multihash" instead of hard-coding a specific hash function. This adds parsing time to hashes, and means that hashes are not a consistent size, and they have sizes that don't fit cleanly into words.
Those are just some details that I happen to know off the top of my head, but you start to see the picture. In every architectural trade-off, IPFS goes for the more general thing, instead of the performant thing.
Causal racism
HN is no different. Anyone can come here and make any argument.
Drugs also occur naturally and many people dabble in them without much harm. But drug addiction is truly destructive, and almost impossible to escape from.
We shouldn't be encouraging people that we care about to sterilize themselves, or treating the path to that lightly.
This view is quite unacceptable within the dogma.
I don't see the difference as trivial.
The reality is that, across many cultures, there are men that have a strong desire to abandon the masculine role and to live quasi-female lives. The Thai and native american understanding matches this reality.
Our culture-makers decided to apply a specific dogma to this phenomena, and to propagate that dogma by force. That dogma has effects on society and was implemented because of it's effects on society. (For example, reality does not imply that this phenomena should be tolerated or that efforts to minimize it are pointless, but the dogma does)
Now compare this to the original topic. It was claimed that belief in God is stupid, and for stupid people.
However, almost every culture has some sort of concept of god(s). When people interact with god(s), something consistent is happening inside their experience. It is a real phenomena (like the Third Gender stuff is a real phenomena).
Christianity takes this phenomena and captures it inside a specific set of beliefs. God is all-powerful, all-knowing, all-loving. He sent his son to die for your sins. Blah, blah.
These beliefs form a dogma. However, the reality of the god-phenomena does not justify the god-dogma. And, when people argue against the belief in God, they argue against the specific dogmatic god-construct that exists in modern Christianity.
But Christian culture is built on the god-dogma. So, christians reject people that reject the dogma, and continue to accept the dogma in the face of critique.
This is a direct parallel to the Transgenderism dogma. That's what I'm arguing. Almost all smart people submit to dogmas.
The reason why smart people are suddenly rejecting the Christian dogma (after submitting to it for centuries) is that they are strongly incentivized to do so. And you can see that in how smart people are simply submitting to new dogmas, instead of now rejecting all dogmas.
The move away from Christiantity isn't a triumph over dogma, it's just a new religion taking hold.
I don't agree at all!
Haskell is extremely pleasant for imperative programming. There's a learning curve for sure, but you get a lot in return. (STM is one small example). I would much rather write imperative Haskell than Python.
It does gets messy when you start writing really low level code (direct pointer manipulation, etc). And it sucks for small scripts (too much project boilerplate, small standard library). But those are the only real pain-points.