It has seemed to me for a while now that the significant whitespace in languages like F#, Haskell, and Python is actually a really good thing. After all, correctly formatted code already has indentation delimiting scope. And there exist compilers that will correctly compile code that has significant whitespace (i.e. F#, Haskell, Python). Conclusion: Curly brackets et al are all only to make the compiler writers’ life easier, the right way to delimit scope is with significant whitespace.
a : b
is different from
a : b
The first one returns an object that has a field ‘a’ with a value ‘b’ and the second one returns ‘undefined’.
The title to this post is actually an indirect reference to my previous post . In that post I said that there are a bunch of mathematical properties that we really should make sure our programming constructs have (for example … some constructs really should be continuous). *This* post is about how compilers are really just functions that map syntax into programs.
The thesis here is that a continuous compiler is good and a discontinuous compiler is bad. One solution might be to add in curly braces and remove semicolon injection … but I suspect there may be better ways to salvage the situation.
ReSharper is a neat add-on to Visual Studio that adds a bunch of additional syntax highlighting (among other features). One of the things I’ve really enjoyed is the grey out effect that occurs when a function is not called anywhere. It becomes rather easy to determine at a glance when a function has become obsolete. And I suspect that this is also the answer to solve the semantic whitespace discontinuity.
 - Things get complicated when you aren’t dealing with geometry or metric spaces. What do you mean by “small change” when distance doesn’t exist in your domain? Well, topology has a solution for that, but I’m not going to try to build a topological space for syntax and program semantics. I think the informal ideas for small change is clear enough to get the idea in this instance.