nim-wiki/Feature-suggestions.md

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.