78 lines
3.9 KiB
Markdown
78 lines
3.9 KiB
Markdown
What features would you like to see in Nim
|
|
|
|
(Use [needed-libraries repository](https://github.com/nim-lang/needed-libraries) for asking for libraries in the Nim Ecosystem.)
|
|
|
|
- Multi-line strings just like Python.
|
|
`"Just like",`
|
|
`"this"`
|
|
|
|
|
|
- ~~Additional string concatenation at assignment. Example `let a = "a" + "b"` or `let a = "a", "b"`. Both resulting in the string "ab". `let a = "a", "b"` seems more appropriate since `echo "a", "b"` already works.~~ There is `"a" & "b"`.
|
|
|
|
- ~~Range to sequence and array. Example `let a = [1..3]` would be the same as `let a = [1, 2, 3]`, both resulting in `[1, 2, 3]`.~~ There is `import sequtils; let a = toSeq(1..3)`.
|
|
|
|
- "pure" mode - force usage of scoped variables (unless imported by from... import) and exact case match (like golang does).
|
|
|
|
- lightweight threads with network io multiplexed.
|
|
- if Nim had something like goroutine (ie multiplexed on networking and use native threads for other syscalls), then it will be ultimate language for server programming.
|
|
|
|
- <del>gem like functionality (gem install sinatra)</del>
|
|
- [nimble](https://github.com/nim-lang/nimble)
|
|
|
|
- <del>A cookbook site similar to Python, where users can share code,
|
|
mostly snippets. Driven by normal users rather by experts-only.</del>
|
|
- [Nim Programming Cookbook](http://nim-cookbook.btbytes.com/)
|
|
|
|
- A wiki functionality for parts of the documentation so that
|
|
users could update the documentation in a simple way (and Araq
|
|
could take these suggestions and approve or reject them
|
|
quickly).
|
|
|
|
- <del>A pastebin for nim on the Nim Homepage or somewhere else.</del>
|
|
|
|
- Allow multiple ranges (eg 1..3,5..8), handle reverse ranges (eg 5..1, 3.. -3)
|
|
|
|
- <del>echo automatically handle simple display of sequences (similar to repr)</del>
|
|
|
|
- <del>vector and matrix maths (or include a port of an existing library)</del>
|
|
- [nim-glm](https://github.com/stavenko/nim-glm)
|
|
- [Arraymancer](https://github.com/mratsim/Arraymancer)
|
|
- [neo](https://github.com/unicredit/neo)
|
|
|
|
- include a do while loop (or equivalent)
|
|
|
|
- <del>% formating extended to include math precision (like provided by formatFloat, but in a concise % syntax way)</del>
|
|
- [strformat](https://nim-lang.org/docs/strformat.html)
|
|
|
|
- easier sorting, that doesn't need wrestling with types.
|
|
|
|
- a ternary condition - like ?: in C, or iif()
|
|
- You can do: ``if cond: a else: b``, IIRC the ``?:`` won't make it into Nim.
|
|
- A user-defined ternary operator is entirely possible (and really simple).
|
|
|
|
- <del>a simple way of indexing the last element of an array or sequence, to avoid long-hand code like ``arr[arr.len-1]``</del>
|
|
- You can do: ``arr[arr.high]`` or ``arr[arr.low]`` for indexing the last and first element or an array or sequence or ``arr[^1]`` for the last element.
|
|
- a shorthand way of discarding the return value of a proc (to improve readability)
|
|
|
|
- a shorthand initialization of arrays or sequences, eg var x: array[0..25, int] = -1
|
|
would initialize all elements of x to -1
|
|
- Not possible until result type overloading and result-type generic match is introduced to the language.
|
|
|
|
- <del>array/sequence comprehension</del>
|
|
- They are present in the ``future`` module of the standard library.
|
|
|
|
- <del>introspection like python's dir()</del>
|
|
- Possible via metaprogramming
|
|
|
|
- scoped imports, like D, Ada, and Ocaml
|
|
|
|
- Nim documentation provided as .epub (tutorials + manual)
|
|
|
|
- Missing features from C++/D template (generics in Nim) system, eg variadic generics and generic generic parameters
|
|
|
|
- <del>Multidimensional arrays, with array slicing, striding, masking, etc. Something along the lines of arrays
|
|
in Fortran or, better yet, Numpy arrays in Python would be great. Nim has great potential for scientific
|
|
programming, but the lack of multidimensional arrays is a deal-breaker.</del>
|
|
- [Arraymancer](https://github.com/mratsim/Arraymancer)
|
|
|
|
- Either a stable 1.0 release or a stable subset with a guarantee of no breaking changes. |