AlexWorx/ALib-Class-Library

GitHub: AlexWorx/ALib-Class-Library

ALib 是一个模块化的现代 C++20/23 框架,提供工业级基础设施组件以简化应用开发并增强可维护性。

Stars: 10 | Forks: 3

## 摘要 **ALib C++框架**为现代C++20应用程序提供工业级基础设施组件,包括日志记录、格式化、内存管理、配置系统、表达式解析和诊断功能。 其使命是提供可复用的基础设施、诊断工具、实用程序,以及与现代C++应用程序相关的开发模式。 **ALib**采用模块化设计,用户可根据需要选择性地包含可用模块的子集来自定义构建框架。 ## 为何选择ALib? 其核心关注点在于: - 高运行时效率 - 低内存分配开销 - 模块化集成(按需选择) - 跨平台一致性 - 深度调试能力 **ALib**整合了通常分散在多个库中的功能,例如 spdlog、fmt、Boost、CLI11、magic_enum、Abseil、folly、exprtk, 以及专用的诊断、配置、分配器和实用工具框架。 对于许多C++20应用程序而言,**ALib**可能是集成度更高的替代方案。 ALib尤其适用于: - 小型和大型原生C++应用程序 - 工具和基础设施软件 - 对性能敏感的系统 - 长期维护的企业代码库 - 需要大量诊断的开发环境 ## 本版本新增内容 除了许多小型改进外,我们增加了外部资源格式定义, 并引入了相应的资源编译器以生成C++代码。 所有变更的详细信息请参见[更新日志](https://alib.dev/alib_changelog.html)。 ## ALib 主页 请访问[ALib 主页](https://alib.dev)获取关于 **ALib for C++** 的全部信息,包括 * **程序员手册** * **参考文档** * **教程** * **项目设置指南** * **版本历史/更新日志** ## 快速示例 ``` #include "ALib.Bootstrap.H" #include "ALib.Lang.CIFunctions.H" #include "ALib.Expressions.H" int main( int, const char ** ) { alib::Bootstrap(); alib::Compiler compiler; compiler.SetupDefaults(); alib::Expression expression = compiler.Compile( "40+2 * 3-4" ); Log_Info( "Input: {!Q}", expression->GetOriginalString() ) Log_Info( "Normalized: {!Q}", expression->GetNormalizedString() ) Log_Info( "Optimized: {!Q}", expression->GetOptimizedString() ) alib::expressions::Scope scope( compiler.CfgFormatter ); Log_Info( "Result: " , expression->Evaluate( scope ) ) alib::Shutdown(); return 0; } ``` 输出如下: ``` sample.cpp:13: main [0.000 +--- ][PROCESS][/] #002: Input: "40+2 * 3-4" sample.cpp:14: main [0.000 +--- ][PROCESS][/] #003: Normalized: "40 + (2 * 3) - 4" sample.cpp:15: main [0.000 +--- ][PROCESS][/] #004: Optimized: "42" sample.cpp:18: main [0.000 +--- ][PROCESS][/] #005: Result: 42 ``` 这个简单的示例已经展示了**ALib**的几个核心能力: - 启动引导与生命周期管理 - 表达式解析(可扩展自定义函数和上下文变量) - 日志记录 - 格式化 - 装箱(功能远超std::any) - 类型擦除 - 运行时诊断 ## 功能亮点部分一览: - [ALib Strings](https://alib.dev/alib_mod_strings.html):字符串类型,接口类似Java/C#,兼容任何“类似字符串”的对象。(技术上通过C++20概念实现)。 - [ALib Boxing](https://alib.dev/alib_mod_boxing.html):可将其视为“增强版的std::any”。 - [ALib Enums](https://alib.dev/alib_mod_enums.html):终于,我们得到了期待中的C++枚举功能。 - [ALib Monomem](https://alib.dev/alib_mods_contmono.html):带回收的单调分配。何必使用那个非常慢的堆呢? - [ALib ALox](https://alib.dev/alib_mod_alox.html):高性能日志记录,支持深度诊断。 - [ALib App](https://alib.dev/alib_mod_app.html):具有结构化执行设计和命令行解析的应用程序。 - [ALib Bitbuffer](https://alib.dev/alib_mod_bitbuffer.html):编写比特流而非人类可读文本。 - [ALib Expressions](https://alib.dev/alib_mod_expressions.html):类型安全的运行时表达式编译器。轻松扩展以支持您的自定义表达式函数。130多个(可选)预定义函数(数学、字符串比较、日期/时间等)。 - [ALib Variables](https://alib.dev/alib_mod_variables.html):用于C++的运行时变量。 其优先级管理允许硬编码默认值,并允许它们被配置文件、环境变量或命令行参数覆盖。 - [ALib FileTree](https://alib.dev/alib_mod_filetree.html):目录和文件扫描器(支持运行时表达式)。 - [ALib Format](https://alib.dev/alib_mod_format.html):使用类似Python或Java的语法格式化字符串。 - [ALib Threads](https://alib.dev/alib_mod_threads.html):线程诊断与死锁检测。 - [ALib ThreadModel](https://alib.dev/alib_mod_threadmodel.html):动态线程池实现, 具有优先级作业管理的专用工作线程,以及周期性事件触发。 - 最后但同样重要的是:更多工具,例如管理C++软件的启动引导、外部化资源、 配置数据、在Windows DLL中实现单例模式,... ## IDE / 构建系统设置 当前版本在以下平台组合上通过测试: - GNU/Linux Arch 7.0.5, Clang++ 21.1.5, C++20/23, 32位/64位
(主要开发平台) - GNU/Linux Arch 7.0.5, GNU C++ 16.1.1, C++20/23, 32位/64位 - WindowsOS 11, MSC 19.51 (Visual Studio 2026 Insiders), C++20, 32位/64位 - WindowsOS 11, MinGW, 64位, GCC 13.47, C++20 - macOS Tahoe 26.4.1, Apple M2 / ARM64, Apple Clang 21.0.0, C++20/23, 64位 - Raspberry 3, aarch64, Cortex-A53, GNU C++ 12.2.0, C++20/23 - Raspberry 4, aarch64, Cortex-A72, GNU C++ 14.2.0, C++20/23 - Raspberry 4, armhf (32位), Cortex-A72, GNU C++ 12.2.0, C++20/23 程序员手册中有专门章节详细介绍如何在您的C++环境中编译和使用**ALib**。 ## 文档 提供以下文档: 1. 一份[通用框架手册](https://alib.dev/alib_manual.html),描述**ALib**的结构、编译、启动引导等。 2. 分模块的[程序员手册](https://alib.dev/alib_manual.html#alib_manual_modules_table)随[ALib主页](https://alib.dev)发布!每个**ALib**模块都有一本专用手册。 这些手册结构清晰,提供**分步源代码教程**,并有时就ALib模块重要功能的设计决策和整体原理进行深入讨论。 3. [参考文档](https://alib.dev/annotated.html)覆盖100%提供的类型、成员、函数、命名空间、宏等。简言之,**每一个C++实体都有文档记录**。 4. 详细的版本历史,记录了每一次接口变更,可在[更新日志](https://alib.dev/alib_changelog.html)中找到。 5. 所有文档都充分利用了[Doxygen](https://doxygen.nl)(行业标准)的全部功能。 因此,库接口的变更总能被检测和修正。 大多数**代码示例**作为单元测试实现,因此在编译文档时会进行测试。代码示例的输出文本大多也同样如此。 (参见[此处示例](https://alib.dev/alib_mod_expressions.html#alib_expressions_calculator))。 总结:**ALib**附带了一本**完整的文档书籍**,如果打印出来,将超过**1000页**。所有内容都已详细解释,适合初学者和专家! ## 许可证 **ALib**是自由软件,可以[从Github下载](https://github.com/AlexWorx/ALib-Class-Library)。 从2605版本开始,**ALib**根据[MIT许可证](LICENSE)授权。 从Boost软件许可证1.0变更为MIT许可证,旨在简化未来第三方MIT许可组件在**ALib**内部的集成和调整。 先前版本在Boost软件许可证1.0下仍可用。 ## 主要特征和设计目标 - **ALib**是**自由软件**。 - 支持**C++20和C++23**标准编译。 - **模块化**:可选择性使用和编译框架。 - 提供详尽的**文档**。 - **最小侵入性**:设计上尽可能保持用户代码独立于**ALib**的类型和惯用法。 - 设计上追求**易用性**。 当功能变得复杂时,它们被隐藏在默认行为之后,只有深入研究的用户才能使用。 例如,通过查阅程序员手册的详细章节。每个模块都有独立手册。 - 在**GNU/Linux**、**Windows OS**、**macOS**和**Raspberry Pi**设备上开发并持续测试。有关当前版本的详细信息,请参见下方章节。 ## 无依赖 **ALib**无需强制的第三方依赖即可构建。 存在可选的集成。例如,如果[boost](https://www.boost.org)可用,**ALib Strings**将使用其正则表达式搜索。 相反,**ALib**为第三方库(例如[QT类库](https://www.qt.io))提供可选的兼容性头文件,例如提供**ALib**类型特征对QT类型的适配。 ## 贡献 我们欢迎社区的意见和贡献。 为清晰起见,贡献必须在MIT许可证(或更宽松的许可证)下提供。 ## ALib 的 C# 和 Java 版本 历史上,ALib的部分功能也用C#和Java开发过。 这些项目目前未维护,但仍然可用作参考实现和实验性的兄弟项目。 主要且持续维护的版本是ALib for C++。 **ALib for C#**和**ALib for Java**包含并随跨平台的[ALox日志库](https://alexworx.github.io/ALox-Logging-Library/)分发。 ## 鸣谢 我们向所有过去和现在帮助实现这个项目的支持者表示感谢。 此外,还要感谢数百万自由软件的支持者,包括: - [GNU/Linux](https://gnu.org)项目及其社区, - [LLVM/Clang](http://llvm.org/)项目, - [CMake](https://cmake.org/)项目, - 感谢**Dimitri van Heesch**提供了出色的文档软件[Doxygen](http://doxygen.nl)。 - 感谢[JetBrains](https://www.jetbrains.com)公司为开源开发者提供其卓越且无与伦比的多种编程语言IDE的[免费许可证](https://www.jetbrains.com/buy/opensource/)。 - [QT Creator](http://doc.qt.io/qtcreator)团队, - 感谢微软提供[Visual Studio Community Edition](https://www.visualstudio.com/vs/community/)项目, - 感谢[Uniki GmbH](https://uniki.de)支持跨平台兼容性测试。 ## 所有信息 请访问[ALib主页](https://alib.dev)!
标签:C++20, C++23, Clang 支持, C++ 框架, SOC Prime, 代码生成, 企业级应用, 低开销库, 内存管理, 可重用代码, 基础设施库, 安全意识培训, 工业级组件, 工具链, 开发工具, 文件扫描, 格式化库, 模块化设计, 模块编译, 渗透测试工具, 现代 C++, 网页爬虫, 自动化修复, 表达式解析, 诊断工具, 调试日志, 资源编译器, 跨平台开发, 配置系统, 高性能 C++