nim-wiki/Feature-suggestions.md

3.2 KiB

What features would you like to see in Nim

(Use needed-libraries repository for asking for libraries in the Nim Ecosystem.)

  • "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.
  • gem like functionality (gem install sinatra)

  • A cookbook site similar to Python, where users can share code, mostly snippets. Driven by normal users rather by experts-only.

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

  • A pastebin for nim on the Nim Homepage or somewhere else.

  • Allow multiple ranges (eg 1..3,5..8), handle reverse ranges (eg 5..1, 3.. -3)

  • echo automatically handle simple display of sequences (similar to repr)

  • vector and matrix maths (or include a port of an existing library)

  • nim-glm

  • Arraymancer

  • neo

  • include a do while loop (or equivalent)

  • % formating extended to include math precision (like provided by formatFloat, but in a concise % syntax way)

  • 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).
  • a simple way of indexing the last element of an array or sequence, to avoid long-hand code like arr[arr.len-1]

    • 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.
  • array/sequence comprehension

    • They are present in the future module of the standard library.
  • introspection like python's dir()

    • 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

  • 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.