There's interesting overlap between tools like `cffi` and `cython`.<p>This is one of the approaches I am pursuing to polish off something I put together recently: rapid prototyping of LD_PRELOADs in Python.<p>I presented an early approach at PyData London last week using LD_AUDIT and `cython`:
<a href="https://www.youtube.com/watch?v=L3j2qw9XZCc" rel="nofollow">https://www.youtube.com/watch?v=L3j2qw9XZCc</a><p>It doesn't seem that amazing to be able to write:<p><pre><code> @preload
def open(pathname: 'const char*', flags: 'int') -> 'int':
return __open__(pathname, flags)
</code></pre>
After all, this is only slightly more convenient syntax than in C. However, imagine how much functionality you could quickly develop with access to the Python standard library.<p>Even using my clumsy `cython` and `LD_AUDIT` approach, I was able to rapidly develop libraries that interpose file-handling library calls and implement:<p><pre><code> # `less` is used as an example of a libc programme with no concept of Python, git, &c.
$ COMMIT_HASH=abc123 gitit less test # interact with files as-of some commit in a git repo via pygit (libgit2)
$ runit less test.py # redirect read() so that the contents of the file appears to be the results emitted of having run the file
$ zipit less test.gz # redirect read()/write() to transparently handle gzip files
</code></pre>
Each one of these took about half an hour to throw together, which is substantially faster than I could reliably develop them in pure-C (not to mention how much code I avoid having to write myself by relying on Python's rich stdlib & ecosystem.)