4 ms·
It will not work if you low-level target is rp2040 microcontroller board...
by superfist 2y ago
It will not work if you low-level target is rp2040 microcontroller board...
- int_19h 2y agoThere was a port of the .NET Nano Framework for RP2040. But I think the more interesting thing is that if you remove all features in C# that require heap allocations, the resulting subset is basically C with namespaces and generics, which is still useful, and certainly possible to compile efficiently even for very constrained platforms.
- superfist 2y agoYes, it's technically doable, but what’s the point of using it if you lose almost the entire standard library because it relies on the GC?
- neonsunset 2y agoThere is a practical answer to this question: https://github.com/bflattened/bflat https://github.com/bflattened/bflat specifically the --stdlib:zero target. C# is quite a bit more than just enhanced C if you remove GC-reliant features as the generics and interface constraints enable a huge subset of features, alongside SIMD API, stack-allocated buffers and all sorts of memory wrappable in Span<T>s, which almost every method in the standard library that works on some sort of buffer accepts nowadays instead of plain arrays. You can also manually allocate objects - there are multiple ways to go about it and even with the presence of GC, there is a "hidden" but supported API to register a NonGC heap that GC understands when scanning object references. Though effective targeting is limited to much fewer count of platforms. Mono can target as low as ARMv6 but CoreCLR/NativeAOT mainly work with x86, x86_64, ARM and ARM64. For microcontrollers you are better off using Rust in my opinion. But for anything bigger .NET can be a surprisingly capable choice.