The POrtable COmponents (POCO) C++ Libraries are computer software, a set of class libraries for developing computer network-centric, portable applications in the programming language C++. The libraries cover functions such as threads, thread synchronizing, file system access, streams, shared libraries and class loading, Internet sockets, and network communications protocols (HTTP, FTP, SMTP, etc.), and include an HTTP server, and an XML parser with SAX2 and DOM interfaces and SQL database access. The modular and efficient design and implementation makes the libraries well suited for embedded system development.

POCO C++ Libraries
Developer(s)Günter Obiltschnig, et al.
Initial releaseFebruary 21, 2005; 19 years ago (2005-02-21)[1]
Stable release
1.13.3[2] / 2024-04-06[±]
RepositoryPOCO Repository
Written inC++
Operating systemCross-platform:
Desktop-server: Windows, Linux, macOS, Solaris, HP-UX, AIX
Embedded-mobile: Windows Embedded Compact, embedded Linux, Android, iOS, QNX, VxWorks
PlatformARM, IA-32, x86-64
Available inEnglish
Typelibrary or framework
LicenseBoost Software 1.0
Websitepocoproject.org

The libraries are free and open-source software distributed under the Boost Software License 1.0.

Overview

edit

POCO is a set of C++ libraries providing users with library support similar to that found in other development environments, like the Java Class Library, .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, and already ported to a variety of different platforms.

History

edit

Library hierarchy

edit

As of 2017, POCO C++ Libraries are 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 – Resource Acquisition Is Initialization (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
  • sockets – Abstracted low level network support
  • Reactor pattern – Popular network abstraction pattern support
  • MIME messages – Encoding support
  • HTTP – High level HTTP support for client and servers
  • FTP – High level FTP support
  • Mail – POP3, SMTP stream based support
  • HTML – Form support
XML
JSON
  • APIs for reading and writing JSON
Util
  • Configuration files
  • Command line options
  • Tools and server application framework

One design goal of many targeted decisions are based around POCO C++ providing an easy to use component library that works out of the box. As of 2017, the libraries are available in two package formats: the basic and the complete editions. The complete edition covers NetSSL, Crypto, Zip, and Data abilities, among others. The basic edition does not, and thus eliminates dependence on external facilities such as OpenSSL, ODBC, and MySQL dependencies.

Being open source enables and encourages development of further library functions. Design and development of existing and upcoming library support is driven by the pragmatic needs of the user base. Library additions occur 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.

Release history

edit
  • 2004 – Günter Obiltschnig began POCO by developing the class libraries because of being dissatisfied by what was available in C++ class libraries for network centric programming.
  • February 21, 2005 – The first public release on SourceForge, under the Sleepycat License, contained the Foundation and XML support libraries.
  • May 2005 – Aleksandar Fabijanic made the first contribution.
  • January 19, 2006 – POCO 1.0 was released, including the Net library.
  • July 2006 – POCO was relicensed 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.
  • March 2016 – POCO 1.7 was released, including many improvements.
  • March 2018 - POCO 1.9 was released, including support for internationalized Domain Names and additions to supported text encodings.

Users

edit

Users include:[5]

See also

edit

References

edit
  1. ^ February 21, 2005: The first public release on SourceForge, under the Sleepycat License, contained the Foundation and XML support libraries.
  2. ^ "Releases - pocoproject/poco". Retrieved 2024-07-10.
  3. ^ "Why POCO is well implemented and designed?". 24 September 2009.
  4. ^ Merkle, Bernhard. Stop the Software Architecture Erosion (PDF). ACCU 2009. Retrieved July 12, 2024.
  5. ^ "View topic - List of known POCO C++ Libraries Users | POCO C++ Libraries Forum". Archived from the original on 2013-08-26. Retrieved 2011-02-01.
edit