You made a lot of points. But to be fair, speaking as a normal developer, some 
of your points do not make sense.

  * `&` do exactly what it supposed to do. It is not `&` 8100x time slower than 
`add`, it is the algorithm 8100x slower. A year 1 student know to use a string 
builder for fast repeating string concatenation. If someone want to benchmark 
how the gc handle strings, it is fine. But if someone want to blame compiler 
not optimizing away his poor algorithm. IMO, he should read introduction to 
programming.
  * `100M loops of s.add('x') uses 325MB of RAM` I didn't look into details, it 
does look a bit high to me, I would expect ~200MB, but 325MB is not utterly 
unacceptable.
  * `Nim stdlib code is not compiled in production mode unless my code is also 
in production mode` Actually, I didn't expect stdlib to be pre-compiled or 
stdlib compiled in prod mode and my code compiled in dev mode... as far as I 
know, many languages just treat stdlib the same as other libraries and your 
code. Maybe you expect too much.
  * I agree that the implementation of `initTable` should just simply adjust 
the size to the next power of 2.
  * Treating array as value is rather inconsistent with other languages. But 
once wrapping a `ref object`, the usage is almost the same as usual. The core 
developers prompts to use object variant or alike, but I am just get too used 
to class and I does see it as a problem.
  * I dream to have everything "best in class" for free too =]
  * It is the **strong type** that do not allow passing `int64` to `int`. It is 
a safety feature! You may expect the compiler to auto detect int are actually 
int64 on 64-bit machine, but then the same code do not compile in 32-bit 
machine... The mindset of strong type will be treat `int64` and `int` as two 
different types and require programmer to convert it explicitly. `SomeInteger` 
on the other is alias to `int | int8 | int16 | int32 | int64 | uint | uint8 | 
uint16 | uint32 | uint64` which explicitly say `int` or `int64` or ...
  * I am happy to read and write `10i64`, `8u32`


Reply via email to