From 42af4474f78d96709683422644e67b3d7a96f9a3 Mon Sep 17 00:00:00 2001 From: Vectornaut Date: Tue, 23 Jul 2024 21:02:54 +0000 Subject: [PATCH] Add more details on Nim cons --- Coding-environment.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Coding-environment.md b/Coding-environment.md index b6c4e75..e2d782a 100644 --- a/Coding-environment.md +++ b/Coding-environment.md @@ -35,6 +35,10 @@ Next let's try to collect various language options, with their pros and cons: ### Nim + 👍 Nice rational syntax with lots of features + 👍 Compiles to JavaScript or WASM (via either C/C++ > emscripten or a third-party LLVM backend) + - ⇓ The user community is very small, and even the most basic tools and libraries seem sporadically maintained. *(Aaron)* + - The best-maintained linear algebra library I can find is [Neo](https://github.com/andreaferretti/neo). It's the only linear algebra library mentioned in the [SciNim](https://scinim.github.io/getting-started/overview/index.html) scientific computing ecosystem overview. Unfortunately, it's been [broken](https://github.com/andreaferretti/neo/issues/50) by a language update since January 2023, and the author doesn't seem to be using Nim anymore. I think the package is unlikely to be fixed unless we do it ourselves. + - There seems to be a command line interface bug in `nlvm` that causes the basic examples in the README to fail. We can work around it, but it makes me worry that if we include `nlvm` in our toolchain, we may end up having to maintain it. + - ⇓ I haven't been able to build working WASM from any code using Neo, the recommended linear algebra library. I've tried `nlvm` and Emscripten with various build options. I suspect that the bug in Neo mentioned above is causing the build failures. *(Aaron)* - ⇓ Clunky comprehensions (see the examples on the home page) and dicts are not in the language, but rather in the library. (Based on one small slightly hard to find section in the manual, {"a": "b", "c": "d"} is a literal representation for a fixed-length array of pairs of strings, apparently in an effort to be agnostic to different possible dict-like implementations. So in particular, the types in each pair have to match, and all pairs must be the same type.) - ⇓ Some odd rigidity, such as indentation for continuing expressions is only allowed in certain special places like after a binary operator or a parenthesis. Araq, the "benevolent overlord" of Nim, definitely displays his opinionated rigidity on the forums. Of course, maybe that's what it takes to see a new language through to success... - (Bottom line, there will definitely be a number of very unusual idiosyncrasies with nim such as foo_bar being the **same** identifier as foObaR that will at least require getting used to or maybe even working around. But it's not clear that any are showstoppers.)