Skip to content

XC8++ Research Findings

Project Status: Working Transpiler

Current Achievement

  • Clang-based transpiler implemented using semantic AST analysis
  • Generated C code compiles successfully with XC8
  • Semantic transformation replaces unreliable string manipulation
  • Apache 2.0 + LLVM Exceptions licensing (compatible with Clang)

Technical Architecture Analysis

XC8 Compiler Investigation

Key Discovery: XC8 uses Clang 18.1.8 as its frontend (not GCC as initially expected)

What Works

  • ✅ C++ syntax parsing with clang -x c++
  • ✅ Full Clang AST analysis capability
  • ✅ C compilation through normal XC8 pipeline

Critical Limitation

  • PIC target backend lacks C++ code generation
  • ❌ Backend crashes with access violation (0xC0000005)
  • ❌ Direct C++ compilation impossible

Implementation Strategy

Due to backend limitations, we implemented source-to-source translation:

  1. Parse C++: Use XC8's Clang for AST analysis
  2. Transform: Convert C++ constructs to equivalent C
  3. Compile: Use standard XC8 for generated C code

C++ Feature Support Matrix

Feature Status Implementation
Classes ✅ Working C structs + function pointers
Member Functions ✅ Working C functions with explicit this
Constructors/Destructors ✅ Working Explicit init/cleanup functions
Basic Inheritance 🔄 Planned Struct composition
Function Overloading 🔄 Planned Name mangling
Namespaces 🔄 Planned Prefix-based naming
Templates ❌ Complex May require macro expansion
STL ❌ Not feasible Memory constraints

Memory Constraints

8-bit PIC microcontrollers have significant limitations: - RAM: Typically 256 bytes to 4KB - ROM: 8KB to 128KB program memory - Stack: Very limited, no dynamic allocation

These constraints guide C++ feature selection and implementation strategies.

Comparison with xc16plusplus

Aspect xc16plusplus xc8plusplus
Approach GCC source modification Source-to-source translation
Architecture Direct C++ compilation C++ → C → compilation
Complexity Compiler internals AST transformation
Maintenance GCC version dependent Clang API dependent
Features Full C++ support Subset optimized for 8-bit

Technical Validation

Test Results

Input:  C++ class with methods
Output: Equivalent C structs/functions  
Result: ✅ XC8 compilation successful

Code Quality

  • Generated C code follows XC8 conventions
  • Memory-efficient struct layouts
  • Optimized for embedded constraints
  • Maintains semantic equivalence