Why using a framework ? What is the scope of the proposed framework ? How to use it ? How not to use it ?

A framework is nothing more than a set of tools, sometimes with some rules to respect for their usage. It make life easier for developers by allowing them to take advantage of those tools, from a single platform. Advantages of using a software framework:
  • Assists in establishing better programming practices and fitting use of design patterns.
  • Code is more secure.
  • Duplicate and redundant code can be avoided.
  • Helps consistent developing code with fewer bugs.
  • Makes it easier to work on sophisticated technologies.
  • One could create their software framework or contribute to open-source frameworks. Hence, there is a continuous improvement in the functionality.
  • Several code segments and functionalities are pre-built and pre-tested. This makes applications more reliable.
  • Testing and debugging the code is a lot easier and can be done even by developers who do not own the code.
  • The time required to develop an application is reduced significantly.

Software frameworks are designed to be universal, and reusable to provide functionality as part of a larger software platform, this then facilitates the development of software applications, products, and solutions. Put simply, a software framework should serve the purpose of making it easy to create new software.

The proposed C++ framework comes with a ‘core library’ that provides:
  • Utility classes: Centralized commonly used algorithms
  • Common interfaces (IStartable, IValue, etc…)
  • Design patterns helpers (Listeners, MachineState, Dynamic Invokation, …etc…)
  • Standard Types Wrappers (Ready to serialize or to be dynamically invoked)
  • Python Scripting engine
  • Reflexivity / Introspection
  • Easy Serialization
  • Threading management (Priority, Scheduling, Synchronization, Cyclic Tasks)
  • Specific thread-safe objects model wrappers

This Core Library depends on boost (at least version 1.75 with following components: system serialization python thread chrono json).

The C++ version of the framework is not really intrusive, and lightweight. Mainly adding interfaces and maccros (header files) that can be overwritten or extracted at any time.

And two optional libraries:
  • LibLoader: Libraries runtime-linking (for Plugins systems)
  • Sockets and Applicative Protocol management (For UD / TCP / TLS / WebSockets)

The Sockets libraries are based on ‘boost::asio’ and ‘botan’ (for TLS).