> Probability

There is alea, though not integrated with the rest: 
[https://github.com/unicredit/alea](https://github.com/unicredit/alea) I do 
need very efficient sampling as well for natural language modelling so I 
already have a prototype of a fast sampler without replacement for the 
multinomial distribution. Actually I'm confident that it's currently 
state-of-the-art: 
[https://github.com/numforge/laser/blob/master/benchmarks/random_sampling/fenwicktree.nim](https://github.com/numforge/laser/blob/master/benchmarks/random_sampling/fenwicktree.nim)

> Statistical summary of data

NimData probably has it, otherwise open an issue there.

> Overarching lib for plotting

Well we need good plotting packages first but since Vindaar is doing them all

> Vega Lite

I have a prototype here 
[https://github.com/numforge/monocle](https://github.com/numforge/monocle): it 
works, the code is very simple (50 LOC), I just don't have time to dedicate to 
it to integrate with Arraymancer or Nimdata.

> Central tendency and mean (...)

All are implemented in Arraymancer and parallelized

> Loading formats

NimData supports CSV, Arraymancer supports CSV, Numpy, HDF5

> Stable binary storage

Arraymancer can load Numpy and HDF5

> Querying Dataframes

Well there is only one dataframe library at the moment

> Voyager

AFAIK Vega-Lite format can directly interop with Voyager

> REPL

Already mentioned

* * *

In short, the ecosystem is not there. There is a lot of work but there are 
proof of concepts in all important area: ndarrays, plotting, dataframes, even 
REPL, binary format. There are also a couple of contributors and not just one 
person, and some actually use it for their research and contribute tooling.

So it's certainly not R or Python or Julia but among all the fast statically 
typed language (including D, Rust, Zig, V, Crystal, Fortran, Ocaml, Haskell, 
...), I don't see any other language coming close in terms of:

  * ergonomics (no thinking overhead because of unfamiliar language construct 
like borrow checker or Monads)
  * syntax, including operator overloading to have access to "+", "*"
  * libraries, for example none of those have a simple PCA
  * speed, using Nim means no compromise on speed.



Now I've left aside C C++, they have a REPL (cling, xeus), they have everything 
needed for stats as they serve as the backends for Python and R, but they would 
feel heavyweight for iterative exploration of a dataset, especially C++ because 
of the busy syntax and the awful compile-times. And another thing C and C++ are 
missing is a good package manager.

Lastly, I think the main advantage of Nim over Python or R is maintenance and 
deployment, obviously for a scientist as long as it works on their machine it's 
good but when you need to deploy a model dealing with all the dependencies is 
very painful while you could ship a binary with Nim or other compiled languages 
instead of a Docker.

Reply via email to