I was just thinking about the problems of case insensitivity...
Currently underscore is not allowed as last character of identifiers. May it be possible to allow underscore as last character and use it at a special marker for desired case sensitivity (and meaningful _ in words)? At the same time it could be used for name conflicts with reserved Nimrod keywords. I guess currently all identifiers are converted internally to lower or upper case with underscores skipped. This can continue, with the exception when last character is an underscore, for this case the identifier is read as it is, with lower and upper characters and without ignoring inner underscores. So x_n_, x_N_ and xn are different, and at the same time identifiers like end_ or type_ can be used when wrapping C libraries. Of course the _ at the end is not very nice, but it should be not needed often, and the advantages of general case insensitivity and ignored inner-word underscores for Nimrod language is still available.
I don't have any strong feelings for or against this feature, but I'd like to point out that you can generally employ backquotes to use keywords in lieu of identifiers, e.g.:
proc `type`(x: Data) = ...
This ignores the fact that one of the main motivations for case-insensitivity is to allow style shifts between modules, such as wrappers. This is a nifty idea, but is it really needed? It's yet another thing that new users could stumble on.
I agree. This seems somewhat counter to Nim's philosophy, and I'm not sure how an underscore at the end of an identifier is really better than an extra/missing character for these rare situations. It only seems to complicate the symbol rules.