Important (June 2026): This page documents only true architectural constraints. Previous versions listed features that have since been fully implemented—see architecture for what Symmetra actually supports.
✅ Fully Supported: Async/await with CUDA streams · Complete regex engine (170/170 JS/TS features) · Array.push/pop/shift · eval() with runtime JIT · Promise.all/race/any · Dynamic memory · Full JavaScript language
---String handling is ASCII/UTF-8 bytes only. Standard ASCII case methods work, but no Unicode normalization or locale-aware operations.
// Works:
"alice".toUpperCase(); // ✓ "ALICE"
// Doesn't work:
"👍".toUpperCase(); // ✗ Returns "👍"
"naïve".normalize('NFKC'); // ✗ No-op
Full Unicode (ICU library) is 20+ MB. GPU kernels use simple byte-level ASCII.
Pre-process on CPU (1–5µs):
const normalized = str.normalize('NFKC').toLowerCase();
const result = gpu.process({ input: normalized });
Error.stack is unavailable in GPU kernels. You get message + location, not the full call chain.
Parallel execution (256+ threads) makes full unwinding expensive.
Log at CPU/GPU boundaries:
console.log('→ GPU:', { input });
try {
result = gpu.compute(input);
} catch (err) {
console.error('GPU error:', { error: err.message, input });
}
Proxy and Reflect parse but don't intercept property access transparently.
Transparent interception requires overhead on every property access. GPU code prioritizes performance.
Validate upfront:
if (typeof data.id !== 'number') throw new Error('Invalid');
const result = gpu.process(data);
| Constraint | Impact | Workaround |
|---|---|---|
| Unicode | Low | Pre-normalize on CPU |
| Stack Traces | Low | Log at boundaries |
| Proxy/Reflect | Low | Validate upfront |
Last updated: June 5, 2026 · Architecture docs