moai-adk 0.34.0__py3-none-any.whl → 1.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- moai_adk/__main__.py +136 -5
- moai_adk/astgrep/__init__.py +37 -0
- moai_adk/astgrep/analyzer.py +522 -0
- moai_adk/astgrep/models.py +124 -0
- moai_adk/astgrep/rules.py +179 -0
- moai_adk/cli/commands/analyze.py +11 -2
- moai_adk/cli/commands/doctor.py +7 -1
- moai_adk/cli/commands/init.py +321 -11
- moai_adk/cli/commands/language.py +7 -1
- moai_adk/cli/commands/rank.py +449 -0
- moai_adk/cli/commands/status.py +7 -1
- moai_adk/cli/commands/switch.py +325 -0
- moai_adk/cli/commands/update.py +296 -23
- moai_adk/cli/prompts/init_prompts.py +362 -66
- moai_adk/cli/prompts/translations/__init__.py +573 -0
- moai_adk/cli/ui/prompts.py +61 -2
- moai_adk/cli/worktree/cli.py +106 -1
- moai_adk/cli/worktree/manager.py +155 -0
- moai_adk/core/config/unified.py +244 -63
- moai_adk/core/credentials.py +264 -0
- moai_adk/core/error_recovery_system.py +22 -4
- moai_adk/core/git/conflict_detector.py +10 -1
- moai_adk/core/git/event_detector.py +16 -5
- moai_adk/core/integration/engine.py +2 -2
- moai_adk/core/integration/integration_tester.py +5 -5
- moai_adk/core/language_config_resolver.py +9 -3
- moai_adk/core/merge/analyzer.py +509 -324
- moai_adk/core/migration/alfred_to_moai_migrator.py +7 -1
- moai_adk/core/migration/backup_manager.py +54 -4
- moai_adk/core/migration/file_migrator.py +174 -2
- moai_adk/core/migration/interactive_checkbox_ui.py +42 -31
- moai_adk/core/migration/version_detector.py +123 -19
- moai_adk/core/migration/version_migrator.py +44 -9
- moai_adk/core/model_allocator.py +241 -0
- moai_adk/core/project/backup_utils.py +12 -2
- moai_adk/core/project/initializer.py +44 -87
- moai_adk/core/project/phase_executor.py +95 -33
- moai_adk/core/project/validator.py +16 -1
- moai_adk/core/quality/trust_checker.py +30 -10
- moai_adk/core/rollback_manager.py +60 -25
- moai_adk/core/template/backup.py +88 -6
- moai_adk/core/template/config.py +33 -9
- moai_adk/core/template/merger.py +34 -8
- moai_adk/core/template/processor.py +334 -11
- moai_adk/core/template_engine.py +10 -1
- moai_adk/core/template_variable_synchronizer.py +16 -2
- moai_adk/core/version_sync.py +54 -6
- moai_adk/foundation/__init__.py +1 -20
- moai_adk/foundation/testing.py +1 -1
- moai_adk/loop/__init__.py +54 -0
- moai_adk/loop/controller.py +305 -0
- moai_adk/loop/feedback.py +230 -0
- moai_adk/loop/state.py +209 -0
- moai_adk/loop/storage.py +220 -0
- moai_adk/lsp/__init__.py +70 -0
- moai_adk/lsp/client.py +320 -0
- moai_adk/lsp/models.py +261 -0
- moai_adk/lsp/protocol.py +404 -0
- moai_adk/lsp/server_manager.py +248 -0
- moai_adk/project/configuration.py +8 -1
- moai_adk/py.typed +0 -0
- moai_adk/ralph/__init__.py +37 -0
- moai_adk/ralph/engine.py +307 -0
- moai_adk/rank/__init__.py +21 -0
- moai_adk/rank/auth.py +425 -0
- moai_adk/rank/client.py +557 -0
- moai_adk/rank/config.py +147 -0
- moai_adk/rank/hook.py +1503 -0
- moai_adk/rank/py.typed +0 -0
- moai_adk/statusline/__init__.py +3 -0
- moai_adk/statusline/enhanced_output_style_detector.py +5 -5
- moai_adk/statusline/main.py +20 -1
- moai_adk/statusline/memory_collector.py +268 -0
- moai_adk/statusline/renderer.py +54 -38
- moai_adk/tag_system/__init__.py +48 -0
- moai_adk/tag_system/atomic_ops.py +117 -0
- moai_adk/tag_system/linkage.py +335 -0
- moai_adk/tag_system/parser.py +176 -0
- moai_adk/tag_system/validator.py +200 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +19 -3
- moai_adk/templates/.claude/agents/moai/builder-command.md +62 -16
- moai_adk/templates/.claude/agents/moai/builder-plugin.md +763 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +21 -5
- moai_adk/templates/.claude/agents/moai/expert-backend.md +103 -39
- moai_adk/templates/.claude/agents/moai/expert-debug.md +9 -3
- moai_adk/templates/.claude/agents/moai/expert-devops.md +16 -14
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +45 -31
- moai_adk/templates/.claude/agents/moai/expert-performance.md +13 -9
- moai_adk/templates/.claude/agents/moai/expert-refactoring.md +228 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +19 -3
- moai_adk/templates/.claude/agents/moai/expert-testing.md +13 -9
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +8 -2
- moai_adk/templates/.claude/agents/moai/manager-docs.md +10 -5
- moai_adk/templates/.claude/agents/moai/manager-git.md +99 -27
- moai_adk/templates/.claude/agents/moai/manager-project.md +87 -7
- moai_adk/templates/.claude/agents/moai/manager-quality.md +22 -5
- moai_adk/templates/.claude/agents/moai/manager-spec.md +8 -2
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +45 -14
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +16 -3
- moai_adk/templates/.claude/commands/moai/0-project.md +239 -1185
- moai_adk/templates/.claude/commands/moai/1-plan.md +383 -363
- moai_adk/templates/.claude/commands/moai/2-run.md +254 -347
- moai_adk/templates/.claude/commands/moai/3-sync.md +174 -100
- moai_adk/templates/.claude/commands/moai/9-feedback.md +49 -33
- moai_adk/templates/.claude/commands/moai/alfred.md +339 -0
- moai_adk/templates/.claude/commands/moai/cancel-loop.md +163 -0
- moai_adk/templates/.claude/commands/moai/fix.md +264 -0
- moai_adk/templates/.claude/commands/moai/loop.md +363 -0
- moai_adk/templates/.claude/hooks/moai/lib/README.md +143 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +37 -81
- moai_adk/templates/.claude/hooks/moai/lib/alfred_detector.py +105 -0
- moai_adk/templates/.claude/hooks/moai/lib/atomic_write.py +122 -0
- moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +4 -1
- moai_adk/templates/.claude/hooks/moai/lib/common.py +35 -5
- moai_adk/templates/.claude/hooks/moai/lib/config.py +376 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +24 -28
- moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +14 -14
- moai_adk/templates/.claude/hooks/moai/lib/enhanced_output_style_detector.py +372 -0
- moai_adk/templates/.claude/hooks/moai/lib/exceptions.py +171 -0
- moai_adk/templates/.claude/hooks/moai/lib/file_utils.py +95 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_collector.py +190 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +15 -13
- moai_adk/templates/.claude/hooks/moai/lib/language_detector.py +298 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +125 -25
- moai_adk/templates/.claude/hooks/moai/lib/main.py +341 -0
- moai_adk/templates/.claude/hooks/moai/lib/memory_collector.py +268 -0
- moai_adk/templates/.claude/hooks/moai/lib/metrics_tracker.py +78 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +9 -7
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +204 -13
- moai_adk/templates/.claude/hooks/moai/lib/project.py +23 -14
- moai_adk/templates/.claude/hooks/moai/lib/renderer.py +359 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_linkage.py +333 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_parser.py +176 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_validator.py +200 -0
- moai_adk/templates/.claude/hooks/moai/lib/timeout.py +5 -5
- moai_adk/templates/.claude/hooks/moai/lib/tool_registry.py +896 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +30 -18
- moai_adk/templates/.claude/hooks/moai/lib/update_checker.py +129 -0
- moai_adk/templates/.claude/hooks/moai/lib/version_reader.py +741 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__ast_grep_scan.py +276 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__code_formatter.py +255 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__coverage_guard.py +325 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__linter.py +315 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__lsp_diagnostic.py +508 -0
- moai_adk/templates/.claude/hooks/moai/pre_commit__tag_validator.py +287 -0
- moai_adk/templates/.claude/hooks/moai/pre_tool__security_guard.py +268 -0
- moai_adk/templates/.claude/hooks/moai/pre_tool__tdd_enforcer.py +208 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +93 -61
- moai_adk/templates/.claude/hooks/moai/session_end__rank_submit.py +69 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +165 -70
- moai_adk/templates/.claude/hooks/moai/shared/utils/announcement_translator.py +206 -0
- moai_adk/templates/.claude/hooks/moai/stop__loop_controller.py +621 -0
- moai_adk/templates/.claude/output-styles/moai/alfred.md +758 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +86 -3
- moai_adk/templates/.claude/output-styles/moai/yoda.md +2 -2
- moai_adk/templates/.claude/settings.json +154 -77
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +252 -198
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +169 -323
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +39 -27
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +115 -125
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +150 -150
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +182 -175
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +198 -138
- moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +226 -320
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +43 -222
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +75 -219
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +103 -463
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/component-architecture.md +723 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/nextjs16-patterns.md +713 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/performance-optimization.md +694 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/react19-patterns.md +591 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/state-management.md +680 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/vue35-patterns.md +802 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +118 -339
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +74 -377
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +299 -70
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +205 -182
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/advanced-agent-patterns.md +370 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-cli-reference-official.md +420 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +32 -22
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-devcontainers-official.md +381 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-discover-plugins-official.md +379 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-headless-official.md +378 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +110 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugin-marketplaces-official.md +308 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugins-official.md +640 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sandboxing-official.md +282 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +425 -71
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-statusline-official.md +293 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +325 -143
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +96 -316
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +116 -294
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-advanced.md +279 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-implementation.md +267 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +121 -650
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/patterns.md +22 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-ears-format.md +200 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +37 -730
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-tdd-implementation.md +275 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +77 -819
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-implementation.md +244 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-validation.md +219 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +14 -18
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +86 -270
- moai_adk/templates/.claude/skills/moai-framework-electron/SKILL.md +288 -0
- moai_adk/templates/.claude/skills/moai-framework-electron/examples.md +2082 -0
- moai_adk/templates/.claude/skills/moai-framework-electron/reference.md +1649 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +76 -582
- moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +1239 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/modules/advanced-patterns.md +401 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +1136 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +82 -436
- moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +585 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/aspnet-core.md +627 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/blazor-components.md +767 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/cqrs-validation.md +626 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/csharp12-features.md +580 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/efcore-patterns.md +622 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +403 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +65 -542
- moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +1171 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/modules/advanced-patterns.md +531 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/reference.md +889 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +32 -405
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +114 -293
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +83 -307
- moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +179 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +973 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +1543 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +42 -279
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +94 -556
- moai_adk/templates/.claude/skills/moai-lang-php/examples.md +1608 -0
- moai_adk/templates/.claude/skills/moai-lang-php/modules/advanced-patterns.md +538 -0
- moai_adk/templates/.claude/skills/moai-lang-php/reference.md +1323 -0
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +108 -358
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +84 -482
- moai_adk/templates/.claude/skills/moai-lang-r/examples.md +1154 -0
- moai_adk/templates/.claude/skills/moai-lang-r/modules/advanced-patterns.md +489 -0
- moai_adk/templates/.claude/skills/moai-lang-r/reference.md +1087 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +106 -610
- moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +1106 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/modules/advanced-patterns.md +309 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/modules/testing-patterns.md +306 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +1024 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +51 -265
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +106 -442
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/akka-actors.md +479 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/cats-effect.md +489 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/functional-programming.md +460 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/spark-data.md +498 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/zio-patterns.md +541 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +88 -457
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/combine-reactive.md +256 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/concurrency.md +270 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/swift6-features.md +265 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/swiftui-patterns.md +314 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +75 -283
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +97 -252
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +64 -240
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +331 -12
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +330 -37
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +90 -287
- moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +200 -206
- moai_adk/templates/.claude/skills/moai-platform-auth0/examples.md +2446 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/adaptive-mfa.md +233 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/akamai-integration.md +214 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/application-credentials.md +280 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-log-events.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-overview.md +140 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/bot-detection.md +144 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/breached-password-detection.md +187 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/brute-force-protection.md +189 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/certifications.md +282 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/compliance-overview.md +263 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/continuous-session-protection.md +307 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/customize-mfa.md +177 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/dpop-implementation.md +283 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/fapi-implementation.md +259 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/gdpr-compliance.md +313 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/guardian-configuration.md +269 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/highly-regulated-identity.md +272 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/jwt-fundamentals.md +248 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mdl-verification.md +210 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-api-management.md +278 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-factors.md +226 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-overview.md +174 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mtls-sender-constraining.md +316 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/ropg-flow-mfa.md +216 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-center.md +325 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-guidance.md +277 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/state-parameters.md +177 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/step-up-authentication.md +251 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/suspicious-ip-throttling.md +240 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/tenant-access-control.md +179 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/webauthn-fido.md +235 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/reference.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +75 -330
- moai_adk/templates/.claude/skills/moai-platform-clerk/examples.md +1426 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/modules/advanced-patterns.md +417 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/reference.md +273 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +100 -340
- moai_adk/templates/.claude/skills/moai-platform-convex/examples.md +506 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/auth-integration.md +421 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/file-storage.md +474 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/reactive-queries.md +302 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/server-functions.md +452 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/reference.md +385 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +113 -326
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/examples.md +514 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/custom-claims.md +374 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/phone-auth.md +372 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/social-auth.md +339 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/reference.md +382 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +71 -302
- moai_adk/templates/.claude/skills/moai-platform-firestore/examples.md +445 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/offline-cache.md +392 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/realtime-listeners.md +441 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/security-rules.md +352 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/transactions.md +452 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/reference.md +322 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +101 -412
- moai_adk/templates/.claude/skills/moai-platform-neon/examples.md +470 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/auto-scaling.md +349 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/branching-workflows.md +354 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/connection-pooling.md +412 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/pitr-backups.md +458 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/reference.md +272 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +96 -327
- moai_adk/templates/.claude/skills/moai-platform-railway/examples.md +539 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/docker-deployment.md +261 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/multi-service.md +291 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/networking-domains.md +338 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/volumes-storage.md +353 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/reference.md +374 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +103 -428
- moai_adk/templates/.claude/skills/moai-platform-supabase/examples.md +502 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/auth-integration.md +384 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/edge-functions.md +371 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/postgresql-pgvector.md +231 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/realtime-presence.md +354 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/row-level-security.md +286 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/storage-cdn.md +319 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/typescript-patterns.md +453 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/reference.md +284 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +96 -446
- moai_adk/templates/.claude/skills/moai-platform-vercel/examples.md +502 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/analytics-speed.md +348 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/deployment-config.md +344 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/edge-functions.md +222 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/isr-caching.md +306 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/kv-storage.md +399 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/reference.md +360 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/SKILL.md +193 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/examples.md +1099 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/language-specific.md +307 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/pattern-syntax.md +237 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/refactoring-patterns.md +260 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/security-rules.md +239 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/reference.md +288 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/go.yml +90 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/python.yml +101 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/typescript.yml +83 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/complexity-check.yml +94 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/deprecated-apis.yml +84 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/secrets-detection.yml +89 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/sql-injection.yml +45 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/xss-prevention.yml +50 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/sgconfig.yml +54 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +225 -423
- moai_adk/templates/.claude/skills/moai-workflow-loop/SKILL.md +197 -0
- moai_adk/templates/.claude/skills/moai-workflow-loop/examples.md +1063 -0
- moai_adk/templates/.claude/skills/moai-workflow-loop/reference.md +1414 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +211 -314
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +15 -43
- moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +119 -316
- moai_adk/templates/.claude/skills/moai-workflow-spec/modules/advanced-patterns.md +237 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +96 -203
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +201 -388
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +52 -3
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +263 -806
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/context7-integration.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/review-workflows.md +500 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/relevance-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/safety-analysis.md +148 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/scoring-algorithms.md +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/timeliness-analysis.md +168 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/truthfulness-analysis.md +136 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/usability-analysis.md +153 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework.md +257 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +191 -1344
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/analysis-patterns.md +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/core-classes.md +299 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/tool-integration.md +380 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/debugging-workflows.md +451 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/error-analysis.md +442 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/optimization-patterns.md +473 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/profiling-techniques.md +481 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/ai-optimization.md +241 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/bottleneck-detection.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/optimization-plan.md +315 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/profiler-core.md +277 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/real-time-monitoring.md +187 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +287 -1194
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/quality-metrics.md +415 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/ai-workflows.md +620 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/patterns.md +692 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/security-analysis.md +429 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +262 -1192
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/static-analysis.md +438 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd/core-classes.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/advanced-features.md +494 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/red-green-refactor.md +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-generation.md +471 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-patterns.md +371 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +227 -1222
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/trust5-validation.md +428 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/SKILL.md +228 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/integration-patterns.md +149 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/moai-adk-integration.md +245 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-advanced.md +310 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-development.md +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-workflows.md +302 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/registry-architecture.md +271 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/resource-optimization.md +300 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/tools-integration.md +280 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/troubleshooting.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-commands.md +296 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-management.md +217 -0
- moai_adk/templates/.git-hooks/pre-push +162 -59
- moai_adk/templates/.github/workflows/ci-universal.yml +934 -133
- moai_adk/templates/.gitignore +65 -107
- moai_adk/templates/.lsp.json +152 -0
- moai_adk/templates/.mcp.json +2 -20
- moai_adk/templates/.moai/announcements/en.json +18 -0
- moai_adk/templates/.moai/announcements/ja.json +18 -0
- moai_adk/templates/.moai/announcements/ko.json +18 -0
- moai_adk/templates/.moai/announcements/zh.json +18 -0
- moai_adk/templates/.moai/config/config.yaml +8 -2
- moai_adk/templates/.moai/config/multilingual-triggers.yaml +213 -0
- moai_adk/templates/.moai/config/sections/language.yaml +2 -2
- moai_adk/templates/.moai/config/sections/llm.yaml +41 -0
- moai_adk/templates/.moai/config/sections/pricing.yaml +30 -0
- moai_adk/templates/.moai/config/sections/project.yaml +2 -2
- moai_adk/templates/.moai/config/sections/quality.yaml +43 -5
- moai_adk/templates/.moai/config/sections/ralph.yaml +55 -0
- moai_adk/templates/.moai/config/sections/system.yaml +46 -1
- moai_adk/templates/.moai/config/sections/user.yaml +1 -1
- moai_adk/templates/.moai/config/statusline-config.yaml +2 -2
- moai_adk/templates/.moai/llm-configs/glm.json +22 -0
- moai_adk/templates/CLAUDE.ja.md +343 -0
- moai_adk/templates/CLAUDE.ko.md +343 -0
- moai_adk/templates/CLAUDE.md +200 -499
- moai_adk/templates/CLAUDE.zh.md +343 -0
- moai_adk/utils/common.py +37 -0
- moai_adk/version.py +1 -1
- moai_adk-1.1.0.dist-info/METADATA +2443 -0
- moai_adk-1.1.0.dist-info/RECORD +701 -0
- {moai_adk-0.34.0.dist-info → moai_adk-1.1.0.dist-info}/entry_points.txt +2 -0
- moai_adk-1.1.0.dist-info/licenses/LICENSE +99 -0
- moai_adk/core/config/auto_spec_config.py +0 -340
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +0 -901
- moai_adk/core/spec/confidence_scoring.py +0 -680
- moai_adk/core/spec/ears_template_engine.py +0 -1247
- moai_adk/core/spec/quality_validator.py +0 -687
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +0 -670
- moai_adk/templates/.claude/agents/moai/expert-database.md +0 -777
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +0 -1041
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +0 -458
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +0 -1607
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +0 -789
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +0 -469
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +0 -1032
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +0 -438
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +0 -431
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +0 -405
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +0 -336
- moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +0 -402
- moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +0 -607
- moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +0 -300
- moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +0 -537
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +0 -520
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +0 -574
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +0 -317
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +0 -663
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +0 -190
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +0 -175
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +0 -196
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +0 -17
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +0 -158
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +0 -340
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +0 -713
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +0 -538
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +0 -1336
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +0 -730
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +0 -608
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +0 -1005
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +0 -436
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +0 -411
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +0 -982
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +0 -778
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +0 -646
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +0 -782
- moai_adk/templates/.moai/config/questions/_schema.yaml +0 -151
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +0 -251
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +0 -108
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +0 -81
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +0 -634
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +0 -170
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +0 -87
- moai_adk/templates/.moai/scripts/setup-glm.py +0 -136
- moai_adk-0.34.0.dist-info/METADATA +0 -2999
- moai_adk-0.34.0.dist-info/RECORD +0 -463
- moai_adk-0.34.0.dist-info/licenses/LICENSE +0 -21
- /moai_adk/foundation/{git.py → git/__init__.py} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-mermaid/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-mermaid/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-nextra/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-testing/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-testing/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/examples.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/reference.md +0 -0
- {moai_adk-0.34.0.dist-info → moai_adk-1.1.0.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,1136 @@
|
|
|
1
|
+
# C++ Complete Reference
|
|
2
|
+
|
|
3
|
+
## C++23/C++20 Feature Matrix
|
|
4
|
+
|
|
5
|
+
### Compiler Support Status
|
|
6
|
+
|
|
7
|
+
| Feature | GCC | Clang | MSVC | Standard | Production Ready |
|
|
8
|
+
| ------------------------- | ------- | ------- | ------- | -------- | ---------------- |
|
|
9
|
+
| **C++23 Features** | | | | | |
|
|
10
|
+
| std::expected | 13+ | 16+ | 19.35+ | C++23 | Yes |
|
|
11
|
+
| std::print/std::println | 14+ | 18+ | 19.37+ | C++23 | Yes |
|
|
12
|
+
| std::format improvements | 13+ | 17+ | 19.35+ | C++23 | Yes |
|
|
13
|
+
| Deducing this | 14+ | 18+ | 19.37+ | C++23 | Yes |
|
|
14
|
+
| std::generator | Not yet | Not yet | Not yet | C++23 | No (partial) |
|
|
15
|
+
| Multidimensional operator | 13+ | 17+ | 19.35+ | C++23 | Yes |
|
|
16
|
+
| if consteval | 12+ | 14+ | 19.30+ | C++23 | Yes |
|
|
17
|
+
| **C++20 Features** | | | | | |
|
|
18
|
+
| Concepts | 10+ | 10+ | 19.26+ | C++20 | Yes |
|
|
19
|
+
| Ranges | 10+ | 13+ | 19.30+ | C++20 | Yes |
|
|
20
|
+
| Modules | 11+ | 16+ | 19.28+ | C++20 | Partial |
|
|
21
|
+
| Coroutines | 10+ | 5.0+ | 19.28+ | C++20 | Yes |
|
|
22
|
+
| std::span | 10+ | 7.0+ | 19.26+ | C++20 | Yes |
|
|
23
|
+
| std::format | 13+ | 14+ | 19.29+ | C++20 | Yes |
|
|
24
|
+
| std::jthread | 10+ | 11+ | 19.28+ | C++20 | Yes |
|
|
25
|
+
| std::latch/barrier | 11+ | 11+ | 19.28+ | C++20 | Yes |
|
|
26
|
+
| Three-way comparison | 10+ | 10+ | 19.20+ | C++20 | Yes |
|
|
27
|
+
|
|
28
|
+
### Build Requirements
|
|
29
|
+
|
|
30
|
+
Minimum Compiler Versions for C++23:
|
|
31
|
+
|
|
32
|
+
- GCC 13+ (recommended: GCC 14+)
|
|
33
|
+
- Clang 16+ (recommended: Clang 18+)
|
|
34
|
+
- MSVC 19.35+ (Visual Studio 2022 17.5+)
|
|
35
|
+
- CMake 3.28+
|
|
36
|
+
|
|
37
|
+
Minimum Compiler Versions for C++20:
|
|
38
|
+
|
|
39
|
+
- GCC 10+ (recommended: GCC 11+)
|
|
40
|
+
- Clang 10+ (recommended: Clang 13+)
|
|
41
|
+
- MSVC 19.26+ (Visual Studio 2019 16.6+)
|
|
42
|
+
- CMake 3.20+
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Standard Library Reference
|
|
47
|
+
|
|
48
|
+
### Containers
|
|
49
|
+
|
|
50
|
+
#### Sequence Containers
|
|
51
|
+
|
|
52
|
+
```cpp
|
|
53
|
+
#include <vector>
|
|
54
|
+
#include <deque>
|
|
55
|
+
#include <list>
|
|
56
|
+
#include <forward_list>
|
|
57
|
+
#include <array>
|
|
58
|
+
|
|
59
|
+
// std::vector - Dynamic array
|
|
60
|
+
std::vector<int> v{1, 2, 3};
|
|
61
|
+
v.push_back(4); // Add element
|
|
62
|
+
v.emplace_back(5); // Construct in-place
|
|
63
|
+
v.resize(10); // Resize
|
|
64
|
+
v.reserve(100); // Reserve capacity
|
|
65
|
+
auto size = v.size(); // Current size
|
|
66
|
+
auto cap = v.capacity(); // Allocated capacity
|
|
67
|
+
|
|
68
|
+
// std::array - Fixed-size array (C++20 aggregate CTAD)
|
|
69
|
+
std::array arr{1, 2, 3, 4, 5}; // Type deduced
|
|
70
|
+
arr.fill(0); // Fill all elements
|
|
71
|
+
|
|
72
|
+
// std::deque - Double-ended queue
|
|
73
|
+
std::deque<int> dq{1, 2, 3};
|
|
74
|
+
dq.push_front(0);
|
|
75
|
+
dq.push_back(4);
|
|
76
|
+
|
|
77
|
+
// std::list - Doubly linked list
|
|
78
|
+
std::list<int> lst{1, 2, 3};
|
|
79
|
+
lst.splice(lst.begin(), other_list);
|
|
80
|
+
|
|
81
|
+
// std::forward_list - Singly linked list
|
|
82
|
+
std::forward_list<int> flst{1, 2, 3};
|
|
83
|
+
flst.push_front(0);
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
#### Associative Containers
|
|
87
|
+
|
|
88
|
+
```cpp
|
|
89
|
+
#include <set>
|
|
90
|
+
#include <map>
|
|
91
|
+
#include <unordered_set>
|
|
92
|
+
#include <unordered_map>
|
|
93
|
+
|
|
94
|
+
// std::set - Ordered unique elements
|
|
95
|
+
std::set<int> s{3, 1, 2};
|
|
96
|
+
s.insert(4);
|
|
97
|
+
s.erase(1);
|
|
98
|
+
auto it = s.find(2);
|
|
99
|
+
auto [iter, inserted] = s.insert(5);
|
|
100
|
+
|
|
101
|
+
// std::map - Ordered key-value pairs
|
|
102
|
+
std::map<std::string, int> m{
|
|
103
|
+
{"one", 1}, {"two", 2}
|
|
104
|
+
};
|
|
105
|
+
m["three"] = 3;
|
|
106
|
+
m.insert_or_assign("two", 22);
|
|
107
|
+
auto result = m.try_emplace("four", 4);
|
|
108
|
+
|
|
109
|
+
// std::unordered_set - Hash set
|
|
110
|
+
std::unordered_set<std::string> uset{"a", "b", "c"};
|
|
111
|
+
uset.insert("d");
|
|
112
|
+
auto found = uset.contains("a"); // C++20
|
|
113
|
+
|
|
114
|
+
// std::unordered_map - Hash map
|
|
115
|
+
std::unordered_map<std::string, int> umap{
|
|
116
|
+
{"x", 1}, {"y", 2}
|
|
117
|
+
};
|
|
118
|
+
umap.emplace("z", 3);
|
|
119
|
+
|
|
120
|
+
// C++23 heterogeneous lookup
|
|
121
|
+
struct TransparentHash {
|
|
122
|
+
using is_transparent = void;
|
|
123
|
+
auto operator()(std::string_view sv) const -> std::size_t {
|
|
124
|
+
return std::hash<std::string_view>{}(sv);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
std::unordered_map<std::string, int, TransparentHash> tmap;
|
|
129
|
+
tmap.find("key"); // No temporary string creation
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
#### Container Adaptors
|
|
133
|
+
|
|
134
|
+
```cpp
|
|
135
|
+
#include <stack>
|
|
136
|
+
#include <queue>
|
|
137
|
+
#include <priority_queue>
|
|
138
|
+
|
|
139
|
+
// std::stack - LIFO
|
|
140
|
+
std::stack<int> stk;
|
|
141
|
+
stk.push(1);
|
|
142
|
+
auto top = stk.top();
|
|
143
|
+
stk.pop();
|
|
144
|
+
|
|
145
|
+
// std::queue - FIFO
|
|
146
|
+
std::queue<int> q;
|
|
147
|
+
q.push(1);
|
|
148
|
+
auto front = q.front();
|
|
149
|
+
q.pop();
|
|
150
|
+
|
|
151
|
+
// std::priority_queue - Heap
|
|
152
|
+
std::priority_queue<int> pq;
|
|
153
|
+
pq.push(5);
|
|
154
|
+
pq.push(2);
|
|
155
|
+
pq.push(8);
|
|
156
|
+
auto max = pq.top(); // 8
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Algorithms (C++20 Ranges)
|
|
160
|
+
|
|
161
|
+
```cpp
|
|
162
|
+
#include <algorithm>
|
|
163
|
+
#include <ranges>
|
|
164
|
+
|
|
165
|
+
std::vector<int> v{5, 2, 8, 1, 9};
|
|
166
|
+
|
|
167
|
+
// Sorting
|
|
168
|
+
std::ranges::sort(v);
|
|
169
|
+
std::ranges::sort(v, std::greater{});
|
|
170
|
+
std::ranges::sort(v, {}, &Person::age); // Sort by member
|
|
171
|
+
|
|
172
|
+
// Searching
|
|
173
|
+
auto it = std::ranges::find(v, 5);
|
|
174
|
+
auto it2 = std::ranges::find_if(v, [](int n) { return n > 5; });
|
|
175
|
+
auto [min, max] = std::ranges::minmax_element(v);
|
|
176
|
+
|
|
177
|
+
// Transformation
|
|
178
|
+
std::vector<int> result;
|
|
179
|
+
std::ranges::transform(v, std::back_inserter(result),
|
|
180
|
+
[](int n) { return n * 2; });
|
|
181
|
+
|
|
182
|
+
// Filtering
|
|
183
|
+
std::vector<int> filtered;
|
|
184
|
+
std::ranges::copy_if(v, std::back_inserter(filtered),
|
|
185
|
+
[](int n) { return n % 2 == 0; });
|
|
186
|
+
|
|
187
|
+
// Counting
|
|
188
|
+
auto count = std::ranges::count(v, 5);
|
|
189
|
+
auto count_if = std::ranges::count_if(v, [](int n) { return n > 5; });
|
|
190
|
+
|
|
191
|
+
// Partitioning
|
|
192
|
+
auto pivot = std::ranges::partition(v, [](int n) { return n < 5; });
|
|
193
|
+
|
|
194
|
+
// Unique
|
|
195
|
+
std::ranges::sort(v);
|
|
196
|
+
auto [first, last] = std::ranges::unique(v);
|
|
197
|
+
v.erase(first, last);
|
|
198
|
+
|
|
199
|
+
// Accumulation (not in ranges, use std::)
|
|
200
|
+
#include <numeric>
|
|
201
|
+
auto sum = std::accumulate(v.begin(), v.end(), 0);
|
|
202
|
+
auto product = std::accumulate(v.begin(), v.end(), 1, std::multiplies{});
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### String Operations
|
|
206
|
+
|
|
207
|
+
```cpp
|
|
208
|
+
#include <string>
|
|
209
|
+
#include <string_view>
|
|
210
|
+
#include <format>
|
|
211
|
+
|
|
212
|
+
// std::string
|
|
213
|
+
std::string s = "hello";
|
|
214
|
+
s += " world";
|
|
215
|
+
s.append("!");
|
|
216
|
+
auto sub = s.substr(0, 5);
|
|
217
|
+
auto pos = s.find("world");
|
|
218
|
+
s.replace(0, 5, "goodbye");
|
|
219
|
+
|
|
220
|
+
// std::string_view (C++17) - Non-owning view
|
|
221
|
+
std::string_view sv = "hello world";
|
|
222
|
+
auto first = sv.substr(0, 5); // No allocation
|
|
223
|
+
auto starts = sv.starts_with("hello"); // C++20
|
|
224
|
+
auto ends = sv.ends_with("world"); // C++20
|
|
225
|
+
auto contains = sv.contains("lo"); // C++23
|
|
226
|
+
|
|
227
|
+
// std::format (C++20) - Type-safe formatting
|
|
228
|
+
auto formatted = std::format("Hello, {}!", "World");
|
|
229
|
+
auto with_args = std::format("{0} {1} {0}", "alpha", "beta");
|
|
230
|
+
auto aligned = std::format("{:>10}", "right");
|
|
231
|
+
auto decimal = std::format("{:.2f}", 3.14159);
|
|
232
|
+
|
|
233
|
+
// String conversions
|
|
234
|
+
int num = std::stoi("42");
|
|
235
|
+
double dbl = std::stod("3.14");
|
|
236
|
+
auto str_from_int = std::to_string(42);
|
|
237
|
+
|
|
238
|
+
// String algorithms
|
|
239
|
+
#include <algorithm>
|
|
240
|
+
std::string s2 = "HELLO";
|
|
241
|
+
std::ranges::transform(s2, s2.begin(), ::tolower); // "hello"
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### Smart Pointers
|
|
245
|
+
|
|
246
|
+
```cpp
|
|
247
|
+
#include <memory>
|
|
248
|
+
|
|
249
|
+
// std::unique_ptr - Exclusive ownership
|
|
250
|
+
auto ptr = std::make_unique<int>(42);
|
|
251
|
+
auto ptr2 = std::move(ptr); // Transfer ownership
|
|
252
|
+
ptr.reset(); // Delete and set to nullptr
|
|
253
|
+
|
|
254
|
+
// Custom deleter
|
|
255
|
+
auto file = std::unique_ptr<FILE, decltype(&fclose)>(
|
|
256
|
+
std::fopen("file.txt", "r"),
|
|
257
|
+
&fclose
|
|
258
|
+
);
|
|
259
|
+
|
|
260
|
+
// std::shared_ptr - Shared ownership
|
|
261
|
+
auto sptr = std::make_shared<int>(42);
|
|
262
|
+
auto sptr2 = sptr; // Reference count = 2
|
|
263
|
+
auto count = sptr.use_count();
|
|
264
|
+
|
|
265
|
+
// std::weak_ptr - Non-owning reference
|
|
266
|
+
std::weak_ptr<int> wptr = sptr;
|
|
267
|
+
if (auto locked = wptr.lock()) {
|
|
268
|
+
// Use locked shared_ptr
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// std::make_unique_for_overwrite (C++20) - Skip initialization
|
|
272
|
+
auto uninit = std::make_unique_for_overwrite<int[]>(1000);
|
|
273
|
+
|
|
274
|
+
// std::shared_ptr with custom allocator
|
|
275
|
+
auto sptr3 = std::allocate_shared<int>(std::allocator<int>{}, 42);
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### Utility Types
|
|
279
|
+
|
|
280
|
+
```cpp
|
|
281
|
+
#include <optional>
|
|
282
|
+
#include <variant>
|
|
283
|
+
#include <any>
|
|
284
|
+
#include <tuple>
|
|
285
|
+
#include <expected> // C++23
|
|
286
|
+
|
|
287
|
+
// std::optional - May or may not contain a value
|
|
288
|
+
std::optional<int> opt = 42;
|
|
289
|
+
if (opt.has_value()) {
|
|
290
|
+
auto val = *opt;
|
|
291
|
+
}
|
|
292
|
+
auto val_or = opt.value_or(0);
|
|
293
|
+
|
|
294
|
+
auto opt2 = std::optional<int>{}; // Empty
|
|
295
|
+
opt2.emplace(100);
|
|
296
|
+
|
|
297
|
+
// std::variant - Type-safe union
|
|
298
|
+
std::variant<int, std::string, double> var = 42;
|
|
299
|
+
var = "hello";
|
|
300
|
+
var = 3.14;
|
|
301
|
+
|
|
302
|
+
std::visit([](auto&& arg) {
|
|
303
|
+
std::println("{}", arg);
|
|
304
|
+
}, var);
|
|
305
|
+
|
|
306
|
+
auto ptr = std::get_if<std::string>(&var);
|
|
307
|
+
if (ptr) {
|
|
308
|
+
// Use *ptr
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// std::any - Type-erased container
|
|
312
|
+
std::any a = 42;
|
|
313
|
+
a = std::string{"hello"};
|
|
314
|
+
auto str = std::any_cast<std::string>(a);
|
|
315
|
+
|
|
316
|
+
// std::tuple - Fixed-size heterogeneous collection
|
|
317
|
+
std::tuple<int, std::string, double> t{1, "hello", 3.14};
|
|
318
|
+
auto [i, s, d] = t; // Structured binding
|
|
319
|
+
auto first = std::get<0>(t);
|
|
320
|
+
|
|
321
|
+
// std::expected (C++23) - Result type
|
|
322
|
+
std::expected<int, std::string> result = 42;
|
|
323
|
+
if (result) {
|
|
324
|
+
auto value = *result;
|
|
325
|
+
} else {
|
|
326
|
+
auto error = result.error();
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
// std::pair
|
|
330
|
+
std::pair<int, std::string> p{42, "answer"};
|
|
331
|
+
auto [num, text] = p;
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
## CMake Reference
|
|
337
|
+
|
|
338
|
+
### Project Configuration
|
|
339
|
+
|
|
340
|
+
```cmake
|
|
341
|
+
# Minimum version and project declaration
|
|
342
|
+
cmake_minimum_required(VERSION 3.28)
|
|
343
|
+
project(MyProject
|
|
344
|
+
VERSION 1.0.0
|
|
345
|
+
DESCRIPTION "My C++ Project"
|
|
346
|
+
LANGUAGES CXX
|
|
347
|
+
)
|
|
348
|
+
|
|
349
|
+
# C++ standard
|
|
350
|
+
set(CMAKE_CXX_STANDARD 23)
|
|
351
|
+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
352
|
+
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
353
|
+
|
|
354
|
+
# Build type
|
|
355
|
+
if(NOT CMAKE_BUILD_TYPE)
|
|
356
|
+
set(CMAKE_BUILD_TYPE Release)
|
|
357
|
+
endif()
|
|
358
|
+
|
|
359
|
+
# Output directories
|
|
360
|
+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
361
|
+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
|
362
|
+
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
|
363
|
+
|
|
364
|
+
# Export compile commands for IDE integration
|
|
365
|
+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
### Compiler Options
|
|
369
|
+
|
|
370
|
+
```cmake
|
|
371
|
+
# Warning flags
|
|
372
|
+
add_compile_options(
|
|
373
|
+
$<$<CXX_COMPILER_ID:GNU>:-Wall -Wextra -Wpedantic -Werror>
|
|
374
|
+
$<$<CXX_COMPILER_ID:Clang>:-Wall -Wextra -Wpedantic -Werror>
|
|
375
|
+
$<$<CXX_COMPILER_ID:MSVC>:/W4 /WX>
|
|
376
|
+
)
|
|
377
|
+
|
|
378
|
+
# Optimization flags
|
|
379
|
+
add_compile_options(
|
|
380
|
+
$<$<AND:$<CONFIG:Release>,$<CXX_COMPILER_ID:GNU,Clang>>:-O3 -march=native>
|
|
381
|
+
$<$<AND:$<CONFIG:Release>,$<CXX_COMPILER_ID:MSVC>>:/O2>
|
|
382
|
+
)
|
|
383
|
+
|
|
384
|
+
# Debug flags
|
|
385
|
+
add_compile_options(
|
|
386
|
+
$<$<AND:$<CONFIG:Debug>,$<CXX_COMPILER_ID:GNU,Clang>>:-g -O0>
|
|
387
|
+
$<$<AND:$<CONFIG:Debug>,$<CXX_COMPILER_ID:MSVC>>:/Od /Zi>
|
|
388
|
+
)
|
|
389
|
+
|
|
390
|
+
# Sanitizers (Debug only)
|
|
391
|
+
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
392
|
+
add_compile_options(
|
|
393
|
+
$<$<CXX_COMPILER_ID:GNU,Clang>:-fsanitize=address,undefined>
|
|
394
|
+
)
|
|
395
|
+
add_link_options(
|
|
396
|
+
$<$<CXX_COMPILER_ID:GNU,Clang>:-fsanitize=address,undefined>
|
|
397
|
+
)
|
|
398
|
+
endif()
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
### Target Configuration
|
|
402
|
+
|
|
403
|
+
```cmake
|
|
404
|
+
# Static library
|
|
405
|
+
add_library(mylib STATIC
|
|
406
|
+
src/file1.cpp
|
|
407
|
+
src/file2.cpp
|
|
408
|
+
)
|
|
409
|
+
|
|
410
|
+
target_include_directories(mylib
|
|
411
|
+
PUBLIC
|
|
412
|
+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
413
|
+
$<INSTALL_INTERFACE:include>
|
|
414
|
+
PRIVATE
|
|
415
|
+
${CMAKE_CURRENT_SOURCE_DIR}/src
|
|
416
|
+
)
|
|
417
|
+
|
|
418
|
+
target_compile_features(mylib PUBLIC cxx_std_23)
|
|
419
|
+
|
|
420
|
+
target_link_libraries(mylib
|
|
421
|
+
PUBLIC
|
|
422
|
+
fmt::fmt
|
|
423
|
+
spdlog::spdlog
|
|
424
|
+
PRIVATE
|
|
425
|
+
nlohmann_json::nlohmann_json
|
|
426
|
+
)
|
|
427
|
+
|
|
428
|
+
# Executable
|
|
429
|
+
add_executable(myapp src/main.cpp)
|
|
430
|
+
target_link_libraries(myapp PRIVATE mylib)
|
|
431
|
+
|
|
432
|
+
# Interface library (header-only)
|
|
433
|
+
add_library(myheaders INTERFACE)
|
|
434
|
+
target_include_directories(myheaders INTERFACE include/)
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
### Dependency Management
|
|
438
|
+
|
|
439
|
+
```cmake
|
|
440
|
+
# FetchContent
|
|
441
|
+
include(FetchContent)
|
|
442
|
+
|
|
443
|
+
FetchContent_Declare(fmt
|
|
444
|
+
GIT_REPOSITORY https://github.com/fmtlib/fmt
|
|
445
|
+
GIT_TAG 10.2.1
|
|
446
|
+
GIT_SHALLOW TRUE
|
|
447
|
+
SYSTEM # Suppress warnings from dependency
|
|
448
|
+
)
|
|
449
|
+
|
|
450
|
+
FetchContent_MakeAvailable(fmt)
|
|
451
|
+
|
|
452
|
+
# Find package
|
|
453
|
+
find_package(Boost 1.75 REQUIRED COMPONENTS system filesystem)
|
|
454
|
+
target_link_libraries(mylib PUBLIC Boost::system Boost::filesystem)
|
|
455
|
+
|
|
456
|
+
# vcpkg integration
|
|
457
|
+
if(DEFINED ENV{VCPKG_ROOT})
|
|
458
|
+
set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake")
|
|
459
|
+
endif()
|
|
460
|
+
|
|
461
|
+
# pkg-config
|
|
462
|
+
find_package(PkgConfig REQUIRED)
|
|
463
|
+
pkg_check_modules(LIBCURL REQUIRED libcurl)
|
|
464
|
+
target_link_libraries(mylib PRIVATE ${LIBCURL_LIBRARIES})
|
|
465
|
+
target_include_directories(mylib PRIVATE ${LIBCURL_INCLUDE_DIRS})
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
### Testing with CTest
|
|
469
|
+
|
|
470
|
+
```cmake
|
|
471
|
+
# Enable testing
|
|
472
|
+
enable_testing()
|
|
473
|
+
|
|
474
|
+
# Add test executable
|
|
475
|
+
add_executable(mylib_tests
|
|
476
|
+
tests/test1.cpp
|
|
477
|
+
tests/test2.cpp
|
|
478
|
+
)
|
|
479
|
+
|
|
480
|
+
target_link_libraries(mylib_tests PRIVATE
|
|
481
|
+
mylib
|
|
482
|
+
GTest::gtest_main
|
|
483
|
+
)
|
|
484
|
+
|
|
485
|
+
# Discover tests
|
|
486
|
+
include(GoogleTest)
|
|
487
|
+
gtest_discover_tests(mylib_tests
|
|
488
|
+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
489
|
+
PROPERTIES
|
|
490
|
+
TIMEOUT 30
|
|
491
|
+
)
|
|
492
|
+
|
|
493
|
+
# Manual test registration
|
|
494
|
+
add_test(NAME mylib_test COMMAND mylib_tests)
|
|
495
|
+
set_tests_properties(mylib_test PROPERTIES
|
|
496
|
+
TIMEOUT 60
|
|
497
|
+
ENVIRONMENT "TEST_ENV_VAR=value"
|
|
498
|
+
)
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
### Installation
|
|
502
|
+
|
|
503
|
+
```cmake
|
|
504
|
+
# Install targets
|
|
505
|
+
install(TARGETS mylib myapp
|
|
506
|
+
EXPORT MyProjectTargets
|
|
507
|
+
LIBRARY DESTINATION lib
|
|
508
|
+
ARCHIVE DESTINATION lib
|
|
509
|
+
RUNTIME DESTINATION bin
|
|
510
|
+
INCLUDES DESTINATION include
|
|
511
|
+
)
|
|
512
|
+
|
|
513
|
+
# Install headers
|
|
514
|
+
install(DIRECTORY include/mylib DESTINATION include)
|
|
515
|
+
|
|
516
|
+
# Install export configuration
|
|
517
|
+
install(EXPORT MyProjectTargets
|
|
518
|
+
FILE MyProjectTargets.cmake
|
|
519
|
+
NAMESPACE MyProject::
|
|
520
|
+
DESTINATION lib/cmake/MyProject
|
|
521
|
+
)
|
|
522
|
+
|
|
523
|
+
# Generate config file
|
|
524
|
+
include(CMakePackageConfigHelpers)
|
|
525
|
+
configure_package_config_file(
|
|
526
|
+
${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
|
|
527
|
+
${CMAKE_CURRENT_BINARY_DIR}/MyProjectConfig.cmake
|
|
528
|
+
INSTALL_DESTINATION lib/cmake/MyProject
|
|
529
|
+
)
|
|
530
|
+
|
|
531
|
+
write_basic_package_version_file(
|
|
532
|
+
${CMAKE_CURRENT_BINARY_DIR}/MyProjectConfigVersion.cmake
|
|
533
|
+
VERSION ${PROJECT_VERSION}
|
|
534
|
+
COMPATIBILITY SameMajorVersion
|
|
535
|
+
)
|
|
536
|
+
|
|
537
|
+
install(FILES
|
|
538
|
+
${CMAKE_CURRENT_BINARY_DIR}/MyProjectConfig.cmake
|
|
539
|
+
${CMAKE_CURRENT_BINARY_DIR}/MyProjectConfigVersion.cmake
|
|
540
|
+
DESTINATION lib/cmake/MyProject
|
|
541
|
+
)
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
### CMake Presets (CMakePresets.json)
|
|
545
|
+
|
|
546
|
+
```json
|
|
547
|
+
{
|
|
548
|
+
"version": 6,
|
|
549
|
+
"cmakeMinimumRequired": {
|
|
550
|
+
"major": 3,
|
|
551
|
+
"minor": 28,
|
|
552
|
+
"patch": 0
|
|
553
|
+
},
|
|
554
|
+
"configurePresets": [
|
|
555
|
+
{
|
|
556
|
+
"name": "default",
|
|
557
|
+
"hidden": true,
|
|
558
|
+
"generator": "Ninja",
|
|
559
|
+
"binaryDir": "${sourceDir}/build/${presetName}",
|
|
560
|
+
"cacheVariables": {
|
|
561
|
+
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
|
|
562
|
+
}
|
|
563
|
+
},
|
|
564
|
+
{
|
|
565
|
+
"name": "debug",
|
|
566
|
+
"inherits": "default",
|
|
567
|
+
"displayName": "Debug",
|
|
568
|
+
"cacheVariables": {
|
|
569
|
+
"CMAKE_BUILD_TYPE": "Debug"
|
|
570
|
+
}
|
|
571
|
+
},
|
|
572
|
+
{
|
|
573
|
+
"name": "release",
|
|
574
|
+
"inherits": "default",
|
|
575
|
+
"displayName": "Release",
|
|
576
|
+
"cacheVariables": {
|
|
577
|
+
"CMAKE_BUILD_TYPE": "Release"
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
],
|
|
581
|
+
"buildPresets": [
|
|
582
|
+
{
|
|
583
|
+
"name": "debug",
|
|
584
|
+
"configurePreset": "debug"
|
|
585
|
+
},
|
|
586
|
+
{
|
|
587
|
+
"name": "release",
|
|
588
|
+
"configurePreset": "release"
|
|
589
|
+
}
|
|
590
|
+
],
|
|
591
|
+
"testPresets": [
|
|
592
|
+
{
|
|
593
|
+
"name": "debug",
|
|
594
|
+
"configurePreset": "debug",
|
|
595
|
+
"output": { "outputOnFailure": true }
|
|
596
|
+
}
|
|
597
|
+
]
|
|
598
|
+
}
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
---
|
|
602
|
+
|
|
603
|
+
## Compiler Flags Reference
|
|
604
|
+
|
|
605
|
+
### GCC/Clang Compiler Flags
|
|
606
|
+
|
|
607
|
+
```bash
|
|
608
|
+
# Standard selection
|
|
609
|
+
-std=c++23
|
|
610
|
+
-std=c++20
|
|
611
|
+
-std=gnu++23 # GNU extensions enabled
|
|
612
|
+
|
|
613
|
+
# Warning flags
|
|
614
|
+
-Wall # Enable common warnings
|
|
615
|
+
-Wextra # Additional warnings
|
|
616
|
+
-Wpedantic # Strict ISO C++ compliance
|
|
617
|
+
-Werror # Treat warnings as errors
|
|
618
|
+
-Wconversion # Implicit conversions
|
|
619
|
+
-Wshadow # Variable shadowing
|
|
620
|
+
-Wnon-virtual-dtor # Non-virtual destructors
|
|
621
|
+
|
|
622
|
+
# Optimization levels
|
|
623
|
+
-O0 # No optimization (debug)
|
|
624
|
+
-O1 # Basic optimization
|
|
625
|
+
-O2 # Moderate optimization (default release)
|
|
626
|
+
-O3 # Aggressive optimization
|
|
627
|
+
-Os # Optimize for size
|
|
628
|
+
-Ofast # Aggressive with non-standard optimizations
|
|
629
|
+
-march=native # Optimize for current CPU
|
|
630
|
+
|
|
631
|
+
# Debug information
|
|
632
|
+
-g # Debug symbols
|
|
633
|
+
-g3 # Maximum debug info
|
|
634
|
+
-ggdb # GDB-specific debug info
|
|
635
|
+
-gdwarf-4 # DWARF 4 debug format
|
|
636
|
+
|
|
637
|
+
# Sanitizers
|
|
638
|
+
-fsanitize=address # Address sanitizer
|
|
639
|
+
-fsanitize=undefined # Undefined behavior sanitizer
|
|
640
|
+
-fsanitize=thread # Thread sanitizer
|
|
641
|
+
-fsanitize=memory # Memory sanitizer (Clang only)
|
|
642
|
+
-fsanitize=leak # Leak sanitizer
|
|
643
|
+
|
|
644
|
+
# Link-time optimization
|
|
645
|
+
-flto # Enable LTO
|
|
646
|
+
-flto=thin # Thin LTO (Clang)
|
|
647
|
+
|
|
648
|
+
# Security hardening
|
|
649
|
+
-fstack-protector-strong # Stack protection
|
|
650
|
+
-D_FORTIFY_SOURCE=2 # Fortify source
|
|
651
|
+
-Wformat -Wformat-security # Format string security
|
|
652
|
+
-fPIE -pie # Position independent executable
|
|
653
|
+
|
|
654
|
+
# Performance profiling
|
|
655
|
+
-pg # gprof profiling
|
|
656
|
+
-fprofile-generate # Generate profile data
|
|
657
|
+
-fprofile-use # Use profile data (PGO)
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
### MSVC Compiler Flags
|
|
661
|
+
|
|
662
|
+
```bash
|
|
663
|
+
# Standard selection
|
|
664
|
+
/std:c++latest
|
|
665
|
+
/std:c++20
|
|
666
|
+
|
|
667
|
+
# Warning flags
|
|
668
|
+
/W4 # High warning level
|
|
669
|
+
/WX # Treat warnings as errors
|
|
670
|
+
/Wall # All warnings (very verbose)
|
|
671
|
+
|
|
672
|
+
# Optimization levels
|
|
673
|
+
/Od # Disable optimization (debug)
|
|
674
|
+
/O1 # Minimize size
|
|
675
|
+
/O2 # Maximize speed (default release)
|
|
676
|
+
/Ox # Maximum optimization
|
|
677
|
+
|
|
678
|
+
# Debug information
|
|
679
|
+
/Zi # Debug info in PDB
|
|
680
|
+
/Z7 # Debug info in obj files
|
|
681
|
+
|
|
682
|
+
# Runtime library
|
|
683
|
+
/MT # Static runtime
|
|
684
|
+
/MD # Dynamic runtime
|
|
685
|
+
/MTd # Static runtime (debug)
|
|
686
|
+
/MDd # Dynamic runtime (debug)
|
|
687
|
+
|
|
688
|
+
# Code generation
|
|
689
|
+
/EHsc # Exception handling
|
|
690
|
+
/GR # Enable RTTI
|
|
691
|
+
/GR- # Disable RTTI
|
|
692
|
+
/arch:AVX2 # AVX2 instructions
|
|
693
|
+
|
|
694
|
+
# Security
|
|
695
|
+
/sdl # Security development lifecycle checks
|
|
696
|
+
/guard:cf # Control flow guard
|
|
697
|
+
/GS # Buffer security check
|
|
698
|
+
|
|
699
|
+
# Optimization
|
|
700
|
+
/GL # Whole program optimization
|
|
701
|
+
/LTCG # Link-time code generation
|
|
702
|
+
```
|
|
703
|
+
|
|
704
|
+
---
|
|
705
|
+
|
|
706
|
+
## Build System Patterns
|
|
707
|
+
|
|
708
|
+
### Multi-Configuration Build
|
|
709
|
+
|
|
710
|
+
```bash
|
|
711
|
+
# CMake configure
|
|
712
|
+
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
|
|
713
|
+
|
|
714
|
+
# Build specific configuration
|
|
715
|
+
cmake --build build --config Release
|
|
716
|
+
|
|
717
|
+
# Build with parallel jobs
|
|
718
|
+
cmake --build build -j$(nproc)
|
|
719
|
+
|
|
720
|
+
# Install
|
|
721
|
+
cmake --install build --prefix /usr/local
|
|
722
|
+
```
|
|
723
|
+
|
|
724
|
+
### Using CMake Presets
|
|
725
|
+
|
|
726
|
+
```bash
|
|
727
|
+
# List available presets
|
|
728
|
+
cmake --list-presets
|
|
729
|
+
|
|
730
|
+
# Configure with preset
|
|
731
|
+
cmake --preset=release
|
|
732
|
+
|
|
733
|
+
# Build with preset
|
|
734
|
+
cmake --build --preset=release
|
|
735
|
+
|
|
736
|
+
# Test with preset
|
|
737
|
+
ctest --preset=debug
|
|
738
|
+
```
|
|
739
|
+
|
|
740
|
+
### vcpkg Integration
|
|
741
|
+
|
|
742
|
+
```bash
|
|
743
|
+
# Install vcpkg
|
|
744
|
+
git clone https://github.com/microsoft/vcpkg
|
|
745
|
+
./vcpkg/bootstrap-vcpkg.sh
|
|
746
|
+
|
|
747
|
+
# Install packages
|
|
748
|
+
./vcpkg/vcpkg install fmt spdlog gtest
|
|
749
|
+
|
|
750
|
+
# Configure CMake with vcpkg
|
|
751
|
+
cmake -S . -B build \
|
|
752
|
+
-DCMAKE_TOOLCHAIN_FILE=./vcpkg/scripts/buildsystems/vcpkg.cmake
|
|
753
|
+
|
|
754
|
+
# Using vcpkg.json (manifest mode)
|
|
755
|
+
# Create vcpkg.json in project root, vcpkg auto-installs dependencies
|
|
756
|
+
```
|
|
757
|
+
|
|
758
|
+
### Conan Integration
|
|
759
|
+
|
|
760
|
+
```bash
|
|
761
|
+
# Install Conan
|
|
762
|
+
pip install conan
|
|
763
|
+
|
|
764
|
+
# Create conanfile.txt
|
|
765
|
+
# [requires]
|
|
766
|
+
# fmt/10.2.1
|
|
767
|
+
# spdlog/1.13.0
|
|
768
|
+
# gtest/1.14.0
|
|
769
|
+
#
|
|
770
|
+
# [generators]
|
|
771
|
+
# CMakeDeps
|
|
772
|
+
# CMakeToolchain
|
|
773
|
+
|
|
774
|
+
# Install dependencies
|
|
775
|
+
conan install . --output-folder=build --build=missing
|
|
776
|
+
|
|
777
|
+
# Configure CMake
|
|
778
|
+
cmake -S . -B build \
|
|
779
|
+
-DCMAKE_TOOLCHAIN_FILE=build/conan_toolchain.cmake
|
|
780
|
+
|
|
781
|
+
# Build
|
|
782
|
+
cmake --build build
|
|
783
|
+
```
|
|
784
|
+
|
|
785
|
+
---
|
|
786
|
+
|
|
787
|
+
## Memory Model and Concurrency
|
|
788
|
+
|
|
789
|
+
### Memory Order
|
|
790
|
+
|
|
791
|
+
```cpp
|
|
792
|
+
#include <atomic>
|
|
793
|
+
|
|
794
|
+
std::atomic<int> counter{0};
|
|
795
|
+
|
|
796
|
+
// Relaxed ordering - No synchronization
|
|
797
|
+
counter.store(1, std::memory_order_relaxed);
|
|
798
|
+
auto val = counter.load(std::memory_order_relaxed);
|
|
799
|
+
|
|
800
|
+
// Acquire-release ordering - Synchronize specific operations
|
|
801
|
+
counter.store(1, std::memory_order_release);
|
|
802
|
+
auto val2 = counter.load(std::memory_order_acquire);
|
|
803
|
+
|
|
804
|
+
// Sequential consistency - Strongest guarantee (default)
|
|
805
|
+
counter.store(1, std::memory_order_seq_cst);
|
|
806
|
+
auto val3 = counter.load(std::memory_order_seq_cst);
|
|
807
|
+
|
|
808
|
+
// Compare-exchange
|
|
809
|
+
int expected = 0;
|
|
810
|
+
bool success = counter.compare_exchange_strong(
|
|
811
|
+
expected, 1,
|
|
812
|
+
std::memory_order_acq_rel,
|
|
813
|
+
std::memory_order_acquire
|
|
814
|
+
);
|
|
815
|
+
|
|
816
|
+
// Fetch operations
|
|
817
|
+
auto old = counter.fetch_add(1, std::memory_order_relaxed);
|
|
818
|
+
auto old2 = counter.fetch_sub(1, std::memory_order_relaxed);
|
|
819
|
+
```
|
|
820
|
+
|
|
821
|
+
### Thread Synchronization
|
|
822
|
+
|
|
823
|
+
```cpp
|
|
824
|
+
#include <mutex>
|
|
825
|
+
#include <shared_mutex>
|
|
826
|
+
#include <condition_variable>
|
|
827
|
+
|
|
828
|
+
// Mutex
|
|
829
|
+
std::mutex mtx;
|
|
830
|
+
{
|
|
831
|
+
std::lock_guard lock(mtx); // RAII lock
|
|
832
|
+
// Critical section
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
{
|
|
836
|
+
std::unique_lock lock(mtx); // More flexible
|
|
837
|
+
// Can unlock before scope ends
|
|
838
|
+
lock.unlock();
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
// Shared mutex (C++17) - Multiple readers, single writer
|
|
842
|
+
std::shared_mutex smtx;
|
|
843
|
+
|
|
844
|
+
// Reader lock
|
|
845
|
+
{
|
|
846
|
+
std::shared_lock lock(smtx);
|
|
847
|
+
// Multiple readers allowed
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
// Writer lock
|
|
851
|
+
{
|
|
852
|
+
std::unique_lock lock(smtx);
|
|
853
|
+
// Exclusive access
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
// Condition variable
|
|
857
|
+
std::condition_variable cv;
|
|
858
|
+
std::mutex cv_mtx;
|
|
859
|
+
bool ready = false;
|
|
860
|
+
|
|
861
|
+
// Wait
|
|
862
|
+
std::unique_lock lock(cv_mtx);
|
|
863
|
+
cv.wait(lock, [] { return ready; });
|
|
864
|
+
|
|
865
|
+
// Notify
|
|
866
|
+
{
|
|
867
|
+
std::lock_guard lock(cv_mtx);
|
|
868
|
+
ready = true;
|
|
869
|
+
}
|
|
870
|
+
cv.notify_one();
|
|
871
|
+
cv.notify_all();
|
|
872
|
+
```
|
|
873
|
+
|
|
874
|
+
---
|
|
875
|
+
|
|
876
|
+
## Common Pitfalls and Best Practices
|
|
877
|
+
|
|
878
|
+
### Pitfall 1: Dangling References
|
|
879
|
+
|
|
880
|
+
```cpp
|
|
881
|
+
// BAD: Returns reference to local variable
|
|
882
|
+
auto& get_value() {
|
|
883
|
+
int x = 42;
|
|
884
|
+
return x; // DANGER: x destroyed after return
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
// GOOD: Return by value or use heap allocation
|
|
888
|
+
auto get_value() {
|
|
889
|
+
return 42;
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
auto get_ptr() {
|
|
893
|
+
return std::make_unique<int>(42);
|
|
894
|
+
}
|
|
895
|
+
```
|
|
896
|
+
|
|
897
|
+
### Pitfall 2: Const Correctness
|
|
898
|
+
|
|
899
|
+
```cpp
|
|
900
|
+
// BAD: Missing const
|
|
901
|
+
class Widget {
|
|
902
|
+
int value_;
|
|
903
|
+
public:
|
|
904
|
+
int get_value() { return value_; } // Not const-correct
|
|
905
|
+
};
|
|
906
|
+
|
|
907
|
+
// GOOD: Const methods for read-only operations
|
|
908
|
+
class Widget {
|
|
909
|
+
int value_;
|
|
910
|
+
public:
|
|
911
|
+
auto get_value() const -> int { return value_; }
|
|
912
|
+
auto set_value(int v) -> void { value_ = v; }
|
|
913
|
+
};
|
|
914
|
+
```
|
|
915
|
+
|
|
916
|
+
### Pitfall 3: Resource Leaks
|
|
917
|
+
|
|
918
|
+
```cpp
|
|
919
|
+
// BAD: Manual resource management
|
|
920
|
+
void process_file() {
|
|
921
|
+
FILE* file = fopen("data.txt", "r");
|
|
922
|
+
// If exception thrown, file not closed
|
|
923
|
+
process_data();
|
|
924
|
+
fclose(file);
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
// GOOD: RAII with smart pointers or custom wrappers
|
|
928
|
+
void process_file() {
|
|
929
|
+
auto file = std::unique_ptr<FILE, decltype(&fclose)>(
|
|
930
|
+
fopen("data.txt", "r"),
|
|
931
|
+
&fclose
|
|
932
|
+
);
|
|
933
|
+
if (!file) return;
|
|
934
|
+
process_data();
|
|
935
|
+
// Automatically closed
|
|
936
|
+
}
|
|
937
|
+
```
|
|
938
|
+
|
|
939
|
+
### Pitfall 4: Iterator Invalidation
|
|
940
|
+
|
|
941
|
+
```cpp
|
|
942
|
+
// BAD: Modifying container while iterating
|
|
943
|
+
std::vector<int> v{1, 2, 3, 4, 5};
|
|
944
|
+
for (auto it = v.begin(); it != v.end(); ++it) {
|
|
945
|
+
if (*it % 2 == 0) {
|
|
946
|
+
v.erase(it); // DANGER: Iterator invalidated
|
|
947
|
+
}
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
// GOOD: Use erase-remove idiom or update iterator
|
|
951
|
+
auto new_end = std::remove_if(v.begin(), v.end(),
|
|
952
|
+
[](int n) { return n % 2 == 0; });
|
|
953
|
+
v.erase(new_end, v.end());
|
|
954
|
+
|
|
955
|
+
// Or update iterator after erase
|
|
956
|
+
for (auto it = v.begin(); it != v.end(); ) {
|
|
957
|
+
if (*it % 2 == 0) {
|
|
958
|
+
it = v.erase(it); // erase returns next valid iterator
|
|
959
|
+
} else {
|
|
960
|
+
++it;
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
```
|
|
964
|
+
|
|
965
|
+
### Pitfall 5: Move Semantics Misuse
|
|
966
|
+
|
|
967
|
+
```cpp
|
|
968
|
+
// BAD: Using moved-from object
|
|
969
|
+
std::string s1 = "hello";
|
|
970
|
+
std::string s2 = std::move(s1);
|
|
971
|
+
std::cout << s1; // DANGER: s1 in valid but unspecified state
|
|
972
|
+
|
|
973
|
+
// GOOD: Don't use moved-from objects (or reset them)
|
|
974
|
+
std::string s1 = "hello";
|
|
975
|
+
std::string s2 = std::move(s1);
|
|
976
|
+
s1 = "new value"; // Safe: assign new value
|
|
977
|
+
std::cout << s1;
|
|
978
|
+
```
|
|
979
|
+
|
|
980
|
+
### Best Practice 1: Use Modern Features
|
|
981
|
+
|
|
982
|
+
```cpp
|
|
983
|
+
// OLD: Manual memory management
|
|
984
|
+
Widget* widget = new Widget();
|
|
985
|
+
delete widget;
|
|
986
|
+
|
|
987
|
+
// MODERN: Smart pointers
|
|
988
|
+
auto widget = std::make_unique<Widget>();
|
|
989
|
+
|
|
990
|
+
// OLD: Raw loops
|
|
991
|
+
for (size_t i = 0; i < vec.size(); ++i) {
|
|
992
|
+
process(vec[i]);
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
// MODERN: Range-based for
|
|
996
|
+
for (const auto& item : vec) {
|
|
997
|
+
process(item);
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
// MODERN: Algorithms
|
|
1001
|
+
std::ranges::for_each(vec, process);
|
|
1002
|
+
```
|
|
1003
|
+
|
|
1004
|
+
### Best Practice 2: Const Everything Possible
|
|
1005
|
+
|
|
1006
|
+
```cpp
|
|
1007
|
+
// Const member functions
|
|
1008
|
+
class Counter {
|
|
1009
|
+
int count_ = 0;
|
|
1010
|
+
public:
|
|
1011
|
+
auto get() const -> int { return count_; }
|
|
1012
|
+
auto increment() -> void { ++count_; }
|
|
1013
|
+
};
|
|
1014
|
+
|
|
1015
|
+
// Const function parameters
|
|
1016
|
+
auto process(const std::vector<int>& data) -> void {
|
|
1017
|
+
// Can't modify data
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
// Const local variables
|
|
1021
|
+
const auto result = calculate();
|
|
1022
|
+
```
|
|
1023
|
+
|
|
1024
|
+
### Best Practice 3: Use Structured Bindings
|
|
1025
|
+
|
|
1026
|
+
```cpp
|
|
1027
|
+
// OLD: Manual unpacking
|
|
1028
|
+
std::pair<int, std::string> p = get_data();
|
|
1029
|
+
int id = p.first;
|
|
1030
|
+
std::string name = p.second;
|
|
1031
|
+
|
|
1032
|
+
// MODERN: Structured binding
|
|
1033
|
+
auto [id, name] = get_data();
|
|
1034
|
+
|
|
1035
|
+
// With containers
|
|
1036
|
+
std::map<std::string, int> map;
|
|
1037
|
+
for (const auto& [key, value] : map) {
|
|
1038
|
+
std::println("{}: {}", key, value);
|
|
1039
|
+
}
|
|
1040
|
+
```
|
|
1041
|
+
|
|
1042
|
+
### Best Practice 4: Prefer std::expected over Exceptions
|
|
1043
|
+
|
|
1044
|
+
```cpp
|
|
1045
|
+
// Exceptions for exceptional cases
|
|
1046
|
+
auto read_config() -> Config {
|
|
1047
|
+
if (!file_exists()) {
|
|
1048
|
+
throw std::runtime_error("Config not found");
|
|
1049
|
+
}
|
|
1050
|
+
return load_config();
|
|
1051
|
+
}
|
|
1052
|
+
|
|
1053
|
+
// std::expected for expected errors
|
|
1054
|
+
auto parse_int(std::string_view s)
|
|
1055
|
+
-> std::expected<int, ParseError> {
|
|
1056
|
+
// Returns error value, not exception
|
|
1057
|
+
}
|
|
1058
|
+
```
|
|
1059
|
+
|
|
1060
|
+
---
|
|
1061
|
+
|
|
1062
|
+
## Performance Optimization Patterns
|
|
1063
|
+
|
|
1064
|
+
### Small String Optimization (SSO)
|
|
1065
|
+
|
|
1066
|
+
```cpp
|
|
1067
|
+
// Strings shorter than ~15-23 chars use stack storage
|
|
1068
|
+
std::string small = "short"; // No heap allocation
|
|
1069
|
+
std::string large = "very long string that exceeds SSO buffer"; // Heap allocated
|
|
1070
|
+
```
|
|
1071
|
+
|
|
1072
|
+
### Reserve Capacity
|
|
1073
|
+
|
|
1074
|
+
```cpp
|
|
1075
|
+
// BAD: Multiple reallocations
|
|
1076
|
+
std::vector<int> v;
|
|
1077
|
+
for (int i = 0; i < 1000; ++i) {
|
|
1078
|
+
v.push_back(i); // May reallocate multiple times
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
// GOOD: Reserve upfront
|
|
1082
|
+
std::vector<int> v;
|
|
1083
|
+
v.reserve(1000);
|
|
1084
|
+
for (int i = 0; i < 1000; ++i) {
|
|
1085
|
+
v.push_back(i); // No reallocation
|
|
1086
|
+
}
|
|
1087
|
+
```
|
|
1088
|
+
|
|
1089
|
+
### Avoid Unnecessary Copies
|
|
1090
|
+
|
|
1091
|
+
```cpp
|
|
1092
|
+
// BAD: Copy on every iteration
|
|
1093
|
+
for (std::string s : vec) { // Copy
|
|
1094
|
+
process(s);
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
// GOOD: Const reference
|
|
1098
|
+
for (const auto& s : vec) { // No copy
|
|
1099
|
+
process(s);
|
|
1100
|
+
}
|
|
1101
|
+
|
|
1102
|
+
// When modifying
|
|
1103
|
+
for (auto& s : vec) {
|
|
1104
|
+
s += "suffix";
|
|
1105
|
+
}
|
|
1106
|
+
```
|
|
1107
|
+
|
|
1108
|
+
### Move Instead of Copy
|
|
1109
|
+
|
|
1110
|
+
```cpp
|
|
1111
|
+
// BAD: Expensive copy
|
|
1112
|
+
std::vector<int> create_large_vector() {
|
|
1113
|
+
std::vector<int> v(1000000);
|
|
1114
|
+
return v; // Copy elision usually applies, but not guaranteed
|
|
1115
|
+
}
|
|
1116
|
+
|
|
1117
|
+
// GOOD: Explicit move (though modern compilers optimize this)
|
|
1118
|
+
std::vector<int> create_large_vector() {
|
|
1119
|
+
std::vector<int> v(1000000);
|
|
1120
|
+
return v; // NRVO (Named Return Value Optimization) applies
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1123
|
+
// When returning member
|
|
1124
|
+
class Container {
|
|
1125
|
+
std::vector<int> data_;
|
|
1126
|
+
public:
|
|
1127
|
+
auto take_data() -> std::vector<int> {
|
|
1128
|
+
return std::move(data_); // Move required here
|
|
1129
|
+
}
|
|
1130
|
+
};
|
|
1131
|
+
```
|
|
1132
|
+
|
|
1133
|
+
---
|
|
1134
|
+
|
|
1135
|
+
Last Updated: 2026-01-10
|
|
1136
|
+
Version: 1.0.0
|