C is not Python II.
RaSPF, my C port of PySPF, is pretty much functional right now.
Here's what I mean:
It passes 75 internal unit tests (ok, 74 , but that one is arguable).
It passes 137 of 145 tests of the SPF official test suite.
It agrees with PySPF in 181 of the 183 cases of the libspf2 live DNS suite.
It segfaults in none of the 326 test cases.
So, while there are still some corner cases to debug, it's looking very good.
I even spent some time with valgrind to plug some leaks ( the internal test suite runs almost leakless, the real app is a sieve ;-)
All in all, if I can spend a little while with it during the week, I should be able to make a release that actually works.
Then, I can rewrite my SPF plugin for qmail, which was what sent me in this month-log tangent.
As a language wars comparison:
The sloccount of raspf is 2557 (or 2272 if we use the ragel grammar source instead of the generated file)
The sloccount of PySPF is 993.
So, a 2.6:1 or 2.28:1 code ratio.
However, I used 4 non-standard C libraries: bstrlib, udns, and helpers for hashes and exceptions, which add another 5794 LOCs.
So, it could be argued as a 8:1 ratio, too, but my C code is probably verbose in extreme, and many C lines are not really "logic" but declarations and such.
Also, I did not write PySPF, so his code may be more concise, but I tried my best to copy the flow as much as possible line-per-line.
In short, you need to write, according to this case, between 2 and 8 times more code than you do in Python.
That's a bit much!
did you explore if PyPy could help you with its translation into C code?
No, I didn't. Do you think it may work?
My impression is that PyPy-generated C code is at best a vehicle for executing Python quickly. You wouldn't want to do anything else with it, like read it.