What I liked so far:
* * *
* **Express the intention of "base" instead of "override".**
We have `override` keyword in C++ and `@Override` annotation in Java, to
express our intention of "overriding the base function instead of creating a
new base function/overloading/overwriting". That's just _stupid_: you need to
remember not to make mistakes (forget adding `override`) in order not to make
mistakes (accidentally failed to override).
I really like the Nim's `{.base.}` way of doing this mistake prevention.
* * *
* **AST level meta-programming**
I came from a C++ background. There are reasons why people are scared of
meta-programming.
* * *
* **Partial casing**
I'm quite stubborn when it comes to casing style: no capital letter is allowed
in code, not even in strings or comments, except when spelling human names and
places (etc) in comments. i.e. I use `dash-case` whenever possible and fallback
to `snake_case`. That's why I always reinvent wheels or reinvent wrappers
becuase libraries just don't agree on my casing style.
In Nim, I can finnaly stop fighting and write actual codes. I don't need to
care what the library author's preference of casing style is and just use my
own. Well, not completely since we still have the first letter
case-sensitiveness. But that's better than ever before already, and I can bear
with that, at least I can insert underscore between word boundaries
(`HTTPS_ID_Descriptor` and `HTTP_SID_Descriptor` instead of
`HTTPSIDDescriptor`, `HttpSidDescriptor` and `HttpsIdDescriptor`). I think it's
time for me to go for Bjarne style (`Capitalized_snake_case` for types and
`classic_snake_case` for the rest).
* * *
* **Compiles to JS**
So I decided to use Nim for my final year school project utilizing WebGL. It
must be fun making a DSL that generates GLSL (or just use nimsl?).