You don't make that point. You instead make the point that calling C code with glue code is slower than C code alone, and the performance hit of using Python as glue code in your case is a 2x slowdown.
The disclaimer section (which contains this information) was added 44 minutes ago. And it's still misleading. For example about hiredis you write:
> Python extension that wraps protocol parsing code in hiredis.
Where is the mention that the parsing code is actually C code?
------
Last but not least you already posted this a year ago on Reddit[1] and Hacker News[2] (edit: someone else did for HN), but only (partially) addressed criticism very recently.
[1] https://www.reddit.com/r/Python/comments/awav6k/pydis_a_redi...
I am not the one who posted here, why so aggressive?
Do not merge that. I once realized that grep is really fast, and replaced our custom solution with bash script, but I still claim that app is written in idiomatic PHP/python/ruby. This project has a lot of problems that it depends on C code is only a symptom. Noting all those bad things in a project Readme is a trap I fall into way to often it never works.
Mostly the latter but also a bit of the former: I could have optimised it further — at the expense of idiomaticity — but I believe gains would be marginal. Other than that, Python is not that fast so you pay some penalties there too.
> pydis is an experiment to disprove some of the falsehoods about performance
and your comment:
> The point I am trying to make is that, Python with C extensions can be as considerably performant as C code for network or memory bound tasks.
So your point is regarding the falsehood belief that python with heavy use of C extensions is (not) much slower (in this case ~60%) than C? I don't think that such a falsehood belief exists and therefore pydis disproves nothing.
The entire purpose is to demonstrate that you can build a reasonable performance application built on high performance libraries and stick with idiomatic Python code.
1) Write Redis in C. Hard for some devs who only know Python, but good performance.
2) Write Redis in Python with C libraries. Doable for a Python dev, performance hit.
3) Write Redis in pure Python. A fun experiment to see the performance limitations of Python when compared to C running on the same machine.
It feels a bit sensationalist to me, and I see this all the time with projects these days. It's kind of disappointing.
However, if the experiment in question is, "using python glue code, can a developer string together a service that replicates the functionality of redis", then that illustrates what would actually happen in the real world.
For example, for a very junior Python developer, writing something in C is basically like asking a C developer to write assembly- possible, but they'd have to learn a lot of different things to do it.
Similarly, when I write Java, I want to be calling Arrays.sort(myarray) instead of writing my own sort (if the focus is on developer convenience and development velocity).
So, it's just a difference in what you're desiring to measure.
"Decent" is a weasel word, which suggests that the performance hit of following this approach is tolerable or acceptable. Sometimes it is, sometimes it isn't. It really depends on where you place the glue code, and where you expect the hot path to be.
In the case of a self-described "Redis clone" which ends up being Redis itself glued back together with Python, I'm not sure you can make that case.
> The entire purpose is to demonstrate that you can build a reasonable performance application built on high performance libraries and stick with idiomatic Python code.
I'm sorry to say but that isn't much of a demonstration. I mean, Python is already widely used as glue code to hold together high performance libraries, and it's already widely known and understood that gluing together code with Python brings in a significant performance hit. And that's ok, because people do it as a tradeoff between performance and some other kind of value-added.
But in this case I fail to see what value-added is being proposed, other than the personal portfolio side of things.
Well, your claim is that the author has missed the point, because I just quoted the authors point and his intended purpose. So I guess we both agree.
You don't think such a falsehood belief exists, therefore you don't think pydis disproves anything.
On some level, it's like complaining that C# is just using C++ modules because the CLR that interprets the C# byte-code is written in C++.
But it misses the point. You wrote this in Python and you were able to leverage the speed of a much more complicate language for your benefit. Without touching the lower language and without worrying about it's memory-management or lib dependencies. This is a win, and it's part of the beauty of programming!
Btw, my compliments to you on writing this! Really cool project/poc.
> In the past year I think I have finally come to understand the ideals of Unix: file descriptors and processes orchestrated with C. It's a beautiful idea.
We just keep moving up the stack, it seems :)
Source: https://gist.github.com/cookrn/4015437
(edit: formatting)
Copying my comment from the previous submission[x]:
This was a quite common criticism over r/Python[0] as well, saying that using C modules and then benchmarking "Python" with C isn't fair.
Perhaps it was my wording that caused this confusion, for which I am sorry, but I never meant to compare "pure" Python with C. The point I am trying to make is that, Python with C extensions can be as considerably[1] performant as C code for network or memory bound tasks.
[0]: https://www.reddit.com/r/Python/comments/awav6k/pydis_a_redi...
[1]: It's of course controversial whether 60% throughput is considerable or not.
[x]: https://news.ycombinator.com/item?id=19293590