Skip to main content

lang-cpp

Provides software engineering patterns in modern C++ based on the international standard ISO/IEC 14882 (focusing on C++23 - ISO/IEC 14882:2024, C++20, C++17, and C++14) and the documentation at en.cppreference.com, covering RAII, Smart Pointers, Concepts, Modules, Coroutines, std::expected, std::print, Ranges, CMake, and the C++ Core Guidelines.

معلومات المصدر

المستودع
dandgabr/Coacus
آخر نشاط في المصدر
٢٨ سبتمبر ٢٠٢٦ في ١٤:٠٣
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٦
التفرعات
٥

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

مستكشف الملفات
5 ملفات

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
lang-cpp
description
Provides software engineering patterns in modern C++ based on the international standard ISO/IEC 14882 (focusing on C++23 - ISO/IEC 14882:2024, C++20, C++17, and C++14) and the documentation at en.cppreference.com, covering RAII, Smart Pointers, Concepts, Modules, Coroutines, std::expected, std::print, Ranges, CMake, and the C++ Core Guidelines.
# AI Skill: Modern C++ Engineering (ISO/IEC 14882 Specialist) This skill guides the AI to act as a specialist in the **modern C++** language, relying strictly on the official international standard **ISO/IEC 14882** and the technical references at [en.cppreference.com](https://en.cppreference.com/). The focus spans the most recent revision, **C++23 (ISO/IEC 14882:2024)**, **C++20 (ISO/IEC 14882:2020)**, C++17, C++14, and C++11, ensuring adherence to the principles of *Zero-Cost Abstractions*, safe resource management via **RAII**, fearless concurrency, and alignment with the **C++ Core Guidelines**. --- ## 🧭 Evolution of the ISO/IEC 14882 Standards and Modern C++ Features When designing software in C++, use the latest tools and abstractions supported by the project's compiler: ### 1. ISO/IEC 14882:2024 (C++23 - Most Recent Standard) - **Monadic Error Handling (`std::expected`)**: An efficient replacement for exceptions and traditional error codes (`std::expected<T, E>`), providing chaining with `.and_then()`, `.transform()`, and `.or_else()`. - **Native Formatter and Printing (`std::print` / `std::println`)**: Direct, typed printing to streams without the overhead of `std::cout` (`#include <print>`). - **New Performance Containers (`std::flat_map` / `std::flat_set`)**: Container adapters based on contiguous memory vectors with excellent cache locality. - **Generators and Coroutines (`std::generator`)**: Simplified creation of lazily-evaluated iterators and sequences based on coroutines (`co_yield`). - **Deducing `this` (Explicit Object Parameters)**: Simplifies class methods, lambda recursion, and the CRTP pattern. - **Additional Utilities**: Native byte swapping (`std::byteswap`), `std::span` extensions, and the `[[assume(expr)]]` attribute. ### 2. ISO/IEC 14882:2020 (C++20) - **Concepts and Constraints (`concepts` and `requires`)**: Compile-time metaprogramming validation with readable error messages (`template <std::integral T>`). - **C++ Modules (`module`, `import`, `export`)**: Replacing the traditional header model (`#include`) with compiled modules that isolate scope and dramatically reduce build times. - **Ranges and Pipelines (`std::ranges`)**: Functional composition of algorithms using the pipe operator `|` (`views::filter`, `views::transform`). - **Native Coroutines**: Support for suspendable functions with `co_await`, `co_yield`, and `co_return`. - **Spaceship Operator (`<=>` / Three-Way Comparison)**: Automatic generation of all comparison operators (`auto operator<=>const = default;`). - **Text Formatting (`std::format`)**: Fast, safe string interpolation inspired by Python syntax. - **Concurrency and Threads**: `std::jthread` (an RAII, auto-joining thread) and cancellation tokens (`std::stop_token`). ### 3. ISO/IEC 14882:2017 (C++17) & 14882:2014 (C++14) - **C++17**: Value utility types (`std::optional`, `std::variant`, `std::any`), allocation-free views (`std::string_view`), Structured Bindings (`auto [x, y] = point;`), filesystem support (`std::filesystem`), `if` with a local initializer, and parallel algorithms (`std::execution::par`). - **C++14**: `std::make_unique`, generic lambdas (`auto x`), `std::shared_lock`, and relaxed `constexpr`. ### 4. ISO/IEC 14882:2011 (C++11 - The Foundation of Modern C++) - Move Semantics with rvalue references (`std::move`, `std::forward`). - Smart Pointers for RAII: `std::unique_ptr` (exclusive ownership), `std::shared_ptr`, and `std::weak_ptr`. - Native concurrency: `<thread>`, `<mutex>`, `<atomic>`, `<future>`. --- ## 🛠️ Engineering Guidelines and the C++ Core Guidelines ### 1. RAII (Resource Acquisition Is Initialization) - **Zero Manual Leaks**: Never call `new` or `delete` explicitly. Encapsulate resource management (memory, sockets, files, mutexes) in RAII objects (`std::unique_ptr`, `std::lock_guard`, `std::fstream`). - **Rule of Zero, Three, or Five**: If a class needs to manage resources explicitly, define or delete the 5 special member functions (destructor, copy constructor, copy assignment, move constructor, move assignment). Prefer the *Rule of Zero* by delegating management to smart pointers and standard containers. ### 2. Safe Error Handling and Immutability - **`const` by Default**: Mark variables, references, and member methods as `const` whenever the value does not mutate. - **`constexpr` and `consteval`**: Move as much computation as possible to compile time. - **`noexcept`**: Mark functions that are guaranteed not to throw exceptions (especially move constructors and move assignment operators). --- ## 🧰 Recommended Code Patterns ### 1. C++23: Monadic Error Handling with `std::expected` and Native Printing (`std::print`) ```cpp #include <print> #include <expected> #include <string_view> enum class MathError { DivisionByZero, NegativeLogarithm }; constexpr std::expected<double, MathError> divide(double a, double b) noexcept { if (b == 0.0) { return std::unexpected(MathError::DivisionByZero); } return a / b; } int main() { auto result = divide(10.0, 2.0) .transform([](double val) { return val * 100.0; }); if (result.has_value()) { std::println("[+] Success! Calculated result: {:.2f}", result.value()); } else { std::println(stderr, "[-] Error in the mathematical calculation."); } return 0; } ``` ### 2. C++20: Concepts, Ranges, and the Spaceship Operator (`<=>`) ```cpp #include <iostream> #include <vector> #include <ranges> #include <concepts> #include <compare> // Concept definition in C++20 template <typename T> concept Numeric = std::integral<T> || std::floating_point<T>; struct Item { std::string name; double price; // C++20 spaceship comparison operator auto operator<=>(const Item&) const = default; }; template <Numeric T> T calculate_sum(const std::vector<T>& values) { T sum = 0; for (const auto& v : values) { sum += v; } return sum; } int main() { std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // Filter and transformation with C++20 Ranges auto even_squares = numbers | std::views::filter([](int n) { return n % 2 == 0; }) | std::views::transform([](int n) { return n * n; }); std::cout << "[+] Even squares: "; for (int val : even_squares) { std::cout << val << " "; } std::cout << "\n"; return 0; } ``` ### 3. Safe Resource Management with Smart Pointers (`std::unique_ptr`) ```cpp #include <memory> #include <string> #include <iostream> class DatabaseConnection { public: explicit DatabaseConnection(std::string conn_str) : connection_string_(std::move(conn_str)) { std::cout << "[+] Connection opened: " << connection_string_ << "\n"; } ~DatabaseConnection() { std::cout << "[-] Connection closed automatically by RAII.\n"; } void execute_query(std::string_view query) const { std::cout << " Executing: " << query << "\n"; } private: std::string connection_string_; }; int main() { // Safe allocation without calling 'new' auto db = std::make_unique<DatabaseConnection>("Server=localhost;Port=5432;"); db->execute_query("SELECT * FROM users;"); // Connection automatically deallocated at the end of the scope return 0; } ``` --- ## ⚙️ Modern Build System Configuration (CMakeLists.txt C++23) ```cmake cmake_minimum_required(VERSION 3.26) project(cpp23_modern_project CXX) # Imposes the C++23 standard (ISO/IEC 14882:2024) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) add_executable(app_main src/main.cpp) # Strict compilation battery and security flags if (MSVC) target_compile_options(app_main PRIVATE /W4 /WX /permissive-) else() target_compile_options(app_main PRIVATE -Wall -Wextra -Wpedantic -Wconversion -Wshadow -Werror) endif() ``` --- ## 🔒 Security Issues and Safe Practices - **Resource Management (RAII)**: Avoid manual management with `new` and `delete`. Use Smart Pointers (`std::unique_ptr`, `std::shared_ptr`) to mitigate Use-After-Free and Memory Leaks. - **Object Slicing and Type Confusion**: Be careful when converting base-class pointers to derived classes. Use `dynamic_cast` to perform runtime checks safely. - **Operator Overloading and Copy Constructors**: Avoid resource leaks on object assignment by correctly implementing the copy constructor and assignment operator (Rule of Three/Five/Zero). - **Virtual Method Injection (vtable hijacking)**: Prevent unintended inheritance by declaring classes or methods as `final` to reduce the attack surface for control-flow hijacking. ## 📚 C++23 STL and Cookbook Recipes (Weinman, Băncilă, Sutherland) ### The `std` module and modern I/O - `import std;` replaces the classic header set; `import std.compat;` additionally exposes legacy C symbols (`printf`, `puts`) in the global namespace. - `std::print`/`std::println` (`<print>`) are type-safe, built on `std::format`, and avoid iostream overhead. Prefer targeted `using std::println;` over `using namespace std;`. - `std::osyncstream` synchronizes multi-threaded output; `std::spanstream` (`ispanstream`/`ospanstream`/`spanstream`, C++23) streams over externally allocated fixed-size buffers without ownership — use `std::stringstream` when ownership is needed. ### C++23 library features - **`std::expected<T, E>`** with monadic chaining (`.and_then`, `.transform`, `.or_else`, `.transform_error`) — the C++ answer to Rust's `Result`. `T` may be `void`; `E` must be destructible and not an array/reference/cv-qualified. - **`std::generator<T>`** — the first standard coroutine, a synchronous generator view (`co_yield`); `for (auto n : gen() | views::take(10))`. - **`std::mdspan`** — a non-owning multidimensional view with the C++23 multidimensional subscript `mds[i, j]`; const-qualify to avoid mutation. - **`std::flat_map`/`std::flat_set`** — contiguous-memory adapters with excellent cache locality. - **`std::stacktrace`** — `std::stacktrace::current()` yields `source_file()`/`source_line()`/`description()`. - **`std::ranges::to<C>()`** — materialize a pipeline (`views::iota(1, 11) | views::transform(...) | ranges::to<std::vector>()`); the trailing `()` is required. - **`contains`/`contains_subrange`** — `std::string`/`string_view::contains(...)` and `ranges::contains`/`ranges::contains_subrange` with projections return `bool`. - **`std::source_location`**, **`if consteval`** (replaces `std::is_constant_evaluated()`), **`std::to_underlying`**, **`std::is_scoped_enum`**, `#elifdef`/`#elifndef`, `[[assume]]`. ### Error handling, allocators and streams - Exception-safety levels, RAII and transaction-based operations; prefer `nothrow` allocation where failure is recoverable. Diagnose with **Clang-Tidy** (static), **Valgrind**/address-memory-thread sanitizers (dynamic), conditional breakpoints and structured logging.
عرض على GitHub
ملف SKILL.md هذا كبير جدا، لذلك يعرض SkillsMP القسم الاول فقط هنا. عرض على GitHub