Hello nimrod users!
I heard about this lovely language through Reddit. When Araq posted the 0.9.2 release. I read a few things about it, but I haven't gotten really into the language very much. I passed it off as another "little" language that would die real fast when the creator got bored. But it appears to be constantly improving and development continues to move forward.
However, I have limited time - and as much as I wish I could learn everything and play with all these languages and tools, I can't. So I'd like to ask for any of you to give me a brief summary of why I'd use this language over anything else (right now). I know, I could just read all the tutorials and the user's guide - but I want to hear what the developing community has to say about the language - those who are actually working on projects and know the flaws and the problems.
I know that Nimrod has a (very?) small community and isn't a hugely funded deal. So the toolset and the set of help is smaller, but more personal. I know that you don't have many native libraries or tools available for the same reasons - but I heard that you have great compatibility with the most used languages (C for instance) because of the C-based compilation; and that using a C library is easy as pi. And do you think Nimrod will ever be "mainstream", or even as used as something like Ada? Or is it going to end up dying cold and alone because nobody wants to use a language not backed by Google or Mozilla or Red Hat?
What about the development status? I keep getting mixed reports here. Some people say it's pretty much stable as can be and almost all features are implemented and the ones that are coming up or the syntax changes won't change existing code a bit for the most part. Then other people reply that Nimrod has a ton of problems and bugs, and point to the 80-something open bugs on the repo; that features aren't complete or implemented that are actually rather important - like a working concurrency system. Which one is it?
And to be specific on my uses. My first project in a language is almost always a game. It employs a ton of different features and tests speed and compatibility with external libraries (GLFW and OpenGL mainly). It'll be a simple 2D game, so nothing too fancy - but a realtime game none the less. One of the examples given on the Nimrod website was that it's designed for speed and efficiency and almost matched C speeds. And even claims that the soft GC is designed so that realtime applications are relatively unaffected by it's existence. Is this true?
Finally, a little about my tastes. My first language was C#, then I went to C++. I learned Java to see the fuss, then moved back to C++. I love C++ for it's expressivenses and power. But once you need to expand to a larger code base I feel it's far to cumbersome. Without tools like Clang and QtCreator, I feel lost. And a lot of it is designed poorly or so "hack n' slash"ed together.
Then I went on a language spree and learned Ada, Clojure, Haskell, Ceylon, Zimbu, Go, D, etc. I settled on Go - and it replaced C++ as my main language. It has a GC that, while kinda badly implemented, worked. It has wonderful C-like syntax that's light and fluffy to handle. No complicated mess of symbols and garbled "tricks". The type system is strong, the multiple returns are useful, the concurrency is brilliant. And the tooling is a God send. Especially go test - never having to really write my own benchmarking code is amazing. Getting the ns/op, B/op, and alloc/op is wonderful. And the packaging works wonders. Don't get me wrong, it has problems, but it's the closest I've seen to my perfect language. And it was so simple, I could use Sublime Text with the default Go CL tools to do everything I ever needed. Furthmore, it's Google's. They already use it for themselves, they work on it long and hard. It's not going to die soon - so I know it has a future. Especially seeing how fast it's community is growing.
So, anyone willing to bite and help me out here? I love trying new languages, but like I said I'm really short on time these days, and all these new languages are popping up. I'm starting to need make compromises on what I can try and learn, and I'd love to be a part of the Nimrod community, but I need to know it's going to be worth it in the end. Please don't take any offense to anything I've said - I mean nothing but the best.
What about the development status? I keep getting mixed reports here. Some people say it's pretty much stable as can be and almost all features are implemented and the ones that are coming up or the syntax changes won't change existing code a bit for the most part. Then other people reply that Nimrod has a ton of problems and bugs, and point to the 80-something open bugs on the repo; that features aren't complete or implemented that are actually rather important - like a working concurrency system. Which one is it?
True the language is not at 1.0, and there are still bugs to be found. To date I have 11 open issues and 23 closed, generally they are closed very quickly.
IRT gamedev, I have written wrappers for CSFML (the SFML c++ wrapper still needs some work), Chipmunk, Horde3d, ODE, SDL2, and there is a wrapper for GLFW (see more at https://github.com/Araq/Nimrod/wiki/Community-Projects). I've found the GC to perform extremely well.
Btw I think you will find multiple dispatch far more useful than methods bound to an object, and you can still use the syntax of receiver.method(arg) for method(receiver, arg) which is really nice, far better to read x.f.g than g(f(x))
Integration with C is close to metal, no binding overhead, this was the primary feature that convinced me to choose it over anything else. Very thorough rich documentation is another point to consider, no necessity in build system (finds dependent modules and compiles them as needed) reduces development times, allows for quick and dirty tests and concepts...
Araq fixes compiler bugs very quickly, and there are some other people improving the compiler. But if you want it perfectly stable then exclude macros and probably complex templates from usage, or just be ready that some heavy template-bound source can cause a problem, although in my cases they had been fixed in maximum 2-3 days.
Even without macros and templates it's already a much better tool to write native apps than c++.
If you are scary of the future, nimrod compiles to C, so you'll be able to port you app into some other highlevel language :)
Thanks for the quick replies!
Looking at the issue board (specifically at yours), I can assume nothing major is broken. Any bugs I find will be more minor inconveniences, is that correct? I guessed bugs would be fixed rather fast, for a rather small community it does have a pretty fast development rate and the community does seem very nice and helpful.
How easy was it to make such wrappers? Like I said - I heard the foreign language interface is really simple to use (some people have claimed no need for a wrapper sometimes). But those claims are often a little more than exaggerated.
Well it's good to know the GC is quality! Most languages don't think they need to make a good GC until far after even the official release.
I'm very impressed with all you fellows for everything I'm seeing so far (I went ahead and started playing around - I can't do today's work without my buddy, but he's nowhere to be seen). There are a few iffy things I've seen so far - but other than that it really does feel like the "perfect" language; better than go, even.
I don't mind some instability for feature-set. Worst comes to worse I just don't use those couple non-functional features. The main concern for me was more along the lines of GC problems (leaks or deleting valid objects) and a non-working concurrency system. As long as those major parts work, I think I'll be fine. Plus, if somebody doesn't keep testing things out how will they ever know how to fix the bugs!
Yeah - the future is a bit worrying. Do you guys have any plans to advertise the language, get a bigger community and try to be a "mainstream" language? After looking around I think that the only thing that's still holding me back would be spending all this time learning and loving this language, writing a lot in it - just for it to never get big and eventually fall off the face of the planet. It's not a big deal - projects could be ported or just use the latest compiler until they're finished - but it would be pretty sad either way.
I come from one of Nimrod's ancestor: Object Pascal, and I still choose it as my primary language. Don't get me wrong, I found this language in its very early age and already find it surpassing quite a lot of Object Pascal features. Mainly due to its age, it doesn't inherit many of its ancestors' mistakes and uselessness.
The language is brief, yet quite readable (once you're able to follow the naming convention) and it takes Oberon's way of object oriented programming (which I like) where adding methods to a class is as simple as writing regular function, no need to mess with inheritance or class helper (in fact, class helper is exactly how Nimrod implement object oriented programming!).
Libraries in the standard distribution is quite a lot, and most of them is very familiar for those coming from Object Pascal, only seems to be packed in a neater way. You have almost everything required to write non-trivial applications.
But the God here is the compiler, which is VERY FAST and has many features. The parser can accept multiple syntax style. The compiler also serves as documentation generator (which means it uses exactly the same parser, unlike Free Pascal, the compiler where Nimrod is first bootstrapped on, which has to write another parser that is not always in sync with the compiler one) partly due to the language that treats comments as part of the source instead of throwing them away. You can also compile your program with embedded debugger, which reduces the need of another executable for debugging. Talking about all of the compiler features will take A LOT of space here, so you better read the complete list of compiler features here.
Hello Kenneth!
First a bit of background about my history with Nimrod. I have started coding in Nimrod about 3 years ago, when much like yourself I have been hunting for a new programming language. Over these 3 years I have created many Nimrod projects and have contributed a lot towards Nimrod's standard library. The language was awesome when I found it, and it's even better today.
In my opinion the only weakness Nimrod has is its small community, mainly the fact that there are not many core developers working on the compiler. It is however amazing how much Araq was able to accomplish on his own and how dedicated he is to this project. Nowadays we have two developers who are working on the compiler, with me still working on the standard library as well as tools like the Aporia IDE and babel package manager. The community is of course constantly growing, and with your help it can grow even further. I would argue though that a small community is not always a disadvantage, one of the advantages is that you can very easily get involved with the project: discuss the design of Nimrod with the language designer himself and influence Nimrod by doing so.
It's hard to say whether Nimrod will ever become mainstream but I sure hope it does. It's the users choice whether they want to back a language which does not have a big company like Google or Mozilla behind it.
What about the development status? I keep getting mixed reports here. Some people say it's pretty much stable as can be and almost all features are implemented and the ones that are coming up or the syntax changes won't change existing code a bit for the most part. Then other people reply that Nimrod has a ton of problems and bugs, and point to the 80-something open bugs on the repo; that features aren't complete or implemented that are actually rather important - like a working concurrency system. Which one is it?
From whom did you get these mixed reports? There are still things missing of course, but as far as concurrency goes we support it with message passing, Aporia uses it, nimbuild uses it and it works well. We don't have a lightweight concurrency system yet, but I am working on changing that. Last time I heard Araq also has some plans for some nicer concurrency in nimrod, but I don't know the details.
How easy was it to make such wrappers?
Pretty easy, c2nim is a tool that comes with the compiler and you can run it on a header to automatically generate the wrapper. If there is heavy use of macros you might have to mangle the header a bit to make it work. I've also written a few wrappers by hand.
My main draw to the language is how productive I can be in it:
That is an absolutely massive set of standard libraries. And they all look useful. The first thing I said when I went to the page "I wonder if they even have a built-in JSON parser" - YES. And that compiler truly is... just wow.
I never said a small community was necessarily bad! I totally agree that having this small community can really, really help! I found that out when I was using Zimbu, Ceylon, and Ada. There weren't many people around to help - but man did they help, and they were pretty cool guys. Of course I've never experienced much talk with developers. The Zimbu creator never took suggestions - he had a "why I did it" page and other than that basically said "no." Ceylon and Ada weren't really made by a company. They listened to people in their forums and had a contact system, but I never used them.
Personally I'd rather support a langauge backed by people than a company. It will live on as long as people want it to. A language backed by a company tends to live until the company failed or throws it away cough Oracle cough Java 6 cough.
Don't know specifically, just random places Nimrod was brought up. A couple blogs here and there, I think maybe on post on Reddit had it. Then again, I did my search within the past year, so it could be a very old comment for all I know. I should have specified, I'm sorry.
Well then, I think I'll join the club! It's quite a wonderful language and I'm really enjoying playing with it! It's better than almost anything I've used - almost exactly what I would have done if I designed the language. I'm really glad to hear it's usable and stable (for the most part) and constantly getting better.
Also, thanks for the quick responses! I know where to come if I ever have issues or suggestions! I'm really glad I found this language, thanks guys.
I'm not an expert and my ability to help with the std libs or the compiler is going to be limited (if existant), but I'll make sure to try my best to solve any bugs I come across, or at least report them. My buddy and I have been planning a pretty big project for a couple months; we had decided upon Go - but I think I'm going to delay that for a little bit, get us familiar with the language, and do it in Nimrod instead! It actually suits our needs much better than Go does.
Well then, I think I'll join the club!
Brilliant! Welcome to the club!
My buddy and I have been planning a pretty big project for a couple months; we had decided upon Go - but I think I'm going to delay that for a little bit, get us familiar with the language, and do it in Nimrod instead!
Awesome!
I'm not an expert and my ability to help with the std libs or the compiler is going to be limited (if existant), but I'll make sure to try my best to solve any bugs I come across, or at least report them.
Even that you are using the language makes me happy. If you have a blog or any other means to advertise Nimrod we would also appreciate your help with that to allow the community to grow! :)