CrossNet is a cross platform .NET runtime.
It parses .NET assemblies and generates unmanaged C++ code that can be compiled on any standard C++ compiler.
More than 95% of the .NET 2.0 features are actually "emulated" in C++. CrossNet does not produce managed C++, the generated code is pure ANSI C++.
Even if that’s only an emulation of .NET, the performance and memory usage are usually in the same range as C++ / .NET.
It is important to note that CrossNet’s parser is a Reflector Add-In.
CrossNet is not the same thing as Mono:
CrossNet emulates the .NET runtime but the goal is not to write the full .NET API. Some very rarely used features might not be emulated correctly.
Some tiny portions of the BCL (Base Class Library) have been implemented in C++, but the purpose was mostly for the development of unit-tests.
When using CrossNet, one must provide some BCL implementation (or at least for the classes / methods used).
One can either augment the CrossNet emulation of BCL by using CrossNetSystem (not recommended yet), use Mono’s or write own implementation.
CrossNet can be used where .NET / Mono might not be the best fit:
- The platform is not standard and doesn’t support .NET or Mono.
- JIT cannot be implemented on the platform.
- The platform has some memory constraints.
- Best performance is needed and interpretation is not an option (i.e. Mint or MicroFramework might be too slow).
- A simple code that can be customized and facilitate user’s policy is a plus (memory tracking for example…).
- There is a need for direct interaction with C++ code / compiler.
- The code needs to be easily understandable and maintainable (or could be used to learn how .NET behavior can be emulated).