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?).

Reply via email to