Compatibility philosophy
Familiar organization and useful behavior compatibility—without claiming to reproduce the managed execution environment.
Intended compatibility
- Recognizable
System::*namespaces, type names and porting patterns - Useful behavior compatibility for the implemented subset
- Exception shapes and validation behavior where implementation and tests establish the contract
- A practical bridge for native ports, especially CNA and related framework/game work
What a matching name does not promise
API completeness, every overload, identical representation, identical Unicode units, identical scheduling, or every edge-case result must be checked per subsystem. Native C++ constraints can make exact managed semantics undesirable or impossible.
Intentional exclusions
| Managed facility | Sharp Runtime boundary |
|---|---|
| CLR / JIT / assemblies | No managed execution or arbitrary assembly loading |
| Garbage collection | RAII and explicit native ownership |
| General reflection | Basic type identity only; no metadata universe or member enumeration |
| Dynamic invocation | Delegate::DynamicInvoke is deliberately unsupported |
| P/Invoke / remoting | No general managed interop or AppDomain/remoting infrastructure |
| Serialization infrastructure | No BinaryFormatter-style general object serialization |
| TLS / certificates | No TLS transport, certificate stack or SslStream |
| C# async syntax | Task types do not add language-level async/await to C++ |
Important representation reductions
- Strings are UTF-8
std::string-based; some indices and lengths are storage bytes rather than .NET UTF-16 code units. - Delegates use typed C++ callables; late-bound invocation is absent.
- Reflection is type-identification oriented rather than metadata driven.
- Task scheduling and continuation behavior are implemented with native synchronization and threads, not a CLR scheduler.
Evaluate by surface
Use the component family pages and Known Limitations as the public contract. They separate implemented behavior, reductions, platform limits and non-goals.