POCO C++ Libraries
Developer(s) | Günter Obiltschnig et al. |
---|---|
Initial release | 21 February 2005[1] |
Stable release |
1.7.3
/ 2 May 2016[2] |
Written in | C++ |
Operating system | Cross-platform |
Type | library or framework |
License | Boost Software License |
Website |
pocoproject |
The POCO C++ Libraries are a collection of open source class libraries for developing network-centric, portable applications in C++. POCO stands for POrtable COmponents. The libraries cover functionality such as threads, thread synchronization, file system access, streams, shared libraries and class loading, sockets and network protocols (HTTP, FTP, SMTP, etc.), and include an HTTP server, as well as an XML parser with SAX2 and DOM interfaces and SQL database access. The modular and efficient design and implementation makes the POCO C++ Libraries well suited for embedded development.
Overview
POCO is a collection of C++ libraries providing users with library support similar to that found in other development environments, like the Java Class Library, the .NET Framework or Apple's Cocoa. POCO is centered on network-centric application domains and developed with modern ANSI/ISO Standard C++ and C++ Standard Library facilities and techniques with emphasis on powerful functionality, ease of use, and consistency. Governed primarily by code quality, consistent style and unit testing POCO is highly portable Open Source software already ported to a variety of different platforms while being released under the Boost Software License.
Hierarchy of POCO C++ Libraries
POCO C++ Libraries are currently split into five core libraries with optional add-on libraries available with each release. The design and hierarchy of POCO C++ is considered well designed.[3][4] The five core component libraries cover the following areas that can be found in the basic edition:
- Foundation
- Platform abstraction - Eases porting issues of fundamental types, etc.
- Memory management - RAII, auto_ptr, reference counting garbage collection, etc.
- String utilities
- Error handling - Extended exception classes
- streams - Encoding and decoding and filtering support
- threads - Concurrent processing support
- Date and time - Date and time support including formatting and high precision timers
- File system - Abstracted file system support
- Logging - Application and system logging, filtering and logging strategies
- Processes - Interprocess communication and memory sharing
- shared libraries - Dynamic library support
- Notifications - Abstracted notification support
- Events - Abstracted event support and strategies
- Crypt - Random number generation, Digests and encoding/decoding engines
- Text - Unicode encoding support
- Regular expressions - Based on Perl compatible regular expression
- URI - Universal Resource Identifier support
- UUID - Universally Unique Identifiers support and generators
- Cache support - Abstracted strategy support
- Net
- XML
- JSON
- APIs for reading and writing JSON
- Util
- Configuration files
- Command line options
- Tools and server application framework
One design goal of a many targeted decisions are based around POCO C++ providing an easy to use component library that works out of the box. POCO C++ Libraries are currently available in two package formats. These formats are the basic and the complete edition. While the complete edition covers NetSSL, Crypto, Zip and Data capabilities among others, the basic edition does not and thus eliminates the dependence on external facilities such as OpenSSL, ODBC and MySQL dependencies.
The open source nature of POCO enables and encourages development of additional library functionality. Design and development of existing and upcoming library support is driven by the pragmatic needs of the user base. Library additions take place in a sandbox development environment and are reviewed and integrated into the main library releases as approved by the core development team with input from contributors.
History
- 2004 - Günter Obiltschnig started POCO with the development of the class libraries as the result of being dissatisfied by what was available in C++ class libraries for network centric programming.
- February 21, 2005 - The first public release on Sourceforge, which contained the Foundation and XML support libraries. POCO was released under the Sleepycat license at the time.
- May 2005 - Aleksandar Fabijanic made the first contribution.
- January 19, 2006 - POCO 1.0 was released, including the Net library.
- July 2006 - POCO was re-licensed under the Boost license.
- May 2007 - POCO 1.3 was released, including the Data library
- December 2010 - POCO 1.4 was released, including many improvements.
- December 2014 - POCO 1.6 was released, including the JSON and MongoDB libraries and many other improvements.
POCO C++ Libraries Users[5]
- Appcelerator Titanium
- Schneider Electric Buildings (formerly TAC)
- CACE Technologies
- Mantid
- Medical Imaging Interaction Toolkit
- OpenFrameworks
- GLUEscript
- SeguriData
- Aysso Systems
- Tonido
- Gladinet
- US Army's Communications Realism Appliance (CRA)
See also
- Adaptive Communication Environment (ACE)
- Boost, a large collection of C++ libraries
- Loki
- List of C++ template libraries
- List of C++ multi-threading libraries
- PTypes (C++ Portable Types Library)[6][7]
Notes
- ↑ February 21, 2005 - The first public release on Sourceforge, which contained the Foundation and XML support libraries. POCO was released under the Sleepycat license at the time.
- ↑ "Release 1.7.3 is available". pocoproject.org. 2 May 2016. Retrieved 3 May 2016.
- ↑ http://cppdepend.wordpress.com/2009/09/24/why-poco-is-well-implemented-and-designed/
- ↑ http://accu.org/content/conf2009/ACCU2009_Bernhard_Merkle_StopTheSoftwareArchitectureErosion.pdf
- ↑ http://pocoproject.org/forum/viewtopic.php?f=11&t=3826&sid=d4ba687212ee105852f927e4ce8a5023
- ↑ "C++ Portable Types Library". Archived from the original on 2007.
- ↑ C++ Portable Types Library (PTypes) on SourceForge.net
External links
- POCO Official Website
- POCO C++ Libraries on SourceForge.net
- POCO Official Website Documentation
- POCO Library Overview
- Why POCO is well implemented and designed?
- POCO Changelog covering time lines
- Aleksandar Fabijanic, Dynamic Any, Part 1, ACCU Overload 86 (August 2008)
- Aleksandar Fabijanic, Dynamic Any, Part 2, ACCU Overload 87 (October 2008)
- CodeGuru Interview with Bjarne Stroustrup where he mentions POCO