3 ms·
> A compiler could parallelize either of these expressions! But that's also true for imperative languages.
by 1718627440 11mo ago
> A compiler could parallelize either of these expressions!
But that's also true for imperative languages.
- itishappy 11mo agoFair point, but I think it's a lot more true of functional ones. The problem is pretty easy to see in a C-style for loop: for (int i = 0; i < 5; i++) { printf("%d\n", i); if (i % 2 == 0) i++; } The index variable depends on it's value in previous versions of the loop and can be modified in the loop body! Can't parallelize that! Side effects and mutation break many of the promises provided by functional constructs. Hybrid languages like Python can illustrate this: # pure, parallelizable [2 * item for item in items] # side effect! order matters! [print(item) for item in items] # side effect! order matters! [arr.append(item) for item in items] A language like Haskell might be the other extreme. You're not allowed to use an `f` that breaks this: [f item | item <- items]