My friends on a different forum started talking about Nimrod. I wrote my views about it. I thought some of you may be interested:
I've been playing with Nimrod for the last couple of months, though not much. I find it:
1. Quirky. Does things its own way. Examples:
2. Hard to learn. Has been the hardest for me since Haskell (hard on its own and for me - the 1st functional lang).
5. Rich
6. Superb in some cases
A) garbage collection done right:
But is it better than Parasail or Erlang?
C) integer overflow in a debug build leads to exception. In release is undefined behaviour. So you get both more speed (because you rarely use unsigned types) and more safety than in C. IIRC assertions work like that too.
Overall, it seems like the 1st language since D to try to supercede C on all fronts. And it's much more different, much more modern than D. In some ways I find it less ambitious than I'd like (dependent types? whole compilation unit type inference? why not faster than C?), but there's nothing better. I'm not really sure it has a chance to succeed. I'm not really sure I want it to succeed. But it sure is a fresh breeze.
Interesting summary.
I get the impression that Nimrod would have been even more ambitious (it is already very ambitious) if it payed the lead developer's bills. Except for quirkiness (which is another word for "highly opinionated"), most of the things you're reserved about seem to stem from resource limitations and lack of popularity. So I think we should both want the language to succeed, because most of the problems would get fixed as a result (more volunteers).
BTW, you're probably aware that you can search the forum with google's "site:" prefix, right?
Thank you for your feedback. Some notes/corrections:
unsigned ints are second class citizens. The author doesn't like them
Unsigned ints have been added lately and it still shows (bugs). However "the author doesn't like them" is just unfair. Unsigned integers are a clusterfuck of bad semantics. A broken substraction operation is not my opinion, it's a fact.
The constants are of type int. Though int is like most intptr_t's in C, pointer sized, they can't be larger than max int32.
This is wrong. However, integer literals are restricted to int32 to make you write portable code.
AVR is a 16-bit platform
Its address space is 16 bits fwiw...
no tutorial. The official one is really just a presentation of features.
It used to be much smaller and to the point. The price was that it left out most of the advanced stuff and people said "there is nothing new in this language" as a result and moved on.
outdated and incomplete docs
Shrug gets better all the time and with http://nimrod-lang.org/theindex.html we're better then most others IMHO.
there are 3 types of array that don't map to anything out there
There's really two, and they're quite intuitive once you understand the clear idea Nimrod seems to have about value semantic types and reference semantic types.
"openarray" is almost just a type class to my understanding. Maybe once user defined type classes are in place, it can be formulated as such? That should make this "third type of array" easier to understand. I think the name of it is a bit unfortunate though, not that I have a better suggestion.
Araq: For those of us not so familiar with unsigned integer's problems, could you for reference point to some writing on that?
no tutorial. The official one is really just a presentation of features.
outdated and incomplete docs
I've been considering writing a more in-depth tutorial meant for people experienced with a different language (probably Python, as it's what I'm most experienced with) if I had the time, any interest in this?
You shouldn't necessarily expect people to have an understanding of Python but you can compare it to Python in some instances, it would be great if you could draw comparisons from other languages too.
I was planning on doing a comparison and such to that particular language (eg similar in some respects, but uses x method of doing things instead of y method), but having a more general one would work just as well.