Case is insignificant in Nimrod and even underscores are ignored:
This_is_an_identifier and ThisIsAnIdentifier are the same identifier.
This feature enables you to use other people's code without bothering
about a naming convention that conflicts with yours. It also frees you
from remembering the exact spelling of an identifier (was it parseURL
or parseUrl or parse_URL?).
This has been discussed on Reddit before. I do not like this convention. Its a nuisance if you want to search the code for a particular identifier when it has been spelled in multiple ways. I find it jarring to read code where the same variable has been spelled differently. My brain flags it every time and I have to remind myself that they are the same thing. I can possibly retrain my brain, but I do not want to do that because in almost all other contexts case and underscore does matter.
To me it appears to solve a problem that isnt much of a problem. It is fairly easy to detect misspelled identifiers during code compilation.
Apart from a few built-in keyword operators such as and, or, not, operators always consist of these characters: + - ∗ \ / < > = @ $ ~ & % ! ? ^ . |
User defined operators are allowed. Nothing stops you from defining your own @!?+~ operator, but readability can suffer.
The longest one I saw in the tutorial was a -+- operator in the set operations.
(Note: one of the legal operators in an asterisk, which I transcoded to a similar looking unicode character to avoid offending the HN quote system. It really is an asterisk, not whatever your browser displayed.)
There are a lot of awesome things about this (it's like a semi-perverse grab bag of my favorite languages!), but some aesthetic decisions that rub me the wrong way unfortunately... Still, I'm going to keep an eye on it, and push it just below Perl 6 on my List of Languages to Really Learn.
One of the nicest bits that kept my interest:
# There are bindings to GTK2, the Windows API,
the POSIX API, OpenGL, SDL, Cario, Python, Lua,
TCL, X11, libzip, PRCE, ODBC, libcurl, mySQL
and SQLite.
I'm stunned. I've spent a year looking for a language with
that set of features, and I mean, I really tried!
There's a few odd choices. The use of some fairly bizarre operators for unsigned integer arithmetic is slightly weird (a bit like *. for floating point operators in O'Caml). And it seems to be bootstrapped from Pascal, which is a curious choice given that it compiles to C. There's also no built-in bignum type, (though this has the positive
benefit that the author is still free to license it BSD -
use GMP for bignums removes that possibility).
Will definitely have to investigate this with a less-sleepy brain. I very much like what I'm sure I parsed correctly, though :) Ease of metaprogramming + native compilation = happy hacking, in my book.
To me it appears to solve a problem that isnt much of a problem. It is fairly easy to detect misspelled identifiers during code compilation.