FastFormat

fast:
        -  firm against attack; impregnable; strong; not loose, unstable, or easily moved; not easily disturbed or broken
        -  swift; rapid; quick in motion
Links
Home
Download
SourceForge Project Website
Blog
Documentation
Help Forum
Request FastFormat training
Donate
Performance
Memory Guessing Game
STLSoft
Pantheios
 

Ultimate robustness!

  • 100% type-safe

Unlimited flexibility!

  • infinitely extensible

Unbeatable performance!

  • 5 - 17 times faster than Boost.Format
  • 1.5 - 5.5 times faster than Loki.SafeFormat

The History

  1. 15 years of dissatisfaction (with the IOStreams) and wondering (whether there is a better alternative to fprintf()).
  2. 2 giants (log4j and Pantheios) on whose inspirational shoulders to stand.
  3. 1 powerful concept (Shim) married to 1 persuasive pattern (Type Tunnel)
  4. 1 weekend to prove the concept
  5. Almost 2 years faffing around with work, and Pantheios, and Extended STL, and Monolith*, and so on before getting my act together and releasing it.
  6. The rest of my C++ programming life to enjoy fast, extensible, localised and 100% type-safe text formatting/output.

The Alternative

Are you dissatisfied with the usability, performance, lack of type-safety, and lack of / difficulty with extensibility of the printf()-family, Boost.Format and the IOStreams?

Do you value speed, robustness and internationalisation support?

If the answer to these questions is yes, meet FastFormat, the best C++ output/formatting library you'll ever use. It has:

  • Very high robustness, including 100% type-safety. It is more robust than: C's Streams, C++'s IOStreams, Boost.Format and Loki.SafeFormat. Indeed, with the FastFormat.Write API it is impossible to write defective client code!
  • Very high efficiency. It is faster than: C++'s IOStreams (by ~100-900%), Boost.Format (by ~400-1600%) and Loki.SafeFormat (by ~35-450%). Verify the performance claims for yourself: just type "make test.performance"!
  • Infinite extensibility. You can extend it to work with any argument type, any output/destination type, and with any format type
  • I18N/L10N capabilities. The FastFormat.Format API is a replacement-based API (like the printf()-family, Boost.Format and Loki.SafeFormat), and supports the runtime specification of format strings which facilitates L10N
  • Simple syntax. There are no overloaded operators, no weird insertion operators/operations, and no need to prep your arguments. Just write simple, clear, transparent code, without sacrificing expressiveness for flexibility.
  • Atomic operation. It doesn't write out statement elements one at a time, like the IOStreams, so has no atomicity issues
  • Thread safety. Each statement operates independently from all others, and it works successfully in single and/or multithreaded scenarios
  • Highly portable. It will work with all good modern C++ compilers; it even works with Visual C++ 6!

And it does all of this without macros, operator overloading or template meta-programming tricks.


News

22nd June 2010   FastFormat 0.6.1 (alpha 1) is released. Version 0.6.1 (alpha 1) incorporates performance optimisations in the application layer templates for all statements, and to the conversion of default-formatted integers. More details ...
June 2010   Dr. Dobb's has published the article C++ and format_iterator, which describes the design and implmentation of a flexible, expressive and type-safe output iterator component, which can be used in preference to std::ostream_iterator.
13th April 2010   FastFormat 0.5.6 is released. Version 0.5.6 adds support for '#' fill character, as well as providing greater detection (and rejecton) of defective format specifications. More details ...
June 2009   The June issue of the ACCU's Overload magazine contains An Introduction to FastFormat, part 3: Solving Real Problems, Quickly. This is the third in a series of three articles about FastFormat that examine the current alternatives in C++ formatting, and demonstrate how FastFormat provides an optimal mix of robustness, efficiency, flexibility, expressiveness and other software quality measures.
1st May 2009   FastFormat 0.3.5 is released. Version 0.3.5 is a full (non-alpha, non-beta) release, and provides full compatibility with GCC, Visual C++, and several other popular compilers on 32- and 64-bit Mac OS-X, UNIX, and Windows.
April 2009   The April issue of the ACCU's Overload magazine contains An Introduction to FastFormat, part 2: Custom Argument and Sink Types. This is the second in a series of three articles about FastFormat that examine the current alternatives in C++ formatting, and demonstrate how FastFormat provides an optimal mix of robustness, efficiency, flexibility, expressiveness and other software quality measures.
February 2009   The February issue of the ACCU's Overload magazine contains An Introduction to FastFormat, part 1: The State of the Art. This is the first in a series of three articles about FastFormat that examine the current alternatives in C++ formatting, and demonstrate how FastFormat provides an optimal mix of robustness, efficiency, flexibility, expressiveness and other software quality measures.

There're a couple of typos in Table 4, which are corrected here.
13th February 2009   FastFormat 0.3.1 beta 3 is released. Version 0.3 includes the ability to specify min-width and/or max-width and/or alignment; beta 3 provides full compatibility with Borland 6.1
28th December 2008   FastFormat 0.2.1 beta 6 is released. It now contains comparisons - favourable ones, as you'd expect - with Loki's SafeFormat, to accompany those with Boost, C's Streams and C++'s IOStreams
3rd September 2008   FastFormat 0.2.1 (alpha 1) is released.

Support This Project    * Availability of FastFormat was been held up by the world of work, and by preparation phase of the book Breaking Up The Monolith: Advanced C++ Design Without Compromise, which should be completed before end of Q2 2010. Monolith discusses various concepts, patterns, practices and principles which, when applied, may be used to create high-quality libraries such as FastFormat and Pantheios    Valid XHTML 1.0 Transitional