4 ms·
I agree that static typing would helps for such bugs. However, not "in general". The general problem is that bogus data leads to an irreparable situation. To f
by qznc 14y ago
I agree that static typing would helps for such bugs.
However, not "in general". The general problem is that bogus data leads to an irreparable situation. To fix that bug, you have to find out who broke the data. Consider for example, a circle in a linked list. You would need quite an expressive type system to prevent that statically (dependent types might suffice? Theorem provers are the ultimate hammer).
- zanny 14y agoDifferent implementations for different use cases in different situations :P
- DannoHung 14y agoUhh, how would you make a linked list with a circle in it with the Haskell List type?
- dbaupp 14y agoa = 1:a
- ufo 14y agoThis trick is often called "Tying the Knot", if anyone is interested.
- qznc 14y agomakeCircle rst = rst ++ makeCircle rst The thing is that a circular list is actually an infinite list in Haskell. ;)
- ufo 14y agoThis is not a real circular list though, since it does not tie the knot as in dbaupp's comment.
- DannoHung 14y agoIf you want to prevent that then you want to take general recursion out of your programming language and if you're gonna do that you might as well make it Turing incomplete. These aren't "circles" per se, they are partially evaluated recursive structures. If you expand them you end up with evaluated list structures that are non-self referential.