|
The History
-
15 years of dissatisfaction (with the IOStreams) and wondering
(whether there is a better alternative to fprintf()).
-
2 giants (log4j
and
Pantheios) on whose inspirational
shoulders to stand.
-
1 powerful concept
(Shim)
married to 1 persuasive pattern
(Type Tunnel)
-
1 weekend to prove the concept
-
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.
-
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.
|
|