Our great sponsors
-
InfluxDB
Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
-
Arraymancer
A fast, ergonomic and portable tensor library in Nim with a deep learning focus for CPU, GPU and embedded devices via OpenMP, Cuda and OpenCL backends
-
WorkOS
The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.
-
nimja
typed and compiled template engine inspired by jinja2, twig and onionhammer/nim-templates for Nim.
-
Nim
Nim is a statically typed compiled systems programming language. It combines successful concepts from mature languages like Python, Ada and Modula. Its design focuses on efficiency, expressiveness, and elegance (in that order of priority).
-
SaaSHub
SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives
Well no language is perfect, but Nim can be used in almost every domain because of it's compilation targets(C, C++, JS) and it's fast compile times(who needs interpretation when compile times are that fast!):
* Shell scripting, I still assume most people will just use Bash tho: https://github.com/Vindaar/shell
* Frontend: https://github.com/karaxnim/karax or you could bind to an existing JS library.
* Backend: For something Flask-like: https://github.com/dom96/jester or something with more defaults https://github.com/planety/prologue
* Scientific computing: the wonderful SciNim https://github.com/SciNim
* Blockchain: Status has some of the biggest Nim codebases currently in production https://github.com/status-im?q=&type=&language=nim&sort=
* Gamedev: Also used in production: https://github.com/pragmagic/godot-nim and due to easy C and C++ interop, you get access to a lot of gamedev libraries!
* Embedded: this is a domain I know very little about but for example https://github.com/elcritch/nesper or https://github.com/PMunch/badger for fun Nim+embedded stuff!
Most of the disadvantages come from tooling and lack of $$$ support.
Well no language is perfect, but Nim can be used in almost every domain because of it's compilation targets(C, C++, JS) and it's fast compile times(who needs interpretation when compile times are that fast!):
* Shell scripting, I still assume most people will just use Bash tho: https://github.com/Vindaar/shell
* Frontend: https://github.com/karaxnim/karax or you could bind to an existing JS library.
* Backend: For something Flask-like: https://github.com/dom96/jester or something with more defaults https://github.com/planety/prologue
* Scientific computing: the wonderful SciNim https://github.com/SciNim
* Blockchain: Status has some of the biggest Nim codebases currently in production https://github.com/status-im?q=&type=&language=nim&sort=
* Gamedev: Also used in production: https://github.com/pragmagic/godot-nim and due to easy C and C++ interop, you get access to a lot of gamedev libraries!
* Embedded: this is a domain I know very little about but for example https://github.com/elcritch/nesper or https://github.com/PMunch/badger for fun Nim+embedded stuff!
Most of the disadvantages come from tooling and lack of $$$ support.
Nim is the most readable language I've ever seen. I've dabbled with Go, but Nim is almost like pseudocodes+types. Highly recommend you take a like, try it out! You can use libraries like https://github.com/planety/prologue or https://github.com/treeform/pixie to create something quickly and fun(compile times are faaasst!).
And Nim does not have a mandatory GC, you can go as low-level as you want, but in case you don't want that you can choose from several great GC's(a capable soft real-time GC and Boehm for example).
How to run those benchmarks?
At that Nim release page:
https://nim-lang.org/blog/2021/10/19/version-160-released.ht...
Is link to this benchmark:
https://web-frameworks-benchmark.netlify.app/result
Where nim is 2nd with 200k req/s, but it is using httpbeast:
https://github.com/dom96/httpbeast
That says it would be more useful to use jester:
https://github.com/dom96/jester
Jester has 150k req/s.
But, when looking at these:
https://www.techempower.com/benchmarks/
dragon, actix etc has about 600k req/s .
Also redbean has about 600k req/s, when I tested:
I tested like this:
git clone https://github.com/wg/wrk.git
cd wrk
./wrk -H 'Accept-Encoding: gzip' -t 12 -c 120 http://127.0.0.1:8080/
When I tested https://caddyserver.com v2, it did show about 800k req/s.
It would be very helpful to know how those benchmarks are actually done, so that I could compare what is actually fastest in real world, and not just use some for benchmark tested winning non-realistic code.
Nim has a popular ML library "inspired by Numpy and PyTorch": https://github.com/mratsim/Arraymancer
One of the advantages of the language for DS/ML is the native "C like" performance with very low developer friction.
Another advantage from a library perspective is being able to automate fast, low level boiler plate code from easy to use DSLs using AST macros. For example a DSL could generate bespoke code for different data layouts and pipelines etc., giving you the best possible performance without the user worrying about it.
I have written a bit of both, recently re-wrote a command runner for a side-project https://gitlab.com/jarv/cmdchallenge in Nim and found it very pleasant and much less verbose, which was a nice change from GoLang while keeping type safety. A good example is parsing JSON https://nim-by-example.github.io/json/ as you can do a lot with fewer lines of code. I think the main disadvantage of Nim is that there is less out there in the ecosystem, libraries, and it's more likely you will run into quirks and bugs in the standard library.
* Goroutines are probably a lot more easier to use. Work is being done to make Nim even better in that area: https://github.com/nim-works/cps but don't expect it soonish.
* I feel like Go has less 'edge cases', but the Nim compiler is steadily getting more stable, especially consider it's not backed up by a major company!
* Metaprogramming is really powerful, but not beginner friendly. The documentation says use macros when necessary, but personally I don't think that really happens in practice.
The advantages by far outweigh the disadvantages, especially if you are looking for a clean Go alternative(except maaaaaaybeee web application).
Well no language is perfect, but Nim can be used in almost every domain because of it's compilation targets(C, C++, JS) and it's fast compile times(who needs interpretation when compile times are that fast!):
* Shell scripting, I still assume most people will just use Bash tho: https://github.com/Vindaar/shell
* Frontend: https://github.com/karaxnim/karax or you could bind to an existing JS library.
* Backend: For something Flask-like: https://github.com/dom96/jester or something with more defaults https://github.com/planety/prologue
* Scientific computing: the wonderful SciNim https://github.com/SciNim
* Blockchain: Status has some of the biggest Nim codebases currently in production https://github.com/status-im?q=&type=&language=nim&sort=
* Gamedev: Also used in production: https://github.com/pragmagic/godot-nim and due to easy C and C++ interop, you get access to a lot of gamedev libraries!
* Embedded: this is a domain I know very little about but for example https://github.com/elcritch/nesper or https://github.com/PMunch/badger for fun Nim+embedded stuff!
Most of the disadvantages come from tooling and lack of $$$ support.
Well no language is perfect, but Nim can be used in almost every domain because of it's compilation targets(C, C++, JS) and it's fast compile times(who needs interpretation when compile times are that fast!):
* Shell scripting, I still assume most people will just use Bash tho: https://github.com/Vindaar/shell
* Frontend: https://github.com/karaxnim/karax or you could bind to an existing JS library.
* Backend: For something Flask-like: https://github.com/dom96/jester or something with more defaults https://github.com/planety/prologue
* Scientific computing: the wonderful SciNim https://github.com/SciNim
* Blockchain: Status has some of the biggest Nim codebases currently in production https://github.com/status-im?q=&type=&language=nim&sort=
* Gamedev: Also used in production: https://github.com/pragmagic/godot-nim and due to easy C and C++ interop, you get access to a lot of gamedev libraries!
* Embedded: this is a domain I know very little about but for example https://github.com/elcritch/nesper or https://github.com/PMunch/badger for fun Nim+embedded stuff!
Most of the disadvantages come from tooling and lack of $$$ support.
Well no language is perfect, but Nim can be used in almost every domain because of it's compilation targets(C, C++, JS) and it's fast compile times(who needs interpretation when compile times are that fast!):
* Shell scripting, I still assume most people will just use Bash tho: https://github.com/Vindaar/shell
* Frontend: https://github.com/karaxnim/karax or you could bind to an existing JS library.
* Backend: For something Flask-like: https://github.com/dom96/jester or something with more defaults https://github.com/planety/prologue
* Scientific computing: the wonderful SciNim https://github.com/SciNim
* Blockchain: Status has some of the biggest Nim codebases currently in production https://github.com/status-im?q=&type=&language=nim&sort=
* Gamedev: Also used in production: https://github.com/pragmagic/godot-nim and due to easy C and C++ interop, you get access to a lot of gamedev libraries!
* Embedded: this is a domain I know very little about but for example https://github.com/elcritch/nesper or https://github.com/PMunch/badger for fun Nim+embedded stuff!
Most of the disadvantages come from tooling and lack of $$$ support.
Well no language is perfect, but Nim can be used in almost every domain because of it's compilation targets(C, C++, JS) and it's fast compile times(who needs interpretation when compile times are that fast!):
* Shell scripting, I still assume most people will just use Bash tho: https://github.com/Vindaar/shell
* Frontend: https://github.com/karaxnim/karax or you could bind to an existing JS library.
* Backend: For something Flask-like: https://github.com/dom96/jester or something with more defaults https://github.com/planety/prologue
* Scientific computing: the wonderful SciNim https://github.com/SciNim
* Blockchain: Status has some of the biggest Nim codebases currently in production https://github.com/status-im?q=&type=&language=nim&sort=
* Gamedev: Also used in production: https://github.com/pragmagic/godot-nim and due to easy C and C++ interop, you get access to a lot of gamedev libraries!
* Embedded: this is a domain I know very little about but for example https://github.com/elcritch/nesper or https://github.com/PMunch/badger for fun Nim+embedded stuff!
Most of the disadvantages come from tooling and lack of $$$ support.
Well no language is perfect, but Nim can be used in almost every domain because of it's compilation targets(C, C++, JS) and it's fast compile times(who needs interpretation when compile times are that fast!):
* Shell scripting, I still assume most people will just use Bash tho: https://github.com/Vindaar/shell
* Frontend: https://github.com/karaxnim/karax or you could bind to an existing JS library.
* Backend: For something Flask-like: https://github.com/dom96/jester or something with more defaults https://github.com/planety/prologue
* Scientific computing: the wonderful SciNim https://github.com/SciNim
* Blockchain: Status has some of the biggest Nim codebases currently in production https://github.com/status-im?q=&type=&language=nim&sort=
* Gamedev: Also used in production: https://github.com/pragmagic/godot-nim and due to easy C and C++ interop, you get access to a lot of gamedev libraries!
* Embedded: this is a domain I know very little about but for example https://github.com/elcritch/nesper or https://github.com/PMunch/badger for fun Nim+embedded stuff!
Most of the disadvantages come from tooling and lack of $$$ support.
How to run those benchmarks?
At that Nim release page:
https://nim-lang.org/blog/2021/10/19/version-160-released.ht...
Is link to this benchmark:
https://web-frameworks-benchmark.netlify.app/result
Where nim is 2nd with 200k req/s, but it is using httpbeast:
https://github.com/dom96/httpbeast
That says it would be more useful to use jester:
https://github.com/dom96/jester
Jester has 150k req/s.
But, when looking at these:
https://www.techempower.com/benchmarks/
dragon, actix etc has about 600k req/s .
Also redbean has about 600k req/s, when I tested:
I tested like this:
git clone https://github.com/wg/wrk.git
cd wrk
./wrk -H 'Accept-Encoding: gzip' -t 12 -c 120 http://127.0.0.1:8080/
When I tested https://caddyserver.com v2, it did show about 800k req/s.
It would be very helpful to know how those benchmarks are actually done, so that I could compare what is actually fastest in real world, and not just use some for benchmark tested winning non-realistic code.
How to run those benchmarks?
At that Nim release page:
https://nim-lang.org/blog/2021/10/19/version-160-released.ht...
Is link to this benchmark:
https://web-frameworks-benchmark.netlify.app/result
Where nim is 2nd with 200k req/s, but it is using httpbeast:
https://github.com/dom96/httpbeast
That says it would be more useful to use jester:
https://github.com/dom96/jester
Jester has 150k req/s.
But, when looking at these:
https://www.techempower.com/benchmarks/
dragon, actix etc has about 600k req/s .
Also redbean has about 600k req/s, when I tested:
I tested like this:
git clone https://github.com/wg/wrk.git
cd wrk
./wrk -H 'Accept-Encoding: gzip' -t 12 -c 120 http://127.0.0.1:8080/
When I tested https://caddyserver.com v2, it did show about 800k req/s.
It would be very helpful to know how those benchmarks are actually done, so that I could compare what is actually fastest in real world, and not just use some for benchmark tested winning non-realistic code.
How to run those benchmarks?
At that Nim release page:
https://nim-lang.org/blog/2021/10/19/version-160-released.ht...
Is link to this benchmark:
https://web-frameworks-benchmark.netlify.app/result
Where nim is 2nd with 200k req/s, but it is using httpbeast:
https://github.com/dom96/httpbeast
That says it would be more useful to use jester:
https://github.com/dom96/jester
Jester has 150k req/s.
But, when looking at these:
https://www.techempower.com/benchmarks/
dragon, actix etc has about 600k req/s .
Also redbean has about 600k req/s, when I tested:
I tested like this:
git clone https://github.com/wg/wrk.git
cd wrk
./wrk -H 'Accept-Encoding: gzip' -t 12 -c 120 http://127.0.0.1:8080/
When I tested https://caddyserver.com v2, it did show about 800k req/s.
It would be very helpful to know how those benchmarks are actually done, so that I could compare what is actually fastest in real world, and not just use some for benchmark tested winning non-realistic code.
And the httpbeast code is here: https://github.com/the-benchmarker/web-frameworks/tree/maste...
https://github.com/pietroppeter/nimib
Based on that and using a book theme, scinim getting started documentation is being built, e.g.:
Being able to compile to C, C++, ObjC, and JavaScript natively (and LLVM using https://github.com/arnetheduck/nlvm ), along with an excellent FFI (including to and from Python) means you don't need to rewrite dependencies as you can use them directly. Nim is great at glue code - arguably better than Python.
Along with general language characteristics such as being high level and productive like Python, but with intricate "bare metal" control when you want it, really does make it suitable for writing almost everything.
In the ORM field, Norm[1] is an actively maintained package that supports SQLite and Postgres. It's framework agnostic, I've used it with Jester and Prologue (it had nothing to do with Prolog btw).
Among frameworks, Prologue is the most actively developed and feature rich.
Instead of beautifulsoup you're honestly better off just running an instance of Firefox/Chrome and scraping data that way. You can do fairly easily these days and I have a library that allows you to do so in Nim: https://github.com/dom96/webdriver
Or you could use Neovim with Treesitter for selections that use the language grammars.
https://github.com/nvim-treesitter/nvim-treesitter#increment...
The full changelog is here: https://github.com/nim-lang/Nim/blob/version-1-6/changelogs/...
For those who wonder what the 15 extra modules are, here's a quick summary:
*Algorithms:*
- enumutils: generate case statements from enums, and utils for holey enums.
To all those wondering about IDE support , the actively maintained VSCode extension is :
https://github.com/saem/vscode-nim
The default extension suggested by VSCode which have over 43k downloads in un-maintained for Eons and it won't work.
Here is the link : https://marketplace.visualstudio.com/items?itemName=nimsaem....
@dom96 can you pin this somewhere on the forum or website ?