this post was submitted on 14 Feb 2024
527 points (96.8% liked)
Programmer Humor
19623 readers
2838 users here now
Welcome to Programmer Humor!
This is a place where you can post jokes, memes, humor, etc. related to programming!
For sharing awful code theres also Programming Horror.
Rules
- Keep content in english
- No advertisements
- Posts must be related to programming or programmer topics
founded 1 year ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
Imagine getting segmentation faults at runtime
Neither does Haskell, and Haskell won't waste time doing something that doesn't matter.
Imagine using a linked list as your default sequential container.
Rust iterators are lazy btw.
You can't random-access an iterator and use it again later. Can Rust compute the value of calling a function an infinite number of times?
— former rustacean
it can compute how often I needed to compute the value of calling a function an infinite number of times.
If you've used a parser library's recursive parser, you have infinite calls right there. If it supplies a recursive-parser function, that function is a type-limited equivalent to
fix
, which performs the infinite call operation. Your Rust library most likely implements recursion using hidden mutability, but in Haskell, your parsers can remain infinitely-recursive while still referencing themselves and immutable.Also, we get to ask people if they know what a monad is.
If your specific use case really needs random access to a list while lazy computing the elements just wrap them in
Lazy
and put them in a vector.The return type of an infinitely recursive function / infinite loops is ⊥, a type that by definition has no values. (Known in rust as
!
)Haskell lets you infinitely recurse while still completing in finite time, and there's even a function (
fix
) for that. Doing e.g.fix (+ 2)
would be an infinite loop if evaluated, yes, butfix (2 :)
would give you a useful value that's an infinite stream of 2s. (it's also useful for other things too)