I generally like Nims approach a lot - but I think that @Araq is too hard on this. The guiding rule should be "Nim prohibits false and dangerous things". Naming (e.g.) private variables '_[foo](https://forum.nim-lang.org/postActivity.xml#foo) is not dangerous and whether it's false is largely a "religious" question. Whether a user prefers CamelCase or snake_naming should be entirely his decision. A language has no solid basis to make quite arbitrary rules. Looking objectively, Araq's approach is confusing (e.g. for tools) and _limiting_ both the set of available var names as well as the set of var naming classes.
Example: One might decide to snake_name procs or Types (with a capital 1st letter) but to CamelCase variables. And I do not see any solid reason for a language to limit the developers choice. Finally, smartly guessing what the developer wants is one thing but to change what he writes is a different thing and a _bad_ one. To turn e.g. '_[foo](https://forum.nim-lang.org/postActivity.xml#foo) into 'foo' behind the users back is tricky and creating problems instead of avoiding them. Araq, you have made many very smart choices when to be strict to avoid problems and when to be lenient and to give us some comfort and luxury. The weird naming rules imo are the one bad exception. For a start nobody should force his _opinion_ upon us. We respect yours but kindly don't get in our way without solid and objectively explainable good reason. Moreover the fact that this issue comes up again and again clearly demonstrates that your naming rules are confusing - which btw. also translates to "failing to win developers to have a closer look and use Nim". In fact, I've seen people call Nim an "exotic weirdo language" based on this issue. Let us stick to the well working rule "we care about structure and correctness. Style is everyone's own choice". Yes, this sometimes leads to very ugly style choices but 'freedom' is more important than 'nice' and freedom should never be limited for the sake of 'nice' or -subjective- 'right'. A compiler should digest what the developer wrote and complain only about _real_ problems, not about your subjective personal opinion (no matter how reasonable you feel it to be).