> First of all, he states that not having such an indentation-based syntax > allows for more freedom ...
He is right in that but only in one regard: Having explicit block markers (like { and } or `begin` and `end`) allows for (visually largely unstructured) "streams" of code. If that were really, really needed, one could however introduce a "3 spaces" symbol, say '°'. It might be noteworthy that quite some studies, typically made in the context of some entity seriously needing that question answered, have clearly shown that readability _is_ important, in fact _very_ important. While I know of no study addressing indentation based blocks vs marker based blocks it seems reasonable to assume that both are clearly on the good side (remember: The issue is (only) readability). The studies that were made all and consistently demonstrated that "curly blocks" are clearly the worst approach (~ worst readability) and introduce significantly more errors and are significantly worse to maintain. > First of all, he really dislikes the lack of brackets, and the "misuse" of > them I would (mildly) agree. It _does_ make sense to have `[]` meaning "something array like" always (although I personally and subjectively - and unreasonably - prefer [] over <>). More importantly however I reject your friends criticism because It's basically just based on "it's not c# like and hence it's bad!". That's, Pardon me, just stupid. > Next up, an "invalid" argument. He says macros are dumb, and you could just > write code normally without them. Very wrong. Obviously your friend, like so many in the curly braces camp, fails to understand the concept of readability which is closely linked to maintainability and probability of errors. Probably your friend has become a victim of the (utterly stupid) "fun" paradigm (Typical statements are "It's fun to develop in XYZ" or "I'm a developer because it's fun") - that camp has been found to be responsible to a very large degree for the major clusterf_ck we're in today (e.g. funny bug of the month in SSL). They are, Pardon my french, braindead morons. Here is the truth and the only one in that regard: software development is an _engineering_ discipline - and a very complex one at that. If the "fun" camp guys were also in bridge building, railroads, air traffic etc. humanity probably would be largely extinguished by now (the survivors living deep in the woods, far away from killing "civilization" with tech). Just like with bridges or railroads the relevant factor is absolutely _not_ whether those who designed and built it felt it was "fun" to do but whether the result was reliable, meeting the needs, etc. Macros not only allow for comfort but more importantly they allow for "centralized code fragments". And that is directly linked to probability of error as well as to maintainability. Just have a look at crypto code; you'll almost invariably find (long) macros. Often the very core of an algorithm is implemented in one or more macros. And I think even your friend would accept that the people who gave us AES or Blake2 certainly aren't stupid. Whenever some halfway responsible entity _really, really_ needed reliable and bug free software they turned to languages like Ada, Eiffel, Ocaml, etc. (along with _formal_ spec., modelling, and verification) as soon as and when such options were available. Hell, even Pascal was used because it might not have been a "nice" language but it offered many of the features high reliability scenarios required. So, to summarize it somewhat rudely: why would you even care about the opinion of someone who doesn't have even the slightest clue what he talking about? You are like some engineer debating with an idiot whose arguments basically are "my (make shifted wannabe) crap is "cool" and "fun" while your (properly working and reliable) bridges and railroad systems are boring and uncool!. Btw, I myself am not at all against .Net (any more). For one it incl. Mono (nowadays) offers reasonably good and wide linux support, too and isn't a pure Windows world thingie any more. More importantly though, Microsoft (funnily unknown to many) has invested tons and tons of money in safety, reliability, and security research and has really done a lot of work and has created much progress in that field. Just think of Z3 ( _the_ solver), Boogie (an "easy" interface language for Z3), code contracts (i.a. for c#!), Dafny (a safety targeting language that actually works) and more. With their async/await work they have tried to make .Net also useable for servers but although they seem to have done it well I personally and subjectively limit my .Net use for business applications. Well noted this comes from someone whose first (and then beloved) language was C (and, I have to admit it, then I also was a "coolness" obsessed idiot) and who taught C. In fact I still sometimes implement certain tricky things in C because Nim does not (yet!) compare in some corners. I'll spare the long wound odyssey over two decades in my quest to find a language that meets my (quite complex) set of criteria like multiplatform, good readability and maintainability, seriously strong static typing (plus the compiler Cerberus like watching over it), async, multithreading, and quite some more. During that journey I was desperate enough to try Modula3 ("modern Pascal"), Pascal itself, Ada, Eiffel, Felix and had a serious look at quite some more (e.g. Zig, E, Sather) - and all of them left something (of importance to me) to desire. I would certainly _not_ think or say that someone not using Nim is an idiot. Maybe he doesn't know or grok it (it's quite different things to have a look at a language and maybe watch some videos -or- to seriously at least begin to understand a language), maybe his needs are different (e.g. Windows applications only), maybe he is used to excellent tool support, ... but I would certainly call it sheer idiocy to go against Nim based on hardly more than "It's not c#!". Happy new year to everyone.