[pypy-commit] extradoc extradoc: First pass at a blog post.
alex_gaynor
noreply at buildbot.pypy.org
Sun Jul 31 00:29:37 CEST 2011
Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch: extradoc
Changeset: r3850:309e625a09c3
Date: 2011-07-30 15:29 -0700
http://bitbucket.org/pypy/extradoc/changeset/309e625a09c3/
Log: First pass at a blog post.
diff --git a/blog/draft/string-formatting.rst b/blog/draft/string-formatting.rst
new file mode 100644
--- /dev/null
+++ b/blog/draft/string-formatting.rst
@@ -0,0 +1,50 @@
+String formatting with PyPy
+===========================
+
+String formatting is probably something you do just about every day in Python,
+and never think about. It's so easy, just ``"%d %d" % (i, i)`` and you're
+done. No thinking about how to size your result buffer, whether your output
+has an appropriae NUL byte at the end, or any other details. A simple C
+equivilant might be::
+
+ char x[23];
+ sprintf(x, "%d %d", i, i);
+
+Which is fine, except you can't even return ``x`` from this function, a more
+fair comparison might be::
+
+ char *x = calloc(23, sizeof(char));
+ sprintf(x, "%d %d", i, i);
+
+``x`` is slightly overallocated in some situations, but that's fine.
+
+But we're not here to discuss the exact syntax of string formatting, we're here
+to discuss how blazing fast PyPy is at it, with the new ``unroll-if-alt``
+branch. Given the Python code::
+
+ def main():
+ for i in xrange(10000000):
+ "%d %d" % (i, i)
+
+ main()
+
+and the C code::
+
+ #include <stdio.h>
+ #include <stdlib.h>
+
+
+ int main() {
+ int i = 0;
+ char x[23];
+ for (i = 0; i < 10000000; i++) {
+ sprintf(x, "%d %d", i, i);
+ }
+ }
+
+Ran under PyPy, at the head of the ``unroll-if-alt`` branch, and compiled with
+GCC 4.5.2 at -O4 (other optimization levels were tested, this produced the best
+performance). It took .85 seconds to execute under PyPy, and 1.63 seconds with
+the compiled binary. We think this demonstrates the incredible potential of
+dynamic compilation, GCC is unable to inline or unroll the ``sprintf`` call,
+because it sits inside of libc.
\ No newline at end of file
More information about the pypy-commit
mailing list