Useful Links
Computer Science
Programming
Metaprogramming
1. Introduction to Metaprogramming
2. Fundamental Dichotomies
3. Core Techniques and Mechanisms
4. Language-Specific Features and Idioms
5. Metaprogramming Paradigms and Patterns
6. Practical Applications and Use Cases
7. Advanced Topics and Considerations
Language-Specific Features and Idioms
C++ Templates
Template Metaprogramming (TMP)
Compile-Time Computation
Recursive Template Instantiation
Template Specialization
Constant Expression Evaluation
Type Manipulation
Type Deduction
Type Transformation
Template Instantiation Process
Two-Phase Lookup
Template Argument Deduction
Type Traits
Type Detection and Manipulation
Primary Type Categories
Type Properties
Standard Type Traits Library
Implementation Techniques
Custom Type Traits
SFINAE (Substitution Failure Is Not An Error)
Enabling/Disabling Functions Based on Types
Template Specialization
Overload Resolution
Concepts and Constraints (C++20)
Defining Template Requirements
Enforcing Type Constraints
Concept Composition
Variadic Templates
Parameter Pack Expansion
Recursive Template Patterns
Python Metaprogramming
Decorators
Function Decorators
Wrapper Functions
Parameterized Decorators
Class Decorators
Class Modification
Registration Patterns
Chaining and Stacking Decorators
Order of Application
Decorator Composition
Metaclasses
Customizing Class Creation
The `new` Method
The `init` Method
Use Cases for Metaclasses
Singleton Patterns
Attribute Validation
Metaclass Inheritance
Multiple Metaclasses
Metaclass Conflicts
Dynamic Attribute Access
`getattr` and `setattr`
Attribute Resolution
Default Values
Overriding `getattr` and `setattr`
Custom Attribute Behavior
Proxy Objects
Property Descriptors
Data Descriptors
Non-Data Descriptors
The `exec` and `eval` Functions
Dynamic Code Execution
Code Compilation
Namespace Management
Security Considerations
Code Injection Risks
Sandboxing Techniques
Import System Manipulation
Custom Import Hooks
Module Modification
Ruby Metaprogramming
Open Classes and Monkey Patching
Reopening Classes
Adding Methods
Modifying Existing Methods
Risks and Best Practices
Namespace Pollution
Version Compatibility
`method_missing`
Dynamic Method Handling
Method Dispatch
Fallback Mechanisms
Use Cases and Pitfalls
DSL Implementation
Performance Implications
Blocks, Procs, and Lambdas
Passing Code as Data
Closure Semantics
Variable Binding
Defining and Invoking Blocks
Block Parameters
Yield Statements
`define_method`
Creating Methods Dynamically
Method Definition at Runtime
Closure Capture
Use Cases in DSLs
Fluent Interfaces
Configuration Languages
Eigenclasses and Singleton Methods
Per-Object Behavior
Class Method Definition
Lisp Family (Common Lisp, Clojure, Scheme)
Macros and Code-as-Data (Homoiconicity)
Macro Definition and Expansion
Defmacro Syntax
Macro Expansion Process
Manipulating S-Expressions
List Processing
Symbol Manipulation
Quasiquoting and Unquoting
Syntax and Semantics
Backquote Notation
Comma and Comma-At
Building Complex Code Structures
Template Construction
Code Generation Patterns
`eval`
Evaluating Code at Runtime
Environment Handling
Dynamic Compilation
Use Cases and Limitations
Interactive Programming
Performance Considerations
Reader Macros
Custom Syntax Extensions
Parse-Time Transformations
Java Metaprogramming
Reflection API
Inspecting Classes, Methods, and Fields
Class Loading
Member Access
Dynamic Invocation
Method Invocation
Constructor Invocation
Security Considerations
Access Control
Security Managers
Annotations and Annotation Processing
Defining Custom Annotations
Annotation Elements
Retention Policies
Processing Annotations at Compile-Time
Annotation Processors
Code Generation
Runtime Annotation Processing
Reflection-Based Processing
Framework Integration
Bytecode Manipulation Libraries
ASM
Features and Use Cases
Visitor Pattern
Byte Buddy
Features and Use Cases
Agent-Based Modification
Javassist
Features and Use Cases
Source-Level API
Dynamic Proxies
Creating Proxy Classes at Runtime
InvocationHandler Interface
Proxy Generation
Use Cases in Frameworks
AOP Implementation
Remote Procedure Calls
Class Loading and Generation
Custom Class Loaders
Runtime Class Generation
C# Metaprogramming
Reflection and Attributes
Inspecting Types and Members
Type Discovery
Member Enumeration
Defining and Using Attributes
Attribute Classes
Attribute Targets
Dynamic Method Invocation
MethodInfo Usage
Parameter Binding
Expression Trees
Building and Compiling Expressions
Expression Construction
Lambda Compilation
Use in LINQ and Dynamic Queries
Query Translation
Provider Patterns
Source Generators
Generating Code at Compile-Time
Generator Implementation
Incremental Generation
Integration with Build Tools
MSBuild Integration
IDE Support
IL Weaving
Modifying Intermediate Language Code
IL Instruction Manipulation
Method Body Modification
Tools and Frameworks
PostSharp
Fody
Dynamic Language Runtime (DLR)
Dynamic Object Protocol
Language Interoperability
Previous
3. Core Techniques and Mechanisms
Go to top
Next
5. Metaprogramming Paradigms and Patterns