I created the same File Share Server in Rust ( Actix Web ), C++ ( Crow ) , Python ( Django ) and Nodejs ( Express ). The results will probably surprise you. I should note that I come from a Nodejs ( Express ) environment and I am going to be biased to Express-like frameworks.
Rust is a low-level all purposed language, it is blazingly fast with a TON of features, so many features actually that only ~10% of coders know rust. I chose Actix Web for this although I could have chosen Rocket.rs or Warp but from what I read there is no big difference between all of them. Actix follows is inspired by the Expressjs API.
C++ a 45 year old low-level object-oriented programming language that lurks in almost every electronic device today yet only 22.55% of programmers know it. There weren't many options to choose from for building this project, in fact I had 2 options: Design a library myself or use Crow. I chose Crow however one tricky thing is that are 2 versions of crow the deprecated and the maintained one, be careful to install the maintained one. Crow is actually a micro web framework, it is just a single file you import. I also used the nlohmann json library for json encoding as it came with more features.
We all know the snake. My first language and probably yours, almost 50% of coders know python and it is known to be an easy-to-learn high-level and slow language. I could have used flask as an alternative but Django came first to my mind. Django offers more features than flask, technically flask is a micro web framework meaning lightweight.
The darker color are additional lines that I thought to not count as used lines, why? For C++ the additional lines were because Crow didn't natively support "proper" file upload, so I created my own mini/micro library which is probably very slow and bad to handle the uploading. It mimics the express-fileupload library with similar functions. It is only a single 58-line header file called crow-fileupload.h . You can find the header file in the Github repo with all the other files of the servers at the end.
For python you need to do some configuration to allow static files etc. I estimated it wouldn't take more than 10 lines to add the proper config.
So the results go as following:
- Python Django: 35 + 10 = 45 lines
- Nodejs Express: 53 lines
- Rust Actix Web: 89 lines
- C++ Crow: 124 + 58 = 182 lines!
This is exciting, contradictory and logical… let me explain what I think this graph is all about. First of all Actix Web, Crow and Django perform the same so the average time range for express should have been between 40–50ms but that's not the case at all. One mistake people may make is that this graph represents how fast a language is, however, this graph represents how fast a framework is. Specifically at serving static files, not making any server side processing. Rust and C++ are faster than JS and especially Python but frameworks do not follow that pattern, they follow the pattern of popularity most times. If you need to do some crazy big computations or handle huge traffic then you may consider picking a faster language.
Here are the results:
Statistics source for most used/popular programming languages in 2022: https://www.statista.com/statistics/793628/worldwide-developer-survey-most-used-languages/ .
Github repo for this project: https://github.com/yaKsirhC/5-lang-server/tree/master