←back to thread

389 points kurinikku | 4 comments | | HN request time: 0.848s | source
Show context
asah ◴[] No.42166440[source]
Not a fan of everything-is-a-function because it's oversimplistic and often unhelpful. Some of the issues:

- functions that don't fit in cache, RAM, disk, etc.

- functions that have explosive big-O, including N way JOINs, search/matching, etc.

- functions with side effects, including non-idempotent. Nobody thinks about side channel attacks on functions.

- non-deterministic functions, including ones that depend on date, time, duration, etc.

- functions don't fail midway, let alone gracefully.

- functions don't consume resources that affect other (cough) functions that happen to be sharing a pool of resources

- function arguments can be arbitrarily large or complex - IRL, there are limits and then you need pointers and then you need remote references to the web, disk, etc.

(tell me when to stop - I can keep going!)

replies(4): >>42166621 #>>42168544 #>>42168689 #>>42169746 #
zelphirkalt ◴[] No.42168544[source]
Half of what you call functions in that comment, are not actually functions and in the FP world many would not call them functions. Rather they are procedures. Functions are procedures, but not all procedures are functions.
replies(2): >>42168890 #>>42171432 #
1. magicalhippo ◴[] No.42171432[source]
I'm just used to the words from Pascal. What's the definition of a procedure in the FP world?
replies(1): >>42171987 #
2. zelphirkalt ◴[] No.42171987[source]
Afaik, the definition is just "a sequence of steps/instructions". That is of course much broader than a (simple) function, which among other things for one input gives you one output, and for the same input always the same output. A procedure can do that too, but it can also give you different outputs for the same input, due to side effects.
replies(1): >>42172848 #
3. magicalhippo ◴[] No.42172848[source]
So from that perspective functions are pure and procedures are impure?

One of the thinga I miss from my C++ days was the ability to mark functions as const, which made them fairly pure.

Being able to clearly mark which is which, but also to combine them easily, was very productive.

replies(1): >>42173865 #
4. zelphirkalt ◴[] No.42173865{3}[source]
Yes, that is my understanding of the terminology, and how I try to use the terms (not always succeeding).