What is Omni?
Omni is an object oriented, cross-platform C++ library, with recognizable paradigms like thread objects, delegates and events, and easy to understand interfaces, Omni enables you to get clean and stable C++ code to a wider market more efficiently while lowering code maintenance costs.
The library is C++98 compliant1 using platform API's where the C++ STL or standard library can not accommodate2 and allows a developer the ability to customize the library to their needs. Omni is built and tested to have compatibility on a wide array of platforms and is designed to be compilable "out of the box", that is, after a fresh install of an OS and compiler there is nothing extra to setup or install3; just reference the latest source in your build parameters and compile!
Omni is more than a framework, it is a library of classes and procedures designed to have easy to read structures and give a functional and reusable tool set with less bloat. On top of the various build parameters, you do not need to compile the entire library and can elect to use the portions of the library you want, leaving the portions you do not. And with its open design, a developer has the option to build or edit the library to their specific needs. This gives the developer a more flexible library to utilize and work with.
Omni aims to make the complex and unique challenges of C++ software development simple and intuitive.
What is the goal?
There are many goals Omni aims for, from simple designs to standards compliance. But one of the major goals of Omni is deterministic behaviour across platforms and compilers.
A compiler can choose to do what it might want at an assembly level to build a binary but it must conform to the C++ standard if it is to be C++ compliant. As such, while the compilers we built and tested against do indeed build conformant code, some (particularly older compilers) had issues with implicitness on certain classes. So while
Similarly, certain platform specific functionality (like threading or synchronization primitives) can vary on their input and output of operations from platform to platform. For example, on Windows platforms you could use a CRITICAL_SECTION to lock an area of code while on POSIX compliant systems (like Linux) you could use a pthread_mutex_t. The
Portions of Omni started before the C++11 standard was finalized, as such, one of the original design goals of Omni was to have as much "out of the box" compatibility as possible with as many platforms and compilers as could be deemed feasible. While the new standards do address some shortcomings of the previous standards libraries, "upgrade your compiler" comes with a completely different set of issues to consider, especially in cross-platform development.
Caveats like these are what can cause build issues and slow downs in production when trying to target your software for multiple platforms, and Omni can help alleviate these problems. Utilizing Omni and its deterministic classes and functions, you do not have to waste the extra time playing detective to port your application between systems and can be sure the similar concepts (like that of a thread or mutex) are similar across platforms, ensuring you are aware of the consequences of the code across all supported platforms!
top
How did it start?
The library spawned from an appreciation for events and delegates in .NET, a great appreciation for the C++ language and a deep understanding of a gap in ease of functionally efficient cross platform programming. Dissecting the .NET Library Class Library and the Common Language Runtime (CLR) (specifically from a C# developers perspective) provided an ability to take the idioms and "ease of use" of languages like C# and Java and wrap the same contexts in a cross platform library making use of standard C++ and OS/platform API's. Omni is more than a set of functions to be linked against; it is designed to afford a user of the library more resources to develop with while using less on design overhead and maintenance.
top
Where is it heading?
Omni is designed to afford a user of the library more resources to develop while using less on design overhead and maintenance. From the delegate and event system to the timers and threads, Omni has begun to grow into a full cross platform library with the intentions to provide simple to implement C++ code.
Currently the library is still in Beta while the documentation and base classes are ironed out and finalized. Once the base classes have been vetted and thoroughly tested, goals for future development include databases, various text parsers (like HTML and regular expressions), and user interface development.
top
Why no pre-built libraries?
Choosing to develop with C++ can be a daunting undertaking considering the wide array of platforms and capabilities each support. Ensuring you have the right libraries and call the appropriate API for the system you want affects more than just design decisions, it affects its re-usability, maintainability and time to market to name just a few. While pre-compiled libraries are convenient, it can add an extra layer of confusion in the over all process.
Including the full source in your project allows you the control of how your projects will be built, including building your own 'Omni libraries' you can then customize and use as needed. You can visit the options page for more details on how you can customize the library and you can visit the build section for more on compiling the library. For more information about which platforms are currently supported, you can visit the cross platform section.
top
Licensing
The Omni library has a permissive free license which allows any user of the code to easily integrate the library as part of their works. This license was chosen to allow greater flexibility in how you see fit to use the code. Open source, closed source, government, finance, web, any area can easily be subject to a number of other licenses or other legal confusion and we'd rather avoid that and just give you solid reusable code. We also feel that Omni can help someone grasp some of the finer points of C++ by giving a familiar context to understand (e.g. coming from a .NET or Java background, Omni seems rather familiar); providing the source in an easy to use format, a budding engineer can pick up the code and gain a deeper understanding for both C++ and system level programming. The license we've chosen helps us reach our goals of enabling and educating, both our users and ourselves.
top
If you have questions, comments or concerns about the library or would like a further breakdown of a specific aspect please feel free to contact the Omni Q&A email
top
NOTES:
1.) C++98 ISO/IEC 14882:1998
2.) Some functionality is not in the standards library, other functionality is only in later versions and specifying certain compile options can allow the library to be built with C++11/14/17 extensions enabled, as well as various other build options.
3.) Nothing extra to install except the necessary compiler and system libraries if not installed with the compiler or included with the platform.
top
Omni is an object oriented, cross-platform C++ library, with recognizable paradigms like thread objects, delegates and events, and easy to understand interfaces, Omni enables you to get clean and stable C++ code to a wider market more efficiently while lowering code maintenance costs.
The library is C++98 compliant1 using platform API's where the C++ STL or standard library can not accommodate2 and allows a developer the ability to customize the library to their needs. Omni is built and tested to have compatibility on a wide array of platforms and is designed to be compilable "out of the box", that is, after a fresh install of an OS and compiler there is nothing extra to setup or install3; just reference the latest source in your build parameters and compile!
Omni is more than a framework, it is a library of classes and procedures designed to have easy to read structures and give a functional and reusable tool set with less bloat. On top of the various build parameters, you do not need to compile the entire library and can elect to use the portions of the library you want, leaving the portions you do not. And with its open design, a developer has the option to build or edit the library to their specific needs. This gives the developer a more flexible library to utilize and work with.
Omni aims to make the complex and unique challenges of C++ software development simple and intuitive.
What is the goal?
There are many goals Omni aims for, from simple designs to standards compliance. But one of the major goals of Omni is deterministic behaviour across platforms and compilers.
A compiler can choose to do what it might want at an assembly level to build a binary but it must conform to the C++ standard if it is to be C++ compliant. As such, while the compilers we built and tested against do indeed build conformant code, some (particularly older compilers) had issues with implicitness on certain classes. So while
std::bitset<8>(42).to_string()
might build without error on one compiler, another could complain about the
to_string
function; to which we had to adjust the code to read
std::bitset<8>(42).to_string<char, std::char_traits<char>, std::allocator<char> >()
.Similarly, certain platform specific functionality (like threading or synchronization primitives) can vary on their input and output of operations from platform to platform. For example, on Windows platforms you could use a CRITICAL_SECTION to lock an area of code while on POSIX compliant systems (like Linux) you could use a pthread_mutex_t. The
pthread_mutex_t
is, by default, a non-recursive lock, so if the same thread were to call lock
twice
in a row, a deadlock will occur and the application will hang. This differs from the CRITICAL_SECTION
which is re-entrant,
so a thread can call lock
twice in a row without a deadlock. In this specific instance the
omni::sync::mutex
ensures that the underlying mutex is a recursive mutex to not have a deadlock situation arise and have similar functionality across
platforms.Portions of Omni started before the C++11 standard was finalized, as such, one of the original design goals of Omni was to have as much "out of the box" compatibility as possible with as many platforms and compilers as could be deemed feasible. While the new standards do address some shortcomings of the previous standards libraries, "upgrade your compiler" comes with a completely different set of issues to consider, especially in cross-platform development.
Caveats like these are what can cause build issues and slow downs in production when trying to target your software for multiple platforms, and Omni can help alleviate these problems. Utilizing Omni and its deterministic classes and functions, you do not have to waste the extra time playing detective to port your application between systems and can be sure the similar concepts (like that of a thread or mutex) are similar across platforms, ensuring you are aware of the consequences of the code across all supported platforms!
top
How did it start?
The library spawned from an appreciation for events and delegates in .NET, a great appreciation for the C++ language and a deep understanding of a gap in ease of functionally efficient cross platform programming. Dissecting the .NET Library Class Library and the Common Language Runtime (CLR) (specifically from a C# developers perspective) provided an ability to take the idioms and "ease of use" of languages like C# and Java and wrap the same contexts in a cross platform library making use of standard C++ and OS/platform API's. Omni is more than a set of functions to be linked against; it is designed to afford a user of the library more resources to develop with while using less on design overhead and maintenance.
top
Where is it heading?
Omni is designed to afford a user of the library more resources to develop while using less on design overhead and maintenance. From the delegate and event system to the timers and threads, Omni has begun to grow into a full cross platform library with the intentions to provide simple to implement C++ code.
Currently the library is still in Beta while the documentation and base classes are ironed out and finalized. Once the base classes have been vetted and thoroughly tested, goals for future development include databases, various text parsers (like HTML and regular expressions), and user interface development.
top
Why no pre-built libraries?
Choosing to develop with C++ can be a daunting undertaking considering the wide array of platforms and capabilities each support. Ensuring you have the right libraries and call the appropriate API for the system you want affects more than just design decisions, it affects its re-usability, maintainability and time to market to name just a few. While pre-compiled libraries are convenient, it can add an extra layer of confusion in the over all process.
Including the full source in your project allows you the control of how your projects will be built, including building your own 'Omni libraries' you can then customize and use as needed. You can visit the options page for more details on how you can customize the library and you can visit the build section for more on compiling the library. For more information about which platforms are currently supported, you can visit the cross platform section.
top
Licensing
The Omni library has a permissive free license which allows any user of the code to easily integrate the library as part of their works. This license was chosen to allow greater flexibility in how you see fit to use the code. Open source, closed source, government, finance, web, any area can easily be subject to a number of other licenses or other legal confusion and we'd rather avoid that and just give you solid reusable code. We also feel that Omni can help someone grasp some of the finer points of C++ by giving a familiar context to understand (e.g. coming from a .NET or Java background, Omni seems rather familiar); providing the source in an easy to use format, a budding engineer can pick up the code and gain a deeper understanding for both C++ and system level programming. The license we've chosen helps us reach our goals of enabling and educating, both our users and ourselves.
top
If you have questions, comments or concerns about the library or would like a further breakdown of a specific aspect please feel free to contact the Omni Q&A email
top
NOTES:
1.) C++98 ISO/IEC 14882:1998
2.) Some functionality is not in the standards library, other functionality is only in later versions and specifying certain compile options can allow the library to be built with C++11/14/17 extensions enabled, as well as various other build options.
3.) Nothing extra to install except the necessary compiler and system libraries if not installed with the compiler or included with the platform.
top